From 0425aadc78680e53000fd0108b540d6eca048516 Mon Sep 17 00:00:00 2001 From: gmcdonald Date: Sat, 13 Feb 2010 01:32:03 +0000 Subject: Moving axis svn, part of TLP move INFRA-2441 git-svn-id: http://svn.apache.org/repos/asf/axis/axis2/c/core/trunk@909681 13f79535-47bb-0310-9956-ffa450edef68 --- AUTHORS | 26 + COPYING | 1 + CREDITS | 11 + ChangeLog | 221 + INSTALL | 835 +++ LICENSE | 203 + Makefile.am | 53 + NEWS | 98 + NOTICE | 11 + README | 88 + autogen.sh | 69 + axiom/AUTHORS | 0 axiom/COPYING | 203 + axiom/CREDITS | 0 axiom/ChangeLog | 6 + axiom/INSTALL | 14 + axiom/LICENSE | 203 + axiom/Makefile.am | 9 + axiom/NEWS | 7 + axiom/README | 57 + axiom/autogen.sh | 50 + axiom/build.sh | 7 + axiom/configure.ac | 179 + axiom/include/Makefile.am | 1 + axiom/include/axiom.h | 57 + axiom/include/axiom_attribute.h | 263 + axiom/include/axiom_child_element_iterator.h | 124 + axiom/include/axiom_children_iterator.h | 123 + axiom/include/axiom_children_qname_iterator.h | 107 + ...iom_children_with_specific_attribute_iterator.h | 128 + axiom/include/axiom_comment.h | 115 + axiom/include/axiom_data_handler.h | 260 + axiom/include/axiom_data_source.h | 111 + axiom/include/axiom_defines.h | 40 + axiom/include/axiom_doctype.h | 120 + axiom/include/axiom_document.h | 173 + axiom/include/axiom_element.h | 747 +++ axiom/include/axiom_mime_const.h | 56 + axiom/include/axiom_mime_parser.h | 220 + axiom/include/axiom_mime_part.h | 131 + axiom/include/axiom_mtom_caching_callback.h | 114 + axiom/include/axiom_mtom_sending_callback.h | 112 + axiom/include/axiom_namespace.h | 201 + axiom/include/axiom_navigator.h | 121 + axiom/include/axiom_node.h | 379 ++ axiom/include/axiom_output.h | 254 + axiom/include/axiom_processing_instruction.h | 136 + axiom/include/axiom_soap.h | 53 + axiom/include/axiom_soap_body.h | 184 + axiom/include/axiom_soap_builder.h | 253 + axiom/include/axiom_soap_const.h | 176 + axiom/include/axiom_soap_envelope.h | 244 + axiom/include/axiom_soap_fault.h | 215 + axiom/include/axiom_soap_fault_code.h | 120 + axiom/include/axiom_soap_fault_detail.h | 111 + axiom/include/axiom_soap_fault_node.h | 112 + axiom/include/axiom_soap_fault_reason.h | 139 + axiom/include/axiom_soap_fault_role.h | 109 + axiom/include/axiom_soap_fault_sub_code.h | 123 + axiom/include/axiom_soap_fault_text.h | 138 + axiom/include/axiom_soap_fault_value.h | 120 + axiom/include/axiom_soap_header.h | 205 + axiom/include/axiom_soap_header_block.h | 228 + axiom/include/axiom_stax_builder.h | 154 + axiom/include/axiom_text.h | 265 + axiom/include/axiom_util.h | 396 ++ axiom/include/axiom_xml_reader.h | 706 ++ axiom/include/axiom_xml_writer.h | 1014 +++ axiom/include/axiom_xpath.h | 407 ++ axiom/src/Makefile.am | 2 + axiom/src/attachments/Makefile.am | 15 + axiom/src/attachments/axiom_mime_body_part.h | 121 + axiom/src/attachments/data_handler.c | 572 ++ axiom/src/attachments/mime_body_part.c | 284 + axiom/src/attachments/mime_parser.c | 2304 +++++++ axiom/src/attachments/mime_part.c | 535 ++ axiom/src/om/Makefile.am | 35 + axiom/src/om/axiom_namespace_internal.h | 46 + axiom/src/om/axiom_node_internal.h | 165 + axiom/src/om/axiom_stax_builder_internal.h | 75 + axiom/src/om/om_attribute.c | 433 ++ axiom/src/om/om_child_element_iterator.c | 119 + axiom/src/om/om_children_iterator.c | 138 + axiom/src/om/om_children_qname_iterator.c | 190 + .../om_children_with_specific_attribute_iterator.c | 177 + axiom/src/om/om_comment.c | 142 + axiom/src/om/om_data_source.c | 133 + axiom/src/om/om_doctype.c | 131 + axiom/src/om/om_document.c | 263 + axiom/src/om/om_element.c | 1818 +++++ axiom/src/om/om_namespace.c | 385 ++ axiom/src/om/om_navigator.c | 206 + axiom/src/om/om_node.c | 1455 ++++ axiom/src/om/om_output.c | 638 ++ axiom/src/om/om_processing_instruction.c | 187 + axiom/src/om/om_stax_builder.c | 1072 +++ axiom/src/om/om_text.c | 637 ++ axiom/src/parser/Makefile.am | 3 + axiom/src/parser/guththila/Makefile.am | 13 + .../guththila/guththila_xml_reader_wrapper.c | 613 ++ .../guththila/guththila_xml_writer_wrapper.c | 787 +++ axiom/src/parser/libxml2/Makefile.am | 17 + axiom/src/parser/libxml2/libxml2_reader_wrapper.c | 949 +++ axiom/src/parser/libxml2/libxml2_writer_wrapper.c | 1571 +++++ axiom/src/parser/xml_reader.c | 203 + axiom/src/parser/xml_writer.c | 337 + axiom/src/soap/Makefile.am | 33 + axiom/src/soap/_axiom_soap_body.h | 69 + axiom/src/soap/_axiom_soap_envelope.h | 84 + axiom/src/soap/_axiom_soap_fault.h | 105 + axiom/src/soap/_axiom_soap_fault_code.h | 91 + axiom/src/soap/_axiom_soap_fault_detail.h | 60 + axiom/src/soap/_axiom_soap_fault_node.h | 60 + axiom/src/soap/_axiom_soap_fault_reason.h | 87 + axiom/src/soap/_axiom_soap_fault_role.h | 60 + axiom/src/soap/_axiom_soap_fault_sub_code.h | 93 + axiom/src/soap/_axiom_soap_fault_text.h | 60 + axiom/src/soap/_axiom_soap_fault_value.h | 60 + axiom/src/soap/_axiom_soap_header.h | 77 + axiom/src/soap/_axiom_soap_header_block.h | 66 + axiom/src/soap/axiom_soap11_builder_helper.h | 71 + axiom/src/soap/axiom_soap12_builder_helper.h | 71 + axiom/src/soap/soap11_builder_helper.c | 340 + axiom/src/soap/soap12_builder_helper.c | 718 ++ axiom/src/soap/soap_body.c | 547 ++ axiom/src/soap/soap_builder.c | 1206 ++++ axiom/src/soap/soap_envelope.c | 631 ++ axiom/src/soap/soap_fault.c | 630 ++ axiom/src/soap/soap_fault_code.c | 308 + axiom/src/soap/soap_fault_detail.c | 160 + axiom/src/soap/soap_fault_node.c | 176 + axiom/src/soap/soap_fault_reason.c | 386 ++ axiom/src/soap/soap_fault_role.c | 180 + axiom/src/soap/soap_fault_sub_code.c | 298 + axiom/src/soap/soap_fault_text.c | 305 + axiom/src/soap/soap_fault_value.c | 237 + axiom/src/soap/soap_header.c | 655 ++ axiom/src/soap/soap_header_block.c | 460 ++ axiom/src/util/Makefile.am | 8 + axiom/src/util/om_util.c | 1181 ++++ axiom/src/xpath/Makefile.am | 22 + axiom/src/xpath/xpath.c | 462 ++ axiom/src/xpath/xpath_functions.c | 46 + axiom/src/xpath/xpath_functions.h | 47 + axiom/src/xpath/xpath_internals.c | 38 + axiom/src/xpath/xpath_internals.h | 199 + axiom/src/xpath/xpath_internals_engine.c | 1203 ++++ axiom/src/xpath/xpath_internals_engine.h | 265 + axiom/src/xpath/xpath_internals_iterators.c | 588 ++ axiom/src/xpath/xpath_internals_iterators.h | 298 + axiom/src/xpath/xpath_internals_parser.c | 1245 ++++ axiom/src/xpath/xpath_internals_parser.h | 421 ++ axiom/src/xpath/xpath_streaming.c | 213 + axiom/src/xpath/xpath_streaming.h | 126 + axiom/test/Makefile.am | 3 + axiom/test/om/Makefile.am | 13 + axiom/test/om/test_om.c | 402 ++ axiom/test/resources/wsdl/Attachment1.wsdl | 76 + axiom/test/resources/wsdl/AttachmentService.wsdl | 139 + axiom/test/resources/wsdl/AxisBench.wsdl | 108 + axiom/test/resources/wsdl/BasicAllTest.wsdl | 102 + axiom/test/resources/wsdl/BasicChoice.wsdl | 104 + axiom/test/resources/wsdl/Calculator.wsdl | 135 + axiom/test/resources/wsdl/CalculatorDoc.wsdl | 255 + axiom/test/resources/wsdl/Choice.wsdl | 104 + axiom/test/resources/wsdl/CombinedAllTest.wsdl | 109 + axiom/test/resources/wsdl/CombinedChoice.wsdl | 110 + axiom/test/resources/wsdl/ComplexLists.wsdl | 192 + axiom/test/resources/wsdl/ComplexTypeAll.wsdl | 81 + axiom/test/resources/wsdl/DIClientDoc.wsdl | 96 + axiom/test/resources/wsdl/DataHandlerService.wsdl | 291 + axiom/test/resources/wsdl/Enumeration.wsdl | 108 + axiom/test/resources/wsdl/ExceptionTest.wsdl | 97 + axiom/test/resources/wsdl/ExceptionTestDoc.wsdl | 160 + axiom/test/resources/wsdl/ExtensibilityQuery.wsdl | 154 + axiom/test/resources/wsdl/FaultMapping.wsdl | 97 + axiom/test/resources/wsdl/FaultMappingDoc.wsdl | 160 + axiom/test/resources/wsdl/FourLevelTestDoc.wsdl | 73 + axiom/test/resources/wsdl/InOut.wsdl | 429 ++ axiom/test/resources/wsdl/InteropTestRound1.wsdl | 333 + .../test/resources/wsdl/InteropTestRound1Doc.wsdl | 774 +++ .../test/resources/wsdl/LargeReturningString.wsdl | 95 + axiom/test/resources/wsdl/LimitedAllTest.wsdl | 103 + axiom/test/resources/wsdl/ManyTypeRefRoot.wsdl | 89 + axiom/test/resources/wsdl/MathOps.wsdl | 71 + axiom/test/resources/wsdl/MathOpsDoc.wsdl | 118 + axiom/test/resources/wsdl/MinOccurTest.wsdl | 107 + axiom/test/resources/wsdl/MultiOut.wsdl | 139 + axiom/test/resources/wsdl/NestedArrays.wsdl | 105 + axiom/test/resources/wsdl/NestedComplex.wsdl | 130 + axiom/test/resources/wsdl/NillableArrays.wsdl | 266 + axiom/test/resources/wsdl/OtherFaultException.wsdl | 97 + axiom/test/resources/wsdl/PlainTextAttachment.wsdl | 69 + axiom/test/resources/wsdl/PrimitiveAndArray.wsdl | 155 + axiom/test/resources/wsdl/RPCAllTest.wsdl | 101 + axiom/test/resources/wsdl/RecurseTypes.wsdl | 101 + axiom/test/resources/wsdl/RpcHttpHeaderTest1.wsdl | 333 + axiom/test/resources/wsdl/RpcHttpHeaderTest2.wsdl | 333 + axiom/test/resources/wsdl/RpcHttpHeaderTest3.wsdl | 333 + axiom/test/resources/wsdl/RpcHttpHeaderTest4.wsdl | 333 + axiom/test/resources/wsdl/RpcHttpHeaderTest5.wsdl | 333 + axiom/test/resources/wsdl/RpcHttpHeaderTest7.wsdl | 333 + axiom/test/resources/wsdl/RpcHttpHeaderTest8.wsdl | 333 + axiom/test/resources/wsdl/RpcSoapHeaderTest1.wsdl | 333 + axiom/test/resources/wsdl/RpcSoapHeaderTest10.wsdl | 333 + axiom/test/resources/wsdl/RpcSoapHeaderTest2.wsdl | 333 + axiom/test/resources/wsdl/RpcSoapHeaderTest3.wsdl | 333 + axiom/test/resources/wsdl/RpcSoapHeaderTest4.wsdl | 333 + axiom/test/resources/wsdl/RpcSoapHeaderTest6.wsdl | 333 + axiom/test/resources/wsdl/RpcSoapHeaderTest8.wsdl | 333 + axiom/test/resources/wsdl/RpcSoapHeaderTest9.wsdl | 333 + axiom/test/resources/wsdl/SimpleArray.wsdl | 64 + axiom/test/resources/wsdl/SimpleArrayDoc.wsdl | 85 + axiom/test/resources/wsdl/SimpleArrays.wsdl | 299 + axiom/test/resources/wsdl/SimpleChoice.wsdl | 104 + axiom/test/resources/wsdl/SimpleRef.wsdl | 114 + axiom/test/resources/wsdl/SimpleRefDoc.wsdl | 100 + axiom/test/resources/wsdl/SimpleTypeArray.wsdl | 75 + .../resources/wsdl/SimpleTypeInnerUnbounded.wsdl | 113 + .../wsdl/SimpleTypeInnerUnboundedInOutput.wsdl | 113 + axiom/test/resources/wsdl/StockQuotes.wsdl | 48 + .../test/resources/wsdl/TestTransportTimeout.wsdl | 255 + axiom/test/resources/wsdl/UDDI.wsdl | 32 + axiom/test/resources/wsdl/UnboundedChoice.wsdl | 104 + .../test/resources/wsdl/UnboundedStringChoice.wsdl | 104 + axiom/test/resources/wsdl/XSDAttribute.wsdl | 1046 +++ axiom/test/resources/wsdl/XSDElement.wsdl | 1422 ++++ axiom/test/resources/wsdl/XSDElementNil.wsdl | 1414 ++++ axiom/test/resources/wsdl/XSD_ENTITIES.wsdl | 285 + axiom/test/resources/wsdl/XSD_ENTITY.wsdl | 285 + axiom/test/resources/wsdl/XSD_ID.wsdl | 285 + axiom/test/resources/wsdl/XSD_IDREF.wsdl | 285 + axiom/test/resources/wsdl/XSD_IDREFS.wsdl | 285 + axiom/test/resources/wsdl/XSD_NCName.wsdl | 285 + axiom/test/resources/wsdl/XSD_NMTOKEN.wsdl | 285 + axiom/test/resources/wsdl/XSD_NMTOKENS.wsdl | 285 + axiom/test/resources/wsdl/XSD_NOTATION.wsdl | 285 + axiom/test/resources/wsdl/XSD_Name.wsdl | 285 + axiom/test/resources/wsdl/XSD_QName.wsdl | 285 + axiom/test/resources/wsdl/XSD_anyURI.wsdl | 285 + axiom/test/resources/wsdl/XSD_base64Binary.wsdl | 285 + axiom/test/resources/wsdl/XSD_boolean.wsdl | 285 + axiom/test/resources/wsdl/XSD_byte.wsdl | 285 + axiom/test/resources/wsdl/XSD_date.wsdl | 285 + axiom/test/resources/wsdl/XSD_dateTime.wsdl | 285 + axiom/test/resources/wsdl/XSD_decimal.wsdl | 285 + axiom/test/resources/wsdl/XSD_double.wsdl | 285 + axiom/test/resources/wsdl/XSD_duration.wsdl | 285 + axiom/test/resources/wsdl/XSD_float.wsdl | 285 + axiom/test/resources/wsdl/XSD_gDay.wsdl | 285 + axiom/test/resources/wsdl/XSD_gMonth.wsdl | 285 + axiom/test/resources/wsdl/XSD_gMonthDay.wsdl | 285 + axiom/test/resources/wsdl/XSD_gYear.wsdl | 285 + axiom/test/resources/wsdl/XSD_gYearMonth.wsdl | 285 + axiom/test/resources/wsdl/XSD_hexBinary.wsdl | 285 + axiom/test/resources/wsdl/XSD_int.wsdl | 285 + axiom/test/resources/wsdl/XSD_integer.wsdl | 285 + axiom/test/resources/wsdl/XSD_language.wsdl | 285 + axiom/test/resources/wsdl/XSD_long.wsdl | 285 + axiom/test/resources/wsdl/XSD_negativeInteger.wsdl | 285 + .../resources/wsdl/XSD_nonNegativeInteger.wsdl | 285 + .../resources/wsdl/XSD_nonPositiveInteger.wsdl | 285 + .../test/resources/wsdl/XSD_normalizedString.wsdl | 285 + axiom/test/resources/wsdl/XSD_positiveInteger.wsdl | 285 + axiom/test/resources/wsdl/XSD_short.wsdl | 285 + axiom/test/resources/wsdl/XSD_string.wsdl | 285 + axiom/test/resources/wsdl/XSD_time.wsdl | 285 + axiom/test/resources/wsdl/XSD_token.wsdl | 285 + axiom/test/resources/wsdl/XSD_unsignedByte.wsdl | 285 + axiom/test/resources/wsdl/XSD_unsignedInt.wsdl | 285 + axiom/test/resources/wsdl/XSD_unsignedLong.wsdl | 285 + axiom/test/resources/wsdl/XSD_unsignedShort.wsdl | 285 + axiom/test/resources/wsdl/inquire_v2.wsdl | 275 + axiom/test/resources/wsdl/nillableComplexType.wsdl | 78 + axiom/test/resources/wsdl/nillableComplexType.xsd | 26 + axiom/test/resources/wsdl/wsaTestService.wsdl | 53 + axiom/test/resources/xml/om/axis.xml | 25 + axiom/test/resources/xml/om/basic.xml | 11 + axiom/test/resources/xml/om/basicupdate.xml | 47 + axiom/test/resources/xml/om/contents.xml | 70 + axiom/test/resources/xml/om/defaultNamespace.xml | 6 + axiom/test/resources/xml/om/evaluate.xml | 28 + axiom/test/resources/xml/om/fibo.xml | 29 + axiom/test/resources/xml/om/id.xml | 21 + axiom/test/resources/xml/om/jaxen24.xml | 2 + axiom/test/resources/xml/om/jaxen3.xml | 15 + axiom/test/resources/xml/om/lang.xml | 11 + axiom/test/resources/xml/om/message.xml | 27 + axiom/test/resources/xml/om/moreover.xml | 244 + axiom/test/resources/xml/om/much_ado.xml | 6850 +++++++++++++++++++ axiom/test/resources/xml/om/namespaces.xml | 18 + axiom/test/resources/xml/om/nitf.xml | 67 + axiom/test/resources/xml/om/numbers.xml | 18 + axiom/test/resources/xml/om/pi.xml | 13 + axiom/test/resources/xml/om/pi2.xml | 6 + axiom/test/resources/xml/om/simple.xml | 2 + axiom/test/resources/xml/om/spaces.xml | 10 + axiom/test/resources/xml/om/test.xml | 12 + axiom/test/resources/xml/om/testNamespaces.xml | 22 + axiom/test/resources/xml/om/underscore.xml | 6 + axiom/test/resources/xml/om/web.xml | 42 + axiom/test/resources/xml/om/web2.xml | 7 + axiom/test/resources/xml/soap/OMElementTest.xml | 22 + .../xml/soap/badsoap/bodyNotQualified.xml | 19 + .../resources/xml/soap/badsoap/envelopeMissing.xml | 20 + .../xml/soap/badsoap/haederBodyWrongOrder.xml | 20 + .../xml/soap/badsoap/notnamespaceQualified.xml | 15 + .../resources/xml/soap/badsoap/twoBodymessage.xml | 24 + .../test/resources/xml/soap/badsoap/twoheaders.xml | 29 + .../resources/xml/soap/badsoap/wrongSoapNs.xml | 20 + axiom/test/resources/xml/soap/emtyBodymessage.xml | 18 + .../xml/soap/invalidMustUnderstandSOAP12.xml | 13 + axiom/test/resources/xml/soap/minimalMessage.xml | 4 + .../resources/xml/soap/reallyReallyBigMessage.xml | 2529 +++++++ axiom/test/resources/xml/soap/sample1.txt | 12 + axiom/test/resources/xml/soap/sample1.xml | 9 + axiom/test/resources/xml/soap/security2-soap.xml | 54 + .../test/resources/xml/soap/soap11/soap11fault.xml | 16 + .../resources/xml/soap/soap11/soap11message.xml | 46 + axiom/test/resources/xml/soap/soap12message.xml | 58 + axiom/test/resources/xml/soap/soapmessage.txt | 16 + axiom/test/resources/xml/soap/soapmessage.xml | 20 + axiom/test/resources/xml/soap/soapmessage1.xml | 27 + axiom/test/resources/xml/soap/test.xml | 59 + .../test/resources/xml/soap/whitespacedMessage.xml | 27 + .../resources/xml/soap/wrongEnvelopeNamespace.xml | 12 + axiom/test/soap/Makefile.am | 13 + axiom/test/soap/test_soap.c | 550 ++ axiom/test/util/Makefile.am | 8 + axiom/test/util/axiom_util_test.c | 168 + axiom/test/util/build.sh | 2 + axiom/test/util/test.xml | 7 + axiom/test/xpath/Makefile.am | 20 + axiom/test/xpath/results.txt | 616 ++ axiom/test/xpath/test.ns | 2 + axiom/test/xpath/test.xml | 55 + axiom/test/xpath/test.xpath | 37 + axiom/test/xpath/test_xpath.c | 513 ++ axiom/test/xpath/test_xpath_streaming.c | 468 ++ axis2c.pc.in | 12 + axis2c_build.sh | 23 + bindist.sh | 65 + build.sh | 17 + build/win32/axis2_env.bat | 7 + build/win32/bindist.bat | 13 + build/win32/build.bat | 13 + build/win32/clean.bat | 2 + build/win32/configure.in | 73 + build/win32/makefile | 1454 ++++ clean.sh | 7 + configure.ac | 510 ++ dist.sh | 36 + docs/README | 1 + guththila/AUTHORS | 0 guththila/COPYING | 203 + guththila/ChangeLog | 0 guththila/INSTALL | 12 + guththila/LICENSE | 203 + guththila/Makefile.am | 12 + guththila/NEWS | 0 guththila/README | 41 + guththila/autogen.sh | 51 + guththila/build.sh | 4 + guththila/configure.ac | 81 + guththila/include/guththila.h | 353 + guththila/include/guththila_attribute.h | 127 + guththila/include/guththila_buffer.h | 152 + guththila/include/guththila_defines.h | 73 + guththila/include/guththila_error.h | 96 + guththila/include/guththila_namespace.h | 76 + guththila/include/guththila_reader.h | 115 + guththila/include/guththila_stack.h | 96 + guththila/include/guththila_token.h | 174 + guththila/include/guththila_xml_writer.h | 507 ++ guththila/samples/guththila_main.c | 186 + guththila/samples/guththila_writer_main.c | 71 + guththila/src/Makefile.am | 18 + guththila/src/guththila_attribute.c | 144 + guththila/src/guththila_buffer.c | 134 + guththila/src/guththila_namespace.c | 139 + guththila/src/guththila_reader.c | 115 + guththila/src/guththila_stack.c | 135 + guththila/src/guththila_token.c | 221 + guththila/src/guththila_xml_parser.c | 1792 +++++ guththila/src/guththila_xml_writer.c | 2082 ++++++ guththila/tests/resources/om | 1 + guththila/tests/resources/soap | 1 + guththila/tests/s | 13 + guththila/tests/test.c | 200 + guththila/tests/test.h | 23 + guththila/tests/test_attribute.c | 84 + ides/Makefile.am | 2 + ides/README | 1 + ides/vc/axis2c/axiom/axiom.vcproj | 623 ++ ides/vc/axis2c/axis2_engine/axis2_engine.vcproj | 950 +++ .../axis2_http_receiver/axis2_http_receiver.vcproj | 225 + .../axis2_http_sender/axis2_http_sender.vcproj | 279 + .../axis2_http_server/axis2_http_server.vcproj | 242 + .../vc/axis2c/axis2_mod_addr/axis2_mod_addr.vcproj | 240 + ides/vc/axis2c/axis2_mod_log/axis2_mod_log.vcproj | 235 + ides/vc/axis2c/axis2_parser/axis2_parser.vcproj | 226 + .../axis2_parser_guththila.vcproj | 224 + .../axis2_tcp_receiver/axis2_tcp_receiver.vcproj | 232 + .../axis2_tcp_sender/axis2_tcp_sender.vcproj | 243 + .../axis2_tcp_server/axis2_tcp_server.vcproj | 223 + ides/vc/axis2c/axis2_xpath/axis2_xpath.vcproj | 253 + ides/vc/axis2c/axis2c.sln | 343 + ides/vc/axis2c/axutil/axutil.vcproj | 645 ++ ides/vc/axis2c/clients/clients.sln | 92 + ides/vc/axis2c/clients/echo/echo.vcproj | 217 + .../clients/echo_blocking/echo_blocking.vcproj | 222 + .../echo_blocking_addr/echo_blocking_addr.vcproj | 222 + .../echo_blocking_auth/echo_blocking_auth.vcproj | 221 + .../echo_blocking_dual/echo_blocking_dual.vcproj | 222 + .../echo_non_blocking/echo_non_blocking.vcproj | 222 + .../echo_non_blocking_dual.vcproj | 222 + ides/vc/axis2c/clients/echo_rest/echo_rest.vcproj | 222 + ides/vc/axis2c/clients/google/google.vcproj | 206 + ides/vc/axis2c/clients/math/math.vcproj | 214 + ides/vc/axis2c/clients/mtom/mtom.vcproj | 206 + ides/vc/axis2c/clients/notify/notify.vcproj | 206 + ides/vc/axis2c/clients/yahoo/yahoo.vcproj | 206 + ides/vc/axis2c/guththila/guththila.sln | 26 + ides/vc/axis2c/guththila/guththila.vcproj | 275 + ides/vc/axis2c/mod_axis2/mod_axis2.sln | 20 + ides/vc/axis2c/mod_axis2/mod_axis2.vcproj | 240 + ides/vc/axis2c/mod_axis2_IIS/mod_axis2_IIS.sln | 20 + ides/vc/axis2c/mod_axis2_IIS/mod_axis2_IIS.vcproj | 270 + ides/vc/axis2c/neethi/neethi.vcproj | 770 +++ .../axis2c/services/Calculator/Calculator.vcproj | 223 + ides/vc/axis2c/services/echo/echo.vcproj | 227 + ides/vc/axis2c/services/math/math.vcproj | 222 + ides/vc/axis2c/services/mtom/mtom.vcproj | 222 + ides/vc/axis2c/services/notify/notify.vcproj | 222 + ides/vc/axis2c/services/services.sln | 44 + ides/vc/axis2c/tcpmon/tcpmon.sln | 20 + ides/vc/axis2c/tcpmon/tcpmon.vcproj | 249 + ides/vc/samples/clients/clients.sln | 86 + ides/vc/samples/clients/echo/echo.vcproj | 208 + .../clients/echo_blocking/echo_blocking.vcproj | 208 + .../echo_blocking_addr/echo_blocking_addr.vcproj | 208 + .../echo_blocking_dual/echo_blocking_dual.vcproj | 208 + .../echo_non_blocking/echo_non_blocking.vcproj | 208 + .../echo_non_blocking_dual.vcproj | 208 + ides/vc/samples/clients/echo_rest/echo_rest.vcproj | 208 + ides/vc/samples/clients/google/google.vcproj | 200 + ides/vc/samples/clients/math/math.vcproj | 209 + ides/vc/samples/clients/mtom/mtom.vcproj | 201 + ides/vc/samples/clients/notify/notify.vcproj | 200 + ides/vc/samples/clients/yahoo/yahoo.vcproj | 200 + .../samples/services/Calculator/Calculator.vcproj | 210 + ides/vc/samples/services/echo/echo.vcproj | 210 + ides/vc/samples/services/math/math.vcproj | 209 + ides/vc/samples/services/mtom/mtom.vcproj | 209 + ides/vc/samples/services/notify/notify.vcproj | 209 + ides/vc/samples/services/services.sln | 44 + ides/vc6/axis2c/README.txt | 37 + ides/vc6/axis2c/axiom/axiom.dsp | 1715 +++++ ides/vc6/axis2c/axis2_engine/axis2_engine.dsp | 6060 +++++++++++++++++ .../axis2_http_receiver/axis2_http_receiver.dsp | 115 + .../axis2c/axis2_http_sender/axis2_http_sender.dsp | 123 + .../axis2c/axis2_http_server/axis2_http_server.dsp | 188 + ides/vc6/axis2c/axis2_mod_addr/axis2_mod_addr.dsp | 119 + ides/vc6/axis2c/axis2_mod_log/axis2_mod_log.dsp | 123 + ides/vc6/axis2c/axis2_parser/axis2_parser.dsp | 180 + .../axis2_tcp_receiver/axis2_tcp_receiver.dsp | 119 + .../axis2c/axis2_tcp_sender/axis2_tcp_sender.dsp | 131 + .../axis2c/axis2_tcp_server/axis2_tcp_server.dsp | 106 + ides/vc6/axis2c/axis2c.dsw | 218 + ides/vc6/axis2c/axutil/axutil.dsp | 1287 ++++ ides/vc6/axis2c/mod_axis2/mod_axis2.dsp | 131 + ides/vc6/axis2c/mod_axis2_IIS/mod_axis2_IIS.dsp | 147 + ides/vc6/axis2c/neethi/neethi.dsp | 7057 ++++++++++++++++++++ ides/vc9/axis2c/axiom/axiom.vcproj | 620 ++ ides/vc9/axis2c/axis2_engine/axis2_engine.vcproj | 946 +++ .../axis2_http_receiver/axis2_http_receiver.vcproj | 221 + .../axis2_http_sender/axis2_http_sender.vcproj | 274 + .../axis2_http_server/axis2_http_server.vcproj | 234 + .../axis2c/axis2_mod_addr/axis2_mod_addr.vcproj | 235 + ides/vc9/axis2c/axis2_mod_log/axis2_mod_log.vcproj | 231 + ides/vc9/axis2c/axis2_parser/axis2_parser.vcproj | 224 + .../axis2_parser_guththila.vcproj | 221 + .../axis2_tcp_receiver/axis2_tcp_receiver.vcproj | 227 + .../axis2_tcp_sender/axis2_tcp_sender.vcproj | 238 + .../axis2_tcp_server/axis2_tcp_server.vcproj | 217 + ides/vc9/axis2c/axis2_xpath/axis2_xpath.vcproj | 252 + ides/vc9/axis2c/axis2c.sln | 343 + ides/vc9/axis2c/axutil/axutil.vcproj | 644 ++ ides/vc9/axis2c/clients/clients.sln | 92 + ides/vc9/axis2c/clients/echo/echo.vcproj | 213 + .../clients/echo_blocking/echo_blocking.vcproj | 218 + .../echo_blocking_addr/echo_blocking_addr.vcproj | 218 + .../echo_blocking_auth/echo_blocking_auth.vcproj | 217 + .../echo_blocking_dual/echo_blocking_dual.vcproj | 218 + .../echo_non_blocking/echo_non_blocking.vcproj | 218 + .../echo_non_blocking_dual.vcproj | 218 + ides/vc9/axis2c/clients/echo_rest/echo_rest.vcproj | 218 + ides/vc9/axis2c/clients/google/google.vcproj | 204 + ides/vc9/axis2c/clients/math/math.vcproj | 212 + ides/vc9/axis2c/clients/mtom/mtom.vcproj | 204 + ides/vc9/axis2c/clients/notify/notify.vcproj | 204 + ides/vc9/axis2c/clients/yahoo/yahoo.vcproj | 204 + ides/vc9/axis2c/guththila/guththila.sln | 26 + ides/vc9/axis2c/guththila/guththila.vcproj | 273 + ides/vc9/axis2c/mod_axis2/mod_axis2.sln | 20 + ides/vc9/axis2c/mod_axis2/mod_axis2.vcproj | 236 + ides/vc9/axis2c/mod_axis2_IIS/mod_axis2_IIS.sln | 20 + ides/vc9/axis2c/mod_axis2_IIS/mod_axis2_IIS.vcproj | 264 + ides/vc9/axis2c/neethi/neethi.vcproj | 767 +++ .../axis2c/services/Calculator/Calculator.vcproj | 219 + ides/vc9/axis2c/services/echo/echo.vcproj | 222 + ides/vc9/axis2c/services/math/math.vcproj | 218 + ides/vc9/axis2c/services/mtom/mtom.vcproj | 218 + ides/vc9/axis2c/services/notify/notify.vcproj | 218 + ides/vc9/axis2c/services/services.sln | 44 + ides/vc9/axis2c/tcpmon/tcpmon.sln | 20 + ides/vc9/axis2c/tcpmon/tcpmon.vcproj | 245 + ides/vc9/samples/clients/clients.sln | 86 + ides/vc9/samples/clients/echo/echo.vcproj | 208 + .../clients/echo_blocking/echo_blocking.vcproj | 208 + .../echo_blocking_addr/echo_blocking_addr.vcproj | 208 + .../echo_blocking_dual/echo_blocking_dual.vcproj | 208 + .../echo_non_blocking/echo_non_blocking.vcproj | 208 + .../echo_non_blocking_dual.vcproj | 208 + .../vc9/samples/clients/echo_rest/echo_rest.vcproj | 208 + ides/vc9/samples/clients/google/google.vcproj | 200 + ides/vc9/samples/clients/math/math.vcproj | 209 + ides/vc9/samples/clients/mtom/mtom.vcproj | 201 + ides/vc9/samples/clients/notify/notify.vcproj | 200 + ides/vc9/samples/clients/yahoo/yahoo.vcproj | 200 + .../samples/services/Calculator/Calculator.vcproj | 210 + ides/vc9/samples/services/echo/echo.vcproj | 210 + ides/vc9/samples/services/math/math.vcproj | 209 + ides/vc9/samples/services/mtom/mtom.vcproj | 209 + ides/vc9/samples/services/notify/notify.vcproj | 209 + ides/vc9/samples/services/services.sln | 44 + include/Makefile.am | 1 + include/axis2_addr.h | 173 + include/axis2_addr_mod.h | 77 + include/axis2_any_content_type.h | 117 + include/axis2_async_result.h | 98 + include/axis2_callback.h | 263 + include/axis2_callback_recv.h | 117 + include/axis2_client.h | 44 + include/axis2_conf.h | 822 +++ include/axis2_conf_ctx.h | 327 + include/axis2_conf_init.h | 74 + include/axis2_const.h | 445 ++ include/axis2_core_dll_desc.h | 68 + include/axis2_core_utils.h | 113 + include/axis2_ctx.h | 147 + include/axis2_defines.h | 51 + include/axis2_desc.h | 228 + include/axis2_description.h | 148 + include/axis2_disp.h | 174 + include/axis2_endpoint_ref.h | 319 + include/axis2_engine.h | 264 + include/axis2_flow.h | 125 + include/axis2_flow_container.h | 176 + include/axis2_handler.h | 184 + include/axis2_handler_desc.h | 274 + include/axis2_http_accept_record.h | 117 + include/axis2_http_client.h | 270 + include/axis2_http_header.h | 110 + include/axis2_http_out_transport_info.h | 250 + include/axis2_http_request_line.h | 122 + include/axis2_http_response_writer.h | 193 + include/axis2_http_sender.h | 226 + include/axis2_http_server.h | 66 + include/axis2_http_simple_request.h | 229 + include/axis2_http_simple_response.h | 337 + include/axis2_http_status_line.h | 131 + include/axis2_http_svr_thread.h | 121 + include/axis2_http_transport.h | 1164 ++++ include/axis2_http_transport_sender.h | 59 + include/axis2_http_transport_utils.h | 487 ++ include/axis2_http_worker.h | 115 + include/axis2_listener_manager.h | 136 + include/axis2_module.h | 161 + include/axis2_module_desc.h | 386 ++ include/axis2_msg.h | 298 + include/axis2_msg_ctx.h | 2098 ++++++ include/axis2_msg_info_headers.h | 466 ++ include/axis2_msg_recv.h | 268 + include/axis2_op.h | 724 ++ include/axis2_op_client.h | 445 ++ include/axis2_op_ctx.h | 307 + include/axis2_options.h | 848 +++ include/axis2_out_transport_info.h | 115 + include/axis2_phase.h | 352 + include/axis2_phase_holder.h | 170 + include/axis2_phase_meta.h | 89 + include/axis2_phase_resolver.h | 275 + include/axis2_phase_rule.h | 216 + include/axis2_phases_info.h | 238 + include/axis2_policy_include.h | 215 + include/axis2_raw_xml_in_out_msg_recv.h | 59 + include/axis2_relates_to.h | 129 + include/axis2_simple_http_svr_conn.h | 204 + include/axis2_stub.h | 200 + include/axis2_svc.h | 1236 ++++ include/axis2_svc_client.h | 642 ++ include/axis2_svc_ctx.h | 196 + include/axis2_svc_grp.h | 368 + include/axis2_svc_grp_ctx.h | 194 + include/axis2_svc_name.h | 135 + include/axis2_svc_skeleton.h | 182 + include/axis2_svr_callback.h | 95 + include/axis2_thread_mutex.h | 112 + include/axis2_transport_in_desc.h | 329 + include/axis2_transport_out_desc.h | 327 + include/axis2_transport_receiver.h | 256 + include/axis2_transport_sender.h | 173 + include/axis2_util.h | 61 + maven.xml | 36 + neethi/AUTHORS | 0 neethi/COPYING | 203 + neethi/ChangeLog | 0 neethi/INSTALL | 0 neethi/Makefile.am | 3 + neethi/NEWS | 0 neethi/README | 0 neethi/autogen.sh | 51 + neethi/configure.ac | 73 + neethi/include/axis2_rm_assertion.h | 267 + neethi/include/axis2_rm_assertion_builder.h | 48 + neethi/include/neethi_all.h | 81 + neethi/include/neethi_assertion.h | 208 + neethi/include/neethi_assertion_builder.h | 46 + neethi/include/neethi_constants.h | 87 + neethi/include/neethi_engine.h | 144 + neethi/include/neethi_exactlyone.h | 81 + neethi/include/neethi_includes.h | 55 + neethi/include/neethi_mtom_assertion_checker.h | 43 + neethi/include/neethi_operator.h | 95 + neethi/include/neethi_policy.h | 126 + neethi/include/neethi_reference.h | 69 + neethi/include/neethi_registry.h | 71 + neethi/include/neethi_util.h | 53 + neethi/include/rp_algorithmsuite.h | 218 + neethi/include/rp_algorithmsuite_builder.h | 45 + neethi/include/rp_asymmetric_binding.h | 88 + neethi/include/rp_asymmetric_binding_builder.h | 46 + neethi/include/rp_binding_commons.h | 126 + neethi/include/rp_bootstrap_policy_builder.h | 44 + neethi/include/rp_builders.h | 64 + neethi/include/rp_defines.h | 232 + neethi/include/rp_element.h | 69 + neethi/include/rp_encryption_token_builder.h | 48 + neethi/include/rp_header.h | 69 + neethi/include/rp_https_token.h | 85 + neethi/include/rp_https_token_builder.h | 45 + neethi/include/rp_includes.h | 52 + neethi/include/rp_initiator_token_builder.h | 45 + neethi/include/rp_issued_token.h | 124 + neethi/include/rp_issued_token_builder.h | 50 + neethi/include/rp_layout.h | 63 + neethi/include/rp_layout_builder.h | 45 + neethi/include/rp_policy_creator.h | 52 + neethi/include/rp_property.h | 95 + neethi/include/rp_protection_token_builder.h | 48 + neethi/include/rp_rampart_config.h | 217 + neethi/include/rp_rampart_config_builder.h | 45 + neethi/include/rp_recipient_token_builder.h | 45 + neethi/include/rp_saml_token.h | 97 + neethi/include/rp_saml_token_builder.h | 44 + neethi/include/rp_secpolicy.h | 213 + neethi/include/rp_secpolicy_builder.h | 44 + neethi/include/rp_security_context_token.h | 143 + neethi/include/rp_security_context_token_builder.h | 47 + neethi/include/rp_signature_token_builder.h | 48 + neethi/include/rp_signed_encrypted_elements.h | 86 + neethi/include/rp_signed_encrypted_items.h | 70 + neethi/include/rp_signed_encrypted_parts.h | 98 + neethi/include/rp_signed_encrypted_parts_builder.h | 55 + neethi/include/rp_supporting_tokens.h | 132 + neethi/include/rp_supporting_tokens_builder.h | 49 + .../rp_symmetric_asymmetric_binding_commons.h | 117 + neethi/include/rp_symmetric_binding.h | 99 + neethi/include/rp_symmetric_binding_builder.h | 45 + neethi/include/rp_token.h | 134 + neethi/include/rp_token_identifier.h | 46 + neethi/include/rp_transport_binding.h | 76 + neethi/include/rp_transport_binding_builder.h | 46 + neethi/include/rp_transport_token_builder.h | 45 + neethi/include/rp_trust10.h | 108 + neethi/include/rp_trust10_builder.h | 45 + neethi/include/rp_username_token.h | 138 + neethi/include/rp_username_token_builder.h | 45 + neethi/include/rp_wss10.h | 96 + neethi/include/rp_wss10_builder.h | 45 + neethi/include/rp_wss11.h | 129 + neethi/include/rp_wss11_builder.h | 45 + neethi/include/rp_x509_token.h | 142 + neethi/include/rp_x509_token_builder.h | 45 + neethi/src/Makefile.am | 53 + neethi/src/all.c | 183 + neethi/src/assertion.c | 424 ++ neethi/src/assertion_builder.c | 513 ++ neethi/src/engine.c | 1390 ++++ neethi/src/exactlyone.c | 188 + neethi/src/mtom_assertion_checker.c | 75 + neethi/src/operator.c | 216 + neethi/src/policy.c | 446 ++ neethi/src/reference.c | 104 + neethi/src/registry.c | 131 + neethi/src/rmpolicy/Makefile.am | 13 + neethi/src/rmpolicy/rm_assertion.c | 511 ++ neethi/src/rmpolicy/rm_assertion_builder.c | 562 ++ neethi/src/samples/test1.xml | 4 + neethi/src/samples/test10.xml | 1 + neethi/src/samples/test11.xml | 1 + neethi/src/samples/test12.xml | 1 + neethi/src/samples/test13.xml | 1 + neethi/src/samples/test14.xml | 1 + neethi/src/samples/test15.xml | 1 + neethi/src/samples/test16.xml | 1 + neethi/src/samples/test17.xml | 1 + neethi/src/samples/test18.xml | 1 + neethi/src/samples/test19.xml | 1 + neethi/src/samples/test2.xml | 1 + neethi/src/samples/test20.xml | 1 + neethi/src/samples/test21.xml | 10 + neethi/src/samples/test22.xml | 1 + neethi/src/samples/test23.xml | 1 + neethi/src/samples/test24.xml | 1 + neethi/src/samples/test25.xml | 7 + neethi/src/samples/test3.xml | 20 + neethi/src/samples/test4.xml | 1 + neethi/src/samples/test5.xml | 1 + neethi/src/samples/test6.xml | 1 + neethi/src/samples/test7.xml | 1 + neethi/src/samples/test8.xml | 4 + neethi/src/samples/test9.xml | 1 + neethi/src/secpolicy/Makefile.am | 1 + neethi/src/secpolicy/builder/Makefile.am | 25 + .../src/secpolicy/builder/algorithmsuite_builder.c | 82 + .../secpolicy/builder/asymmetric_binding_builder.c | 234 + .../secpolicy/builder/bootstrap_policy_builder.c | 61 + .../secpolicy/builder/encryption_token_builder.c | 175 + neethi/src/secpolicy/builder/https_token_builder.c | 56 + .../secpolicy/builder/initiator_token_builder.c | 138 + .../src/secpolicy/builder/issued_token_builder.c | 164 + neethi/src/secpolicy/builder/layout_builder.c | 74 + .../secpolicy/builder/protection_token_builder.c | 175 + .../src/secpolicy/builder/rampart_config_builder.c | 213 + .../secpolicy/builder/recipient_token_builder.c | 139 + neethi/src/secpolicy/builder/saml_token_builder.c | 155 + neethi/src/secpolicy/builder/secpolicy_builder.c | 241 + .../builder/security_context_token_builder.c | 231 + .../secpolicy/builder/signature_token_builder.c | 175 + .../builder/signed_encrypted_parts_builder.c | 209 + .../secpolicy/builder/supporting_tokens_builder.c | 203 + .../secpolicy/builder/symmetric_binding_builder.c | 245 + neethi/src/secpolicy/builder/token_identifier.c | 78 + .../secpolicy/builder/transport_binding_builder.c | 196 + .../secpolicy/builder/transport_token_builder.c | 138 + neethi/src/secpolicy/builder/trust10_builder.c | 139 + .../src/secpolicy/builder/username_token_builder.c | 150 + neethi/src/secpolicy/builder/wss10_builder.c | 135 + neethi/src/secpolicy/builder/wss11_builder.c | 147 + neethi/src/secpolicy/builder/x509_token_builder.c | 168 + neethi/src/secpolicy/model/Makefile.am | 21 + neethi/src/secpolicy/model/algorithmsuite.c | 627 ++ neethi/src/secpolicy/model/asymmetric_binding.c | 160 + neethi/src/secpolicy/model/binding_commons.c | 245 + neethi/src/secpolicy/model/element.c | 112 + neethi/src/secpolicy/model/header.c | 123 + neethi/src/secpolicy/model/https_token.c | 153 + neethi/src/secpolicy/model/issued_token.c | 211 + neethi/src/secpolicy/model/layout.c | 99 + neethi/src/secpolicy/model/property.c | 265 + neethi/src/secpolicy/model/rampart_config.c | 446 ++ neethi/src/secpolicy/model/saml_token.c | 160 + neethi/src/secpolicy/model/secpolicy.c | 493 ++ .../src/secpolicy/model/security_context_token.c | 239 + .../secpolicy/model/signed_encrypted_elements.c | 180 + .../src/secpolicy/model/signed_encrypted_items.c | 136 + .../src/secpolicy/model/signed_encrypted_parts.c | 176 + neethi/src/secpolicy/model/supporting_tokens.c | 300 + .../model/symmetric_asymmetric_binding_commons.c | 192 + neethi/src/secpolicy/model/symmetric_binding.c | 216 + neethi/src/secpolicy/model/token.c | 190 + neethi/src/secpolicy/model/transport_binding.c | 137 + neethi/src/secpolicy/model/trust10.c | 201 + neethi/src/secpolicy/model/ut.c | 214 + neethi/src/secpolicy/model/wss10.c | 178 + neethi/src/secpolicy/model/wss11.c | 256 + neethi/src/secpolicy/model/x509_token.c | 231 + neethi/src/util.c | 95 + neethi/test/Makefile.am | 14 + neethi/test/main.c | 362 + .../test/policies/1.5symmetric_binding_policy.xml | 75 + neethi/test/policies/Policy-for-Endpoint-1A.xml | 12 + neethi/test/policies/Policy-for-Endpoint-1B.xml | 12 + neethi/test/policies/Policy-for-Endpoint-2A.xml | 12 + neethi/test/policies/Policy-for-Endpoint-2B.xml | 12 + ...-in-Operation-1A-in-relation-to-Endpoint-1A.xml | 10 + ...-in-Operation-1A-in-relation-to-Endpoint-1B.xml | 10 + ...-in-Operation-1B-in-relation-to-Endpoint-1A.xml | 10 + ...-in-Operation-1B-in-relation-to-Endpoint-1B.xml | 10 + ...-in-Operation-2A-in-relation-to-Endpoint-2A.xml | 10 + ...-in-Operation-2A-in-relation-to-Endpoint-2B.xml | 10 + ...-in-Operation-2B-in-relation-to-Endpoint-2A.xml | 10 + ...-in-Operation-2B-in-relation-to-Endpoint-2B.xml | 10 + ...for-Operation-1A-in-relation-to-Endpoint-1A.xml | 10 + ...for-Operation-1A-in-relation-to-Endpoint-1B.xml | 10 + ...for-Operation-1B-in-relation-to-Endpoint-1A.xml | 10 + ...for-Operation-1B-in-relation-to-Endpoint-1B.xml | 10 + ...for-Operation-2A-in-relation-to-Endpoint-2A.xml | 10 + ...for-Operation-2A-in-relation-to-Endpoint-2B.xml | 10 + ...for-Operation-2B-in-relation-to-Endpoint-2A.xml | 10 + ...for-Operation-2B-in-relation-to-Endpoint-2B.xml | 10 + ...-in-Operation-1A-in-relation-to-Endpoint-1A.xml | 11 + ...-in-Operation-1A-in-relation-to-Endpoint-1B.xml | 11 + ...-in-Operation-1B-in-relation-to-Endpoint-1A.xml | 11 + ...-in-Operation-1B-in-relation-to-Endpoint-1B.xml | 11 + ...-in-Operation-2A-in-relation-to-Endpoint-2A.xml | 11 + ...-in-Operation-2A-in-relation-to-Endpoint-2B.xml | 11 + ...-in-Operation-2B-in-relation-to-Endpoint-2A.xml | 11 + ...-in-Operation-2B-in-relation-to-Endpoint-2B.xml | 11 + ...-in-Operation-1A-in-relation-to-Endpoint-1A.xml | 10 + ...-in-Operation-1A-in-relation-to-Endpoint-1B.xml | 10 + ...-in-Operation-1B-in-relation-to-Endpoint-1A.xml | 10 + ...-in-Operation-1B-in-relation-to-Endpoint-1B.xml | 10 + ...-in-Operation-2A-in-relation-to-Endpoint-2A.xml | 10 + ...-in-Operation-2A-in-relation-to-Endpoint-2B.xml | 10 + ...-in-Operation-2B-in-relation-to-Endpoint-2A.xml | 10 + ...-in-Operation-2B-in-relation-to-Endpoint-2B.xml | 10 + neethi/test/policies/Policy-for-Service-1.xml | 9 + neethi/test/policies/Policy-for-Service-2.xml | 9 + neethi/test/policies/PolicyAttachments.wsdl | 448 ++ neethi/test/policies/asymmetric_binding_policy.xml | 70 + neethi/test/policies/rm-1.0.xml | 21 + neethi/test/policies/rm-1.1.xml | 27 + neethi/test/policies/symmetric_binding_policy.xml | 75 + neethi/test/security_context_token/build.sh | 3 + .../security_context_token_test.c | 54 + neethi/test/test-policy.xml | 10 + .../test-resources/different-level-policies.xml | 109 + neethi/test/test-resources/echo-services.xml | 115 + neethi/test/test-resources/message-services-sc.xml | 116 + neethi/test/test-resources/services-1.xml | 51 + neethi/test/test-resources/services-2.xml | 76 + neethi/test/test-resources/services-3.xml | 88 + neethi/test/test-resources/services-4.xml | 89 + neethi/test/test-resources/services-5.xml | 89 + neethi/test/test-resources/services-6.xml | 86 + neethi/test/test-resources/services-7.xml | 89 + neethi/test/test-resources/services-8.xml | 89 + neethi/test/test-resources/services-9.xml | 87 + neethi/test/test-resources/services-sc-1.xml | 176 + neethi/test/test-resources/services-sc-2.xml | 186 + neethi/test/test.c | 239 + project.properties | 30 + project.xml | 328 + release_process | 141 + samples/AUTHORS | 26 + samples/COPYING | 203 + samples/ChangeLog | 215 + samples/INSTALL | 14 + samples/LICENSE | 203 + samples/Makefile.am | 8 + samples/NEWS | 97 + samples/README | 51 + samples/autogen.sh | 51 + samples/build.sh | 8 + samples/client/Makefile.am | 2 + samples/client/amqp/Makefile.am | 1 + samples/client/amqp/echo/Makefile.am | 36 + samples/client/amqp/echo/echo_blocking.c | 124 + samples/client/amqp/echo/echo_blocking_addr.c | 132 + samples/client/amqp/echo/echo_blocking_dual.c | 142 + samples/client/amqp/echo/echo_blocking_soap11.c | 135 + samples/client/amqp/echo/echo_non_blocking.c | 217 + samples/client/amqp/echo/echo_non_blocking_dual.c | 235 + samples/client/amqp/echo/echo_util.c | 47 + samples/client/amqp/echo/echo_util.h | 54 + samples/client/amqp/mtom/Makefile.am | 18 + samples/client/amqp/mtom/mtom_client.c | 259 + samples/client/amqp/mtom/resources/Makefile.am | 5 + samples/client/amqp/mtom/resources/axis2.jpg | Bin 0 -> 13887 bytes samples/client/amqp/notify/Makefile.am | 15 + samples/client/amqp/notify/notify_client.c | 152 + samples/client/echo/Makefile.am | 18 + samples/client/echo/README.txt | 5 + samples/client/echo/echo.c | 196 + samples/client/echo/echo.mk | 8 + samples/client/google/Makefile.am | 17 + samples/client/google/README.txt | 10 + samples/client/google/google.mk | 8 + samples/client/google/google_client.c | 290 + samples/client/math/Makefile.am | 20 + samples/client/math/axis2_math_stub.c | 193 + samples/client/math/axis2_math_stub.h | 86 + samples/client/math/math.mk | 8 + samples/client/math/math_client.c | 201 + samples/client/math/services.xml | 18 + samples/client/mtom/Makefile.am | 20 + samples/client/mtom/mtom.mk | 8 + samples/client/mtom/mtom_client.c | 271 + samples/client/mtom/resources/Makefile.am | 3 + samples/client/mtom/resources/axis2.jpg | Bin 0 -> 13887 bytes samples/client/mtom_callback/Makefile.am | 19 + samples/client/mtom_callback/mtom_callback.mk | 4 + .../client/mtom_callback/mtom_callback_client.c | 261 + samples/client/notify/Makefile.am | 18 + samples/client/notify/notify.mk | 8 + samples/client/notify/notify_client.c | 152 + samples/client/version/Makefile.am | 19 + samples/client/version/axis2_version_stub.c | 114 + samples/client/version/axis2_version_stub.h | 71 + samples/client/version/services.xml | 9 + samples/client/version/test.xml | 5 + samples/client/version/version_client.c | 185 + samples/client/yahoo/Makefile.am | 17 + samples/client/yahoo/yahoo.mk | 8 + samples/client/yahoo/yahoo_client.c | 207 + samples/codegen/client/calc_xml_inout/Makefile.am | 24 + samples/codegen/client/calc_xml_inout/readme | 12 + .../client/calc_xml_inout/test_calculator.c | 125 + samples/codegen/client/calculator/Makefile.am | 26 + samples/codegen/client/calculator/readme | 15 + .../codegen/client/calculator/test_calculator.c | 77 + samples/codegen/client/interop_doc1/Makefile.am | 56 + samples/codegen/client/interop_doc1/readme | 13 + .../codegen/client/interop_doc1/test_echo_date.c | 77 + .../client/interop_doc1/test_echo_struct_array.c | 93 + samples/codegen/client/interop_doc2/Makefile.am | 42 + samples/codegen/client/interop_doc2/readme | 13 + .../codegen/client/interop_doc2/test_echo_string.c | 70 + .../client/interop_doc2/test_echo_string_array.c | 90 + .../codegen/client/interop_doc2/test_echo_struct.c | 89 + .../codegen/databinding/Calculator/Calculator.wsdl | 255 + .../databinding/Calculator/client/CalculatorAdd.c | 38 + .../Calculator/server/axis2_skel_Calculator.c | 104 + samples/codegen/databinding/READEME.txt | 66 + .../databinding/StockQuoteService/StockQuote.xsd | 46 + .../StockQuoteService/StockQuoteService.wsdl | 44 + .../StockQuoteService/client/stock_quote_client.c | 121 + .../server/axis2_skel_StockQuoteService.c | 75 + samples/codegen/server/calc_xml_inout/Makefile.am | 14 + .../server/calc_xml_inout/axis2_skel_Calculator.c | 135 + samples/codegen/server/calc_xml_inout/readme | 12 + samples/codegen/server/calculator/Makefile.am | 15 + .../server/calculator/axis2_skel_Calculator.c | 158 + samples/codegen/server/calculator/readme | 12 + samples/codegen/server/interop_doc1/Makefile.am | 23 + .../axis2_skel_InteropTestPortTypeDocService.c | 274 + samples/codegen/server/interop_doc1/readme | 10 + samples/codegen/server/interop_doc2/Makefile.am | 16 + .../axis2_skel_WSDLInteropTestDocLitService.c | 139 + samples/codegen/server/interop_doc2/readme | 10 + samples/configure.ac | 154 + samples/mtom_caching_callback/Makefile.am | 10 + .../mtom_caching_callback/mtom_caching_callback.c | 184 + samples/mtom_sending_callback/Makefile.am | 11 + .../mtom_sending_callback/mtom_sending_callback.c | 209 + samples/server/Calculator/Calculator.mk | 7 + samples/server/Calculator/Calculator.wsdl | 183 + samples/server/Calculator/Makefile.am | 9 + samples/server/Calculator/calc.c | 553 ++ samples/server/Calculator/calc.h | 41 + samples/server/Calculator/calc_skeleton.c | 157 + samples/server/Calculator/services.xml | 28 + samples/server/Makefile.am | 2 + samples/server/axis2.log | 1 + samples/server/axis2.xml | 129 + samples/server/echo/Makefile.am | 9 + samples/server/echo/echo.c | 116 + samples/server/echo/echo.h | 32 + samples/server/echo/echo.mk | 8 + samples/server/echo/echo_skeleton.c | 182 + samples/server/echo/services.xml | 34 + samples/server/math/Makefile.am | 9 + samples/server/math/math.c | 537 ++ samples/server/math/math.h | 41 + samples/server/math/math.mk | 7 + samples/server/math/math_skeleton.c | 157 + samples/server/math/services.xml | 18 + samples/server/mtom/Makefile.am | 9 + samples/server/mtom/mtom.c | 261 + samples/server/mtom/mtom.h | 33 + samples/server/mtom/mtom.mk | 8 + samples/server/mtom/mtom_skeleton.c | 166 + samples/server/mtom/services.xml | 12 + samples/server/mtom_callback/Makefile.am | 9 + samples/server/mtom_callback/mtom_callback.c | 261 + samples/server/mtom_callback/mtom_callback.h | 33 + samples/server/mtom_callback/mtom_callback.mk | 8 + samples/server/mtom_callback/mtom_skeleton.c | 166 + samples/server/mtom_callback/services.xml | 16 + samples/server/notify/Makefile.am | 9 + samples/server/notify/notify.c | 77 + samples/server/notify/notify.h | 32 + samples/server/notify/notify.mk | 8 + samples/server/notify/notify_skeleton.c | 167 + samples/server/notify/services.xml | 13 + samples/server/sg_math/Makefile.am | 11 + samples/server/sg_math/add.c | 180 + samples/server/sg_math/add.h | 33 + samples/server/sg_math/add_skeleton.c | 151 + samples/server/sg_math/div.c | 150 + samples/server/sg_math/div.h | 32 + samples/server/sg_math/div_skeleton.c | 151 + samples/server/sg_math/mul.c | 148 + samples/server/sg_math/mul.h | 32 + samples/server/sg_math/mul_skeleton.c | 151 + samples/server/sg_math/services.xml | 30 + samples/server/sg_math/sg_math.mk | 15 + samples/server/sg_math/sub.c | 148 + samples/server/sg_math/sub.h | 32 + samples/server/sg_math/sub_skeleton.c | 151 + samples/server/version/Makefile.am | 10 + samples/server/version/services.xml | 9 + samples/server/version/version.c | 59 + samples/server/version/version.h | 32 + samples/server/version/version_skel.c | 151 + samples/user_guide/Makefile.am | 1 + samples/user_guide/clients/Makefile.am | 37 + samples/user_guide/clients/echo_blocking.c | 126 + samples/user_guide/clients/echo_blocking.mk | 8 + samples/user_guide/clients/echo_blocking_addr.c | 132 + samples/user_guide/clients/echo_blocking_addr.mk | 8 + samples/user_guide/clients/echo_blocking_auth.c | 295 + samples/user_guide/clients/echo_blocking_auth.mk | 8 + samples/user_guide/clients/echo_blocking_dual.c | 140 + samples/user_guide/clients/echo_blocking_dual.mk | 8 + samples/user_guide/clients/echo_blocking_soap11.c | 135 + samples/user_guide/clients/echo_blocking_soap11.mk | 8 + samples/user_guide/clients/echo_non_blocking.c | 211 + samples/user_guide/clients/echo_non_blocking.mk | 8 + .../user_guide/clients/echo_non_blocking_dual.c | 233 + .../user_guide/clients/echo_non_blocking_dual.mk | 8 + samples/user_guide/clients/echo_rest.c | 229 + samples/user_guide/clients/echo_rest.mk | 8 + samples/user_guide/clients/echo_util.c | 48 + samples/user_guide/clients/echo_util.h | 28 + src/Makefile.am | 1 + src/core/Makefile.am | 1 + src/core/addr/Makefile.am | 13 + src/core/addr/any_content_type.c | 120 + src/core/addr/endpoint_ref.c | 375 ++ src/core/addr/msg_info_headers.c | 448 ++ src/core/addr/relates_to.c | 164 + src/core/addr/svc_name.c | 151 + src/core/clientapi/Makefile.am | 17 + src/core/clientapi/async_result.c | 83 + src/core/clientapi/callback.c | 272 + src/core/clientapi/callback_recv.c | 199 + src/core/clientapi/listener_manager.c | 302 + src/core/clientapi/op_client.c | 1439 ++++ src/core/clientapi/options.c | 1068 +++ src/core/clientapi/stub.c | 228 + src/core/clientapi/svc_client.c | 1624 +++++ src/core/context/Makefile.am | 13 + src/core/context/conf_ctx.c | 599 ++ src/core/context/ctx.c | 197 + src/core/context/msg_ctx.c | 2768 ++++++++ src/core/context/op_ctx.c | 420 ++ src/core/context/svc_ctx.c | 200 + src/core/context/svc_grp_ctx.c | 256 + src/core/deployment/Makefile.am | 38 + src/core/deployment/arch_file_data.c | 369 + src/core/deployment/arch_reader.c | 313 + src/core/deployment/axis2_arch_file_data.h | 265 + src/core/deployment/axis2_arch_reader.h | 152 + src/core/deployment/axis2_conf_builder.h | 116 + src/core/deployment/axis2_dep_engine.h | 418 ++ src/core/deployment/axis2_deployment.h | 119 + src/core/deployment/axis2_desc_builder.h | 292 + src/core/deployment/axis2_module_builder.h | 101 + src/core/deployment/axis2_repos_listener.h | 144 + src/core/deployment/axis2_svc_builder.h | 149 + src/core/deployment/axis2_svc_grp_builder.h | 122 + src/core/deployment/axis2_ws_info.h | 144 + src/core/deployment/axis2_ws_info_list.h | 192 + src/core/deployment/conf_builder.c | 1337 ++++ src/core/deployment/conf_init.c | 460 ++ src/core/deployment/dep_engine.c | 1988 ++++++ src/core/deployment/desc_builder.c | 1148 ++++ src/core/deployment/module_builder.c | 514 ++ src/core/deployment/phases_info.c | 564 ++ src/core/deployment/repos_listener.c | 398 ++ src/core/deployment/svc_builder.c | 840 +++ src/core/deployment/svc_grp_builder.c | 264 + src/core/deployment/ws_info.c | 158 + src/core/deployment/ws_info_list.c | 370 + src/core/description/Makefile.am | 24 + src/core/description/desc.c | 261 + src/core/description/flow.c | 130 + src/core/description/flow_container.c | 173 + src/core/description/handler_desc.c | 333 + src/core/description/module_desc.c | 470 ++ src/core/description/msg.c | 407 ++ src/core/description/op.c | 1383 ++++ src/core/description/phase_rule.c | 254 + src/core/description/policy_include.c | 612 ++ src/core/description/svc.c | 1543 +++++ src/core/description/svc_grp.c | 600 ++ src/core/description/transport_in_desc.c | 305 + src/core/description/transport_out_desc.c | 299 + src/core/engine/Makefile.am | 47 + src/core/engine/addr_disp.c | 255 + src/core/engine/axis2_disp_checker.h | 105 + src/core/engine/conf.c | 1835 +++++ src/core/engine/ctx_handler.c | 204 + src/core/engine/disp.c | 185 + src/core/engine/disp_checker.c | 284 + src/core/engine/engine.c | 915 +++ src/core/engine/handler.c | 133 + src/core/engine/phase.c | 1275 ++++ src/core/engine/req_uri_disp.c | 206 + src/core/engine/rest_disp.c | 350 + src/core/engine/soap_action_disp.c | 155 + src/core/engine/soap_body_disp.c | 231 + src/core/phaseresolver/Makefile.am | 9 + src/core/phaseresolver/phase_holder.c | 243 + src/core/phaseresolver/phase_resolver.c | 2016 ++++++ src/core/receivers/Makefile.am | 11 + src/core/receivers/msg_recv.c | 560 ++ src/core/receivers/raw_xml_in_out_msg_recv.c | 442 ++ src/core/receivers/svr_callback.c | 112 + src/core/transport/Makefile.am | 8 + src/core/transport/amqp/Makefile.am | 4 + src/core/transport/amqp/receiver/Makefile.am | 25 + .../transport/amqp/receiver/axis2_amqp_receiver.c | 275 + .../transport/amqp/receiver/axis2_amqp_receiver.h | 82 + .../amqp/receiver/qpid_receiver/Makefile.am | 29 + .../receiver/qpid_receiver/axis2_qpid_receiver.cpp | 167 + .../receiver/qpid_receiver/axis2_qpid_receiver.h | 39 + .../axis2_qpid_receiver_interface.cpp | 102 + .../qpid_receiver/axis2_qpid_receiver_interface.h | 58 + .../qpid_receiver/axis2_qpid_receiver_listener.cpp | 123 + .../qpid_receiver/axis2_qpid_receiver_listener.h | 43 + .../qpid_receiver/request_processor/Makefile.am | 20 + .../axis2_amqp_request_processor.c | 334 + .../axis2_amqp_request_processor.h | 55 + src/core/transport/amqp/sender/Makefile.am | 26 + src/core/transport/amqp/sender/axis2_amqp_sender.c | 344 + src/core/transport/amqp/sender/axis2_amqp_sender.h | 63 + .../transport/amqp/sender/qpid_sender/Makefile.am | 23 + .../amqp/sender/qpid_sender/axis2_qpid_sender.cpp | 242 + .../amqp/sender/qpid_sender/axis2_qpid_sender.h | 49 + .../qpid_sender/axis2_qpid_sender_interface.cpp | 130 + .../qpid_sender/axis2_qpid_sender_interface.h | 50 + src/core/transport/amqp/server/Makefile.am | 1 + .../amqp/server/axis2_amqp_server/Makefile.am | 33 + .../server/axis2_amqp_server/axis2_amqp_server.c | 232 + .../server/axis2_amqp_server/axis2_amqp_server.h | 41 + src/core/transport/amqp/util/Makefile.am | 18 + src/core/transport/amqp/util/axis2_amqp_defines.h | 65 + src/core/transport/amqp/util/axis2_amqp_util.c | 823 +++ src/core/transport/amqp/util/axis2_amqp_util.h | 143 + src/core/transport/http/Makefile.am | 1 + src/core/transport/http/common/Makefile.am | 29 + .../transport/http/common/http_accept_record.c | 165 + src/core/transport/http/common/http_header.c | 168 + .../http/common/http_out_transport_info.c | 353 + src/core/transport/http/common/http_request_line.c | 227 + .../transport/http/common/http_response_writer.c | 176 + .../transport/http/common/http_simple_request.c | 433 ++ .../transport/http/common/http_simple_response.c | 615 ++ src/core/transport/http/common/http_status_line.c | 267 + src/core/transport/http/common/http_worker.c | 2064 ++++++ .../transport/http/common/simple_http_svr_conn.c | 504 ++ src/core/transport/http/receiver/Makefile.am | 21 + src/core/transport/http/receiver/http_receiver.c | 508 ++ src/core/transport/http/receiver/http_svr_thread.c | 315 + src/core/transport/http/sender/Makefile.am | 51 + src/core/transport/http/sender/http_client.c | 965 +++ src/core/transport/http/sender/http_sender.c | 3332 +++++++++ .../transport/http/sender/http_transport_sender.c | 859 +++ src/core/transport/http/sender/libcurl/Makefile.am | 2 + .../transport/http/sender/libcurl/axis2_libcurl.c | 1169 ++++ .../transport/http/sender/libcurl/axis2_libcurl.h | 53 + .../transport/http/sender/libcurl/libcurl_stream.c | 192 + .../transport/http/sender/libcurl/libcurl_stream.h | 51 + src/core/transport/http/sender/ssl/Makefile.am | 2 + src/core/transport/http/sender/ssl/ssl_stream.c | 239 + src/core/transport/http/sender/ssl/ssl_stream.h | 50 + src/core/transport/http/sender/ssl/ssl_utils.c | 227 + src/core/transport/http/sender/ssl/ssl_utils.h | 56 + src/core/transport/http/server/CGI/Makefile.am | 31 + .../transport/http/server/CGI/axis2_cgi_main.c | 280 + .../http/server/CGI/axis2_cgi_out_transport_info.c | 160 + .../http/server/CGI/axis2_cgi_out_transport_info.h | 62 + .../transport/http/server/CGI/axis2_cgi_stream.c | 164 + .../transport/http/server/CGI/axis2_cgi_stream.h | 44 + .../transport/http/server/CGI/axis2_cgi_types.h | 34 + src/core/transport/http/server/IIS/README | 61 + .../http/server/IIS/axis2_iis_constants.h | 51 + .../http/server/IIS/axis2_iis_out_transport_info.c | 153 + .../http/server/IIS/axis2_iis_out_transport_info.h | 61 + .../transport/http/server/IIS/axis2_iis_regedit.js | 84 + .../transport/http/server/IIS/axis2_iis_stream.c | 313 + .../transport/http/server/IIS/axis2_iis_stream.h | 45 + .../transport/http/server/IIS/axis2_iis_worker.c | 607 ++ .../transport/http/server/IIS/axis2_iis_worker.h | 62 + .../transport/http/server/IIS/axis2_isapi_plugin.c | 476 ++ .../IIS/iis_iaspi_plugin_51/axis2_isapi_51.c | 153 + src/core/transport/http/server/IIS/mod_axis2.def | 7 + src/core/transport/http/server/Makefile.am | 2 + src/core/transport/http/server/apache2/Makefile.am | 40 + .../server/apache2/apache2_out_transport_info.c | 191 + .../transport/http/server/apache2/apache2_stream.c | 292 + .../transport/http/server/apache2/apache2_stream.h | 46 + .../transport/http/server/apache2/apache2_worker.c | 1687 +++++ .../apache2/axis2_apache2_out_transport_info.h | 61 + .../http/server/apache2/axis2_apache2_worker.h | 78 + src/core/transport/http/server/apache2/mod_axis2.c | 844 +++ .../http/server/simple_axis2_server/Makefile.am | 30 + .../server/simple_axis2_server/http_server_main.c | 310 + src/core/transport/http/util/Makefile.am | 14 + .../transport/http/util/http_transport_utils.c | 3885 +++++++++++ src/core/transport/tcp/Makefile.am | 3 + src/core/transport/tcp/axis2_simple_tcp_svr_conn.h | 155 + src/core/transport/tcp/axis2_tcp_server.h | 60 + src/core/transport/tcp/axis2_tcp_svr_thread.h | 117 + src/core/transport/tcp/axis2_tcp_transport.h | 89 + .../transport/tcp/axis2_tcp_transport_sender.h | 59 + src/core/transport/tcp/axis2_tcp_worker.h | 95 + src/core/transport/tcp/receiver/Makefile.am | 23 + .../transport/tcp/receiver/simple_tcp_svr_conn.c | 181 + src/core/transport/tcp/receiver/tcp_receiver.c | 400 ++ src/core/transport/tcp/receiver/tcp_svr_thread.c | 297 + src/core/transport/tcp/receiver/tcp_worker.c | 180 + src/core/transport/tcp/sender/Makefile.am | 26 + .../transport/tcp/sender/tcp_transport_sender.c | 477 ++ src/core/transport/tcp/server/Makefile.am | 1 + .../tcp/server/simple_tcp_server/Makefile.am | 30 + .../tcp/server/simple_tcp_server/tcp_server_main.c | 262 + src/core/transport/transport_receiver.c | 114 + src/core/util/Makefile.am | 9 + src/core/util/core_utils.c | 1635 +++++ src/modules/Makefile.am | 1 + src/modules/mod_addr/Makefile.am | 21 + src/modules/mod_addr/addr_in_handler.c | 746 +++ src/modules/mod_addr/addr_out_handler.c | 833 +++ src/modules/mod_addr/mod_addr.c | 155 + src/modules/mod_addr/module.xml | 19 + src/modules/mod_log/Makefile.am | 22 + src/modules/mod_log/log_in_handler.c | 90 + src/modules/mod_log/log_out_handler.c | 88 + src/modules/mod_log/mod_log.c | 141 + src/modules/mod_log/mod_log.h | 50 + src/modules/mod_log/module.xml | 19 + test/Makefile.am | 2 + test/core/Makefile.am | 3 + test/core/addr/Makefile.am | 21 + test/core/addr/test_addr.c | 182 + test/core/clientapi/Makefile.am | 49 + test/core/clientapi/addr_echo.xml | 23 + test/core/clientapi/echo.xml | 1 + test/core/clientapi/test_client.c | 182 + test/core/clientapi/test_clientapi.c | 119 + .../core/clientapi/test_svc_client_handler_count.c | 22 + test/core/context/Makefile.am | 21 + test/core/context/test_context.c | 124 + test/core/deployment/Makefile.am | 25 + test/core/deployment/axis2.xml | 126 + test/core/deployment/test_deployment.c | 360 + test/core/description/Makefile.am | 26 + test/core/description/test_description.c | 215 + test/core/engine/Makefile.am | 25 + test/core/engine/test_engine.c | 123 + test/core/transport/Makefile.am | 1 + test/core/transport/http/Makefile.am | 21 + test/core/transport/http/test_http_transport.c | 274 + test/find_policy.c | 303 + test/itest/Makefile.am | 1 + test/itest/whitemesa/Makefile.am | 2 + test/itest/whitemesa/round1/Makefile.am | 16 + test/itest/whitemesa/round1/README.txt | 2 + test/itest/whitemesa/round1/input | 6 + test/itest/whitemesa/round1/round1_client.c | 258 + test/itest/whitemesa/round1/run.sh | 1 + test/itest/whitemesa/round1/todo | 19 + test/itest/whitemesa/round2/Makefile.am | 15 + test/itest/whitemesa/round2/README.txt | 8 + test/itest/whitemesa/round2/input | 6 + test/itest/whitemesa/round2/readme | 1 + test/itest/whitemesa/round2/round2_client.c | 251 + test/itest/whitemesa/round2/run.sh | 1 + test/itest/whitemesa/round2/todo | 8 + test/resources/services.xml | 22 + test/resources/wsdl/Attachment1.wsdl | 76 + test/resources/wsdl/AttachmentService.wsdl | 139 + test/resources/wsdl/AxisBench.wsdl | 108 + test/resources/wsdl/BasicAllTest.wsdl | 102 + test/resources/wsdl/BasicChoice.wsdl | 104 + test/resources/wsdl/Calculator.wsdl | 135 + test/resources/wsdl/CalculatorDoc.wsdl | 255 + test/resources/wsdl/Choice.wsdl | 104 + test/resources/wsdl/CombinedAllTest.wsdl | 107 + test/resources/wsdl/CombinedChoice.wsdl | 110 + test/resources/wsdl/ComplexLists.wsdl | 192 + test/resources/wsdl/ComplexTypeAll.wsdl | 81 + test/resources/wsdl/DataHandlerService.wsdl | 291 + test/resources/wsdl/Enumeration.wsdl | 108 + test/resources/wsdl/ExceptionTest.wsdl | 97 + test/resources/wsdl/ExceptionTestDoc.wsdl | 160 + test/resources/wsdl/ExtensibilityQuery.wsdl | 154 + test/resources/wsdl/FaultMapping.wsdl | 97 + test/resources/wsdl/FaultMappingDoc.wsdl | 160 + test/resources/wsdl/FourLevelTestDoc.wsdl | 73 + test/resources/wsdl/InOut.wsdl | 429 ++ test/resources/wsdl/InteropTestRound1.wsdl | 333 + test/resources/wsdl/InteropTestRound1Doc.wsdl | 774 +++ test/resources/wsdl/LargeReturningString.wsdl | 95 + test/resources/wsdl/LimitedAllTest.wsdl | 103 + test/resources/wsdl/ManyTypeRefRoot.wsdl | 89 + test/resources/wsdl/MathOps.wsdl | 71 + test/resources/wsdl/MathOpsDoc.wsdl | 118 + test/resources/wsdl/MinOccurTest.wsdl | 107 + test/resources/wsdl/MultiOut.wsdl | 139 + test/resources/wsdl/NestedArrays.wsdl | 105 + test/resources/wsdl/NestedComplex.wsdl | 130 + test/resources/wsdl/NillableArrays.wsdl | 266 + test/resources/wsdl/OtherFaultException.wsdl | 97 + test/resources/wsdl/PlainTextAttachment.wsdl | 69 + test/resources/wsdl/PrimitiveAndArray.wsdl | 155 + test/resources/wsdl/RPCAllTest.wsdl | 101 + test/resources/wsdl/RecurseTypes.wsdl | 101 + test/resources/wsdl/RpcHttpHeaderTest1.wsdl | 333 + test/resources/wsdl/RpcHttpHeaderTest2.wsdl | 333 + test/resources/wsdl/RpcHttpHeaderTest3.wsdl | 333 + test/resources/wsdl/RpcHttpHeaderTest4.wsdl | 333 + test/resources/wsdl/RpcHttpHeaderTest5.wsdl | 333 + test/resources/wsdl/RpcHttpHeaderTest7.wsdl | 333 + test/resources/wsdl/RpcHttpHeaderTest8.wsdl | 333 + test/resources/wsdl/RpcSoapHeaderTest1.wsdl | 333 + test/resources/wsdl/RpcSoapHeaderTest10.wsdl | 333 + test/resources/wsdl/RpcSoapHeaderTest2.wsdl | 333 + test/resources/wsdl/RpcSoapHeaderTest3.wsdl | 333 + test/resources/wsdl/RpcSoapHeaderTest4.wsdl | 333 + test/resources/wsdl/RpcSoapHeaderTest6.wsdl | 333 + test/resources/wsdl/RpcSoapHeaderTest8.wsdl | 333 + test/resources/wsdl/RpcSoapHeaderTest9.wsdl | 333 + test/resources/wsdl/SimpleArray.wsdl | 64 + test/resources/wsdl/SimpleArrayDoc.wsdl | 85 + test/resources/wsdl/SimpleArrays.wsdl | 299 + test/resources/wsdl/SimpleChoice.wsdl | 104 + test/resources/wsdl/SimpleRef.wsdl | 114 + test/resources/wsdl/SimpleRefDoc.wsdl | 100 + test/resources/wsdl/SimpleTypeArray.wsdl | 75 + test/resources/wsdl/SimpleTypeInnerUnbounded.wsdl | 113 + .../wsdl/SimpleTypeInnerUnboundedInOutput.wsdl | 113 + test/resources/wsdl/StockQuotes.wsdl | 48 + test/resources/wsdl/TestTransportTimeout.wsdl | 255 + test/resources/wsdl/UDDI.wsdl | 31 + test/resources/wsdl/UnboundedChoice.wsdl | 104 + test/resources/wsdl/UnboundedStringChoice.wsdl | 103 + test/resources/wsdl/XSDAttribute.wsdl | 1046 +++ test/resources/wsdl/XSDElement.wsdl | 1422 ++++ test/resources/wsdl/XSDElementNil.wsdl | 1414 ++++ test/resources/wsdl/XSD_ENTITIES.wsdl | 285 + test/resources/wsdl/XSD_ENTITY.wsdl | 285 + test/resources/wsdl/XSD_ID.wsdl | 285 + test/resources/wsdl/XSD_IDREF.wsdl | 285 + test/resources/wsdl/XSD_IDREFS.wsdl | 285 + test/resources/wsdl/XSD_NCName.wsdl | 285 + test/resources/wsdl/XSD_NMTOKEN.wsdl | 285 + test/resources/wsdl/XSD_NMTOKENS.wsdl | 285 + test/resources/wsdl/XSD_NOTATION.wsdl | 285 + test/resources/wsdl/XSD_Name.wsdl | 285 + test/resources/wsdl/XSD_QName.wsdl | 285 + test/resources/wsdl/XSD_anyURI.wsdl | 285 + test/resources/wsdl/XSD_base64Binary.wsdl | 285 + test/resources/wsdl/XSD_boolean.wsdl | 285 + test/resources/wsdl/XSD_byte.wsdl | 285 + test/resources/wsdl/XSD_date.wsdl | 285 + test/resources/wsdl/XSD_dateTime.wsdl | 285 + test/resources/wsdl/XSD_decimal.wsdl | 285 + test/resources/wsdl/XSD_double.wsdl | 285 + test/resources/wsdl/XSD_duration.wsdl | 285 + test/resources/wsdl/XSD_float.wsdl | 285 + test/resources/wsdl/XSD_gDay.wsdl | 285 + test/resources/wsdl/XSD_gMonth.wsdl | 285 + test/resources/wsdl/XSD_gMonthDay.wsdl | 285 + test/resources/wsdl/XSD_gYear.wsdl | 285 + test/resources/wsdl/XSD_gYearMonth.wsdl | 285 + test/resources/wsdl/XSD_hexBinary.wsdl | 285 + test/resources/wsdl/XSD_int.wsdl | 285 + test/resources/wsdl/XSD_integer.wsdl | 285 + test/resources/wsdl/XSD_language.wsdl | 285 + test/resources/wsdl/XSD_long.wsdl | 285 + test/resources/wsdl/XSD_negativeInteger.wsdl | 285 + test/resources/wsdl/XSD_nonNegativeInteger.wsdl | 285 + test/resources/wsdl/XSD_nonPositiveInteger.wsdl | 285 + test/resources/wsdl/XSD_normalizedString.wsdl | 285 + test/resources/wsdl/XSD_positiveInteger.wsdl | 285 + test/resources/wsdl/XSD_short.wsdl | 285 + test/resources/wsdl/XSD_string.wsdl | 285 + test/resources/wsdl/XSD_time.wsdl | 285 + test/resources/wsdl/XSD_token.wsdl | 285 + test/resources/wsdl/XSD_unsignedByte.wsdl | 285 + test/resources/wsdl/XSD_unsignedInt.wsdl | 285 + test/resources/wsdl/XSD_unsignedLong.wsdl | 285 + test/resources/wsdl/XSD_unsignedShort.wsdl | 285 + test/resources/wsdl/inquire_v2.wsdl | 273 + .../wsdl/interoptestdoclitparameters.wsdl | 175 + test/resources/wsdl/nillableComplexType.wsdl | 78 + test/resources/wsdl/nillableComplexType.xsd | 26 + test/resources/xml/om/axis.xml | 25 + test/resources/xml/om/basic.xml | 11 + test/resources/xml/om/basicupdate.xml | 47 + test/resources/xml/om/contents.xml | 70 + test/resources/xml/om/defaultNamespace.xml | 6 + test/resources/xml/om/evaluate.xml | 28 + test/resources/xml/om/fibo.xml | 29 + test/resources/xml/om/id.xml | 21 + test/resources/xml/om/jaxen24.xml | 2 + test/resources/xml/om/jaxen3.xml | 15 + test/resources/xml/om/lang.xml | 11 + test/resources/xml/om/message.xml | 27 + test/resources/xml/om/moreover.xml | 244 + test/resources/xml/om/much_ado.xml | 6850 +++++++++++++++++++ test/resources/xml/om/namespaces.xml | 18 + test/resources/xml/om/nitf.xml | 67 + test/resources/xml/om/numbers.xml | 18 + test/resources/xml/om/pi.xml | 13 + test/resources/xml/om/pi2.xml | 6 + test/resources/xml/om/simple.xml | 2 + test/resources/xml/om/spaces.xml | 10 + test/resources/xml/om/test.xml | 12 + test/resources/xml/om/testNamespaces.xml | 22 + test/resources/xml/om/underscore.xml | 6 + test/resources/xml/om/web.xml | 42 + test/resources/xml/om/web2.xml | 7 + test/resources/xml/soap/OMElementTest.xml | 22 + .../xml/soap/badsoap/bodyNotQualified.xml | 19 + .../resources/xml/soap/badsoap/envelopeMissing.xml | 20 + .../xml/soap/badsoap/haederBodyWrongOrder.xml | 20 + .../xml/soap/badsoap/notnamespaceQualified.xml | 15 + test/resources/xml/soap/badsoap/twoBodymessage.xml | 24 + test/resources/xml/soap/badsoap/twoheaders.xml | 29 + test/resources/xml/soap/badsoap/wrongSoapNs.xml | 20 + test/resources/xml/soap/emtyBodymessage.xml | 18 + .../xml/soap/invalidMustUnderstandSOAP12.xml | 13 + test/resources/xml/soap/minimalMessage.xml | 4 + test/resources/xml/soap/reallyReallyBigMessage.xml | 2529 +++++++ test/resources/xml/soap/sample1.txt | 12 + test/resources/xml/soap/sample1.xml | 9 + test/resources/xml/soap/security2-soap.xml | 54 + test/resources/xml/soap/soap11/soap11fault.xml | 16 + test/resources/xml/soap/soap11/soap11message.xml | 46 + test/resources/xml/soap/soap12message.xml | 58 + test/resources/xml/soap/soapmessage.txt | 16 + test/resources/xml/soap/soapmessage.xml | 20 + test/resources/xml/soap/soapmessage1.xml | 27 + test/resources/xml/soap/test.xml | 59 + test/resources/xml/soap/whitespacedMessage.xml | 27 + test/resources/xml/soap/wrongEnvelopeNamespace.xml | 12 + tools/codegen/javatool/README | 29 + tools/codegen/javatool/WSDL2C.bat | 9 + tools/codegen/javatool/WSDL2C.sh | 11 + tools/md5/AUTHORS | 0 tools/md5/COPYING | 203 + tools/md5/ChangeLog | 0 tools/md5/INSTALL | 14 + tools/md5/LICENSE | 203 + tools/md5/Makefile.am | 5 + tools/md5/NEWS | 0 tools/md5/README | 21 + tools/md5/autogen.sh | 50 + tools/md5/build.sh | 13 + tools/md5/configure.ac | 75 + tools/md5/src/Makefile.am | 14 + tools/md5/src/md5.c | 80 + tools/md5/test/Makefile.am | 1 + tools/tcpmon/AUTHORS | 0 tools/tcpmon/COPYING | 203 + tools/tcpmon/ChangeLog | 0 tools/tcpmon/INSTALL | 14 + tools/tcpmon/LICENSE | 203 + tools/tcpmon/Makefile.am | 6 + tools/tcpmon/NEWS | 0 tools/tcpmon/README | 21 + tools/tcpmon/autogen.sh | 50 + tools/tcpmon/build.sh | 13 + tools/tcpmon/configure.ac | 122 + tools/tcpmon/include/tcpmon_entry.h | 234 + tools/tcpmon/include/tcpmon_session.h | 291 + tools/tcpmon/include/tcpmon_util.h | 91 + tools/tcpmon/src/Makefile.am | 21 + tools/tcpmon/src/entry.c | 656 ++ tools/tcpmon/src/session.c | 632 ++ tools/tcpmon/src/tcpmon.c | 1037 +++ tools/tcpmon/src/tcpmon_entry_local.h | 16 + tools/tcpmon/src/tcpmon_session_local.h | 15 + tools/tcpmon/src/util.c | 806 +++ tools/tcpmon/test/Makefile.am | 1 + tools/tcpmon/test/unit/Makefile.am | 19 + tools/tcpmon/test/unit/main.c | 44 + tools/tcpmon/test/unit/result | 14 + tools/tcpmon/test/unit/tcpmon_test.c | 85 + tools/tcpmon/test/unit/tcpmon_test.h | 9 + util/AUTHORS | 0 util/COPYING | 203 + util/CREDITS | 0 util/ChangeLog | 6 + util/INSTALL | 14 + util/LICENSE | 203 + util/Makefile.am | 11 + util/NEWS | 7 + util/README | 55 + util/autogen.sh | 50 + util/build.sh | 6 + util/configure.ac | 275 + util/include/Makefile.am | 2 + util/include/axutil_allocator.h | 200 + util/include/axutil_array_list.h | 250 + util/include/axutil_base64.h | 122 + util/include/axutil_base64_binary.h | 173 + util/include/axutil_class_loader.h | 63 + util/include/axutil_config.h | 42 + util/include/axutil_date_time.h | 350 + util/include/axutil_date_time_util.h | 51 + util/include/axutil_digest_calc.h | 109 + util/include/axutil_dir_handler.h | 73 + util/include/axutil_dll_desc.h | 191 + util/include/axutil_duration.h | 181 + util/include/axutil_env.h | 233 + util/include/axutil_error.h | 876 +++ util/include/axutil_error_default.h | 52 + util/include/axutil_file.h | 99 + util/include/axutil_file_handler.h | 91 + util/include/axutil_generic_obj.h | 85 + util/include/axutil_hash.h | 301 + util/include/axutil_http_chunked_stream.h | 132 + util/include/axutil_linked_list.h | 334 + util/include/axutil_log.h | 259 + util/include/axutil_log_default.h | 64 + util/include/axutil_md5.h | 130 + util/include/axutil_network_handler.h | 194 + util/include/axutil_param.h | 200 + util/include/axutil_param_container.h | 134 + util/include/axutil_properties.h | 137 + util/include/axutil_property.h | 124 + util/include/axutil_qname.h | 142 + util/include/axutil_rand.h | 83 + util/include/axutil_stack.h | 93 + util/include/axutil_stream.h | 294 + util/include/axutil_string.h | 350 + util/include/axutil_string_util.h | 56 + util/include/axutil_thread.h | 272 + util/include/axutil_thread_pool.h | 126 + util/include/axutil_types.h | 73 + util/include/axutil_uri.h | 277 + util/include/axutil_url.h | 149 + util/include/axutil_utils.h | 263 + util/include/axutil_utils_defines.h | 226 + util/include/axutil_uuid_gen.h | 51 + util/include/axutil_version.h | 140 + .../include/platforms/axutil_platform_auto_sense.h | 63 + .../platforms/unix/axutil_date_time_util_unix.h | 46 + util/include/platforms/unix/axutil_thread_unix.h | 59 + util/include/platforms/unix/axutil_unix.h | 279 + util/include/platforms/unix/axutil_uuid_gen_unix.h | 94 + .../windows/axutil_date_time_util_windows.h | 45 + .../include/platforms/windows/axutil_dir_windows.h | 123 + .../platforms/windows/axutil_getopt_windows.h | 79 + .../windows/axutil_thread_mutex_windows.h | 44 + .../platforms/windows/axutil_thread_windows.h | 140 + .../platforms/windows/axutil_uuid_gen_windows.h | 46 + util/include/platforms/windows/axutil_windows.h | 278 + util/src/Makefile.am | 51 + util/src/allocator.c | 151 + util/src/array_list.c | 304 + util/src/base64.c | 284 + util/src/base64_binary.c | 258 + util/src/class_loader.c | 189 + util/src/date_time.c | 1034 +++ util/src/date_time_util.c | 25 + util/src/digest_calc.c | 144 + util/src/dir_handler.c | 371 + util/src/dll_desc.c | 298 + util/src/duration.c | 576 ++ util/src/env.c | 305 + util/src/error.c | 565 ++ util/src/file.c | 188 + util/src/file_handler.c | 121 + util/src/generic_obj.c | 119 + util/src/hash.c | 671 ++ util/src/http_chunked_stream.c | 232 + util/src/linked_list.c | 573 ++ util/src/log.c | 576 ++ util/src/md5.c | 350 + util/src/minizip/Makefile.am | 18 + util/src/minizip/archive_extract.c | 361 + util/src/minizip/axis2_archive_extract.h | 35 + util/src/minizip/axis2_crypt.h | 94 + util/src/minizip/axis2_ioapi.h | 118 + util/src/minizip/axis2_iowin32.h | 40 + util/src/minizip/axis2_unzip.h | 417 ++ util/src/minizip/crypt.c | 172 + util/src/minizip/ioapi.c | 197 + util/src/minizip/iowin32.c | 300 + util/src/minizip/unzip.c | 1655 +++++ util/src/network_handler.c | 644 ++ util/src/param.c | 302 + util/src/param_container.c | 228 + util/src/platforms/unix/Makefile.am | 8 + util/src/platforms/unix/date_time_util_unix.c | 31 + util/src/platforms/unix/thread_unix.c | 362 + util/src/platforms/unix/uuid_gen_unix.c | 345 + util/src/platforms/windows/axutil_windows.c | 93 + .../src/platforms/windows/date_time_util_windows.c | 32 + util/src/platforms/windows/dir_windows.c | 272 + util/src/platforms/windows/getopt_windows.c | 137 + util/src/platforms/windows/thread_mutex_windows.c | 148 + util/src/platforms/windows/thread_windows.c | 326 + util/src/platforms/windows/uuid_gen_windows.c | 61 + util/src/properties.c | 363 + util/src/property.c | 193 + util/src/qname.c | 337 + util/src/rand.c | 66 + util/src/stack.c | 182 + util/src/stream.c | 719 ++ util/src/string.c | 822 +++ util/src/string_util.c | 160 + util/src/thread_pool.c | 147 + util/src/types.c | 89 + util/src/uri.c | 970 +++ util/src/url.c | 699 ++ util/src/utils.c | 607 ++ util/src/uuid_gen.c | 34 + util/src/version.c | 39 + util/test/Makefile.am | 2 + util/test/allocator/Makefile.am | 13 + util/test/allocator/allocator_test.c | 147 + util/test/allocator/build.sh | 3 + util/test/allocator/test | Bin 0 -> 15310 bytes util/test/allocator/test.doc | Bin 0 -> 15310 bytes util/test/date_time/Makefile.am | 13 + util/test/date_time/build.sh | 3 + util/test/date_time/date_time_test.c | 138 + util/test/duration/Makefile.am | 13 + util/test/duration/build.sh | 3 + util/test/duration/duration_test.c | 172 + util/test/link_list/Makefile.am | 13 + util/test/link_list/build.sh | 3 + util/test/link_list/link_list_test.c | 69 + util/test/properties/Makefile.am | 13 + util/test/properties/build.sh | 7 + util/test/properties/input.doc | 1 + util/test/properties/output.doc | 0 util/test/properties/property_test.c | 117 + util/test/properties/test.doc | 1 + util/test/rand/Makefile.am | 13 + util/test/rand/build.sh | 3 + util/test/rand/rand_test.c | 64 + util/test/stack/Makefile.am | 13 + util/test/stack/build.sh | 3 + util/test/stack/stack_test.c | 71 + util/test/string_util/Makefile.am | 13 + util/test/string_util/build.sh | 3 + util/test/string_util/string_util_test.c | 66 + util/test/uri/Makefile.am | 13 + util/test/uri/build.sh | 3 + util/test/uri/uri_test.c | 140 + util/test/url/Makefile.am | 13 + util/test/url/build.sh | 3 + util/test/url/url_test.c | 130 + util/test/util/Makefile.am | 20 + util/test/util/create_env.c | 17 + util/test/util/create_env.h | 10 + util/test/util/test_log.c | 182 + util/test/util/test_log.h | 47 + util/test/util/test_md5.c | 55 + util/test/util/test_md5.h | 27 + util/test/util/test_string.c | 84 + util/test/util/test_thread.c | 345 + util/test/util/test_thread.h | 50 + util/test/util/test_util.c | 304 + util/test/utils/Makefile.am | 13 + util/test/utils/build.sh | 3 + util/test/utils/utils_test.c | 47 + xdocs/api/doxygenconf | 1220 ++++ xdocs/archived_news.html | 842 +++ xdocs/coding_conventions.html | 130 + xdocs/docs/architecture_notes.html | 76 + xdocs/docs/axis2c_manual.html | 3951 +++++++++++ xdocs/docs/faq.html | 200 + xdocs/docs/hello/client/hello.c | 154 + xdocs/docs/hello/client/hello.c.html | 147 + xdocs/docs/hello/service/hello/services.xml | 7 + xdocs/docs/hello/service/hello_svc.c | 211 + xdocs/docs/hello/service/hello_svc.c.html | 198 + xdocs/docs/images/OM005.gif | Bin 0 -> 407 bytes xdocs/docs/images/archi006.jpg | Bin 0 -> 15228 bytes xdocs/docs/images/arrow_left.gif | Bin 0 -> 78 bytes xdocs/docs/images/arrow_right.gif | Bin 0 -> 842 bytes xdocs/docs/images/axis2c_repo.gif | Bin 0 -> 8831 bytes xdocs/docs/images/binary_folder_structure.jpg | Bin 0 -> 8034 bytes xdocs/docs/images/folder_structure.jpg | Bin 0 -> 7966 bytes xdocs/docs/images/folder_structure_zlib.jpg | Bin 0 -> 3468 bytes xdocs/docs/index.html | 13 + xdocs/docs/installationguide.html | 792 +++ xdocs/docs/mod_log/log_in_handler.c.html | 92 + xdocs/docs/mod_log/log_out_handler.c.html | 90 + xdocs/docs/mod_log/mod_log.c.html | 143 + xdocs/docs/mod_log/module.xml | 19 + xdocs/docs/om_tutorial.html | 547 ++ xdocs/download.cgi | 6 + xdocs/download.html | 409 ++ xdocs/index.html | 99 + xdocs/lists_issues.html | 25 + xdocs/navigation.xml | 29 + xdocs/svn.html | 26 + xdocs/versioning.html | 7 + 1712 files changed, 366618 insertions(+) create mode 100644 AUTHORS create mode 120000 COPYING create mode 100644 CREDITS create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 LICENSE create mode 100644 Makefile.am create mode 100644 NEWS create mode 100644 NOTICE create mode 100644 README create mode 100755 autogen.sh create mode 100644 axiom/AUTHORS create mode 100644 axiom/COPYING create mode 100644 axiom/CREDITS create mode 100644 axiom/ChangeLog create mode 100644 axiom/INSTALL create mode 100644 axiom/LICENSE create mode 100644 axiom/Makefile.am create mode 100644 axiom/NEWS create mode 100644 axiom/README create mode 100755 axiom/autogen.sh create mode 100755 axiom/build.sh create mode 100644 axiom/configure.ac create mode 100644 axiom/include/Makefile.am create mode 100644 axiom/include/axiom.h create mode 100644 axiom/include/axiom_attribute.h create mode 100644 axiom/include/axiom_child_element_iterator.h create mode 100644 axiom/include/axiom_children_iterator.h create mode 100644 axiom/include/axiom_children_qname_iterator.h create mode 100644 axiom/include/axiom_children_with_specific_attribute_iterator.h create mode 100644 axiom/include/axiom_comment.h create mode 100644 axiom/include/axiom_data_handler.h create mode 100644 axiom/include/axiom_data_source.h create mode 100644 axiom/include/axiom_defines.h create mode 100644 axiom/include/axiom_doctype.h create mode 100644 axiom/include/axiom_document.h create mode 100644 axiom/include/axiom_element.h create mode 100644 axiom/include/axiom_mime_const.h create mode 100644 axiom/include/axiom_mime_parser.h create mode 100644 axiom/include/axiom_mime_part.h create mode 100644 axiom/include/axiom_mtom_caching_callback.h create mode 100644 axiom/include/axiom_mtom_sending_callback.h create mode 100644 axiom/include/axiom_namespace.h create mode 100644 axiom/include/axiom_navigator.h create mode 100644 axiom/include/axiom_node.h create mode 100644 axiom/include/axiom_output.h create mode 100644 axiom/include/axiom_processing_instruction.h create mode 100644 axiom/include/axiom_soap.h create mode 100644 axiom/include/axiom_soap_body.h create mode 100644 axiom/include/axiom_soap_builder.h create mode 100644 axiom/include/axiom_soap_const.h create mode 100644 axiom/include/axiom_soap_envelope.h create mode 100644 axiom/include/axiom_soap_fault.h create mode 100644 axiom/include/axiom_soap_fault_code.h create mode 100644 axiom/include/axiom_soap_fault_detail.h create mode 100644 axiom/include/axiom_soap_fault_node.h create mode 100644 axiom/include/axiom_soap_fault_reason.h create mode 100644 axiom/include/axiom_soap_fault_role.h create mode 100644 axiom/include/axiom_soap_fault_sub_code.h create mode 100644 axiom/include/axiom_soap_fault_text.h create mode 100644 axiom/include/axiom_soap_fault_value.h create mode 100644 axiom/include/axiom_soap_header.h create mode 100644 axiom/include/axiom_soap_header_block.h create mode 100644 axiom/include/axiom_stax_builder.h create mode 100644 axiom/include/axiom_text.h create mode 100644 axiom/include/axiom_util.h create mode 100644 axiom/include/axiom_xml_reader.h create mode 100644 axiom/include/axiom_xml_writer.h create mode 100644 axiom/include/axiom_xpath.h create mode 100644 axiom/src/Makefile.am create mode 100644 axiom/src/attachments/Makefile.am create mode 100644 axiom/src/attachments/axiom_mime_body_part.h create mode 100644 axiom/src/attachments/data_handler.c create mode 100644 axiom/src/attachments/mime_body_part.c create mode 100644 axiom/src/attachments/mime_parser.c create mode 100644 axiom/src/attachments/mime_part.c create mode 100644 axiom/src/om/Makefile.am create mode 100644 axiom/src/om/axiom_namespace_internal.h create mode 100644 axiom/src/om/axiom_node_internal.h create mode 100644 axiom/src/om/axiom_stax_builder_internal.h create mode 100644 axiom/src/om/om_attribute.c create mode 100644 axiom/src/om/om_child_element_iterator.c create mode 100644 axiom/src/om/om_children_iterator.c create mode 100644 axiom/src/om/om_children_qname_iterator.c create mode 100644 axiom/src/om/om_children_with_specific_attribute_iterator.c create mode 100644 axiom/src/om/om_comment.c create mode 100644 axiom/src/om/om_data_source.c create mode 100644 axiom/src/om/om_doctype.c create mode 100644 axiom/src/om/om_document.c create mode 100644 axiom/src/om/om_element.c create mode 100644 axiom/src/om/om_namespace.c create mode 100644 axiom/src/om/om_navigator.c create mode 100644 axiom/src/om/om_node.c create mode 100644 axiom/src/om/om_output.c create mode 100644 axiom/src/om/om_processing_instruction.c create mode 100644 axiom/src/om/om_stax_builder.c create mode 100644 axiom/src/om/om_text.c create mode 100644 axiom/src/parser/Makefile.am create mode 100644 axiom/src/parser/guththila/Makefile.am create mode 100644 axiom/src/parser/guththila/guththila_xml_reader_wrapper.c create mode 100644 axiom/src/parser/guththila/guththila_xml_writer_wrapper.c create mode 100644 axiom/src/parser/libxml2/Makefile.am create mode 100644 axiom/src/parser/libxml2/libxml2_reader_wrapper.c create mode 100644 axiom/src/parser/libxml2/libxml2_writer_wrapper.c create mode 100644 axiom/src/parser/xml_reader.c create mode 100644 axiom/src/parser/xml_writer.c create mode 100644 axiom/src/soap/Makefile.am create mode 100644 axiom/src/soap/_axiom_soap_body.h create mode 100644 axiom/src/soap/_axiom_soap_envelope.h create mode 100644 axiom/src/soap/_axiom_soap_fault.h create mode 100644 axiom/src/soap/_axiom_soap_fault_code.h create mode 100644 axiom/src/soap/_axiom_soap_fault_detail.h create mode 100644 axiom/src/soap/_axiom_soap_fault_node.h create mode 100644 axiom/src/soap/_axiom_soap_fault_reason.h create mode 100644 axiom/src/soap/_axiom_soap_fault_role.h create mode 100644 axiom/src/soap/_axiom_soap_fault_sub_code.h create mode 100644 axiom/src/soap/_axiom_soap_fault_text.h create mode 100644 axiom/src/soap/_axiom_soap_fault_value.h create mode 100644 axiom/src/soap/_axiom_soap_header.h create mode 100644 axiom/src/soap/_axiom_soap_header_block.h create mode 100644 axiom/src/soap/axiom_soap11_builder_helper.h create mode 100644 axiom/src/soap/axiom_soap12_builder_helper.h create mode 100644 axiom/src/soap/soap11_builder_helper.c create mode 100644 axiom/src/soap/soap12_builder_helper.c create mode 100644 axiom/src/soap/soap_body.c create mode 100644 axiom/src/soap/soap_builder.c create mode 100644 axiom/src/soap/soap_envelope.c create mode 100644 axiom/src/soap/soap_fault.c create mode 100644 axiom/src/soap/soap_fault_code.c create mode 100644 axiom/src/soap/soap_fault_detail.c create mode 100644 axiom/src/soap/soap_fault_node.c create mode 100644 axiom/src/soap/soap_fault_reason.c create mode 100644 axiom/src/soap/soap_fault_role.c create mode 100644 axiom/src/soap/soap_fault_sub_code.c create mode 100644 axiom/src/soap/soap_fault_text.c create mode 100644 axiom/src/soap/soap_fault_value.c create mode 100644 axiom/src/soap/soap_header.c create mode 100644 axiom/src/soap/soap_header_block.c create mode 100644 axiom/src/util/Makefile.am create mode 100644 axiom/src/util/om_util.c create mode 100644 axiom/src/xpath/Makefile.am create mode 100755 axiom/src/xpath/xpath.c create mode 100755 axiom/src/xpath/xpath_functions.c create mode 100755 axiom/src/xpath/xpath_functions.h create mode 100755 axiom/src/xpath/xpath_internals.c create mode 100755 axiom/src/xpath/xpath_internals.h create mode 100644 axiom/src/xpath/xpath_internals_engine.c create mode 100755 axiom/src/xpath/xpath_internals_engine.h create mode 100644 axiom/src/xpath/xpath_internals_iterators.c create mode 100755 axiom/src/xpath/xpath_internals_iterators.h create mode 100755 axiom/src/xpath/xpath_internals_parser.c create mode 100755 axiom/src/xpath/xpath_internals_parser.h create mode 100755 axiom/src/xpath/xpath_streaming.c create mode 100755 axiom/src/xpath/xpath_streaming.h create mode 100644 axiom/test/Makefile.am create mode 100644 axiom/test/om/Makefile.am create mode 100644 axiom/test/om/test_om.c create mode 100644 axiom/test/resources/wsdl/Attachment1.wsdl create mode 100644 axiom/test/resources/wsdl/AttachmentService.wsdl create mode 100644 axiom/test/resources/wsdl/AxisBench.wsdl create mode 100644 axiom/test/resources/wsdl/BasicAllTest.wsdl create mode 100644 axiom/test/resources/wsdl/BasicChoice.wsdl create mode 100644 axiom/test/resources/wsdl/Calculator.wsdl create mode 100644 axiom/test/resources/wsdl/CalculatorDoc.wsdl create mode 100644 axiom/test/resources/wsdl/Choice.wsdl create mode 100644 axiom/test/resources/wsdl/CombinedAllTest.wsdl create mode 100644 axiom/test/resources/wsdl/CombinedChoice.wsdl create mode 100644 axiom/test/resources/wsdl/ComplexLists.wsdl create mode 100644 axiom/test/resources/wsdl/ComplexTypeAll.wsdl create mode 100644 axiom/test/resources/wsdl/DIClientDoc.wsdl create mode 100644 axiom/test/resources/wsdl/DataHandlerService.wsdl create mode 100644 axiom/test/resources/wsdl/Enumeration.wsdl create mode 100644 axiom/test/resources/wsdl/ExceptionTest.wsdl create mode 100644 axiom/test/resources/wsdl/ExceptionTestDoc.wsdl create mode 100644 axiom/test/resources/wsdl/ExtensibilityQuery.wsdl create mode 100644 axiom/test/resources/wsdl/FaultMapping.wsdl create mode 100644 axiom/test/resources/wsdl/FaultMappingDoc.wsdl create mode 100644 axiom/test/resources/wsdl/FourLevelTestDoc.wsdl create mode 100644 axiom/test/resources/wsdl/InOut.wsdl create mode 100644 axiom/test/resources/wsdl/InteropTestRound1.wsdl create mode 100644 axiom/test/resources/wsdl/InteropTestRound1Doc.wsdl create mode 100644 axiom/test/resources/wsdl/LargeReturningString.wsdl create mode 100644 axiom/test/resources/wsdl/LimitedAllTest.wsdl create mode 100644 axiom/test/resources/wsdl/ManyTypeRefRoot.wsdl create mode 100644 axiom/test/resources/wsdl/MathOps.wsdl create mode 100644 axiom/test/resources/wsdl/MathOpsDoc.wsdl create mode 100644 axiom/test/resources/wsdl/MinOccurTest.wsdl create mode 100644 axiom/test/resources/wsdl/MultiOut.wsdl create mode 100644 axiom/test/resources/wsdl/NestedArrays.wsdl create mode 100644 axiom/test/resources/wsdl/NestedComplex.wsdl create mode 100644 axiom/test/resources/wsdl/NillableArrays.wsdl create mode 100644 axiom/test/resources/wsdl/OtherFaultException.wsdl create mode 100644 axiom/test/resources/wsdl/PlainTextAttachment.wsdl create mode 100644 axiom/test/resources/wsdl/PrimitiveAndArray.wsdl create mode 100644 axiom/test/resources/wsdl/RPCAllTest.wsdl create mode 100644 axiom/test/resources/wsdl/RecurseTypes.wsdl create mode 100644 axiom/test/resources/wsdl/RpcHttpHeaderTest1.wsdl create mode 100644 axiom/test/resources/wsdl/RpcHttpHeaderTest2.wsdl create mode 100644 axiom/test/resources/wsdl/RpcHttpHeaderTest3.wsdl create mode 100644 axiom/test/resources/wsdl/RpcHttpHeaderTest4.wsdl create mode 100644 axiom/test/resources/wsdl/RpcHttpHeaderTest5.wsdl create mode 100644 axiom/test/resources/wsdl/RpcHttpHeaderTest7.wsdl create mode 100644 axiom/test/resources/wsdl/RpcHttpHeaderTest8.wsdl create mode 100644 axiom/test/resources/wsdl/RpcSoapHeaderTest1.wsdl create mode 100644 axiom/test/resources/wsdl/RpcSoapHeaderTest10.wsdl create mode 100644 axiom/test/resources/wsdl/RpcSoapHeaderTest2.wsdl create mode 100644 axiom/test/resources/wsdl/RpcSoapHeaderTest3.wsdl create mode 100644 axiom/test/resources/wsdl/RpcSoapHeaderTest4.wsdl create mode 100644 axiom/test/resources/wsdl/RpcSoapHeaderTest6.wsdl create mode 100644 axiom/test/resources/wsdl/RpcSoapHeaderTest8.wsdl create mode 100644 axiom/test/resources/wsdl/RpcSoapHeaderTest9.wsdl create mode 100644 axiom/test/resources/wsdl/SimpleArray.wsdl create mode 100644 axiom/test/resources/wsdl/SimpleArrayDoc.wsdl create mode 100644 axiom/test/resources/wsdl/SimpleArrays.wsdl create mode 100644 axiom/test/resources/wsdl/SimpleChoice.wsdl create mode 100644 axiom/test/resources/wsdl/SimpleRef.wsdl create mode 100644 axiom/test/resources/wsdl/SimpleRefDoc.wsdl create mode 100644 axiom/test/resources/wsdl/SimpleTypeArray.wsdl create mode 100644 axiom/test/resources/wsdl/SimpleTypeInnerUnbounded.wsdl create mode 100644 axiom/test/resources/wsdl/SimpleTypeInnerUnboundedInOutput.wsdl create mode 100644 axiom/test/resources/wsdl/StockQuotes.wsdl create mode 100644 axiom/test/resources/wsdl/TestTransportTimeout.wsdl create mode 100644 axiom/test/resources/wsdl/UDDI.wsdl create mode 100644 axiom/test/resources/wsdl/UnboundedChoice.wsdl create mode 100644 axiom/test/resources/wsdl/UnboundedStringChoice.wsdl create mode 100644 axiom/test/resources/wsdl/XSDAttribute.wsdl create mode 100644 axiom/test/resources/wsdl/XSDElement.wsdl create mode 100644 axiom/test/resources/wsdl/XSDElementNil.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_ENTITIES.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_ENTITY.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_ID.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_IDREF.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_IDREFS.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_NCName.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_NMTOKEN.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_NMTOKENS.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_NOTATION.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_Name.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_QName.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_anyURI.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_base64Binary.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_boolean.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_byte.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_date.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_dateTime.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_decimal.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_double.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_duration.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_float.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_gDay.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_gMonth.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_gMonthDay.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_gYear.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_gYearMonth.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_hexBinary.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_int.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_integer.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_language.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_long.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_negativeInteger.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_nonNegativeInteger.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_nonPositiveInteger.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_normalizedString.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_positiveInteger.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_short.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_string.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_time.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_token.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_unsignedByte.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_unsignedInt.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_unsignedLong.wsdl create mode 100644 axiom/test/resources/wsdl/XSD_unsignedShort.wsdl create mode 100644 axiom/test/resources/wsdl/inquire_v2.wsdl create mode 100644 axiom/test/resources/wsdl/nillableComplexType.wsdl create mode 100644 axiom/test/resources/wsdl/nillableComplexType.xsd create mode 100644 axiom/test/resources/wsdl/wsaTestService.wsdl create mode 100644 axiom/test/resources/xml/om/axis.xml create mode 100644 axiom/test/resources/xml/om/basic.xml create mode 100644 axiom/test/resources/xml/om/basicupdate.xml create mode 100644 axiom/test/resources/xml/om/contents.xml create mode 100644 axiom/test/resources/xml/om/defaultNamespace.xml create mode 100644 axiom/test/resources/xml/om/evaluate.xml create mode 100644 axiom/test/resources/xml/om/fibo.xml create mode 100644 axiom/test/resources/xml/om/id.xml create mode 100644 axiom/test/resources/xml/om/jaxen24.xml create mode 100644 axiom/test/resources/xml/om/jaxen3.xml create mode 100644 axiom/test/resources/xml/om/lang.xml create mode 100644 axiom/test/resources/xml/om/message.xml create mode 100644 axiom/test/resources/xml/om/moreover.xml create mode 100644 axiom/test/resources/xml/om/much_ado.xml create mode 100644 axiom/test/resources/xml/om/namespaces.xml create mode 100644 axiom/test/resources/xml/om/nitf.xml create mode 100644 axiom/test/resources/xml/om/numbers.xml create mode 100644 axiom/test/resources/xml/om/pi.xml create mode 100644 axiom/test/resources/xml/om/pi2.xml create mode 100644 axiom/test/resources/xml/om/simple.xml create mode 100644 axiom/test/resources/xml/om/spaces.xml create mode 100644 axiom/test/resources/xml/om/test.xml create mode 100644 axiom/test/resources/xml/om/testNamespaces.xml create mode 100644 axiom/test/resources/xml/om/underscore.xml create mode 100644 axiom/test/resources/xml/om/web.xml create mode 100644 axiom/test/resources/xml/om/web2.xml create mode 100644 axiom/test/resources/xml/soap/OMElementTest.xml create mode 100644 axiom/test/resources/xml/soap/badsoap/bodyNotQualified.xml create mode 100644 axiom/test/resources/xml/soap/badsoap/envelopeMissing.xml create mode 100644 axiom/test/resources/xml/soap/badsoap/haederBodyWrongOrder.xml create mode 100644 axiom/test/resources/xml/soap/badsoap/notnamespaceQualified.xml create mode 100644 axiom/test/resources/xml/soap/badsoap/twoBodymessage.xml create mode 100644 axiom/test/resources/xml/soap/badsoap/twoheaders.xml create mode 100644 axiom/test/resources/xml/soap/badsoap/wrongSoapNs.xml create mode 100644 axiom/test/resources/xml/soap/emtyBodymessage.xml create mode 100644 axiom/test/resources/xml/soap/invalidMustUnderstandSOAP12.xml create mode 100644 axiom/test/resources/xml/soap/minimalMessage.xml create mode 100644 axiom/test/resources/xml/soap/reallyReallyBigMessage.xml create mode 100644 axiom/test/resources/xml/soap/sample1.txt create mode 100644 axiom/test/resources/xml/soap/sample1.xml create mode 100644 axiom/test/resources/xml/soap/security2-soap.xml create mode 100644 axiom/test/resources/xml/soap/soap11/soap11fault.xml create mode 100644 axiom/test/resources/xml/soap/soap11/soap11message.xml create mode 100644 axiom/test/resources/xml/soap/soap12message.xml create mode 100644 axiom/test/resources/xml/soap/soapmessage.txt create mode 100644 axiom/test/resources/xml/soap/soapmessage.xml create mode 100644 axiom/test/resources/xml/soap/soapmessage1.xml create mode 100644 axiom/test/resources/xml/soap/test.xml create mode 100644 axiom/test/resources/xml/soap/whitespacedMessage.xml create mode 100644 axiom/test/resources/xml/soap/wrongEnvelopeNamespace.xml create mode 100644 axiom/test/soap/Makefile.am create mode 100644 axiom/test/soap/test_soap.c create mode 100644 axiom/test/util/Makefile.am create mode 100644 axiom/test/util/axiom_util_test.c create mode 100644 axiom/test/util/build.sh create mode 100644 axiom/test/util/test.xml create mode 100644 axiom/test/xpath/Makefile.am create mode 100644 axiom/test/xpath/results.txt create mode 100644 axiom/test/xpath/test.ns create mode 100644 axiom/test/xpath/test.xml create mode 100644 axiom/test/xpath/test.xpath create mode 100644 axiom/test/xpath/test_xpath.c create mode 100644 axiom/test/xpath/test_xpath_streaming.c create mode 100644 axis2c.pc.in create mode 100755 axis2c_build.sh create mode 100755 bindist.sh create mode 100755 build.sh create mode 100644 build/win32/axis2_env.bat create mode 100644 build/win32/bindist.bat create mode 100644 build/win32/build.bat create mode 100644 build/win32/clean.bat create mode 100644 build/win32/configure.in create mode 100644 build/win32/makefile create mode 100755 clean.sh create mode 100644 configure.ac create mode 100755 dist.sh create mode 100644 docs/README create mode 100644 guththila/AUTHORS create mode 100644 guththila/COPYING create mode 100644 guththila/ChangeLog create mode 100644 guththila/INSTALL create mode 100644 guththila/LICENSE create mode 100644 guththila/Makefile.am create mode 100644 guththila/NEWS create mode 100644 guththila/README create mode 100755 guththila/autogen.sh create mode 100755 guththila/build.sh create mode 100644 guththila/configure.ac create mode 100644 guththila/include/guththila.h create mode 100644 guththila/include/guththila_attribute.h create mode 100644 guththila/include/guththila_buffer.h create mode 100644 guththila/include/guththila_defines.h create mode 100644 guththila/include/guththila_error.h create mode 100644 guththila/include/guththila_namespace.h create mode 100644 guththila/include/guththila_reader.h create mode 100644 guththila/include/guththila_stack.h create mode 100644 guththila/include/guththila_token.h create mode 100644 guththila/include/guththila_xml_writer.h create mode 100644 guththila/samples/guththila_main.c create mode 100644 guththila/samples/guththila_writer_main.c create mode 100644 guththila/src/Makefile.am create mode 100644 guththila/src/guththila_attribute.c create mode 100644 guththila/src/guththila_buffer.c create mode 100644 guththila/src/guththila_namespace.c create mode 100644 guththila/src/guththila_reader.c create mode 100644 guththila/src/guththila_stack.c create mode 100644 guththila/src/guththila_token.c create mode 100644 guththila/src/guththila_xml_parser.c create mode 100644 guththila/src/guththila_xml_writer.c create mode 120000 guththila/tests/resources/om create mode 120000 guththila/tests/resources/soap create mode 100755 guththila/tests/s create mode 100644 guththila/tests/test.c create mode 100644 guththila/tests/test.h create mode 100644 guththila/tests/test_attribute.c create mode 100644 ides/Makefile.am create mode 100644 ides/README create mode 100644 ides/vc/axis2c/axiom/axiom.vcproj create mode 100644 ides/vc/axis2c/axis2_engine/axis2_engine.vcproj create mode 100644 ides/vc/axis2c/axis2_http_receiver/axis2_http_receiver.vcproj create mode 100644 ides/vc/axis2c/axis2_http_sender/axis2_http_sender.vcproj create mode 100644 ides/vc/axis2c/axis2_http_server/axis2_http_server.vcproj create mode 100644 ides/vc/axis2c/axis2_mod_addr/axis2_mod_addr.vcproj create mode 100644 ides/vc/axis2c/axis2_mod_log/axis2_mod_log.vcproj create mode 100644 ides/vc/axis2c/axis2_parser/axis2_parser.vcproj create mode 100644 ides/vc/axis2c/axis2_parser_guththila/axis2_parser_guththila.vcproj create mode 100644 ides/vc/axis2c/axis2_tcp_receiver/axis2_tcp_receiver.vcproj create mode 100644 ides/vc/axis2c/axis2_tcp_sender/axis2_tcp_sender.vcproj create mode 100644 ides/vc/axis2c/axis2_tcp_server/axis2_tcp_server.vcproj create mode 100644 ides/vc/axis2c/axis2_xpath/axis2_xpath.vcproj create mode 100644 ides/vc/axis2c/axis2c.sln create mode 100644 ides/vc/axis2c/axutil/axutil.vcproj create mode 100644 ides/vc/axis2c/clients/clients.sln create mode 100644 ides/vc/axis2c/clients/echo/echo.vcproj create mode 100644 ides/vc/axis2c/clients/echo_blocking/echo_blocking.vcproj create mode 100644 ides/vc/axis2c/clients/echo_blocking_addr/echo_blocking_addr.vcproj create mode 100644 ides/vc/axis2c/clients/echo_blocking_auth/echo_blocking_auth.vcproj create mode 100644 ides/vc/axis2c/clients/echo_blocking_dual/echo_blocking_dual.vcproj create mode 100644 ides/vc/axis2c/clients/echo_non_blocking/echo_non_blocking.vcproj create mode 100644 ides/vc/axis2c/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj create mode 100644 ides/vc/axis2c/clients/echo_rest/echo_rest.vcproj create mode 100644 ides/vc/axis2c/clients/google/google.vcproj create mode 100644 ides/vc/axis2c/clients/math/math.vcproj create mode 100644 ides/vc/axis2c/clients/mtom/mtom.vcproj create mode 100644 ides/vc/axis2c/clients/notify/notify.vcproj create mode 100644 ides/vc/axis2c/clients/yahoo/yahoo.vcproj create mode 100644 ides/vc/axis2c/guththila/guththila.sln create mode 100644 ides/vc/axis2c/guththila/guththila.vcproj create mode 100644 ides/vc/axis2c/mod_axis2/mod_axis2.sln create mode 100644 ides/vc/axis2c/mod_axis2/mod_axis2.vcproj create mode 100644 ides/vc/axis2c/mod_axis2_IIS/mod_axis2_IIS.sln create mode 100644 ides/vc/axis2c/mod_axis2_IIS/mod_axis2_IIS.vcproj create mode 100644 ides/vc/axis2c/neethi/neethi.vcproj create mode 100644 ides/vc/axis2c/services/Calculator/Calculator.vcproj create mode 100644 ides/vc/axis2c/services/echo/echo.vcproj create mode 100644 ides/vc/axis2c/services/math/math.vcproj create mode 100644 ides/vc/axis2c/services/mtom/mtom.vcproj create mode 100644 ides/vc/axis2c/services/notify/notify.vcproj create mode 100644 ides/vc/axis2c/services/services.sln create mode 100644 ides/vc/axis2c/tcpmon/tcpmon.sln create mode 100644 ides/vc/axis2c/tcpmon/tcpmon.vcproj create mode 100644 ides/vc/samples/clients/clients.sln create mode 100644 ides/vc/samples/clients/echo/echo.vcproj create mode 100644 ides/vc/samples/clients/echo_blocking/echo_blocking.vcproj create mode 100644 ides/vc/samples/clients/echo_blocking_addr/echo_blocking_addr.vcproj create mode 100644 ides/vc/samples/clients/echo_blocking_dual/echo_blocking_dual.vcproj create mode 100644 ides/vc/samples/clients/echo_non_blocking/echo_non_blocking.vcproj create mode 100644 ides/vc/samples/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj create mode 100644 ides/vc/samples/clients/echo_rest/echo_rest.vcproj create mode 100644 ides/vc/samples/clients/google/google.vcproj create mode 100644 ides/vc/samples/clients/math/math.vcproj create mode 100644 ides/vc/samples/clients/mtom/mtom.vcproj create mode 100644 ides/vc/samples/clients/notify/notify.vcproj create mode 100644 ides/vc/samples/clients/yahoo/yahoo.vcproj create mode 100644 ides/vc/samples/services/Calculator/Calculator.vcproj create mode 100644 ides/vc/samples/services/echo/echo.vcproj create mode 100644 ides/vc/samples/services/math/math.vcproj create mode 100644 ides/vc/samples/services/mtom/mtom.vcproj create mode 100644 ides/vc/samples/services/notify/notify.vcproj create mode 100644 ides/vc/samples/services/services.sln create mode 100644 ides/vc6/axis2c/README.txt create mode 100644 ides/vc6/axis2c/axiom/axiom.dsp create mode 100644 ides/vc6/axis2c/axis2_engine/axis2_engine.dsp create mode 100644 ides/vc6/axis2c/axis2_http_receiver/axis2_http_receiver.dsp create mode 100644 ides/vc6/axis2c/axis2_http_sender/axis2_http_sender.dsp create mode 100644 ides/vc6/axis2c/axis2_http_server/axis2_http_server.dsp create mode 100644 ides/vc6/axis2c/axis2_mod_addr/axis2_mod_addr.dsp create mode 100644 ides/vc6/axis2c/axis2_mod_log/axis2_mod_log.dsp create mode 100644 ides/vc6/axis2c/axis2_parser/axis2_parser.dsp create mode 100644 ides/vc6/axis2c/axis2_tcp_receiver/axis2_tcp_receiver.dsp create mode 100644 ides/vc6/axis2c/axis2_tcp_sender/axis2_tcp_sender.dsp create mode 100644 ides/vc6/axis2c/axis2_tcp_server/axis2_tcp_server.dsp create mode 100644 ides/vc6/axis2c/axis2c.dsw create mode 100644 ides/vc6/axis2c/axutil/axutil.dsp create mode 100644 ides/vc6/axis2c/mod_axis2/mod_axis2.dsp create mode 100644 ides/vc6/axis2c/mod_axis2_IIS/mod_axis2_IIS.dsp create mode 100644 ides/vc6/axis2c/neethi/neethi.dsp create mode 100644 ides/vc9/axis2c/axiom/axiom.vcproj create mode 100644 ides/vc9/axis2c/axis2_engine/axis2_engine.vcproj create mode 100644 ides/vc9/axis2c/axis2_http_receiver/axis2_http_receiver.vcproj create mode 100644 ides/vc9/axis2c/axis2_http_sender/axis2_http_sender.vcproj create mode 100644 ides/vc9/axis2c/axis2_http_server/axis2_http_server.vcproj create mode 100644 ides/vc9/axis2c/axis2_mod_addr/axis2_mod_addr.vcproj create mode 100644 ides/vc9/axis2c/axis2_mod_log/axis2_mod_log.vcproj create mode 100644 ides/vc9/axis2c/axis2_parser/axis2_parser.vcproj create mode 100644 ides/vc9/axis2c/axis2_parser_guththila/axis2_parser_guththila.vcproj create mode 100644 ides/vc9/axis2c/axis2_tcp_receiver/axis2_tcp_receiver.vcproj create mode 100644 ides/vc9/axis2c/axis2_tcp_sender/axis2_tcp_sender.vcproj create mode 100644 ides/vc9/axis2c/axis2_tcp_server/axis2_tcp_server.vcproj create mode 100644 ides/vc9/axis2c/axis2_xpath/axis2_xpath.vcproj create mode 100644 ides/vc9/axis2c/axis2c.sln create mode 100644 ides/vc9/axis2c/axutil/axutil.vcproj create mode 100644 ides/vc9/axis2c/clients/clients.sln create mode 100644 ides/vc9/axis2c/clients/echo/echo.vcproj create mode 100644 ides/vc9/axis2c/clients/echo_blocking/echo_blocking.vcproj create mode 100644 ides/vc9/axis2c/clients/echo_blocking_addr/echo_blocking_addr.vcproj create mode 100644 ides/vc9/axis2c/clients/echo_blocking_auth/echo_blocking_auth.vcproj create mode 100644 ides/vc9/axis2c/clients/echo_blocking_dual/echo_blocking_dual.vcproj create mode 100644 ides/vc9/axis2c/clients/echo_non_blocking/echo_non_blocking.vcproj create mode 100644 ides/vc9/axis2c/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj create mode 100644 ides/vc9/axis2c/clients/echo_rest/echo_rest.vcproj create mode 100644 ides/vc9/axis2c/clients/google/google.vcproj create mode 100644 ides/vc9/axis2c/clients/math/math.vcproj create mode 100644 ides/vc9/axis2c/clients/mtom/mtom.vcproj create mode 100644 ides/vc9/axis2c/clients/notify/notify.vcproj create mode 100644 ides/vc9/axis2c/clients/yahoo/yahoo.vcproj create mode 100644 ides/vc9/axis2c/guththila/guththila.sln create mode 100644 ides/vc9/axis2c/guththila/guththila.vcproj create mode 100644 ides/vc9/axis2c/mod_axis2/mod_axis2.sln create mode 100644 ides/vc9/axis2c/mod_axis2/mod_axis2.vcproj create mode 100644 ides/vc9/axis2c/mod_axis2_IIS/mod_axis2_IIS.sln create mode 100644 ides/vc9/axis2c/mod_axis2_IIS/mod_axis2_IIS.vcproj create mode 100644 ides/vc9/axis2c/neethi/neethi.vcproj create mode 100644 ides/vc9/axis2c/services/Calculator/Calculator.vcproj create mode 100644 ides/vc9/axis2c/services/echo/echo.vcproj create mode 100644 ides/vc9/axis2c/services/math/math.vcproj create mode 100644 ides/vc9/axis2c/services/mtom/mtom.vcproj create mode 100644 ides/vc9/axis2c/services/notify/notify.vcproj create mode 100644 ides/vc9/axis2c/services/services.sln create mode 100644 ides/vc9/axis2c/tcpmon/tcpmon.sln create mode 100644 ides/vc9/axis2c/tcpmon/tcpmon.vcproj create mode 100644 ides/vc9/samples/clients/clients.sln create mode 100644 ides/vc9/samples/clients/echo/echo.vcproj create mode 100644 ides/vc9/samples/clients/echo_blocking/echo_blocking.vcproj create mode 100644 ides/vc9/samples/clients/echo_blocking_addr/echo_blocking_addr.vcproj create mode 100644 ides/vc9/samples/clients/echo_blocking_dual/echo_blocking_dual.vcproj create mode 100644 ides/vc9/samples/clients/echo_non_blocking/echo_non_blocking.vcproj create mode 100644 ides/vc9/samples/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj create mode 100644 ides/vc9/samples/clients/echo_rest/echo_rest.vcproj create mode 100644 ides/vc9/samples/clients/google/google.vcproj create mode 100644 ides/vc9/samples/clients/math/math.vcproj create mode 100644 ides/vc9/samples/clients/mtom/mtom.vcproj create mode 100644 ides/vc9/samples/clients/notify/notify.vcproj create mode 100644 ides/vc9/samples/clients/yahoo/yahoo.vcproj create mode 100644 ides/vc9/samples/services/Calculator/Calculator.vcproj create mode 100644 ides/vc9/samples/services/echo/echo.vcproj create mode 100644 ides/vc9/samples/services/math/math.vcproj create mode 100644 ides/vc9/samples/services/mtom/mtom.vcproj create mode 100644 ides/vc9/samples/services/notify/notify.vcproj create mode 100644 ides/vc9/samples/services/services.sln create mode 100644 include/Makefile.am create mode 100644 include/axis2_addr.h create mode 100644 include/axis2_addr_mod.h create mode 100644 include/axis2_any_content_type.h create mode 100644 include/axis2_async_result.h create mode 100644 include/axis2_callback.h create mode 100644 include/axis2_callback_recv.h create mode 100644 include/axis2_client.h create mode 100644 include/axis2_conf.h create mode 100644 include/axis2_conf_ctx.h create mode 100644 include/axis2_conf_init.h create mode 100644 include/axis2_const.h create mode 100644 include/axis2_core_dll_desc.h create mode 100644 include/axis2_core_utils.h create mode 100644 include/axis2_ctx.h create mode 100644 include/axis2_defines.h create mode 100644 include/axis2_desc.h create mode 100644 include/axis2_description.h create mode 100644 include/axis2_disp.h create mode 100644 include/axis2_endpoint_ref.h create mode 100644 include/axis2_engine.h create mode 100644 include/axis2_flow.h create mode 100644 include/axis2_flow_container.h create mode 100644 include/axis2_handler.h create mode 100644 include/axis2_handler_desc.h create mode 100644 include/axis2_http_accept_record.h create mode 100644 include/axis2_http_client.h create mode 100644 include/axis2_http_header.h create mode 100644 include/axis2_http_out_transport_info.h create mode 100644 include/axis2_http_request_line.h create mode 100644 include/axis2_http_response_writer.h create mode 100644 include/axis2_http_sender.h create mode 100644 include/axis2_http_server.h create mode 100644 include/axis2_http_simple_request.h create mode 100644 include/axis2_http_simple_response.h create mode 100644 include/axis2_http_status_line.h create mode 100644 include/axis2_http_svr_thread.h create mode 100644 include/axis2_http_transport.h create mode 100644 include/axis2_http_transport_sender.h create mode 100644 include/axis2_http_transport_utils.h create mode 100644 include/axis2_http_worker.h create mode 100644 include/axis2_listener_manager.h create mode 100644 include/axis2_module.h create mode 100644 include/axis2_module_desc.h create mode 100644 include/axis2_msg.h create mode 100644 include/axis2_msg_ctx.h create mode 100644 include/axis2_msg_info_headers.h create mode 100644 include/axis2_msg_recv.h create mode 100644 include/axis2_op.h create mode 100644 include/axis2_op_client.h create mode 100644 include/axis2_op_ctx.h create mode 100644 include/axis2_options.h create mode 100644 include/axis2_out_transport_info.h create mode 100644 include/axis2_phase.h create mode 100644 include/axis2_phase_holder.h create mode 100644 include/axis2_phase_meta.h create mode 100644 include/axis2_phase_resolver.h create mode 100644 include/axis2_phase_rule.h create mode 100644 include/axis2_phases_info.h create mode 100644 include/axis2_policy_include.h create mode 100644 include/axis2_raw_xml_in_out_msg_recv.h create mode 100644 include/axis2_relates_to.h create mode 100644 include/axis2_simple_http_svr_conn.h create mode 100644 include/axis2_stub.h create mode 100644 include/axis2_svc.h create mode 100644 include/axis2_svc_client.h create mode 100644 include/axis2_svc_ctx.h create mode 100644 include/axis2_svc_grp.h create mode 100644 include/axis2_svc_grp_ctx.h create mode 100644 include/axis2_svc_name.h create mode 100644 include/axis2_svc_skeleton.h create mode 100644 include/axis2_svr_callback.h create mode 100644 include/axis2_thread_mutex.h create mode 100644 include/axis2_transport_in_desc.h create mode 100644 include/axis2_transport_out_desc.h create mode 100644 include/axis2_transport_receiver.h create mode 100644 include/axis2_transport_sender.h create mode 100644 include/axis2_util.h create mode 100644 maven.xml create mode 100644 neethi/AUTHORS create mode 100644 neethi/COPYING create mode 100644 neethi/ChangeLog create mode 100644 neethi/INSTALL create mode 100644 neethi/Makefile.am create mode 100644 neethi/NEWS create mode 100644 neethi/README create mode 100755 neethi/autogen.sh create mode 100644 neethi/configure.ac create mode 100644 neethi/include/axis2_rm_assertion.h create mode 100644 neethi/include/axis2_rm_assertion_builder.h create mode 100644 neethi/include/neethi_all.h create mode 100644 neethi/include/neethi_assertion.h create mode 100644 neethi/include/neethi_assertion_builder.h create mode 100644 neethi/include/neethi_constants.h create mode 100644 neethi/include/neethi_engine.h create mode 100644 neethi/include/neethi_exactlyone.h create mode 100644 neethi/include/neethi_includes.h create mode 100644 neethi/include/neethi_mtom_assertion_checker.h create mode 100644 neethi/include/neethi_operator.h create mode 100644 neethi/include/neethi_policy.h create mode 100644 neethi/include/neethi_reference.h create mode 100644 neethi/include/neethi_registry.h create mode 100644 neethi/include/neethi_util.h create mode 100644 neethi/include/rp_algorithmsuite.h create mode 100644 neethi/include/rp_algorithmsuite_builder.h create mode 100644 neethi/include/rp_asymmetric_binding.h create mode 100644 neethi/include/rp_asymmetric_binding_builder.h create mode 100644 neethi/include/rp_binding_commons.h create mode 100644 neethi/include/rp_bootstrap_policy_builder.h create mode 100644 neethi/include/rp_builders.h create mode 100644 neethi/include/rp_defines.h create mode 100644 neethi/include/rp_element.h create mode 100644 neethi/include/rp_encryption_token_builder.h create mode 100644 neethi/include/rp_header.h create mode 100644 neethi/include/rp_https_token.h create mode 100644 neethi/include/rp_https_token_builder.h create mode 100644 neethi/include/rp_includes.h create mode 100644 neethi/include/rp_initiator_token_builder.h create mode 100644 neethi/include/rp_issued_token.h create mode 100644 neethi/include/rp_issued_token_builder.h create mode 100644 neethi/include/rp_layout.h create mode 100644 neethi/include/rp_layout_builder.h create mode 100644 neethi/include/rp_policy_creator.h create mode 100644 neethi/include/rp_property.h create mode 100644 neethi/include/rp_protection_token_builder.h create mode 100644 neethi/include/rp_rampart_config.h create mode 100644 neethi/include/rp_rampart_config_builder.h create mode 100644 neethi/include/rp_recipient_token_builder.h create mode 100644 neethi/include/rp_saml_token.h create mode 100644 neethi/include/rp_saml_token_builder.h create mode 100644 neethi/include/rp_secpolicy.h create mode 100644 neethi/include/rp_secpolicy_builder.h create mode 100644 neethi/include/rp_security_context_token.h create mode 100644 neethi/include/rp_security_context_token_builder.h create mode 100644 neethi/include/rp_signature_token_builder.h create mode 100644 neethi/include/rp_signed_encrypted_elements.h create mode 100644 neethi/include/rp_signed_encrypted_items.h create mode 100644 neethi/include/rp_signed_encrypted_parts.h create mode 100644 neethi/include/rp_signed_encrypted_parts_builder.h create mode 100644 neethi/include/rp_supporting_tokens.h create mode 100644 neethi/include/rp_supporting_tokens_builder.h create mode 100644 neethi/include/rp_symmetric_asymmetric_binding_commons.h create mode 100644 neethi/include/rp_symmetric_binding.h create mode 100644 neethi/include/rp_symmetric_binding_builder.h create mode 100644 neethi/include/rp_token.h create mode 100644 neethi/include/rp_token_identifier.h create mode 100644 neethi/include/rp_transport_binding.h create mode 100644 neethi/include/rp_transport_binding_builder.h create mode 100644 neethi/include/rp_transport_token_builder.h create mode 100644 neethi/include/rp_trust10.h create mode 100644 neethi/include/rp_trust10_builder.h create mode 100644 neethi/include/rp_username_token.h create mode 100644 neethi/include/rp_username_token_builder.h create mode 100644 neethi/include/rp_wss10.h create mode 100644 neethi/include/rp_wss10_builder.h create mode 100644 neethi/include/rp_wss11.h create mode 100644 neethi/include/rp_wss11_builder.h create mode 100644 neethi/include/rp_x509_token.h create mode 100644 neethi/include/rp_x509_token_builder.h create mode 100644 neethi/src/Makefile.am create mode 100644 neethi/src/all.c create mode 100644 neethi/src/assertion.c create mode 100644 neethi/src/assertion_builder.c create mode 100644 neethi/src/engine.c create mode 100644 neethi/src/exactlyone.c create mode 100644 neethi/src/mtom_assertion_checker.c create mode 100644 neethi/src/operator.c create mode 100644 neethi/src/policy.c create mode 100644 neethi/src/reference.c create mode 100644 neethi/src/registry.c create mode 100644 neethi/src/rmpolicy/Makefile.am create mode 100644 neethi/src/rmpolicy/rm_assertion.c create mode 100644 neethi/src/rmpolicy/rm_assertion_builder.c create mode 100644 neethi/src/samples/test1.xml create mode 100644 neethi/src/samples/test10.xml create mode 100644 neethi/src/samples/test11.xml create mode 100644 neethi/src/samples/test12.xml create mode 100644 neethi/src/samples/test13.xml create mode 100644 neethi/src/samples/test14.xml create mode 100644 neethi/src/samples/test15.xml create mode 100644 neethi/src/samples/test16.xml create mode 100644 neethi/src/samples/test17.xml create mode 100644 neethi/src/samples/test18.xml create mode 100644 neethi/src/samples/test19.xml create mode 100644 neethi/src/samples/test2.xml create mode 100644 neethi/src/samples/test20.xml create mode 100644 neethi/src/samples/test21.xml create mode 100644 neethi/src/samples/test22.xml create mode 100644 neethi/src/samples/test23.xml create mode 100644 neethi/src/samples/test24.xml create mode 100644 neethi/src/samples/test25.xml create mode 100644 neethi/src/samples/test3.xml create mode 100644 neethi/src/samples/test4.xml create mode 100644 neethi/src/samples/test5.xml create mode 100644 neethi/src/samples/test6.xml create mode 100644 neethi/src/samples/test7.xml create mode 100644 neethi/src/samples/test8.xml create mode 100644 neethi/src/samples/test9.xml create mode 100644 neethi/src/secpolicy/Makefile.am create mode 100644 neethi/src/secpolicy/builder/Makefile.am create mode 100644 neethi/src/secpolicy/builder/algorithmsuite_builder.c create mode 100644 neethi/src/secpolicy/builder/asymmetric_binding_builder.c create mode 100644 neethi/src/secpolicy/builder/bootstrap_policy_builder.c create mode 100644 neethi/src/secpolicy/builder/encryption_token_builder.c create mode 100644 neethi/src/secpolicy/builder/https_token_builder.c create mode 100644 neethi/src/secpolicy/builder/initiator_token_builder.c create mode 100644 neethi/src/secpolicy/builder/issued_token_builder.c create mode 100644 neethi/src/secpolicy/builder/layout_builder.c create mode 100644 neethi/src/secpolicy/builder/protection_token_builder.c create mode 100644 neethi/src/secpolicy/builder/rampart_config_builder.c create mode 100644 neethi/src/secpolicy/builder/recipient_token_builder.c create mode 100644 neethi/src/secpolicy/builder/saml_token_builder.c create mode 100644 neethi/src/secpolicy/builder/secpolicy_builder.c create mode 100644 neethi/src/secpolicy/builder/security_context_token_builder.c create mode 100644 neethi/src/secpolicy/builder/signature_token_builder.c create mode 100644 neethi/src/secpolicy/builder/signed_encrypted_parts_builder.c create mode 100644 neethi/src/secpolicy/builder/supporting_tokens_builder.c create mode 100644 neethi/src/secpolicy/builder/symmetric_binding_builder.c create mode 100644 neethi/src/secpolicy/builder/token_identifier.c create mode 100644 neethi/src/secpolicy/builder/transport_binding_builder.c create mode 100644 neethi/src/secpolicy/builder/transport_token_builder.c create mode 100644 neethi/src/secpolicy/builder/trust10_builder.c create mode 100644 neethi/src/secpolicy/builder/username_token_builder.c create mode 100644 neethi/src/secpolicy/builder/wss10_builder.c create mode 100644 neethi/src/secpolicy/builder/wss11_builder.c create mode 100644 neethi/src/secpolicy/builder/x509_token_builder.c create mode 100644 neethi/src/secpolicy/model/Makefile.am create mode 100644 neethi/src/secpolicy/model/algorithmsuite.c create mode 100644 neethi/src/secpolicy/model/asymmetric_binding.c create mode 100644 neethi/src/secpolicy/model/binding_commons.c create mode 100644 neethi/src/secpolicy/model/element.c create mode 100644 neethi/src/secpolicy/model/header.c create mode 100644 neethi/src/secpolicy/model/https_token.c create mode 100644 neethi/src/secpolicy/model/issued_token.c create mode 100644 neethi/src/secpolicy/model/layout.c create mode 100644 neethi/src/secpolicy/model/property.c create mode 100644 neethi/src/secpolicy/model/rampart_config.c create mode 100644 neethi/src/secpolicy/model/saml_token.c create mode 100644 neethi/src/secpolicy/model/secpolicy.c create mode 100644 neethi/src/secpolicy/model/security_context_token.c create mode 100644 neethi/src/secpolicy/model/signed_encrypted_elements.c create mode 100644 neethi/src/secpolicy/model/signed_encrypted_items.c create mode 100644 neethi/src/secpolicy/model/signed_encrypted_parts.c create mode 100644 neethi/src/secpolicy/model/supporting_tokens.c create mode 100644 neethi/src/secpolicy/model/symmetric_asymmetric_binding_commons.c create mode 100644 neethi/src/secpolicy/model/symmetric_binding.c create mode 100644 neethi/src/secpolicy/model/token.c create mode 100644 neethi/src/secpolicy/model/transport_binding.c create mode 100644 neethi/src/secpolicy/model/trust10.c create mode 100644 neethi/src/secpolicy/model/ut.c create mode 100644 neethi/src/secpolicy/model/wss10.c create mode 100644 neethi/src/secpolicy/model/wss11.c create mode 100644 neethi/src/secpolicy/model/x509_token.c create mode 100644 neethi/src/util.c create mode 100644 neethi/test/Makefile.am create mode 100644 neethi/test/main.c create mode 100644 neethi/test/policies/1.5symmetric_binding_policy.xml create mode 100644 neethi/test/policies/Policy-for-Endpoint-1A.xml create mode 100644 neethi/test/policies/Policy-for-Endpoint-1B.xml create mode 100644 neethi/test/policies/Policy-for-Endpoint-2A.xml create mode 100644 neethi/test/policies/Policy-for-Endpoint-2B.xml create mode 100644 neethi/test/policies/Policy-for-Input-in-Operation-1A-in-relation-to-Endpoint-1A.xml create mode 100644 neethi/test/policies/Policy-for-Input-in-Operation-1A-in-relation-to-Endpoint-1B.xml create mode 100644 neethi/test/policies/Policy-for-Input-in-Operation-1B-in-relation-to-Endpoint-1A.xml create mode 100644 neethi/test/policies/Policy-for-Input-in-Operation-1B-in-relation-to-Endpoint-1B.xml create mode 100644 neethi/test/policies/Policy-for-Input-in-Operation-2A-in-relation-to-Endpoint-2A.xml create mode 100644 neethi/test/policies/Policy-for-Input-in-Operation-2A-in-relation-to-Endpoint-2B.xml create mode 100644 neethi/test/policies/Policy-for-Input-in-Operation-2B-in-relation-to-Endpoint-2A.xml create mode 100644 neethi/test/policies/Policy-for-Input-in-Operation-2B-in-relation-to-Endpoint-2B.xml create mode 100644 neethi/test/policies/Policy-for-Operation-1A-in-relation-to-Endpoint-1A.xml create mode 100644 neethi/test/policies/Policy-for-Operation-1A-in-relation-to-Endpoint-1B.xml create mode 100644 neethi/test/policies/Policy-for-Operation-1B-in-relation-to-Endpoint-1A.xml create mode 100644 neethi/test/policies/Policy-for-Operation-1B-in-relation-to-Endpoint-1B.xml create mode 100644 neethi/test/policies/Policy-for-Operation-2A-in-relation-to-Endpoint-2A.xml create mode 100644 neethi/test/policies/Policy-for-Operation-2A-in-relation-to-Endpoint-2B.xml create mode 100644 neethi/test/policies/Policy-for-Operation-2B-in-relation-to-Endpoint-2A.xml create mode 100644 neethi/test/policies/Policy-for-Operation-2B-in-relation-to-Endpoint-2B.xml create mode 100644 neethi/test/policies/Policy-for-OutFault-in-Operation-1A-in-relation-to-Endpoint-1A.xml create mode 100644 neethi/test/policies/Policy-for-OutFault-in-Operation-1A-in-relation-to-Endpoint-1B.xml create mode 100644 neethi/test/policies/Policy-for-OutFault-in-Operation-1B-in-relation-to-Endpoint-1A.xml create mode 100644 neethi/test/policies/Policy-for-OutFault-in-Operation-1B-in-relation-to-Endpoint-1B.xml create mode 100644 neethi/test/policies/Policy-for-OutFault-in-Operation-2A-in-relation-to-Endpoint-2A.xml create mode 100644 neethi/test/policies/Policy-for-OutFault-in-Operation-2A-in-relation-to-Endpoint-2B.xml create mode 100644 neethi/test/policies/Policy-for-OutFault-in-Operation-2B-in-relation-to-Endpoint-2A.xml create mode 100644 neethi/test/policies/Policy-for-OutFault-in-Operation-2B-in-relation-to-Endpoint-2B.xml create mode 100644 neethi/test/policies/Policy-for-Output-in-Operation-1A-in-relation-to-Endpoint-1A.xml create mode 100644 neethi/test/policies/Policy-for-Output-in-Operation-1A-in-relation-to-Endpoint-1B.xml create mode 100644 neethi/test/policies/Policy-for-Output-in-Operation-1B-in-relation-to-Endpoint-1A.xml create mode 100644 neethi/test/policies/Policy-for-Output-in-Operation-1B-in-relation-to-Endpoint-1B.xml create mode 100644 neethi/test/policies/Policy-for-Output-in-Operation-2A-in-relation-to-Endpoint-2A.xml create mode 100644 neethi/test/policies/Policy-for-Output-in-Operation-2A-in-relation-to-Endpoint-2B.xml create mode 100644 neethi/test/policies/Policy-for-Output-in-Operation-2B-in-relation-to-Endpoint-2A.xml create mode 100644 neethi/test/policies/Policy-for-Output-in-Operation-2B-in-relation-to-Endpoint-2B.xml create mode 100644 neethi/test/policies/Policy-for-Service-1.xml create mode 100644 neethi/test/policies/Policy-for-Service-2.xml create mode 100644 neethi/test/policies/PolicyAttachments.wsdl create mode 100644 neethi/test/policies/asymmetric_binding_policy.xml create mode 100644 neethi/test/policies/rm-1.0.xml create mode 100644 neethi/test/policies/rm-1.1.xml create mode 100644 neethi/test/policies/symmetric_binding_policy.xml create mode 100644 neethi/test/security_context_token/build.sh create mode 100644 neethi/test/security_context_token/security_context_token_test.c create mode 100644 neethi/test/test-policy.xml create mode 100644 neethi/test/test-resources/different-level-policies.xml create mode 100644 neethi/test/test-resources/echo-services.xml create mode 100644 neethi/test/test-resources/message-services-sc.xml create mode 100644 neethi/test/test-resources/services-1.xml create mode 100644 neethi/test/test-resources/services-2.xml create mode 100644 neethi/test/test-resources/services-3.xml create mode 100644 neethi/test/test-resources/services-4.xml create mode 100644 neethi/test/test-resources/services-5.xml create mode 100644 neethi/test/test-resources/services-6.xml create mode 100644 neethi/test/test-resources/services-7.xml create mode 100644 neethi/test/test-resources/services-8.xml create mode 100644 neethi/test/test-resources/services-9.xml create mode 100644 neethi/test/test-resources/services-sc-1.xml create mode 100644 neethi/test/test-resources/services-sc-2.xml create mode 100644 neethi/test/test.c create mode 100644 project.properties create mode 100644 project.xml create mode 100644 release_process create mode 100644 samples/AUTHORS create mode 100644 samples/COPYING create mode 100644 samples/ChangeLog create mode 100644 samples/INSTALL create mode 100644 samples/LICENSE create mode 100644 samples/Makefile.am create mode 100644 samples/NEWS create mode 100644 samples/README create mode 100755 samples/autogen.sh create mode 100755 samples/build.sh create mode 100644 samples/client/Makefile.am create mode 100644 samples/client/amqp/Makefile.am create mode 100644 samples/client/amqp/echo/Makefile.am create mode 100644 samples/client/amqp/echo/echo_blocking.c create mode 100644 samples/client/amqp/echo/echo_blocking_addr.c create mode 100644 samples/client/amqp/echo/echo_blocking_dual.c create mode 100644 samples/client/amqp/echo/echo_blocking_soap11.c create mode 100644 samples/client/amqp/echo/echo_non_blocking.c create mode 100644 samples/client/amqp/echo/echo_non_blocking_dual.c create mode 100644 samples/client/amqp/echo/echo_util.c create mode 100644 samples/client/amqp/echo/echo_util.h create mode 100644 samples/client/amqp/mtom/Makefile.am create mode 100644 samples/client/amqp/mtom/mtom_client.c create mode 100644 samples/client/amqp/mtom/resources/Makefile.am create mode 100644 samples/client/amqp/mtom/resources/axis2.jpg create mode 100644 samples/client/amqp/notify/Makefile.am create mode 100644 samples/client/amqp/notify/notify_client.c create mode 100644 samples/client/echo/Makefile.am create mode 100644 samples/client/echo/README.txt create mode 100644 samples/client/echo/echo.c create mode 100644 samples/client/echo/echo.mk create mode 100644 samples/client/google/Makefile.am create mode 100644 samples/client/google/README.txt create mode 100644 samples/client/google/google.mk create mode 100644 samples/client/google/google_client.c create mode 100644 samples/client/math/Makefile.am create mode 100644 samples/client/math/axis2_math_stub.c create mode 100644 samples/client/math/axis2_math_stub.h create mode 100644 samples/client/math/math.mk create mode 100644 samples/client/math/math_client.c create mode 100644 samples/client/math/services.xml create mode 100644 samples/client/mtom/Makefile.am create mode 100644 samples/client/mtom/mtom.mk create mode 100644 samples/client/mtom/mtom_client.c create mode 100644 samples/client/mtom/resources/Makefile.am create mode 100644 samples/client/mtom/resources/axis2.jpg create mode 100644 samples/client/mtom_callback/Makefile.am create mode 100644 samples/client/mtom_callback/mtom_callback.mk create mode 100644 samples/client/mtom_callback/mtom_callback_client.c create mode 100644 samples/client/notify/Makefile.am create mode 100644 samples/client/notify/notify.mk create mode 100644 samples/client/notify/notify_client.c create mode 100644 samples/client/version/Makefile.am create mode 100644 samples/client/version/axis2_version_stub.c create mode 100644 samples/client/version/axis2_version_stub.h create mode 100644 samples/client/version/services.xml create mode 100644 samples/client/version/test.xml create mode 100644 samples/client/version/version_client.c create mode 100644 samples/client/yahoo/Makefile.am create mode 100644 samples/client/yahoo/yahoo.mk create mode 100644 samples/client/yahoo/yahoo_client.c create mode 100644 samples/codegen/client/calc_xml_inout/Makefile.am create mode 100644 samples/codegen/client/calc_xml_inout/readme create mode 100644 samples/codegen/client/calc_xml_inout/test_calculator.c create mode 100644 samples/codegen/client/calculator/Makefile.am create mode 100644 samples/codegen/client/calculator/readme create mode 100644 samples/codegen/client/calculator/test_calculator.c create mode 100644 samples/codegen/client/interop_doc1/Makefile.am create mode 100644 samples/codegen/client/interop_doc1/readme create mode 100644 samples/codegen/client/interop_doc1/test_echo_date.c create mode 100644 samples/codegen/client/interop_doc1/test_echo_struct_array.c create mode 100644 samples/codegen/client/interop_doc2/Makefile.am create mode 100644 samples/codegen/client/interop_doc2/readme create mode 100644 samples/codegen/client/interop_doc2/test_echo_string.c create mode 100644 samples/codegen/client/interop_doc2/test_echo_string_array.c create mode 100644 samples/codegen/client/interop_doc2/test_echo_struct.c create mode 100644 samples/codegen/databinding/Calculator/Calculator.wsdl create mode 100644 samples/codegen/databinding/Calculator/client/CalculatorAdd.c create mode 100644 samples/codegen/databinding/Calculator/server/axis2_skel_Calculator.c create mode 100644 samples/codegen/databinding/READEME.txt create mode 100644 samples/codegen/databinding/StockQuoteService/StockQuote.xsd create mode 100644 samples/codegen/databinding/StockQuoteService/StockQuoteService.wsdl create mode 100644 samples/codegen/databinding/StockQuoteService/client/stock_quote_client.c create mode 100644 samples/codegen/databinding/StockQuoteService/server/axis2_skel_StockQuoteService.c create mode 100644 samples/codegen/server/calc_xml_inout/Makefile.am create mode 100644 samples/codegen/server/calc_xml_inout/axis2_skel_Calculator.c create mode 100644 samples/codegen/server/calc_xml_inout/readme create mode 100644 samples/codegen/server/calculator/Makefile.am create mode 100644 samples/codegen/server/calculator/axis2_skel_Calculator.c create mode 100644 samples/codegen/server/calculator/readme create mode 100644 samples/codegen/server/interop_doc1/Makefile.am create mode 100644 samples/codegen/server/interop_doc1/axis2_skel_InteropTestPortTypeDocService.c create mode 100644 samples/codegen/server/interop_doc1/readme create mode 100644 samples/codegen/server/interop_doc2/Makefile.am create mode 100644 samples/codegen/server/interop_doc2/axis2_skel_WSDLInteropTestDocLitService.c create mode 100644 samples/codegen/server/interop_doc2/readme create mode 100644 samples/configure.ac create mode 100644 samples/mtom_caching_callback/Makefile.am create mode 100644 samples/mtom_caching_callback/mtom_caching_callback.c create mode 100644 samples/mtom_sending_callback/Makefile.am create mode 100644 samples/mtom_sending_callback/mtom_sending_callback.c create mode 100644 samples/server/Calculator/Calculator.mk create mode 100644 samples/server/Calculator/Calculator.wsdl create mode 100644 samples/server/Calculator/Makefile.am create mode 100644 samples/server/Calculator/calc.c create mode 100644 samples/server/Calculator/calc.h create mode 100644 samples/server/Calculator/calc_skeleton.c create mode 100644 samples/server/Calculator/services.xml create mode 100644 samples/server/Makefile.am create mode 100644 samples/server/axis2.log create mode 100644 samples/server/axis2.xml create mode 100644 samples/server/echo/Makefile.am create mode 100644 samples/server/echo/echo.c create mode 100644 samples/server/echo/echo.h create mode 100644 samples/server/echo/echo.mk create mode 100644 samples/server/echo/echo_skeleton.c create mode 100644 samples/server/echo/services.xml create mode 100644 samples/server/math/Makefile.am create mode 100644 samples/server/math/math.c create mode 100644 samples/server/math/math.h create mode 100644 samples/server/math/math.mk create mode 100644 samples/server/math/math_skeleton.c create mode 100644 samples/server/math/services.xml create mode 100644 samples/server/mtom/Makefile.am create mode 100644 samples/server/mtom/mtom.c create mode 100644 samples/server/mtom/mtom.h create mode 100644 samples/server/mtom/mtom.mk create mode 100644 samples/server/mtom/mtom_skeleton.c create mode 100644 samples/server/mtom/services.xml create mode 100644 samples/server/mtom_callback/Makefile.am create mode 100644 samples/server/mtom_callback/mtom_callback.c create mode 100644 samples/server/mtom_callback/mtom_callback.h create mode 100644 samples/server/mtom_callback/mtom_callback.mk create mode 100644 samples/server/mtom_callback/mtom_skeleton.c create mode 100644 samples/server/mtom_callback/services.xml create mode 100644 samples/server/notify/Makefile.am create mode 100644 samples/server/notify/notify.c create mode 100644 samples/server/notify/notify.h create mode 100644 samples/server/notify/notify.mk create mode 100644 samples/server/notify/notify_skeleton.c create mode 100644 samples/server/notify/services.xml create mode 100644 samples/server/sg_math/Makefile.am create mode 100644 samples/server/sg_math/add.c create mode 100644 samples/server/sg_math/add.h create mode 100644 samples/server/sg_math/add_skeleton.c create mode 100644 samples/server/sg_math/div.c create mode 100644 samples/server/sg_math/div.h create mode 100644 samples/server/sg_math/div_skeleton.c create mode 100644 samples/server/sg_math/mul.c create mode 100644 samples/server/sg_math/mul.h create mode 100644 samples/server/sg_math/mul_skeleton.c create mode 100644 samples/server/sg_math/services.xml create mode 100644 samples/server/sg_math/sg_math.mk create mode 100644 samples/server/sg_math/sub.c create mode 100644 samples/server/sg_math/sub.h create mode 100644 samples/server/sg_math/sub_skeleton.c create mode 100644 samples/server/version/Makefile.am create mode 100644 samples/server/version/services.xml create mode 100644 samples/server/version/version.c create mode 100644 samples/server/version/version.h create mode 100644 samples/server/version/version_skel.c create mode 100644 samples/user_guide/Makefile.am create mode 100644 samples/user_guide/clients/Makefile.am create mode 100644 samples/user_guide/clients/echo_blocking.c create mode 100644 samples/user_guide/clients/echo_blocking.mk create mode 100644 samples/user_guide/clients/echo_blocking_addr.c create mode 100644 samples/user_guide/clients/echo_blocking_addr.mk create mode 100644 samples/user_guide/clients/echo_blocking_auth.c create mode 100644 samples/user_guide/clients/echo_blocking_auth.mk create mode 100644 samples/user_guide/clients/echo_blocking_dual.c create mode 100644 samples/user_guide/clients/echo_blocking_dual.mk create mode 100644 samples/user_guide/clients/echo_blocking_soap11.c create mode 100644 samples/user_guide/clients/echo_blocking_soap11.mk create mode 100644 samples/user_guide/clients/echo_non_blocking.c create mode 100644 samples/user_guide/clients/echo_non_blocking.mk create mode 100644 samples/user_guide/clients/echo_non_blocking_dual.c create mode 100644 samples/user_guide/clients/echo_non_blocking_dual.mk create mode 100644 samples/user_guide/clients/echo_rest.c create mode 100644 samples/user_guide/clients/echo_rest.mk create mode 100644 samples/user_guide/clients/echo_util.c create mode 100644 samples/user_guide/clients/echo_util.h create mode 100644 src/Makefile.am create mode 100644 src/core/Makefile.am create mode 100644 src/core/addr/Makefile.am create mode 100644 src/core/addr/any_content_type.c create mode 100644 src/core/addr/endpoint_ref.c create mode 100644 src/core/addr/msg_info_headers.c create mode 100644 src/core/addr/relates_to.c create mode 100644 src/core/addr/svc_name.c create mode 100644 src/core/clientapi/Makefile.am create mode 100644 src/core/clientapi/async_result.c create mode 100644 src/core/clientapi/callback.c create mode 100644 src/core/clientapi/callback_recv.c create mode 100644 src/core/clientapi/listener_manager.c create mode 100644 src/core/clientapi/op_client.c create mode 100644 src/core/clientapi/options.c create mode 100644 src/core/clientapi/stub.c create mode 100644 src/core/clientapi/svc_client.c create mode 100644 src/core/context/Makefile.am create mode 100644 src/core/context/conf_ctx.c create mode 100644 src/core/context/ctx.c create mode 100644 src/core/context/msg_ctx.c create mode 100644 src/core/context/op_ctx.c create mode 100644 src/core/context/svc_ctx.c create mode 100644 src/core/context/svc_grp_ctx.c create mode 100644 src/core/deployment/Makefile.am create mode 100644 src/core/deployment/arch_file_data.c create mode 100644 src/core/deployment/arch_reader.c create mode 100644 src/core/deployment/axis2_arch_file_data.h create mode 100644 src/core/deployment/axis2_arch_reader.h create mode 100644 src/core/deployment/axis2_conf_builder.h create mode 100644 src/core/deployment/axis2_dep_engine.h create mode 100644 src/core/deployment/axis2_deployment.h create mode 100644 src/core/deployment/axis2_desc_builder.h create mode 100644 src/core/deployment/axis2_module_builder.h create mode 100644 src/core/deployment/axis2_repos_listener.h create mode 100644 src/core/deployment/axis2_svc_builder.h create mode 100644 src/core/deployment/axis2_svc_grp_builder.h create mode 100644 src/core/deployment/axis2_ws_info.h create mode 100644 src/core/deployment/axis2_ws_info_list.h create mode 100644 src/core/deployment/conf_builder.c create mode 100644 src/core/deployment/conf_init.c create mode 100644 src/core/deployment/dep_engine.c create mode 100644 src/core/deployment/desc_builder.c create mode 100644 src/core/deployment/module_builder.c create mode 100644 src/core/deployment/phases_info.c create mode 100644 src/core/deployment/repos_listener.c create mode 100644 src/core/deployment/svc_builder.c create mode 100644 src/core/deployment/svc_grp_builder.c create mode 100644 src/core/deployment/ws_info.c create mode 100644 src/core/deployment/ws_info_list.c create mode 100644 src/core/description/Makefile.am create mode 100644 src/core/description/desc.c create mode 100644 src/core/description/flow.c create mode 100644 src/core/description/flow_container.c create mode 100644 src/core/description/handler_desc.c create mode 100644 src/core/description/module_desc.c create mode 100644 src/core/description/msg.c create mode 100644 src/core/description/op.c create mode 100644 src/core/description/phase_rule.c create mode 100644 src/core/description/policy_include.c create mode 100644 src/core/description/svc.c create mode 100644 src/core/description/svc_grp.c create mode 100644 src/core/description/transport_in_desc.c create mode 100644 src/core/description/transport_out_desc.c create mode 100644 src/core/engine/Makefile.am create mode 100644 src/core/engine/addr_disp.c create mode 100644 src/core/engine/axis2_disp_checker.h create mode 100644 src/core/engine/conf.c create mode 100644 src/core/engine/ctx_handler.c create mode 100644 src/core/engine/disp.c create mode 100644 src/core/engine/disp_checker.c create mode 100644 src/core/engine/engine.c create mode 100644 src/core/engine/handler.c create mode 100644 src/core/engine/phase.c create mode 100644 src/core/engine/req_uri_disp.c create mode 100644 src/core/engine/rest_disp.c create mode 100644 src/core/engine/soap_action_disp.c create mode 100644 src/core/engine/soap_body_disp.c create mode 100644 src/core/phaseresolver/Makefile.am create mode 100644 src/core/phaseresolver/phase_holder.c create mode 100644 src/core/phaseresolver/phase_resolver.c create mode 100644 src/core/receivers/Makefile.am create mode 100644 src/core/receivers/msg_recv.c create mode 100644 src/core/receivers/raw_xml_in_out_msg_recv.c create mode 100644 src/core/receivers/svr_callback.c create mode 100644 src/core/transport/Makefile.am create mode 100644 src/core/transport/amqp/Makefile.am create mode 100644 src/core/transport/amqp/receiver/Makefile.am create mode 100644 src/core/transport/amqp/receiver/axis2_amqp_receiver.c create mode 100644 src/core/transport/amqp/receiver/axis2_amqp_receiver.h create mode 100644 src/core/transport/amqp/receiver/qpid_receiver/Makefile.am create mode 100644 src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.cpp create mode 100644 src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.h create mode 100644 src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.cpp create mode 100644 src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.h create mode 100644 src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_listener.cpp create mode 100644 src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_listener.h create mode 100644 src/core/transport/amqp/receiver/qpid_receiver/request_processor/Makefile.am create mode 100644 src/core/transport/amqp/receiver/qpid_receiver/request_processor/axis2_amqp_request_processor.c create mode 100644 src/core/transport/amqp/receiver/qpid_receiver/request_processor/axis2_amqp_request_processor.h create mode 100644 src/core/transport/amqp/sender/Makefile.am create mode 100644 src/core/transport/amqp/sender/axis2_amqp_sender.c create mode 100644 src/core/transport/amqp/sender/axis2_amqp_sender.h create mode 100644 src/core/transport/amqp/sender/qpid_sender/Makefile.am create mode 100644 src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender.cpp create mode 100644 src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender.h create mode 100644 src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender_interface.cpp create mode 100644 src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender_interface.h create mode 100644 src/core/transport/amqp/server/Makefile.am create mode 100644 src/core/transport/amqp/server/axis2_amqp_server/Makefile.am create mode 100644 src/core/transport/amqp/server/axis2_amqp_server/axis2_amqp_server.c create mode 100644 src/core/transport/amqp/server/axis2_amqp_server/axis2_amqp_server.h create mode 100644 src/core/transport/amqp/util/Makefile.am create mode 100644 src/core/transport/amqp/util/axis2_amqp_defines.h create mode 100644 src/core/transport/amqp/util/axis2_amqp_util.c create mode 100644 src/core/transport/amqp/util/axis2_amqp_util.h create mode 100644 src/core/transport/http/Makefile.am create mode 100644 src/core/transport/http/common/Makefile.am create mode 100644 src/core/transport/http/common/http_accept_record.c create mode 100644 src/core/transport/http/common/http_header.c create mode 100644 src/core/transport/http/common/http_out_transport_info.c create mode 100644 src/core/transport/http/common/http_request_line.c create mode 100644 src/core/transport/http/common/http_response_writer.c create mode 100644 src/core/transport/http/common/http_simple_request.c create mode 100644 src/core/transport/http/common/http_simple_response.c create mode 100644 src/core/transport/http/common/http_status_line.c create mode 100644 src/core/transport/http/common/http_worker.c create mode 100644 src/core/transport/http/common/simple_http_svr_conn.c create mode 100644 src/core/transport/http/receiver/Makefile.am create mode 100644 src/core/transport/http/receiver/http_receiver.c create mode 100644 src/core/transport/http/receiver/http_svr_thread.c create mode 100644 src/core/transport/http/sender/Makefile.am create mode 100644 src/core/transport/http/sender/http_client.c create mode 100644 src/core/transport/http/sender/http_sender.c create mode 100644 src/core/transport/http/sender/http_transport_sender.c create mode 100644 src/core/transport/http/sender/libcurl/Makefile.am create mode 100644 src/core/transport/http/sender/libcurl/axis2_libcurl.c create mode 100644 src/core/transport/http/sender/libcurl/axis2_libcurl.h create mode 100644 src/core/transport/http/sender/libcurl/libcurl_stream.c create mode 100644 src/core/transport/http/sender/libcurl/libcurl_stream.h create mode 100644 src/core/transport/http/sender/ssl/Makefile.am create mode 100644 src/core/transport/http/sender/ssl/ssl_stream.c create mode 100644 src/core/transport/http/sender/ssl/ssl_stream.h create mode 100644 src/core/transport/http/sender/ssl/ssl_utils.c create mode 100644 src/core/transport/http/sender/ssl/ssl_utils.h create mode 100644 src/core/transport/http/server/CGI/Makefile.am create mode 100644 src/core/transport/http/server/CGI/axis2_cgi_main.c create mode 100644 src/core/transport/http/server/CGI/axis2_cgi_out_transport_info.c create mode 100644 src/core/transport/http/server/CGI/axis2_cgi_out_transport_info.h create mode 100644 src/core/transport/http/server/CGI/axis2_cgi_stream.c create mode 100644 src/core/transport/http/server/CGI/axis2_cgi_stream.h create mode 100644 src/core/transport/http/server/CGI/axis2_cgi_types.h create mode 100644 src/core/transport/http/server/IIS/README create mode 100644 src/core/transport/http/server/IIS/axis2_iis_constants.h create mode 100644 src/core/transport/http/server/IIS/axis2_iis_out_transport_info.c create mode 100644 src/core/transport/http/server/IIS/axis2_iis_out_transport_info.h create mode 100644 src/core/transport/http/server/IIS/axis2_iis_regedit.js create mode 100644 src/core/transport/http/server/IIS/axis2_iis_stream.c create mode 100644 src/core/transport/http/server/IIS/axis2_iis_stream.h create mode 100644 src/core/transport/http/server/IIS/axis2_iis_worker.c create mode 100644 src/core/transport/http/server/IIS/axis2_iis_worker.h create mode 100644 src/core/transport/http/server/IIS/axis2_isapi_plugin.c create mode 100644 src/core/transport/http/server/IIS/iis_iaspi_plugin_51/axis2_isapi_51.c create mode 100644 src/core/transport/http/server/IIS/mod_axis2.def create mode 100644 src/core/transport/http/server/Makefile.am create mode 100644 src/core/transport/http/server/apache2/Makefile.am create mode 100644 src/core/transport/http/server/apache2/apache2_out_transport_info.c create mode 100644 src/core/transport/http/server/apache2/apache2_stream.c create mode 100644 src/core/transport/http/server/apache2/apache2_stream.h create mode 100644 src/core/transport/http/server/apache2/apache2_worker.c create mode 100644 src/core/transport/http/server/apache2/axis2_apache2_out_transport_info.h create mode 100644 src/core/transport/http/server/apache2/axis2_apache2_worker.h create mode 100644 src/core/transport/http/server/apache2/mod_axis2.c create mode 100644 src/core/transport/http/server/simple_axis2_server/Makefile.am create mode 100644 src/core/transport/http/server/simple_axis2_server/http_server_main.c create mode 100644 src/core/transport/http/util/Makefile.am create mode 100644 src/core/transport/http/util/http_transport_utils.c create mode 100644 src/core/transport/tcp/Makefile.am create mode 100644 src/core/transport/tcp/axis2_simple_tcp_svr_conn.h create mode 100644 src/core/transport/tcp/axis2_tcp_server.h create mode 100644 src/core/transport/tcp/axis2_tcp_svr_thread.h create mode 100644 src/core/transport/tcp/axis2_tcp_transport.h create mode 100644 src/core/transport/tcp/axis2_tcp_transport_sender.h create mode 100644 src/core/transport/tcp/axis2_tcp_worker.h create mode 100644 src/core/transport/tcp/receiver/Makefile.am create mode 100644 src/core/transport/tcp/receiver/simple_tcp_svr_conn.c create mode 100644 src/core/transport/tcp/receiver/tcp_receiver.c create mode 100644 src/core/transport/tcp/receiver/tcp_svr_thread.c create mode 100644 src/core/transport/tcp/receiver/tcp_worker.c create mode 100644 src/core/transport/tcp/sender/Makefile.am create mode 100644 src/core/transport/tcp/sender/tcp_transport_sender.c create mode 100644 src/core/transport/tcp/server/Makefile.am create mode 100644 src/core/transport/tcp/server/simple_tcp_server/Makefile.am create mode 100644 src/core/transport/tcp/server/simple_tcp_server/tcp_server_main.c create mode 100644 src/core/transport/transport_receiver.c create mode 100644 src/core/util/Makefile.am create mode 100644 src/core/util/core_utils.c create mode 100644 src/modules/Makefile.am create mode 100644 src/modules/mod_addr/Makefile.am create mode 100644 src/modules/mod_addr/addr_in_handler.c create mode 100644 src/modules/mod_addr/addr_out_handler.c create mode 100644 src/modules/mod_addr/mod_addr.c create mode 100644 src/modules/mod_addr/module.xml create mode 100644 src/modules/mod_log/Makefile.am create mode 100644 src/modules/mod_log/log_in_handler.c create mode 100644 src/modules/mod_log/log_out_handler.c create mode 100644 src/modules/mod_log/mod_log.c create mode 100644 src/modules/mod_log/mod_log.h create mode 100644 src/modules/mod_log/module.xml create mode 100644 test/Makefile.am create mode 100644 test/core/Makefile.am create mode 100644 test/core/addr/Makefile.am create mode 100644 test/core/addr/test_addr.c create mode 100644 test/core/clientapi/Makefile.am create mode 100644 test/core/clientapi/addr_echo.xml create mode 100644 test/core/clientapi/echo.xml create mode 100644 test/core/clientapi/test_client.c create mode 100644 test/core/clientapi/test_clientapi.c create mode 100644 test/core/clientapi/test_svc_client_handler_count.c create mode 100644 test/core/context/Makefile.am create mode 100644 test/core/context/test_context.c create mode 100644 test/core/deployment/Makefile.am create mode 100644 test/core/deployment/axis2.xml create mode 100644 test/core/deployment/test_deployment.c create mode 100644 test/core/description/Makefile.am create mode 100644 test/core/description/test_description.c create mode 100644 test/core/engine/Makefile.am create mode 100644 test/core/engine/test_engine.c create mode 100644 test/core/transport/Makefile.am create mode 100644 test/core/transport/http/Makefile.am create mode 100644 test/core/transport/http/test_http_transport.c create mode 100644 test/find_policy.c create mode 100644 test/itest/Makefile.am create mode 100644 test/itest/whitemesa/Makefile.am create mode 100644 test/itest/whitemesa/round1/Makefile.am create mode 100644 test/itest/whitemesa/round1/README.txt create mode 100644 test/itest/whitemesa/round1/input create mode 100644 test/itest/whitemesa/round1/round1_client.c create mode 100644 test/itest/whitemesa/round1/run.sh create mode 100644 test/itest/whitemesa/round1/todo create mode 100644 test/itest/whitemesa/round2/Makefile.am create mode 100644 test/itest/whitemesa/round2/README.txt create mode 100644 test/itest/whitemesa/round2/input create mode 100644 test/itest/whitemesa/round2/readme create mode 100644 test/itest/whitemesa/round2/round2_client.c create mode 100644 test/itest/whitemesa/round2/run.sh create mode 100644 test/itest/whitemesa/round2/todo create mode 100644 test/resources/services.xml create mode 100644 test/resources/wsdl/Attachment1.wsdl create mode 100644 test/resources/wsdl/AttachmentService.wsdl create mode 100644 test/resources/wsdl/AxisBench.wsdl create mode 100644 test/resources/wsdl/BasicAllTest.wsdl create mode 100644 test/resources/wsdl/BasicChoice.wsdl create mode 100644 test/resources/wsdl/Calculator.wsdl create mode 100644 test/resources/wsdl/CalculatorDoc.wsdl create mode 100644 test/resources/wsdl/Choice.wsdl create mode 100644 test/resources/wsdl/CombinedAllTest.wsdl create mode 100644 test/resources/wsdl/CombinedChoice.wsdl create mode 100644 test/resources/wsdl/ComplexLists.wsdl create mode 100644 test/resources/wsdl/ComplexTypeAll.wsdl create mode 100644 test/resources/wsdl/DataHandlerService.wsdl create mode 100644 test/resources/wsdl/Enumeration.wsdl create mode 100644 test/resources/wsdl/ExceptionTest.wsdl create mode 100644 test/resources/wsdl/ExceptionTestDoc.wsdl create mode 100644 test/resources/wsdl/ExtensibilityQuery.wsdl create mode 100644 test/resources/wsdl/FaultMapping.wsdl create mode 100644 test/resources/wsdl/FaultMappingDoc.wsdl create mode 100644 test/resources/wsdl/FourLevelTestDoc.wsdl create mode 100644 test/resources/wsdl/InOut.wsdl create mode 100644 test/resources/wsdl/InteropTestRound1.wsdl create mode 100644 test/resources/wsdl/InteropTestRound1Doc.wsdl create mode 100644 test/resources/wsdl/LargeReturningString.wsdl create mode 100644 test/resources/wsdl/LimitedAllTest.wsdl create mode 100644 test/resources/wsdl/ManyTypeRefRoot.wsdl create mode 100644 test/resources/wsdl/MathOps.wsdl create mode 100644 test/resources/wsdl/MathOpsDoc.wsdl create mode 100644 test/resources/wsdl/MinOccurTest.wsdl create mode 100644 test/resources/wsdl/MultiOut.wsdl create mode 100644 test/resources/wsdl/NestedArrays.wsdl create mode 100644 test/resources/wsdl/NestedComplex.wsdl create mode 100644 test/resources/wsdl/NillableArrays.wsdl create mode 100644 test/resources/wsdl/OtherFaultException.wsdl create mode 100644 test/resources/wsdl/PlainTextAttachment.wsdl create mode 100644 test/resources/wsdl/PrimitiveAndArray.wsdl create mode 100644 test/resources/wsdl/RPCAllTest.wsdl create mode 100644 test/resources/wsdl/RecurseTypes.wsdl create mode 100644 test/resources/wsdl/RpcHttpHeaderTest1.wsdl create mode 100644 test/resources/wsdl/RpcHttpHeaderTest2.wsdl create mode 100644 test/resources/wsdl/RpcHttpHeaderTest3.wsdl create mode 100644 test/resources/wsdl/RpcHttpHeaderTest4.wsdl create mode 100644 test/resources/wsdl/RpcHttpHeaderTest5.wsdl create mode 100644 test/resources/wsdl/RpcHttpHeaderTest7.wsdl create mode 100644 test/resources/wsdl/RpcHttpHeaderTest8.wsdl create mode 100644 test/resources/wsdl/RpcSoapHeaderTest1.wsdl create mode 100644 test/resources/wsdl/RpcSoapHeaderTest10.wsdl create mode 100644 test/resources/wsdl/RpcSoapHeaderTest2.wsdl create mode 100644 test/resources/wsdl/RpcSoapHeaderTest3.wsdl create mode 100644 test/resources/wsdl/RpcSoapHeaderTest4.wsdl create mode 100644 test/resources/wsdl/RpcSoapHeaderTest6.wsdl create mode 100644 test/resources/wsdl/RpcSoapHeaderTest8.wsdl create mode 100644 test/resources/wsdl/RpcSoapHeaderTest9.wsdl create mode 100644 test/resources/wsdl/SimpleArray.wsdl create mode 100644 test/resources/wsdl/SimpleArrayDoc.wsdl create mode 100644 test/resources/wsdl/SimpleArrays.wsdl create mode 100644 test/resources/wsdl/SimpleChoice.wsdl create mode 100644 test/resources/wsdl/SimpleRef.wsdl create mode 100644 test/resources/wsdl/SimpleRefDoc.wsdl create mode 100644 test/resources/wsdl/SimpleTypeArray.wsdl create mode 100644 test/resources/wsdl/SimpleTypeInnerUnbounded.wsdl create mode 100644 test/resources/wsdl/SimpleTypeInnerUnboundedInOutput.wsdl create mode 100644 test/resources/wsdl/StockQuotes.wsdl create mode 100644 test/resources/wsdl/TestTransportTimeout.wsdl create mode 100644 test/resources/wsdl/UDDI.wsdl create mode 100644 test/resources/wsdl/UnboundedChoice.wsdl create mode 100644 test/resources/wsdl/UnboundedStringChoice.wsdl create mode 100644 test/resources/wsdl/XSDAttribute.wsdl create mode 100644 test/resources/wsdl/XSDElement.wsdl create mode 100644 test/resources/wsdl/XSDElementNil.wsdl create mode 100644 test/resources/wsdl/XSD_ENTITIES.wsdl create mode 100644 test/resources/wsdl/XSD_ENTITY.wsdl create mode 100644 test/resources/wsdl/XSD_ID.wsdl create mode 100644 test/resources/wsdl/XSD_IDREF.wsdl create mode 100644 test/resources/wsdl/XSD_IDREFS.wsdl create mode 100644 test/resources/wsdl/XSD_NCName.wsdl create mode 100644 test/resources/wsdl/XSD_NMTOKEN.wsdl create mode 100644 test/resources/wsdl/XSD_NMTOKENS.wsdl create mode 100644 test/resources/wsdl/XSD_NOTATION.wsdl create mode 100644 test/resources/wsdl/XSD_Name.wsdl create mode 100644 test/resources/wsdl/XSD_QName.wsdl create mode 100644 test/resources/wsdl/XSD_anyURI.wsdl create mode 100644 test/resources/wsdl/XSD_base64Binary.wsdl create mode 100644 test/resources/wsdl/XSD_boolean.wsdl create mode 100644 test/resources/wsdl/XSD_byte.wsdl create mode 100644 test/resources/wsdl/XSD_date.wsdl create mode 100644 test/resources/wsdl/XSD_dateTime.wsdl create mode 100644 test/resources/wsdl/XSD_decimal.wsdl create mode 100644 test/resources/wsdl/XSD_double.wsdl create mode 100644 test/resources/wsdl/XSD_duration.wsdl create mode 100644 test/resources/wsdl/XSD_float.wsdl create mode 100644 test/resources/wsdl/XSD_gDay.wsdl create mode 100644 test/resources/wsdl/XSD_gMonth.wsdl create mode 100644 test/resources/wsdl/XSD_gMonthDay.wsdl create mode 100644 test/resources/wsdl/XSD_gYear.wsdl create mode 100644 test/resources/wsdl/XSD_gYearMonth.wsdl create mode 100644 test/resources/wsdl/XSD_hexBinary.wsdl create mode 100644 test/resources/wsdl/XSD_int.wsdl create mode 100644 test/resources/wsdl/XSD_integer.wsdl create mode 100644 test/resources/wsdl/XSD_language.wsdl create mode 100644 test/resources/wsdl/XSD_long.wsdl create mode 100644 test/resources/wsdl/XSD_negativeInteger.wsdl create mode 100644 test/resources/wsdl/XSD_nonNegativeInteger.wsdl create mode 100644 test/resources/wsdl/XSD_nonPositiveInteger.wsdl create mode 100644 test/resources/wsdl/XSD_normalizedString.wsdl create mode 100644 test/resources/wsdl/XSD_positiveInteger.wsdl create mode 100644 test/resources/wsdl/XSD_short.wsdl create mode 100644 test/resources/wsdl/XSD_string.wsdl create mode 100644 test/resources/wsdl/XSD_time.wsdl create mode 100644 test/resources/wsdl/XSD_token.wsdl create mode 100644 test/resources/wsdl/XSD_unsignedByte.wsdl create mode 100644 test/resources/wsdl/XSD_unsignedInt.wsdl create mode 100644 test/resources/wsdl/XSD_unsignedLong.wsdl create mode 100644 test/resources/wsdl/XSD_unsignedShort.wsdl create mode 100644 test/resources/wsdl/inquire_v2.wsdl create mode 100644 test/resources/wsdl/interoptestdoclitparameters.wsdl create mode 100644 test/resources/wsdl/nillableComplexType.wsdl create mode 100644 test/resources/wsdl/nillableComplexType.xsd create mode 100644 test/resources/xml/om/axis.xml create mode 100644 test/resources/xml/om/basic.xml create mode 100644 test/resources/xml/om/basicupdate.xml create mode 100644 test/resources/xml/om/contents.xml create mode 100644 test/resources/xml/om/defaultNamespace.xml create mode 100644 test/resources/xml/om/evaluate.xml create mode 100644 test/resources/xml/om/fibo.xml create mode 100644 test/resources/xml/om/id.xml create mode 100644 test/resources/xml/om/jaxen24.xml create mode 100644 test/resources/xml/om/jaxen3.xml create mode 100644 test/resources/xml/om/lang.xml create mode 100644 test/resources/xml/om/message.xml create mode 100644 test/resources/xml/om/moreover.xml create mode 100644 test/resources/xml/om/much_ado.xml create mode 100644 test/resources/xml/om/namespaces.xml create mode 100644 test/resources/xml/om/nitf.xml create mode 100644 test/resources/xml/om/numbers.xml create mode 100644 test/resources/xml/om/pi.xml create mode 100644 test/resources/xml/om/pi2.xml create mode 100644 test/resources/xml/om/simple.xml create mode 100644 test/resources/xml/om/spaces.xml create mode 100644 test/resources/xml/om/test.xml create mode 100644 test/resources/xml/om/testNamespaces.xml create mode 100644 test/resources/xml/om/underscore.xml create mode 100644 test/resources/xml/om/web.xml create mode 100644 test/resources/xml/om/web2.xml create mode 100644 test/resources/xml/soap/OMElementTest.xml create mode 100644 test/resources/xml/soap/badsoap/bodyNotQualified.xml create mode 100644 test/resources/xml/soap/badsoap/envelopeMissing.xml create mode 100644 test/resources/xml/soap/badsoap/haederBodyWrongOrder.xml create mode 100644 test/resources/xml/soap/badsoap/notnamespaceQualified.xml create mode 100644 test/resources/xml/soap/badsoap/twoBodymessage.xml create mode 100644 test/resources/xml/soap/badsoap/twoheaders.xml create mode 100644 test/resources/xml/soap/badsoap/wrongSoapNs.xml create mode 100644 test/resources/xml/soap/emtyBodymessage.xml create mode 100644 test/resources/xml/soap/invalidMustUnderstandSOAP12.xml create mode 100644 test/resources/xml/soap/minimalMessage.xml create mode 100644 test/resources/xml/soap/reallyReallyBigMessage.xml create mode 100644 test/resources/xml/soap/sample1.txt create mode 100644 test/resources/xml/soap/sample1.xml create mode 100644 test/resources/xml/soap/security2-soap.xml create mode 100644 test/resources/xml/soap/soap11/soap11fault.xml create mode 100644 test/resources/xml/soap/soap11/soap11message.xml create mode 100644 test/resources/xml/soap/soap12message.xml create mode 100644 test/resources/xml/soap/soapmessage.txt create mode 100644 test/resources/xml/soap/soapmessage.xml create mode 100644 test/resources/xml/soap/soapmessage1.xml create mode 100644 test/resources/xml/soap/test.xml create mode 100644 test/resources/xml/soap/whitespacedMessage.xml create mode 100644 test/resources/xml/soap/wrongEnvelopeNamespace.xml create mode 100644 tools/codegen/javatool/README create mode 100644 tools/codegen/javatool/WSDL2C.bat create mode 100755 tools/codegen/javatool/WSDL2C.sh create mode 100644 tools/md5/AUTHORS create mode 100644 tools/md5/COPYING create mode 100644 tools/md5/ChangeLog create mode 100644 tools/md5/INSTALL create mode 100644 tools/md5/LICENSE create mode 100644 tools/md5/Makefile.am create mode 100644 tools/md5/NEWS create mode 100644 tools/md5/README create mode 100755 tools/md5/autogen.sh create mode 100644 tools/md5/build.sh create mode 100644 tools/md5/configure.ac create mode 100644 tools/md5/src/Makefile.am create mode 100644 tools/md5/src/md5.c create mode 100644 tools/md5/test/Makefile.am create mode 100644 tools/tcpmon/AUTHORS create mode 100644 tools/tcpmon/COPYING create mode 100644 tools/tcpmon/ChangeLog create mode 100644 tools/tcpmon/INSTALL create mode 100644 tools/tcpmon/LICENSE create mode 100644 tools/tcpmon/Makefile.am create mode 100644 tools/tcpmon/NEWS create mode 100644 tools/tcpmon/README create mode 100755 tools/tcpmon/autogen.sh create mode 100644 tools/tcpmon/build.sh create mode 100644 tools/tcpmon/configure.ac create mode 100644 tools/tcpmon/include/tcpmon_entry.h create mode 100644 tools/tcpmon/include/tcpmon_session.h create mode 100644 tools/tcpmon/include/tcpmon_util.h create mode 100644 tools/tcpmon/src/Makefile.am create mode 100644 tools/tcpmon/src/entry.c create mode 100644 tools/tcpmon/src/session.c create mode 100644 tools/tcpmon/src/tcpmon.c create mode 100644 tools/tcpmon/src/tcpmon_entry_local.h create mode 100644 tools/tcpmon/src/tcpmon_session_local.h create mode 100644 tools/tcpmon/src/util.c create mode 100644 tools/tcpmon/test/Makefile.am create mode 100644 tools/tcpmon/test/unit/Makefile.am create mode 100644 tools/tcpmon/test/unit/main.c create mode 100644 tools/tcpmon/test/unit/result create mode 100644 tools/tcpmon/test/unit/tcpmon_test.c create mode 100644 tools/tcpmon/test/unit/tcpmon_test.h create mode 100644 util/AUTHORS create mode 100644 util/COPYING create mode 100644 util/CREDITS create mode 100644 util/ChangeLog create mode 100644 util/INSTALL create mode 100644 util/LICENSE create mode 100644 util/Makefile.am create mode 100644 util/NEWS create mode 100644 util/README create mode 100755 util/autogen.sh create mode 100755 util/build.sh create mode 100644 util/configure.ac create mode 100644 util/include/Makefile.am create mode 100644 util/include/axutil_allocator.h create mode 100644 util/include/axutil_array_list.h create mode 100644 util/include/axutil_base64.h create mode 100644 util/include/axutil_base64_binary.h create mode 100644 util/include/axutil_class_loader.h create mode 100644 util/include/axutil_config.h create mode 100644 util/include/axutil_date_time.h create mode 100644 util/include/axutil_date_time_util.h create mode 100644 util/include/axutil_digest_calc.h create mode 100644 util/include/axutil_dir_handler.h create mode 100644 util/include/axutil_dll_desc.h create mode 100644 util/include/axutil_duration.h create mode 100644 util/include/axutil_env.h create mode 100644 util/include/axutil_error.h create mode 100644 util/include/axutil_error_default.h create mode 100644 util/include/axutil_file.h create mode 100644 util/include/axutil_file_handler.h create mode 100644 util/include/axutil_generic_obj.h create mode 100644 util/include/axutil_hash.h create mode 100644 util/include/axutil_http_chunked_stream.h create mode 100644 util/include/axutil_linked_list.h create mode 100644 util/include/axutil_log.h create mode 100644 util/include/axutil_log_default.h create mode 100644 util/include/axutil_md5.h create mode 100644 util/include/axutil_network_handler.h create mode 100644 util/include/axutil_param.h create mode 100644 util/include/axutil_param_container.h create mode 100644 util/include/axutil_properties.h create mode 100644 util/include/axutil_property.h create mode 100644 util/include/axutil_qname.h create mode 100644 util/include/axutil_rand.h create mode 100644 util/include/axutil_stack.h create mode 100644 util/include/axutil_stream.h create mode 100644 util/include/axutil_string.h create mode 100644 util/include/axutil_string_util.h create mode 100644 util/include/axutil_thread.h create mode 100644 util/include/axutil_thread_pool.h create mode 100644 util/include/axutil_types.h create mode 100644 util/include/axutil_uri.h create mode 100644 util/include/axutil_url.h create mode 100644 util/include/axutil_utils.h create mode 100644 util/include/axutil_utils_defines.h create mode 100644 util/include/axutil_uuid_gen.h create mode 100644 util/include/axutil_version.h create mode 100644 util/include/platforms/axutil_platform_auto_sense.h create mode 100644 util/include/platforms/unix/axutil_date_time_util_unix.h create mode 100644 util/include/platforms/unix/axutil_thread_unix.h create mode 100644 util/include/platforms/unix/axutil_unix.h create mode 100644 util/include/platforms/unix/axutil_uuid_gen_unix.h create mode 100644 util/include/platforms/windows/axutil_date_time_util_windows.h create mode 100644 util/include/platforms/windows/axutil_dir_windows.h create mode 100644 util/include/platforms/windows/axutil_getopt_windows.h create mode 100644 util/include/platforms/windows/axutil_thread_mutex_windows.h create mode 100644 util/include/platforms/windows/axutil_thread_windows.h create mode 100644 util/include/platforms/windows/axutil_uuid_gen_windows.h create mode 100644 util/include/platforms/windows/axutil_windows.h create mode 100644 util/src/Makefile.am create mode 100644 util/src/allocator.c create mode 100644 util/src/array_list.c create mode 100644 util/src/base64.c create mode 100644 util/src/base64_binary.c create mode 100644 util/src/class_loader.c create mode 100644 util/src/date_time.c create mode 100644 util/src/date_time_util.c create mode 100644 util/src/digest_calc.c create mode 100644 util/src/dir_handler.c create mode 100644 util/src/dll_desc.c create mode 100644 util/src/duration.c create mode 100644 util/src/env.c create mode 100644 util/src/error.c create mode 100644 util/src/file.c create mode 100644 util/src/file_handler.c create mode 100644 util/src/generic_obj.c create mode 100644 util/src/hash.c create mode 100644 util/src/http_chunked_stream.c create mode 100644 util/src/linked_list.c create mode 100644 util/src/log.c create mode 100644 util/src/md5.c create mode 100644 util/src/minizip/Makefile.am create mode 100644 util/src/minizip/archive_extract.c create mode 100644 util/src/minizip/axis2_archive_extract.h create mode 100644 util/src/minizip/axis2_crypt.h create mode 100644 util/src/minizip/axis2_ioapi.h create mode 100644 util/src/minizip/axis2_iowin32.h create mode 100644 util/src/minizip/axis2_unzip.h create mode 100644 util/src/minizip/crypt.c create mode 100644 util/src/minizip/ioapi.c create mode 100644 util/src/minizip/iowin32.c create mode 100644 util/src/minizip/unzip.c create mode 100644 util/src/network_handler.c create mode 100644 util/src/param.c create mode 100644 util/src/param_container.c create mode 100644 util/src/platforms/unix/Makefile.am create mode 100644 util/src/platforms/unix/date_time_util_unix.c create mode 100644 util/src/platforms/unix/thread_unix.c create mode 100644 util/src/platforms/unix/uuid_gen_unix.c create mode 100644 util/src/platforms/windows/axutil_windows.c create mode 100644 util/src/platforms/windows/date_time_util_windows.c create mode 100644 util/src/platforms/windows/dir_windows.c create mode 100644 util/src/platforms/windows/getopt_windows.c create mode 100644 util/src/platforms/windows/thread_mutex_windows.c create mode 100644 util/src/platforms/windows/thread_windows.c create mode 100644 util/src/platforms/windows/uuid_gen_windows.c create mode 100644 util/src/properties.c create mode 100644 util/src/property.c create mode 100644 util/src/qname.c create mode 100644 util/src/rand.c create mode 100644 util/src/stack.c create mode 100644 util/src/stream.c create mode 100644 util/src/string.c create mode 100644 util/src/string_util.c create mode 100644 util/src/thread_pool.c create mode 100644 util/src/types.c create mode 100644 util/src/uri.c create mode 100644 util/src/url.c create mode 100644 util/src/utils.c create mode 100644 util/src/uuid_gen.c create mode 100644 util/src/version.c create mode 100644 util/test/Makefile.am create mode 100644 util/test/allocator/Makefile.am create mode 100644 util/test/allocator/allocator_test.c create mode 100644 util/test/allocator/build.sh create mode 100755 util/test/allocator/test create mode 100644 util/test/allocator/test.doc create mode 100644 util/test/date_time/Makefile.am create mode 100644 util/test/date_time/build.sh create mode 100644 util/test/date_time/date_time_test.c create mode 100644 util/test/duration/Makefile.am create mode 100644 util/test/duration/build.sh create mode 100644 util/test/duration/duration_test.c create mode 100644 util/test/link_list/Makefile.am create mode 100644 util/test/link_list/build.sh create mode 100644 util/test/link_list/link_list_test.c create mode 100644 util/test/properties/Makefile.am create mode 100644 util/test/properties/build.sh create mode 100644 util/test/properties/input.doc create mode 100644 util/test/properties/output.doc create mode 100644 util/test/properties/property_test.c create mode 100644 util/test/properties/test.doc create mode 100644 util/test/rand/Makefile.am create mode 100644 util/test/rand/build.sh create mode 100644 util/test/rand/rand_test.c create mode 100644 util/test/stack/Makefile.am create mode 100644 util/test/stack/build.sh create mode 100644 util/test/stack/stack_test.c create mode 100644 util/test/string_util/Makefile.am create mode 100644 util/test/string_util/build.sh create mode 100644 util/test/string_util/string_util_test.c create mode 100644 util/test/uri/Makefile.am create mode 100644 util/test/uri/build.sh create mode 100644 util/test/uri/uri_test.c create mode 100644 util/test/url/Makefile.am create mode 100644 util/test/url/build.sh create mode 100644 util/test/url/url_test.c create mode 100644 util/test/util/Makefile.am create mode 100644 util/test/util/create_env.c create mode 100644 util/test/util/create_env.h create mode 100644 util/test/util/test_log.c create mode 100644 util/test/util/test_log.h create mode 100644 util/test/util/test_md5.c create mode 100644 util/test/util/test_md5.h create mode 100644 util/test/util/test_string.c create mode 100644 util/test/util/test_thread.c create mode 100644 util/test/util/test_thread.h create mode 100644 util/test/util/test_util.c create mode 100644 util/test/utils/Makefile.am create mode 100644 util/test/utils/build.sh create mode 100644 util/test/utils/utils_test.c create mode 100644 xdocs/api/doxygenconf create mode 100644 xdocs/archived_news.html create mode 100644 xdocs/coding_conventions.html create mode 100644 xdocs/docs/architecture_notes.html create mode 100644 xdocs/docs/axis2c_manual.html create mode 100644 xdocs/docs/faq.html create mode 100644 xdocs/docs/hello/client/hello.c create mode 100644 xdocs/docs/hello/client/hello.c.html create mode 100644 xdocs/docs/hello/service/hello/services.xml create mode 100644 xdocs/docs/hello/service/hello_svc.c create mode 100644 xdocs/docs/hello/service/hello_svc.c.html create mode 100644 xdocs/docs/images/OM005.gif create mode 100644 xdocs/docs/images/archi006.jpg create mode 100644 xdocs/docs/images/arrow_left.gif create mode 100644 xdocs/docs/images/arrow_right.gif create mode 100644 xdocs/docs/images/axis2c_repo.gif create mode 100644 xdocs/docs/images/binary_folder_structure.jpg create mode 100644 xdocs/docs/images/folder_structure.jpg create mode 100644 xdocs/docs/images/folder_structure_zlib.jpg create mode 100644 xdocs/docs/index.html create mode 100644 xdocs/docs/installationguide.html create mode 100644 xdocs/docs/mod_log/log_in_handler.c.html create mode 100644 xdocs/docs/mod_log/log_out_handler.c.html create mode 100644 xdocs/docs/mod_log/mod_log.c.html create mode 100644 xdocs/docs/mod_log/module.xml create mode 100644 xdocs/docs/om_tutorial.html create mode 100755 xdocs/download.cgi create mode 100644 xdocs/download.html create mode 100644 xdocs/index.html create mode 100644 xdocs/lists_issues.html create mode 100644 xdocs/navigation.xml create mode 100644 xdocs/svn.html create mode 100644 xdocs/versioning.html diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..1d6616f --- /dev/null +++ b/AUTHORS @@ -0,0 +1,26 @@ +Developers +---------- +Samisa Abeysinghe +Dushshantha Chandradasa +Chris Darroch +Senaka Fernando +Paul Fremantle +Dimuthu Gamage +Sahan Gamage +Lahiru Gunathilake +Nandika Jayawardana +Supun Kamburugamuva +Kaushalye Kapuruge +Damitha Kumarage +Danushka Menikkumbura +Bill Mitchell +Diluka Moratuwage +Dumindu Pallewela +Milinda Pathirage +Manjula Peiris +Dinesh Premalal +Sanjaya Ratnaweera +Davanum Srinivas +Selvaratnam Uthaiyashankar +Sanjiva Weerawarana +Nabeel Yoosuf diff --git a/COPYING b/COPYING new file mode 120000 index 0000000..7a694c9 --- /dev/null +++ b/COPYING @@ -0,0 +1 @@ +LICENSE \ No newline at end of file diff --git a/CREDITS b/CREDITS new file mode 100644 index 0000000..70a8e6f --- /dev/null +++ b/CREDITS @@ -0,0 +1,11 @@ +James Clark, author of Expat, for having provided very useful guidance on the +proper way to design and implement a highly reusable C library. + +Apache Project's +---------------- +Apache Axis2 [http://ws.apache.org/axis2] - Initial Architecture +Apache Maven [http://maven.apache.org/] - Site generation +Apache APR [http://apr.apache.org/] - Versioning Guideline, + Some codes in util +Apache HTTPD [http://httpd.apache.org/] - mod_axis2 +Apache Qpid [http://cwiki.apache.org/qpid/index.html] - AMQP implementation diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..044d651 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,221 @@ +Axis2/C (1.7.0) + * HTTP Session support + * HTTP KeepAlive support + * Performance improvement to Guththila Parser + + +Axis2/C (1.6.0) + * XPath support for Axiom XML object model + * CGI support + * Improvements to MTOM to send, receive very large attachments + * Improvements to AMQP transport + * Improvemnets to WSDL2C codegen tool + * Many bug fixes. + * Memory leak fixes + +Axis2/C (1.5.0) + * AMQP Transport support with Apache Qpid. (At an experimental stage. Not working under Windows. Please refer the INSTALL file to build this) + * Modifications to IIS Module to support IIS 6 & 7 + * Added a JScript file to automate IIS module registry configuration + * Improved the in-only message handling + * Specifying the MEP in the services.xml for non in-out messages made mandatory + * Improvements to Guthtila for better performance + * Improvements to TCPMon tool + * Memory leak fixes + * Bug fixes + +Axis2/C (1.4.0) + * Fixed library version numbering + * Made Guththila as default XML parser +-- Axis2/C team Mon,5 May 2008 + +Axis2/C (1.3.0) + * Fixed a bug on version numbering + * List Axis2/C dependencies licensing in LICENSE file + * Add relevant copyright notices to NOTICE file + * Digest Authentication Support + * Proxy Authentication Support + * Enhanced REST support + * Ability to insert xml declaration on outgoing payloads + * MTOM support with libcurl + * Improvements to TCPMon Tool + * Improvements to Test Coverage + * Improvements to API docs + * Improvements to CA certificate validation mechanisms on SSL Transport + * Improvements to Neethi + * Fixed issue in HTTP GET on mod_axis2 + * Major Improvements to Guththila Parser + * Improvements to libcurl based sender + * Creation of a FAQ list + * Improvements to Axis2/C documentation + * Added Documentation on Archive Based Deployment + * Fixes for IIS module + * Removed dependency in util for the Axis2/C core + * Ability to access transport headers at the service level (for RESTful services) + * uint64_t and int64_t support at util layer and codegen level + * Removed zlib dependencies when Archive Based Deployment model is disabled + * Signal Handling in Windows + * Removed over 99% of the warnings found on Windows + * Increased build speed on Windows with nmake. + * Improvements to Windows build system + * Extensions to client API to support HTTP/Proxy Authentication + * Memory leak fixes + * Many bug fixes + +-- Axis2/C team Fri, 29 February 2008 +Axis2/C (1.2.0) + * Improvements to Java tool, WSDL2C, that generates C code + * Improvment to Apache2 module so that it + * Create a shared memory global pool + * create context hierarchy in the global pool + enabling it to have true application level scope. + * Improved Policy + * Improvements to thread environment + * Improvements to error handling + * Memory leak fixes + * Many bug fixes + +-- Axis2/C team Mon, 17 January 2008 +Axis2/C (1.1.0) + * WS-Policy implementation + * TCP Transport + * Improvements to Guththila parser to improve performance + * Improvements to Java tool, WSDL2C, that generates C code + * Basic HTTP Authentication + * Memory leak fixes + * Many bug fixes + +-- Axis2/C team Mon, 24 September 2007 + +Axis2/C (1.0.0) + * Many Bug Fixes + * IIS module for server side + * libcurl based client transport + * Improvements to overall API to make it more user friendly, stable and binary compatible + * Transport proxy support + * Memory leak fixes +-- Axis2/C team Mon, 30 April 2007 + +Axis2/C (0.96) + * Major Memory leak fixes + * Many Bug Fixes + * Improvement to REST processing + * Improvement to SOAP-Fault processing + * Improvement to mod_axis2 library (plugged with apr pools) + * Visual Studio 7.0 project +-- Axis2/C team Thu, 19 December 2006 + +Axis2/C (0.95) + * Major Memory leak fixes + * Many Bug Fixes + * Improved Documentation +-- Axis2/C team Thu, 26 October 2006 + +Axis2/C (0.94) + * Guththila pull parser support + * WSDL2C code generation tool + * TCP Monitor - C implementation + * Major Memory leak fixes + * Fixes to code generation with Java Tool + * Many Bug Fixes +-- Axis2/C team Tue, 3 October 2006 + +Axis2/C (0.93) + * REST support for HTTP GET case + * XML Schema implementation + * Woden/C implementation that supports both WSDL 1.1 and WSDL 2.0 + * Dynamic client invocation (given a WSDL, consume services dynamically) + * Numerous improvements to API and API documentation + * Many bug fixes, especially, many paths of execution previously untouched were tested along with Sandesha2/C implementation +-- Axis2/C team Thu, 31 August 2006 + +Axis2/C (0.92) + * Completed MTOM implementation with multiple attachment support and non-optimize + * Completed service client API with send robust and fire and forget + * Added "message" to description hierarchy + * Archive based deployment Model (for services and modules) + * Code generation for WSDL using Java WSDL2Code tool + * ADB support (with Java WSDL2C tool) + * WS-Security usernameToken support + * Initial implementation of the XML Schema parser (To be used in WSDL parser and REST support) + * Initial implementation of WSDL parser (To be used in dynamic invocation) + * Changed double pointer environment parameters into pointer parameters + to improve efficiency + -- Axis2/C team Fri, 16 June 2006 + +Axis2/C (0.91) + + * Full Addressing 1.0 support + * Improved fault handling model + * SSL client transport + * MTOM implementation + * Implementation of easy to use service client and operation client APIs for client side programming + * REST support (POST case) + * Module version support + * Service groups + * Numerous bug fixes since last release + -- Axis2/C team Mon, 15 May 2006 + + +Axis2/C (0.90) + + * Minimal memory leaks + * Apache2 module working in Windows + * More samples and tests + * WSDL Object Model built based on the proposed WSDL 2.0 Component model + * Dynamic Invocation + * Numerous bug fixes since last release + -- Axis2/C team Fri, 31 Mar 2006 + + +Axis2/C (M0.5) + + * Improving code quality by fixing memory leaks and reviewing the code + * Apache2 integration + * More samples and tests + * Initial documentation(User guide, Developer Guide and Installation Guide) + * Numerous bug fixes since last release + -- Axis2/C team Fri, 10 Mar 2006 + + +Axis2/C (M0.4) + + * Threading support and threaded simple axis server + * Module loading support + * Addressing module and addressing based dispatching + * HTTP chunking support + * Improved logging mechanism + * Ability to build and run on Windows platform + -- Axis2/C team Fri, 17 Feb 2006 + + +Axis2/C (M0.3) + + * Core engine in place with deployment, description and context hiarachies and http transport support + * Soap processing support + * Simple http server + * Client API implementation + * Couple of working service and client samples + -- Axis2/C team Thu, 02 Feb 2006 + + +Axis2/C (M0.2) + + * Improved OM module + * libxml2 parser support + * PHP binding for OM module + * Some test cases for PHP binding + * Many memory leaks fixes + -- Axis2/C team Thu, 08 Dec 2005 + + +Axis2/C (M0.1) + + * Initial release + + * OM module + * Guththila pull parser support + * libxml2 parser support(only reader is supported as of now) + * doxygen documentation support + * A sample demonstrating how to use OM + -- Axis2/C team Fri, 25 Nov 2005 diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..039c3ff --- /dev/null +++ b/INSTALL @@ -0,0 +1,835 @@ +Table of Contents +================= +1. Getting Axis2/C Working on Linux + + 1.1 Setting up Prerequisites + 1.1.1 Mandatory + 1.1.2 Optional + 1.2 Using Binary Release + 1.3 Using Source Release + 1.3.1 Basic Build + 1.3.2 Build with Options + (a) With Guththila + (b) With libxml2 + (c) With AMQP Transport + 1.3.3 Building Samples + 1.4 Configuration + 1.4.1 AMQP Transport + 1.5 Running Samples + 1.5.1 HTTP Transport + (a) Server + (b) Clients + 1.5.2 AMQP Transport + (a) Server + (b) Client + +2. Getting Axis2/C Working on Windows (Win32) + + 2.1 Setting up Prerequisites + 2.1.1 Mandatory + 2.1.2 Optional + 2.2 Using Binary Release + 2.3 Using Source Release + 2.3.1 Setting Build Options + (a) Enable Guththila + (b) Enable libxml2 + (c) Enable SSL Support + (d) Enable libcurl + (e) Setting zlib Location + 2.3.2 Compiling the Source + 2.4 Running Samples + 2.4.1 HTTP transport + (a) Server + (b) Clients + +3. Installing Apache2 Web Server Integration Module (mod_axis2) + + 3.1 Building mod_axis2 from Source + 3.1.1 On Linux + 3.1.2 On Windows (Win32) + 3.2 Deploying in Apache2 Web Server + +4. Installing IIS (Interner Information Server) Integration Module + (mod_axis2_IIS) + + 4.1 Building mod_axis2_IIS from Source + 4.2 Deploying in the IIS +5. Using Axis2/C with CGI + 5.1 Deploying in Apache2 + 5.2 Deploying in IIS + +6. FAQ + + +1. Getting Axis2/C Working on Linux +=================================== + + 1.1 Setting up Prerequisites + ---------------------------- + + 1.1.1 Mandotory + -------------- + By default Axis2/C is not depenendent on any other software libraries. + + 1.1.2 Optional + -------------- + (a) libxml2 - http://www.xmlsoft.org/ + (b) zlib - http://www.zlib.net/ + (c) libiconv - http://www.gnu.org/software/libiconv/ + + (d) Apache Qpid - You need to have Qpid libraries installed on your machine + if you are going to use AMQP transport. It is imperative + that you compile and install Qpid from SVN source. + You can checkout Qpid SVN source from + https://svn.apache.org/repos/asf/qpid/trunk. + + 1.2 Using Binary Release + ------------------------ + + (a) Extract the binary tar package to a directory. + + (b) Set AXIS2C_HOME environment variable pointing to the location where you + have extracted Axis2/C. + + $ AXIS2C_HOME='/your_path_to_axis2c' + $ export AXIS2C_HOME + + NOTE : You will need to set AXIS2C_HOME only if you need to run Axis2/C + samples or tests. The reason is that the samples and test codes + use AXIS2C_HOME to get the path to Axis2/C. To write your own + services or clients this is not a requirement. + + 1.3 Using Source Release + ------------------------ + + 1.3.1 Basic Build + ----------------- + + (a) Extract the source tar package to a directory + + (b) Set AXIS2C_HOME environment variable pointing to the location where you + want to install Axis2/C. + + $ AXIS2C_HOME='/your_desired_path_to_axis2c_installation' + $ export AXIS2C_HOME + + NOTE : You will need to set AXIS2C_HOME only if you need to run Axis2/C + samples or tests. The reason is that the samples and test codes + use AXIS2C_HOME to get the path to Axis2/C. To write your own + services or clients this is not a requirement. + + (c) Go to the directory where you extracted the source + + $ cd /your_path_to_axis2c_source + + (d) Build the source + This can be done by running the following command sequence in the + directory where you have extracted the source. + + $ ./configure --prefix=${AXIS2C_HOME} + $ make + $ make install + + Please run './configure --help' in respective sub directories for more + information on these configure options. + + NOTE : If you don't provide the --prefix configure option, it will by + default be installed into '/usr/local/axis2c' directory. + + You could run 'make check' to test if everything is working fine. However, + note that the test/core/clientapi/test_clientapi program would fail unless + AXIS2C_HOME points to the installed location. (It's looking for Axis2/C + repository) This means you really should run 'make && make install', + then set 'AXIS2C_HOME=/path/to/install', and then 'make check'. + That's a little different than the usual 'make && make check && make + install' process. + + 1.3.2 Build with Options + ------------------------ + + (a) With Guththila + ------------------ + You may need to try Axis2/C with Guththila XML parser. You can do it by + giving '--enable-guththila=yes' as a configure option. + + $ ./configure --enable-guththila=yes [other configuration options] + $ make + $ make install + + (b) With libxml2 + ---------------- + + You may need to try Axis2/C with libxml2 XML parser. You can do it by + giving '--enable-libxml2=yes' as a configure option. + + $ ./configure --enable-libxml2=yes [other configuration options] + $ make + $ make install + + (c) With AMQP Transport + ----------------------- + + You may need to try Axis2/C with the AMQP transport. You can do it by + giving '--with-qpid=/path/to/qpid/home' as a configure option. + + $ ./configure --with-qpid=/path/to/qpid/home [other configuration options] + $ make + $ make install + + 1.3.3 Building Samples + ---------------------- + + If you need to get the samples working, you also need to build the samples. + + To build the samples: + + $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${AXIS2C_HOME}/lib/ + $ cd samples + $ ./configure --prefix=${AXIS2C_HOME} + --with-axis2=${AXIS2C_HOME}/include/axis2-1.6.0 + $ make + $ make install + + Please run './configure --help' in samples folder for more information on + configure options. + + NOTE : If you don't provide a --prefix configure option, samples will by + default be installed into '/usr/local/axis2c/samples' directory. + + 1.4 Configuration + ----------------- + + 1.4.1 AMQP Transport + -------------------- + + You need to add the following entries into the axis2.xml. + + + 127.0.0.1 + 5672 + + + + + 1.5 Running Samples + ------------------- + + 1.5.1 HTTP Transport + -------------------- + + (a) Server + ---------- + + You have to first start the axis2_http_server as follows. + + $ cd ${AXIS2C_HOME}/bin + $ ./axis2_http_server + + You should see the message + Started Simple Axis2 HTTP Server... + + This will start the simple axis server on port 9090. To see the possible + command line options run + + $ ./axis2_http_server -h + + NOTE 1 : You may need to login as superuser to run the axis2_http_server. + NOTE 2 : If you run into shared lib problems, set the LD_LIBRARY_PATH as + follows. + + $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${AXIS2C_HOME}/lib + + (b) Clients + ----------- + + When the axis2_http_server is up and running, you can run the sample + clients in a new shell as follows. + + $ cd ${AXIS2C_HOME}/samples/bin + $ ./echo + This will invoke the echo service. + + $ ./math + This will invoke the math service. + + To see the possible command line options for sample clients run them + with '-h' option + + NOTE : If you run into shared lib problems, set the LD_LIBRARY_PATH as + follows. + $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${AXIS2C_HOME}/lib + + 1.5.2 AMQP Transport + -------------------- + + (a) Server + ---------- + + Start the Qpid broker as follows. + + $ cd ${QPID_HOME}/sbin + $ ./qpidd --data-dir ./ + + Start the axis2_amqp_server as follows. + + $ cd ${AXIS2C_HOME}/bin + $ ./axis2_amqp_server + + You should see the message + Started Simple Axis2 AMQP Server... + + This will connect to the Qpid broker listening on 127.0.0.1:5672. + To see the possible command line options run + + $ ./axis2_amqp_server -h + + NOTE 1 : You have the flexibility of starting the Qpid broker first and + then axis2_amqp_server or vise versa. + NOTE 2 : You may need to login as superuser to run the axis2_amqp_server. + NOTE 3 : If you run into shared lib problems, set the LD_LIBRARY_PATH as + follows. + + $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${AXIS2C_HOME}/lib + + (b) Clients + ----------- + + When the axis2_amqp_server is up and running, you can run the sample + clients in a new shell as follows. + + $ cd ${AXIS2C_HOME}/samples/bin/amqp + $ ./echo_blocking + This will invoke the echo service. + + To see the possible command line options for sample clients run them + with '-h' option + + NOTE : If you run into shared lib problems, set the LD_LIBRARY_PATH as + follows. + + $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${AXIS2C_HOME}/lib + + +2. Getting Axis2/C Working on Windows (Win32) +============================================= + + 2.1 Setting up Prerequisites + ---------------------------- + + 2.1.1 Mandatory + --------------- + (a) The binaries shipped with this version are compiled with + Microsoft Visual Studio compiler (cl). And also the makefile that is + shipped with this version needs Microsoft Visual Studio compiler (cl) + and nmake build tool. + + NOTE : You can download Microsoft VS Express2005 Edition and + Platform SDK from Microsoft website. You need to add the path to + Platform SDK Include and Lib folders to the makefile in order + for you to compile the source. + + + 2.1.2 Optional + -------------- + (a) libxml2 [http://www.zlatkovic.com/pub/libxml + version >= libxml2-2.6.20.win32] + + (b) zlib [http://www.zlatkovic.com/pub/libxml + version >= zlib-1.2.3.win32] + + (c) iconv [http://www.zlatkovic.com/pub/libxml + version >= iconv-1.9.1.win32] + + 2.2 Using Binary Release + ------------------------ + + Extract the binary distribution to a folder of your choice. + (example: C:\axis2c) + + The c:\axis2c folder structure is as follows. + + axis2c + | + +- bin - server + | + +- samples - samples go here + | | + | +- bin - sample client executables + | | + | +- lib - sample libraries + | | + | +- src - source files of the sampels in bin and lib folders + | + | + +- docs - documentation + | + +- include - all include files of axis2 + | + +- lib - library modules + | + +- logs - system and client logs are written to this folder + | + +- modules - deployed modules + | + +- services - deployed services + + You might optionally require to copy zlib1.dll ,iconv.dll and libxml2.dll. Copy + them to C:\axis2c\lib . + (Or you can have these dll's in some other place and add that + location to PATH environment variable) + + 2.3 Using Source Release + ------------------------ + + 2.3.1 Setting Build Options + --------------------------- + Please edit the \build\win32\configure.in file + to set the following build options. + + (a) Enable Guththila + -------------------- + + - Now Guththila is the defualt parser. Unless you enable libxml2 Guththila will be built. + + (b) Enable libxml2 + ------------------ + + - Set the ENABLE_LIBXML2 option to 1 + - Set the LIBXML2_BIN_DIR to the location where libxml2 is installed to + - Set the ICONV_BIN_DIR to the location where iconv is installed to + + (c) Enable SSL Support + ---------------------- + + - Set ENABLE_SSL option to 1 + - Set OPENSSL_BIN_DIR to the location where OpenSSL is installed to + + (d) Enable libcurl + ------------------ + + - Set ENABLE_LIBCURL to 1 + - Set LIBCURL_BIN_DIR to the location where libcurl is installed to + + (e) Setting zlib Location + ------------------------- + + Set the ZLIB_BIN_DIR to the location where zlib is installed to + + Default location for zlib is E:\zlib-1.2.3.win32 and the folder + structure should look like the following + + E:\zlib-1.2.3.win32 + | + +- include + | + +- bin + | + +- lib + + You can either extract zlib to this folder or extract it to a location + of your choice and edit the configure.in file accordingly. + + NOTE : You need to have zlib1.dll in the library path. + + + + 2.3.2 Compiling the Source + -------------------------- + + Extract the source distribution to a folder of your choice. + Example: + C:\axis2c + + Open a DOS shell and type: + + > cd %AXIS2C_HOME%\build\win32 + > vcvars32.bat + > nmake install + + NOTE : You may need to set the PATH environment variable to vcvars32.bat + if Windows complains that it cannot find this batch file. This file + is located in \VC\bin + directory. + + That's it! This will build the system and create a directory named 'deploy' + under the build directory. + + The deploy folder structure is as follows. + + deploy + | + +- bin - server and other executables + | + +- samples - samples go here + | | + | +- bin - sample client executables + | | + | +- lib - sample libraries + | | + | +- src - sources of the samples in bin and lib folders + | + | + +- lib - library modules + | + +- services - deployed services + | + +- modules - deployed modules + | + +- include - all include files of axis2 + | + +- logs - system and client logs are written to this folder + + 2.4 Running Samples + ------------------- + + You need to set a couple of environment variables before you can run the + server and samples. + + Set the variable AXIS2C_HOME to the deploy folder (C:\axis2c) + Add the path to lib directory to the PATH variable (%AXIS2C_HOME%\lib) + + You might optionally require to copy the iconv.dll, zlib1.dll, libxml2.dll to + the %AXIS2C_HOME%\lib folder. + + 2.4.1 HTTP transport + -------------------- + + (a) Server + ---------- + + > cd %AXIS2C_HOME%\bin + > axis2_http_server.exe + + You should see the message + Started Simple Axis2 HTTP Server... + + By default the log is created under %AXIS2C_HOME%\logs folder with the + name axis2.log. + + NOTE : You may provide command line options to change the default behaviour. + Type 'axis2_http_server.exe -h' to learn about the usage + + (b) Clients + ----------- + + Now you can run any sample client deployed under %AXIS2C_HOME%\samples\bin + + Example: + > cd %AXIS2C_HOME%\samples\bin + > echo.exe + + +3. Installing Apache2 Web Server Integration Module (mod_axis2) +=============================================================== + + 3.1 Building mod_axis2 from Source + ---------------------------------- + + 3.1.1 On Linux + -------------- + + Provide the Apache2 include file location as a configure option + + $ ./configure --with-apache2="" + [other configure options] + + NOTE : Some apache2 distributions install APR (Apache Portable Runtime) + include files in a separate location which is required to build + mod_axis2. + + In that case use: + $ ./configure --with-apache2="" + --with-apr="" + [other configure options] + + Then build the source tree + + $ make + $ make install + + This will install mod_axis2.so into your "/lib" + + 3.1.2 On Windows (Win32) + ------------------------ + + Provide the apache2 location in configure.in file in APACHE_BIN_DIR + + Example: + APACHE_BIN_DIR = E:\Apache22 + + After compiling the sources (as described in section 2.3) build the + mod_axis2.dll by issuing the command 'nmake axis2_apache_module'. + This will build mod_axis2.dll and copy it to %AXIS2C_HOME%\lib directory. + + Example: + C:\axis2c\build\deploy\lib + + 3.2 Deploying in Apache2 Web Server + ----------------------------------- + + NOTE : To do the following tasks, you might need super user privileges + on your machine. + + Copy the mod_axis2 (libmod_axis2.so.0.6.0 on Linux and mod_axis2.dll + on Windows) to "" as mod_axis2.so + + Example: + cp $AXIS2C_HOME/lib/libmod_axis2.so.0.6.0 + /usr/lib/apache2/modules/mod_axis2.so (on Linux) + + copy C:\axis2c\build\deploy\lib\mod_axis2.dll + C:\Apache2\modules\mod_axis2.so (on Windows) + + Edit the Apache2's configuration file (generally httpd.conf) and add the + following directives + + LoadModule axis2_module /mod_axis2.so + Axis2RepoPath + Axis2LogFile + Axis2MaxLogFileSize + Axis2LogLevel LOG_LEVEL + + SetHandler axis2_module + + + NOTE: Axis2 log file path should have write access to all users because by + default Apache Web Server runs as nobody. + + If you want to use a Shared Global Pool with Apache you have to give + another entry called Axis2GlobalPoolSize. You have to give the size of + the shared global pool in MB. If you don't set the value or if you + set a negative value Apache module doesn't create shared global pool. + + Axis2GlobalPoolSize + + LOG_LEVEL can be one of the followings + crit - Log critical errors only + error - Log errors critical errors + warn - Log warnings and above + info - Log info and above + debug - Log debug and above (default) + trace - Log trace messages + + NOTE: Use forward slashes "/" for path separators in + , and + + + Make sure that the apache2 user has the correct permissions to above paths + - Read permission to the repository + - Write permission to the log file + + Restart apache2 and test whether mod_axis2 module is loaded by typing the + URL http://localhost/axis2/services in your Web browser + +4. Installing IIS (Interner Information Server) Integration Module + (mod_axis2_IIS) +================================================================== + + 4.1 Building mod_axis2_IIS from Source + -------------------------------------- + + After compiling the source (as described in section 2.3) build the + mod_axis2.dll by issuing the command 'nmake axis2_IIS_module'. + This will build the mod_axis2_IIS.dll and copy it to %AXIS2C_HOME%\lib + directory. + + Example: + C:\axis2c\build\deploy\lib + + 4.2 Deploying in the IIS + ------------------------ + + Add the following key to the registery. + + HKEY_LOCAL_MACHINE\SOFTWARE\Apache Axis2c\IIS ISAPI Redirector + + Under this registry key add the following entries. + + A String value with the name "axis2c_home". The value is the AXIS2C_HOME. + Example : c:\axis2c + + A String value with the name "log_file". The value is the absolute path of + the log file. + Example: c:\axis2c\logs\axis2.log + + A String value with the name "log_level". The value can be one of the + followings. + trace - Log trace messages + error - Log errors critical errors + info - Log info and above + critical - Log critical errors only + debug - Log debug and above (default) + warning - Log warnings + + You can add a string value with the name services_url_prefix. This is optional and defaults to "/services". + As an example, if you have "/web_services" as the prefix, then all the services hosted would have the endpoint prefix of : + http://localhost/axis2/web_services. + Note: don't forget the / at the begining. + + If you wish, you can also change the location as well by adding a string value with the name axis2_location. + This is also optional and defaults to /axis2. If you have /myserser as the value you can access your web + services with a url like http://localhost/myserver/services. + Note: Don't forget the / at the beginning. + + Now you can do all the registry editing using the JScript file axis2_iis_regedit.js + provided with the distribution. When you build axis2/C with the IIS module the file + is copied to the root directory of the binary distribution. Just double click it and + everything will be set to the defaults. The axis2c_home is taken as the current directory, + so make sure you run the file in the Axis2/C repository location (or root of the binary distribution). + If you want to change the values you can manually edit the the .js file or give it as command line arguments + to the script when running the script. To run the jscript from the command line use the command + :\cscript axis2_iis_regedit.js optional arguments. + We recomend the manual editing as it is the easiest way to specify the values + + IIS 5.1 or Below + ----------------- + Using the IIS management console, add a new virtual directory to the + IIS/PWS web site called "axis2". The physical path of this virtual + directory should be the axis2\lib directory (Where the mod_axis2_IIS.dll + is in) + Assign excecute permissions to this virtual directory. + + Using the IIS management console, add mod_axis2_IIS.dll as a filter to the + IIS/PWS web site. The name of the filter can be any meaningful name. + + Restart IIS and test whether mod_axis2_IIS module is loaded by typing the + URL http://localhost/axis2 in your Web browser. + + IIS 6 & 7 + --------- + Using the IIS management console, add the mod_axis2_IIS.dll as a Wildcard Script Map. + Executable should be the complete path to the mod_axis2_IIS.dll + You can put any name as the name of the Wildcard Script Map + + Please don't add the mod_axis2_IIS.dll as a filter to IIS as in the IIS 5.1 case. + + Note: If the Axis2/C failed to load, verify that Axis2/C and its dependent DLLs are in the + System Path (not the user path). + +5. Using Axis2/C with CGI + 5.1 Deploying in Apache2 + + If you haven't already done so you need to configure and set up an cgi-bin/ directory + that holds your CGI scripts,where we will put Axis2/C cgi executable axis2.cgi. + + (Note: most of recent Apache web servers already have an cgi-bin dir set up, usually + /usr/lib/cgi-bin/. ) + + Add following to your Apache2 configuration (httpd.conf) file. + + ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/ (Or some other directory of your choice) + + OR you can use + + + Options +ExecCGI + + + AddHandler cgi-script .cgi + + { It's recomended to restrict all your cgi scripts to single ScriptAlias directory for security reasons.} + + Now we have to set up configuration parameters via environment variables for the cgi + deployment using the SetEnv directive. + + { You need to have mod_env enabled for this to work ) + Add the following to your apache2 configuration file (httpd.conf) + + SetEnv AXIS2C_HOME + + ( i.e. SetEnv AXIS2C_HOME /usr/local/axis2c/ ) + + If you have chosen another alias for you cgi-bin you can also set up an AXIS2C_URL_PREFIX + environment variable, but it's not needed if you have chosen /cgi-bin/. + AXIS2C_URL_PREFIX defines your web services deployment url prefix. Lets say you have chosen URL + /private/scripts/ for your cgi-bin URL and named your cgi exec as 'axis2.cgi', + Then you need to set AXIS2_URL_PREFIX environment variable as follows: + + SetEnv AXIS2C_URL_PREFIX /private/scripts/axis2.cgi/ + + + Now we have configured apache such that all requests with URL http:///cgi-bin/ requests + are located at your configured cgi folder. We have granted Apache server to execute CGI from that directory + and treat files with .cgi extensions as CGI executables. + + Now you need to copy the Axis2/C cgi executable "axis2.cgi" located in \bin directory. + + 5.2 Deploying in IIS + + IIS 5.1 + 1. Open your 'Internet services manager' + 2. Under your computer name and 'Default Web Site' you must create an virtual + directory called 'cgi-bin' (if you haven't done so by now) so right click + 'Default Web Site' -> New -> Virtual Directory. + 3. In wizard enter 'cgi-bin' as Alias. + 4. Choose a directory of your choice for cgi scripts placement. (like C:\www\cgi-bin\) + 5. In access permissions select Read and Execute. + 6. Finish the wizard so that Virtual Directory is created. + 7. Open your selected folder (i.e. C:\www\cgi-bin\) and copy axis2.cgi there. + + + NOTE: + Your Axis2 endpoints now looks like this when deployed under cgi. + + http://domain-name.com/cgi-bin/axis2.cgi// + + For the echo service found under /services/ directory of Axis2, the endpoint will become + http://domain-name.com/cgi-bin/axis2.cgi/services/echo + +6. FAQ +====== + +1. Although I was able to get simple axis server up, unable to run samples. + + This could happen because the AXIS2C_HOME environment variable is not + set to the correct axis2 installation path. + +2. What are the other dependencies Axis2/C has? + + Basically if you are willing to use libxml2 as your parser, you need to + have it installed in your system. + + You can get libxml2 from http://xmlsoft.org/downloads.html. + +3. I have libxml2 installed in my system, but ./configure fails saying + "libxml2 not found" + + Yes, you need to install libxml2-dev packages. + + 1. If you are using a Debian based system run + $ apt-get install libxml2-dev + + 2. If you are using a RedHat/Fedora based system run + $ yum install libxml2-dev + + 3. If you install libxml2 from source you will not get this error + +4. Is there any recommended packages, that I need to install in my system? + + 1. automake, autoconf, libtool, aclocal + 2. libxml2 and libxml2-dev + 3. pkg-config + +5. I tried several methods, browse through axis-c-dev and axis-c-user mail + archives but I was not able to solve my problem. + + Then you can ask from Axis2/C users or Axis2/C developers about it by + sending your question to + + user = axis-c-user@ws.apache.org + developer = axis-c-dev@ws.apache.org + + You can subscribe to + + axis-c-user list by sending a request to + with the subject "subscribe" + + axis-c-dev list by sending request to + with the subject "subscribe" + +6. This FAQ is not enough... + + You can help us by reporting your suggestions, complaints, problems and bugs + + +Thank you for using Axis2/C ... diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4a67574 --- /dev/null +++ b/LICENSE @@ -0,0 +1,203 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..5395db2 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,53 @@ +datadir=$(prefix) +logsdir=$(prefix)/logs +docsdir=$(prefix) +includedir=$(prefix)/include/axis2-1.6.0 +wsdl2cdir=$(prefix)/bin/tools/wsdl2c + + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = axis2c.pc + +SUBDIRS = util $(GUTHTHILA_DIR) axiom neethi src $(TESTDIR) include ides tools/tcpmon tools/md5 +include_HEADERS=$(top_builddir)/include/*.h +data_DATA= samples/server/axis2.xml README \ + INSTALL CREDITS COPYING NEWS NOTICE AUTHORS +logs_DATA= +docs_DATA= +wsdl2c_DATA=tools/codegen/javatool/WSDL2C.sh tools/codegen/javatool/README +EXTRA_DIST = CREDITS LICENSE build axis2c_build.sh guththila tools AUTHORS NOTICE tools/codegen/javatool/README tools/codegen/javatool/WSDL2C.bat tools/codegen/javatool/WSDL2C.sh + +dist-hook: + rm -rf `find $(distdir)/ -type d -name .svn` + rm -rf `find $(distdir)/ -type f -name *.la` + rm -rf `find $(distdir)/ -type f -name *.o` + rm -rf `find $(distdir)/ -type f -name *.lo` + rm -rf `find $(distdir)/ -type f -name *.loT` + rm -rf `find $(distdir)/ -type d -name .deps` + rm -rf `find $(distdir)/ -type d -name .libs` + rm -rf `find $(distdir)/ -type f -name Makefile` + rm -rf `find $(distdir)/ -type f -name axis2c-sample-src-${PACKAGE_VERSION}.tar.gz` + rm -rf `find $(distdir)/ -type d -name autom4te.cache` + rm -rf $(distdir)/tools/tcpmon/src/tcpmon + rm -rf $(distdir)/tools/md5/src/md5 + find $(distdir) -name "makefile" | xargs sed -i "s/\/WX//g" + sh dist.sh + +bindist: $(bin_PROGRAMS) + rm -rf axis2c-bin-${PACKAGE_VERSION}-linux + sh bindist.sh + mkdir axis2c-bin-${PACKAGE_VERSION}-linux + cp -r `pwd`/deploy/* axis2c-bin-${PACKAGE_VERSION}-linux + cp AUTHORS axis2c-bin-${PACKAGE_VERSION}-linux + cp README axis2c-bin-${PACKAGE_VERSION}-linux + cp ChangeLog axis2c-bin-${PACKAGE_VERSION}-linux + tar -cf - axis2c-bin-${PACKAGE_VERSION}-linux | gzip -c > axis2c-bin-${PACKAGE_VERSION}-linux.tar.gz + rm -rf axis2c-bin-${PACKAGE_VERSION}-linux + +install-data-hook: + mkdir -p $(DESTDIR)$(docsdir) + cp -r docs $(DESTDIR)$(docsdir) + rm -rf `find $(DESTDIR)$(docsdir)/ -type d -name .svn` + rm $(DESTDIR)$(docsdir)/README + + diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..d69016e --- /dev/null +++ b/NEWS @@ -0,0 +1,98 @@ +Apache Axis2/C Team is pleased to announce the release of Apache Axis2/C +version 1.6.0. + +You can download this release from http://ws.apache.org/axis2/c/download.cgi + +Key Features +============ + + 1. Support for one-way messaging (In-Only) and + request response messaging (In-Out) + + 2. Client APIs : Easy to use service client API and + more advanced operation client API + + 3. Transports supported : HTTP + * Inbuilt HTTP server called simple axis server + * Apache2 httpd module called mod_axis2 for server side + * IIS module for server side. Supports IIS 5.1, 6 and 7. + * Client transport with ability to enable SSL support + * Basic HTTP Authentication + * Digest HTTP Authentication + * libcurl based client transport + * CGI interface + + 4. Transports supported : HTTPS + * HTTPS Transport implementation using OpenSSL + + 5. Transports supported : TCP + * for both client and server side + + 6. Transports supported : AMQP + * AMQP Transport implementation using Apache Qpid + * Available only in Linux platforms. + * At an experimental stage. Please refer the INSTALL file to build this. + + 7. Transport proxy support (HTTP) + * Proxy Authentication (Basic/Digest) + + 8. Module architecture, mechanism to extend the SOAP processing model. + + 9. WS-Addressing support, both the submission (2004/08) and + final (2005/08) versions, implemented as a module. + + 10. MTOM/XOP support. + + 11. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages; + This has complete XML infoset support. + + 12. XPath support for Axiom XML Object model + + 13. XML parser abstraction + * Libxml2 wrapper + * Guththila pull parser support + + 14. Both directory based and archive based deployment models for deploying + services and modules + + 15. Description hierarchy providing access to static data of Axis2/C runtime + (configuration, service groups, services, operations and messages) + + 16. Context hierarchy providing access to dynamic + Axis2/C runtime information (corresponding contexts to map to + each level of description hierarchy) + + 17. Message receiver abstraction + * Inbuilt raw XML message receiver + + 18. Code generation tool for stub and skeleton generation for a given + WSDL (based on Java tool) + * Axis Data Binding (ADB) support + + 19. REST support (more POX like) using HTTP POST, GET, HEAD, PUT and DELETE + * Support for RESTful Services + + 20. Comprehensive documentation + * Axis2/C Manual + + 21. WS-Policy implementation called Neethi/C, with WS-SecurityPolicy extension + + +Major Changes Since Last Release +================================ + + 1. XPath support for Axiom XML object model + 2. CGI support + 3. Improvements to MTOM to send, receive very large attachments + 4. Improvements to AMQP transport + 5. Improvements to WSDL2C codegen tool + 6. Many bug fixes. + 7. Memory leak fixes + +We welcome your early feedback on this implementation. + +Thanks for your interest in Axis2/C !!! + +-- Apache Axis2/C Team -- + + diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..de198b5 --- /dev/null +++ b/NOTICE @@ -0,0 +1,11 @@ +Apache Axis2/C +Copyright 2005-2009 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + +This software contains code derived from the RSA Data Security +Inc. MD5 Message-Digest Algorithm, including various +modifications by Spyglass Inc., Carnegie Mellon University, and +Bell Communications Research, Inc (Bellcore). + diff --git a/README b/README new file mode 100644 index 0000000..8c762d9 --- /dev/null +++ b/README @@ -0,0 +1,88 @@ + Apache Axis2/C + + What is it? + ----------- + + The Apache Axis2/C is a SOAP engine implementation that can be used + to provide and consume Web Services. Axis2/C is an effort to implement Axis2 + architecture, in C. Please have a look at + http://ws.apache.org/axis2/1_0/Axis2ArchitectureGuide.html + for an overview on Axis2 architecture. + + Axis2/C supports both SOAP 1.1 and SOAP 1.2. The soap processing model is + built on the AXIOM XML object model. Axis2/C is capable of handling + one-way messaging (In-Only) as well as request response messaging (In-Out). + It can be used in both synchronous and asynchronous modes. + + Axis2/C has built in WS-Addressing support. It implements WS-Addressing 1.0 + specification completely. It also has built in MTOM/XOP support for handling + binary attachments. + + As a project of the Apache Software Foundation, the + developers aim to collaboratively develop and maintain a robust, + commercial-grade, standards-based Web Services stack implementation with + freely available source code. + + The Latest Version + ------------------ + + Details of the latest version can be found on the Apache Axis2/C + project page under http://ws.apache.org/axis2/c. + + Documentation + ------------- + + The documentation available as of the date of this release is + included in HTML format in the docs/ directory. The most + up-to-date documentation can be found at + http://ws.apache.org/axis2/c/docs/index.html. + + Installation + ------------ + + Please see the file named INSTALL. You can also have a look at + docs/installationguide.html. + + Licensing + --------- + + Please see the file named LICENSE. + + Contacts + -------- + + o If you want freely available support for using Apache Axis2/C please + join the Apache Axis2/C user community by subscribing to users mailing + list, axis-c-user@ws.apache.org' as described at + http://ws.apache.org/axis2/c/mail-lists.html + + o If you have a bug report for Apache Axis2/C please go log a Jira issue + at http://issues.apache.org/jira/browse/AXIS2C + + o If you want to participate in actively developing Apache Axis2/C please + subscribe to the `axis-c-dev@ws.apache.org' mailing list as described at + http://ws.apache.org/axis2/c/mail-lists.html + + Acknowledgements + ---------------- + + Apache Axis2/C relies heavily on the use of autoconf and libtool to provide + a build environment. + + + + + + + + + + + + + + + + + + diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..f14ee62 --- /dev/null +++ b/autogen.sh @@ -0,0 +1,69 @@ +#!/bin/bash +echo 'Running autogen.sh in Util' +cd util +sh autogen.sh + +echo 'Running autogen.sh in Axiom' +cd ../axiom +sh autogen.sh + +echo 'Running autogen.sh in Guththila' +cd ../guththila +sh autogen.sh + +echo 'Running autogen.sh in Neethi' +cd ../neethi +sh autogen.sh + +echo 'Running autogen.sh in Axis2/C' +cd .. + +echo -n 'Running libtoolize...' +if [ `uname -s` = Darwin ] +then + LIBTOOLIZE=glibtoolize +else + LIBTOOLIZE=libtoolize +fi + +if $LIBTOOLIZE --force > /dev/null 2>&1; then + + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running aclocal...' +if aclocal > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoheader...' +if autoheader > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoconf...' +if autoconf > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running automake...' +if automake --add-missing > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo 'done' diff --git a/axiom/AUTHORS b/axiom/AUTHORS new file mode 100644 index 0000000..e69de29 diff --git a/axiom/COPYING b/axiom/COPYING new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/axiom/COPYING @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/axiom/CREDITS b/axiom/CREDITS new file mode 100644 index 0000000..e69de29 diff --git a/axiom/ChangeLog b/axiom/ChangeLog new file mode 100644 index 0000000..0bd857b --- /dev/null +++ b/axiom/ChangeLog @@ -0,0 +1,6 @@ +Apache Axiom/C + + * Seperated Axiom module from Axis2/C + +-- Axis2-C team Thu, 18 May 2006 + diff --git a/axiom/INSTALL b/axiom/INSTALL new file mode 100644 index 0000000..9406038 --- /dev/null +++ b/axiom/INSTALL @@ -0,0 +1,14 @@ +Getting Axiom/C source working on Linux +============================================= +Build the source +This can be done using the following command sequence: + ./configure + make + make install + use './configure --help' for options + +NOTE: If you don't provide a --prefix configure option, it will by default +install into /usr/local/axis2_axiom directory. + + + diff --git a/axiom/LICENSE b/axiom/LICENSE new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/axiom/LICENSE @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/axiom/Makefile.am b/axiom/Makefile.am new file mode 100644 index 0000000..a468a0c --- /dev/null +++ b/axiom/Makefile.am @@ -0,0 +1,9 @@ +datadir=$(prefix) +SUBDIRS = src $(TESTDIR) include +includedir=$(prefix)/include/axis2-1.6.0/ +include_HEADERS=$(top_builddir)/include/*.h +data_DATA= INSTALL README AUTHORS NEWS CREDITS LICENSE COPYING +EXTRA_DIST = build.sh autogen.sh CREDITS LICENSE +dist-hook: + rm -rf `find $(distdir)/ -type d -name .svn` + rm -rf `find $(distdir)/ -type d -name .deps` diff --git a/axiom/NEWS b/axiom/NEWS new file mode 100644 index 0000000..268572f --- /dev/null +++ b/axiom/NEWS @@ -0,0 +1,7 @@ +Axiom module seperated from Axis2/C +====================================== +Initially this was inside Axis2/C code base as axiom directory. As the +project expands it's moved to the top level with the view of making it a +seperate Apache project called Apache Axiom/C. + +-- Axis2-C team Thu, 18 May 2006 diff --git a/axiom/README b/axiom/README new file mode 100644 index 0000000..0b442a7 --- /dev/null +++ b/axiom/README @@ -0,0 +1,57 @@ + + Apache Axiom/C + ================ + + What is it? + ----------- + + Axiom stands for AXis Object Model (also known as OM - Object Model) and + refers to the XML infoset model that is initially developed for Apache + Axis2. This is an effort to implement Apache Axiom in C. + + Please have a look at http://ws.apache.org/axis2/c/docs/om_tutorial.html + for an introduction about Apache Axiom/C. + + As a project of the Apache Software Foundation, the + developers aim to collaboratively develop and maintain a robust, + commercial-grade, standards-based Web Services stack implementation with + freely available source code. + + The Latest Version + ------------------ + + You can get the latest svn checkout of Apache Axiom/C module from + + https://svn.apache.org/repos/asf/webservices/axis2/trunk/c/axiom + + Installation + ------------ + + Please see the file called INSTALL. + + Licensing + --------- + + Please see the file called LICENSE. + + Contacts + -------- + + o If you want freely available support for using Apache Axiom/C please + join the Apache Axis2/C user community by subscribing to users mailing + list, axis-c-user@ws.apache.org' as described at + http://ws.apache.org/axis2/c/mail-lists.html + + o If you have a bug report for Apache Axis2/C Guththila please log-in and create a JIRA issue + at http://issues.apache.org/jira/browse/AXIS2C + + o If you want to participate actively in developing Apache Axis2/C Guththila please + subscribe to the `axis-c-dev@ws.apache.org' mailing list as described at + http://ws.apache.org/axis2/c/mail-lists.html + + + Acknowledgments + ---------------- + + Apache Axiom/C relies heavily on the use of autoconf, automake and libtool + to provide a build environment. diff --git a/axiom/autogen.sh b/axiom/autogen.sh new file mode 100755 index 0000000..3862edc --- /dev/null +++ b/axiom/autogen.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +echo -n 'Running libtoolize...' +if [ `uname -s` = Darwin ] +then + LIBTOOLIZE=glibtoolize +else + LIBTOOLIZE=libtoolize +fi + +if $LIBTOOLIZE --force > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running aclocal...' +if aclocal > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoheader...' +if autoheader > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoconf...' +if autoconf > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running automake...' +if automake --add-missing > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo 'done' diff --git a/axiom/build.sh b/axiom/build.sh new file mode 100755 index 0000000..d39c3e7 --- /dev/null +++ b/axiom/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +./autogen.sh +./configure --prefix=${AXIS2C_HOME} --enable-static=no --enable-tests=no +make +make install + diff --git a/axiom/configure.ac b/axiom/configure.ac new file mode 100644 index 0000000..6802fb9 --- /dev/null +++ b/axiom/configure.ac @@ -0,0 +1,179 @@ +dnl run autogen.sh to generate the configure script. + +AC_PREREQ(2.59) + +AC_INIT(axis2_axiom-src, 1.6.0) +AC_CANONICAL_SYSTEM +AM_CONFIG_HEADER(config.h) +AM_INIT_AUTOMAKE +AC_PREFIX_DEFAULT(/usr/local/axis2_axiom) + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_CPP +AC_PROG_LIBTOOL +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET + +dnl check for flavours of varargs macros (test from GLib) +AC_MSG_CHECKING(for ISO C99 varargs macros in C) +AC_TRY_COMPILE([],[ +int a(int p1, int p2, int p3); +#define call_a(...) a(1,__VA_ARGS__) +call_a(2,3); +],axis2c_have_iso_c_varargs=yes,axis2c_have_iso_c_varargs=no) +AC_MSG_RESULT($axis2c_have_iso_c_varargs) + +AC_MSG_CHECKING(for GNUC varargs macros) +AC_TRY_COMPILE([],[ +int a(int p1, int p2, int p3); +#define call_a(params...) a(1,params) +call_a(2,3); +],axis2c_have_gnuc_varargs=yes,axis2c_have_gnuc_varargs=no) +AC_MSG_RESULT($axis2c_have_gnuc_varargs) + +dnl Output varargs tests +if test x$axis2c_have_iso_c_varargs = xyes; then + AC_DEFINE(HAVE_ISO_VARARGS,1,[Have ISO C99 varargs macros]) +fi +if test x$axis2c_have_gnuc_varargs = xyes; then + AC_DEFINE(HAVE_GNUC_VARARGS,1,[Have GNU-style varargs macros]) +fi + +dnl Checks for libraries. +AC_CHECK_LIB(dl, dlopen) +AC_CHECK_LIB(z, inflate) + +#CFLAGS="$CFLAGS -ansi -Wall -D_LARGEFILE64_SOURCE -Wno-implicit-function-declaration" +CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE" +if test "$GCC" = "yes"; then + CFLAGS="$CFLAGS -ansi -Werror -Wall -Wno-implicit-function-declaration " +fi + + +dnl Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([stdio.h stdlib.h string.h]) +AC_CHECK_HEADERS([sys/socket.h]) +AC_CHECK_HEADERS([linux/if.h],[],[], +[ +#if HAVE_SYS_SOCKET_H +# include +#endif +]) + +dnl This is a check to see if we are running MacOS X +dnl It may be better to do a Darwin check +AC_CHECK_HEADER([sys/appleapiopts.h], + [AC_DEFINE([IS_MACOSX],[1],[Define to 1 if compiling on MacOS X])], + []) + +dnl Checks for typedefs, structures, and compiler characteristics. +dnl AC_C_CONST + +dnl Checks for library functions. +dnl AC_FUNC_MALLOC +dnl AC_FUNC_REALLOC +#AC_CHECK_FUNCS([memmove]) + +AC_MSG_CHECKING(whether to build xpath) +AC_ARG_ENABLE(xpath, [ --enable-xpath build xpath. default=yes], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + XPATH_DIR="xpath" + + ;; + esac ], + AC_MSG_RESULT(yes) + XPATH_DIR="xpath" +) + + +AC_MSG_CHECKING(whether to build guththila xml parser library) +AC_ARG_ENABLE(guththila, [ --enable-guththila build guththila xml parser library wrapper. default=yes], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + WRAPPER_DIR="guththila" + + ;; + esac ], + AC_MSG_RESULT(yes) + WRAPPER_DIR="guththila" +) + +AC_MSG_CHECKING(whether to build libxml2 xml parser library) +AC_ARG_ENABLE(libxml2, [ --enable-libxml2 build libxml2 xml parser library wrapper. default=no], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + CFLAGS="$CFLAGS -DAXIS2_LIBXML2_ENABLED" + WRAPPER_DIR="libxml2" + PKG_CHECK_MODULES(LIBXML2, libxml-2.0) + + ;; + esac ], + AC_MSG_RESULT(no) +) + + +AC_MSG_CHECKING(whether to build tests) +AC_ARG_ENABLE(tests, [ --enable-tests build tests. default=no], +[ case "${enableval}" in + yes) + AC_MSG_RESULT(yes) + TESTDIR="test" + ;; + *) + AC_MSG_RESULT(no) + TESTDIR="" + + ;; + esac ], + AC_MSG_RESULT(no) + TESTDIR="" +) + +PKG_PROG_PKG_CONFIG(0.15) +CFLAGS="$CFLAGS $GUTHTHILA_CFLAGS" +VERSION_NO="6:0:6" + +AC_SUBST(VERSION_NO) +AC_SUBST(LIBXML2_CFLAGS) +AC_SUBST(LIBXML2_LIBS) +AC_SUBST(WRAPPER_DIR) +AC_SUBST(GUTHTHILA_LIBS) +AC_SUBST(TESTDIR) +AC_SUBST(XPATH_DIR) + +AC_CONFIG_FILES([Makefile \ + src/Makefile \ + src/parser/Makefile \ + src/parser/libxml2/Makefile \ + src/parser/guththila/Makefile \ + src/soap/Makefile \ + src/om/Makefile \ + src/util/Makefile \ + src/attachments/Makefile \ + src/xpath/Makefile \ + test/Makefile \ + test/om/Makefile \ + test/soap/Makefile \ + test/util/Makefile \ + test/xpath/Makefile \ + include/Makefile + ]) + +AC_OUTPUT diff --git a/axiom/include/Makefile.am b/axiom/include/Makefile.am new file mode 100644 index 0000000..d938299 --- /dev/null +++ b/axiom/include/Makefile.am @@ -0,0 +1 @@ +TESTS = diff --git a/axiom/include/axiom.h b/axiom/include/axiom.h new file mode 100644 index 0000000..38272d6 --- /dev/null +++ b/axiom/include/axiom.h @@ -0,0 +1,57 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_H +#define AXIOM_H +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** +* @file axiom.h +* @brief includes all headers in OM +*/ +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_H */ diff --git a/axiom/include/axiom_attribute.h b/axiom/include/axiom_attribute.h new file mode 100644 index 0000000..b0a6e8e --- /dev/null +++ b/axiom/include/axiom_attribute.h @@ -0,0 +1,263 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIOM_ATTRIBUTE_H +#define AXIOM_ATTRIBUTE_H + +/** +* @file axiom_attribute.h +* @brief om attribute struct represents an xml attribute +*/ +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_attribute attribute + * @ingroup axiom_om + * @{ + */ + + typedef struct axiom_attribute axiom_attribute_t; + + /** + * creates an om_attribute struct + * @param env Environment. MUST NOT be NULL + * @param localname localname of the attribute, should not be a null value. + * @param value normalized attribute value. cannot be NULL + * @param ns namespace, if any, of the attribute. Optional, can be NULL om_attribute wont free the ns + * @return a pointer to newly created attribute struct, returns NULL on error with + * error code set in environment's error. + */ + AXIS2_EXTERN axiom_attribute_t *AXIS2_CALL + axiom_attribute_create( + const axutil_env_t * env, + const axis2_char_t * localname, + const axis2_char_t * value, + axiom_namespace_t * ns); + + /** + * Free om attribute passed as void pointer. This will be + * cast into appropriate type and then pass the cast object + * into the om_attribute structure's free method + * @param om_attribute pointer to attribute struct to be freed + * @param env Environment. MUST NOT be NULL + */ + + AXIS2_EXTERN void AXIS2_CALL + axiom_attribute_free_void_arg( + void *om_attribute, + const axutil_env_t * env); + + /** + * Free an axiom_attribute struct + * @param om_attribute pointer to attribute struct to be freed + * @param env Environment. MUST NOT be NULL + */ + + AXIS2_EXTERN void AXIS2_CALL + axiom_attribute_free( + struct axiom_attribute *om_attribute, + const axutil_env_t * env); + + /** + * Creates and returns a qname struct for this attribute + * @param om_attribute pointer to attribute struct + * for which the qname is to be returned + * @param env Environment. MUST NOT be NULL + * @return returns qname for given attribute.NULL on error + */ + + AXIS2_EXTERN axutil_qname_t *AXIS2_CALL + axiom_attribute_get_qname( + struct axiom_attribute *om_attribute, + const axutil_env_t * env); + + /** + * Serialize op + * @param om_attribute pointer to attribute struct to be serialized + * @param env Environment. MUST NOT be NULL, + * @param om_output AXIOM output handler to be used in serializing + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE. + */ + + AXIS2_EXTERN int AXIS2_CALL + axiom_attribute_serialize( + struct axiom_attribute *om_attribute, + const axutil_env_t * env, + axiom_output_t * om_output); + + /** Returns the localname of this attribute + * @param om_attribute pointer to attribute struct + * @param env environment. MUST NOT not be NULL. + * @return localname returns NULL on error. + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_attribute_get_localname( + struct axiom_attribute *om_attribute, + const axutil_env_t * env); + + /** + * returns value of this attribute + *@param om_attribute pointer to om_attribute struct + *@param env environment N not be null + *@return value , null on error + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_attribute_get_value( + struct axiom_attribute *om_attribute, + const axutil_env_t * env); + + /** + * returns namespace of this attribute + *@param om_attribute + *@param env environment MUST NOT be NULL + *@return a pointer to om_namespace struct , returns NULL on error. + */ + AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL + axiom_attribute_get_namespace( + struct axiom_attribute *om_attribute, + const axutil_env_t * env); + + /** sets the localname of the attribute + *@param om_attribute pointer to om attribute struct. + *@param env environment, MUST NOT be null. + *@param localname localname that should be set for this attribute + *@return status code AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_attribute_set_localname( + struct axiom_attribute *om_attribute, + const axutil_env_t * env, + const axis2_char_t * localname); + + /** set the attribute value + *@param om_attribute a pointer to om_attribute struct. + *@param env environment, MUST NOT be NULL. + *@param value value that should be set for this attribute + *@return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_attribute_set_value( + struct axiom_attribute *om_attribute, + const axutil_env_t * env, + const axis2_char_t * value); + + /** set namespace of the attribute + *@param om_attribute a pointer to om_attribute struct + *@param env environment, MUST NOT be NULL. + *@param om_namespace a pointer to om_namespace struct that should be set + * for this attribute + *@return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_attribute_set_namespace( + struct axiom_attribute *om_attribute, + const axutil_env_t * env, + axiom_namespace_t * om_namespace); + + /** + * clones an om attribute + * @param om_attibute + * @param env environment + * @returns pointer to cloned om attribute struct on success + * NULL otherwise + */ + AXIS2_EXTERN struct axiom_attribute *AXIS2_CALL + axiom_attribute_clone( + struct axiom_attribute *om_attribute, + const axutil_env_t * env); + + /** Increment the reference counter. + * @param om_attribute a pointer to om_attribute struct + * @param env environment, MUST NOT be NULL. + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_attribute_increment_ref( + struct axiom_attribute *om_attribute, + const axutil_env_t * env); + + /** Create OM attribute + * @param om_attribute a pointer to om_attribute struct + * @param env environment, MUST NOT be NULL. + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axiom_attribute_t *AXIS2_CALL + axiom_attribute_create_str( + const axutil_env_t * env, + axutil_string_t * localname, + axutil_string_t * value, + axiom_namespace_t * ns); + + /** Get the localname as a string + * @param om_attribute a pointer to om_attribute struct + * @param env environment, MUST NOT be NULL. + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + axiom_attribute_get_localname_str( + axiom_attribute_t * attribute, + const axutil_env_t * env); + + /** Get the value as a string + * @param om_attribute a pointer to om_attribute struct + * @param env environment, MUST NOT be NULL. + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + axiom_attribute_get_value_str( + axiom_attribute_t * attribute, + const axutil_env_t * env); + + /** Set the localname of the attribute + * @param om_attribute a pointer to om_attribute struct + * @param env environment, MUST NOT be NULL. + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_attribute_set_localname_str( + axiom_attribute_t * attribute, + const axutil_env_t * env, + axutil_string_t * localname); + + /** Set the value of the attribute + * @param om_attribute a pointer to om_attribute struct + * @param env environment, MUST NOT be NULL. + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_attribute_set_value_str( + axiom_attribute_t * attribute, + const axutil_env_t * env, + axutil_string_t * value); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_ATTRIBUTE_H */ diff --git a/axiom/include/axiom_child_element_iterator.h b/axiom/include/axiom_child_element_iterator.h new file mode 100644 index 0000000..627a347 --- /dev/null +++ b/axiom/include/axiom_child_element_iterator.h @@ -0,0 +1,124 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_CHILD_ELEMENT_ITERATOR_H +#define AXIOM_CHILD_ELEMENT_ITERATOR_H + +/** +*@file axiom_child_element_iterator.h +*@brief this is the iterator for om elemnts +*/ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_child_element_iterator + axiom_child_element_iterator_t; + + /** + * @defgroup axiom_child_element_iterator child element iterator + * @ingroup axiom_om + * @{ + */ + + /** + * Free the iterator + * @param iterator a pointer to child element iterator struct + * @param env environment, MUST NOT be NULL. + */ + + AXIS2_EXTERN void AXIS2_CALL + axiom_child_element_iterator_free( + void *iterator, + const axutil_env_t * env); + + /** + * Removes from the underlying collection the last element returned by the + * iterator (optional op). This method can be called only once per + * call to next. The behavior of an iterator is unspecified if + * the underlying collection is modified while the iteration is in + * progress in any way other than by calling this method. + * @param iterator a pointer to child element iterator struct + * @param env environment, MUST NOT be NULL. + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_child_element_iterator_remove( + axiom_child_element_iterator_t * iterator, + const axutil_env_t * env); + + /** + * returns true if the iteration has more elements + * in otherwords it returns true if the next() would return an element + * rather than null with an error code set to environments error + * @param iterator a pointer to child element iterator struct + * @param env environment, MUST NOT be NULL. + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axiom_child_element_iterator_has_next( + axiom_child_element_iterator_t * iterator, + const axutil_env_t * env); + + /** + * Returns the next element in the iteration. Returns null if there + * is no more elements + * @param iterator a pointer to child element iterator struct + * @param env environment, MUST NOT be NULL. + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_child_element_iterator_next( + axiom_child_element_iterator_t * iterator, + const axutil_env_t * env); + + /** + * Create a child element interator for the current child + * @param current child + * @param env environment, MUST NOT be NULL. + * return axiom_child_element_iterator_t + */ + + AXIS2_EXTERN axiom_child_element_iterator_t *AXIS2_CALL + axiom_child_element_iterator_create( + const axutil_env_t * env, + axiom_node_t * current_child); + +#define AXIOM_CHILD_ELEMENT_ITERATOR_FREE(iterator, env) \ + axiom_child_element_iterator_free(iterator, env) + +#define AXIOM_CHILD_ELEMENT_ITERATOR_REMOVE(iterator, env) \ + axiom_child_element_iterator_remove(iterator, env) + +#define AXIOM_CHILD_ELEMENT_ITERATOR_HAS_NEXT(iterator, env) \ + axiom_child_element_iterator_has_next(iterator, env) + +#define AXIOM_CHILD_ELEMENT_ITERATOR_NEXT(iterator, env) \ + axiom_child_element_iterator_next(iterator, env) + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_CHILD_ELEMENT_ITERATOR_H */ diff --git a/axiom/include/axiom_children_iterator.h b/axiom/include/axiom_children_iterator.h new file mode 100644 index 0000000..c0e802a --- /dev/null +++ b/axiom/include/axiom_children_iterator.h @@ -0,0 +1,123 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_CHILDREN_ITERATOR_H +#define AXIOM_CHILDREN_ITERATOR_H + +/** +*@file axiom_children_iterator.h +*@brief this is the iterator for om nodes +*/ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_children_iterator axiom_children_iterator_t; + + /** + * @defgroup axiom_children_iterator children iterator + * @ingroup axiom_om + * @{ + */ + + /** + * @param current child + * @param env environment + * return axiom_children_iterator_t + */ + + AXIS2_EXTERN axiom_children_iterator_t *AXIS2_CALL + + axiom_children_iterator_create( + const axutil_env_t * env, + axiom_node_t * current_child); + + /** + * Free the om_children_iterator struct + * @param iterator a pointer to axiom children iterator struct + * @param env environment, MUST NOT be NULL + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_children_iterator_free( + axiom_children_iterator_t * iterator, + const axutil_env_t * env); + + /** + * Removes from the underlying collection the last element returned by the + * iterator (optional op). This method can be called only once per + * call to next. The behavior of an iterator is unspecified if + * the underlying collection is modified while the iteration is in + * progress in any way other than by calling this method. + * @param iterator a pointer to axiom children iterator struct + * @param env environment, MUST NOT be NULL + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_children_iterator_remove( + axiom_children_iterator_t * iterator, + const axutil_env_t * env); + + /** + * @returns true if the iteration has more elements. In other + * words, returns true if next() would return an om_node_t struct + * rather than null with error code set in environment + * @param iterator a pointer to axiom children iterator struct + * @param env environment, MUST NOT be NULL + */ + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_children_iterator_has_next( + axiom_children_iterator_t * iterator, + const axutil_env_t * env); + + /** + * Returns the next element in the iteration. Returns null if there are + * no more elements in the iteration + * @param iterator a pointer to axiom children iterator struct + * @param env environment, MUST NOT be NULL + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_children_iterator_next( + axiom_children_iterator_t * iterator, + const axutil_env_t * env); + + /** + * Resets the Iterator. This moves the cursor back to the initial. + * iterator chidren_iterator to be reset. + * @param iterator a pointer to axiom children iterator struct + * @param env environment, MUST NOT be NULL + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_children_iterator_reset( + axiom_children_iterator_t * iterator, + const axutil_env_t * env); + + /************ Macros *********************************************/ + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_CHILDREN_ITERATOR_H */ diff --git a/axiom/include/axiom_children_qname_iterator.h b/axiom/include/axiom_children_qname_iterator.h new file mode 100644 index 0000000..f7daa66 --- /dev/null +++ b/axiom/include/axiom_children_qname_iterator.h @@ -0,0 +1,107 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_CHILDREN_QNAME_ITERATOR_H +#define AXIOM_CHILDREN_QNAME_ITERATOR_H + +/** + *@file axiom_children_qname_iterator.h + *@brief this is the iterator for om nodes using qname + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_children_qname_iterator + axiom_children_qname_iterator_t; + + /** + * @defgroup axiom_children_qname_iterator children qname iterator + * @ingroup axiom_om + * @{ + */ + + AXIS2_EXTERN axiom_children_qname_iterator_t *AXIS2_CALL + axiom_children_qname_iterator_create( + const axutil_env_t * env, + axiom_node_t * current_child, + axutil_qname_t * given_qname); + + /** + * free om_children_qname_iterator struct + * @param iterator a pointer to axiom children iterator struct + * @param env environment, MUST NOT be NULL + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_children_qname_iterator_free( + axiom_children_qname_iterator_t * iterator, + const axutil_env_t * env); + + /** + * Removes from the underlying collection the last element returned by the + * iterator (optional operation). This method can be called only once per + * call to next. The behavior of an iterator is unspecified if + * the underlying collection is modified while the iteration is in + * progress in any way other than by calling this method. + * @param iterator a pointer to axiom children iterator struct + * @param env environment, MUST NOT be NULL + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_children_qname_iterator_remove( + axiom_children_qname_iterator_t * iterator, + const axutil_env_t * env); + + /** + * Returns true if the iteration has more elements. (In other + * words, returns true if next would return an + * axiom_node_t struct rather than null with error code set in environment + * @param iterator a pointer to axiom children iterator struct + * @param env environment, MUST NOT be NULL + */ + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axiom_children_qname_iterator_has_next( + axiom_children_qname_iterator_t * iterator, + const axutil_env_t * env); + + /** + * Returns the next element in the iteration. + * @param iterator a pointer to axiom children iterator struct + * @param env environment, MUST NOT be NULL + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_children_qname_iterator_next( + axiom_children_qname_iterator_t * iterator, + const axutil_env_t * env); + + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_CHILDREN_QNAME_ITERATOR_H */ diff --git a/axiom/include/axiom_children_with_specific_attribute_iterator.h b/axiom/include/axiom_children_with_specific_attribute_iterator.h new file mode 100644 index 0000000..cbfb21d --- /dev/null +++ b/axiom/include/axiom_children_with_specific_attribute_iterator.h @@ -0,0 +1,128 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_CHILDREN_WITH_SPECIFIC_ATTRIBUTE_ITERATOR_H +#define AXIOM_CHILDREN_WITH_SPECIFIC_ATTRIBUTE_ITERATOR_H + +/** +*@file axiom_children_with_specific_attribute_iterator.h +*@brief this is the iterator for om nodes +*/ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_children_with_specific_attribute_iterator + axiom_children_with_specific_attribute_iterator_t; + + /** + * @defgroup axiom_children_with_specific_attribute_iterator children with specific attribute iterator + * @ingroup axiom_om + * @{ + */ + + /** + * Free function free the om_children_with_specific_attribute_iterator struct + * @param iterator a pointer to axiom children with specific attribute iterator struct + * @param env environment, MUST NOT be NULL + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_children_with_specific_attribute_iterator_free( + axiom_children_with_specific_attribute_iterator_t * iterator, + const axutil_env_t * env); + + /** + * Removes from the underlying collection the last element returned by the + * iterator (optional op). This method can be called only once per + * call to next. The behavior of an iterator is unspecified if + * the underlying collection is modified while the iteration is in + * progress in any way other than by calling this method. + * @param iterator a pointer to axiom children with specific attribute iterator struct + * @param env environment, MUST NOT be NULL + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_children_with_specific_attribute_iterator_remove( + axiom_children_with_specific_attribute_iterator_t * iterator, + const axutil_env_t * env); + + /** + * Returns true< if the iteration has more elements. (In other + * words, returns true if next would return an axiom_node_t struct + * rather than NULL with error code set in environment + * @param iterator a pointer to axiom children with specific attribute iterator struct + * @param env environment, MUST NOT be NULL + */ + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_children_with_specific_attribute_iterator_has_next( + axiom_children_with_specific_attribute_iterator_t * iterator, + const axutil_env_t * env); + + /** + * Returns the next element in the iteration. returns null if there is no + * more elements in the iteration + * @param iterator a pointer to axiom children with specific attribute iterator struct + * @param env environment, MUST NOT be NULL + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_children_with_specific_attribute_iterator_next( + axiom_children_with_specific_attribute_iterator_t * iterator, + const axutil_env_t * env); + + /** + * @param env environment, MUST NOT be NULL + * @param current_child the current child for the interation + * @param attr_qname the qname for the attribute + * @param attr_value the value string for the attribute + * @param detach AXIS2_TRUE to detach AXIS2_FALSE not to + * return axiom_children_with_specific_attribute_iterator_t + */ + + AXIS2_EXTERN axiom_children_with_specific_attribute_iterator_t *AXIS2_CALL + axiom_children_with_specific_attribute_iterator_create( + const axutil_env_t * env, + axiom_node_t * current_child, + axutil_qname_t * attr_qname, + axis2_char_t * attr_value, + axis2_bool_t detach); + +#define AXIOM_CHILDREN_WITH_SPECIFIC_ATTRIBUTE_ITERATOR_FREE(iterator, env) \ + axiom_children_with_specific_attribute_iterator_free(iterator, env) + +#define AXIOM_CHILDREN_WITH_SPECIFIC_ATTRIBUTE_ITERATOR_REMOVE(iterator, env) \ + axiom_children_with_specific_attribute_iterator_remove(iterator, env) + +#define AXIOM_CHILDREN_WITH_SPECIFIC_ATTRIBUTE_ITERATOR_HAS_NEXT(iterator, env) \ + axiom_children_with_specific_attribute_iterator_has_next(iterator, env) + +#define AXIOM_CHILDREN_WITH_SPECIFIC_ATTRIBUTE_ITERATOR_NEXT(iterator, env) \ + axiom_children_with_specific_attribute_iterator_next(iterator, env) + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_CHILDREN_WITH_SPECIFIC_ATTRIBUTE_ITERATOR_H */ diff --git a/axiom/include/axiom_comment.h b/axiom/include/axiom_comment.h new file mode 100644 index 0000000..63d048e --- /dev/null +++ b/axiom/include/axiom_comment.h @@ -0,0 +1,115 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_COMMENT_H +#define AXIOM_COMMENT_H + +/** + * @file axiom_comment.h + * @brief defines axiom_comment_t struct, and manipulation functions + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_comment comment + * @ingroup axiom_om + * @{ + */ + + typedef struct axiom_comment axiom_comment_t; + + /** + * Creates a comment struct + * @param env Environment. MUST NOT be NULL, + * @param parent This is the parent node of the comment is any, can be NULL. + * @param value comment text + * @param node This is an out parameter.cannot be NULL. + * Returns the node corresponding to the comment created. + * Node type will be set to AXIOM_COMMENT + * @return a pointer to the newly created comment struct + */ + AXIS2_EXTERN axiom_comment_t *AXIS2_CALL + axiom_comment_create( + const axutil_env_t * env, + axiom_node_t * parent, + const axis2_char_t * value, + axiom_node_t ** node); + + /** + * Free a axis2_comment_t struct + * @param om_comment pointer to axis2_commnet_t struct to be freed + * @param env Environment. MUST NOT be NULL. + * @return satus of the op. + * AXIS2_SUCCESS on success ,AXIS2_FAILURE on error. + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_comment_free( + struct axiom_comment *om_comment, + const axutil_env_t * env); + + /** get the comments data + * @param om_comment a pointer to axiom_comment_t struct + * @param env environment, MUST NOT be NULL + * @returns comment text + */ + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_comment_get_value( + struct axiom_comment *om_comment, + const axutil_env_t * env); + + /** + * set comment data + * @param om_comment pointer to axiom_comment_t struct + * @param env environment, MUST NOT be NULL. + * @param value comment text + * @returns AXIS2_SUCCESS on success , AXIS2_FAILURE on error + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_comment_set_value( + struct axiom_comment *om_comment, + const axutil_env_t * env, + const axis2_char_t * value); + + /** + * serialize function + * @param om_comment pointer to axiom_comment_t struct + * @param env environment, MUST NOT be NULL. + * @param om_output pointer to om_output_t struct + * @return AXIS2_SUCCESS on success, AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_comment_serialize( + struct axiom_comment *om_comment, + const axutil_env_t * env, + axiom_output_t * om_output); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_COMMENT_H */ diff --git a/axiom/include/axiom_data_handler.h b/axiom/include/axiom_data_handler.h new file mode 100644 index 0000000..0cf65c9 --- /dev/null +++ b/axiom/include/axiom_data_handler.h @@ -0,0 +1,260 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_DATA_HANDLER_H +#define AXIOM_DATA_HANDLER_H + +/** + * @file axiom_data_handler.h + * @brief axis2 data_handler interface + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef enum axiom_data_handler_type + { + AXIOM_DATA_HANDLER_TYPE_FILE, + AXIOM_DATA_HANDLER_TYPE_BUFFER, + AXIOM_DATA_HANDLER_TYPE_CALLBACK + } axiom_data_handler_type_t; + + typedef struct axiom_data_handler axiom_data_handler_t; + + /** @defgroup axiom_data_handler Flow + * @ingroup axiom_data_handler + * @{ + */ + + /** + * @param data_handler, a pointer to data handler struct + * @param env environment, MUST NOT be NULL. + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_data_handler_get_content_type( + axiom_data_handler_t * data_handler, + const axutil_env_t * env); + + /** + * @param data_handler, a pointer to data handler struct + * @param env environment, MUST NOT be NULL. + * @param mime type, + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_data_handler_set_content_type( + axiom_data_handler_t * data_handler, + const axutil_env_t * env, + const axis2_char_t *mime_type); + + /** + * @param data_handler, a pointer to data handler struct + * @param env environment, MUST NOT be NULL. + * @return bool whether attachment is cached or not + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_data_handler_get_cached( + axiom_data_handler_t * data_handler, + const axutil_env_t * env); + + /** + * @param data_handler, a pointer to data handler struct + * @param env environment, MUST NOT be NULL. + * @param cached, + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_data_handler_set_cached( + axiom_data_handler_t * data_handler, + const axutil_env_t * env, + axis2_bool_t cached); + + + /** + * @param data_handler, a pointer to data handler struct + * @param env environment, MUST NOT be NULL. + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_byte_t *AXIS2_CALL + + axiom_data_handler_get_input_stream( + axiom_data_handler_t * data_handler, + const axutil_env_t * env); + + /** + * @param data_handler, a pointer to data handler struct + * @param env environment, MUST NOT be NULL. + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN size_t AXIS2_CALL + axiom_data_handler_get_input_stream_len( + axiom_data_handler_t * data_handler, + const axutil_env_t * env); + + /** + * The data_handler is responsible for memory occupied by the stream + * returned + * @param output_stream parameter to store reference to output byte stream. + * @param output_stream_size parameter to store reference to output byte + * stream length + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_data_handler_read_from( + axiom_data_handler_t * data_handler, + const axutil_env_t * env, + axis2_byte_t ** output_stream, + size_t *output_stream_size); + + /** + * @param data_handler, a pointer to data handler struct + * @param env environment, MUST NOT be NULL. + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_data_handler_set_binary_data( + axiom_data_handler_t * data_handler, + const axutil_env_t * env, + axis2_byte_t * input_stream, + size_t input_stream_len); + + /** + * @param data_handler, a pointer to data handler struct + * @param env environment, MUST NOT be NULL. + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_data_handler_write_to( + axiom_data_handler_t * data_handler, + const axutil_env_t * env); + + /** + * @param data_handler, a pointer to data handler struct + * @param env environment, MUST NOT be NULL. + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_data_handler_set_file_name( + axiom_data_handler_t * data_handler, + const axutil_env_t * env, + axis2_char_t * file_name); + + /** + * @param data_handler, a pointer to data handler struct + * @param env environment, MUST NOT be NULL. + * @return file name, in the case of file type data handler. + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_data_handler_get_file_name( + axiom_data_handler_t * data_handler, + const axutil_env_t * env); + + /** + * @param data_handler, a pointer to data handler struct + * @param env environment, MUST NOT be NULL. + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_data_handler_free( + axiom_data_handler_t * data_handler, + const axutil_env_t * env); + + /** + * Creates data_handler struct + * @return pointer to newly created data_handler + */ + AXIS2_EXTERN axiom_data_handler_t *AXIS2_CALL + axiom_data_handler_create( + const axutil_env_t * env, + const axis2_char_t * file_name, + const axis2_char_t * mime_type); + + /* Add the binary to the array_list + * @param data_handler, a pointer to data handler struct + * data_handler, a pointer to data handler struct + * list, a pointer to an array_list which containing some message parts need + * to be written to the wire + * data_handler, a pointer to data handler struct + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_data_handler_add_binary_data( + axiom_data_handler_t *data_handler, + const axutil_env_t *env, + axutil_array_list_t *list); + + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_data_handler_get_mime_id( + axiom_data_handler_t *data_handler, + const axutil_env_t *env); + + /** + * @param data_handler, a pointer to data handler struct + * @param env environment, MUST NOT be NULL. + * @param mime id, + * @return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error. + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_data_handler_set_mime_id( + axiom_data_handler_t *data_handler, + const axutil_env_t *env, + const axis2_char_t *mime_id); + + + AXIS2_EXTERN axiom_data_handler_type_t AXIS2_CALL + axiom_data_handler_get_data_handler_type( + axiom_data_handler_t *data_handler, + const axutil_env_t *env); + + AXIS2_EXTERN void AXIS2_CALL + axiom_data_handler_set_data_handler_type( + axiom_data_handler_t *data_handler, + const axutil_env_t *env, + axiom_data_handler_type_t data_handler_type); + + AXIS2_EXTERN void *AXIS2_CALL + axiom_data_handler_get_user_param( + axiom_data_handler_t *data_handler, + const axutil_env_t *env); + + AXIS2_EXTERN void AXIS2_CALL + axiom_data_handler_set_user_param( + axiom_data_handler_t *data_handler, + const axutil_env_t *env, + void *user_param); + + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIOM_DATA_HANDLER_H */ diff --git a/axiom/include/axiom_data_source.h b/axiom/include/axiom_data_source.h new file mode 100644 index 0000000..f892682 --- /dev/null +++ b/axiom/include/axiom_data_source.h @@ -0,0 +1,111 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_DATA_SOURCE_H +#define AXIOM_DATA_SOURCE_H + +/** + * @file axiom_data_source.h + * @brief Axis2 AXIOM XML data_source + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_data_source data_source + * @ingroup axiom_om + * @{ + */ + + /** + * \brief data_source struct + * Handles the XML data_source in OM + */ + typedef struct axiom_data_source axiom_data_source_t; + + /** + * Creates a new data_source struct + * @param env Environment. MUST NOT be NULL, . + * @param parent parent of the new node. Optinal, can be NULL. + * The parent element must be of type AXIOM_ELEMENT + * @param value Text value. Optinal, can be NULL. + * @param comment_node This is an out parameter. cannot be NULL. + * Returns the node corresponding to the data_source struct created. + * Node type will be set to AXIOM_DATA_SOURCE + * @return pointer to newly created data_source struct + */ + AXIS2_EXTERN axiom_data_source_t *AXIS2_CALL + axiom_data_source_create( + const axutil_env_t * env, + axiom_node_t * parent, + axiom_node_t ** node); + + /** + * Free an axiom_data_source struct + * @param env environment. MUST NOT be NULL. + * @param om_data_source pointer to om data_source struct to be freed. + * @return satus of the op. AXIS2_SUCCESS on success + * AXIS2_FAILURE on error. + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_data_source_free( + struct axiom_data_source *om_data_source, + const axutil_env_t * env); + + /** + * Serialize op + * @param env environment. MUST NOT be NULL. + * @param om_data_source pointer to om data_source struct to be serialized. + * @param om_output AXIOM output handler to be used in serializing. + * @return satus of the op. AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_data_source_serialize( + struct axiom_data_source *om_data_source, + const axutil_env_t * env, + axiom_output_t * om_output); + + /** + * set the data_source value + * @param om_data_source om_data_source struct + * @param env environment , MUST NOT be NULL. + * @param value data_source + * @return status of the op. AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axutil_stream_t *AXIS2_CALL + axiom_data_source_get_stream( + struct axiom_data_source *om_data_source, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_DATA_SOURCE_H */ diff --git a/axiom/include/axiom_defines.h b/axiom/include/axiom_defines.h new file mode 100644 index 0000000..9cf4b51 --- /dev/null +++ b/axiom/include/axiom_defines.h @@ -0,0 +1,40 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_DEFINES_H +#define AXIOM_DEFINES_H + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * This enum is used to decide the type of storage used + */ + typedef enum _axis2_xml_parser_type + { + AXIS2_XML_PARSER_TYPE_BUFFER = 1, + AXIS2_XML_PARSER_TYPE_FILE, + AXIS2_XML_PARSER_TYPE_DOC + } axis2_xml_parser_type; + +#ifdef __cplusplus +} +#endif +#endif /* AXIOM_DEFINES_H */ diff --git a/axiom/include/axiom_doctype.h b/axiom/include/axiom_doctype.h new file mode 100644 index 0000000..a054c6e --- /dev/null +++ b/axiom/include/axiom_doctype.h @@ -0,0 +1,120 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_DOCTYPE_H +#define AXIOM_DOCTYPE_H + +/** + *@file axiom_doctype.h + *@brief defines struct representing xml DTD and its manipulation functions + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + struct axiom_doctype; + struct axiom_doctype_ops; + + /** + * @defgroup axiom_doctype doctype + * @ingroup axiom_om + * @{ + */ + + typedef struct axiom_doctype axiom_doctype_t; + + /** + * Creates a axiom_doctype_t struct + * @param env Environment. MUST NOT be NULL, + * @param parent parent of the new node. Optinal, can be NULL. + * @param value doctype text + * @param node This is an out parameter.cannot be NULL. + * Returns the node corresponding to the doctype created. + * Node type will be set to AXIOM_DOCTYPE + * @return pointer to newly created doctype struct + */ + AXIS2_EXTERN axiom_doctype_t *AXIS2_CALL + axiom_doctype_create( + const axutil_env_t * env, + axiom_node_t * parent, + const axis2_char_t * value, + axiom_node_t ** node); + + /** + * free doctype struct + * @param om_doctype pointer to axiom_doctype_t struct to be freed + * @param env Environment. MUST NOT be NULL, + * @return satus of the op. AXIS2_SUCCESS on success + * AXIS2_FAILURE on error. + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_doctype_free( + struct axiom_doctype *om_doctype, + const axutil_env_t * env); + + /** + * @param om_doctype pointer to a axiom_doctype_t struct + * @param env environment must not be null + * @return DTD text + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_doctype_get_value( + struct axiom_doctype *om_doctype, + const axutil_env_t * env); + + /** + * @param om_doctype pointer to axiom doctype_t struct + * @param env environment , MUST NOT be NULL. + * @param value doctype text value + * @return status of the op, + * AXIS2_SUCCESS on success, AXIS2_FAILURE on error. + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_doctype_set_value( + struct axiom_doctype *om_doctype, + const axutil_env_t * env, + const axis2_char_t * value); + + /** + * serialize op + * @param om_doctype pointer to axiom_doctype_t struct + * @param env environment , MUST NOT be NULL + * @param om_output pointer to axiom_output_t struct + * @returns status of the op, + * AXIS2_SUCCESS on success, AXIS2_FAILURE on error. + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_doctype_serialize( + struct axiom_doctype *om_doctype, + const axutil_env_t * env, + axiom_output_t * om_output); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_DOCTYPE_H */ diff --git a/axiom/include/axiom_document.h b/axiom/include/axiom_document.h new file mode 100644 index 0000000..ac014df --- /dev/null +++ b/axiom/include/axiom_document.h @@ -0,0 +1,173 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_DOCUMENT_H +#define AXIOM_DOCUMENT_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @file axiom_document.h + * @brief om_document represents an XML document + */ + +#define CHAR_SET_ENCODING "UTF-8" +#define XML_VERSION "1.0" + + struct axiom_stax_builder; + + /** + * @defgroup axiom_document document + * @ingroup axiom_om + * @{ + */ + + typedef struct axiom_document axiom_document_t; + + /** + * creates an axiom_document_t struct + * @param env Environment. MUST NOT be NULL. + * @param root pointer to document's root node. Optional, can be NULL + * @param builder pointer to axiom_stax_builder + * @return pointer to the newly created document. + */ + AXIS2_EXTERN axiom_document_t *AXIS2_CALL + axiom_document_create( + const axutil_env_t * env, + axiom_node_t * root, + struct axiom_stax_builder *builder); + + /** + * Free document struct + * @param document pointer to axiom_document_t struct to be freed + * @param env Environment. MUST NOT be NULL + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE. + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_document_free( + struct axiom_document *document, + const axutil_env_t * env); + + /** + * Free document struct only, Does not free the associated axiom struture. + * @param document pointer to axiom_document_t struct to be freed + * @param env Environment. MUST NOT be NULL + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE. + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_document_free_self( + struct axiom_document *document, + const axutil_env_t * env); + + /** Builds the next node if the builder is not finished with input xml stream + * @param document document whose next node is to be built. cannot be NULL + * @param env Environment. MUST NOT be NULL. + * @return pointer to the next node. NULL on error. + */ + + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_document_build_next( + struct axiom_document *document, + const axutil_env_t * env); + + /** + * Gets the root element of the document. + * @param document document to return the root of + * @param env Environment. MUST NOT be NULL. + * @return returns a pointer to the root node. If no root present, + * this method tries to build the root. Returns NULL on error. + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_document_get_root_element( + struct axiom_document *document, + const axutil_env_t * env); + + /** + * set the root element of the document. IF a root node is already exist,it is freed + * before setting to root element + * @param document document struct to return the root of + * @param env Environment. MUST NOT be NULL. + * @return returns status code AXIS2_SUCCESS on success ,AXIS2_FAILURE on error. + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_document_set_root_element( + struct axiom_document *document, + const axutil_env_t * env, + axiom_node_t * om_node); + + /** + * This method builds the rest of the xml input stream from current position till + * the root element is completed . + * @param document pointer to axiom_document_t struct to be built. + * @param env environment MUST NOT be NULL. + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_document_build_all( + struct axiom_document *document, + const axutil_env_t * env); + + /** + * get builder + * @param document pointer to axiom_document_t struct to be built. + * @param env environment MUST NOT be NULL. + * @return builder, returns NULL if a builder is not associated with + * document + */ + AXIS2_EXTERN struct axiom_stax_builder *AXIS2_CALL + axiom_document_get_builder( + struct axiom_document *document, + const axutil_env_t * env); + + /** + * sets builder for document. + * @param document pointer to axiom_document_t struct to be built. + * @param env environment MUST NOT be NULL. + * @param builder pointer to builder to associate with document + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_document_set_builder( + axiom_document_t * document, + const axutil_env_t * env, + struct axiom_stax_builder * builder); + + /** + * @param om_document + * @return status code AXIS2_SUCCESS on success , otherwise AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_document_serialize( + struct axiom_document *document, + const axutil_env_t * env, + axiom_output_t * om_output); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_DOCUMENT_H */ diff --git a/axiom/include/axiom_element.h b/axiom/include/axiom_element.h new file mode 100644 index 0000000..ceb4417 --- /dev/null +++ b/axiom/include/axiom_element.h @@ -0,0 +1,747 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_ELEMENT_H +#define AXIOM_ELEMENT_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_element axiom_element_t; + + /** + * @defgroup axiom_element element + * @ingroup axiom_om + * @{ + */ + + /** + * Creates an AXIOM element with given local name + * @param env Environment. MUST NOT be NULL. + * @param parent parent of the element node to be created. can be NULL. + * @param localname local name of the elment. cannot be NULL. + * @param ns namespace of the element. can be NULL. + * If the value of the namespace has not already been declared + * then the namespace structure ns will be declared and will be + * freed when the tree is freed. + * If the value of the namespace has already been declared using + * another namespace structure then the namespace structure ns + * will be freed. + * @param node This is an out parameter. cannot be NULL. + * Returns the node corresponding to the comment created. + * Node type will be set to AXIOM_ELEMENT + * @return a pointer to the newly created element struct + */ + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_element_create( + const axutil_env_t * env, + axiom_node_t * parent, + const axis2_char_t * localname, + axiom_namespace_t * ns, + axiom_node_t ** node); + + /** + * Creates an AXIOM element with given qname + * @param env Environment. MUST NOT be NULL. + * @param parent parent of the element node to be created. can be NULL. + * @param qname qname of the elment.cannot be NULL. + * @param node This is an out parameter. cannot be NULL. + * Returns the node corresponding to the comment created. + * Node type will be set to AXIOM_ELEMENT + * @return a pointer to the newly created element struct + */ + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_element_create_with_qname( + const axutil_env_t * env, + axiom_node_t * parent, + const axutil_qname_t * qname, + axiom_node_t ** node); + /* + * Find a namespace in the scope of the document. + * Start to find from the given node and go up the hierarchy. + * @param om_element pointer to om_element_struct contained in + * node , + * @param env Environment. MUST NOT be NULL. + * @param node node containing an instance of an AXIOM element,cannot be NULL. + * @param uri namespace uri.. + * @param prefix namespace prefix. can be NULL. + * @return pointer to the namespace, if found, else NULL. On error, returns + * NULL and sets error code in environment,s error + */ + AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL + axiom_element_find_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * node, + const axis2_char_t * uri, + const axis2_char_t * prefix); + + /** + * Declare a namespace in current element (in the scope of this element ). + * It checks to see if it is already declared. + * @param om_element contained in the om node struct + * @param env Environment. MUST NOT be NULL. + * @param node node containing an instance of an AXIOM element. + * @param ns pointer to the namespace struct to be declared + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_element_declare_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * node, + axiom_namespace_t * ns); + /** + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param om_node pointer to this element node + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE. + * + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_element_declare_namespace_assume_param_ownership( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_namespace_t * ns); + + /** + * Finds a namespace using qname + * Start to find from the given node and go up the hierarchy. + * @param om_element om_element contained in node + * @param env Environment. MUST NOT be NULL. + * @param node node containing an instance of an AXIOM element, cannot be NULL. + * @param qname qname of the namespace to be found. cannot be NULL. + * @return pointer to the namespace, if found, else NULL. On error, returns + * NULL and sets the error code in environment's error struct. + */ + AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL + axiom_element_find_namespace_with_qname( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * node, + axutil_qname_t * qname); + + /** + * Adds an attribute to current element The current element takes responsibility of the assigned attribute + * @param om_element element to which the attribute is to be added.cannot be NULL. + * @param env Environment. MUST NOT be NULL. + * @param attribute attribute to be added. + * @param node axiom_node_t node that om_element is contained in + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_element_add_attribute( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_attribute_t * attribute, + axiom_node_t * node); + + /** + * Gets (finds) the attribute with the given qname + * @param element element whose attribute is to be found. + * @param env Environment. MUST NOT be NULL. + * @qname qname qname of the attribute to be found. should not be NULL. + * @return a pointer to the attribute with given qname if found, else NULL. + * On error, returns NULL and sets the error code in environment's error struct. + */ + AXIS2_EXTERN axiom_attribute_t *AXIS2_CALL + axiom_element_get_attribute( + axiom_element_t * om_element, + const axutil_env_t * env, + axutil_qname_t * qname); + + /** + * Gets (finds) the attribute value with the given qname + * @param element element whose attribute is to be found. + * @param env Environment. MUST NOT be NULL. + * @qname qname qname of the attribute to be found. should not be NULL. + * @return the attribute value with given qname if found, else NULL. + * On error, returns NULL and sets the error code in environment's error struct. + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_element_get_attribute_value( + axiom_element_t * om_element, + const axutil_env_t * env, + axutil_qname_t * qname); + + /** + * Frees given element + * @param element AXIOM element to be freed. + * @param env Environment. MUST NOT be NULL. + * @return satus of the op. AXIS2_SUCCESS on success ,AXIS2_FAILURE on error. + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_element_free( + axiom_element_t * element, + const axutil_env_t * env); + + /** + * Serializes the start part of the given element + * @param element element to be serialized. + * @param env Environment. MUST NOT be NULL. + * @param om_output AXIOM output handler to be used in serializing + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_element_serialize_start_part( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_output_t * om_output, + axiom_node_t * ele_node); + + /** + * Serializes the end part of the given element. serialize_start_part must + * have been called before calling this method. + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param om_node pointer to this element node + * @param om_output AXIOM output handler to be used in serializing + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_element_serialize_end_part( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_output_t * om_output); + + /** + * finds a namespace in current element's scope, + * by uri or prefix or both + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param uri namespace uri, may be null + * @param prefix prefix + * @return axiom_namespace_t if found, else return NULL + */ + + AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL + axiom_element_find_declared_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + const axis2_char_t * uri, + const axis2_char_t * prefix); + + /** + * returns the localname of this element + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @returns localname of element, returns NULL on error. + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_element_get_localname( + axiom_element_t * om_element, + const axutil_env_t * env); + + /** + * set the localname of this element + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @localname text value to be set as localname + * @returns status code of op, AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_element_set_localname( + axiom_element_t * om_element, + const axutil_env_t * env, + const axis2_char_t * localname); + + /** + * get the namespace of om_element + * @param om_element om_element struct + * @param env environemt, MUST NOT be NULL. + * @returns pointer to axiom_namespace_t struct + * NULL if there is no namespace associated with the element, + * NULL on error with error code set to environment's error + */ + AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL + axiom_element_get_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * ele_node); + + /** + * set the namespace of the element + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param ns pointer to namespace + * If the value of the namespace has not already been declared + * then the namespace structure ns will be declared and will be + * freed when the tree is freed. + * @returns status code of the op, with error code + * set to environment's error + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_element_set_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_namespace_t * ns, + axiom_node_t * node); + + + /** + * unconditionally set the namespace of the element + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param ns pointer to namespace + * The namespace ns is assumed to have been declared already. + * @returns status code of the op, with error code + * set to environment's error + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_element_set_namespace_assume_param_ownership( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_namespace_t * ns); + + /** + * get the attribute list of the element + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @returns axutil_hash poiner to attributes hash + * This hash table is read only + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axiom_element_get_all_attributes( + axiom_element_t * om_element, + const axutil_env_t * env); + + /** + * get the namespace list of the element + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @returns axutil_hash pointer to namespaces hash + * this hash table is read only + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axiom_element_get_namespaces( + axiom_element_t * om_element, + const axutil_env_t * env); + + /** + *@return qname of this element + * the returned qname should not be externaly freed + * when om_element struct is freed qname is also + * freed + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param ele_node pointer to this element node + * + * @returns axutil_qname_t struct , NULL on failure + */ + AXIS2_EXTERN axutil_qname_t *AXIS2_CALL + axiom_element_get_qname( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * ele_node); + + /** + * returns a list of children iterator + * returned iterator is freed when om_element struct + * is freed + * iterators reset function must be called by user + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param element_node pointer to this element node + * + */ + AXIS2_EXTERN axiom_children_iterator_t *AXIS2_CALL + axiom_element_get_children( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * element_node); + + /** + * returns a list of children iterator with qname + * returned iterator is freed when om element struct + * is freed + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param element_node pointer to this element node + * @returns children qname iterator struct + */ + + AXIS2_EXTERN axiom_children_qname_iterator_t *AXIS2_CALL + axiom_element_get_children_with_qname( + axiom_element_t * om_element, + const axutil_env_t * env, + axutil_qname_t * element_qname, + axiom_node_t * element_node); + + /** + * Returns the om_element corresponding to element_qname + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param element_qname qname of the element + * @param om_node pointer to this element node + * @param element_node + * @param child_node + * @returns children qname iterator struct + */ + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_element_get_first_child_with_qname( + axiom_element_t * om_element, + const axutil_env_t * env, + axutil_qname_t * element_qname, + axiom_node_t * element_node, + axiom_node_t ** child_node); + + /** + * removes an attribute from the element attribute list + * user must free this attribute, element free function does not free + * attributes that are not is it's attribute list + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param om_attribute attribute to be removed + * @return AXIS2_SUCCESS if attribute was found and removed, else + * AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_element_remove_attribute( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_attribute_t * om_attribute); + + /** + * Sets the text of the given element. + * caution - This method will wipe out all the text elements (and hence any + * mixed content) before setting the text + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param text text to set. + * @param element_node node of element. + * @return AXIS2_SUCCESS if attribute was found and removed, else + * AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_element_set_text( + axiom_element_t * om_element, + const axutil_env_t * env, + const axis2_char_t * text, + axiom_node_t * element_node); + + /** + * Select all the text children and concat them to a single string. The string + * returned by this method call will be free by axiom when this method is called again. + * So it is recomended to have a copy of the return value if this method is going to + * be called more that once and the return values of the earlier calls are important. + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param element node , the container node of this om element + * @return the contanated text of all text childrens text values + * return null if no text children is avilable or on error + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_element_get_text( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * element_node); + + /** + * returns the first child om element of this om element node + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param om_node pointer to this element node + * @return om_element if one is availble otherwise return NULL + */ + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_element_get_first_element( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * element_node, + axiom_node_t ** first_element_node); + + /** + * returns the serilized text of this element and its children + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param element_node the container node this on element is contained + * @return a char array of xml , returns NULL on error + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_element_to_string( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * element_node); + + /** + * returns an iterator with child elements of type AXIOM_ELEMENT + * iterator is freed when om_element node is freed + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param element_node + * @returns axiom_child_element_iterator_t , NULL on error + */ + AXIS2_EXTERN axiom_child_element_iterator_t *AXIS2_CALL + axiom_element_get_child_elements( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * element_node); + + /** + * builds this om_element_node completely, This is only possible + * if the om_stax_builder is associated with the om_element_node, + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param om_node pointer to this element node + * @param element_node corresponding om element node of this om element + * struct + * @returns AXIS2_SUCCESS if this element node was successfully completed, + * otherwise returns AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_element_build( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * element_node); + + /** + * retrieves the default namespace of this element , if available, + * @param om_element pointer to om element + * @param env axutil_environment MUST Not be NULL + * @param element_node corresponding om element node of this om element + * @returns pointer to default namespace if availale , NULL otherwise + */ + AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL + axiom_element_get_default_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * element_node); + + /** + * declared a default namespace explicitly + * @param om_element pointer to om element + * @param env environment MUST not be NULL + * @param uri namespace uri of the default namespace + * @returns the declared namespace + */ + AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL + axiom_element_declare_default_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + axis2_char_t * uri); + + /** + * checks for the namespace in the context of this element + * with the given prefix + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param om_element_node pointer to this element node + * @returns pointer to relevent namespace + */ + AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL + axiom_element_find_namespace_uri( + axiom_element_t * om_element, + const axutil_env_t * env, + const axis2_char_t * prefix, + axiom_node_t * element_node); + + /** + *This will not search the namespace in the scope nor will + * declare in the current element, as in set_namespace. This will + * just assign the given namespace to the element. + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param om_node pointer to this element node + * @param om_ns pointer to namespace to be set + * @returns + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_element_set_namespace_with_no_find_in_current_scope( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_namespace_t * om_ns); + + /** + * Extract attributes , returns a clones hash table of attributes, + * if attributes are associated with a namespace it is also cloned + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param om_node pointer to this element node + * + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axiom_element_extract_attributes( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * ele_node); + + /** + * Returns the attribute value as a string for the given element + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param attr_name the attribute name + * + * @return the attribute value as a string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_element_get_attribute_value_by_name( + axiom_element_t * om_ele, + const axutil_env_t * env, + axis2_char_t * attr_name); + + /** + * Create an OM Element and an OM node from given string params + * @param env environment MUST not be NULL + * @param parent pointer to this parent element node + * @param localname the locanmae of the element + * @param ns the namespace of the element + * @param node the reference ot the created node + * @return + */ + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_element_create_str( + const axutil_env_t * env, + axiom_node_t * parent, + axutil_string_t * localname, + axiom_namespace_t * ns, + axiom_node_t ** node); + + /** + * Returns the Local name of the element + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param om_node pointer to this element node + * + * @return the Local name of the element + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + axiom_element_get_localname_str( + axiom_element_t * om_element, + const axutil_env_t * env); + + /** + * Set the Local name of the element + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param localname the Local name of the element + * + * @return + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_element_set_localname_str( + axiom_element_t * om_element, + const axutil_env_t * env, + axutil_string_t * localname); + + /** + * Return whether the element is empty or not + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * + * @return AXIS2_TRUE if empty AXIS2_FALSE if not empty + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_element_get_is_empty( + axiom_element_t * om_element, + const axutil_env_t * env); + + /** + * Set whether the element is empty or not + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param is_empty AXIS2_TRUE if empty AXIS2_FALSE if not empty + * + * @return VOID + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_element_set_is_empty( + axiom_element_t * om_element, + const axutil_env_t * env, + axis2_bool_t is_empty); + + /** + * Collect all the namespaces with distinct prefixes in + * the parents of the given element. Effectively this + * is the set of namespaces declared above this element + * that are inscope at this element and might be used + * by it or its children. + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param om_node pointer to this element node + * @returns pointer to hash of relevent namespaces + */ + AXIS2_EXTERN axutil_hash_t * AXIS2_CALL + axiom_element_gather_parent_namespaces( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * om_node); + + /** + * If the provided namespace used by the provided element + * is one of the namespaces from the parent of the root + * root element, redeclares that namespace at the root element + * and removes it from the hash of parent namespaces + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param om_node pointer to this element node + * @param ns pointer to namespace to redeclare + * @param root_element pointer to the subtree root element node + * @param inscope_namespaces pointer to hash of parent namespaces + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_element_use_parent_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * om_node, + axiom_namespace_t *ns, + axiom_element_t * root_element, + axutil_hash_t *inscope_namespaces); + + /** + * Examines the subtree beginning at the provided element + * For each element or attribute, if it refers to a namespace + * declared in a parent of the subtree root element, redeclares + * that namespace at the level of the subtree root and removes + * it from the set of parent namespaces in scope and not yet + * declared + * @param om_element pointer to om_element + * @param env environment MUST not be NULL + * @param om_node pointer to this element node + * + * @param root_element pointer to the subtree root element node + * @param inscope_namespaces pointer to hash of parent namespaces + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_element_redeclare_parent_namespaces( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * om_node, + axiom_element_t * root_element, + axutil_hash_t *inscope_namespaces); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_ELEMENT_H */ diff --git a/axiom/include/axiom_mime_const.h b/axiom/include/axiom_mime_const.h new file mode 100644 index 0000000..e75fbd7 --- /dev/null +++ b/axiom/include/axiom_mime_const.h @@ -0,0 +1,56 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_MIME_CONST_H +#define AXIOM_MIME_CONST_H + +/** +* @file axiom.h +* @brief includes all headers in MIME_CONST +*/ +#ifdef __cplusplus +extern "C" +{ +#endif + +#define AXIOM_MIME_BOUNDARY_BYTE 45 +#define AXIOM_MIME_CRLF_BYTE 13 + +#define AXIOM_MIME_TYPE_XOP_XML "application/xop+xml" +#define AXIOM_MIME_TYPE_MULTIPART_RELATED "multipart/related" +#define AXIOM_MIME_TYPE_OCTET_STREAM "application/octet-stream" + +#define AXIOM_MIME_HEADER_FIELD_CHARSET "charset" +#define AXIOM_MIME_HEADER_FIELD_TYPE "type" +#define AXIOM_MIME_HEADER_FIELD_BOUNDARY "boundary" +#define AXIOM_MIME_HEADER_FIELD_START_INFO "start-info" +#define AXIOM_MIME_HEADER_FIELD_START "start" + +#define AXIOM_MIME_HEADER_CONTENT_TYPE "content-type" +#define AXIOM_MIME_HEADER_CONTENT_TRANSFER_ENCODING "content-transfer-encoding" +#define AXIOM_MIME_HEADER_CONTENT_ID "content-id" + +#define AXIOM_MIME_CONTENT_TRANSFER_ENCODING_BINARY "binary" + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_MIME_CONST_H */ diff --git a/axiom/include/axiom_mime_parser.h b/axiom/include/axiom_mime_parser.h new file mode 100644 index 0000000..b7f4f00 --- /dev/null +++ b/axiom/include/axiom_mime_parser.h @@ -0,0 +1,220 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_MIME_PARSER_H +#define AXIOM_MIME_PARSER_H + +/** + * @file axiom_mime_parser.h + * @brief axis2 mime_parser interface + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define AXIOM_MIME_PARSER_BUFFER_SIZE (1024 * 1024/2) +#define AXIOM_MIME_PARSER_MAX_BUFFERS 1000 + +#define AXIOM_MIME_PARSER_END_OF_MIME_MAX_COUNT 100 + + + typedef struct axiom_mime_parser axiom_mime_parser_t; + + /** @defgroup axiom_mime_parser Flow + * @ingroup axiom_mime_parser + * @{ + */ + + /** + * Parse and returns mime parts as a hash map + * @param mime_parser the pointer for the mime parser struct + * @param env Environment. MUST NOT be NULL. + * @param callback_ctx the callback context + * @param mime_boundary the MIME boundary + * @return mime parts as a hash map + */ + /*AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axiom_mime_parser_parse( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK, + void *callback_ctx, + axis2_char_t * mime_boundary);*/ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_mime_parser_parse_for_soap( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK callback, + void *callback_ctx, + axis2_char_t * mime_boundary); + + + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axiom_mime_parser_parse_for_attachments( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK callback, + void *callback_ctx, + axis2_char_t * mime_boundary, + void *user_param); + + + /** + * Returns mime parts as a hash map + * @param mime_parser the pointer for the mime parser struct + * @param env Environment. MUST NOT be NULL. + * @return mime parts as a hash map + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axiom_mime_parser_get_mime_parts_map( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env); + + /** + * Deallocate memory. Free the mime parser struct + * @param mime_parser the pointer for the mime parser struct + * @param env Environment. MUST NOT be NULL. + * @return VOID + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_mime_parser_free( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env); + + /** + * Returns the length of the SOAP Body + * @param mime_parser the pointer for the mime parser struct + * @param env Environment. MUST NOT be NULL. + * @return the length of the SOAP Body + */ + AXIS2_EXTERN size_t AXIS2_CALL + axiom_mime_parser_get_soap_body_len( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env); + + /** + * Get the SOAP Body as a string + * @param mime_parser the pointer for the mime parser struct + * @param env Environment. MUST NOT be NULL. + * @return the SOAP Body as a string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_mime_parser_get_soap_body_str( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env); + + /** + * Create a mime parser struct + * @param env Environment. MUST NOT be NULL. + * @return created mime parser + */ + AXIS2_EXTERN axiom_mime_parser_t *AXIS2_CALL + axiom_mime_parser_create( + const axutil_env_t * env); + + /** + * Set the size of the chink buffer + * @param mime_parser the pointer for the mime parser struct + * @param env Environment. MUST NOT be NULL. + * @param size the size of the chink buffer + * @return mime parts as a hash map + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_mime_parser_set_buffer_size( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env, + int size); + + /** + * Set maximum number of chunk buffers + * @param mime_parser the pointer for the mime parser struct + * @param env Environment. MUST NOT be NULL. + * @param num maximum number of chunk buffers + * @return VOID + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_mime_parser_set_max_buffers( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env, + int num); + + + /** + * Set attachment dir specified in the axis2.xml + * @param mime_parser the pointer for the mime parser struct + * @param env Environment. MUST NOT be NULL. + * @param attachment_dir is string containg the directory path + * @return VOID + */ + + AXIS2_EXTERN void AXIS2_CALL + axiom_mime_parser_set_attachment_dir( + axiom_mime_parser_t *mime_parser, + const axutil_env_t *env, + axis2_char_t *attachment_dir); + + + /** + * Set Caching callback name specified in the axis2.xml + * @param mime_parser the pointer for the mime parser struct + * @param env Environment. MUST NOT be NULL. + * @param callback_name is string containg the dll path + * @return VOID + */ + + + AXIS2_EXTERN void AXIS2_CALL + axiom_mime_parser_set_caching_callback_name( + axiom_mime_parser_t *mime_parser, + const axutil_env_t *env, + axis2_char_t *callback_name); + + + AXIS2_EXTERN void AXIS2_CALL + axiom_mime_parser_set_mime_boundary( + axiom_mime_parser_t *mime_parser, + const axutil_env_t *env, + axis2_char_t *mime_boundary); + + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_mime_parser_get_mime_boundary( + axiom_mime_parser_t *mime_parser, + const axutil_env_t *env); + + + + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIOM_MIME_PARSER_H */ diff --git a/axiom/include/axiom_mime_part.h b/axiom/include/axiom_mime_part.h new file mode 100644 index 0000000..e4cfc36 --- /dev/null +++ b/axiom/include/axiom_mime_part.h @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_MIME_PART_H +#define AXIOM_MIME_PART_H + +/** + * @file axiom_mime_part.h + * @brief axis2 mime_part interface + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_mime_part_t axiom_mime_part_t; + + + /* An enum to keep different mime_part types */ + + typedef enum axiom_mime_part_type_t + { + + /** Char buffer */ + AXIOM_MIME_PART_BUFFER = 0, + + /* A file */ + AXIOM_MIME_PART_FILE, + + /* User specified callback */ + AXIOM_MIME_PART_CALLBACK, + + /* unknown type*/ + AXIOM_MIME_PART_UNKNOWN + + } axiom_mime_part_type_t; + + struct axiom_mime_part_t + { + /* This is when the mime part is a buffer. + * This will be null when the part is a file */ + axis2_byte_t *part; + + /* This is to keep file name when the part is a file + * NULL when the part is a buffer */ + axis2_char_t *file_name; + + /* Size of the part. In the case of buffer this is + * the buffer size and in the case of file this is + the file size */ + size_t part_size; + + /* This is one from the above defined enum */ + axiom_mime_part_type_t type; + + /* This is required in the case of the callback */ + void *user_param; + }; + + + + + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axiom_mime_part_get_content_type_for_mime( + const axutil_env_t * env, + axis2_char_t * boundary, + axis2_char_t * content_id, + axis2_char_t * char_set_encoding, + const axis2_char_t * soap_content_type); + + + /** + * Creates mime_part struct + * @return pointer to newly created mime_part + */ + + AXIS2_EXTERN axiom_mime_part_t *AXIS2_CALL + axiom_mime_part_create( + const axutil_env_t *env); + + /* This method will create the output part + * list.*/ + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axiom_mime_part_create_part_list( + const axutil_env_t *env, + axis2_char_t *soap_body, + axutil_array_list_t *binary_node_list, + axis2_char_t *boundary, + axis2_char_t *content_id, + axis2_char_t *char_set_encoding, + const axis2_char_t *soap_content_type); + + + AXIS2_EXTERN void AXIS2_CALL + axiom_mime_part_free( + axiom_mime_part_t *mime_part, + const axutil_env_t *env); + + + + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIOM_MIME_PART_H */ diff --git a/axiom/include/axiom_mtom_caching_callback.h b/axiom/include/axiom_mtom_caching_callback.h new file mode 100644 index 0000000..e432b2f --- /dev/null +++ b/axiom/include/axiom_mtom_caching_callback.h @@ -0,0 +1,114 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIOM_MTOM_CACHING_CALLBACK_H +#define AXIOM_MTOM_CACHING_CALLBACK_H + +/** + * @file axiom_mtom_caching_callback.h + * @brief Caching callback for mime parser + */ + +/** +* @defgroup caching_callback +* @ingroup axiom +* @{ +*/ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * Type name for struct axiom_mtom_caching_callback_ops + */ + typedef struct axiom_mtom_caching_callback_ops axiom_mtom_caching_callback_ops_t; + + /** + * Type name for struct axiom_mtom_caching_callback + */ + typedef struct axiom_mtom_caching_callback axiom_mtom_caching_callback_t; + + + /** + * init_handler will init the caching storage + */ + + /** + * cache will write the data to the storage + */ + + /** + * close_handler will close the storage + */ + + struct axiom_mtom_caching_callback_ops + { + void* (AXIS2_CALL* + init_handler)(axiom_mtom_caching_callback_t *mtom_caching_callback, + const axutil_env_t* env, + axis2_char_t *key); + + axis2_status_t (AXIS2_CALL* + cache)(axiom_mtom_caching_callback_t *mtom_caching_callback, + const axutil_env_t* env, + axis2_char_t *data, + int length, + void *handler); + + axis2_status_t (AXIS2_CALL* + close_handler)(axiom_mtom_caching_callback_t *mtom_caching_callback, + const axutil_env_t* env, + void *handler); + + axis2_status_t (AXIS2_CALL* + free)(axiom_mtom_caching_callback_t *mtom_caching_callback, + const axutil_env_t* env); + }; + + struct axiom_mtom_caching_callback + { + axiom_mtom_caching_callback_ops_t *ops; + axutil_param_t *param; + void *user_param; + }; + + /*************************** Function macros **********************************/ +#define AXIOM_MTOM_CACHING_CALLBACK_INIT_HANDLER(mtom_caching_callback, env, key) \ + ((mtom_caching_callback)->ops->init_handler(mtom_caching_callback, env, key)) + +#define AXIOM_MTOM_CACHING_CALLBACK_CACHE(mtom_caching_callback, env, data, length, handler) \ + ((mtom_caching_callback)->ops->cache(mtom_caching_callback, env, data, length, handler)) + +#define AXIOM_MTOM_CACHING_CALLBACK_CLOSE_HANDLER(mtom_caching_callback, env, handler) \ + ((mtom_caching_callback)->ops->close_handler(mtom_caching_callback, env, handler)) + +#define AXIOM_MTOM_CACHING_CALLBACK_FREE(mtom_caching_callback, env) \ + ((mtom_caching_callback)->ops->free(mtom_caching_callback, env)) + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_MTOM_CACHING_CALLBACK */ + + diff --git a/axiom/include/axiom_mtom_sending_callback.h b/axiom/include/axiom_mtom_sending_callback.h new file mode 100644 index 0000000..ce2587e --- /dev/null +++ b/axiom/include/axiom_mtom_sending_callback.h @@ -0,0 +1,112 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIOM_MTOM_SENDING_CALLBACK_H +#define AXIOM_MTOM_SENDING_CALLBACK_H + +/** + * @file axiom_mtom_sending_callback.h + * @brief sending callback for attachment sending + */ + +/** +* @defgroup mtom_sending_callback +* @ingroup axiom +* @{ +*/ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * Type name for struct axiom_mtom_sending_callback_ops + */ + typedef struct axiom_mtom_sending_callback_ops axiom_mtom_sending_callback_ops_t; + + /** + * Type name for struct axiom_mtom_sending_callback + */ + typedef struct axiom_mtom_sending_callback axiom_mtom_sending_callback_t; + + + /** + * init_handler will init the attachment storage + */ + + /** + * load will read the attachemnt by part from the storage + */ + + /** + * close_handler will close the storage + */ + + struct axiom_mtom_sending_callback_ops + { + void* (AXIS2_CALL* + init_handler)(axiom_mtom_sending_callback_t *mtom_sending_callback, + const axutil_env_t* env, + void *user_param); + + int (AXIS2_CALL* + load_data)(axiom_mtom_sending_callback_t *mtom_sending_callback, + const axutil_env_t* env, + void *handler, + axis2_char_t **buffer); + + axis2_status_t (AXIS2_CALL* + close_handler)(axiom_mtom_sending_callback_t *mtom_sending_callback, + const axutil_env_t* env, + void *handler); + + axis2_status_t (AXIS2_CALL* + free)(axiom_mtom_sending_callback_t *mtom_sending_callback, + const axutil_env_t* env); + }; + + struct axiom_mtom_sending_callback + { + axiom_mtom_sending_callback_ops_t *ops; + axutil_param_t *param; + }; + + /*************************** Function macros **********************************/ +#define AXIOM_MTOM_SENDING_CALLBACK_INIT_HANDLER(mtom_sending_callback, env, user_param) \ + ((mtom_sending_callback)->ops->init_handler(mtom_sending_callback, env, user_param)) + +#define AXIOM_MTOM_SENDING_CALLBACK_LOAD_DATA(mtom_sending_callback, env, handler, buffer) \ + ((mtom_sending_callback)->ops->load_data(mtom_sending_callback, env, handler, buffer)) + +#define AXIOM_MTOM_SENDING_CALLBACK_CLOSE_HANDLER(mtom_sending_callback, env, handler) \ + ((mtom_sending_callback)->ops->close_handler(mtom_sending_callback, env, handler)) + +#define AXIOM_MTOM_SENDING_CALLBACK_FREE(mtom_sending_callback, env) \ + ((mtom_sending_callback)->ops->free(mtom_sending_callback, env)) + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_MTOM_SENDING_CALLBACK */ + + diff --git a/axiom/include/axiom_namespace.h b/axiom/include/axiom_namespace.h new file mode 100644 index 0000000..73ccf17 --- /dev/null +++ b/axiom/include/axiom_namespace.h @@ -0,0 +1,201 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_NAMESPACE_H +#define AXIOM_NAMESPACE_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_namespace namespace + * @ingroup axiom_om + * @{ + */ + + typedef struct axiom_namespace axiom_namespace_t; + + /** + * Creates a namespace struct + * @param uri namespace URI + * @param prefix namespace prefix + * @return a pointer to newly created namespace struct + */ + AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL + axiom_namespace_create( + const axutil_env_t * env, + const axis2_char_t * uri, + const axis2_char_t * prefix); + + /** + * Frees given AXIOM namespcae + * @param om_namespace namespace to be freed. + * @param env Environment. MUST NOT be NULL. + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE. + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_namespace_free( + struct axiom_namespace *om_namespace, + const axutil_env_t * env); + + /** + * Compares two namepsaces + * @param om_namespace first namespase to be compared + * @param env Environment. MUST NOT be NULL. + * @param om_namespace1 second namespace to be compared + * @return AXIS2_TRUE if the two namespaces are equal,AXIS2_FALSE otherwise + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_namespace_equals( + struct axiom_namespace *om_namespace, + const axutil_env_t * env, + struct axiom_namespace *om_namespace1); + + /** + * Serializes given namespace + * @param om_namespace namespace to be serialized. + * @param env Environment. MUST NOT be NULL. + * @param om_output AXIOM output handler to be used in serializing + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_namespace_serialize( + struct axiom_namespace *om_namespace, + const axutil_env_t * env, + axiom_output_t * om_output); + + /** + * @param om_namespace pointer to om_namespace struct + * @param env environment , MUST NOT be NULL. + * @returns namespace uri , NULL on error + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_namespace_get_uri( + struct axiom_namespace *om_namespace, + const axutil_env_t * env); + + /** + * @param om_namespace pointer to om namespace struct + * @param env environment, MUST NOT be NULL + * @return prefix , NULL on error + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_namespace_get_prefix( + struct axiom_namespace *om_namespace, + const axutil_env_t * env); + + /** + * Clones an om_namespace struct + * @param om_namespace pointer to namespace struct + * @param env Environment. MUST NOT be NULL + * @returns axiom_namespace on success , NULL on error + */ + AXIS2_EXTERN struct axiom_namespace *AXIS2_CALL + axiom_namespace_clone( + struct axiom_namespace *om_namespace, + const axutil_env_t * env); + + /** + * to string , returns the string by combining namespace_uri, + * and prefix seperated by a '|' character + * @param om_namespace + * @param env Environment. MUST NOT be NULL + * @returns pointer to string , This is a property of namespace, + * should not be freed by user + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_namespace_to_string( + struct axiom_namespace *om_namespace, + const axutil_env_t * env); + + /** + * Incerament the reference value. The struct will be freed when the ref value is zero + * @param om_namespace pointer to the axiom namespace struct + * @param env Environment. MUST NOT be NULL + * + * @return AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_namespace_increment_ref( + struct axiom_namespace *om_namespace, + const axutil_env_t * env); + + /** + * Create an OM namespace from a URI and a Prefix + * @param om_namespace pointer to the axiom namespace struct + * @param env Environment. MUST NOT be NULL + * + * @return created OM namespace + */ + AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL + axiom_namespace_create_str( + const axutil_env_t * env, + axutil_string_t * uri, + axutil_string_t * prefix); + + /** + * Set the uri string + * @param om_namespace pointer to the axiom namespace struct + * @param env Environment. MUST NOT be NULL + * + * @return AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_namespace_set_uri_str( + axiom_namespace_t * om_namespace, + const axutil_env_t * env, + axutil_string_t * uri); + + /** + * Get the uri as a string + * @param om_namespace pointer to the axiom namespace struct + * @param env Environment. MUST NOT be NULL + * + * @return the uri as a string + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + axiom_namespace_get_uri_str( + axiom_namespace_t * om_namespace, + const axutil_env_t * env); + + /** + * Get the prefix as a string + * @param om_namespace pointer to the axiom namespace struct + * @param env Environment. MUST NOT be NULL + * + * @return the prefix as a string + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + axiom_namespace_get_prefix_str( + axiom_namespace_t * om_namespace, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_NAMESPACE */ diff --git a/axiom/include/axiom_navigator.h b/axiom/include/axiom_navigator.h new file mode 100644 index 0000000..6ff8b53 --- /dev/null +++ b/axiom/include/axiom_navigator.h @@ -0,0 +1,121 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_NAVIGATOR_H +#define AXIOM_NAVIGATOR_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_navigator navigator + * @ingroup axiom_om + * @{ + */ + + typedef struct axiom_navigator axiom_navigator_t; + + /** Creates an axiom_navigator + * @param env environment MUST not be NULL + * @param node a pointer to axiom_node_t struct + * which is to be navigated + * @returns a pointer to axiom_navigator_t struct + * or returns NULL on error + */ + AXIS2_EXTERN axiom_navigator_t *AXIS2_CALL + axiom_navigator_create( + const axutil_env_t * env, + axiom_node_t * node); + + /** + * free function , free the axiom_navigator struct + * @param om_navigator axiom_navigator_struct + * @param env environment MUST not be NULL + * @returns AXIS2_SUCCESS + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_navigator_free( + axiom_navigator_t * om_navigator, + const axutil_env_t * env); + + /** + * Returns the navigable status + * @param om_navigator axiom_navigator_struct + * @param env environment MUST not be NULL + * @returns AXIS2_TRUE if the om is navigable + * otherwise returns AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_navigator_is_navigable( + axiom_navigator_t * om_navigator, + const axutil_env_t * env); + + /** + * Returns the build status of this node + * if the node is completly build returns AXIS2_TRUE + * otherwise AXIS2_FALSE + * @param om_navigator axiom_navigator struct + * @param env environment MUST not be NULL + * @return AXIS2_TRUE if this node is completly built + * otherwise return AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_navigator_is_completed( + axiom_navigator_t * om_navigator, + const axutil_env_t * env); + + /** + * gets the next node + * @param om_navigator om_navigaot struct + * @param env environment MUST not be NULL + * @returns axiom_node_t pointer in the sequence of preorder travasal + * however the an element node is treated slightly differently + * Once the om_element type om node is passed it returns the same om_node + * pointer in the next , returns NULL on error or if there is no more nodes + */ + + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_navigator_next( + axiom_navigator_t * om_navigator, + const axutil_env_t * env); + + /** + * method visited + * @param om_navigator om_navigaot struct + * @param env environment MUST not be NULL + * @returns AXIS2_TRUE if this node is alrady visited + * otherwise AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_navigator_visited( + axiom_navigator_t * om_navigator, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_NAVIGATOR_H */ diff --git a/axiom/include/axiom_node.h b/axiom/include/axiom_node.h new file mode 100644 index 0000000..dd5c320 --- /dev/null +++ b/axiom/include/axiom_node.h @@ -0,0 +1,379 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_NODE_H +#define AXIOM_NODE_H + +/** + * @defgroup axiom AXIOM project + * @{ + * @} + */ + +/** + * @defgroup axiom_om AXIOM + * @ingroup axiom + * @{ + * @} + */ + +/** + * @file axiom_node.h + * @brief defines axiom_node struct + */ +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_node axiom_node_t; + struct axiom_output; + struct axiom_document; + struct axiom_stax_builder; + + /** + * @defgroup axiom_node node + * @ingroup axiom_om + * @{ + */ + + /** + * @brief AXIOM types + */ + typedef enum axiom_types_t + { + + /** Invalid node type */ + AXIOM_INVALID = 0, + + /** AXIOM document type */ + AXIOM_DOCUMENT, + + /** AXIOM element type */ + AXIOM_ELEMENT, + + /** AXIOM doctype type */ + AXIOM_DOCTYPE, + + /** AXIOM comment type */ + AXIOM_COMMENT, + + /** AXIOM attribute type */ + AXIOM_ATTRIBUTE, + + /** AXIOM namespace type */ + AXIOM_NAMESPACE, + + /** AXIOM processing instruction type */ + AXIOM_PROCESSING_INSTRUCTION, + + /** AXIOM text type */ + AXIOM_TEXT, + + /** AXIOM data source, represent a serialized XML fragment with a stream */ + AXIOM_DATA_SOURCE + } axiom_types_t; + + /** + * Creates a node struct. + * @param env Environment. MUST NOT be NULL, . + * @return a pointer to newly created node struct. NULL on error. + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_node_create( + const axutil_env_t * env); + + /** + * Creates a node struct from a character buffer. + * @param env Environment. MUST NOT be NULL, . + * @param buffer string. buffer to make the node + * @return a pointer to newly created node struct. NULL on error. + */ + AXIS2_EXTERN axiom_node_t* AXIS2_CALL + axiom_node_create_from_buffer( + const axutil_env_t * env, + axis2_char_t *buffer); + + + /** + * Frees an om node and all of its children. Please note that the attached + * data_element will also be freed along with the node. If the node is + * still attached to a parent, it will be detached first, then freed. + * @param om_node node to be freed. + * @param env Environment. MUST NOT be NULL, . + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_node_free_tree( + axiom_node_t * om_node, + const axutil_env_t * env); + + /** + * Adds given node as child to parent. child should not have a parent + * if child has a parent it will be detached from existing parent + * @param om_node parent node. cannot be NULL. + * @param env Environment. MUST NOT be NULL, . + * @param child child node. + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_node_add_child( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_node_t * child); + + /** + * Detaches given node from the parent and reset the links + * @param om_node node to be detached, cannot be NULL. + * @param env Environment. MUST NOT be NULL, . + * @return a pointer to detached node,returns NULL on error with error + * code set to environment's error struct + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_node_detach( + axiom_node_t * om_node, + const axutil_env_t * env); + + /** + * Inserts a sibling node after the given node + * @param om_node node to whom the sibling to be inserted. , cannot be NULL. + * @param env Environment. MUST NOT be NULL, . + * @param node_to_insert the node to be inserted. , cannot be NULL. + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_node_insert_sibling_after( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_node_t * node_to_insert); + + /** + * Inserts a sibling node before the given current node + * @param om_node node to whom the sibling to be inserted. , cannot be NULL. + * @param env Environment. MUST NOT be NULL, . + * @param node_to_insert the node to be inserted. , cannot be NULL. + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_node_insert_sibling_before( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_node_t * node_to_insert); + + /** + * Serializes the given node. This op makes the node go + * through its children and serialize them in order. + * @param om_node node to be serialized. cannot be NULL. + * @param env Environment .MUST NOT be NULL. + * @param om_output AXIOM output handler to be used in serializing + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_node_serialize( + axiom_node_t * om_node, + const axutil_env_t * env, + struct axiom_output *om_output); + + /** get parent of om_node + *@om_node node + *@param env environment + *@return pointer to parent node of om_node, return NULL if no parent exists or + * when an error occured. + */ + + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_node_get_parent( + axiom_node_t * om_node, + const axutil_env_t * env); + + /** + * get the first child of om_node + * @param om_node node + * @param env environment must not be null. + * @returns pointer to first child node , NULL is returned on error with + * error code set in environments error + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_node_get_first_child( + axiom_node_t * om_node, + const axutil_env_t * env); + + /**get the first AXIOM_ELEMENT in om_node + * @param om_node node + * @param env environment must not be null + * @returns pointer to first child om element, NULL is returned on error + * with error code set in environments error. + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_node_get_first_element( + axiom_node_t * om_node, + const axutil_env_t * env); + + /** + * get the last child + * @param om_node node + * @param env environment, MUST NOT be NULL + * @return pointer to last child of this node , return NULL on error. + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_node_get_last_child( + axiom_node_t * om_node, + const axutil_env_t * env); + + /** + * get the previous sibling + * @param om_node om_node struct + * @param env environment , must node be null + * @returns a pointer to previous sibling , NULL if a previous sibling does not exits + * (happens when this node is the first child of a node ) + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_node_get_previous_sibling( + axiom_node_t * om_node, + const axutil_env_t * env); + + /** + * get next sibling + * @param om_node om_node struct + * @param env environment, MUST NOT be NULL. + * @return next sibling of this node. + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_node_get_next_sibling( + axiom_node_t * om_node, + const axutil_env_t * env); + + /** + * get the node type of this element + * Node type can be one of AXIOM_ELEMENT, AXIOM_COMMENT, AXIOM_TEXT + * AXIOM_DOCTYPE, AXIOM_PROCESSING_INSTRUCTION + * @param om_node node of which node type is required + * @param env environment + * @return node type + */ + AXIS2_EXTERN axiom_types_t AXIS2_CALL + axiom_node_get_node_type( + axiom_node_t * om_node, + const axutil_env_t * env); + + /** + * get the struct contained in the node + * IF the node is on type AXIOM_ELEMENT , this method returns + * a pointer to axiom_element_t struct contained + * @param om_node node + * @param env environment, MUST NOT be NULL. + * @returns pointer to struct contained in the node + * returns NULL if no struct is contained + */ + AXIS2_EXTERN void *AXIS2_CALL + axiom_node_get_data_element( + axiom_node_t * om_node, + const axutil_env_t * env); + + /** + * Indicates whether parser has parsed this information item completely or not + * @param om_node om_node struct + * @param env environment, MUST NOT be NULL. + * @returns AXIS2_TRUE if node is completly build, + * AXIS2_FALSE if node is not completed + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_node_is_complete( + axiom_node_t * om_node, + const axutil_env_t * env); + + /** + * returns the associated document, + * only valid if built using builder and for a node of type + * AXIOM_ELEMENT + * returns null if no document is available + * @param om_node + * @param env environment, MUST NOT be NULL. + * + * @return the OM document of the node + */ + AXIS2_EXTERN struct axiom_document *AXIS2_CALL + axiom_node_get_document( + axiom_node_t * om_node, + const axutil_env_t * env); + + /** + * + * @param om_node pointer to the OM node struct + * @param env environment, MUST NOT be NULL + * + * @return the string representation of the node + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_node_to_string( + axiom_node_t * om_node, + const axutil_env_t * env); + + /** + * + * @param om_node pointer to the OM node struct + * @param env environment, MUST NOT be NULL + * @param om_output the serialized output will be placed here + * + * @return AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_node_serialize_sub_tree( + axiom_node_t * om_node, + const axutil_env_t * env, + struct axiom_output *om_output); + + /** + * + * @param om_node pointer to the OM node struct + * @param env environment, MUST NOT be NULL + * + * @return the tree as a string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_node_sub_tree_to_string( + axiom_node_t * om_node, + const axutil_env_t * env); + + /** + * Convert the node to string, treating the binary contents, if any, + * as non-optimized content. + * @param om_node pointer to the OM node struct + * @param env environment, MUST NOT be NULL + * + * @return the none optimized string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_node_to_string_non_optimized( + axiom_node_t * om_node, + const axutil_env_t * env); + + AXIS2_EXTERN struct axiom_stax_builder *AXIS2_CALL + axiom_node_get_builder( + axiom_node_t * om_node, + const axutil_env_t * env); + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_NODE_H */ diff --git a/axiom/include/axiom_output.h b/axiom/include/axiom_output.h new file mode 100644 index 0000000..18b524b --- /dev/null +++ b/axiom/include/axiom_output.h @@ -0,0 +1,254 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_OUTPUT_H +#define AXIOM_OUTPUT_H + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_output output + * @ingroup axiom_om + * @{ + */ + + /** + * \brief output struct + * The XML writer interface struct of om + */ + typedef struct axiom_output axiom_output_t; + struct axiom_text; + + /** + * Creates AXIOM output struct + * @param env Environment. MUST NOT be NULL, . + * @param xml_writer XML writer. OM output takes + * ownership of the xml_writer. + * @return a pointer to newly created output struct. + */ + AXIS2_EXTERN axiom_output_t *AXIS2_CALL + axiom_output_create( + const axutil_env_t * env, + axiom_xml_writer_t * xml_writer); + + /** + * Performs xml writing. + * Accepts variable number of args depending on the on AXIOM type to be serialized + * @param om_output Output struct to be used + * @param env Environment. MUST NOT be NULL, + * @param type one of the AXIOM types + * @param no_of_args number of arguments passed in the variable parameter list + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_output_write( + axiom_output_t * om_output, + const axutil_env_t * env, + axiom_types_t type, + int no_of_args, + ...); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_output_write_optimized( + axiom_output_t * om_output, + const axutil_env_t * env, + struct axiom_text *om_text); + + /** + * Free om_output + * @param om_output om_output struct + * @param env environment + * @return status code AXIS2_SUCCESS on success, + * AXIS2_FAILURE otherwise + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_output_free( + axiom_output_t * om_output, + const axutil_env_t * env); + + /** + * If the xml to be serialized is soap 11, this property is set to true + * @param om_output pointer to om_output struct + * @param env environment must not be NULL + * @returns the output soap version + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_output_is_soap11( + axiom_output_t * om_output, + const axutil_env_t * env); + + /** + * @returns true if the ignore_xml_declaration property is true + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axiom_output_is_ignore_xml_declaration( + axiom_output_t * om_output, + const axutil_env_t * env); + + /** + * Sets the ignore_xml_declaration property is true + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_output_set_ignore_xml_declaration( + axiom_output_t * om_output, + const axutil_env_t * env, + axis2_bool_t ignore_xml_dec); + + /** + * Sets the soap11 property to true + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_output_set_soap11( + axiom_output_t * om_output, + const axutil_env_t * env, + axis2_bool_t soap11); + + /** + * Sets xml_version property + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_output_set_xml_version( + axiom_output_t * om_output, + const axutil_env_t * env, + axis2_char_t * xml_version); + + /** + * @returns xml version property + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_output_get_xml_version( + axiom_output_t * om_output, + const axutil_env_t * env); + + /** + * Sets the char set encoding property + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_output_set_char_set_encoding( + axiom_output_t * om_output, + const axutil_env_t * env, + axis2_char_t * char_set_encoding); + + /** + * @returns the char set encoding property + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_output_get_char_set_encoding( + axiom_output_t * om_output, + const axutil_env_t * env); + + /** + * Sets the do optimize property true + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_output_set_do_optimize( + axiom_output_t * om_output, + const axutil_env_t * env, + axis2_bool_t optimize); + + /** + * Returns the xml writer + */ + AXIS2_EXTERN axiom_xml_writer_t *AXIS2_CALL + axiom_output_get_xml_writer( + axiom_output_t * om_output, + const axutil_env_t * env); + + /** + * Returns the content type + * for soap11 'text/xml' etc.. + * @param om_output + * @param env environemnt + * @returns content id + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axiom_output_get_content_type( + axiom_output_t * om_output, + const axutil_env_t * env); + + /** + * Writes the xml versio encoding + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_output_write_xml_version_encoding( + axiom_output_t * om_output, + const axutil_env_t * env); + + /** + * @returns whether the output is to be optimized + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_output_is_optimized( + axiom_output_t * om_output, + const axutil_env_t * env); + + /** + * Returns the next content id + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_output_get_next_content_id( + axiom_output_t * om_output, + const axutil_env_t * env); + + /** + * root content id + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_output_get_root_content_id( + axiom_output_t * om_output, + const axutil_env_t * env); + /** + * + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_output_get_mime_boundry( + axiom_output_t * om_output, + const axutil_env_t * env); + /** + * + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_output_flush( + axiom_output_t * om_output, + const axutil_env_t * env); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axiom_output_get_mime_parts( + axiom_output_t * om_output, + const axutil_env_t * env); + + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_OUTPUT_H */ diff --git a/axiom/include/axiom_processing_instruction.h b/axiom/include/axiom_processing_instruction.h new file mode 100644 index 0000000..24fcdc9 --- /dev/null +++ b/axiom/include/axiom_processing_instruction.h @@ -0,0 +1,136 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_PI_H +#define AXIOM_PI_H + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_processing_instruction pocessing instruction + * @ingroup axiom_om + * @{ + */ + + typedef struct axiom_processing_instruction + axiom_processing_instruction_t; + + /** + * Creates a processing instruction + * @param environment Environment. MUST NOT be NULL. + * @param parent parent of the element node to be created. Optional, can be NULL. + * @param target target of the processing instruction.cannot be NULL. + * @param value value of the processing instruction.cannot be NULL. + * @param node This is an out parameter. cannot be NULL. + * Returns the node corresponding to the comment created. + * Node type will be set to AXIOM_PROCESSING_INSTRUCTION + * @return a pointer tonewly created processing instruction struct + */ + AXIS2_EXTERN axiom_processing_instruction_t *AXIS2_CALL + axiom_processing_instruction_create( + const axutil_env_t * env, + axiom_node_t * parent, + const axis2_char_t * target, + const axis2_char_t * value, + axiom_node_t ** node); + + /** + * Frees an instance of axiom_processing_instruction + * @param om_pi processing instruction to be freed. + * @param env Environment. MUST NOT be NULL, . + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_processing_instruction_free( + struct axiom_processing_instruction *om_pi, + const axutil_env_t * env); + + /** + * Set processing instruction data + * @param om_pi + * @param env Environment. MUST NOT be NULL, . + * @param value + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_processing_instruction_set_value( + struct axiom_processing_instruction *om_pi, + const axutil_env_t * env, + const axis2_char_t * value); + + /** + * Set processing instruction target + * @param om_pi processing_instruction struct + * @param env environment, MUST NOT be NULL. + * @param target + * @return status of the op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_processing_instruction_set_target( + struct axiom_processing_instruction *om_pi, + const axutil_env_t * env, + const axis2_char_t * target); + + /** + * Get PI target + * @param om_pi processing_instruction struct + * @param env Environment. MUST NOT be NULL, . + * @return target text , NULL on error or if target is null + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_processing_instruction_get_target( + struct axiom_processing_instruction *om_pi, + const axutil_env_t * env); + + /** + * Get data part of processing_instruction + * @param om_pi processing instruction + * @param env environment , MUST NOT be NULL. + * @return data text , NULL if there is no data, + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_processing_instruction_get_value( + struct axiom_processing_instruction *om_pi, + const axutil_env_t * env); + + /** + * Serialize function + * @param om_pi processing_instruction struct + * @param env environment, MUST NOT be NULL. + * @param om_output om_output handler struct + * @return status of the op, AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_processing_instruction_serialize( + struct axiom_processing_instruction *om_pi, + const axutil_env_t * env, + axiom_output_t * om_output); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_PI_H */ diff --git a/axiom/include/axiom_soap.h b/axiom/include/axiom_soap.h new file mode 100644 index 0000000..be0d956 --- /dev/null +++ b/axiom/include/axiom_soap.h @@ -0,0 +1,53 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_H +#define AXIOM_SOAP_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** +* @file axiom_soap.h +* @brief includes all SOAP related headers +*/ +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_SOAP_H */ diff --git a/axiom/include/axiom_soap_body.h b/axiom/include/axiom_soap_body.h new file mode 100644 index 0000000..203b584 --- /dev/null +++ b/axiom/include/axiom_soap_body.h @@ -0,0 +1,184 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_BODY_H +#define AXIOM_SOAP_BODY_H + +/** + * @file axiom_soap_body.h + * @brief axiom_soap_body struct + */ + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap_body axiom_soap_body_t; + struct axiom_soap_builder; + + /** + * @defgroup axiom_soap_body soap body + * @ingroup axiom_soap + * @{ + */ + + /** + * a struct that represents the contents of the SOAP body + * element in a SOAP message. SOAP body element consists of XML data + * that affects the way the application-specific content is processed. + * soap_body_struct contains soap_header and + * which have the content for the SOAP body. + * this also contains axiom_soap_fault_t struct , which carries status and/or + * error information. + */ + + /** + * creates a soap body struct + * @param env Environment. MUST NOT be NULL + * @param envelope the SOAP envelope to set the SOAP Body + * @return created SOAP Body + */ + + AXIS2_EXTERN axiom_soap_body_t *AXIS2_CALL + axiom_soap_body_create_with_parent( + const axutil_env_t * env, + struct axiom_soap_envelope *envelope); + + /** + * Deallocate all the resources associated to soap_body + * But it does not deallocate the underlying om structure + * @param body soap_body struct + * @param env must not be null + * @return status code AXIS2_SUCCESS + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_body_free( + axiom_soap_body_t * body, + const axutil_env_t * env); + + /** + * Indicates whether a soap fault is available with this + * soap body + * @param body soap_body struct + * @param env environment must not be null + * @return AXIS2_TRUE if fault is available, AXIS2_FALSE otherwise + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_soap_body_has_fault( + axiom_soap_body_t * body, + const axutil_env_t * env); + + /** + * returns the soap fault in this soap_body + * IF a soap_builder is associated with the soap_body + * Pulling will take place + * @param body soap_body + * @param env environment must not be null + * @return axiom_soap_fault_t if available, NULL otherwise + */ + AXIS2_EXTERN axiom_soap_fault_t *AXIS2_CALL + axiom_soap_body_get_fault( + axiom_soap_body_t * body, + const axutil_env_t * env); + + /** + * get the underlying om_node + * @param body soap_body + * @param env environment must not be null + * @returns axiom_node_t + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_soap_body_get_base_node( + axiom_soap_body_t * body, + const axutil_env_t * env); + + /** + * return the soap version + * @param body soap_body + * @param env environment must not be null + * @return one of AXIOM_SOAP11 or AXIOM_SOAP12 + */ + AXIS2_EXTERN int AXIS2_CALL + axiom_soap_body_get_soap_version( + axiom_soap_body_t * body, + const axutil_env_t * env); + + /** + * build the soap body completely . return the status code, + * @param body pointer to soap_body struct + * @param env axutil_environment struct MUST not be NULL + * @returns status code , AXIS2_SUCCESS on success , AXIS2_ERROR + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_body_build( + axiom_soap_body_t * body, + const axutil_env_t * env); + + /** add an om node as the child to this soap_body + * the child is added to as the first child + * @param body pointer to soap_body struct + * @param env axutil_environment struct MUST not be NULL + * @returns status code , AXIS2_SUCCESS on success , AXIS2_ERROR + * otherwise + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_body_add_child( + axiom_soap_body_t * body, + const axutil_env_t * env, + axiom_node_t * child); + + /** + * SOAP builder construct a SOAP 1.2 fault all the time. + * So when SOAP 1.1 is in use, we should convert SOAP fault to + * SOAP 1.1 fault format before use. + * @param body pointer to soap_body struct + * @param env axutil_environment struct MUST not be NULL + * @returns status code , AXIS2_SUCCESS on success , AXIS2_ERROR + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_body_convert_fault_to_soap11( + axiom_soap_body_t * soap_body, + const axutil_env_t * env); + + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_body_process_attachments( + axiom_soap_body_t * soap_body, + const axutil_env_t * env, + void *user_param, + axis2_char_t *callback_name); + + AXIS2_EXTERN struct axiom_soap_builder *AXIS2_CALL + axiom_soap_body_get_builder( + axiom_soap_body_t * soap_body, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_SOAP_BODY_H */ diff --git a/axiom/include/axiom_soap_builder.h b/axiom/include/axiom_soap_builder.h new file mode 100644 index 0000000..9fffb78 --- /dev/null +++ b/axiom/include/axiom_soap_builder.h @@ -0,0 +1,253 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_BUILDER_H +#define AXIOM_SOAP_BUILDER_H + +#include +#include +#include + +/** + * @file axiom_soap_builder.h + * @brief axiom_soap_builder struct + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap_builder axiom_soap_builder_t; + + /** + * @defgroup axiom_soap_builder soap builder + * @ingroup axiom_soap + * @{ + */ + + /** + * creates a axiom_soap_builder struct + * @param env Environment. MUST NOT be NULL + * @param builder Stax builder + * @return the created SOAP Builder + */ + AXIS2_EXTERN axiom_soap_builder_t *AXIS2_CALL + axiom_soap_builder_create( + const axutil_env_t * env, + axiom_stax_builder_t * builder, + const axis2_char_t * soap_version); + /** + * Free the SOAP Builder + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * + * @return VOID + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_builder_free( + axiom_soap_builder_t * builder, + const axutil_env_t * env); + + /** + * Get the SOAP envelope of the SOAP builder + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * + * @return the SOAP envelope + */ + AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL + axiom_soap_builder_get_soap_envelope( + axiom_soap_builder_t * builder, + const axutil_env_t * env); + + /** + * Get the OM document of the SOAP Buidler + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * + * @return the OM document + */ + AXIS2_EXTERN axiom_document_t *AXIS2_CALL + axiom_soap_builder_get_document( + axiom_soap_builder_t * builder, + const axutil_env_t * env); + + /** + * Builds next element of the OM structure + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * @return AXIS2_SUCCESS if the next element is present else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_builder_next( + axiom_soap_builder_t * builder, + const axutil_env_t * env); + + /** + * + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * + * @return the axiom_node of the OM document + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_soap_builder_get_document_element( + axiom_soap_builder_t * builder, + const axutil_env_t * env); + + /** + * + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * + * @return AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_builder_set_bool_processing_mandatory_fault_elements( + axiom_soap_builder_t * builder, + const axutil_env_t * env, + axis2_bool_t value); + + /** + * + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * + * @return AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_builder_set_processing_detail_elements( + axiom_soap_builder_t * builder, + const axutil_env_t * env, + axis2_bool_t value); + + /** + * + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * + * @return AXIS2_TRUE if the the element is present, AXIS2_FALSE otherwise + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_soap_builder_is_processing_detail_elements( + axiom_soap_builder_t * builder, + const axutil_env_t * env); + + /** + * Get the SOAP version + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * + * @return the SOAP version + */ + AXIS2_EXTERN int AXIS2_CALL + axiom_soap_builder_get_soap_version( + axiom_soap_builder_t * builder, + const axutil_env_t * env); + + /** + * Set the MIME body parts + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * + * @return AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_builder_set_mime_body_parts( + axiom_soap_builder_t * builder, + const axutil_env_t * env, + axutil_hash_t * map); + + /** + * Get the MIME body parts + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * + * @return hash of mime body parts + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axiom_soap_builder_get_mime_body_parts( + axiom_soap_builder_t * builder, + const axutil_env_t * env); + + /** + * Set the mime_parser + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * @paran mime_parser pointer to a axiom_mime_parser_t instance + */ + + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_builder_set_mime_parser( + axiom_soap_builder_t * builder, + const axutil_env_t * env, + axiom_mime_parser_t *mime_parser); + + /** + * Set the callback function + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * @param callback to the callback function pointer + */ + + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_builder_set_callback_function( + axiom_soap_builder_t * builder, + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK callback); + + /** + * Set the callback_ctx + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * @param void pointer to the callback_ctx + */ + + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_builder_set_callback_ctx( + axiom_soap_builder_t * builder, + const axutil_env_t * env, + void *callback_ctx); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_builder_create_attachments( + axiom_soap_builder_t * builder, + const axutil_env_t * env, + void *user_param, + axis2_char_t *callback_name); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_soap_builder_replace_xop( + axiom_soap_builder_t * builder, + const axutil_env_t * env, + axiom_node_t *om_element_node, + axiom_element_t *om_element); + + AXIS2_EXTERN axiom_stax_builder_t *AXIS2_CALL + axiom_soap_builder_get_om_builder( + axiom_soap_builder_t * builder, + const axutil_env_t * env); + + + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIOM_SOAP_BUILDER_H */ diff --git a/axiom/include/axiom_soap_const.h b/axiom/include/axiom_soap_const.h new file mode 100644 index 0000000..3d5933b --- /dev/null +++ b/axiom/include/axiom_soap_const.h @@ -0,0 +1,176 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_CONST_H +#define AXIOM_SOAP_CONST_H + +/** +* @file axiom_soap.h +* @brief defines SOAP constants +*/ +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_soap SOAP + * @ingroup axiom + * @{ + * @} + */ + typedef enum soap_version + { + AXIOM_SOAP_VERSION_NOT_SET = 0, + + AXIOM_SOAP11, + + AXIOM_SOAP12 + } axiom_soap_version; + + /** soap 11 constants */ + +#define AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI "http://schemas.xmlsoap.org/soap/envelope/" + +#define AXIOM_SOAP11_ATTR_ACTOR "actor" + +#define AXIOM_SOAP11_SOAP_FAULT_CODE_LOCAL_NAME "faultcode" + +#define AXIOM_SOAP11_SOAP_FAULT_STRING_LOCAL_NAME "faultstring" + +#define AXIOM_SOAP11_SOAP_FAULT_ACTOR_LOCAL_NAME "faultactor" + +#define AXIOM_SOAP11_SOAP_FAULT_DETAIL_LOCAL_NAME "detail" + +#define AXIOM_SOAP11_CONTENT_TYPE "text/xml" + +#define AXIOM_SOAP11_FAULT_CODE_SENDER "Client" + +#define AXIOM_SOAP11_FAULT_CODE_RECEIVER "Server" + +#define AXIOM_SOAP11_SOAP_ACTOR_NEXT "http://schemas.xmlsoap.org/soap/actor/next" + + /** soap12 constants */ + +#define AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI "http://www.w3.org/2003/05/soap-envelope" + +#define AXIOM_SOAP12_SOAP_ROLE "role" + +#define AXIOM_SOAP12_SOAP_RELAY "relay" + +#define AXIOM_SOAP12_SOAP_FAULT_CODE_LOCAL_NAME "Code" + +#define AXIOM_SOAP12_SOAP_FAULT_SUB_CODE_LOCAL_NAME "Subcode" + +#define AXIOM_SOAP12_SOAP_FAULT_VALUE_LOCAL_NAME "Value" + +#define AXIOM_SOAP12_SOAP_FAULT_VALUE_VERSION_MISMATCH "VersionMismatch" + +#define AXIOM_SOAP12_SOAP_FAULT_VALUE_MUST_UNDERSTAND "MustUnderstand" + +#define AXIOM_SOAP12_SOAP_FAULT_VALUE_DATA_ENCODING_UKNOWN "DataEncodingUnknown" + +#define AXIOM_SOAP12_SOAP_FAULT_VALUE_SENDER "Sender" + +#define AXIOM_SOAP12_SOAP_FAULT_VALUE_RECEIVER "Receiver" + + /** SOAP Fault */ + +#define AXIOM_SOAP12_SOAP_FAULT_REASON_LOCAL_NAME "Reason" + +#define AXIOM_SOAP12_SOAP_FAULT_TEXT_LOCAL_NAME "Text" + +#define AXIOM_SOAP12_SOAP_FAULT_TEXT_LANG_ATTR_LOCAL_NAME "lang" + +#define AXIOM_SOAP12_SOAP_FAULT_TEXT_LANG_ATTR_NS_URI "http://www.w3.org/XML/1998/namespace" + +#define AXIOM_SOAP12_SOAP_FAULT_TEXT_LANG_ATTR_NS_PREFIX "xml" + +#define AXIOM_SOAP12_SOAP_FAULT_NODE_LOCAL_NAME "Node" + +#define AXIOM_SOAP12_SOAP_FAULT_DETAIL_LOCAL_NAME "Detail" + +#define AXIOM_SOAP12_SOAP_FAULT_ROLE_LOCAL_NAME "Role" + +#define AXIOM_SOAP12_CONTENT_TYPE "application/soap+xml" + +#define AXIOM_SOAP12_FAULT_CODE_SENDER "Sender" + +#define AXIOM_SOAP12_FAULT_CODE_RECEIVER "Receiver" + +#define AXIOM_SOAP12_SOAP_ROLE_NEXT "http://www.w3.org/2003/05/soap-envelope/role/next" + +#define AXIOM_SOAP12_SOAP_ROLE_NONE "http://www.w3.org/2003/05/soap-envelope/role/none" + +#define SOAP12_SOAP_ROLE_ULTIMATE_RECEIVER "http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver" + +#define AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX "soapenv" + +#define AXIOM_SOAP_ENVELOPE_LOCAL_NAME "Envelope" + +#define AXIOM_SOAP_HEADER_LOCAL_NAME "Header" + +#define AXIOM_SOAP_BODY_LOCAL_NAME "Body" + +#define AXIOM_SOAP_BODY_NAMESPACE_PREFIX AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX + +#define AXIOM_SOAP_BODY_FAULT_LOCAL_NAME "Fault" + + /** attribute must understand */ + +#define AXIOM_SOAP_ATTR_MUST_UNDERSTAND "mustUnderstand" + +#define AXIOM_SOAP_ATTR_MUST_UNDERSTAND_TRUE "true" + +#define AXIOM_SOAP_ATTR_MUST_UNDERSTAND_FALSE "false" + +#define AXIOM_SOAP_ATTR_MUST_UNDERSTAND_0 "0" + +#define AXIOM_SOAP_ATTR_MUST_UNDERSTAND_1 "1" + +#define AXIOM_SOAP_FAULT_LOCAL_NAME "Fault" + +#define AXIOM_SOAP_FAULT_DETAIL_LOCAL_NAME "detail" + +#define AXIOM_SOAP_FAULT_NAMESPACE_PREFIX AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX + +#define AXIOM_SOAP_FAULT_DETAIL_EXCEPTION_ENTRY "Exception" + +#define AXIOM_SOAP_FAULT_CODE_VERSION_MISMATCH "soapenv:VersionMismatch" + +#define AXIOM_SOAP_FAULT_CODE_MUST_UNDERSTAND "soapenv:MustUnderstand" + +#define AXIOM_SOAP_FAULT_CODE_DATA_ENCODING_UNKNOWN "soapenv:DataEncodingUnknown" + +#define AXIOM_SOAP_FAULT_CODE_SENDER "" + +#define AXIOM_SOAP_FAULT_CODE_RECEIVER "" + + /* MTOM related */ + +#define AXIS2_XOP_NAMESPACE_URI "http://www.w3.org/2004/08/xop/include" + +#define AXIS2_XOP_INCLUDE "Include" + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_SOAP_CONSTANTS_H */ diff --git a/axiom/include/axiom_soap_envelope.h b/axiom/include/axiom_soap_envelope.h new file mode 100644 index 0000000..24b8645 --- /dev/null +++ b/axiom/include/axiom_soap_envelope.h @@ -0,0 +1,244 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_ENVELOPE_H +#define AXIOM_SOAP_ENVELOPE_H + +/** + * @file axiom_soap_envelope.h + * @brief axiom_soap_envelope struct + * corresponds to root element of soap message + */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap_envelope axiom_soap_envelope_t; + + struct axiom_soap_body; + struct axiom_soap_header; + struct axiom_soap_header_block; + struct axiom_soap_builder; + + /** + * @defgroup axiom_soap_envelope soap envelope + * @ingroup axiom_soap + * @{ + */ + + /** + * create a soap_envelope with the given namespace prefix and uri + * as the prefix and uri, The uri of ns should be valid soap uri + * @param env Environment. MUST NOT be NULL + * @param ns The OM namespace + * + * @return Created SOAP envelope + */ + AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL + axiom_soap_envelope_create( + const axutil_env_t * env, + axiom_namespace_t * ns); + + /** + * create a soap_envelope with the given namespace prefix and uri is selected + * according to soap_version, soap version should be one of AXIOM_SOAP11 + * or AXIOM_SOAP12 + * @param env Environment. MUST NOT be NULL + * @param prefix soap envelope prefix + * if prefix is NULL default prefix is used + * + * @return a pointer to soap envelope struct + */ + AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL + axiom_soap_envelope_create_with_soap_version_prefix( + const axutil_env_t * env, + int soap_version, + const axis2_char_t * prefix); + + /** + * Create the default SOAP envelope + * @param envelope OM SOAP Envelope + * @param env Environment. MUST NOT be NULL + * + * @return Created SOAP envelope + */ + AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL + axiom_soap_envelope_create_default_soap_envelope( + const axutil_env_t * env, + int soap_version); + + /** + * Create the default SOAP fault envelope + * @param envelope OM SOAP Envelope + * @param env Environment. MUST NOT be NULL + * + * @return Created SOAP fault envelope + */ + AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL + axiom_soap_envelope_create_default_soap_fault_envelope( + const axutil_env_t * env, + const axis2_char_t * code_value, + const axis2_char_t * reason_text, + const int soap_version, + axutil_array_list_t * sub_codes, + axiom_node_t * detail_node); + + /** + * gets the soap header of this soap envelope + * @param envelope soap envelope + * @param env environment must not be null + * @return soap header null it no header is present + */ + AXIS2_EXTERN struct axiom_soap_header *AXIS2_CALL + axiom_soap_envelope_get_header( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env); + + /** + * Returns the soap body associated with this soap envelope + * @param envelope soap_envelope + * @param env environment + * @return soap_body + */ + AXIS2_EXTERN struct axiom_soap_body *AXIS2_CALL + axiom_soap_envelope_get_body( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env); + + /** + * serialize function , serialize the soap envelope + * IF the soap version it set to soap11 the soap fault part is converted + * to soap11 fault even is the underlying soap fault is of soap12 type + * @param envelope soap envelope + * @param env environment must not be null + * @param om_output + * @param cache whether caching is enabled or not + * @return status code , AXIS2_SUCCESS if success , + * AXIS2_FAILURE otherwise + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_envelope_serialize( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env, + axiom_output_t * om_output, + axis2_bool_t cache); + + /** + * Free function, This function deallocate all the resources associated + * with the soap_envelope + * IT frees it's soap body and soap headers as well as the underlying + * om node tree by calling axiom_node_free_tree function + * @param envelope soap_envelope + * @param env environment + * @return VOID + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_envelope_free( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env); + + /** + * returns the om_node associated with this soap envelope + * @param envelope soap_envelope + * @param env environment + * @return axiom_node_t pointer + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_soap_envelope_get_base_node( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env); + + /** returns the soap version of this soap envelope + * @param envelope soap_envelope + * @param env environment must not be null + * @return soap_version AXIOM_SOAP12 or AXIOM_SOAP11 + */ + AXIS2_EXTERN int AXIS2_CALL + axiom_soap_envelope_get_soap_version( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env); + + /** + * Return the soap envelope namespace + * @param envelope + * @param env + * @return axiom_namespace_t + */ + AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL + axiom_soap_envelope_get_namespace( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env); + + /** + * Set the SOAP version + * @param envelope OM SOAP Envelope + * @param env Environment. MUST NOT be NULL + * @param soap_version, the SOAP version number. + * Must be either AXIOM_SOAP11 or AXIOM_SOAP12 + * + * @return AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_envelope_set_soap_version( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env, + int soap_version); + + /** + * Increment the reference number for the created instance + * @param envelope OM SOAP Envelope + * @param env Environment. MUST NOT be NULL + * + * @return AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_envelope_increment_ref( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env); + + /** + * get the soap builder of the envelope + * @param envelope OM SOAP Envelope + * @param env Environment. MUST NOT be NULL + * + * @return soap_builder struct related to the envelope + */ + AXIS2_EXTERN struct axiom_soap_builder *AXIS2_CALL + axiom_soap_envelope_get_soap_builder( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env); + + AXIS2_EXTERN struct axiom_soap_builder *AXIS2_CALL + axiom_soap_envelope_get_builder( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_SOAP_ENVELOPE_H */ diff --git a/axiom/include/axiom_soap_fault.h b/axiom/include/axiom_soap_fault.h new file mode 100644 index 0000000..d75ea3c --- /dev/null +++ b/axiom/include/axiom_soap_fault.h @@ -0,0 +1,215 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_FAULT_H +#define AXIOM_SOAP_FAULT_H + +/** + * @file axiom_soap_fault.h + * @brief axiom_soap_fault struct + */ +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap_fault axiom_soap_fault_t; + + struct axiom_soap_fault_reason; + struct axiom_soap_fault_detail; + struct axiom_soap_fault_sub_code; + struct axiom_soap_fault_code; + struct axiom_soap_fault_node; + struct axiom_soap_fault_role; + struct axiom_soap_fault_text; + struct axiom_soap_fault_value; + struct axiom_soap_body; + struct axiom_soap_builder; + + /** + * @defgroup axiom_soap_fault soap fault + * @ingroup axiom_soap + * @{ + */ + + /** + * creates a soap fault struct + * @param env environment must not be NULL + * @param parent soap body struct to which this soap + * fault is the child + * @param env Environment. MUST NOT be NULL + * @returns pointer to axiom_soap_fault_t struct on success + * otherwise return NULL with error code set in environments error + */ + AXIS2_EXTERN axiom_soap_fault_t *AXIS2_CALL + axiom_soap_fault_create_with_parent( + const axutil_env_t * env, + struct axiom_soap_body *parent); + + /** create an returns a axiom_soap_fault_t struct with a soap fault detail + * element and have this exceptio string as a text of a child of soap fault + * detail + * @param env environment must not be NULL + * @param parent soap body struct must not be NULL + * @param exceptio an error string must not be NULL + * @returns pointer to axiom_soap_fault_t on success , + * otherwise return NULL + */ + AXIS2_EXTERN axiom_soap_fault_t *AXIS2_CALL + axiom_soap_fault_create_with_exception( + const axutil_env_t * env, + struct axiom_soap_body *parent, + axis2_char_t * exception); + + /** + * + * @param env environment must not be NULL + * @param parent soap body struct must not be NULL + * @param code_value + * @param reason_text + * @param soap_version + * + * @return the created default OM SOAP fault + */ + AXIS2_EXTERN axiom_soap_fault_t *AXIS2_CALL + axiom_soap_fault_create_default_fault( + const axutil_env_t * env, + struct axiom_soap_body *parent, + const axis2_char_t * code_value, + const axis2_char_t * reason_text, + const int soap_version); + + /** + * Free an axiom_soap_fault + * @param fault pointer to soap_fault struct + * @param env Environment. MUST NOT be NULL + * @return status of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_fault_free( + axiom_soap_fault_t * fault, + const axutil_env_t * env); + + /** + * this function returns a axiom_soap_fault_code struct + * if a fault code is associated with this soap fault + * only valid when called after building the soap fault + * @param fault soap fault struct + * @param env environment must not be NULL + * @returns pointer to soap_fault_code struct if one is associated + * with this soap_fault struct , NULL is returned otherwise + */ + AXIS2_EXTERN struct axiom_soap_fault_code *AXIS2_CALL + axiom_soap_fault_get_code( + axiom_soap_fault_t * fault, + const axutil_env_t * env); + + /** + * @param fault soap fault struct + * @param env environment must not be NULL + * @returns pointer to soap_fault_reason struct if one is associated + * with this soap_fault struct , NULL is returned otherwise + */ + + AXIS2_EXTERN struct axiom_soap_fault_reason *AXIS2_CALL + axiom_soap_fault_get_reason( + axiom_soap_fault_t * fault, + const axutil_env_t * env); + + /** + * @param fault soap fault struct + * @param env environment must not be NULL + * @returns pointer to soap_fault_node struct if one is associated + * with this soap_fault struct , NULL is returned otherwise + */ + AXIS2_EXTERN struct axiom_soap_fault_node *AXIS2_CALL + axiom_soap_fault_get_node( + axiom_soap_fault_t * fault, + const axutil_env_t * env); + + /** + * @param fault soap fault struct + * @param env environment must not be NULL + * @returns pointer to soap_fault_code struct if one is associated + * with this soap_fault struct , NULL is returned otherwise + */ + AXIS2_EXTERN struct axiom_soap_fault_role *AXIS2_CALL + axiom_soap_fault_get_role( + axiom_soap_fault_t * fault, + const axutil_env_t * env); + + /** + * @param fault soap fault struct + * @param env environment must not be NULL + * @returns a pointer to soap_fault_code struct if one is + * associated with this soap_fault struct , NULL is returned otherwise + */ + AXIS2_EXTERN struct axiom_soap_fault_detail *AXIS2_CALL + axiom_soap_fault_get_detail( + axiom_soap_fault_t * fault, + const axutil_env_t * env); + + /** + * @param fault soap fault struct + * @param env enviroment must not be NULL + * @returns a pointer to soap_fault_code struct if one is + * associated with this soap_fault struct , NULL is returned otherwise + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_soap_fault_get_exception( + axiom_soap_fault_t * fault, + const axutil_env_t * env); + + /** + * set an error string + * @param fualt soap fault struct + * @param env enviroment must not be NULL + * @param exception error message to be stored on soap fault + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_set_exception( + axiom_soap_fault_t * fault, + const axutil_env_t * env, + axis2_char_t * exception); + + /** + * returns the axiom_node_t struct which is wrapped by + * this soap fault struct + * @param fault soap fault struct + * @param env environment must not be NULL + * @returns a pointer to axiom_node_t struct if an om node is associated + * with this soap fault struct, otherwise return NULL + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_soap_fault_get_base_node( + axiom_soap_fault_t * fault, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_SOAP_FAULT_H */ diff --git a/axiom/include/axiom_soap_fault_code.h b/axiom/include/axiom_soap_fault_code.h new file mode 100644 index 0000000..ccc2b46 --- /dev/null +++ b/axiom/include/axiom_soap_fault_code.h @@ -0,0 +1,120 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_FAULT_CODE_H +#define AXIOM_SOAP_FAULT_CODE_H + +/** + * @file axiom_soap_fault_code.h + * @brief axiom_soap_fault_code struct + */ +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap_fault_code axiom_soap_fault_code_t; + + struct axiom_soap_fault_value; + struct axiom_soap_fault_sub_code; + struct axiom_soap_builder; + + /** + * @defgroup axiom_soap_fault_code soap fault code + * @ingroup axiom_soap + * @{ + */ + + /** + * creates a soap fault code struct + * @param env Environment. MUST NOT be NULL + * @param fault_code the pointer to the AXIOM fault code struct + * + * @return + */ + AXIS2_EXTERN axiom_soap_fault_code_t *AXIS2_CALL + axiom_soap_fault_code_create_with_parent( + const axutil_env_t * env, + axiom_soap_fault_t * fault); + /** + * + * @param fault_code the pointer to the AXIOM fault code struct + * @param env Environment. MUST NOT be NULL + * + * @return + */ + AXIS2_EXTERN axiom_soap_fault_code_t *AXIS2_CALL + axiom_soap_fault_code_create_with_parent_value( + const axutil_env_t * env, + axiom_soap_fault_t * fault, + axis2_char_t * value); + + /** + * Free an axiom_soap_fault_code + * @param fault_code pointer to soap_fault_code struct + * @param env Environment. MUST NOT be NULL + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_fault_code_free( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env); + + /** + * @param fault_code the pointer to the AXIOM fault code struct + * @param env Environment. MUST NOT be NULL + * @returns axiom_soap_fault_sub_code struct if one is associated with + * this fault_code struct , otherwise teturns NULL + */ + + AXIS2_EXTERN struct axiom_soap_fault_sub_code *AXIS2_CALL + axiom_soap_fault_code_get_sub_code( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env); + + /** + * @param fault_code the pointer to the AXIOM fault code struct + * @param env Environment. MUST NOT be NULL + * @returns soap_fault_value if available + */ + AXIS2_EXTERN struct axiom_soap_fault_value *AXIS2_CALL + axiom_soap_fault_code_get_value( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env); + /** + * Get the base node of the SOAP fault + * @param fault_code the pointer to the AXIOM fault code struct + * @param env Environment. MUST NOT be NULL + * + * @return retrns the base node of the SOAP fault + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_soap_fault_code_get_base_node( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIOM_SOAP_FAULT_CODE_H */ diff --git a/axiom/include/axiom_soap_fault_detail.h b/axiom/include/axiom_soap_fault_detail.h new file mode 100644 index 0000000..6d17a77 --- /dev/null +++ b/axiom/include/axiom_soap_fault_detail.h @@ -0,0 +1,111 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_FAULT_DETAIL_H +#define AXIOM_SOAP_FAULT_DETAIL_H + +/** + * @file axiom_soap_fault_detail.h + * @brief axiom_soap_fault_detail struct + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap_fault_detail axiom_soap_fault_detail_t; + + /** + * @defgroup axiom_soap_fault_detail soap fault detail + * @ingroup axiom_soap + * @{ + */ + + /** + * creates a soap struct + * @param env Environment. MUST NOT be NULL + * @param fault The SOAP fault + * + * @return the created OM SOAP fault detail + */ + AXIS2_EXTERN axiom_soap_fault_detail_t *AXIS2_CALL + axiom_soap_fault_detail_create_with_parent( + const axutil_env_t * env, + axiom_soap_fault_t * fault); + + /** + * Free an axiom_soap_fault_detail + * @param fault_detail pointer to soap_fault_detail struct + * @param env Environment. MUST NOT be NULL + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_fault_detail_free( + axiom_soap_fault_detail_t * fault_detail, + const axutil_env_t * env); + + /** + * Adds a detail entry to the SOAP fault detail + * @param fault_detail pointer to soap_fault_detail struct + * @param env Environment. MUST NOT be NULL + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_detail_add_detail_entry( + axiom_soap_fault_detail_t * fault_detail, + const axutil_env_t * env, + axiom_node_t * ele_node); + + /** + * Return all detail entries in the SOAP fault detail + * @param fault_detail pointer to soap_fault_detail struct + * @param env Environment. MUST NOT be NULL + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axiom_children_iterator_t *AXIS2_CALL + axiom_soap_fault_detail_get_all_detail_entries( + axiom_soap_fault_detail_t * fault_detail, + const axutil_env_t * env); + + /** + * Returns the base node of the SOAP fault detail + * @param fault_detail pointer to soap_fault_detail struct + * @param env Environment. MUST NOT be NULL + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_soap_fault_detail_get_base_node( + axiom_soap_fault_detail_t * fault_code, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_SOAP_FAULT_DETAIL_H */ diff --git a/axiom/include/axiom_soap_fault_node.h b/axiom/include/axiom_soap_fault_node.h new file mode 100644 index 0000000..b0a8313 --- /dev/null +++ b/axiom/include/axiom_soap_fault_node.h @@ -0,0 +1,112 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_FAULT_NODE_H +#define AXIOM_SOAP_FAULT_NODE_H + +/** + * @file axiom_soap_fault_node.h + * @brief axiom_soap_fault_node struct + */ +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap_fault_node axiom_soap_fault_node_t; + + /** + * @defgroup axiom_soap_fault_node soap fault node + * @ingroup axiom_soap + * @{ + */ + + /** + * creates a soap fault node struct + * @param env Environment. MUST NOT be NULL + * @param fault_node pointer to soap_fault_node struct + * + * @return the created SOAP fault node + */ + AXIS2_EXTERN axiom_soap_fault_node_t *AXIS2_CALL + axiom_soap_fault_node_create_with_parent( + const axutil_env_t * env, + axiom_soap_fault_t * fault); + + /** + * Free an axiom_soap_fault_node + * @param fault_node pointer to soap_fault_node struct + * @param env Environment. MUST NOT be NULL + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_fault_node_free( + axiom_soap_fault_node_t * fault_node, + const axutil_env_t * env); + + /** + * Set the fault string value of the SOAP fault node + * @param fault_node pointer to soap_fault_node struct + * @param env Environment. MUST NOT be NULL + * @param fault_val the fault string value + * + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_node_set_value( + axiom_soap_fault_node_t * fault_node, + const axutil_env_t * env, + axis2_char_t * fault_val); + + /** + * Get the string value of the SOAP fault node + * @param fault_node pointer to soap_fault_node struct + * @param env Environment. MUST NOT be NULL + * + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_soap_fault_node_get_value( + axiom_soap_fault_node_t * fault_node, + const axutil_env_t * env); + + /** + * Get the base node of the SOAP fault node + * @param fault_node pointer to soap_fault_node struct + * @param env Environment. MUST NOT be NULL + * + * @return the base node of the fault node + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_soap_fault_node_get_base_node( + axiom_soap_fault_node_t * fault_node, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_SOAP_FAULT_NODE_H */ diff --git a/axiom/include/axiom_soap_fault_reason.h b/axiom/include/axiom_soap_fault_reason.h new file mode 100644 index 0000000..e9e8da3 --- /dev/null +++ b/axiom/include/axiom_soap_fault_reason.h @@ -0,0 +1,139 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_FAULT_REASON_H +#define AXIOM_SOAP_FAULT_REASON_H + +/** +* @file axiom_soap_fault_reason.h +* @brief axiom_soap_fault_reason +*/ +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap_fault_reason axiom_soap_fault_reason_t; + struct axiom_soap_fault_text; + struct axiom_soap_builder; + + /** + * @defgroup axiom_soap_fault_reason soap fault reason + * @ingroup axiom_soap + * @{ + */ + + /** + * creates a SOAP fault reason struct + * @param env Environment. MUST NOT be NULL + * @param fault the SOAP fault + * + * @return the created SOAP fault reason struct + */ + AXIS2_EXTERN axiom_soap_fault_reason_t *AXIS2_CALL + axiom_soap_fault_reason_create_with_parent( + const axutil_env_t * env, + axiom_soap_fault_t * fault); + + /** + * Free an axiom_soap_fault_reason + * @param fault_reason pointer to soap_fault_reason struct + * @param env Environment. MUST NOT be NULL + * + * @return VOID + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_fault_reason_free( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env); + + /** + * Get the SOAP fault text by comparing the given string + * @param fault_reason pointer to soap_fault_reason struct + * @param env Environment. MUST NOT be NULL + * @param lang string to be compares + * + * @return the SOAP fault text of the SOAP fault string + */ + AXIS2_EXTERN struct axiom_soap_fault_text *AXIS2_CALL + axiom_soap_fault_reason_get_soap_fault_text( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env, + axis2_char_t * lang); + + /** + * Returns all the SOAP fault reason strings as an array list + * @param fault_reason pointer to soap_fault_reason struct + * @param env Environment. MUST NOT be NULL + * + * @return all the SOAP fault reason strings as an array list + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axiom_soap_fault_reason_get_all_soap_fault_texts( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env); + + /** + * Retuens the first SOAP fault reason string + * @param fault_reason pointer to soap_fault_reason struct + * @param env Environment. MUST NOT be NULL + * + * @return The first SOAP fault reason string + */ + AXIS2_EXTERN struct axiom_soap_fault_text *AXIS2_CALL + axiom_soap_fault_reason_get_first_soap_fault_text( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env); + + /** + * Add a string as a SOAP fault reason + * @param fault_reason pointer to soap_fault_reason struct + * @param env Environment. MUST NOT be NULL + * @param fault_text The text to be added as the SOAP fault reason + * + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_reason_add_soap_fault_text( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env, + struct axiom_soap_fault_text *fault_text); + + /** + * Get the base node of the SOAP fault reason + * @param fault_reason pointer to soap_fault_reason struct + * @param env Environment. MUST NOT be NULL + * @return the base node of the SOAP fault reason + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_soap_fault_reason_get_base_node( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_SOAP_FAULT_REASON_H */ diff --git a/axiom/include/axiom_soap_fault_role.h b/axiom/include/axiom_soap_fault_role.h new file mode 100644 index 0000000..7cfa82c --- /dev/null +++ b/axiom/include/axiom_soap_fault_role.h @@ -0,0 +1,109 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_FAULT_ROLE_H +#define AXIOM_SOAP_FAULT_ROLE_H + +/** + * @file axiom_soap_fault_role.h + * @brief axiom_soap_fault_role + */ +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap_fault_role axiom_soap_fault_role_t; + + /** + * @defgroup axiom_soap_fault_role soap fault role + * @ingroup axiom_soap + * @{ + */ + + /** + * creates a soap struct + * @param env Environment. MUST NOT be NULL + */ + AXIS2_EXTERN axiom_soap_fault_role_t *AXIS2_CALL + axiom_soap_fault_role_create_with_parent( + const axutil_env_t * env, + axiom_soap_fault_t * fault); + + /** + * Free an axiom_soap_fault_role + * @param fault_role pointer to soap_fault_role struct + * @param env Environment. MUST NOT be NULL + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_fault_role_free( + axiom_soap_fault_role_t * fault_role, + const axutil_env_t * env); + + /** + * Set the SOAP fault role value + * @param fault_role pointer to soap_fault_role struct + * @param env Environment. MUST NOT be NULL + * @param uri the URI to be set + * + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_role_set_role_value( + axiom_soap_fault_role_t * fault_role, + const axutil_env_t * env, + axis2_char_t * uri); + + /** + * Get the SOAP fault role value + * @param fault_role pointer to soap_fault_role struct + * @param env Environment. MUST NOT be NULL + * + * @return the SOAP fault role value + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_soap_fault_role_get_role_value( + axiom_soap_fault_role_t * fault_role, + const axutil_env_t * env); + + /** + * Get the base node of the OM SOAP fault role + * @param fault_role pointer to soap_fault_role struct + * @param env Environment. MUST NOT be NULL + * + * @return the base node of the OM SOAP fault role + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_soap_fault_role_get_base_node( + axiom_soap_fault_role_t * fault_role, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_SOAP_FAULT_ROLE_H */ diff --git a/axiom/include/axiom_soap_fault_sub_code.h b/axiom/include/axiom_soap_fault_sub_code.h new file mode 100644 index 0000000..6d4723c --- /dev/null +++ b/axiom/include/axiom_soap_fault_sub_code.h @@ -0,0 +1,123 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_FAULT_SUB_CODE_H +#define AXIOM_SOAP_FAULT_SUB_CODE_H + +/** + * @file axiom_soap_fault_sub_code.h + * @brief axiom_soap_fault_sub_code struct + */ +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap_fault_sub_code axiom_soap_fault_sub_code_t; + struct axiom_soap_fault_value; + struct axiom_soap_builder; + + /** + * @defgroup axiom_soap_fault_sub_code soap fault sub code + * @ingroup axiom_soap + * @{ + */ + + /** + * creates a soap struct + * @param env Environment. MUST NOT be NULL + * @param fault_code SOAP fault code + * + * @return Created SOAP fault sub code + */ + AXIS2_EXTERN axiom_soap_fault_sub_code_t *AXIS2_CALL + axiom_soap_fault_sub_code_create_with_parent( + const axutil_env_t * env, + axiom_soap_fault_code_t * fault_code); + + /** + * Create a SOAP fault sub code from the given SOAP fault and value + * @param fault_sub_code pointer to soap_fault_sub_code struct + * @param env Environment. MUST NOT be NULL + * @param value the value to be set to the SOAP fault + * + * @return Created SOAP sub code + */ + AXIS2_EXTERN axiom_soap_fault_sub_code_t *AXIS2_CALL + axiom_soap_fault_sub_code_create_with_parent_value( + const axutil_env_t * env, + axiom_soap_fault_code_t * fault_code, + axis2_char_t * value); + + /** + * Free an axiom_soap_fault_sub_code + * @param fault_sub_code pointer to soap_fault_sub_code struct + * @param env Environment. MUST NOT be NULL + * @return VOID + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_fault_sub_code_free( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env); + + /** + * Get the SOAP fault sub code + * @param fault_sub_code pointer to soap_fault_sub_code struct + * @param env Environment. MUST NOT be NULL + * + * @return the SOAP fault sub code + */ + AXIS2_EXTERN axiom_soap_fault_sub_code_t *AXIS2_CALL + axiom_soap_fault_sub_code_get_sub_code( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env); + + /** + * Get the value of the SOAP fault sub code + * @param fault_sub_code pointer to soap_fault_sub_code struct + * @param env Environment. MUST NOT be NULL + * + * @return the SOAP fault value + */ + AXIS2_EXTERN struct axiom_soap_fault_value *AXIS2_CALL + axiom_soap_fault_sub_code_get_value( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env); + + /** + * Get the base node of the SOAP fault sub code + * @param fault_sub_code pointer to soap_fault_sub_code struct + * @param env Environment. MUST NOT be NULL + * + * @return the base node of the SOAP fault sub code as OM node + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_soap_fault_sub_code_get_base_node( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_SOAP_FAULT_SUB_CODE_H */ diff --git a/axiom/include/axiom_soap_fault_text.h b/axiom/include/axiom_soap_fault_text.h new file mode 100644 index 0000000..10a0465 --- /dev/null +++ b/axiom/include/axiom_soap_fault_text.h @@ -0,0 +1,138 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_FAULT_TEXT_H +#define AXIOM_SOAP_FAULT_TEXT_H + +/** + * @file axiom_soap_fault_text.h + * @brief axiom_soap_fault_text + */ +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap_fault_text axiom_soap_fault_text_t; + + /** + * @defgroup axiom_soap_fault_text soap fault text + * @ingroup axiom_soap + * @{ + */ + + /** + * creates a soap fault struct + * @param env Environment. MUST NOT be NULL + * @param fault the SOAP fault reason + * + * @return Created SOAP fault text + */ + AXIS2_EXTERN axiom_soap_fault_text_t *AXIS2_CALL + axiom_soap_fault_text_create_with_parent( + const axutil_env_t * env, + axiom_soap_fault_reason_t * fault); + + /** + * Free an axiom_soap_fault_text + * @param fault_text pointer to soap_fault_text struct + * @param env Environment. MUST NOT be NULL + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_fault_text_free( + axiom_soap_fault_text_t * fault_text, + const axutil_env_t * env); + + /** + * Set the lang of the SOAP fault text + * @param fault_text pointer to soap_fault_text struct + * @param env Environment. MUST NOT be NULL + * @param lang the string to be set + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_text_set_lang( + axiom_soap_fault_text_t * fault_text, + const axutil_env_t * env, + const axis2_char_t * lang); + + /** + * Get the lang of the SOAP fault + * @param fault_text pointer to soap_fault_text struct + * @param env Environment. MUST NOT be NULL + * + * @return the lang of the SOAP fault + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_soap_fault_text_get_lang( + axiom_soap_fault_text_t * fault_text, + const axutil_env_t * env); + + /** + * Get the base node of the SOAP fault text + * @param fault_text pointer to soap_fault_text struct + * @param env Environment. MUST NOT be NULL + * + * @return the base node of the SOAP fault text + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_soap_fault_text_get_base_node( + axiom_soap_fault_text_t * fault_text, + const axutil_env_t * env); + + /** + * Set the SOAP fault text + * @param fault_text pointer to soap_fault_text struct + * @param env Environment. MUST NOT be NULL + * @param value the text value + * @param lang string to be compared + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_text_set_text( + axiom_soap_fault_text_t * fault_text, + const axutil_env_t * env, + axis2_char_t * value, + axis2_char_t * lang); + + /** + * get the SOAP fault text + * @param fault_text pointer to soap_fault_text struct + * @param env Environment. MUST NOT be NULL + * + * @return the Text of the SOAP fault + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_soap_fault_text_get_text( + axiom_soap_fault_text_t * fault_text, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_SOAP_FAULT_TEXT_H */ diff --git a/axiom/include/axiom_soap_fault_value.h b/axiom/include/axiom_soap_fault_value.h new file mode 100644 index 0000000..446a89e --- /dev/null +++ b/axiom/include/axiom_soap_fault_value.h @@ -0,0 +1,120 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_FAULT_VALUE_H +#define AXIOM_SOAP_FAULT_VALUE_H + +/** +* @file axiom_soap_fault_value.h +* @brief axiom_soap_fault_value +*/ +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap_fault_value axiom_soap_fault_value_t; + + /** + * @defgroup axiom_soap_fault_value soap fault value + * @ingroup axiom_soap + * @{ + */ + + /** + * creates a soap struct + * @param env Environment. MUST NOT be NULL + */ + AXIS2_EXTERN axiom_soap_fault_value_t *AXIS2_CALL + axiom_soap_fault_value_create_with_subcode( + const axutil_env_t * env, + axiom_soap_fault_sub_code_t * parent); + + /** + * Create s SOAP fault value givn a SOAP fault code + * @param fault_value pointer to soap_fault_value struct + * @param env Environment. MUST NOT be NULL + * + * @return Created SOAP fault value + */ + AXIS2_EXTERN axiom_soap_fault_value_t *AXIS2_CALL + axiom_soap_fault_value_create_with_code( + const axutil_env_t * env, + axiom_soap_fault_code_t * parent); + + /** + * Free an axiom_soap_fault_value + * @param fault_value pointer to soap_fault_value struct + * @param env Environment. MUST NOT be NULL + * + * @return VOID + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_fault_value_free( + axiom_soap_fault_value_t * fault_value, + const axutil_env_t * env); + + /** + * Get the text value of the soapenv:Value element directly under soapenv:Code element + * @param fault_value pointer to axiom_soap_fault_t + * @param env Environment. MUST NOT BE NULL + * @return text value + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_soap_fault_value_get_text( + axiom_soap_fault_value_t * fault_value, + const axutil_env_t * env); + + /** + * Set the text value of the soapenv:Value element directly under soapenv:Code element + * @param fault_value pointer to axiom_soap_fault_t + * @param env Environment. MUST NOT BE NULL + * @param text value to be set + * + * @return the base node + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_soap_fault_value_get_base_node( + axiom_soap_fault_value_t * fault_value, + const axutil_env_t * env); + + /** + * set the text value of soap_fault_value element + * @param fault_value pointer to soap fault value struct + * @param env environment MUST not be NULL + * @param text Text value to be set + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_value_set_text( + axiom_soap_fault_value_t * fault_value, + const axutil_env_t * env, + axis2_char_t * text); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_SOAP_FAULT_VALUE_H */ diff --git a/axiom/include/axiom_soap_header.h b/axiom/include/axiom_soap_header.h new file mode 100644 index 0000000..f0ed2f5 --- /dev/null +++ b/axiom/include/axiom_soap_header.h @@ -0,0 +1,205 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_HEADER_H +#define AXIOM_SOAP_HEADER_H + +/** + * @file axiom_soap_header.h + * @brief axiom_soap_header struct + */ +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap_header axiom_soap_header_t; + + struct axiom_soap_header_block; + struct axiom_soap_builder; + + /** + * @defgroup axiom_soap_header soap header + * @ingroup axiom_soap + * @{ + */ + + AXIS2_EXTERN axiom_soap_header_t *AXIS2_CALL + axiom_soap_header_create_with_parent( + const axutil_env_t * env, + struct axiom_soap_envelope *envelope); + + /** + * Free an axiom_soap_header + * @param header pointer to soap_header struct + * @param env Environment. MUST NOT be NULL + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_header_free( + axiom_soap_header_t * header, + const axutil_env_t * env); + + /** + * create a new axiom_soap_header_block_t struct initialized with the + * specified name and adds it to passed axiom_soap_header_t struct. + * @param header pointer to soap_header struct + * @param env Environment. MUST NOT be NULL + * @param localName the localname of the SOAP header block + * @param ns the namespace of the SOAP header block + * @return The newly created axiom_soap_header_block_t struct + */ + AXIS2_EXTERN struct axiom_soap_header_block *AXIS2_CALL + + axiom_soap_header_add_header_block( + axiom_soap_header_t * header, + const axutil_env_t * env, + const axis2_char_t * localname, + axiom_namespace_t * ns); + + /** + * returns a hash_table of all the soap_header_block_t struct in this + * soap_header_t object that have the the specified actor. An + * actor is a global attribute that indicates the intermediate parties to + * whom the message should be sent. An actor receives the message and then + * sends it to the next actor. The default actor is the ultimate intended + * recipient for the message, so if no actor attribute is set in a + * axiom_soap_header_t struct the message is sent to its ultimate + * destination. + * @param header pointer to soap_header struct + * @param env Environment. MUST NOT be NULL + * @param role the role value for the examination + * + * @return hash_table of all the soap_header_block_t struct + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axiom_soap_header_examine_header_blocks( + axiom_soap_header_t * header, + const axutil_env_t * env, + axis2_char_t * param_role); + + /** + * returns an arraylist of header_blocks which has a given namesapce uri + * @param header pointer to soap_header struct + * @param env Environment. MUST NOT be NULL + * @param ns_uri namespace uri + * @return pointer to axutil_array_list_t, or null if no header_blocks with + * given namespace uri exists + * The returned array_list must be freed by the user. + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axiom_soap_header_get_header_blocks_with_namespace_uri( + axiom_soap_header_t * header, + const axutil_env_t * env, + const axis2_char_t * ns_uri); + + /** + * returns an iterator to iterate through all soap header block's om nodes + * @param header pointer to soap_header struct + * @param env Environment. MUST NOT be NULL + * @returns axiom_children_qname_iterator_t or null if no header blocks + * present + */ + AXIS2_EXTERN axiom_children_qname_iterator_t *AXIS2_CALL + axiom_soap_header_examine_all_header_blocks( + axiom_soap_header_t * header, + const axutil_env_t * env); + + /** + * returns an iterator to iterate through all header blocks om_nodes + * with the matching role attribute + * @param header pointer to soap_header struct + * @param env Environment. MUST NOT be NULL + * @param role + * @returns iterator or null if no header blocks present with matching + * role attribute + */ + AXIS2_EXTERN axiom_children_with_specific_attribute_iterator_t + *AXIS2_CALL + axiom_soap_header_extract_header_blocks( + axiom_soap_header_t * header, + const axutil_env_t * env, + axis2_char_t * role); + + /** + * returns the axiom_node_t struct wrapped in soap_header + * @param header pointer to soap_header struct + * @param env Environment. MUST NOT be NULL + * + * @return the base node of the SOAP header + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_soap_header_get_base_node( + axiom_soap_header_t * header, + const axutil_env_t * env); + + /** + * return the soap_version of this soap_header + * @param header pointer to soap_header struct + * @param env Environment. MUST NOT be NULL + * + * @return AXIOM_SOAP11 or AXIOM_SOAP12 + */ + AXIS2_EXTERN int AXIS2_CALL + axiom_soap_header_get_soap_version( + axiom_soap_header_t * header, + const axutil_env_t * env); + + /** + * Get all the SOAP headers + * @param header pointer to soap_header struct + * @param env Environment. MUST NOT be NULL + * + * @returns a hash table of all header_blocks in this header + * the returned hash is a readonly hash should not be modified + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axiom_soap_header_get_all_header_blocks( + axiom_soap_header_t * header, + const axutil_env_t * env); + + /** + * remove header block that matches to the given qname + * qname should not be null + * @param header pointer to soap_header struct + * @param env Environment. MUST NOT be NULL + * + * @return status of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_header_remove_header_block( + axiom_soap_header_t * header, + const axutil_env_t * env, + axutil_qname_t * qname); + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIOM_SOAP_HEADER_H */ diff --git a/axiom/include/axiom_soap_header_block.h b/axiom/include/axiom_soap_header_block.h new file mode 100644 index 0000000..30ba4b0 --- /dev/null +++ b/axiom/include/axiom_soap_header_block.h @@ -0,0 +1,228 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP_HEADER_BLOCK_H +#define AXIOM_SOAP_HEADER_BLOCK_H + +/** + * @file axiom_soap_header_block.h + * @brief axiom_soap_header_block struct + */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap_header_block axiom_soap_header_block_t; + + /** + * @defgroup axiom_soap_header_block soap header block + * @ingroup axiom_soap + * @{ + */ + + /** + * creates a soap struct + * @param env Environment. MUST NOT be NULL + * this is an internal function. + * + * @return the created SOAP header block + */ + AXIS2_EXTERN axiom_soap_header_block_t *AXIS2_CALL + axiom_soap_header_block_create_with_parent( + const axutil_env_t * env, + const axis2_char_t * localname, + axiom_namespace_t * ns, + struct axiom_soap_header *parent); + + /** + * Free an axiom_soap_header_block + * @param header_block pointer to soap_header_block struct + * @param env Environment. MUST NOT be NULL + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_soap_header_block_free( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env); + + /** + * Set the SOAP role + * @param header_block pointer to soap_header_block struct + * @param env Environment. MUST NOT be NULL + * @param uri the role URI + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_header_block_set_role( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env, + axis2_char_t * uri); + + /** + * Set the mustunderstand attribute of the SOAP header + * If must_understand=TRUE its set to 1, otherwise set to 0 + * @param header_block pointer to soap_header_block struct + * @param env Environment. MUST NOT be NULL + * @param must_understand SOAP mustunderstand attribute value + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_header_block_set_must_understand_with_bool( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env, + axis2_bool_t must_understand); + + /** + * Set the SOAP mustunderstand attribute + * @param header_block pointer to soap_header_block struct + * @param env Environment. MUST NOT be NULL + * @param must_understand SOAP mustunderstand attribute + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_header_block_set_must_understand_with_string( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env, + axis2_char_t * must_understand); + + /** + * To check the SOAP mustunderstand attribute + * If must_understand=TRUE its set to 1, otherwise set to 0 + * @param header_block pointer to soap_header_block struct + * @param env Environment. MUST NOT be NULL + * + * @return AXIS2_TRUE if mustunderstand is set true. AXIS2_FALSE otherwise + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_soap_header_block_get_must_understand( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env); + + /** + * To chk if the SOAP header is processed or not + * @param header_block pointer to soap_header_block struct + * @param env Environment. MUST NOT be NULL + * + * @return AXIS2_TRUE if checked AXIS2_FALSE otherwise + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_soap_header_block_is_processed( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env); + + /** + * Set the SOAP header as processed + * @param header_block pointer to soap_header_block struct + * @param env Environment. MUST NOT be NULL + * + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_header_block_set_processed( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env); + + /** + * Get the SOAP role of the header block + * @param header_block pointer to soap_header_block struct + * @param env Environment. MUST NOT be NULL + * + * @return the SOAP role of the header block + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_soap_header_block_get_role( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env); + + /** + * Set the attribute of the header block + * @param header_block pointer to soap_header_block struct + * @param env Environment. MUST NOT be NULL + * @param attr_name the attribute name + * @param attr_value the attribute value + * @param soap_envelope_namespace_uri the namsepace URI value + * + * @return satus of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_header_block_set_attribute( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env, + const axis2_char_t * attr_name, + const axis2_char_t * attr_value, + const axis2_char_t * soap_envelope_namespace_uri); + + /** + * Get the attribute of the header block + * @param header_block pointer to soap_header_block struct + * @param env Environment. MUST NOT be NULL + * @param attr_name the attribute name + * @param the namespace URI of the SOAP envelope + * + * @return the attribute of the header block + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_soap_header_block_get_attribute( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env, + const axis2_char_t * attr_name, + const axis2_char_t * soap_envelope_namespace_uri); + + /** + * Get the base node of the header block + * @param header_block pointer to soap_header_block struct + * @param env Environment. MUST NOT be NULL + * + * @return the base node of the of the header block + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_soap_header_block_get_base_node( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env); + + /** + * Get the SOAP version of the header block + * @param header_block pointer to soap_header_block struct + * @param env Environment. MUST NOT be NULL + * + * @return the SOAP version of the header block + */ + AXIS2_EXTERN int AXIS2_CALL + axiom_soap_header_block_get_soap_version( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIOM_SOAP_HEADER_BLOCK_H */ diff --git a/axiom/include/axiom_stax_builder.h b/axiom/include/axiom_stax_builder.h new file mode 100644 index 0000000..fb4a1ec --- /dev/null +++ b/axiom/include/axiom_stax_builder.h @@ -0,0 +1,154 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_STAX_BUILDER_H +#define AXIOM_STAX_BUILDER_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_stax_builder stax builder + * @ingroup axiom_om + * @{ + */ + + typedef struct axiom_stax_builder axiom_stax_builder_t; + + /** + * Creates an stax builder + * @param environment Environment. MUST NOT be NULL. + * @param parser parser to be used with builder. The builder + * will take ownership of the parser. + * @return a pointer to the newly created builder struct. + */ + AXIS2_EXTERN axiom_stax_builder_t *AXIS2_CALL + axiom_stax_builder_create( + const axutil_env_t * env, + axiom_xml_reader_t * parser); + + /** + * Builds the next node from stream. Moves pull parser forward and reacts + * to events. + * @param builder pointer to stax builder struct to be used + * @param environment Environment. MUST NOT be NULL. + * @return a pointer to the next node, or NULL if there are no more nodes. + * On erros sets the error and returns NULL. + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_stax_builder_next( + struct axiom_stax_builder *builder, + const axutil_env_t * env); + + /** + * Discards the element that is being built currently. + * @param environment Environment. MUST NOT be NULL, . + * @param builder pointer to stax builder struct to be used + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_stax_builder_discard_current_element( + struct axiom_stax_builder *builder, + const axutil_env_t * env); + + /** + * Free the build struct instance and its associated document,axiom tree. + * @param builder pointer to builder struct + * @param env environment, MUST NOT be NULL + * @return status of the op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_stax_builder_free( + struct axiom_stax_builder *builder, + const axutil_env_t * env); + + /** + * Free the build struct instance and its associated document. + does not free the associated axiom tree. + * @param builder pointer to builder struct + * @param env environment, MUST NOT be NULL + * @return status of the op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_stax_builder_free_self( + struct axiom_stax_builder *builder, + const axutil_env_t * env); + + /** Gets the document associated with the builder + * @param builder axiom_stax_builder + * @param env environment + * @return pointer to document struct associated with builder + * NULL if there is no document associated with the builder, + * NULL if an error occured. + */ + AXIS2_EXTERN axiom_document_t *AXIS2_CALL + axiom_stax_builder_get_document( + struct axiom_stax_builder *builder, + const axutil_env_t * env); + + /** + * builder is finished building om structure + * @param builder pointer to stax builder struct to be used + * @param environment Environment. MUST NOT be NULL. + * + * @return AXIS2_TRUE if is complete or AXIS2_FALSE otherwise + */ + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axiom_stax_builder_is_complete( + struct axiom_stax_builder *builder, + const axutil_env_t * env); + + /** + * moves the reader to next event and returns the token returned by the xml_reader , + * @param builder pointer to STAX builder struct to be used + * @param environment Environment. MUST NOT be NULL. + * @return next event axiom_xml_reader_event_types. Returns -1 on error + */ + AXIS2_EXTERN int AXIS2_CALL + axiom_stax_builder_next_with_token( + struct axiom_stax_builder *builder, + const axutil_env_t * env); + + AXIS2_EXTERN axiom_xml_reader_t *AXIS2_CALL + axiom_stax_builder_get_parser( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + axiom_stax_builder_set_cache( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env, + axis2_bool_t enable_cache); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_STAX_BUILDER_H */ diff --git a/axiom/include/axiom_text.h b/axiom/include/axiom_text.h new file mode 100644 index 0000000..3768d90 --- /dev/null +++ b/axiom/include/axiom_text.h @@ -0,0 +1,265 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_TEXT_H +#define AXIOM_TEXT_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_text text + * @ingroup axiom_om + * @{ + */ + + typedef struct axiom_text axiom_text_t; + + /** + * Creates a new text struct + * @param env Environment. + * @param parent parent of the new node. Optinal, can be NULL. + * The parent element must be of type AXIOM_ELEMENT + * @param value Text value. Optinal, can be NULL. + * @param comment_node This is an out parameter. cannot be NULL. + * Returns the node corresponding to the text struct created. + * Node type will be set to AXIOM_TEXT + * @return pointer to newly created text struct + */ + AXIS2_EXTERN axiom_text_t *AXIS2_CALL + axiom_text_create( + const axutil_env_t * env, + axiom_node_t * parent, + const axis2_char_t * value, + axiom_node_t ** node); + + /** + * Creates a new text struct + * @param env Environment. + * @param parent parent of the new node. Optinal, can be NULL. + * The parent element must be of type AXIOM_ELEMENT + * @param value Text value string. Optinal, can be NULL. + * @param comment_node This is an out parameter. cannot be NULL. + * Returns the node corresponding to the text struct created. + * Node type will be set to AXIOM_TEXT + * @return pointer to newly created text struct + */ + AXIS2_EXTERN axiom_text_t *AXIS2_CALL + axiom_text_create_str( + const axutil_env_t * env, + axiom_node_t * parent, + axutil_string_t * value, + axiom_node_t ** node); + + /** + * Creates a new text struct for binary data (MTOM) + * @param env Environment. + * @param parent parent of the new node. Optinal, can be NULL. + * The parent element must be of type AXIOM_ELEMENT + * @param data_handler data handler. Optinal, can be NULL. + * @param comment_node This is an out parameter. cannot be NULL. + * Returns the node corresponding to the text struct created. + * Node type will be set to AXIOM_TEXT + * @return pointer to newly created text struct + */ + AXIS2_EXTERN axiom_text_t *AXIS2_CALL + axiom_text_create_with_data_handler( + const axutil_env_t * env, + axiom_node_t * parent, + axiom_data_handler_t * data_handler, + axiom_node_t ** node); + + /** + * Free an axiom_text struct + * @param env environment. + * @param om_text pointer to om text struct to be freed. + * @return satus of the op. AXIS2_SUCCESS on success + * AXIS2_FAILURE on error. + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_text_free( + struct axiom_text *om_text, + const axutil_env_t * env); + + /** + * Serialize op + * @param env environment. + * @param om_text pointer to om text struct to be serialized. + * @param om_output AXIOM output handler to be used in serializing. + * @return satus of the op. AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_text_serialize( + struct axiom_text *om_text, + const axutil_env_t * env, + axiom_output_t * om_output); + + /** + * Sets the text value + * @param om_text om_text struct + * @param env environment. + * @param value text + * @return status of the op. AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_text_set_value( + struct axiom_text *om_text, + const axutil_env_t * env, + const axis2_char_t * value); + + /** + * Gets text value + * @param om_text om_text struct + * @param env environment. + * @return text value , NULL is returned if there is no text value. + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axiom_text_get_value( + struct axiom_text *om_text, + const axutil_env_t * env); + + /** + * Sets the text value + * @param om_text om_text struct + * @param env environment. + * @param value string + * @return status of the op. AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_text_set_value_str( + struct axiom_text *om_text, + const axutil_env_t * env, + axutil_string_t * value); + + /** + * Gets text value from the text node even when MTOM optimized + * @param om_text om_text struct + * @param env environment. + * @return text value base64 encoded text when MTOM optimized, + * NULL is returned if there is no text value. + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axiom_text_get_text( + axiom_text_t * om_text, + const axutil_env_t * env); + + /** + * Gets text value + * @param om_text om_text struct + * @param env environment. + * @return text valu stringe , NULL is returned if there is no text value. + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + axiom_text_get_value_str( + struct axiom_text *om_text, + const axutil_env_t * env); + + /** + * Sets optimized + * @param om_text pointer to om_text struct + * @param env environment + * @optimize optimize value + * @returns AXIS2_SUCCESS + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_text_set_optimize( + struct axiom_text *om_text, + const axutil_env_t * env, + axis2_bool_t optimize); + + /** + * @param om_text text value + * @param env environment + * @param is_binary + * @returns AXIS2_SUCCESS + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_text_set_is_binary( + struct axiom_text *om_text, + const axutil_env_t * env, + const axis2_bool_t is_binary); + + /** + * Get the data handler of the OM text + * @param om_text pointer to the OM Text struct + * @param environment Environment. MUST NOT be NULL + * + * @return the data handler of the OM text + */ + AXIS2_EXTERN axiom_data_handler_t *AXIS2_CALL + axiom_text_get_data_handler( + struct axiom_text *om_text, + const axutil_env_t * env); + + /** + * Get the Content ID of the OM text + * @param om_text pointer to the OM Text struct + * @param environment Environment. MUST NOT be NULL + * + * @return the content id of the OM text + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_text_get_content_id( + struct axiom_text *om_text, + const axutil_env_t * env); + + /** + * Set the content ID of the OM text + * @param om_text pointer to the OM Text struct + * @param environment Environment. MUST NOT be NULL + * @param content_id the content ID + * @return status of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_text_set_content_id( + axiom_text_t * om_text, + const axutil_env_t * env, + const axis2_char_t * content_id); + + /** + * Sets the boolean value indicating if the binary data associated with the text + * node should be sent in SOAP with Attachment (SwA) format or not. + * @param om_text text node + * @param env environment + * @param is_swa bool value, AXIS2_TRUE means use SwA format, else AXIS2_FALSE + * @returns AXIS2_SUCCESS + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_text_set_is_swa( + struct axiom_text *om_text, + const axutil_env_t * env, + const axis2_bool_t is_swa); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_TEXT_H */ diff --git a/axiom/include/axiom_util.h b/axiom/include/axiom_util.h new file mode 100644 index 0000000..9c87877 --- /dev/null +++ b/axiom/include/axiom_util.h @@ -0,0 +1,396 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_UTIL_H +#define AXIOM_UTIL_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + /** + * After calling this method the variable child points to + * the node of the returning element + * @param ele_node axiom node + * @param env environment, MUST not be NULL + * @param uri uri + * return the first child element which has the given uri + */ + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_first_child_element_with_uri( + axiom_node_t * ele_node, + const axutil_env_t * env, + axis2_char_t * uri, + axiom_node_t ** child); + /** + * After calling this method next_node will point to the + * previous sibling node to the returning node + * @param ele_node axiom node + * @param env environment, MUST not be NULL + * @param uri uri + * @param next_node + * return the next sibling element to the element which contains + * the give namespace uri + */ + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_next_sibling_element_with_uri( + axiom_node_t * ele_node, + const axutil_env_t * env, + axis2_char_t * uri, + axiom_node_t ** next_node); + /** + * @param eleaxiom node + * @param env environment, MUST not be NULL + * @param ele_node + * @param child_node + * return the first child element this calls the method + * axiom_element_get_first_child_element + * + */ + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_first_child_element( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axiom_node_t ** child_node); + /** + * @param ele axiom element + * @param env environment, MUST not be NULL + * @param ele_node + * @param child_node + * return the last child element of the given element ele_node + */ + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_last_child_element( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axiom_node_t ** child_node); + /** + * @param ele axiom node + * @param env environment, MUST not be NULL + * @param ele_node + * @param next_node + * return the first child element which has the given uri + */ + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_next_sibling_element( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axiom_node_t ** next_node); + /** + * @param ele axiom element + * @param env environment, MUST not be NULL + * @param ele_node axiom node + * @param localname localname to find the first child element + * @param child_node + * + * return the first child element from ele_node which contains the + * given local name + */ + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_first_child_element_with_localname( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axiom_node_t ** child_node); + /** + * @param ele + * @param env environment, MUST not be NULL + * @param ele_node axiom node + * @param localname to find the last child element + * @param child_node + * return the last child element which having the given local name + */ + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_last_child_element_with_localname( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axiom_node_t ** child_node); + /** + * @param ele + * @param env environment, MUST not be NULL + * @param ele_node axiom node + * @param localname to find the last child element + * @param next_node + * return the next sibling element which is having the given local name + */ + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_next_siblng_element_with_localname( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axiom_node_t ** next_node); + /** + * @param ele + * @param env environment, MUST not be NULL + * @param ele_node axiom node + * @param localname to find the last child element + * @param uri uri to of the namespace to find the first element + * @param next_node + * return the first child element which is having the given local + * name and the given namespace uri + */ + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_first_child_element_with_uri_localname( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axis2_char_t * uri, + axiom_node_t ** child_node); + /** + * @param ele + * @param env environment, MUST not be NULL + * @param ele_node axiom node + * @param localname to find the last child element + * @param uri uri of the namespace to find the last element + * @param next_node + * return the last child element which is having the given local name and + * the given namespace uri + */ + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_last_child_element_with_uri_localname( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axis2_char_t * uri, + axiom_node_t ** child_node); + /** + * @param ele + * @param env environment, MUST not be NULL + * @param ele_node axiom node + * @param localname to find the last child element + * @param uri uri of the namespace to find the last element + * @param next_node + * return next sibling element which is having the given local name and + * the given namespace uri + */ + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_next_sibling_element_with_uri_localname( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axis2_char_t * uri, + axiom_node_t ** next_node); + /** + * @param ele + * @param env environment, MUST not be NULL + * @param ele_node axiom node + * @param names local names to find the child element + * @param child_node + * return the first child element which is having all the localnames given + */ + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_first_child_element_with_localnames( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axutil_array_list_t * names, + axiom_node_t ** child_node); + /** + * @param ele + * @param env environment, MUST not be NULL + * @param ele_node axiom node + * @param names local names to find the last child element + * @param child_node + * return the last child element which is having all the localnames given + */ + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_last_child_element_with_localnames( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axutil_array_list_t * names, + axiom_node_t ** child_node); + /** + * @param ele + * @param env environment, MUST not be NULL + * @param ele_node axiom node + * @param names local names to find the next sibling + * @param child_node + * return the next sibling element which is having all the localnames given + */ + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_next_siblng_element_with_localnames( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axutil_array_list_t * names, + axiom_node_t ** next_node); + /** + * @param ele + * @param env environment, MUST not be NULL + * @param ele_node + * @param localname local name to find the first child + * @param attr_name attribute name to find first child + * @param attr_value attribute value of attr_name attribute + * @param child_node + * return the first child element which is having the given local + * name and the given attribute (attribute name and attribute value) + */ + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_first_child_element_with_localname_attr( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axis2_char_t * attr_name, + axis2_char_t * attr_value, + axiom_node_t ** child_node); + /** + * @param ele + * @param env environment, MUST not be NULL + * @param ele_node + * @param localname local name to find the last child + * @param attr_name attribute name to find last child + * @param attr_value attribute value of attr_name attribute + * @param child_node + * return the last child element which is having the given local + * name and the given attribute (attribute name and attribute value) + */ + + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_last_child_element_with_localname_attr( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axis2_char_t * attr_name, + axis2_char_t * attr_value, + axiom_node_t ** child_node); + /** + * @param ele + * @param env environment, MUST not be NULL + * @param ele_node + * @param localname local name to find the next sibling child + * @param attr_name attribute name to find the next sibling child + * @param attr_value attribute value of attr_name attribute + * @param child_node + * return the next sibling child element which is having the given local + * name and the given attribute (attribute name and attribute value) + */ + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + axiom_util_get_next_siblng_element_with_localname_attr( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axis2_char_t * attr_name, + axis2_char_t * attr_value, + axiom_node_t ** next_node); + /** + * @param node axiom node + * @param env environment, MUST not be NULL + * + * return the element text of axiom_node + */ + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_util_get_child_text( + axiom_node_t * node, + const axutil_env_t * env); + /** + * @param node axiom node + * @param env environment, MUST not be NULL + * + * return the local name of axiom_node + */ + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_util_get_localname( + axiom_node_t * node, + const axutil_env_t * env); + /** + * @param om_node axiom node + * @param env environment, MUST not be NULL + * + * return the namespace uri of the give node variable om_node if + * there's no namespace in that particular om_node this method + * returns NULL + */ + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_util_get_node_namespace_uri( + axiom_node_t * om_node, + const axutil_env_t * env); + /** + * @param om_ele axiom node + * @param env environment, MUST not be NULL + * @param om_node + * return all the child element using the method + * axiom_child_element_iterator_create + */ + + AXIS2_EXTERN axiom_child_element_iterator_t *AXIS2_CALL + axiom_util_get_child_elements( + axiom_element_t * om_ele, + const axutil_env_t * env, + axiom_node_t * om_node); + + AXIS2_EXTERN axiom_document_t *AXIS2_CALL + axiom_util_new_document( + const axutil_env_t * env, + const axutil_uri_t * uri); + + AXIS2_EXTERN axiom_node_t* AXIS2_CALL + axiom_util_get_node_by_local_name( + const axutil_env_t *env, + axiom_node_t *node, + axis2_char_t *local_name); + + /** + * Creates a clone of given node + * @param env environment, MUST not be NULL + * @param node node to be cloned + * @return cloned node + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_util_clone_node( + const axutil_env_t *env, + axiom_node_t *node); + +#ifdef __cplusplus + } +#endif +#endif /* AXIOM_UTIL_H */ diff --git a/axiom/include/axiom_xml_reader.h b/axiom/include/axiom_xml_reader.h new file mode 100644 index 0000000..c9450a8 --- /dev/null +++ b/axiom/include/axiom_xml_reader.h @@ -0,0 +1,706 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef AXIOM_XML_READER_H +#define AXIOM_XML_READER_H + +/** + *@file axiom_xml_reader.h + *@brief this is the parser abstraction layer for axis2 + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_xml_reader_ops axiom_xml_reader_ops_t; + typedef struct axiom_xml_reader axiom_xml_reader_t; + + /** + * @defgroup axiom_parser parser + * @ingroup axiom + * @{ + * @} + */ + + /** + * @defgroup axiom_xml_reader XML reader + * @ingroup axiom_parser + * @{ + */ + + typedef enum axiom_xml_reader_event_types + { + AXIOM_XML_READER_START_DOCUMENT = 0, /* */ + AXIOM_XML_READER_START_ELEMENT, /* */ + AXIOM_XML_READER_END_ELEMENT, /* */ + AXIOM_XML_READER_SPACE, /* *//*event is for value, not for x*/ + AXIOM_XML_READER_EMPTY_ELEMENT, /* */ + AXIOM_XML_READER_CHARACTER, /* text*//*event is for text, not for x*/ + AXIOM_XML_READER_ENTITY_REFERENCE, + AXIOM_XML_READER_COMMENT, /* */ + AXIOM_XML_READER_PROCESSING_INSTRUCTION, + AXIOM_XML_READER_CDATA, + AXIOM_XML_READER_DOCUMENT_TYPE + } axiom_xml_reader_event_types; + + /** + * \brief AXIOM_XML_READER ops + * Encapsulator struct for ops of axiom_xml_reader + */ + + struct axiom_xml_reader_ops + { + + /** + * causes the reader to read the next parse event. + * returns the event just read + * @param parser axiom_xml_reader struct + * @param env axutil_environment, MUST NOT be NULL + * @returns one of the events defined in + * axiom_xml_reader_event_types + */ + + int( + AXIS2_CALL + * next)( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * free pull_parser + * @param parser axiom_xml_reader struct + * @param env axutil_environment MUST NOT be NULL + * @returns axis2_status_code + */ + + void( + AXIS2_CALL + * free)( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * Get the Number of attributes in the current element + * @param parser axiom_xml_reader + * @param env axutil_environment, MUST NOT be NULL. + * @returns Number of attributes , AXIS2_FAILURE on error + */ + + int( + AXIS2_CALL + * get_attribute_count)( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** This is used to get an attribute's localname using an index relative to + * current element.The iterations are not zero based. + * To access the first attribute use 1 for parameter i + * @param parser parser struct + * @param env environment struct + * @param i attribute index + * @returns the attribute localname + * caller must free the value using axiom_xml_reader_xml_free macro + */ + axis2_char_t *( + AXIS2_CALL + * get_attribute_name_by_number)( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + + /** This is used to get an attribute's prefix using an index relative to + * current element. The iterations are not zero based. + * To access the first attribute use 1 for parameter i + * @param parser parser struct + * @param env environment, MUST NOT be NULL + * @param i attribute index. + * @returns the attribute prefix, returns NULL on error, + * caller must free the value using axiom_xml_reader_xml_free macro + */ + + axis2_char_t *( + AXIS2_CALL + * get_attribute_prefix_by_number)( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + + /** Gets an attribute's value using an index relative to + * current element. The iterations are not zero based. + * To access the first attribute use 1 for parameter i + * @param parser parser struct + * @param env environment, MUST NOT be NULL. + * @param i attribute index + * @returns the attribute value, returns NULL on error, + * caller must free the value using axiom_xml_reader_xml_free macro + */ + + axis2_char_t *( + AXIS2_CALL + * get_attribute_value_by_number)( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + + /** Gets an attribute's namespace uri using an index relative to + * current element. The iterations are not zero based. + * To access the first attribute use 1 for parameter i + * @param parser parser struct + * @param env environment struct + * @param i attribute index + * @returns the attribute value, returns NULL on error + * caller must free the value using axiom_xml_reader_xml_free macro + */ + + axis2_char_t *( + AXIS2_CALL + * get_attribute_namespace_by_number)( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + + /** Returns the text value of current element + * @param parser pointer to parser + * @param env environment, MUST not be NULL + * @returns Text Value, NULL on error + * caller must free the value using axiom_xml_reader_xml_free macro + */ + axis2_char_t *( + AXIS2_CALL + * get_value)( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * Returns the namespace count of current element + * @param parser parser struct + * @param env environment + * @returns namespace count of current element, + */ + int( + AXIS2_CALL + * get_namespace_count)( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * Accesses the namespace uri of the namespaces declared in current element + * using an index + * @param parser parser struct + * @param env environment + * @param i index + * @returns namespace uri of corresponding namespace + * caller must free the value using axiom_xml_reader_xml_free macro + */ + axis2_char_t *( + AXIS2_CALL + * get_namespace_uri_by_number)( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + + /** + * Accesses the namespace prefix of the namespaces declared in current element + * using an index + * @param parser parser struct + * @param env environment + * @param i index + * @returns namespace prefix of corresponding namespace + * caller must free the value using axiom_xml_reader_xml_free macro + */ + axis2_char_t *( + AXIS2_CALL + * get_namespace_prefix_by_number)( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + + /** + * Used to obtain the current element prefix + * @param parser parser struct + * @param env environment struct + * @returns prefix , NULL on error + * caller must free the value using axiom_xml_reader_xml_free macro + */ + axis2_char_t *( + AXIS2_CALL + * get_prefix)( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * Used to obtain the current element localname + * @param parser parser struct + * @param env environment struct + * @returns localname , NULL on error + * caller must free the value using axiom_xml_reader_xml_free macro + */ + axis2_char_t *( + AXIS2_CALL + * get_name)( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * Used to get the processingInstruction target + * @param parser parser struct + * @param env environment, MUST NOT be NULL. + * @returns target value of processingInstruction + * caller must free the value using axiom_xml_reader_xml_free macro + */ + axis2_char_t *( + AXIS2_CALL + * get_pi_target)( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * Gets the processingInstruction data + * @param parser parser struct + * @param env environment, MUST NOT be NULL. + * @returns data of processingInstruction + * caller must free the value using axiom_xml_reader_xml_free macro + */ + axis2_char_t *( + AXIS2_CALL + * get_pi_data)( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * Used to get the DTD + * @param parser pointer to pull parser struct + * @param env environment, MUST NOT be NULL. + * @return text of doctype declaration. NULL is returns of no data + * exists. + */ + axis2_char_t *( + AXIS2_CALL + * get_dtd)( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * Free function , this function wraps the underlying parser's + * xml free function. For freeing values obatined by calling + * pull parser api methods, This function must be used. + * @param parser pointer to axiom_xml_reader + * @param env environment, MUST NOT be NULL. + * @param data data values to be destroyed + * @return status of the op, AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + void( + AXIS2_CALL + * xml_free)( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + void *data); + + /** + * Gets the char set encoding of the parser + * @param parser xml parser + * @param env environment + * @returns char set encoding string or NULL in failure + */ + + axis2_char_t *( + AXIS2_CALL + * get_char_set_encoding)( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** Returns the namespace uri associated with current node */ + axis2_char_t *( + AXIS2_CALL + * get_namespace_uri)( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + axis2_char_t *( + AXIS2_CALL + * get_namespace_uri_by_prefix)( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + axis2_char_t * prefix); + + void *( + AXIS2_CALL + * get_context)( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + axis2_char_t *( + AXIS2_CALL + * get_current_buffer)( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + }; + + /** + * @brief axiom_xml_reader struct + * Axis2 OM pull_parser + */ + struct axiom_xml_reader + { + const axiom_xml_reader_ops_t *ops; + }; + + /** + * Creates an instance of axiom_xml_reader to parse + * a file using an xml document in a file system + * @param env environment struct, must not be null + * @param filename url of an xml document + * @returns a pointer to xml_pull_parser_t struct + * NULL on error with error code set in the environment's error + */ + AXIS2_EXTERN axiom_xml_reader_t *AXIS2_CALL + axiom_xml_reader_create_for_file( + const axutil_env_t * env, + char *filename, + const axis2_char_t * encoding); + + /** + * This create an instance of axiom_xml_reader to + * parse a xml document in a buffer. It takes a callback + * function that takes a buffer and the size of the buffer + * The user must implement a function that takes in buffer + * and size and fill the buffer with specified size + * with xml stream, parser will call this function to fill the + * buffer on the fly while parsing. + * @param env environment MUST NOT be NULL. + * @param read_input_callback() callback function that fills + * a char buffer. + * @param close_input_callback() callback function that closes + * the input stream. + * @param ctx, context can be any data that needs to be passed + * to the callback method. + * @param encoding encoding scheme of the xml stream + */ + AXIS2_EXTERN axiom_xml_reader_t *AXIS2_CALL + axiom_xml_reader_create_for_io( + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK, + AXIS2_CLOSE_INPUT_CALLBACK, + void *ctx, + const axis2_char_t * encoding); + + /** + * Create an axiom_xml_reader_t using a buffer, which is the xml input + * @param env environment, MUST not be NULL + * @param container any data that needs to passed to the corresponding + * parser's create_for_memory method. The reader does not take ownership + * of this data. + * @param size size of the buffer + * @param encoding encoding of the xml + * @return pointer to axiom_xml_reader_t struct on success , NULL otherwise + */ + AXIS2_EXTERN axiom_xml_reader_t *AXIS2_CALL + axiom_xml_reader_create_for_memory( + const axutil_env_t * env, + void *container, + int size, + const axis2_char_t * encoding, + int type); + + /** + * init function initializes the parser. When using libxml2 parser, this function + * is needed to initialize libxml2. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_reader_init(void + ); + + /** + * parser cleanup function. This function is used to clean up the globals of libxml2 + * parser. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_reader_cleanup(void + ); + + /** + * while parsing through this method is calling for each and every + * time it parse a charactor.This is the atomic method which parse charactors. + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return + */ + AXIS2_EXTERN int AXIS2_CALL + axiom_xml_reader_next( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_xml_reader_free( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * free method for xml reader + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return + */ + AXIS2_EXTERN int AXIS2_CALL + axiom_xml_reader_get_attribute_count( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return number of attributes in an element + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_attribute_name_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return the attribute name by number + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_attribute_prefix_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return the attribute prefix by number + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_attribute_value_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return attribute value by number + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_attribute_namespace_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return attribute namespace by number + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_value( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return value of the element + */ + AXIS2_EXTERN int AXIS2_CALL + axiom_xml_reader_get_namespace_count( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return the number of namespaces in an element + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_namespace_uri_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return uri or the namespace by number + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_namespace_prefix_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return prefix of the namespace by number + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_prefix( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return namespace prefix + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_name( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return name of the element + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_pi_target( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_pi_data( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_dtd( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_xml_reader_xml_free( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + void *data); + + /** + * free method for xml + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_char_set_encoding( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return charactor encoding + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_namespace_uri( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** + * + * @param parser pointer to the OM XML Reader struct + * @param env environment struct, must not be null + * + * @return + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_namespace_uri_by_prefix( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + axis2_char_t * prefix); + + AXIS2_EXTERN void *AXIS2_CALL + axiom_xml_reader_get_context( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_reader_get_current_buffer( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_XML_READER_H */ + + + + + + + + + + + + + + diff --git a/axiom/include/axiom_xml_writer.h b/axiom/include/axiom_xml_writer.h new file mode 100644 index 0000000..cddfc73 --- /dev/null +++ b/axiom/include/axiom_xml_writer.h @@ -0,0 +1,1014 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef AXIOM_XML_WRITER_H +#define AXIOM_XML_WRITER_H + +/** + *@file axiom_xml_writer.h + *@brief this is the parser abstraction layer for axis2 + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_xml_writer_ops axiom_xml_writer_ops_t; + typedef struct axiom_xml_writer axiom_xml_writer_t; + + /** + * @defgroup axiom_xml_writer XML writer + * @ingroup axiom_parser + * @{ + */ + + /** + * \brief axiom_xml_writer ops + * Encapsulator struct for ops of axiom_xml_writer + */ + + struct axiom_xml_writer_ops + { + + /** + * Free xml writer + * @param writer pointer to xml_writer struct to be freed + * @param env environment, MUST NOT be NULL. + * @returns status of the op. + * AXIS2_SUCCESS on success and AXIS2_FAILURE on error + */ + + void( + AXIS2_CALL + * free)( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + /** + * Write a start tag to output stream with localname. + * Internally the writer keeps track of the opened tags + * @param writer pointer to xml writer struct + * @param env environment. MUST NOT be NULL. + * @param localname localname of the tag, May not be NULL. + * @return the status of the op, AXIS2_SUCCESS on success + AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_start_element)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname); + + /** + * write an end tag to the output relying on the internal + * state of writer to determine the prefix and localname of + * the element + * @param writer xml_writer struct + * @param env environment, MUST NOT be NULL. + * @return status of the op. AXIS2_SUCCESS on success. + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * end_start_element)( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + /** + * Write an element tag with localname and namespace uri + * @param writer pointer to xml writer struct + * @param env environment struct + * @param localname localname of the tag, May not be null. + * @param namespace_uri the namespace URI of the the pefix + * to use.may not be null. + * @returns status of the op, AXIS2_SUCCESS on success. + * AXIS2_FAILURE on error + */ + axis2_status_t( + AXIS2_CALL + * write_start_element_with_namespace)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri); + + /** + * write a start tag to output + * @param writer pointer to xml_writer struct + * @param environment, MUST NOT be NULL. + * @param localname localname of the tag, May not be null. + * @param namespace_uri namespace to bind the prefix to + * @param prefix the prefix to the tag.May not be NULL. + * @return status of the op + AXIS2_SUCCESS on success. AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_start_element_with_namespace_prefix)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri, + axis2_char_t * prefix); + + /** + * write an element tag with localname + * @param writer xml_writer + * @param env environment + * @param localname localname + * @return status of the op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_empty_element)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname); + + /** + * write empty_element with localname and namespace uri. + * @param writer xml writer + * @param env environment + * @param localname localname + * @param namespace uri + * @return status of the op, AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + + axis2_status_t( + AXIS2_CALL + * write_empty_element_with_namespace)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri); + + /** + * write empty element with namespace uri and prefix + * @param writer xml_writer + * @param env environment + * @param localname localname + * @param namespace_uri namespace uri + * @param prefix prefix + * @return status of the op, AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_empty_element_with_namespace_prefix)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri, + axis2_char_t * prefix); + + /** + * write end tag with correct localname prefix resolved internally + * @param writer xml writer + * @param env environment + * @return status of the op, AXIS2_SUCCESS on success, + * AXIS2_FAILURE on failure + */ + axis2_status_t( + AXIS2_CALL + * write_end_element)( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + /** + * write end document + * @param writer xml writer + * @param env environment + * @return status of the op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_end_document)( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + /** + * write attribute with localname and value + * @param writer writer + * @param env environment + * @param localname localname + * @param value text value of attribute + * @return status of the op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_attribute)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value); + + /** + * @param writer + * @param env environment + * @param localname + * @param value text value of attribute + * @param namespace uri namespace uri + * @return status code of the op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_attribute_with_namespace)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value, + axis2_char_t * namespace_uri); + + /** + * @param writer xml_writer + * @param env environment + * @param localname localname + * @param value text value of attribute + * @param namespace uri namespaceuri + * @param prefix prefix + */ + axis2_status_t( + AXIS2_CALL + * write_attribute_with_namespace_prefix)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value, + axis2_char_t * namespace_uri, + axis2_char_t * prefix); + + /** + * @param writer xml_writer + * @param env environment + * @param prefix prefix + * @param namespace uri namespaceuri + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + + axis2_status_t( + AXIS2_CALL + * write_namespace)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * prefix, + axis2_char_t * namespace_uri); + + /** + * @param writer xml_writer + * @param env environment + * @param namespace uri namespaceuri + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + + axis2_status_t( + AXIS2_CALL + * write_default_namespace)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * namespace_uri); + + /** + * @param writer xml_writer + * @param env environment + * @param value value + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + + axis2_status_t( + AXIS2_CALL + * write_comment)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * value); + + /** + * @param writer xml_writer + * @param env environment + * @param target pi target + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + + axis2_status_t( + AXIS2_CALL + * write_processing_instruction)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * target); + + /** + * @param writer xml_writer + * @param env environment + * @param target pi target + * @param data pi data + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + + axis2_status_t( + AXIS2_CALL + * write_processing_instruction_data)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * target, + axis2_char_t * data); + + /** + * @param writer xml_writer + * @param env environment + * @param data cdata + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_cdata)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * data); + + /** + * @param writer xml_writer + * @param env environment + * @param dtd dtd + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_dtd)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * dtd); + + /** + * @param writer xml_writer + * @param env environment + * @param name name + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_entity_ref)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * name); + + /** + * @param writer xml_writer + * @param env environment + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_start_document)( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + /** + * @param writer xml_writer + * @param env environment + * @param version version + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_start_document_with_version)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * version); + + /** + * @param writer xml_writer + * @param env environment + * @param version version + * @param encoding encoding + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_start_document_with_version_encoding)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * version, + axis2_char_t * encoding); + + /** + * @param writer xml_writer + * @param env environment + * @param text text + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_characters)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * text); + + /** + * @param writer xml_writer + * @param env environment + * @param uri uri + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_char_t *( + AXIS2_CALL + * get_prefix)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri); + + /** + * @param writer xml_writer + * @param env environment + * @param prefix prefix + * @param uri uri + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * set_prefix)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * prefix, + axis2_char_t * uri); + + /** + * @param writer xml_writer + * @param env environment + * @param uri uri + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * set_default_prefix)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri); + + /** + * @param writer xml_writer + * @param env environment + * @param text text + * @param in_attr + * @return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error. + */ + axis2_status_t( + AXIS2_CALL + * write_encoded)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * text, + int in_attr); + + void *( + AXIS2_CALL + * get_xml)( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + unsigned int( + AXIS2_CALL + * get_xml_size)( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + int( + AXIS2_CALL + * get_type)( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + axis2_status_t( + AXIS2_CALL + * write_raw)( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * content); + axis2_status_t( + AXIS2_CALL + * flush)( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + }; + + /** + * @brief axis2_pull_parser struct + * Axis2 OM pull_parser + */ + + struct axiom_xml_writer + { + const axiom_xml_writer_ops_t *ops; + }; + + /** + * create function for axiom_xml_writer + * @param env environment + * @param filename filename + * @param encoding encoding + * @param is_prefix_default + * @param compression + * return xml writer wrapper structure + */ + AXIS2_EXTERN axiom_xml_writer_t *AXIS2_CALL + axiom_xml_writer_create( + const axutil_env_t * env, + axis2_char_t * filename, + axis2_char_t * encoding, + int is_prefix_default, + int compression); + + /** + * create fuction for xml writer for memory buffer + * @param env environment struct, must not be null + * @param env environment + * @param encoding encoding + * @param is_prefix_default + * @param compression + * @return xml writer wrapper structure. + */ + AXIS2_EXTERN axiom_xml_writer_t *AXIS2_CALL + axiom_xml_writer_create_for_memory( + const axutil_env_t * env, + axis2_char_t * encoding, + int is_prefix_default, + int compression, + int type); + + /** + * free method for axiom xml writer + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_xml_writer_free( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * @param localname local name of the start element + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_start_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname); + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_end_start_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_start_element_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * @param localname localname of the start element + * @param namespace_uri namespace uri of that element + * @param prefix prefix of that namespace + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_start_element_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri, + axis2_char_t * prefix); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * @param localname local name of the element + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_empty_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * @param localname local name of the element + * @param namespace_uri uri of the namespace + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_empty_element_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * @param localname local name of the element + * @param namespace_uri uri of the namespace + * @param prefix prefix of the namespace + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_empty_element_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri, + axis2_char_t * prefix); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_end_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_end_document( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * @param localname local name of the element + * @param value value of the element + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_attribute( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * @param localname local name of the element + * @param value value of the element + * @param uri of the namespace + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_attribute_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value, + axis2_char_t * namespace_uri); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * @param localname local name of the element + * @param value value of the element + * @param uri of the namespace + * @param prefix of the namespace + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_attribute_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value, + axis2_char_t * namespace_uri, + axis2_char_t * prefix); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * @param prefix prefix of the namespace + * @param uri of the namespace + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * prefix, + axis2_char_t * namespace_uri); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_default_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * namespace_uri); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_comment( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * value); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_processing_instruction( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * target); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_processing_instruction_data( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * target, + axis2_char_t * data); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_cdata( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * data); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_dtd( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * dtd); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_entity_ref( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * name); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_start_document( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_start_document_with_version( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * version); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_start_document_with_version_encoding( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * version, + axis2_char_t * encoding); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_characters( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * text); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axiom_xml_writer_get_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return prefix + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_set_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * prefix, + axis2_char_t * uri); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_set_default_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri); + + /** + * sets the default prefix + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_encoded( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * text, + int in_attr); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return + */ + AXIS2_EXTERN void *AXIS2_CALL + axiom_xml_writer_get_xml( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return + */ + AXIS2_EXTERN unsigned int AXIS2_CALL + axiom_xml_writer_get_xml_size( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return size of the xml + */ + AXIS2_EXTERN int AXIS2_CALL + axiom_xml_writer_get_type( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return type + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_write_raw( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * content); + + /** + * @param writer pointer to the OM XML Writer struct + * @param env environment struct, must not be null + * + * @return status of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_xml_writer_flush( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_XML_WRITER_H */ diff --git a/axiom/include/axiom_xpath.h b/axiom/include/axiom_xpath.h new file mode 100644 index 0000000..d2b0ee2 --- /dev/null +++ b/axiom/include/axiom_xpath.h @@ -0,0 +1,407 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_XPATH_H +#define AXIOM_XPATH_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_xpath_api api + * @ingroup axiom_xpath + * @{ + */ + + + /** + * Enable tracing + */ + +#define AXIOM_XPATH_DEBUG + + /** + * An error occured while evaluating the xpath expression + */ +#define AXIOM_XPATH_EVALUATION_ERROR 0 + +#define AXIOM_XPATH_ERROR_STREAMING_NOT_SUPPORTED 10 + + /* Typedefs */ + + /** + * XPath expression + * It includes the expression as a string and parsed data. + */ + typedef struct axiom_xpath_expression axiom_xpath_expression_t; + + /** + * The XPath context + * Keeps a reference to the context node or attribute, + * XPath expression, environment and result set. + */ + typedef struct axiom_xpath_context axiom_xpath_context_t; + + /** + * XPath result set + * Contains the result set and other information such as + * whether the expression was evaluated successfully. + */ + typedef struct axiom_xpath_result axiom_xpath_result_t; + + /** + * XPath result + * Stores type and value of the result. + */ + typedef struct axiom_xpath_result_node axiom_xpath_result_node_t; + + /** + * XPath result types + */ + typedef enum axiom_xpath_result_type_t + { + AXIOM_XPATH_TYPE_NODE = 0, + AXIOM_XPATH_TYPE_ATTRIBUTE, + AXIOM_XPATH_TYPE_NAMESPACE, + AXIOM_XPATH_TYPE_TEXT, + AXIOM_XPATH_TYPE_NUMBER, + AXIOM_XPATH_TYPE_BOOLEAN + } axiom_xpath_result_type_t; + + typedef int (*axiom_xpath_function_t)(axiom_xpath_context_t *context, + int np); + + /** + * XPath expression + */ + struct axiom_xpath_expression + { + /** XPath expression as a string */ + axis2_char_t* expr_str; + + /** Length of the expression */ + int expr_len; + + /** A cursor pointing to the position currently being parsed */ + int expr_ptr; + + /** Parsed expression in an array list*/ + axutil_array_list_t *operations; + + /** A pointer to the start operation in operations */ + int start; + }; + + /** + * XPath context + */ + struct axiom_xpath_context + { + /** Environment */ + const axutil_env_t *env; + + /** List of namespaces */ + axutil_hash_t *namespaces; + + /** Set of functions */ + axutil_hash_t *functions; + + /** Root node */ + axiom_node_t *root_node; + + /** Context node */ + axiom_node_t *node; + + /** Context attribute */ + axiom_attribute_t *attribute; + + /** Context attribute */ + axiom_namespace_t *ns; + + /** Context position */ + int position; + + /** Context size + * *Does not work location paths due to optimizations */ + int size; + + /** XPath expression */ + axiom_xpath_expression_t *expr; + + /** Streaming */ + axis2_bool_t streaming; + + /** Stack of processed items */ + axutil_stack_t *stack; + + /* TODO: + functions + variables + etc */ + }; + + /** + * XPath result set + */ + struct axiom_xpath_result + { + /** A flag indicating whether errors occured while evaluting XPath + * expression */ + int flag; + + /** An array list containing the set of results */ + axutil_array_list_t * nodes; + }; + + /** + * XPath result + */ + struct axiom_xpath_result_node + { + /** Type of result */ + axiom_xpath_result_type_t type; + + /** Value */ + void * value; + }; + + /** + * Compile an XPath expression + * + * @param env Environment must not be null + * @param xpath_expr A pointer to the XPath expression + * @return The parsed XPath expression. Returns NULL if an error occured + * while parsing. + */ + AXIS2_EXTERN axiom_xpath_expression_t * AXIS2_CALL axiom_xpath_compile_expression( + const axutil_env_t *env, + const axis2_char_t* xpath_expr); + + /** + * Create an empty XPath context + * + * @param env Environment must not be null + * @param root_node A pointer to the root of the tree + * @return The initialized XPath context. + */ + AXIS2_EXTERN axiom_xpath_context_t * AXIS2_CALL axiom_xpath_context_create( + const axutil_env_t *env, + axiom_node_t * root_node); + + /** + * Evaluate an parsed XPath expression. Different expressions could + * be evaluated on the same context, and same expression could be + * evaluated on multiple trees without recompiling. + * + * @param context XPath context must not be null + * @param xpath_expr XPath expression to be evaluated + * @return The set of results. + */ + AXIS2_EXTERN axiom_xpath_result_t * AXIS2_CALL axiom_xpath_evaluate( + axiom_xpath_context_t *context, + axiom_xpath_expression_t *xpath_expr); + + + /** + * Convert an XPath result to a boolean. + * If the result is a boolean the value of it is returned. + * If the result is a number, AXIS2_TRUE is + * returned if the value is not equal to 0 and AXIS2_FALSE otherwise. + * Otherwise AXIS2_TRUE is returned if the result is not NULL and AXIS2_FALSE otherwise. + * + * @param env Environment must not be null + * @param node A pointer to the XPath result + * @return The boolean value. + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL axiom_xpath_cast_node_to_boolean( + const axutil_env_t *env, + axiom_xpath_result_node_t * node); + + /** + * Convert an XPath result to a number. + * If the result is a boolean, 1 is returned if it's true and 0 otherwise. + * If the result is a number the value of it is returned. + * Otherwise AXIS2_TRUE is returned if the result is not NULL and AXIS2_FALSE otherwise. + * + * @param env Environment must not be null + * @param node A pointer to the XPath result + * @return The numerical value. + */ + AXIS2_EXTERN double AXIS2_CALL axiom_xpath_cast_node_to_number( + const axutil_env_t *env, + axiom_xpath_result_node_t * node); + + /** + * Convert an XPath result to text. + * If the result is a boolean, "true" is returned if it's true and "false" otherwise. + * If the result is a number the text representation of it is returned. + * If the result is a text the value of it is returned. + * If the result is an axiom node, the text value of it is returned + * If the result is an axiom attribue, the text value of it is returned + * + * @param env Environment must not be null + * @param node A pointer to the XPath result + * @return The text value. + */ + AXIS2_EXTERN axis2_char_t * AXIS2_CALL axiom_xpath_cast_node_to_string( + const axutil_env_t *env, + axiom_xpath_result_node_t * node); + + /** + * Convert an XPath result to an axiom node. + * If the result is an axiom node it is returned and NULL otherwise. + * + * @param env Environment must not be null + * @param node A pointer to the XPath result + * @return The axiom node. + */ + AXIS2_EXTERN axiom_node_t * AXIS2_CALL axiom_xpath_cast_node_to_axiom_node( + const axutil_env_t *env, + axiom_xpath_result_node_t * node); + + + /** + * Free XPath context + * + * @param env Environment must not be null + * @param context XPath context must not be null + */ + AXIS2_EXTERN void AXIS2_CALL axiom_xpath_free_context( + const axutil_env_t *env, + axiom_xpath_context_t *context); + + /** + * Free XPath expression + * + * @param env Environment must not be null + * @param xpath_expr XPath expression must not be null + */ + AXIS2_EXTERN void AXIS2_CALL axiom_xpath_free_expression( + const axutil_env_t *env, + axiom_xpath_expression_t * xpath_expr); + + /** + * Free XPath result set + * + * @param env Environment must not be null + * @param result XPath result set must not be null + */ + AXIS2_EXTERN void AXIS2_CALL axiom_xpath_free_result( + const axutil_env_t *env, + axiom_xpath_result_t* result); + + /** + * Registers a XPath namespace + * + * @param context XPath Context, must not be null + * @param ns AXIOM namespace, must not be null + */ + AXIS2_EXTERN void AXIS2_CALL axiom_xpath_register_namespace( + axiom_xpath_context_t *context, + axiom_namespace_t *ns); + + /** + * Get a registered namespace by the prefix. + * If there is no namespace registered by the given prefix NULL will be returned + * + * @param context XPath Context, must not be null + * @param prefix Prefix of the namespace, must not be null + * @return The namespace corresponding to the prefix. + */ + AXIS2_EXTERN axiom_namespace_t * AXIS2_CALL axiom_xpath_get_namespace( + axiom_xpath_context_t *context, + axis2_char_t *prefix); + + /** + * Clears all registered XPath namespaces + * + * @param context XPath Context, must not be null + */ + AXIS2_EXTERN void AXIS2_CALL axiom_xpath_clear_namespaces( + axiom_xpath_context_t *context); + + /** + * Evaluates an XPath expression on streaming XML. + * Not all expressions can be evaluated on streaming XML. + * If the expression cannot be evaluated on streaming XML NULL will be returned. + * + * @param context XPath Context, must not be null + * @param xpath_expr XPath expression to be evaluated + */ + AXIS2_EXTERN axiom_xpath_result_t * AXIS2_CALL axiom_xpath_evaluate_streaming( + axiom_xpath_context_t *context, + axiom_xpath_expression_t *xpath_expr); + + /** + * Checks whether the given expression can be evaluated on streaming XML. + * If it is possible AXIS2_TRUE will be retuned; AXIS2_FALSE otherwise. + * + * @param env Axis2 environment, must not be null + * @param expr Complied XPath expression, must not be null + * @return A boolean indicating whether the expression can be evaluated on streaming XML. + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL axiom_xpath_streaming_check( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Setup the XPath core function library + * + * @param context XPath Context, must not be null + */ + AXIS2_EXTERN void AXIS2_CALL axiom_xpath_register_default_functions_set( + axiom_xpath_context_t *context); + + /** + * Registers a custom XPath function http://www.w3.org/TR/xpath#corelib + * + * @param context XPath Context, must not be null + * @param name Name of the function, must not be null + * @param func Pointer to the function, must not be null + */ + AXIS2_EXTERN void AXIS2_CALL axiom_xpath_register_function( + axiom_xpath_context_t *context, + axis2_char_t *name, + axiom_xpath_function_t func); + + /** + * Retrive a pointer to a registered funciton by the function name. + * If there is no function registered by the given name, NULL will be returned. + * + * @param context XPath Context, must not be null + * @param name Name of the function, must not be null + * @return The corresponding function. + */ + AXIS2_EXTERN axiom_xpath_function_t AXIS2_CALL axiom_xpath_get_function( + axiom_xpath_context_t *context, + axis2_char_t *name); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/axiom/src/Makefile.am b/axiom/src/Makefile.am new file mode 100644 index 0000000..a3e9472 --- /dev/null +++ b/axiom/src/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = parser attachments soap util ${XPATH_DIR} om + diff --git a/axiom/src/attachments/Makefile.am b/axiom/src/attachments/Makefile.am new file mode 100644 index 0000000..e4ec8fd --- /dev/null +++ b/axiom/src/attachments/Makefile.am @@ -0,0 +1,15 @@ +noinst_LTLIBRARIES = libaxis2_attachments.la +AM_CPPFLAGS = $(CPPFLAGS) +libaxis2_attachments_la_SOURCES = mime_part.c \ + data_handler.c \ + mime_body_part.c \ + mime_parser.c + +libaxis2_attachments_la_LIBADD = ../../../util/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/parser \ + -I ../../../util/include + +EXTRA_DIST = axiom_mime_body_part.h + diff --git a/axiom/src/attachments/axiom_mime_body_part.h b/axiom/src/attachments/axiom_mime_body_part.h new file mode 100644 index 0000000..a925679 --- /dev/null +++ b/axiom/src/attachments/axiom_mime_body_part.h @@ -0,0 +1,121 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_MIME_BODY_PART_H +#define AXIOM_MIME_BODY_PART_H + +/** + * @file axiom_mime_body_part.h + * @brief axis2 mime_body_part interface + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_mime_body_part axiom_mime_body_part_t; + + /** @defgroup axiom_mime_body_part + * @ingroup axiom_mime_body_part + * @{ + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_mime_body_part_add_header( + axiom_mime_body_part_t * mime_body_part, + const axutil_env_t * env, + const axis2_char_t * name, + const axis2_char_t * value); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_mime_body_part_set_data_handler( + axiom_mime_body_part_t * mime_body_part, + const axutil_env_t * env, + axiom_data_handler_t * data_handler); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_mime_body_part_write_to( + axiom_mime_body_part_t * mime_body_part, + const axutil_env_t * env, + axis2_byte_t ** output_stream, + int *output_stream_size); + + /** Deallocate memory + * @return status code + */ + AXIS2_EXTERN void AXIS2_CALL + axiom_mime_body_part_free( + axiom_mime_body_part_t * mime_body_part, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_mime_body_part_write_to_list( + axiom_mime_body_part_t *mime_body_part, + const axutil_env_t *env, + axutil_array_list_t *list); + + /** + * Creates mime_body_part struct + * @return pointer to newly created mime_body_part + */ + AXIS2_EXTERN axiom_mime_body_part_t *AXIS2_CALL + axiom_mime_body_part_create( + const axutil_env_t * env); + + /** + * Creates mime_body_part struct from a om_text + * @return pointer to newly created mime_body_part + */ + + AXIS2_EXTERN axiom_mime_body_part_t *AXIS2_CALL + axiom_mime_body_part_create_from_om_text( + const axutil_env_t *env, + axiom_text_t *text); + + +#define AXIOM_MIME_BODY_PART_FREE(mime_body_part, env) \ + axiom_mime_body_part_free (mime_body_part, env) + +#define AXIOM_MIME_BODY_PART_ADD_HEADER(mime_body_part, env, name, value) \ + axiom_mime_body_part_add_header (mime_body_part, env, name, value) + +#define AXIOM_MIME_BODY_PART_SET_DATA_HANDLER(mime_body_part, env, data_handler) \ + axiom_mime_body_part_set_data_handler (mime_body_part, env, data_handler) + +#define AXIOM_MIME_BODY_PART_WRITE_TO(mime_body_part, env, output_stream, output_stream_size) \ + axiom_mime_body_part_write_to (mime_body_part, env, output_stream, output_stream_size) + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIOM_MIME_BODY_PART_H */ diff --git a/axiom/src/attachments/data_handler.c b/axiom/src/attachments/data_handler.c new file mode 100644 index 0000000..3be8a9d --- /dev/null +++ b/axiom/src/attachments/data_handler.c @@ -0,0 +1,572 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +struct axiom_data_handler +{ + /* The content type */ + axis2_char_t *mime_type; + + /* If in a file then the file name*/ + axis2_char_t *file_name; + + /* If it is in a buffer then the buffer */ + axis2_byte_t *buffer; + + /* The length of the buffer */ + size_t buffer_len; + + /* Is this a data_handler with a file name or a buffer*/ + axiom_data_handler_type_t data_handler_type; + + /* When parsing whether we have cached it or not */ + axis2_bool_t cached; + + /* The Content Id */ + axis2_char_t *mime_id; + + /* In the case of sending callback this is required */ + void *user_param; + +}; + +/* Creates the data_handler. The file name is not mandatory */ + +AXIS2_EXTERN axiom_data_handler_t *AXIS2_CALL +axiom_data_handler_create( + const axutil_env_t *env, + const axis2_char_t *file_name, + const axis2_char_t *mime_type) +{ + axiom_data_handler_t *data_handler = NULL; + + AXIS2_ENV_CHECK(env, NULL); + data_handler = (axiom_data_handler_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_data_handler_t)); + + if(!data_handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create data handler"); + return NULL; + } + + data_handler->mime_type = NULL; + data_handler->file_name = NULL; + data_handler->buffer = NULL; + data_handler->buffer_len = 0; + /* By default, a Data Handler is of type Buffer */ + data_handler->data_handler_type = AXIOM_DATA_HANDLER_TYPE_BUFFER; + data_handler->cached = AXIS2_FALSE; + data_handler->mime_id = NULL; + data_handler->user_param = NULL; + + if(mime_type) + { + data_handler->mime_type = axutil_strdup(env, mime_type); + if(!(data_handler->mime_type)) + { + axiom_data_handler_free(data_handler, env); + return NULL; + } + } + if(file_name) + { + data_handler->file_name = axutil_strdup(env, file_name); + if(!(data_handler->file_name)) + { + axiom_data_handler_free(data_handler, env); + return NULL; + } + data_handler->data_handler_type = AXIOM_DATA_HANDLER_TYPE_FILE; + } + + return data_handler; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_data_handler_free( + axiom_data_handler_t *data_handler, + const axutil_env_t *env) +{ + if(data_handler->file_name) + { + AXIS2_FREE(env->allocator, data_handler->file_name); + } + + if(data_handler->mime_type) + { + AXIS2_FREE(env->allocator, data_handler->mime_type); + } + + if(data_handler->buffer) + { + AXIS2_FREE(env->allocator, data_handler->buffer); + } + + if(data_handler->mime_id) + { + AXIS2_FREE(env->allocator, data_handler->mime_id); + } + + if(data_handler) + { + AXIS2_FREE(env->allocator, data_handler); + } + + return; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_data_handler_get_content_type( + axiom_data_handler_t *data_handler, + const axutil_env_t *env) +{ + return data_handler->mime_type; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_data_handler_set_content_type( + axiom_data_handler_t *data_handler, + const axutil_env_t *env, + const axis2_char_t *mime_type) +{ + if(data_handler->mime_type) + { + AXIS2_FREE(env->allocator, data_handler->mime_type); + } + data_handler->mime_type = axutil_strdup(env, mime_type); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_data_handler_get_cached( + axiom_data_handler_t *data_handler, + const axutil_env_t *env) +{ + return data_handler->cached; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_data_handler_set_cached( + axiom_data_handler_t *data_handler, + const axutil_env_t *env, + axis2_bool_t cached) +{ + data_handler->cached = cached; +} + +AXIS2_EXTERN axis2_byte_t *AXIS2_CALL +axiom_data_handler_get_input_stream( + axiom_data_handler_t *data_handler, + const axutil_env_t *env) +{ + return data_handler->buffer; +} + +AXIS2_EXTERN size_t AXIS2_CALL +axiom_data_handler_get_input_stream_len( + axiom_data_handler_t *data_handler, + const axutil_env_t *env) +{ + return data_handler->buffer_len; +} + +/* With MTOM caching support this function is no longer used + * Because this will load whole file in to buffer. So for large + * attachment this is not wise */ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_data_handler_read_from( + axiom_data_handler_t *data_handler, + const axutil_env_t *env, + axis2_byte_t **output_stream, + size_t *output_stream_size) +{ + if(data_handler->data_handler_type == AXIOM_DATA_HANDLER_TYPE_BUFFER) + { + *output_stream = data_handler->buffer; + *output_stream_size = data_handler->buffer_len; + } + else if(data_handler->data_handler_type == AXIOM_DATA_HANDLER_TYPE_FILE + && data_handler->file_name) + { + FILE *f = NULL; + axis2_byte_t *byte_stream = NULL; + axis2_byte_t *temp_byte_stream = NULL; + axis2_byte_t *read_stream = NULL; + int byte_stream_size = 0; + int temp_byte_stream_size = 0; + int read_stream_size = 0; + int count = 0; + struct stat stat_p; + + f = fopen(data_handler->file_name, "rb"); + if(!f) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error opening file %s for reading", + data_handler->file_name); + return AXIS2_FAILURE; + } + + if(stat(data_handler->file_name, &stat_p) == -1) + { + fclose(f); + return AXIS2_FAILURE; + } + else if(stat_p.st_size == 0) + { + fclose(f); + *output_stream = NULL; + *output_stream_size = 0; + return AXIS2_SUCCESS; + } + + do + { + read_stream_size = stat_p.st_size; + read_stream = AXIS2_MALLOC(env->allocator, (read_stream_size) * sizeof(axis2_byte_t)); + if(!read_stream) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create binary stream"); + if(byte_stream) + { + AXIS2_FREE(env->allocator, byte_stream); + } + fclose(f); + return AXIS2_FAILURE; + } + count = (int)fread(read_stream, 1, read_stream_size, f); + /* The count lies within the int range */ + if(ferror(f)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in reading file %s", + data_handler->file_name); + if(byte_stream) + { + AXIS2_FREE(env->allocator, byte_stream); + } + if(read_stream) + { + AXIS2_FREE(env->allocator, read_stream); + } + fclose(f); + return AXIS2_FAILURE; + } + + /* copy the read bytes */ + if(count > 0) + { + if(byte_stream) + { + temp_byte_stream = byte_stream; + temp_byte_stream_size = byte_stream_size; + byte_stream_size = temp_byte_stream_size + count; + byte_stream = AXIS2_MALLOC(env->allocator, (byte_stream_size) + * sizeof(axis2_byte_t)); + if(!byte_stream) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create binary stream"); + if(read_stream) + { + AXIS2_FREE(env->allocator, read_stream); + } + if(temp_byte_stream) + { + AXIS2_FREE(env->allocator, temp_byte_stream); + } + fclose(f); + return AXIS2_FAILURE; + } + + memcpy(byte_stream, temp_byte_stream, temp_byte_stream_size); + memcpy(byte_stream + temp_byte_stream_size, read_stream, count); + + if(read_stream) + { + AXIS2_FREE(env->allocator, read_stream); + read_stream_size = 0; + } + if(temp_byte_stream) + { + AXIS2_FREE(env->allocator, temp_byte_stream); + temp_byte_stream = NULL; + temp_byte_stream_size = 0; + } + } + else + { + byte_stream = read_stream; + byte_stream_size = read_stream_size; + read_stream = NULL; + read_stream_size = 0; + } + } + else if(read_stream) + { + AXIS2_FREE(env->allocator, read_stream); + } + } + while(!feof(f)); + + fclose(f); + data_handler->buffer = byte_stream; + data_handler->buffer_len = byte_stream_size; + *output_stream = byte_stream; + *output_stream_size = byte_stream_size; + } + else + { + /* Data Handler File Name is missing */ + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_data_handler_set_binary_data( + axiom_data_handler_t *data_handler, + const axutil_env_t *env, + axis2_byte_t *input_stream, + size_t input_stream_len) +{ + data_handler->buffer = input_stream; + data_handler->buffer_len = input_stream_len; + return AXIS2_SUCCESS; +} + +/* This function will write the data in the buffer + * to a file. When caching is being used this will + * not be called , because the parser it self cache + * the attachment while parsing */ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_data_handler_write_to( + axiom_data_handler_t *data_handler, + const axutil_env_t *env) +{ + if(data_handler->file_name) + { + FILE *f = NULL; + int count = 0; + + f = fopen(data_handler->file_name, "wb"); + if(!f) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error opening file %s for writing", + data_handler->file_name); + return AXIS2_FAILURE; + } + + count = (int)fwrite(data_handler->buffer, 1, data_handler->buffer_len, f); + /* The count lies within the int range */ + + if(ferror(f)) + { + fclose(f); + return AXIS2_FAILURE; + } + fflush(f); + fclose(f); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_data_handler_set_file_name( + axiom_data_handler_t *data_handler, + const axutil_env_t *env, + axis2_char_t *file_name) +{ + if(data_handler->file_name) + { + AXIS2_FREE(env->allocator, data_handler->file_name); + data_handler->file_name = NULL; + } + + if(file_name) + { + data_handler->file_name = axutil_strdup(env, file_name); + if(!(data_handler->file_name)) + { + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_data_handler_get_file_name( + axiom_data_handler_t *data_handler, + const axutil_env_t *env) +{ + if(data_handler->file_name) + { + return data_handler->file_name; + } + else + { + return NULL; + } +} + +/* This method will add the data_handler binary data to the array_list. + * If it is a buffer the part type is buffer. otherwise it is a file. In the + * case of file the array_list have just the file name and the size. The content + * is not loaded to the memory. + */ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_data_handler_add_binary_data( + axiom_data_handler_t *data_handler, + const axutil_env_t *env, + axutil_array_list_t *list) + +{ + axiom_mime_part_t *binary_part = NULL; + + binary_part = axiom_mime_part_create(env); + + if(!binary_part) + { + return AXIS2_FAILURE; + } + + if(data_handler->data_handler_type == AXIOM_DATA_HANDLER_TYPE_BUFFER) + { + binary_part->part = (axis2_byte_t *)AXIS2_MALLOC(env->allocator, (data_handler->buffer_len) + * sizeof(axis2_byte_t)); + memcpy(binary_part->part, data_handler->buffer, data_handler->buffer_len); + + binary_part->part_size = data_handler->buffer_len; + binary_part->type = AXIOM_MIME_PART_BUFFER; + } + + /* In the case of file we first calculate the file size + * and then add the file name */ + + else if(data_handler->data_handler_type == AXIOM_DATA_HANDLER_TYPE_FILE + && data_handler->file_name) + { + struct stat stat_p; + + if(stat(data_handler->file_name, &stat_p) == -1) + { + return AXIS2_FAILURE; + } + else if(stat_p.st_size == 0) + { + return AXIS2_SUCCESS; + } + else + { + binary_part->file_name = (axis2_char_t *)axutil_strdup(env, data_handler->file_name); + binary_part->part_size = stat_p.st_size; + binary_part->type = AXIOM_MIME_PART_FILE; + } + } + /* In the case of Callback the user should specify the callback name in the + * configuration file. We just set the correct type. Inside the transport + * it will load the callback and send the attachment appropriately */ + + else if(data_handler->data_handler_type == AXIOM_DATA_HANDLER_TYPE_CALLBACK) + { + binary_part->type = AXIOM_MIME_PART_CALLBACK; + binary_part->user_param = data_handler->user_param; + } + + else + { + /* Data Handler File Name is missing */ + return AXIS2_FAILURE; + } + + /* Finaly we add the binary details to the list */ + + axutil_array_list_add(list, env, binary_part); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_data_handler_get_mime_id( + axiom_data_handler_t *data_handler, + const axutil_env_t *env) +{ + return data_handler->mime_id; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_data_handler_set_mime_id( + axiom_data_handler_t *data_handler, + const axutil_env_t *env, + const axis2_char_t *mime_id) +{ + if(data_handler->mime_id) + { + AXIS2_FREE(env->allocator, data_handler->mime_id); + } + data_handler->mime_id = axutil_strdup(env, mime_id); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_data_handler_type_t AXIS2_CALL +axiom_data_handler_get_data_handler_type( + axiom_data_handler_t *data_handler, + const axutil_env_t *env) +{ + return data_handler->data_handler_type; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_data_handler_set_data_handler_type( + axiom_data_handler_t *data_handler, + const axutil_env_t *env, + axiom_data_handler_type_t data_handler_type) +{ + data_handler->data_handler_type = data_handler_type; + return; +} + +AXIS2_EXTERN void *AXIS2_CALL +axiom_data_handler_get_user_param( + axiom_data_handler_t *data_handler, + const axutil_env_t *env) +{ + return data_handler->user_param; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_data_handler_set_user_param( + axiom_data_handler_t *data_handler, + const axutil_env_t *env, + void *user_param) +{ + data_handler->user_param = user_param; + return; +} + diff --git a/axiom/src/attachments/mime_body_part.c b/axiom/src/attachments/mime_body_part.c new file mode 100644 index 0000000..186acdb --- /dev/null +++ b/axiom/src/attachments/mime_body_part.c @@ -0,0 +1,284 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axiom_mime_body_part.h" +#include +#include +#include + +struct axiom_mime_body_part +{ + /* hash map to hold header name, value pairs */ + axutil_hash_t *header_map; + axiom_data_handler_t *data_handler; +}; + +/* This method just create a mime_body_part. It does not + * fill the header map. + */ + +AXIS2_EXTERN axiom_mime_body_part_t *AXIS2_CALL +axiom_mime_body_part_create( + const axutil_env_t *env) +{ + axiom_mime_body_part_t *mime_body_part = NULL; + + AXIS2_ENV_CHECK(env, NULL); + mime_body_part = (axiom_mime_body_part_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_mime_body_part_t)); + + if(!mime_body_part) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create MIME body part"); + return NULL; + } + + mime_body_part->header_map = NULL; + mime_body_part->data_handler = NULL; + + mime_body_part->header_map = axutil_hash_make(env); + if(!(mime_body_part->header_map)) + { + axiom_mime_body_part_free(mime_body_part, env); + return NULL; + } + + return mime_body_part; +} + +/* This method will create the mime_body_part and fill the header map with + * default information. Default information are for binary attachments. + * Attachment information is taken from the information in data_handler in passed + * om_text. + */ + +AXIS2_EXTERN axiom_mime_body_part_t *AXIS2_CALL +axiom_mime_body_part_create_from_om_text( + const axutil_env_t *env, + axiom_text_t *text) +{ + axiom_data_handler_t *data_handler = NULL; + axiom_mime_body_part_t *mime_body_part = NULL; + axis2_char_t *content_id = NULL; + axis2_char_t *temp_content_id = NULL; + const axis2_char_t *content_type = AXIOM_MIME_TYPE_OCTET_STREAM; + + mime_body_part = axiom_mime_body_part_create(env); + if(!mime_body_part) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "MIME body part creation failed"); + return NULL; + } + + /* Take the data_handler which is set by the sending applocation. */ + + data_handler = axiom_text_get_data_handler(text, env); + + if(data_handler) + { + content_type = axiom_data_handler_get_content_type(data_handler, env); + } + + AXIOM_MIME_BODY_PART_SET_DATA_HANDLER(mime_body_part, env, data_handler); + content_id = (axis2_char_t *)"<"; + content_id = axutil_stracat(env, content_id, axiom_text_get_content_id(text, env)); + temp_content_id = axutil_stracat(env, content_id, ">"); + + AXIS2_FREE(env->allocator, content_id); + content_id = temp_content_id; + + /* Adding the content-id */ + AXIOM_MIME_BODY_PART_ADD_HEADER(mime_body_part, env, AXIOM_MIME_HEADER_CONTENT_ID, content_id); + + /* Adding the content-type */ + AXIOM_MIME_BODY_PART_ADD_HEADER(mime_body_part, env, AXIOM_MIME_HEADER_CONTENT_TYPE, + axutil_strdup(env, content_type)); + + /* Adding the content-transfer encoding */ + AXIOM_MIME_BODY_PART_ADD_HEADER(mime_body_part, env, + AXIOM_MIME_HEADER_CONTENT_TRANSFER_ENCODING, axutil_strdup(env, + AXIOM_MIME_CONTENT_TRANSFER_ENCODING_BINARY)); + + return mime_body_part; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_mime_body_part_free( + axiom_mime_body_part_t *mime_body_part, + const axutil_env_t *env) +{ + if(mime_body_part->header_map) + { + axutil_hash_index_t *hash_index = NULL; + const void *key = NULL; + void *value = NULL; + for(hash_index = axutil_hash_first(mime_body_part->header_map, env); hash_index; hash_index + = axutil_hash_next(env, hash_index)) + { + axutil_hash_this(hash_index, &key, NULL, &value); + if(value) + { + AXIS2_FREE(env->allocator, value); + } + } + + axutil_hash_free(mime_body_part->header_map, env); + mime_body_part->header_map = NULL; + } + + if(mime_body_part) + { + AXIS2_FREE(env->allocator, mime_body_part); + } + + return; +} + +/* This method will add a mime_header to the hash */ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_mime_body_part_add_header( + axiom_mime_body_part_t *mime_body_part, + const axutil_env_t *env, + const axis2_char_t *name, + const axis2_char_t *value) +{ + AXIS2_PARAM_CHECK(env->error, name, AXIS2_FAILURE); + + if(!mime_body_part->header_map) + { + return AXIS2_FAILURE; + } + axutil_hash_set(mime_body_part->header_map, name, AXIS2_HASH_KEY_STRING, value); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_mime_body_part_set_data_handler( + axiom_mime_body_part_t *mime_body_part, + const axutil_env_t *env, + axiom_data_handler_t *data_handler) +{ + mime_body_part->data_handler = data_handler; + return AXIS2_SUCCESS; +} + +/* This method will fill the array_list with binary and binary_beader information. + * If the binary is in a file this will not load the file to the memory. Because + * that will cause performance degradation when the file size is large. Instead + * this will add file information to the list so that when writing the message + * through transport_sender it can send the file by chunk. + */ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_mime_body_part_write_to_list( + axiom_mime_body_part_t *mime_body_part, + const axutil_env_t *env, + axutil_array_list_t *list) +{ + axutil_hash_index_t *hash_index = NULL; + const void *key = NULL; + void *value = NULL; + axis2_char_t *header_str = NULL; + axis2_char_t *temp_header_str = NULL; + int header_str_size = 0; + axis2_status_t status = AXIS2_FAILURE; + axiom_mime_part_t *mime_header_part = NULL; + + /* We have the mime headers in the hash with thier keys + * So first concatenate them to a one string */ + + for(hash_index = axutil_hash_first(mime_body_part->header_map, env); hash_index; hash_index + = axutil_hash_next(env, hash_index)) + { + axutil_hash_this(hash_index, &key, NULL, &value); + if(key && value) + { + /* First conactenate to the already conacatenated stuff */ + + temp_header_str = axutil_stracat(env, header_str, (axis2_char_t *)key); + if(header_str) + { + AXIS2_FREE(env->allocator, header_str); + } + header_str = temp_header_str; + temp_header_str = axutil_stracat(env, header_str, ": "); + AXIS2_FREE(env->allocator, header_str); + header_str = temp_header_str; + + /* Add the new stuff */ + temp_header_str = axutil_stracat(env, header_str, (axis2_char_t *)value); + AXIS2_FREE(env->allocator, header_str); + header_str = temp_header_str; + + /* Next header will be in a new line. So lets add it */ + + temp_header_str = axutil_stracat(env, header_str, AXIS2_CRLF); + AXIS2_FREE(env->allocator, header_str); + header_str = temp_header_str; + } + } + + /* If there is a data handler that's mean there is an attachment. Attachment + * will always start after an additional new line . So let's add it .*/ + + if(mime_body_part->data_handler) + { + temp_header_str = axutil_stracat(env, header_str, AXIS2_CRLF); + AXIS2_FREE(env->allocator, header_str); + header_str = temp_header_str; + } + + if(header_str) + { + header_str_size = axutil_strlen(header_str); + } + + /* Now we have the complete mime_headers string for a particular mime part. + * First wrap it as a mime_part_t .Then add it to the array list so + * later through the transport this can be written to the wire. */ + + mime_header_part = axiom_mime_part_create(env); + + if(mime_header_part) + { + mime_header_part->part = (axis2_byte_t *)header_str; + mime_header_part->part_size = header_str_size; + mime_header_part->type = AXIOM_MIME_PART_BUFFER; + } + else + { + return AXIS2_FAILURE; + } + + axutil_array_list_add(list, env, mime_header_part); + + /* Then if the data_handler is there let's add the binary data, may be + * buffer , may be file name and information. + */ + + if(mime_body_part->data_handler) + { + status = axiom_data_handler_add_binary_data(mime_body_part->data_handler, env, list); + if(status != AXIS2_SUCCESS) + { + return status; + } + } + return AXIS2_SUCCESS; +} diff --git a/axiom/src/attachments/mime_parser.c b/axiom/src/attachments/mime_parser.c new file mode 100644 index 0000000..f36286c --- /dev/null +++ b/axiom/src/attachments/mime_parser.c @@ -0,0 +1,2304 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct axiom_mime_parser +{ + /* This will keep the attachment and its info*/ + axutil_hash_t *mime_parts_map; + + /* This is the actual SOAP part len */ + size_t soap_body_len; + + /* The SOAP part of the message */ + axis2_char_t *soap_body_str; + + /* The size of the buffer we give to the callback to + * read data */ + size_t buffer_size; + + /* The number of buffers */ + int max_buffers; + + /* The attachment dir name, in the case of caching */ + axis2_char_t *attachment_dir; + + /*A pointer to the caching callback */ + axiom_mtom_caching_callback_t *mtom_caching_callback; + + /* The caching callback name specified */ + axis2_char_t *callback_name; + + axis2_char_t **buf_array; + + size_t *len_array; + + int current_buf_num; + + axis2_bool_t end_of_mime; + + axis2_char_t *mime_boundary; + +}; + +struct axiom_search_info +{ + /*String need to be searched*/ + const axis2_char_t *search_str; + + /*The buffers and the lengths need to be searched*/ + axis2_char_t *buffer1; + size_t len1; + axis2_char_t *buffer2; + size_t len2; + + /*Flag to keep what type of search is this buffer has done*/ + axis2_bool_t primary_search; + + /*The offset where we found the pattern entirely in one buffer*/ + size_t match_len1; + + /*when pattern contains in two buffers the length of partial pattern + in buffer2 */ + size_t match_len2; + + /*Whether we need caching or not*/ + axis2_bool_t cached; + + /*A pointer to a user provided storage to which we cache the attachment*/ + void *handler; + + /* Size of the binary when writing to the buffer*/ + size_t binary_size; +}; + +typedef struct axiom_search_info axiom_search_info_t; + +#define AXIOM_MIME_PARSER_CONTENT_ID "content-id" +#define AXIOM_MIME_PARSER_CONTENT_TYPE "content-type" + +#define AXIOM_MIME_PARSER_END_OF_MIME_MAX_COUNT 100 + +static axis2_char_t * +axiom_mime_parser_search_for_soap( + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK callback, + void *callback_ctx, + int *buf_num, + size_t *len_array, + axis2_char_t **buf_array, + axiom_search_info_t *search_info, + size_t size, + axis2_char_t *mime_boundary, + axiom_mime_parser_t *mime_parser); + +static axis2_char_t * +axiom_mime_parser_search_for_crlf( + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK callback, + void *callback_ctx, + int *buf_num, + size_t *len_array, + axis2_char_t **buf_array, + axiom_search_info_t *search_info, + size_t size, + axiom_mime_parser_t *mime_parser); + +static size_t +axiom_mime_parser_calculate_part_len( + const axutil_env_t *env, + int buf_num, + size_t *len_list, + int maker, + axis2_char_t *pos, + axis2_char_t *buf); + +static axis2_char_t * +axiom_mime_parser_create_part( + const axutil_env_t *env, + size_t part_len, + int buf_num, + size_t *len_list, + int marker, + axis2_char_t *pos, + axis2_char_t **buf_list, + axiom_mime_parser_t *mime_parser); + +static axis2_char_t * +axiom_mime_parser_search_string( + axiom_search_info_t *search_info, + const axutil_env_t *env); + +static axis2_char_t * +axiom_mime_parser_search_for_attachment( + axiom_mime_parser_t *mime_parser, + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK callback, + void *callback_ctx, + int *buf_num, + size_t *len_array, + axis2_char_t **buf_array, + axiom_search_info_t *search_info, + size_t size, + axis2_char_t *mime_boundary, + axis2_char_t *mime_id, + void *user_param); + +static axis2_status_t +axiom_mime_parser_store_attachment( + const axutil_env_t *env, + axiom_mime_parser_t *mime_parser, + axis2_char_t *mime_id, + axis2_char_t *mime_type, + axis2_char_t *mime_binary, + size_t mime_binary_len, + axis2_bool_t cached); + +static void +axiom_mime_parser_clear_buffers( + const axutil_env_t *env, + axis2_char_t **buf_list, + int free_from, + int free_to); + +static axis2_status_t +axiom_mime_parser_cache_to_buffer( + const axutil_env_t *env, + axis2_char_t *buf, + size_t buf_len, + axiom_search_info_t *search_info, + axiom_mime_parser_t *mime_parser); + +static axis2_bool_t +axiom_mime_parser_is_more_data( + axiom_mime_parser_t *mime_parser, + const axutil_env_t *env, + axis2_callback_info_t *callback_info); + +static axis2_char_t * +axiom_mime_parser_process_mime_headers( + const axutil_env_t *env, + axiom_mime_parser_t *mime_parser, + axis2_char_t **mime_id, + axis2_char_t *mime_headers); + +static axis2_status_t +axiom_mime_parser_cache_to_file( + const axutil_env_t* env, + axis2_char_t *buf, + size_t buf_len, + void *handler); + +static void* +axiom_mime_parser_initiate_callback( + axiom_mime_parser_t *mime_parser, + const axutil_env_t *env, + axis2_char_t *mime_id, + void *user_param); + +AXIS2_EXTERN axiom_mime_parser_t *AXIS2_CALL +axiom_mime_parser_create( + const axutil_env_t * env) +{ + axiom_mime_parser_t *mime_parser = NULL; + + AXIS2_ENV_CHECK(env, NULL); + mime_parser = (axiom_mime_parser_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_mime_parser_t)); + + if(!mime_parser) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + mime_parser->mime_parts_map = NULL; + mime_parser->soap_body_len = 0; + mime_parser->soap_body_str = NULL; /* shallow copy */ + mime_parser->buffer_size = 1; + mime_parser->max_buffers = AXIOM_MIME_PARSER_MAX_BUFFERS; + mime_parser->attachment_dir = NULL; + mime_parser->mtom_caching_callback = NULL; + mime_parser->callback_name = NULL; + mime_parser->buf_array = NULL; + mime_parser->len_array = NULL; + mime_parser->current_buf_num = 0; + mime_parser->end_of_mime = AXIS2_FALSE; + mime_parser->mime_boundary = NULL; + + mime_parser->mime_parts_map = axutil_hash_make(env); + if(!(mime_parser->mime_parts_map)) + { + axiom_mime_parser_free(mime_parser, env); + return NULL; + } + + return mime_parser; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_mime_parser_free( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + /* The map is passed on to SOAP builder, and SOAP builder take over the + ownership of the map */ + + /* We will unload the callback at the end */ + + if(mime_parser->mtom_caching_callback) + { + axutil_param_t *param = NULL; + param = mime_parser->mtom_caching_callback->param; + + AXIOM_MTOM_CACHING_CALLBACK_FREE(mime_parser->mtom_caching_callback, env); + mime_parser->mtom_caching_callback = NULL; + + if(param) + { + axutil_param_free(param, env); + param = NULL; + } + } + + if(mime_parser->buf_array) + { + AXIS2_FREE(env->allocator, mime_parser->buf_array); + mime_parser->buf_array = NULL; + } + + if(mime_parser->len_array) + { + AXIS2_FREE(env->allocator, mime_parser->len_array); + mime_parser->len_array = NULL; + } + + if(mime_parser) + { + AXIS2_FREE(env->allocator, mime_parser); + } + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_mime_parser_parse_for_soap( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK callback, + void *callback_ctx, + axis2_char_t * mime_boundary) +{ + size_t size = 0; + axis2_char_t *soap_str = NULL; + size_t soap_len = 0; + size_t temp_mime_boundary_size = 0; + axis2_char_t *temp_mime_boundary = NULL; + axis2_char_t **buf_array = NULL; + size_t *len_array = NULL; + int buf_num = 0; + axis2_char_t *pos = NULL; + axiom_search_info_t *search_info = NULL; + int part_start = 0; + axis2_bool_t end_of_mime = AXIS2_FALSE; + size_t len = 0; + axis2_char_t *buffer = NULL; + size_t malloc_len = 0; + axis2_callback_info_t *callback_info = NULL; + + callback_info = (axis2_callback_info_t *)callback_ctx; + + /* The user will specify the mime_parser->buffer_size */ + + size = AXIOM_MIME_PARSER_BUFFER_SIZE * (mime_parser->buffer_size); + + /*An array to keep the set of buffers*/ + + buf_array = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t *) * (mime_parser->max_buffers)); + + if(!buf_array) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Failed in creating buffer array"); + return AXIS2_FAILURE; + } + + /*Keeps the corresponding lengths of buffers in buf_array*/ + + len_array = AXIS2_MALLOC(env->allocator, sizeof(size_t) * (mime_parser->max_buffers)); + + if(!len_array) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Failed in creating length array"); + return AXIS2_FAILURE; + } + + mime_parser->buf_array = buf_array; + mime_parser->len_array = len_array; + + temp_mime_boundary = axutil_stracat(env, "--", mime_boundary); + temp_mime_boundary_size = strlen(mime_boundary) + 2; + + /*This struct keeps the pre-post search informations*/ + search_info = AXIS2_MALLOC(env->allocator, sizeof(axiom_search_info_t)); + + /* The first buffer is created */ + buf_array[buf_num] = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1)); + + /* The buffer is filled from the callback */ + + if(buf_array[buf_num]) + { + len = callback(buf_array[buf_num], (int)size, (void *)callback_ctx); + } + if(len > 0) + { + len_array[buf_num] = len; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error reading from the stream"); + return AXIS2_FAILURE; + } + + /*starting buffer for the current search*/ + part_start = buf_num; + + /*We are passing the address of the buf_num , beacause that value + is changing inside the method.*/ + + /* Following call to the method will search first \r\n\r\n */ + + pos = axiom_mime_parser_search_for_crlf(env, callback, callback_ctx, &buf_num, len_array, + buf_array, search_info, size, mime_parser); + + if(!pos) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in the message."); + return AXIS2_FAILURE; + } + + /* The patteren contains in one buffer */ + + if((search_info->match_len2 == 0)) + { + /*Readjusting the buffers for the next search and discarding the prevoius + buffers*/ + + /* We need the remaining part in the buffer after the \r\n\r\n*/ + + malloc_len = buf_array[buf_num] + len_array[buf_num] - pos - 4; + if(malloc_len < 0) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in parsing."); + return AXIS2_FAILURE; + } + else + { + /* Here we will create a new buffer of predefined size fill the + * first portion from the remaining part after previous search + * and then fill the remaining from the callback */ + + buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1)); + + if(malloc_len > 0) + { + memcpy(buffer, pos + 4, malloc_len); + } + + /* Here we need to check for more data, because if the message is too small + * comapred to the reading size there may be no data in the stream , instead + * all the remaining data may be in the buffer.And if there are no more data + * we will set the len to be 0. Otherwise len_array will contain wrong lenghts. + */ + + if(axiom_mime_parser_is_more_data(mime_parser, env, callback_info)) + { + /* There is more data so fill the remaining from the stream*/ + + len = callback(buffer + malloc_len, (int)(size - malloc_len), (void *)callback_ctx); + } + else + { + len = 0; + } + + /* We do not need the data in the previous buffers once we found a particular + * string and after worked with those buffers */ + + axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num); + + /* Adding the new buffer to the buffer list */ + + if(len >= 0) + { + buf_array[buf_num] = buffer; + len_array[buf_num] = malloc_len + len; + } + } + } + + /*The pattern divides among two buffers*/ + + else if(search_info->match_len2 > 0) + { + malloc_len = len_array[buf_num] - search_info->match_len2; + if(malloc_len < 0) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in parsing."); + return AXIS2_FAILURE; + } + else + { + buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1)); + + /* Here the buf_num is the second buffer. We will copy the remaining data + * after the partial string in the second buffer */ + + if(malloc_len > 0) + { + memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len); + } + if(axiom_mime_parser_is_more_data(mime_parser, env, callback_info)) + { + len = callback(buffer + malloc_len, (int)(size - malloc_len), (void *)callback_ctx); + } + else + { + len = 0; + } + axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num); + if(len >= 0) + { + buf_array[buf_num] = buffer; + len_array[buf_num] = malloc_len + len; + } + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in parsing."); + return AXIS2_FAILURE; + } + + /*Resetting the previous search data and getting ready + for the next search */ + + part_start = buf_num; + pos = NULL; + malloc_len = 0; + + search_info->match_len1 = 0; + search_info->match_len2 = 0; + + /*In order to extract the soap envelope we need to search for the first + --MIMEBOUNDARY */ + + pos = axiom_mime_parser_search_for_soap(env, callback, callback_ctx, &buf_num, len_array, + buf_array, search_info, size, temp_mime_boundary, mime_parser); + + if(!pos) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error while searching for the SOAP part "); + return AXIS2_FAILURE; + } + + if(search_info->match_len2 == 0) + { + /*Calculating the length of the SOAP str*/ + + soap_len = axiom_mime_parser_calculate_part_len(env, buf_num, len_array, part_start, pos, + buf_array[buf_num]); + if(soap_len > 0) + { + /* Get the SOAP string from the starting and end buffers containing + * the SOAP part */ + + soap_str = axiom_mime_parser_create_part(env, soap_len, buf_num, len_array, part_start, + pos, buf_array, mime_parser); + if(!soap_str) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Error while creating the SOAP part from the message "); + return AXIS2_FAILURE; + } + + malloc_len = len_array[buf_num] - search_info->match_len1 - temp_mime_boundary_size; + if(malloc_len < 0) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in parsing for mime."); + return AXIS2_FAILURE; + } + else + { + /* This will fill the new buffer with remaining data after the + * SOAP */ + + buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1)); + + memset(buffer, 0, size + 1); + if(malloc_len > 0) + { + memcpy(buffer, pos + temp_mime_boundary_size, malloc_len); + } + if(axiom_mime_parser_is_more_data(mime_parser, env, callback_info)) + { + len = callback(buffer + malloc_len,(int)(size - malloc_len),(void *)callback_ctx); + } + else + { + len = 0; + } + axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num); + if(len >= 0) + { + buf_array[buf_num] = buffer; + len_array[buf_num] = malloc_len + len; + } + } + } + else + { + return AXIS2_FAILURE; + } + } + + /* This is the condition where the --MIMEBOUNDARY is divided among two + * buffers */ + + else if(search_info->match_len2 > 0) + { + soap_len = axiom_mime_parser_calculate_part_len(env, buf_num - 1, len_array, part_start, + pos, buf_array[buf_num - 1]); + + if(soap_len > 0) + { + /* Here we pass buf_num-1 because buf_num does not have any thing we want to + * for this particular part. It begins with the latter part of the search string */ + + soap_str = axiom_mime_parser_create_part(env, soap_len, buf_num - 1, len_array, + part_start, pos, buf_array, mime_parser); + if(!soap_str) + { + return AXIS2_FAILURE; + } + + malloc_len = len_array[buf_num] - search_info->match_len2; + if(malloc_len < 0) + { + return AXIS2_FAILURE; + } + else + { + buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1)); + + if(malloc_len > 0) + { + memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len); + } + + if(axiom_mime_parser_is_more_data(mime_parser, env, callback_info)) + { + len = callback(buffer + malloc_len,(int)(size - malloc_len),(void *)callback_ctx); + } + else + { + len = 0; + } + axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num); + if(len >= 0) + { + buf_array[buf_num] = buffer; + len_array[buf_num] = malloc_len + len; + } + } + } + else + { + return AXIS2_FAILURE; + } + } + + mime_parser->soap_body_str = soap_str; + mime_parser->soap_body_len = soap_len; + mime_parser->current_buf_num = buf_num; + + /* There are multipart/related messages which does not contain attachments + * The only mime_part is the soap envelope. So for those messages the mime + * boundary after the soap will end up with -- + * So we will check that here and if we found then the logic inside the + * while loop will not be executed */ + + end_of_mime = (AXIOM_MIME_BOUNDARY_BYTE == *(buf_array[buf_num])) && (AXIOM_MIME_BOUNDARY_BYTE + == *(buf_array[buf_num] + 1)); + if(end_of_mime) + { + AXIS2_FREE(env->allocator, buf_array[buf_num]); + buf_array[buf_num] = NULL; + } + + if(temp_mime_boundary) + { + AXIS2_FREE(env->allocator, temp_mime_boundary); + temp_mime_boundary = NULL; + } + + if(search_info) + { + AXIS2_FREE(env->allocator, search_info); + search_info = NULL; + } + + mime_parser->end_of_mime = end_of_mime; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axiom_mime_parser_parse_for_attachments( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK callback, + void *callback_ctx, + axis2_char_t * mime_boundary, + void *user_param) +{ + int count = 0; + axiom_search_info_t *search_info = NULL; + axis2_char_t *pos = NULL; + int part_start = 0; + axis2_char_t **buf_array = NULL; + size_t *len_array = NULL; + int buf_num = 0; + size_t size = 0; + size_t malloc_len = 0; + axis2_callback_info_t *callback_info = NULL; + axis2_char_t *temp_mime_boundary = NULL; + size_t temp_mime_boundary_size = 0; + axis2_bool_t end_of_mime = AXIS2_FALSE; + + callback_info = (axis2_callback_info_t *)callback_ctx; + + search_info = AXIS2_MALLOC(env->allocator, sizeof(axiom_search_info_t)); + + size = AXIOM_MIME_PARSER_BUFFER_SIZE * (mime_parser->buffer_size); + + buf_array = mime_parser->buf_array; + len_array = mime_parser->len_array; + buf_num = mime_parser->current_buf_num; + + /*--MIMEBOUNDARY + mime_headr1:....... + mime_headr2:.... + + Binarstart................. + ...............--MIMEBOUNDARY + */ + + /* This loop will extract all the attachments in the message. The condition + * with the count is needed because if the sender not marked the end of the + * attachment wiht -- then this loop may run infinitely. To prevent that + * this additional condition has been put */ + + temp_mime_boundary = axutil_stracat(env, "--", mime_boundary); + temp_mime_boundary_size = strlen(mime_boundary) + 2; + + while((!(mime_parser->end_of_mime)) && count < AXIOM_MIME_PARSER_END_OF_MIME_MAX_COUNT) + { + /*First we will search for \r\n\r\n*/ + axis2_char_t *mime_id = NULL; + axis2_char_t *mime_type = NULL; + size_t mime_headers_len = 0; + size_t mime_binary_len = 0; + axis2_char_t *mime_binary = NULL; + axis2_char_t *mime_headers = NULL; + axis2_char_t *buffer = NULL; + int len = 0; + axis2_status_t status = AXIS2_FAILURE; + + search_info->match_len1 = 0; + search_info->match_len2 = 0; + pos = NULL; + part_start = buf_num; + + malloc_len = 0; + + count++; + + pos = axiom_mime_parser_search_for_crlf(env, callback, callback_ctx, &buf_num, len_array, + buf_array, search_info, size, mime_parser); + + if(!pos) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in parsing for mime."); + return NULL; + } + + /*The pattern contains in one buffer*/ + if(search_info->match_len2 == 0) + { + /*We found it . so lets seperates the details of this binary into + mime headers.*/ + + mime_headers_len = axiom_mime_parser_calculate_part_len(env, buf_num, len_array, + part_start, pos, buf_array[buf_num]); + if(mime_headers_len > 0) + { + mime_headers = axiom_mime_parser_create_part(env, mime_headers_len, buf_num, + len_array, part_start, pos, buf_array, mime_parser); + + if(!mime_headers) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in parsing for mime headers."); + return NULL; + } + malloc_len = buf_array[buf_num] + len_array[buf_num] - pos - 4; + + /*This should be > 0 , > 0 means there is some part to copy = 0 means + there is nothing to copy*/ + if(malloc_len < 0) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in parsing for mime headers"); + return NULL; + } + + else + { + buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1)); + + if(malloc_len > 0) + { + memcpy(buffer, pos + 4, malloc_len); + } + + if(axiom_mime_parser_is_more_data(mime_parser, env, callback_info)) + { + len = callback(buffer + malloc_len,(int)(size - malloc_len),(void *)callback_ctx); + } + else + { + len = 0; + } + axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num); + if(len >= 0) + { + buf_array[buf_num] = buffer; + len_array[buf_num] = malloc_len + len; + } + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in parsing for mime headers."); + return NULL; + } + } + + else if(search_info->match_len2 > 0) + { + /*Now we extract the mime headers */ + + mime_headers_len = axiom_mime_parser_calculate_part_len(env, buf_num - 1, len_array, + part_start, pos, buf_array[buf_num - 1]); + + if(mime_headers_len > 0) + { + mime_headers = axiom_mime_parser_create_part(env, mime_headers_len, buf_num - 1, + len_array, part_start, pos, buf_array, mime_parser); + if(!mime_headers) + { + return NULL; + } + + malloc_len = len_array[buf_num] - search_info->match_len2; + if(malloc_len < 0) + { + return NULL; + } + else + { + buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1)); + + if(malloc_len > 0) + { + memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len); + } + if(axiom_mime_parser_is_more_data(mime_parser, env, callback_info)) + { + len = callback(buffer + malloc_len,(int)(size - malloc_len),(void*)callback_ctx); + } + else + { + len = 0; + } + axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num); + if(len >= 0) + { + buf_array[buf_num] = buffer; + len_array[buf_num] = malloc_len + len; + } + } + } + else + { + return NULL; + } + } + else + { + return NULL; + } + + pos = NULL; + + search_info->match_len1 = 0; + search_info->match_len2 = 0; + + part_start = buf_num; + malloc_len = 0; + + mime_type + = axiom_mime_parser_process_mime_headers(env, mime_parser, &mime_id, mime_headers); + + if(!mime_id) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Error in parsing for mime headers.Mime id did not find"); + return NULL; + } + + if(!mime_type) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Mime type did not find"); + } + + /*We extract the mime headers. So lets search for the attachment.*/ + + pos = axiom_mime_parser_search_for_attachment(mime_parser, env, callback, callback_ctx, + &buf_num, len_array, buf_array, search_info, size, temp_mime_boundary, mime_id, + user_param); + + if(pos) + { + /*If it is small we are not caching. Hence the attachment + is in memory. So store it in a buffer. */ + + if(!search_info->cached) + { + if(search_info->match_len2 == 0) + { + /* mime_binary contains the attachment when it does not + * cached */ + + mime_binary_len = axiom_mime_parser_calculate_part_len(env, buf_num, len_array, + part_start, pos, buf_array[buf_num]); + if(mime_binary_len > 0) + { + mime_binary = axiom_mime_parser_create_part(env, mime_binary_len, buf_num, + len_array, part_start, pos, buf_array, mime_parser); + if(!mime_binary) + { + return NULL; + } + } + else + { + return NULL; + } + } + + else if(search_info->match_len2 > 0) + { + mime_binary_len = axiom_mime_parser_calculate_part_len(env, buf_num - 1, + len_array, part_start, pos, buf_array[buf_num - 1]); + + if(mime_binary_len > 0) + { + mime_binary = axiom_mime_parser_create_part(env, mime_binary_len, buf_num + - 1, len_array, part_start, pos, buf_array, mime_parser); + if(!mime_binary) + { + return NULL; + } + } + else + { + return NULL; + } + } + } + + /* The functionality below is common when it is cached or not. It deals with remaining + * after a particualr attachment, Those may be related to a end of mime_boundary or + * another attachment */ + + if(search_info->match_len2 == 0) + { + malloc_len = len_array[buf_num] - search_info->match_len1 - temp_mime_boundary_size; + if(malloc_len < 0) + { + return NULL; + } + else + { + buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1)); + + if(malloc_len > 0) + { + memcpy(buffer, pos + temp_mime_boundary_size, malloc_len); + } + + /*When the last buffer only containing -- we know this is the end + of the attachments. Hence we don't need to read again*/ + + if(malloc_len != 2) + { + if(axiom_mime_parser_is_more_data(mime_parser, env, callback_info)) + { + len = callback(buffer + malloc_len,(int)(size - malloc_len),(void*)callback_ctx); + } + else + { + len = 0; + } + if(len >= 0) + { + len_array[buf_num] = malloc_len + len; + } + } + + /* This means there is another attachment */ + else + { + len_array[buf_num] = malloc_len; + } + axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num); + buf_array[buf_num] = buffer; + } + } + else if(search_info->match_len2 > 0) + { + malloc_len = len_array[buf_num] - search_info->match_len2; + + if(malloc_len < 0) + { + return NULL; + } + else + { + buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1)); + + if(malloc_len > 0) + { + memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len); + } + if(malloc_len != 2) + { + if(axiom_mime_parser_is_more_data(mime_parser, env, callback_info)) + { + len = callback(buffer + malloc_len,(int)(size - malloc_len),(void *)callback_ctx); + } + else + { + len = 0; + } + if(len >= 0) + { + len_array[buf_num] = malloc_len + len; + } + } + else + { + len_array[buf_num] = malloc_len; + } + axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num); + buf_array[buf_num] = buffer; + } + } + } + else + { + return NULL; + } + + /*We have the attachment now either cached or not. So lets put it in the mime_parts + * hash map with the mime_id. Remember at this moment we have already processed the + * mime_headers and mime_id is already there */ + + /* In the case user has not specified the callback or the attachment dir . So we cached it to a memory + * buffer. Hence the data_handler type we need to create is different */ + + if((search_info->cached) && (!mime_parser->attachment_dir) && (!mime_parser->callback_name)) + { + mime_binary = (axis2_char_t *)search_info->handler; + mime_binary_len = search_info->binary_size; + } + + /* Storing the attachment in the hash map with the id*/ + + status = axiom_mime_parser_store_attachment(env, mime_parser, mime_id, mime_type, + mime_binary, mime_binary_len, search_info->cached); + + /*Check wether we encounter --MIMEBOUNDARY-- to find the end of mime*/ + + if(buf_array[buf_num]) + { + /* Here we check for the end of mime */ + + end_of_mime = (AXIOM_MIME_BOUNDARY_BYTE == *(buf_array[buf_num])) + && (AXIOM_MIME_BOUNDARY_BYTE == *(buf_array[buf_num] + 1)); + if(end_of_mime) + { + AXIS2_FREE(env->allocator, buf_array[buf_num]); + buf_array[buf_num] = NULL; + } + mime_parser->end_of_mime = end_of_mime; + } + + if(mime_headers) + { + AXIS2_FREE(env->allocator, mime_headers); + mime_headers = NULL; + } + + if(status != AXIS2_SUCCESS) + { + return NULL; + } + } + + /*Do the necessary cleaning */ + + /*if (buf_array) + { + AXIS2_FREE(env->allocator, buf_array); + buf_array = NULL; + } + + if (len_array) + { + AXIS2_FREE(env->allocator, len_array); + len_array = NULL; + }*/ + + if(temp_mime_boundary) + { + AXIS2_FREE(env->allocator, temp_mime_boundary); + temp_mime_boundary = NULL; + } + + if(search_info) + { + AXIS2_FREE(env->allocator, search_info); + search_info = NULL; + } + + return mime_parser->mime_parts_map; + +} + +/*This method will search for \r\n\r\n */ + +static axis2_char_t * +axiom_mime_parser_search_for_crlf( + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK callback, + void *callback_ctx, + int *buf_num, + size_t *len_array, + axis2_char_t **buf_array, + axiom_search_info_t *search_info, + size_t size, + axiom_mime_parser_t *mime_parser) +{ + axis2_char_t *found = NULL; + int len = 0; + + search_info->search_str = "\r\n\r\n"; + search_info->buffer1 = NULL; + search_info->buffer2 = NULL; + search_info->len1 = 0; + search_info->len2 = 0; + search_info->match_len1 = 0; + search_info->match_len2 = 0; + search_info->primary_search = AXIS2_FALSE; + search_info->cached = AXIS2_FALSE; + search_info->handler = NULL; + search_info->binary_size = 0; + + /*First do a search in the first buffer*/ + + if(buf_array[*buf_num]) + { + search_info->buffer1 = buf_array[*buf_num]; + search_info->len1 = len_array[*buf_num]; + found = axiom_mime_parser_search_string(search_info, env); + } + + while(!found) + { + /*Let's read another buffer and do a boundary search in both*/ + + *buf_num = *buf_num + 1; + buf_array[*buf_num] = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1)); + + if(buf_array[*buf_num]) + { + len = callback(buf_array[*buf_num], (int)size, (void *)callback_ctx); + } + if(len > 0) + { + len_array[*buf_num] = len; + search_info->buffer2 = buf_array[*buf_num]; + search_info->len2 = len; + found = axiom_mime_parser_search_string(search_info, env); + } + else + { + break; + } + if(!found) + { + /*Let's do a full search in the second buffer*/ + + search_info->buffer1 = buf_array[*buf_num]; + search_info->len1 = len_array[*buf_num]; + search_info->primary_search = AXIS2_FALSE; + search_info->buffer2 = NULL; + search_info->len2 = 0; + found = axiom_mime_parser_search_string(search_info, env); + } + } + + return found; +} + +/* This method will search for the mime_boundary after the SOAP part + * of the message */ + +static axis2_char_t * +axiom_mime_parser_search_for_soap( + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK callback, + void *callback_ctx, + int *buf_num, + size_t *len_array, + axis2_char_t **buf_array, + axiom_search_info_t *search_info, + size_t size, + axis2_char_t *mime_boundary, + axiom_mime_parser_t *mime_parser) +{ + axis2_char_t *found = NULL; + int len = 0; + + /* What we need to search is the mime_boundary */ + + search_info->search_str = mime_boundary; + search_info->buffer1 = NULL; + search_info->buffer2 = NULL; + search_info->len1 = 0; + search_info->len2 = 0; + search_info->match_len1 = 0; + search_info->match_len2 = 0; + search_info->primary_search = AXIS2_FALSE; + + if(buf_array[*buf_num]) + { + search_info->buffer1 = buf_array[*buf_num]; + search_info->len1 = len_array[*buf_num]; + found = axiom_mime_parser_search_string(search_info, env); + + /* Inside this search primary_search flag will be set to TRUE */ + } + + while(!found) + { + /* We need to create the second buffer and do the search for the + * mime_boundary in the both the buffers */ + + *buf_num = *buf_num + 1; + buf_array[*buf_num] = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1)); + + if(buf_array[*buf_num]) + { + len = callback(buf_array[*buf_num], (int)size, (void *)callback_ctx); + } + if(len > 0) + { + /* In this search we are matching end part of the first + * buffer and starting part of the previous buffer */ + len_array[*buf_num] = len; + search_info->buffer2 = buf_array[*buf_num]; + search_info->len2 = len; + found = axiom_mime_parser_search_string(search_info, env); + } + else + { + break; + } + if(!found) + { + search_info->buffer1 = buf_array[*buf_num]; + search_info->len1 = len_array[*buf_num]; + search_info->primary_search = AXIS2_FALSE; + search_info->buffer2 = NULL; + search_info->len2 = 0; + found = axiom_mime_parser_search_string(search_info, env); + } + } + + return found; +} + +/*The caching is done in this function. Caching happens when we did not + find the mime_boundary in initial two buffers. So the maximum size + that we are keeping in memory is 2 * size. This size can be configurable from + the aixs.xml. The caching may starts when the search failed with the + second buffer. + In this logic first we will search for a callback to cache. If it is not + there then we will search for a directory to save the file. If it is also + not there then the attachment will be in memory. + */ + +static axis2_char_t * +axiom_mime_parser_search_for_attachment( + axiom_mime_parser_t *mime_parser, + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK callback, + void *callback_ctx, + int *buf_num, + size_t *len_array, + axis2_char_t **buf_array, + axiom_search_info_t *search_info, + size_t size, + axis2_char_t *mime_boundary, + axis2_char_t *mime_id, + void *user_param) +{ + axis2_char_t *found = NULL; + int len = 0; + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *temp = NULL; + size_t temp_length = 0; + axis2_char_t *file_name = NULL; + + search_info->search_str = mime_boundary; + search_info->buffer1 = NULL; + search_info->buffer2 = NULL; + search_info->len1 = 0; + search_info->len2 = 0; + search_info->match_len1 = 0; + search_info->match_len2 = 0; + search_info->primary_search = AXIS2_FALSE; + search_info->cached = AXIS2_FALSE; + search_info->handler = NULL; + + /*First search in the incoming buffer*/ + + if(buf_array[*buf_num]) + { + search_info->buffer1 = buf_array[*buf_num]; + search_info->len1 = len_array[*buf_num]; + found = axiom_mime_parser_search_string(search_info, env); + } + + while(!found) + { + if(search_info->cached) + { + if(mime_parser->callback_name) + { + if(!(search_info->handler)) + { + /* If the callback is not loaded yet then we load it*/ + if(!mime_parser->mtom_caching_callback) + { + search_info->handler = axiom_mime_parser_initiate_callback(mime_parser, + env, mime_id, user_param); + if(!(search_info->handler)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Caching Callback is not loaded"); + return NULL; + } + } + } + /*So lets cache the previous buffer which has undergone the + full search and the partial search. */ + + if(mime_parser->mtom_caching_callback) + { + /* Caching callback is loaded. So we can cache the previous buffer */ + status + = AXIOM_MTOM_CACHING_CALLBACK_CACHE(mime_parser->mtom_caching_callback, + env, buf_array[*buf_num - 1], (int)len_array[*buf_num - 1], + search_info->handler); + } + } + + else if(mime_parser->attachment_dir) + { + if(!(search_info->handler)) + { + /* If the File is not opened yet we will open it*/ + + axis2_char_t *encoded_mime_id = NULL; + + /* Some times content-ids urls, hence we need to encode them + * becasue we can't create files with / */ + + encoded_mime_id = AXIS2_MALLOC(env->allocator, (sizeof(axis2_char_t)) + * (strlen(mime_id))); + memset(encoded_mime_id, 0, strlen(mime_id)); + encoded_mime_id = axutil_url_encode(env, encoded_mime_id, mime_id, (int)strlen( + mime_id)); + if(!encoded_mime_id) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Mime Id encoding failed"); + return NULL; + } + + file_name = axutil_stracat(env, mime_parser->attachment_dir, encoded_mime_id); + AXIS2_FREE(env->allocator, encoded_mime_id); + encoded_mime_id = NULL; + + if(!file_name) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Caching file name creation error"); + return NULL; + } + search_info->handler = (void *)fopen(file_name, "ab+"); + if(!(search_info->handler)) + { + return NULL; + } + } + + /*So lets cache the previous buffer which has undergone the + full search and the partial search. */ + + status = axiom_mime_parser_cache_to_file(env, buf_array[*buf_num - 1], + len_array[*buf_num - 1], search_info->handler); + } + + else + { + /* Here the user has not specified the caching File location. So we are + * not going to cache. Instead we store the attachment in the buffer */ + status = axiom_mime_parser_cache_to_buffer(env, buf_array[*buf_num - 1], + len_array[*buf_num - 1], search_info, mime_parser); + } + + if(status == AXIS2_FAILURE) + { + return NULL; + } + /*Here we interchange the buffers.*/ + + temp = buf_array[*buf_num - 1]; + buf_array[*buf_num - 1] = buf_array[*buf_num]; + buf_array[*buf_num] = temp; + temp_length = len_array[*buf_num - 1]; + len_array[*buf_num - 1] = len_array[*buf_num]; + len_array[*buf_num] = temp_length; + if(buf_array[*buf_num]) + { + /*The cached buffer is the one which get filled.*/ + len = callback(buf_array[*buf_num], (int)size, (void *)callback_ctx); + } + } + + /*Size of the data in memory not yet risen to the caching threasold + *So we can create the second buffer */ + else + { + *buf_num = *buf_num + 1; + buf_array[*buf_num] = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1)); + + if(buf_array[*buf_num]) + { + len = callback(buf_array[*buf_num], (int)size, (void *)callback_ctx); + } + } + + /*Doing a complete search in newly cretaed buffer*/ + + if(len > 0) + { + len_array[*buf_num] = len; + search_info->buffer2 = buf_array[*buf_num]; + search_info->len2 = len; + found = axiom_mime_parser_search_string(search_info, env); + } + else + { + break; + } + + /* Now there are two buffers. If the searching string is not + * here then we must cache the first buffer */ + + if(!found) + { + /*So now we must start caching*/ + search_info->buffer1 = buf_array[*buf_num]; + search_info->len1 = len_array[*buf_num]; + search_info->primary_search = AXIS2_FALSE; + search_info->buffer2 = NULL; + search_info->len2 = 0; + found = axiom_mime_parser_search_string(search_info, env); + if(!found) + { + /* So at the begining of the next search we start + * that only after caching this data */ + search_info->cached = AXIS2_TRUE; + } + } + } + + /* Here we are out of the loop. If there is no error then this means + * the searching string is found */ + if(search_info->cached && found) + { + /* If the attachment is cached then we need to cache the + * final buffer */ + + if(search_info->match_len2 == 0) + { + /* This is the case where we found the whole string in one buffer + * So we need to cache previous buffer and the data up to the starting + * point of the search string in the current buffer */ + + /* deduct last 2 CRLF character. + * For buffering case, it will be done when creating datahandler.*/ + + if(mime_parser->mtom_caching_callback) + { + status = AXIOM_MTOM_CACHING_CALLBACK_CACHE(mime_parser->mtom_caching_callback, env, + buf_array[*buf_num - 1], (int)len_array[*buf_num - 1], search_info->handler); + if(status == AXIS2_SUCCESS) + { + status + = AXIOM_MTOM_CACHING_CALLBACK_CACHE(mime_parser->mtom_caching_callback, + env, buf_array[*buf_num], (int)(found - buf_array[*buf_num] - 2), + search_info->handler); + } + } + + else if(mime_parser->attachment_dir) + { + status = axiom_mime_parser_cache_to_file(env, buf_array[*buf_num - 1], + len_array[*buf_num - 1], search_info->handler); + if(status == AXIS2_SUCCESS) + { + status = axiom_mime_parser_cache_to_file(env, buf_array[*buf_num], found + - buf_array[*buf_num] - 2, search_info->handler); + } + } + + /* If the callback or a file is not there then the data is appended to the buffer */ + + else + { + status = axiom_mime_parser_cache_to_buffer(env, buf_array[*buf_num - 1], + len_array[*buf_num - 1], search_info, mime_parser); + if(status == AXIS2_SUCCESS) + { + status = axiom_mime_parser_cache_to_buffer(env, buf_array[*buf_num], found + - buf_array[*buf_num], search_info, mime_parser); + } + } + } + else if(search_info->match_len2 > 0) + { + /*Here the curent buffer has partial mime boundary. So we need + to cache only the previous buffer. */ + + if(mime_parser->mtom_caching_callback) + { + status = AXIOM_MTOM_CACHING_CALLBACK_CACHE(mime_parser->mtom_caching_callback, env, + buf_array[*buf_num - 1], (int)(search_info->match_len1 - 2), search_info->handler); + } + + else if(mime_parser->attachment_dir) + { + status = axiom_mime_parser_cache_to_file(env, buf_array[*buf_num - 1], + search_info->match_len1 - 2, search_info->handler); + } + else + { + status = axiom_mime_parser_cache_to_buffer(env, buf_array[*buf_num - 1], + search_info->match_len1, search_info, mime_parser); + } + } + else + { + return NULL; + } + + if(status == AXIS2_FAILURE) + { + return NULL; + } + } + + /* Parsing is done so lets close the relative handlers */ + + if(search_info->handler) + { + if(mime_parser->mtom_caching_callback) + { + status = AXIOM_MTOM_CACHING_CALLBACK_CLOSE_HANDLER(mime_parser->mtom_caching_callback, + env, search_info->handler); + if(status == AXIS2_FAILURE) + { + return NULL; + } + } + + else if(mime_parser->attachment_dir) + { + if(fclose((FILE *)(search_info->handler)) == 0) + { + status = AXIS2_SUCCESS; + } + else + { + status = AXIS2_FAILURE; + } + + AXIS2_FREE(env->allocator, file_name); + file_name = NULL; + + if(status == AXIS2_FAILURE) + { + return NULL; + } + } + } + return found; +} + +/*following two functions are used to extract important information + from the buffer list. eg: SOAP, MIME_HEADERS*/ + +/*marker is the starting buffer of the required + part and pos is the end point of that part */ + +static size_t +axiom_mime_parser_calculate_part_len( + const axutil_env_t *env, + int buf_num, + size_t *len_list, + int marker, + axis2_char_t *pos, + axis2_char_t *buf) +{ + size_t part_len = 0; + int i = 0; + + for(i = marker; i < buf_num; i++) + { + part_len += len_list[i]; + } + + part_len = part_len + (pos - buf); + + return part_len; +} + +static axis2_char_t * +axiom_mime_parser_create_part( + const axutil_env_t *env, + size_t part_len, + int buf_num, + size_t *len_list, + int marker, + axis2_char_t *pos, + axis2_char_t **buf_list, + axiom_mime_parser_t *mime_parser) +{ + /*We will copy the set of buffers which contains the required part. + This part can be the SOAP message , mime headers or the mime + binary in the case of none cahced.*/ + + axis2_char_t *part_str = NULL; + int i = 0; + size_t temp = 0; + + part_str = AXIS2_MALLOC(env->allocator, sizeof(char) * (part_len + 1)); + + if(!part_str) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Failed in creating buffer"); + return NULL; + } + + /* Copy from the part starting buffer to the + * curent buffer */ + + for(i = marker; i < buf_num; i++) + { + if(buf_list[i]) + { + memcpy(part_str + temp, buf_list[i], len_list[i]); + temp += len_list[i]; + } + } + /* Finally we are copying from the final portion */ + + memcpy(part_str + temp, buf_list[i], pos - buf_list[i]); + + part_str[part_len] = '\0'; + + return part_str; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axiom_mime_parser_get_mime_parts_map( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env) +{ + return mime_parser->mime_parts_map; +} + +AXIS2_EXTERN size_t AXIS2_CALL +axiom_mime_parser_get_soap_body_len( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env) +{ + return mime_parser->soap_body_len; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_mime_parser_get_soap_body_str( + axiom_mime_parser_t * mime_parser, + const axutil_env_t * env) +{ + return mime_parser->soap_body_str; +} + +/*This is the new search function. This will first do a + search for the entire search string.Then will do a search + for the partial string which can be divided among two buffers.*/ + +static axis2_char_t * +axiom_mime_parser_search_string( + axiom_search_info_t *search_info, + const axutil_env_t *env) +{ + axis2_char_t *pos = NULL; + axis2_char_t *old_pos = NULL; + axis2_char_t *found = NULL; + size_t str_length = 0; + size_t search_length = 0; + + str_length = strlen(search_info->search_str); + + /*First lets search the entire buffer*/ + if(!search_info->primary_search) + { + old_pos = search_info->buffer1; + + do + { + /*find the first byte. We need to adhere to this + approach rather than straightaway using strstr + because the buffer1 can be containg binary data*/ + + pos = NULL; + + search_length = search_info->buffer1 + search_info->len1 - old_pos - str_length + 1; + + if(search_length < 0) + { + break; + } + + if(old_pos) + { + pos = memchr(old_pos, *(search_info->search_str), search_length); + } + + /* found it so lets check the remaining */ + + if(pos) + { + found = axutil_strstr(pos, search_info->search_str); + if(found) + { + search_info->match_len1 = found - search_info->buffer1; + break; + } + else + { + old_pos = pos + 1; + } + } + } + while(pos); + } + + search_info->primary_search = AXIS2_TRUE; + + if(found) + { + return found; + } + + /*So we didn't find the string in the buffer + lets check whether it is divided in two buffers*/ + + else + { + size_t offset = 0; + pos = NULL; + old_pos = NULL; + found = NULL; + search_length = 0; + + if(search_info->buffer2) + { + old_pos = search_info->buffer1 + search_info->len1 - str_length + 1; + do + { + /*First check the starting byte*/ + pos = NULL; + found = NULL; + + search_length = search_info->buffer1 + search_info->len1 - old_pos; + + if(search_length < 0) + { + break; + } + + pos = memchr(old_pos, *(search_info->search_str), search_length); + + if(pos) + { + offset = search_info->buffer1 + search_info->len1 - pos; + + /*First match the beginng to offset in buffer1*/ + + if(offset > 0) + { + if(memcmp(pos, search_info->search_str, offset) == 0) + { + found = pos; + } + + /*We found something in buffer1 so lets match the + remaining in buffer2*/ + + if(found) + { + if(memcmp(search_info->buffer2, search_info->search_str + offset, + str_length - offset) == 0) + { + search_info->match_len2 = str_length - offset; + search_info->match_len1 = found - search_info->buffer1; + break; + } + else + { + old_pos = pos + 1; + } + } + else + { + old_pos = pos + 1; + } + } + } + } + while(pos); + + /* We will set this to AXIS2_FALSE so when the next time this + * search method is called it will do a full search first for buffer1 */ + search_info->primary_search = AXIS2_FALSE; + + return found; + } + else + { + return NULL; + } + } +} + +/* This method creates a data_handler out of the attachment + * and store the data_handler in the mime_parts map */ + +static axis2_status_t +axiom_mime_parser_store_attachment( + const axutil_env_t *env, + axiom_mime_parser_t *mime_parser, + axis2_char_t *mime_id, + axis2_char_t *mime_type, + axis2_char_t *mime_binary, + size_t mime_binary_len, + axis2_bool_t cached) +{ + if(mime_parser->mime_parts_map) + { + if(mime_id) + { + axiom_data_handler_t *data_handler = NULL; + + /* Handling the case where attachment is cached using a callback */ + + if(mime_parser->callback_name && cached) + { + data_handler = axiom_data_handler_create(env, NULL, mime_type); + if(data_handler) + { + axiom_data_handler_set_cached(data_handler, env, AXIS2_TRUE); + axiom_data_handler_set_data_handler_type(data_handler, env, + AXIOM_DATA_HANDLER_TYPE_CALLBACK); + } + } + + /* Handling the case where attachment is cached to a file*/ + + else if(mime_parser->attachment_dir && cached) + { + axis2_char_t *attachment_location = NULL; + axis2_char_t *encoded_mime_id = NULL; + + /* Some times content-ids urls, hence we need to encode them + * becasue we can't create files with / */ + + encoded_mime_id = AXIS2_MALLOC(env->allocator, (sizeof(axis2_char_t)) * (strlen( + mime_id))); + memset(encoded_mime_id, 0, strlen(mime_id)); + encoded_mime_id = axutil_url_encode( + env, encoded_mime_id, mime_id, (int)strlen(mime_id)); + if(!encoded_mime_id) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Mime Id encoding failed"); + return AXIS2_FAILURE; + } + + attachment_location = axutil_stracat(env, mime_parser->attachment_dir, + encoded_mime_id); + + AXIS2_FREE(env->allocator, encoded_mime_id); + encoded_mime_id = NULL; + + if(attachment_location) + { + + data_handler = axiom_data_handler_create(env, attachment_location, mime_type); + if(data_handler) + { + axiom_data_handler_set_cached(data_handler, env, AXIS2_TRUE); + + } + AXIS2_FREE(env->allocator, attachment_location); + attachment_location = NULL; + } + } + + /* Attachment is in memory, either it is small to be cached or + * user does not provided the attachment cached directory */ + + else if(mime_binary) + { + data_handler = axiom_data_handler_create(env, NULL, mime_type); + if(data_handler) + { + axiom_data_handler_set_binary_data(data_handler, env, mime_binary, + mime_binary_len - 2); + } + } + axiom_data_handler_set_mime_id(data_handler, env, mime_id); + + axutil_hash_set(mime_parser->mime_parts_map, mime_id, AXIS2_HASH_KEY_STRING, + data_handler); + if(mime_type) + { + AXIS2_FREE(env->allocator, mime_type); + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Mime Id or Mime rype not found"); + return AXIS2_FAILURE; + /*axis2_char_t temp_boundry[1024]; + sprintf(temp_boundry, "--%s--", mime_boundary); + if (body_mime && axutil_strstr(body_mime, temp_boundry)) + { + break; + }*/ + } + return AXIS2_SUCCESS; + } + else + { + return AXIS2_FAILURE; + } +} + +/* This method will process the mime_headers for a particualr + attacment and return the mime_id */ + +static axis2_char_t * +axiom_mime_parser_process_mime_headers( + const axutil_env_t *env, + axiom_mime_parser_t *mime_parser, + axis2_char_t **mime_id, + axis2_char_t *mime_headers) +{ + axis2_char_t *id = NULL; + axis2_char_t *type = NULL; + axis2_char_t *pos = NULL; + + /* Get the MIME ID */ + if(mime_headers) + { + id = axutil_strcasestr(mime_headers, AXIOM_MIME_HEADER_CONTENT_ID); + type = axutil_strcasestr(mime_headers, AXIOM_MIME_HEADER_CONTENT_TYPE); + if(type) + { + axis2_char_t *end = NULL; + axis2_char_t *temp_type = NULL; + type += axutil_strlen(AXIOM_MIME_HEADER_CONTENT_TYPE); + while(type && *type && *type != ':') + { + type++; + } + type++; + while(type && *type && *type == ' ') + { + type++; + } + end = type; + while(end && *end && !isspace((int)*end)) + { + end++; + } + if((end - type) > 0) + { + temp_type = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * ((end - type) + 1)); + if(!temp_type) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Failed in creating Content-Type"); + return NULL; + } + memcpy(temp_type, type, (end - type)); + temp_type[end - type] = '\0'; + type = temp_type; + } + } + if(id) + { + id += axutil_strlen(AXIOM_MIME_HEADER_CONTENT_ID); + while(id && *id && *id != ':') + { + id++; + } + if(id) + { + while(id && *id && *id != '<') + { + id++; + } + id++; + pos = axutil_strstr(id, ">"); + if(pos) + { + int mime_id_len = 0; + mime_id_len = (int)(pos - id); + *mime_id = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * mime_id_len + 1); + /* The MIME ID will be freed by the SOAP builder */ + if(*mime_id) + { + memcpy(*mime_id, id, mime_id_len); + (*mime_id)[mime_id_len] = '\0'; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Failed in creating MIME ID"); + return NULL; + } + } + } + } + else + { + /*axis2_char_t temp_boundry[1024]; + sprintf(temp_boundry, "--%s--", mime_boundary); + if (body_mime && axutil_strstr(body_mime, temp_boundry)) + { + break; + }*/ + return NULL; + } + return type; + } + else + { + return NULL; + } +} + +/*This is used to free some unwanted buffers. For example we did + not want the buffers which contains the data before the soap + envelope starts. */ + +static void +axiom_mime_parser_clear_buffers( + const axutil_env_t *env, + axis2_char_t **buf_list, + int free_from, + int free_to) +{ + int i = 0; + + for(i = free_from; i <= free_to; i++) + { + if(buf_list[i]) + { + AXIS2_FREE(env->allocator, buf_list[i]); + buf_list[i] = NULL; + } + } + return; +} + +/* Instead of caching to a file this method will cache it + * to a buffer */ + +static axis2_status_t +axiom_mime_parser_cache_to_buffer( + const axutil_env_t *env, + axis2_char_t *buf, + size_t buf_len, + axiom_search_info_t *search_info, + axiom_mime_parser_t *mime_parser) +{ + axis2_char_t *data_buffer = NULL; + axis2_char_t *temp_buf = NULL; + size_t mime_binary_len = 0; + + temp_buf = (axis2_char_t *)search_info->handler; + mime_binary_len = search_info->binary_size + buf_len; + + if(mime_binary_len > 0) + { + data_buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (mime_binary_len)); + + if(data_buffer) + { + if(temp_buf && search_info->binary_size > 0) + { + memcpy(data_buffer, temp_buf, search_info->binary_size); + AXIS2_FREE(env->allocator, temp_buf); + temp_buf = NULL; + } + memcpy(data_buffer + (search_info->binary_size), buf, buf_len); + search_info->binary_size = mime_binary_len; + search_info->handler = (void *)data_buffer; + + return AXIS2_SUCCESS; + } + else + { + return AXIS2_FAILURE; + } + } + else + { + return AXIS2_FAILURE; + } +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_mime_parser_set_buffer_size( + axiom_mime_parser_t *mime_parser, + const axutil_env_t *env, + int size) +{ + mime_parser->buffer_size = size; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_mime_parser_set_max_buffers( + axiom_mime_parser_t *mime_parser, + const axutil_env_t *env, + int num) +{ + mime_parser->max_buffers = num; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_mime_parser_set_attachment_dir( + axiom_mime_parser_t *mime_parser, + const axutil_env_t *env, + axis2_char_t *attachment_dir) +{ + mime_parser->attachment_dir = attachment_dir; +} + +/* Set the path of the caching callnack to be loaded */ + +AXIS2_EXTERN void AXIS2_CALL +axiom_mime_parser_set_caching_callback_name( + axiom_mime_parser_t *mime_parser, + const axutil_env_t *env, + axis2_char_t *callback_name) +{ + mime_parser->callback_name = callback_name; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_mime_parser_set_mime_boundary( + axiom_mime_parser_t *mime_parser, + const axutil_env_t *env, + axis2_char_t *mime_boundary) +{ + mime_parser->mime_boundary = mime_boundary; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_mime_parser_get_mime_boundary( + axiom_mime_parser_t *mime_parser, + const axutil_env_t *env) +{ + return mime_parser->mime_boundary; +} + +/* Load the caching callback dll */ + +static void* +axiom_mime_parser_initiate_callback( + axiom_mime_parser_t *mime_parser, + const axutil_env_t *env, + axis2_char_t *mime_id, + void *user_param) +{ + axutil_dll_desc_t *dll_desc = NULL; + axutil_param_t *impl_info_param = NULL; + void *ptr = NULL; + + if(mime_parser->callback_name) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Trying to load module = %s", + mime_parser->callback_name); + dll_desc = axutil_dll_desc_create(env); + axutil_dll_desc_set_name(dll_desc, env, mime_parser->callback_name); + impl_info_param = axutil_param_create(env, NULL, dll_desc); + /*Set the free function*/ + axutil_param_set_value_free(impl_info_param, env, axutil_dll_desc_free_void_arg); + axutil_class_loader_init(env); + ptr = axutil_class_loader_create_dll(env, impl_info_param); + + if(!ptr) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Unable to load the module %s. ERROR", + mime_parser->callback_name); + return NULL; + } + + mime_parser->mtom_caching_callback = (axiom_mtom_caching_callback_t *)ptr; + mime_parser->mtom_caching_callback->param = impl_info_param; + mime_parser->mtom_caching_callback->user_param = user_param; + + return AXIOM_MTOM_CACHING_CALLBACK_INIT_HANDLER(mime_parser->mtom_caching_callback, env, + mime_id); + } + + else + { + return NULL; + } + +} + +/* This method will tell whether there are more data in the + * stream */ + +static axis2_bool_t +axiom_mime_parser_is_more_data( + axiom_mime_parser_t *mime_parser, + const axutil_env_t *env, + axis2_callback_info_t *callback_info) +{ + /* In the case of axutil_http_chunked stream it is the + * end of chunk */ + + if(callback_info->chunked_stream) + { + if(axutil_http_chunked_stream_get_end_of_chunks(callback_info->chunked_stream, env)) + { + return AXIS2_FALSE; + } + else + { + return AXIS2_TRUE; + } + } + + /* When we are using content length or any wrapped + * stream it will be the unread_length */ + + else if(callback_info->unread_len == 0) + { + return AXIS2_FALSE; + } + else + { + return AXIS2_TRUE; + } +} + +static axis2_status_t +axiom_mime_parser_cache_to_file( + const axutil_env_t* env, + axis2_char_t *buf, + size_t buf_len, + void *handler) +{ + size_t len = 0; + FILE *fp = NULL; + + fp = (FILE *)handler; + + len = fwrite(buf, 1, buf_len, fp); + if(len < 0) + { + return AXIS2_FAILURE; + } + else + { + return AXIS2_SUCCESS; + } +} + diff --git a/axiom/src/attachments/mime_part.c b/axiom/src/attachments/mime_part.c new file mode 100644 index 0000000..8343327 --- /dev/null +++ b/axiom/src/attachments/mime_part.c @@ -0,0 +1,535 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "axiom_mime_body_part.h" +#include +#include +#include + + +static axis2_status_t +axiom_mime_part_write_body_part_to_list( + const axutil_env_t *env, + axutil_array_list_t *list, + axiom_mime_body_part_t *part, + axis2_char_t *boundary); + +static axis2_status_t +axiom_mime_part_write_mime_boundary( + const axutil_env_t *env, + axutil_array_list_t *list, + axis2_char_t *boundary); + +static axis2_status_t +axiom_mime_part_finish_adding_parts( + const axutil_env_t *env, + axutil_array_list_t *list, + axis2_char_t *boundary); + +/* This method will create a mime_part + * A mime part will encapsulate a buffer + * a file or a callback to load the attachment + which needs to be send */ + +AXIS2_EXTERN axiom_mime_part_t *AXIS2_CALL +axiom_mime_part_create( + const axutil_env_t *env) +{ + axiom_mime_part_t *mime_part = NULL; + mime_part = AXIS2_MALLOC(env->allocator, sizeof(axiom_mime_part_t)); + + if(mime_part) + { + mime_part->part = NULL; + mime_part->file_name = NULL; + mime_part->part_size = 0; + mime_part->type = AXIOM_MIME_PART_UNKNOWN; + mime_part->user_param = NULL; + + return mime_part; + } + else + { + return NULL; + } +} + +/* Frees the mime_part */ + +AXIS2_EXTERN void AXIS2_CALL +axiom_mime_part_free( + axiom_mime_part_t *mime_part, + const axutil_env_t *env) +{ + if(mime_part) + { + if(mime_part->type == AXIOM_MIME_PART_BUFFER) + { + if(mime_part->part) + { + AXIS2_FREE(env->allocator, mime_part->part); + mime_part->part = NULL; + } + } + else if(mime_part->type == AXIOM_MIME_PART_FILE) + { + if(mime_part->file_name) + { + AXIS2_FREE(env->allocator, mime_part->file_name); + mime_part->file_name = NULL; + } + } + + AXIS2_FREE(env->allocator, mime_part); + mime_part = NULL; + } + return; +} + +/* This method will create a mime_boundary buffer + * and based on the buffer creates a mime_part. + * This will be added to the array_list so later in the trasnport + * this can be put to the wire. */ + +static axis2_status_t +axiom_mime_part_write_mime_boundary( + const axutil_env_t *env, + axutil_array_list_t *list, + axis2_char_t *boundary) +{ + axis2_byte_t *byte_buffer = NULL; + axis2_byte_t *byte_stream = NULL; + int size = 0; + axiom_mime_part_t *boundary_part = NULL; + + boundary_part = axiom_mime_part_create(env); + + byte_buffer = (axis2_byte_t *)boundary; + size = axutil_strlen(boundary); + + byte_stream = AXIS2_MALLOC(env->allocator, (size + 2) * sizeof(axis2_byte_t)); + if(!byte_stream) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create byte stream"); + return AXIS2_FAILURE; + } + + /* Mime boundary is always in the following form + --MimeBoundary */ + + byte_stream[0] = AXIOM_MIME_BOUNDARY_BYTE; + byte_stream[1] = AXIOM_MIME_BOUNDARY_BYTE; + + memcpy(byte_stream + 2, byte_buffer, size); + + boundary_part->part = byte_stream; + boundary_part->part_size = size + 2; + boundary_part->type = AXIOM_MIME_PART_BUFFER; + + axutil_array_list_add(list, env, boundary_part); + + return AXIS2_SUCCESS; +} + +/* This method will add the attachment file related information + to the list. It will create a mime_part from those information + and add to the list. If there are not data_handlers in the mime_body + then this method just add the headers. */ + +static axis2_status_t +axiom_mime_part_write_body_part_to_list( + const axutil_env_t *env, + axutil_array_list_t *list, + axiom_mime_body_part_t *part, + axis2_char_t *boundary) +{ + axiom_mime_part_t *crlf1 = NULL; + axiom_mime_part_t *crlf2 = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + /* We are adding accoarding to the following format here. + * --MimeBoundary + * mime_header1 + * mime_header2 + * mime_header3 */ + + status = axiom_mime_part_write_mime_boundary(env, list, boundary); + + if(status != AXIS2_SUCCESS) + { + return status; + } + + /* Then we will add the new line charator after + * the mime_boundary */ + + crlf1 = axiom_mime_part_create(env); + + crlf1->part = (axis2_byte_t *)axutil_strdup(env, AXIS2_CRLF); + crlf1->part_size = 2; + crlf1->type = AXIOM_MIME_PART_BUFFER; + + axutil_array_list_add(list, env, crlf1); + + /*This method will fill the list with mime_headers and + *if there is an attachment with attachment details*/ + + axiom_mime_body_part_write_to_list(part, env, list); + + /* Then add the next \r\n after the attachment */ + + crlf2 = axiom_mime_part_create(env); + + crlf2->part = (axis2_byte_t *)axutil_strdup(env, AXIS2_CRLF); + crlf2->part_size = 2; + crlf2->type = AXIOM_MIME_PART_BUFFER; + + axutil_array_list_add(list, env, crlf2); + + return AXIS2_SUCCESS; +} + +/* This methos will add the final mime_boundary + * It is in --MimeBoundary-- format */ + +static axis2_status_t +axiom_mime_part_finish_adding_parts( + const axutil_env_t *env, + axutil_array_list_t *list, + axis2_char_t *boundary) +{ + axis2_byte_t *byte_buffer = NULL; + axis2_byte_t *byte_stream = NULL; + int size = 0; + axiom_mime_part_t *final_part = NULL; + + size = axutil_strlen(boundary); + byte_buffer = (axis2_byte_t *)boundary; + + /* There is -- before and after so the length of the + * actual part is mime_boundary_len + 4 */ + + byte_stream = AXIS2_MALLOC(env->allocator, (size + 4) * sizeof(axis2_byte_t)); + if(!byte_stream) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create byte stream"); + return AXIS2_FAILURE; + } + + /* Adding the starting -- */ + + byte_stream[0] = AXIOM_MIME_BOUNDARY_BYTE; + byte_stream[1] = AXIOM_MIME_BOUNDARY_BYTE; + if(byte_buffer) + { + memcpy(byte_stream + 2, byte_buffer, size); + } + else + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "Byte buffer not available for writing"); + } + + /* Adding the final -- */ + + byte_stream[size + 2] = AXIOM_MIME_BOUNDARY_BYTE; + byte_stream[size + 3] = AXIOM_MIME_BOUNDARY_BYTE; + + /* Now we add this as an mime_part to + * the list. */ + + final_part = axiom_mime_part_create(env); + + if(!final_part) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create final_part"); + return AXIS2_FAILURE; + } + + final_part->part = byte_stream; + final_part->part_size = size + 4; + final_part->type = AXIOM_MIME_PART_BUFFER; + + axutil_array_list_add(list, env, final_part); + + return AXIS2_SUCCESS; +} + +/* This is the method which creates the content-type string + which is in the HTTP header or in mime_headers*/ + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axiom_mime_part_get_content_type_for_mime( + const axutil_env_t *env, + axis2_char_t *boundary, + axis2_char_t *content_id, + axis2_char_t *char_set_encoding, + const axis2_char_t *soap_content_type) +{ + axis2_char_t *content_type_string = NULL; + axis2_char_t *temp_content_type_string = NULL; + + content_type_string = axutil_strdup(env, AXIOM_MIME_TYPE_MULTIPART_RELATED); + if(!content_type_string) + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "Creation of Content-Type string failed"); + return NULL; + } + temp_content_type_string = axutil_stracat(env, content_type_string, "; "); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + if(boundary) + { + temp_content_type_string = + axutil_stracat(env, content_type_string, + AXIOM_MIME_HEADER_FIELD_BOUNDARY "="); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + temp_content_type_string = axutil_stracat(env, content_type_string, boundary); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + temp_content_type_string = axutil_stracat(env, content_type_string, "; "); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + } temp_content_type_string = + axutil_stracat(env, content_type_string, + AXIOM_MIME_HEADER_FIELD_TYPE "=\"" AXIOM_MIME_TYPE_XOP_XML "\""); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + temp_content_type_string = axutil_stracat(env, content_type_string, "; "); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + if(content_id) + { + temp_content_type_string = + axutil_stracat(env, content_type_string, + AXIOM_MIME_HEADER_FIELD_START "=\"<"); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + temp_content_type_string = axutil_stracat(env, content_type_string, content_id); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + temp_content_type_string = axutil_stracat(env, content_type_string, ">\""); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + temp_content_type_string = axutil_stracat(env, content_type_string, "; "); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + } + if(soap_content_type) + { + temp_content_type_string = + axutil_stracat(env, content_type_string, + AXIOM_MIME_HEADER_FIELD_START_INFO "=\""); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + temp_content_type_string = axutil_stracat(env, content_type_string, soap_content_type); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + temp_content_type_string = axutil_stracat(env, content_type_string, "\"; "); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + } + if(char_set_encoding) + { + temp_content_type_string = + axutil_stracat(env, content_type_string, + AXIOM_MIME_HEADER_FIELD_CHARSET "=\""); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + temp_content_type_string = axutil_stracat(env, content_type_string, char_set_encoding); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + temp_content_type_string = axutil_stracat(env, content_type_string, "\""); + AXIS2_FREE(env->allocator, content_type_string); + content_type_string = temp_content_type_string; + } + + return content_type_string; +} + +/* This method is the core of attachment sending + * part. It will build each and every part and put them in + * an array_list. Instead of a big buffer we pass the array_list + * with small buffers and attachment locations. */ + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axiom_mime_part_create_part_list( + const axutil_env_t *env, + axis2_char_t *soap_body, + axutil_array_list_t *binary_node_list, + axis2_char_t *boundary, + axis2_char_t *content_id, + axis2_char_t *char_set_encoding, + const axis2_char_t *soap_content_type) +{ + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *header_value = NULL; + axis2_char_t *temp_header_value = NULL; + axis2_char_t *content_id_string = NULL; + axis2_char_t *temp_content_id_string = NULL; + axiom_mime_body_part_t *root_mime_body_part = NULL; + axis2_char_t *soap_body_buffer = NULL; + axutil_array_list_t *part_list = NULL; + axiom_mime_part_t *soap_part = NULL; + + part_list = axutil_array_list_create(env, 0); + + if(!part_list) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create part list array"); + return NULL; + } + + /* This mime_body part just keeps the mime_headers of the + * SOAP part. Since it is not created from an axiom_text + * this will not contain an attachment*/ + + root_mime_body_part = axiom_mime_body_part_create(env); + + if(!root_mime_body_part) + { + return NULL; + } + + /* In order to understand the following code which creates + * mime_headers go through the code with a sample mtom message */ + + /* Adding Content-Type Header */ + header_value = axutil_strdup(env, AXIOM_MIME_TYPE_XOP_XML + ";" AXIOM_MIME_HEADER_FIELD_CHARSET "="); + temp_header_value = axutil_stracat(env, header_value, char_set_encoding); + AXIS2_FREE(env->allocator, header_value); + header_value = temp_header_value; + temp_header_value = axutil_stracat(env, header_value, ";" + AXIOM_MIME_HEADER_FIELD_TYPE "=\""); + AXIS2_FREE(env->allocator, header_value); + header_value = temp_header_value; + temp_header_value = axutil_stracat(env, header_value, soap_content_type); + AXIS2_FREE(env->allocator, header_value); + header_value = temp_header_value; + temp_header_value = axutil_stracat(env, header_value, "\";"); + AXIS2_FREE(env->allocator, header_value); + header_value = temp_header_value; + AXIOM_MIME_BODY_PART_ADD_HEADER(root_mime_body_part, env, AXIOM_MIME_HEADER_CONTENT_TYPE, + header_value); + + /* Adding Content Transfer Encoding header */ + + AXIOM_MIME_BODY_PART_ADD_HEADER(root_mime_body_part, env, + AXIOM_MIME_HEADER_CONTENT_TRANSFER_ENCODING, axutil_strdup(env, + AXIOM_MIME_CONTENT_TRANSFER_ENCODING_BINARY)); + + /* Adding Content ID header */ + + content_id_string = (axis2_char_t *)"<"; + content_id_string = axutil_stracat(env, content_id_string, content_id); + temp_content_id_string = axutil_stracat(env, content_id_string, ">"); + AXIS2_FREE(env->allocator, content_id_string); + content_id_string = temp_content_id_string; + AXIOM_MIME_BODY_PART_ADD_HEADER(root_mime_body_part, env, AXIOM_MIME_HEADER_CONTENT_ID, + content_id_string); + + /* Now first insert the headers needed for SOAP */ + + /* After calling this method we have mime_headers of the SOAP envelope + * as a mime_part in the array_list */ + + status = axiom_mime_part_write_body_part_to_list(env, part_list, root_mime_body_part, boundary); + + if(status == AXIS2_FAILURE) + { + return NULL; + } + + /* Now add the SOAP body */ + + AXIOM_MIME_BODY_PART_FREE(root_mime_body_part, env); + root_mime_body_part = NULL; + + soap_part = axiom_mime_part_create(env); + + if(!soap_part) + { + return NULL; + } + + /* The atachment's mime_boundary will start after a new line charator */ + + soap_body_buffer = axutil_stracat(env, soap_body, AXIS2_CRLF); + + soap_part->part = (axis2_byte_t *)soap_body_buffer; + soap_part->part_size = (int)axutil_strlen(soap_body_buffer); + soap_part->type = AXIOM_MIME_PART_BUFFER; + + axutil_array_list_add(part_list, env, soap_part); + + /* Now we need to add each binary attachment to the array_list */ + + if(binary_node_list) + { + int j = 0; + for(j = 0; j < axutil_array_list_size(binary_node_list, env); j++) + { + /* Getting each attachment text node from the node list */ + + axiom_text_t *text = (axiom_text_t *)axutil_array_list_get(binary_node_list, env, j); + if(text) + { + axiom_mime_body_part_t *mime_body_part = NULL; + mime_body_part = axiom_mime_body_part_create_from_om_text(env, text); + + /* Let's fill the mime_part arraylist with attachment data*/ + if(!mime_body_part) + { + return NULL; + } + + /* This call will create mime_headers for the attachment and put + * them to the array_list. Then put the attachment file_name to the + * list */ + + status = axiom_mime_part_write_body_part_to_list(env, part_list, mime_body_part, + boundary); + + if(status == AXIS2_FAILURE) + { + return NULL; + } + + AXIOM_MIME_BODY_PART_FREE(mime_body_part, env); + mime_body_part = NULL; + } + } + } + + /* Now we have the SOAP message, all the attachments and headers are added to the list. + * So let's add the final mime_boundary with -- at the end */ + + status = axiom_mime_part_finish_adding_parts(env, part_list, boundary); + if(status == AXIS2_FAILURE) + { + return NULL; + } + return part_list; +} + diff --git a/axiom/src/om/Makefile.am b/axiom/src/om/Makefile.am new file mode 100644 index 0000000..40db6c5 --- /dev/null +++ b/axiom/src/om/Makefile.am @@ -0,0 +1,35 @@ +lib_LTLIBRARIES = libaxis2_axiom.la +libaxis2_axiom_la_SOURCES = om_attribute.c \ + om_document.c \ + om_node.c \ + om_text.c \ + om_data_source.c \ + om_comment.c \ + om_element.c \ + om_output.c \ + om_doctype.c \ + om_namespace.c \ + om_processing_instruction.c \ + om_stax_builder.c \ + om_children_iterator.c \ + om_children_qname_iterator.c \ + om_child_element_iterator.c \ + om_children_with_specific_attribute_iterator.c \ + om_navigator.c + +libaxis2_axiom_la_LIBADD = $(top_builddir)/src/soap/libaxis2_soap.la \ + $(top_builddir)/src/attachments/libaxis2_attachments.la \ + $(top_builddir)/src/util/libaxis2_axiom_util.la \ + ../parser/${WRAPPER_DIR}/libaxis2_parser.la \ + ../../../util/src/libaxutil.la + +libaxis2_axiom_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/parser \ + -I$(top_builddir)/src/om \ + -I$(top_builddir)/src/attachments \ + -I ../../../util/include + +EXTRA_DIST = axiom_namespace_internal.h axiom_node_internal.h axiom_stax_builder_internal.h + diff --git a/axiom/src/om/axiom_namespace_internal.h b/axiom/src/om/axiom_namespace_internal.h new file mode 100644 index 0000000..833de7f --- /dev/null +++ b/axiom/src/om/axiom_namespace_internal.h @@ -0,0 +1,46 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_NAMESPACE_INTERNAL_H +#define AXIOM_NAMESPACE_INTERNAL_H + +/** @defgroup axiom AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_namespace_set_uri( + axiom_namespace_t * ns, + const axutil_env_t * env, + const axis2_char_t * ns_uri); + +#ifdef __cplusplus +} +#endif + +#endif /** AXIOM_NAMESPACE_H */ diff --git a/axiom/src/om/axiom_node_internal.h b/axiom/src/om/axiom_node_internal.h new file mode 100644 index 0000000..6e9adb4 --- /dev/null +++ b/axiom/src/om/axiom_node_internal.h @@ -0,0 +1,165 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_NODE_INTERNAL_H +#define AXIOM_NODE_INTERNAL_H + +/** @defgroup axiom AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_node OM Node + * @ingroup axiom + * @{ + */ + struct axiom_document; + struct axiom_stax_builder; + + /** + * Sets a parent node to a given node, if a parent already exist for this node + * then it is detached before seting the parent internal function; + * @param om_node child node to whom a parent to be added. , cannot be NULL. + * @param env Environment. MUST NOT be NULL, . + * @param parent_node the node that will be set as parent. , cannot be NULL. + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_node_set_parent( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_node_t * parent); + + /** + * Sets a node as first child of om_node + * @param om_node om_node + * @param env environment, MUST NOT be NULL. + * @param first_child child to be set as first child + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_node_set_first_child( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_node_t * first_child); + + /** + * Sets previous sibling + * @param om_node + * @param env environment, MUST NOT be NULL. + * @param prev_sibling + * @return status of the op, AXIS2_SUCCESS on success + * AXIS2_FAILURE on error + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_node_set_previous_sibling( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_node_t * prev_sibling); + + /** + * Sets next sibling + * @param om_node + * @param env environment, MUST NOT be NULL. + * @param last_sibling + * @return status of the op, AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_node_set_next_sibling( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_node_t * next_sibling); + + /** + * Sets node type + * @param om_node + * @param env environment, MUST NOT be NULL. + * @param type type of the node + * @return status code of the op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_node_set_node_type( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_types_t type); + + /** + * Sets data element + * @param om_node node struct + * @param env environment, MUST NOT be NULL. + * @param data_element + * @return status code of the op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_node_set_data_element( + axiom_node_t * om_node, + const axutil_env_t * env, + void *data_element); + + /** + * Sets the build status , if the node if completety build, this attribute is + * set to AXIS2_TRUE , otherwise AXIS2_FALSE + * @param om_node + * @param env environment, MUST NOT be NULL. + * @param done + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_node_set_complete( + axiom_node_t * om_node, + const axutil_env_t * env, + axis2_bool_t done); + + /** + * This functions is only to be used by builder + * do not use this function + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_node_set_document( + axiom_node_t * om_node, + const axutil_env_t * env, + struct axiom_document *om_doc); + + /** + * Sets the builder + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_node_set_builder( + axiom_node_t * om_node, + const axutil_env_t * env, + struct axiom_stax_builder *builder); + + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** AXIOM_NODE_INTERNAL_H */ diff --git a/axiom/src/om/axiom_stax_builder_internal.h b/axiom/src/om/axiom_stax_builder_internal.h new file mode 100644 index 0000000..788ecf6 --- /dev/null +++ b/axiom/src/om/axiom_stax_builder_internal.h @@ -0,0 +1,75 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_STAX_BUILDER_INTERNAL_H +#define AXIOM_STAX_BUILDER_INTERNAL_H + +/** @defgroup axiom AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_stax builder + * @ingroup axiom + * @{ + */ + + AXIS2_EXTERN int AXIS2_CALL + axiom_stax_builder_get_current_event( + axiom_stax_builder_t * builder, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_stax_builder_set_lastnode( + axiom_stax_builder_t * builder, + const axutil_env_t * env, + axiom_node_t * om_node); + + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axiom_stax_builder_get_lastnode( + axiom_stax_builder_t * builder, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_stax_builder_set_element_level( + axiom_stax_builder_t * builder, + const axutil_env_t * env, + int element_level); + + AXIS2_EXTERN int AXIS2_CALL + axiom_stax_builder_get_element_level( + axiom_stax_builder_t * builder, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** AXIOM_STAX_BUILDER_INTERNAL_H */ diff --git a/axiom/src/om/om_attribute.c b/axiom/src/om/om_attribute.c new file mode 100644 index 0000000..9d2a81e --- /dev/null +++ b/axiom/src/om/om_attribute.c @@ -0,0 +1,433 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axiom_attribute +{ + + /** localname of this attribute */ + axutil_string_t *localname; + + /** value of this attribute */ + axutil_string_t *value; + + /** attribute namespace */ + axiom_namespace_t *ns; + + /** store qname here */ + axutil_qname_t *qname; + int ref; +}; + +AXIS2_EXTERN axiom_attribute_t *AXIS2_CALL +axiom_attribute_create( + const axutil_env_t * env, + const axis2_char_t * localname, + const axis2_char_t * value, + axiom_namespace_t * ns) +{ + axiom_attribute_t *attribute = NULL; + + AXIS2_ENV_CHECK(env, NULL); + /* localname is mandatory */ + AXIS2_PARAM_CHECK(env->error, localname, NULL); + + attribute = (axiom_attribute_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_attribute_t)); + if(!attribute) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + /** initialize fields */ + attribute->localname = NULL; + attribute->value = NULL; + attribute->ns = NULL; + attribute->qname = NULL; + + attribute->localname = axutil_string_create(env, localname); + if(!(attribute->localname)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_FREE(env->allocator, attribute); + return NULL; + } + if(value) + { + attribute->value = axutil_string_create(env, value); + if(!(attribute->value)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + axutil_string_free(attribute->localname, env); + AXIS2_FREE(env->allocator, attribute); + return NULL; + } + } + attribute->ns = ns; + + attribute->ref = 0; + + return attribute; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_attribute_free( + axiom_attribute_t * attribute, + const axutil_env_t * env) +{ + if(--attribute->ref > 0) + { + return; + } + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(attribute->localname) + { + axutil_string_free(attribute->localname, env); + } + if(attribute->value) + { + axutil_string_free(attribute->value, env); + } + if(attribute->qname) + { + axutil_qname_free(attribute->qname, env); + } + + AXIS2_FREE(env->allocator, attribute); + + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_attribute_free_void_arg( + void *attribute, + const axutil_env_t * env) +{ + axiom_attribute_t *om_attribute_l = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + om_attribute_l = (axiom_attribute_t *)attribute; + axiom_attribute_free(om_attribute_l, env); + return; +} + +AXIS2_EXTERN axutil_qname_t *AXIS2_CALL +axiom_attribute_get_qname( + axiom_attribute_t * attribute, + const axutil_env_t * env) +{ + axutil_qname_t *qname = NULL; + AXIS2_ENV_CHECK(env, NULL); + if(!(attribute->qname)) + { + if(attribute->ns) + { + qname = axutil_qname_create(env, axutil_string_get_buffer(attribute-> localname, env), + axiom_namespace_get_uri(attribute->ns, env), axiom_namespace_get_prefix( + attribute-> ns, env)); + } + else + { + qname = axutil_qname_create(env, axutil_string_get_buffer(attribute-> localname, env), + NULL, NULL); + } + attribute->qname = qname; + return qname; + } + return attribute->qname; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_attribute_serialize( + axiom_attribute_t * attribute, + const axutil_env_t * env, + axiom_output_t * om_output) +{ + int status = AXIS2_SUCCESS; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_output, AXIS2_FAILURE); + + if(attribute->ns) + { + axis2_char_t *uri = NULL; + axis2_char_t *prefix = NULL; + + uri = axiom_namespace_get_uri(attribute->ns, env); + prefix = axiom_namespace_get_prefix(attribute->ns, env); + + if((uri) && (NULL != prefix) && (axutil_strcmp(prefix, "") != 0)) + { + status = axiom_output_write(om_output, env, AXIOM_ATTRIBUTE, 4, + axutil_string_get_buffer(attribute-> localname, env), axutil_string_get_buffer( + attribute-> value, env), uri, prefix); + } + else if(uri) + { + status = axiom_output_write(om_output, env, AXIOM_ATTRIBUTE, 3, + axutil_string_get_buffer(attribute-> localname, env), axutil_string_get_buffer( + attribute-> value, env), uri); + } + } + else + { + status = axiom_output_write(om_output, env, AXIOM_ATTRIBUTE, 2, axutil_string_get_buffer( + attribute-> localname, env), axutil_string_get_buffer(attribute->value, env)); + } + return status; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_attribute_get_localname( + axiom_attribute_t * attribute, + const axutil_env_t * env) +{ + if(attribute->localname) + { + return (axis2_char_t *)axutil_string_get_buffer(attribute->localname, env); + } + return NULL; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_attribute_get_value( + axiom_attribute_t * attribute, + const axutil_env_t * env) +{ + if(attribute->value) + { + return (axis2_char_t *)axutil_string_get_buffer(attribute->value, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL +axiom_attribute_get_namespace( + axiom_attribute_t * attribute, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + return attribute->ns; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_attribute_set_localname( + axiom_attribute_t * attribute, + const axutil_env_t * env, + const axis2_char_t * localname) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + + if(attribute->localname) + { + axutil_string_free(attribute->localname, env); + attribute->localname = NULL; + } + + attribute->localname = axutil_string_create(env, localname); + + if(!(attribute->localname)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_attribute_set_value( + axiom_attribute_t * attribute, + const axutil_env_t * env, + const axis2_char_t * value) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + + if(attribute->value) + { + axutil_string_free(attribute->value, env); + attribute->value = NULL; + } + + attribute->value = axutil_string_create(env, value); + if(!(attribute->value)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_attribute_set_namespace( + axiom_attribute_t * attribute, + const axutil_env_t * env, + axiom_namespace_t * om_namespace) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_FUNC_PARAM_CHECK(om_namespace, env, AXIS2_FAILURE); + attribute->ns = om_namespace; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_attribute_t *AXIS2_CALL +axiom_attribute_clone( + axiom_attribute_t * attribute, + const axutil_env_t * env) +{ + axiom_attribute_t *cloned_attr = NULL; + if(!attribute) + return NULL; + AXIS2_ENV_CHECK(env, NULL); + + /** namespace is not cloned since it is a shollow copy*/ + cloned_attr = axiom_attribute_create_str(env, attribute->localname, attribute->value, + attribute->ns); + if(cloned_attr) + { + return cloned_attr; + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_attribute_increment_ref( + struct axiom_attribute * om_attribute, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + om_attribute->ref++; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_attribute_t *AXIS2_CALL +axiom_attribute_create_str( + const axutil_env_t * env, + axutil_string_t * localname, + axutil_string_t * value, + axiom_namespace_t * ns) +{ + axiom_attribute_t *attribute = NULL; + + AXIS2_ENV_CHECK(env, NULL); + /* localname is mandatory */ + AXIS2_PARAM_CHECK(env->error, localname, NULL); + + attribute = (axiom_attribute_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_attribute_t)); + if(!attribute) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + /** initialize fields */ + attribute->localname = NULL; + attribute->value = NULL; + attribute->ns = NULL; + attribute->qname = NULL; + + attribute->localname = axutil_string_clone(localname, env); + if(!(attribute->localname)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_FREE(env->allocator, attribute); + return NULL; + } + if(value) + { + attribute->value = axutil_string_clone(value, env); + if(!(attribute->value)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + axutil_string_free(attribute->localname, env); + AXIS2_FREE(env->allocator, attribute); + return NULL; + } + } + attribute->ns = ns; + + attribute->ref = 0; + + return attribute; +} + +AXIS2_EXTERN axutil_string_t *AXIS2_CALL +axiom_attribute_get_localname_str( + axiom_attribute_t * attribute, + const axutil_env_t * env) +{ + return attribute->localname; +} + +AXIS2_EXTERN axutil_string_t *AXIS2_CALL +axiom_attribute_get_value_str( + axiom_attribute_t * attribute, + const axutil_env_t * env) +{ + return attribute->value; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_attribute_set_localname_str( + axiom_attribute_t * attribute, + const axutil_env_t * env, + axutil_string_t * localname) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + + if(attribute->localname) + { + axutil_string_free(attribute->localname, env); + attribute->localname = NULL; + } + + attribute->localname = axutil_string_clone(localname, env); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_attribute_set_value_str( + axiom_attribute_t * attribute, + const axutil_env_t * env, + axutil_string_t * value) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + + if(attribute->value) + { + axutil_string_free(attribute->value, env); + attribute->value = NULL; + } + + attribute->value = axutil_string_clone(value, env); + if(!(attribute->value)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/axiom/src/om/om_child_element_iterator.c b/axiom/src/om/om_child_element_iterator.c new file mode 100644 index 0000000..622cfbd --- /dev/null +++ b/axiom/src/om/om_child_element_iterator.c @@ -0,0 +1,119 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct axiom_child_element_iterator +{ + axiom_node_t *current_child; + axiom_node_t *last_child; + axis2_bool_t next_called; + axis2_bool_t remove_called; +}; + +AXIS2_EXTERN axiom_child_element_iterator_t *AXIS2_CALL +axiom_child_element_iterator_create( + const axutil_env_t * env, + axiom_node_t * current_child) +{ + axiom_child_element_iterator_t *iterator = NULL; + AXIS2_ENV_CHECK(env, NULL); + + iterator = (axiom_child_element_iterator_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_child_element_iterator_t)); + + if(!iterator) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + iterator->current_child = current_child; + iterator->last_child = NULL; + + iterator->next_called = AXIS2_FALSE; + iterator->remove_called = AXIS2_FALSE; + + return iterator; +} + +AXIS2_EXTERN void AXIS2_CALL axiom_child_element_iterator_free( + void *iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_FREE(env->allocator, iterator); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_child_element_iterator_remove( + axiom_child_element_iterator_t * iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, iterator, AXIS2_FAILURE); + + if(!(iterator->next_called)) + return AXIS2_FAILURE; + if(iterator->remove_called) + return AXIS2_FAILURE; + + iterator->remove_called = AXIS2_TRUE; + + if(!(iterator->last_child)) + return AXIS2_FAILURE; + axiom_node_free_tree(iterator->last_child, env); + iterator->last_child = NULL; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_child_element_iterator_has_next( + axiom_child_element_iterator_t * iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return (iterator->current_child) ? AXIS2_TRUE : AXIS2_FALSE; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL axiom_child_element_iterator_next( + axiom_child_element_iterator_t * iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + iterator->next_called = AXIS2_TRUE; + iterator->remove_called = AXIS2_FALSE; + if (iterator->current_child) + { + iterator->last_child = iterator->current_child; + do + { + iterator->current_child = + axiom_node_get_next_sibling(iterator->current_child, env); + + } + while (iterator->current_child && + (axiom_node_get_node_type(iterator->current_child, env) + != AXIOM_ELEMENT)); + + return iterator->last_child; + } + return NULL; +} diff --git a/axiom/src/om/om_children_iterator.c b/axiom/src/om/om_children_iterator.c new file mode 100644 index 0000000..42046e5 --- /dev/null +++ b/axiom/src/om/om_children_iterator.c @@ -0,0 +1,138 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct axiom_children_iterator +{ + axiom_node_t *first_child; + axiom_node_t *current_child; + axiom_node_t *last_child; + axis2_bool_t next_called; + axis2_bool_t remove_called; +}; + +AXIS2_EXTERN axiom_children_iterator_t *AXIS2_CALL +axiom_children_iterator_create( + const axutil_env_t * env, + axiom_node_t * current_child) +{ + axiom_children_iterator_t *iterator = NULL; + AXIS2_ENV_CHECK(env, NULL); + + iterator = (axiom_children_iterator_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_children_iterator_t)); + + if(!iterator) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + iterator->current_child = NULL; + iterator->last_child = NULL; + iterator->first_child = NULL; + + iterator->next_called = AXIS2_FALSE; + iterator->remove_called = AXIS2_FALSE; + + iterator->first_child = current_child; + iterator->current_child = current_child; + + return iterator; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_children_iterator_free( + axiom_children_iterator_t * iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + AXIS2_FREE(env->allocator, iterator); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_children_iterator_remove( + axiom_children_iterator_t * iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, iterator, AXIS2_FAILURE); + + if(!(iterator->next_called)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_ITERATOR_NEXT_METHOD_HAS_NOT_YET_BEEN_CALLED, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + if(iterator->remove_called) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_ITERATOR_REMOVE_HAS_ALREADY_BEING_CALLED, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + iterator->remove_called = AXIS2_TRUE; + + if(!(iterator->last_child)) + { + return AXIS2_FAILURE; + } + axiom_node_free_tree(iterator->last_child, env); + iterator->last_child = NULL; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_children_iterator_has_next( + axiom_children_iterator_t * iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return (iterator->current_child) ? AXIS2_TRUE : AXIS2_FALSE; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_children_iterator_next( + axiom_children_iterator_t * iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + iterator->next_called = AXIS2_TRUE; + iterator->remove_called = AXIS2_FALSE; + if(iterator->current_child) + { + iterator->last_child = iterator->current_child; + iterator->current_child = axiom_node_get_next_sibling(iterator->current_child, env); + return iterator->last_child; + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_children_iterator_reset( + axiom_children_iterator_t * iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + iterator->current_child = iterator->first_child; + return AXIS2_SUCCESS; +} diff --git a/axiom/src/om/om_children_qname_iterator.c b/axiom/src/om/om_children_qname_iterator.c new file mode 100644 index 0000000..d508a9e --- /dev/null +++ b/axiom/src/om/om_children_qname_iterator.c @@ -0,0 +1,190 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axiom_children_qname_iterator +{ + axiom_node_t *current_child; + axiom_node_t *last_child; + axis2_bool_t next_called; + axis2_bool_t remove_called; + axutil_qname_t *given_qname; + axis2_bool_t need_to_move_forward; + axis2_bool_t matching_node_found; + +}; + +AXIS2_EXTERN axiom_children_qname_iterator_t *AXIS2_CALL +axiom_children_qname_iterator_create( + const axutil_env_t * env, + axiom_node_t * current_child, + axutil_qname_t * given_qname) +{ + axiom_children_qname_iterator_t *iterator = NULL; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, current_child, NULL); + + iterator = (axiom_children_qname_iterator_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_children_qname_iterator_t)); + + if(!iterator) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + iterator->current_child = NULL; + iterator->last_child = NULL; + iterator->need_to_move_forward = AXIS2_TRUE; + iterator->matching_node_found = AXIS2_FALSE; + iterator->next_called = AXIS2_FALSE; + iterator->remove_called = AXIS2_FALSE; + iterator->given_qname = NULL; + + iterator->current_child = current_child; + if(given_qname) + { + iterator->given_qname = axutil_qname_clone(given_qname, env); + if(!(iterator->given_qname)) + { + axiom_children_qname_iterator_free(iterator, env); + return NULL; + } + } + + return iterator; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_children_qname_iterator_free( + axiom_children_qname_iterator_t * iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(iterator->given_qname) + { + axutil_qname_free(iterator->given_qname, env); + } + AXIS2_FREE(env->allocator, iterator); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_children_qname_iterator_remove( + axiom_children_qname_iterator_t * iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, iterator, AXIS2_FAILURE); + + if(!(iterator->next_called)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_ITERATOR_NEXT_METHOD_HAS_NOT_YET_BEEN_CALLED, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + if(iterator->remove_called) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_ITERATOR_REMOVE_HAS_ALREADY_BEING_CALLED, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + iterator->remove_called = AXIS2_TRUE; + + if(!(iterator->last_child)) + return AXIS2_FAILURE; + axiom_node_free_tree(iterator->last_child, env); + iterator->last_child = NULL; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_children_qname_iterator_has_next( + axiom_children_qname_iterator_t * iterator, + const axutil_env_t * env) +{ + while(iterator->need_to_move_forward) + { + if(iterator->current_child) + { + axiom_element_t *om_element = NULL; + axutil_qname_t *element_qname = NULL; + + if(axiom_node_get_node_type(iterator->current_child, env) == AXIOM_ELEMENT) + { + om_element = (axiom_element_t *)axiom_node_get_data_element( + iterator-> current_child, env); + } + + if(om_element) + { + element_qname = axiom_element_get_qname(om_element, env, iterator->current_child); + } + + if(om_element && axutil_qname_equals(element_qname, env, iterator->given_qname)) + { + iterator->matching_node_found = AXIS2_TRUE; + iterator->need_to_move_forward = AXIS2_FALSE; + } + else + { + iterator->current_child = axiom_node_get_next_sibling(iterator->current_child, env); + if(iterator->current_child) + { + iterator->need_to_move_forward = AXIS2_TRUE; + iterator->matching_node_found = AXIS2_TRUE; + } + else + { + iterator->need_to_move_forward = AXIS2_FALSE; + iterator->matching_node_found = AXIS2_FALSE; + } + } + } + else + { + iterator->need_to_move_forward = AXIS2_FALSE; + } + } + return iterator->matching_node_found; + +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_children_qname_iterator_next( + axiom_children_qname_iterator_t * iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + iterator->need_to_move_forward = AXIS2_TRUE; + iterator->matching_node_found = AXIS2_FALSE; + iterator->next_called = AXIS2_TRUE; + iterator->remove_called = AXIS2_FALSE; + + iterator->last_child = iterator->current_child; + if(iterator->current_child) + { + iterator->current_child = axiom_node_get_next_sibling(iterator->current_child, env); + } + return iterator->last_child; +} + diff --git a/axiom/src/om/om_children_with_specific_attribute_iterator.c b/axiom/src/om/om_children_with_specific_attribute_iterator.c new file mode 100644 index 0000000..8f2e463 --- /dev/null +++ b/axiom/src/om/om_children_with_specific_attribute_iterator.c @@ -0,0 +1,177 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axiom_children_with_specific_attribute_iterator +{ + axiom_node_t *current_child; + axiom_node_t *last_child; + axis2_bool_t next_called; + axis2_bool_t remove_called; + axutil_qname_t *attr_qname; + axis2_char_t *attr_value; + axis2_bool_t detach; +}; + +AXIS2_EXTERN axiom_children_with_specific_attribute_iterator_t *AXIS2_CALL +axiom_children_with_specific_attribute_iterator_create( + const axutil_env_t * env, + axiom_node_t * current_child, + axutil_qname_t * attr_qname, + axis2_char_t * attr_value, + axis2_bool_t detach) +{ + axiom_children_with_specific_attribute_iterator_t *iterator = NULL; + + AXIS2_PARAM_CHECK(env->error, current_child, NULL); + AXIS2_PARAM_CHECK(env->error, attr_qname, NULL); + AXIS2_PARAM_CHECK(env->error, attr_value, NULL); + iterator = (axiom_children_with_specific_attribute_iterator_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_children_with_specific_attribute_iterator_t)); + + if(!iterator) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + iterator->current_child = NULL; + iterator->last_child = NULL; + + iterator->next_called = AXIS2_FALSE; + iterator->remove_called = AXIS2_FALSE; + + iterator->attr_qname = axutil_qname_clone(attr_qname, env); + iterator->attr_value = attr_value; + iterator->detach = detach; + + return iterator; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_children_with_specific_attribute_iterator_free( + axiom_children_with_specific_attribute_iterator_t * iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + if(iterator->attr_qname) + { + axutil_qname_free(iterator->attr_qname, env); + } + AXIS2_FREE(env->allocator, iterator); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_children_with_specific_attribute_iterator_remove( + axiom_children_with_specific_attribute_iterator_t * iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, iterator, AXIS2_FAILURE); + + if(!(iterator->next_called)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_ITERATOR_NEXT_METHOD_HAS_NOT_YET_BEEN_CALLED, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + if(iterator->remove_called) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_ITERATOR_REMOVE_HAS_ALREADY_BEING_CALLED, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + iterator->remove_called = AXIS2_TRUE; + + if(!(iterator->last_child)) + return AXIS2_FAILURE; + axiom_node_free_tree(iterator->last_child, env); + iterator->last_child = NULL; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_children_with_specific_attribute_iterator_has_next( + axiom_children_with_specific_attribute_iterator_t * iterator, + const axutil_env_t * env) +{ + axis2_bool_t matching_node_found = AXIS2_FALSE; + axis2_bool_t need_to_move_forward = AXIS2_TRUE; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(!(iterator->current_child)) + { + return AXIS2_FALSE; + } + while(need_to_move_forward) + { + if(axiom_node_get_node_type(iterator->current_child, env) == AXIOM_ELEMENT) + { + axiom_attribute_t *om_attr = NULL; + axiom_element_t *om_ele = NULL; + om_ele = (axiom_element_t *)axiom_node_get_data_element(iterator-> current_child, env); + om_attr = axiom_element_get_attribute(om_ele, env, iterator->attr_qname); + break; + /*if (om_attr && + (axutil_strcmp(axiom_attribute_get_value(om_attr, env), + iterator->attr_value) == 0)) + { + matching_node_found = AXIS2_TRUE; + need_to_move_forward = AXIS2_FALSE; + } + else + { + iterator->current_child = + axiom_node_get_next_sibling(iterator->current_child, env); + need_to_move_forward = (iterator->current_child != NULL); + + }*/ + } + else + { + + iterator->current_child = axiom_node_get_next_sibling(iterator->current_child, env); + need_to_move_forward = (iterator->current_child != NULL); + } + + } + return matching_node_found; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_children_with_specific_attribute_iterator_next( + axiom_children_with_specific_attribute_iterator_t * iterator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, iterator, NULL); + + iterator->next_called = AXIS2_TRUE; + iterator->remove_called = AXIS2_FALSE; + iterator->last_child = iterator->current_child; + iterator->current_child = axiom_node_get_next_sibling(iterator->current_child, env); + if(iterator->last_child && iterator->detach + && (axiom_node_get_parent(iterator->last_child, env))) + { + axiom_node_free_tree(iterator->last_child, env); + } + return iterator->last_child; +} diff --git a/axiom/src/om/om_comment.c b/axiom/src/om/om_comment.c new file mode 100644 index 0000000..ad17f74 --- /dev/null +++ b/axiom/src/om/om_comment.c @@ -0,0 +1,142 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "axiom_node_internal.h" +#include + +struct axiom_comment +{ + + /** comment text */ + axis2_char_t *value; +}; + +AXIS2_EXTERN axiom_comment_t *AXIS2_CALL +axiom_comment_create( + const axutil_env_t * env, + axiom_node_t * parent, + const axis2_char_t * value, + axiom_node_t ** node) +{ + axiom_comment_t *comment = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, value, NULL); + AXIS2_PARAM_CHECK(env->error, node, NULL); + *node = NULL; + *node = axiom_node_create(env); + if(!*node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + comment = (axiom_comment_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_comment_t)); + if(!comment) + { + AXIS2_FREE(env->allocator, (*node)); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + comment->value = NULL; + + if(value) + { + comment->value = (axis2_char_t *)axutil_strdup(env, value); + if(!comment->value) + { + AXIS2_FREE(env->allocator, comment); + AXIS2_FREE(env->allocator, (*node)); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + } + + axiom_node_set_data_element((*node), env, comment); + axiom_node_set_node_type((*node), env, AXIOM_COMMENT); + + if(parent) + { + axiom_node_add_child(parent, env, (*node)); + } + + return comment; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_comment_free( + axiom_comment_t * comment, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(comment->value) + { + AXIS2_FREE(env->allocator, comment->value); + } + AXIS2_FREE(env->allocator, comment); + return; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_comment_get_value( + axiom_comment_t * comment, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + return comment->value; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_comment_set_value( + axiom_comment_t * comment, + const axutil_env_t * env, + const axis2_char_t * value) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + if(comment->value) + { + AXIS2_FREE(env->allocator, comment->value); + } + + comment->value = (axis2_char_t *)axutil_strdup(env, value); + + if(!comment->value) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_comment_serialize( + axiom_comment_t * comment, + const axutil_env_t * env, + axiom_output_t * om_output) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_output, AXIS2_FAILURE); + + if(comment->value) + { + return axiom_output_write(om_output, env, AXIOM_COMMENT, 1, comment->value); + } + return AXIS2_FAILURE; +} diff --git a/axiom/src/om/om_data_source.c b/axiom/src/om/om_data_source.c new file mode 100644 index 0000000..3959e49 --- /dev/null +++ b/axiom/src/om/om_data_source.c @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include "axiom_node_internal.h" +#include +#include +#include +#include +#include + +/********************* axiom_data_source_struct ***************/ + +struct axiom_data_source +{ + + /** stream holding serialized XML string */ + axutil_stream_t *stream; +}; + +AXIS2_EXTERN axiom_data_source_t *AXIS2_CALL +axiom_data_source_create( + const axutil_env_t * env, + axiom_node_t * parent, + axiom_node_t ** node) +{ + + axiom_data_source_t *data_source = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, node, NULL); + + *node = axiom_node_create(env); + + if(!(*node)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + data_source = (axiom_data_source_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_data_source_t)); + if(!data_source) + { + AXIS2_FREE(env->allocator, *node); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + axiom_node_set_data_element((*node), env, data_source); + axiom_node_set_node_type((*node), env, AXIOM_DATA_SOURCE); + axiom_node_set_complete((*node), env, AXIS2_FALSE); + + data_source->stream = NULL; + + data_source->stream = axutil_stream_create_basic(env); + if(!(data_source->stream)) + { + AXIS2_FREE(env->allocator, *node); + AXIS2_FREE(env->allocator, data_source); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + if(parent && axiom_node_get_node_type(parent, env) == AXIOM_ELEMENT) + { + axiom_node_add_child(parent, env, (*node)); + } + + return data_source; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_data_source_free( + axiom_data_source_t * data_source, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(data_source->stream) + { + axutil_stream_free(data_source->stream, env); + } + + AXIS2_FREE(env->allocator, data_source); + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_data_source_serialize( + axiom_data_source_t * data_source, + const axutil_env_t * env, + axiom_output_t * om_output) +{ + int status = AXIS2_SUCCESS; + axis2_char_t *data = NULL; + unsigned int data_len = 0; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_output, AXIS2_FAILURE); + + data = axutil_stream_get_buffer(data_source->stream, env); + data_len = axutil_stream_get_len(data_source->stream, env); + if(data) + { + data[data_len] = '\0'; + status = axiom_output_write(om_output, env, AXIOM_DATA_SOURCE, 1, data); + } + return status; +} + +AXIS2_EXTERN axutil_stream_t *AXIS2_CALL +axiom_data_source_get_stream( + axiom_data_source_t * data_source, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + return data_source->stream; +} diff --git a/axiom/src/om/om_doctype.c b/axiom/src/om/om_doctype.c new file mode 100644 index 0000000..fa5616b --- /dev/null +++ b/axiom/src/om/om_doctype.c @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "axiom_node_internal.h" + +struct axiom_doctype +{ + + /** Doctype value */ + axis2_char_t *value; +}; + +AXIS2_EXTERN axiom_doctype_t *AXIS2_CALL +axiom_doctype_create( + const axutil_env_t * env, + axiom_node_t * parent, + const axis2_char_t * value, + axiom_node_t ** node) +{ + axiom_doctype_t *doctype = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, node, NULL); + + *node = axiom_node_create(env); + if(!*node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + doctype = (axiom_doctype_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_doctype_t)); + + if(!doctype) + { + AXIS2_FREE(env->allocator, (*node)); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + doctype->value = NULL; + + if(value) + { + doctype->value = (axis2_char_t *)axutil_strdup(env, value); + if(!doctype->value) + { + AXIS2_FREE(env->allocator, doctype); + AXIS2_FREE(env->allocator, (*node)); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + } + + axiom_node_set_data_element((*node), env, doctype); + axiom_node_set_node_type((*node), env, AXIOM_DOCTYPE); + + if(parent) + { + axiom_node_add_child(parent, env, (*node)); + } + + return doctype; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_doctype_free( + axiom_doctype_t * om_doctype, + const axutil_env_t * env) +{ + if(om_doctype) + { + if(om_doctype->value) + { + AXIS2_FREE(env->allocator, om_doctype->value); + } + AXIS2_FREE(env->allocator, om_doctype); + } + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_doctype_set_value( + axiom_doctype_t * om_doctype, + const axutil_env_t * env, + const axis2_char_t * value) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + om_doctype->value = (axis2_char_t *)axutil_strdup(env, value); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_doctype_get_value( + axiom_doctype_t * om_doctype, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + return om_doctype->value; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_doctype_serialize( + axiom_doctype_t * om_doctype, + const axutil_env_t * env, + axiom_output_t * om_output) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_output, AXIS2_FAILURE); + + if(om_doctype->value) + return axiom_output_write(om_output, env, AXIOM_DOCTYPE, 1, om_doctype->value); + + return AXIS2_FAILURE; +} diff --git a/axiom/src/om/om_document.c b/axiom/src/om/om_document.c new file mode 100644 index 0000000..149edec --- /dev/null +++ b/axiom/src/om/om_document.c @@ -0,0 +1,263 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axiom_document +{ + + /** root element */ + axiom_node_t *root_element; + + /** last child */ + axiom_node_t *last_child; + + /** first child */ + axiom_node_t *first_child; + + /** done building the document */ + axis2_bool_t done; + + /** builder of the document */ + struct axiom_stax_builder *builder; + + /** char set encoding */ + axis2_char_t *char_set_encoding; + + /** XML version */ + axis2_char_t *xml_version; +}; + +AXIS2_EXTERN axiom_document_t *AXIS2_CALL +axiom_document_create( + const axutil_env_t * env, + axiom_node_t * root, + axiom_stax_builder_t * builder) +{ + axiom_document_t *document = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + document = (axiom_document_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_document_t)); + + if(!document) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + document->builder = builder; + document->root_element = root; + document->first_child = root; + document->last_child = root; + document->xml_version = XML_VERSION; + document->char_set_encoding = CHAR_SET_ENCODING; + document->done = AXIS2_FALSE; + + return document; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_document_free( + axiom_document_t * document, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(document->root_element) + { + axiom_node_free_tree(document->root_element, env); + } + AXIS2_FREE(env->allocator, document); + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_document_free_self( + axiom_document_t * document, + const axutil_env_t * env) +{ + AXIS2_FREE(env->allocator, document); + return; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_document_build_next( + axiom_document_t * document, + const axutil_env_t * env) +{ + axiom_node_t *last_child = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + if(!document->builder) + { + return NULL; + } + + if(!(document->root_element)) + { + last_child = axiom_stax_builder_next(document->builder, env); + if(last_child) + { + document->last_child = last_child; + document->root_element = last_child; + } + return last_child; + } + else if((document->root_element) && (axiom_node_is_complete(document->root_element, env) + == AXIS2_TRUE)) + return NULL; /* Nothing wrong but done with pulling */ + + last_child = axiom_stax_builder_next(document->builder, env); + if(last_child) + { + document->last_child = last_child; + } + return last_child; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_document_get_root_element( + axiom_document_t * document, + const axutil_env_t * env) +{ + axiom_node_t *node = NULL; + AXIS2_ENV_CHECK(env, NULL); + + if(document->root_element) + { + return document->root_element; + } + node = axiom_document_build_next(document, env); + + if(document->root_element) + { + return document->root_element; + } + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_DOCUMENT_STATE_ROOT_NULL, AXIS2_FAILURE); + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_document_set_root_element( + axiom_document_t * document, + const axutil_env_t * env, + axiom_node_t * node) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, node, AXIS2_FAILURE); + + if(document->root_element) + { + axiom_node_free_tree(document->root_element, env); + document->root_element = node; + return AXIS2_SUCCESS; + } + else + { + document->root_element = node; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_document_build_all( + struct axiom_document * document, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + if(!document) + { + return NULL; + } + if(!document->root_element) + { + axiom_document_get_root_element(document, env); + } + if(document->root_element) + { + do + { + axiom_node_t *ret_val = NULL; + ret_val = axiom_document_build_next(document, env); + if(!ret_val) + { + if(axiom_node_is_complete(document->root_element, env) == AXIS2_TRUE) + { + + /** document is completly build */ + return document->root_element; + } + else + { + + /** error occurred */ + return NULL; + } + } + } + while(!axiom_node_is_complete(document->root_element, env)); + return document->root_element; + } + else + return NULL; +} + +AXIS2_EXTERN axiom_stax_builder_t *AXIS2_CALL +axiom_document_get_builder( + axiom_document_t * document, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + return document->builder; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_document_set_builder( + axiom_document_t * document, + const axutil_env_t * env, + axiom_stax_builder_t * builder) +{ + document->builder = builder; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_document_serialize( + axiom_document_t * document, + const axutil_env_t * env, + axiom_output_t * om_output) +{ + if(!document) + return AXIS2_FAILURE; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(!(document->root_element)) + { + axiom_document_get_root_element(document, env); + } + if(document->root_element) + { + return axiom_node_serialize(document->root_element, env, om_output); + } + else + { + return AXIS2_FAILURE; + } +} diff --git a/axiom/src/om/om_element.c b/axiom/src/om/om_element.c new file mode 100644 index 0000000..84982cd --- /dev/null +++ b/axiom/src/om/om_element.c @@ -0,0 +1,1818 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "axiom_node_internal.h" +#include +#include +#include +#include +#include +#include + +struct axiom_element +{ + + /** Element's namespace */ + axiom_namespace_t *ns; + + /** Element's local name */ + axutil_string_t *localname; + + /** List of attributes */ + axutil_hash_t *attributes; + + /** List of namespaces */ + axutil_hash_t *namespaces; + + axutil_qname_t *qname; + + axiom_child_element_iterator_t *child_ele_iter; + + axiom_children_iterator_t *children_iter; + + axiom_children_qname_iterator_t *children_qname_iter; + + axis2_char_t *text_value; + + int next_ns_prefix_number; + + axis2_bool_t is_empty; + +}; + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_element_create( + const axutil_env_t * env, + axiom_node_t * parent, + const axis2_char_t * localname, + axiom_namespace_t * ns, + axiom_node_t ** node) +{ + axiom_element_t *element; + AXIS2_ENV_CHECK(env, NULL); + + if(!localname || !node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "localname or node is NULL"); + return NULL; + } + + (*node) = axiom_node_create(env); + if(!(*node)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No Memory"); + return NULL; + } + element = (axiom_element_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_element_t)); + + if(!element) + { + AXIS2_FREE(env->allocator, (*node)); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No Memory"); + return NULL; + } + element->ns = NULL; + element->localname = NULL; + element->attributes = NULL; + element->namespaces = NULL; + element->qname = NULL; + element->child_ele_iter = NULL; + element->children_iter = NULL; + element->children_qname_iter = NULL; + element->text_value = NULL; + element->next_ns_prefix_number = 0; + element->is_empty = AXIS2_FALSE; + + element->localname = axutil_string_create(env, localname); + if(!element->localname) + { + AXIS2_FREE(env->allocator, element); + AXIS2_FREE(env->allocator, (*node)); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + if(parent) + { + axiom_node_add_child(parent, env, (*node)); + } + axiom_node_set_complete((*node), env, AXIS2_FALSE); + axiom_node_set_node_type((*node), env, AXIOM_ELEMENT); + axiom_node_set_data_element((*node), env, element); + + if(ns) + { + axis2_char_t *uri = NULL; + axis2_char_t *prefix = NULL; + + uri = axiom_namespace_get_uri(ns, env); + prefix = axiom_namespace_get_prefix(ns, env); + + /* + if (prefix && axutil_strcmp(prefix, "") == 0) + { + element->ns = NULL; + return element; + } + */ + element->ns = axiom_element_find_namespace(element, env, *node, uri, prefix); + + if(element->ns) + { + if(ns != element->ns) + { + axiom_namespace_free(ns, env); + ns = NULL; + } + } + + if(!(element->ns)) + { + if(axiom_element_declare_namespace(element, env, *node, ns) == AXIS2_SUCCESS) + { + element->ns = ns; + } + } + + /*if (prefix && axutil_strcmp(prefix, "") == 0) + { + element->ns = NULL; + } + */ + } + + return element; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_element_create_with_qname( + const axutil_env_t * env, + axiom_node_t * parent, + const axutil_qname_t * qname, + axiom_node_t ** node) +{ + axiom_element_t *element = NULL; + axis2_char_t *localpart = NULL; + + AXIS2_ENV_CHECK(env, NULL); + if(!qname || !node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "qname or node is NULL"); + return NULL; + } + localpart = axutil_qname_get_localpart(qname, env); + if(!localpart) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "localpart is NULL"); + return NULL; + } + element = axiom_element_create(env, parent, localpart, NULL, node); + if(!element) + { + return NULL; + } + + if(*node) + { + axiom_element_t *om_element = NULL; + axis2_char_t *temp_nsuri = NULL; + axis2_char_t *temp_prefix = NULL; + axiom_namespace_t *ns = NULL; + + om_element = ((axiom_element_t *)axiom_node_get_data_element((*node), env)); + temp_nsuri = axutil_qname_get_uri(qname, env); + temp_prefix = axutil_qname_get_prefix(qname, env); + if(!om_element) + { + return NULL; + } + + if((!temp_nsuri) || (axutil_strcmp(temp_nsuri, "") == 0)) + { + + /** no namespace uri is available in given qname + no need to bother about it + */ + return om_element; + } + + om_element->ns = axiom_element_find_namespace(om_element, env, (*node), temp_nsuri, + temp_prefix); + + if(!(element->ns)) + { + + /** could not find a namespace so declare namespace */ + ns = axiom_namespace_create(env, temp_nsuri, temp_prefix); + if(ns && axiom_element_declare_namespace(om_element, env, *node, ns) == AXIS2_SUCCESS) + { + (element->ns) = ns; + return om_element; + } + else + { + if(ns) + { + axiom_namespace_free(ns, env); + } + axiom_element_free(om_element, env); + AXIS2_FREE(env->allocator, *node); + return NULL; + } + } + } + return element; +} + +AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL +axiom_element_find_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * element_node, + const axis2_char_t * uri, + const axis2_char_t * prefix) +{ + axiom_node_t *parent = NULL; + AXIS2_ENV_CHECK(env, NULL); + + if(!element_node || !om_element) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "element_node or om_element is NULL"); + return NULL; + } + if(!axiom_node_get_data_element(element_node, env) || axiom_node_get_node_type(element_node, + env) != AXIOM_ELEMENT) + { + /* wrong element type or null node */ + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Wrong element type or null node"); + return NULL; + } + + if(om_element->namespaces) + { + void *ns = NULL; + + if(uri && (!prefix || axutil_strcmp(prefix, "") == 0)) + { + + /** check for a default namepsace */ + axiom_namespace_t *default_ns = NULL; + axutil_hash_index_t *hashindex; + + default_ns = axiom_element_get_default_namespace(om_element, env, element_node); + if(default_ns) + { + axis2_char_t *default_uri = NULL; + default_uri = axiom_namespace_get_uri(default_ns, env); + + if(axutil_strcmp(uri, default_uri) == 0) + { + return default_ns; + } + } + + /** prefix is null , so iterate the namespaces hash to find the namespace */ + for(hashindex = axutil_hash_first(om_element->namespaces, env); hashindex; hashindex + = axutil_hash_next(env, hashindex)) + { + axutil_hash_this(hashindex, NULL, NULL, &ns); + if(ns) + { + axiom_namespace_t *temp_ns = NULL; + axis2_char_t *temp_nsuri = NULL; + temp_ns = (axiom_namespace_t *)ns; + temp_nsuri = axiom_namespace_get_uri(temp_ns, env); + + if(axutil_strcmp(temp_nsuri, uri) == 0) + { + /** namespace uri matches, so free hashindex and return ns*/ + AXIS2_FREE(env->allocator, hashindex); + return (axiom_namespace_t *)(ns); + } + temp_ns = NULL; + temp_nsuri = NULL; + ns = NULL; + } + } + ns = NULL; + } + else if(prefix) + { + + /** prefix is not null get namespace directly if exist */ + ns = axutil_hash_get(om_element->namespaces, prefix, AXIS2_HASH_KEY_STRING); + if(ns) + { + axiom_namespace_t *found_ns = NULL; + axis2_char_t *found_uri = NULL; + found_ns = (axiom_namespace_t *)ns; + found_uri = axiom_namespace_get_uri(found_ns, env); + if(uri) + { + /* if uri provided, return found ns only if uri matches */ + return (axutil_strcmp(found_uri, uri) == 0) ? found_ns : NULL; + } + return found_ns; + } + } + } + + /** could not find the namespace in current element scope + look in the parent */ + + parent = axiom_node_get_parent(element_node, env); + + if(parent) + { + if(axiom_node_get_node_type(parent, env) == AXIOM_ELEMENT) + { + axiom_element_t *om_element = NULL; + om_element = (axiom_element_t *)axiom_node_get_data_element(parent, env); + if(om_element) + + { /** parent exist, parent is om element so find in parent*/ + return axiom_element_find_namespace(om_element, env, parent, uri, prefix); + } + } + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_element_declare_namespace_assume_param_ownership( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_namespace_t * ns) +{ + axis2_char_t *prefix = NULL; + axis2_char_t *uri = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(!ns || !om_element) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "namespace or om_element is NULL"); + return AXIS2_FAILURE; + } + + uri = axiom_namespace_get_uri(ns, env); + prefix = axiom_namespace_get_prefix(ns, env); + + if(!(om_element->namespaces)) + { + om_element->namespaces = axutil_hash_make(env); + if(!(om_element->namespaces)) + { + return AXIS2_FAILURE; + } + } + if(prefix) + { + axutil_hash_set(om_element->namespaces, prefix, AXIS2_HASH_KEY_STRING, ns); + } + else + { + axis2_char_t *key = NULL; + key = AXIS2_MALLOC(env->allocator, sizeof(char) * 10); + memset(key, 0, sizeof(char) * 10); + om_element->next_ns_prefix_number++; + key[0] = '\0'; + axutil_hash_set(om_element->namespaces, key, AXIS2_HASH_KEY_STRING, ns); + } + axiom_namespace_increment_ref(ns, env); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_element_declare_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * node, + axiom_namespace_t * ns) +{ + axiom_namespace_t *declared_ns = NULL; + axis2_char_t *prefix = NULL; + axis2_char_t *uri = NULL; + + if(!node || !ns || !om_element) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "node or namespace or om_element is NULL"); + return AXIS2_FAILURE; + } + + uri = axiom_namespace_get_uri(ns, env); + prefix = axiom_namespace_get_prefix(ns, env); + + declared_ns = axiom_element_find_namespace(om_element, env, node, uri, prefix); + + if(declared_ns) + { + if(axiom_namespace_equals(ns, env, declared_ns) == AXIS2_TRUE) + { + /*Namespace already declared, so return */ + return AXIS2_SUCCESS; + } + } + + if(!(om_element->namespaces)) + { + om_element->namespaces = axutil_hash_make(env); + if(!(om_element->namespaces)) + { + return AXIS2_FAILURE; + } + } + if(prefix) + { + axutil_hash_set(om_element->namespaces, prefix, AXIS2_HASH_KEY_STRING, ns); + } + else + { + axis2_char_t *key = NULL; + key = AXIS2_MALLOC(env->allocator, sizeof(char) * 10); + memset(key, 0, sizeof(char) * 10); + om_element->next_ns_prefix_number++; + key[0] = '\0'; + axutil_hash_set(om_element->namespaces, key, AXIS2_HASH_KEY_STRING, ns); + } + axiom_namespace_increment_ref(ns, env); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL +axiom_element_find_declared_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + const axis2_char_t * uri, + const axis2_char_t * prefix) +{ + axutil_hash_index_t *hash_index = NULL; + void *ns = NULL; + AXIS2_ENV_CHECK(env, NULL); + + if(!(om_element->namespaces)) + { + return NULL; + } + if(uri && (!prefix || axutil_strcmp(prefix, "") == 0)) + { + /** prefix null iterate the namespace hash for matching uri */ + for(hash_index = axutil_hash_first(om_element->namespaces, env); hash_index; hash_index + = axutil_hash_next(env, hash_index)) + { + axutil_hash_this(hash_index, NULL, NULL, &ns); + if(ns) + { + axiom_namespace_t *temp_ns = NULL; + axis2_char_t *temp_nsuri = NULL; + temp_ns = (axiom_namespace_t *)(ns); + temp_nsuri = axiom_namespace_get_uri(temp_ns, env); + if(axutil_strcmp(temp_nsuri, uri) == 0) + { + AXIS2_FREE(env->allocator, hash_index); + return temp_ns; + } + temp_ns = NULL; + temp_nsuri = NULL; + } + } + ns = NULL; + return NULL; + } + else if(prefix) + { + axiom_namespace_t *found_ns = NULL; + ns = axutil_hash_get(om_element->namespaces, prefix, AXIS2_HASH_KEY_STRING); + if(ns) + { + axis2_char_t *found_uri = NULL; + found_ns = (axiom_namespace_t *)ns; + found_uri = axiom_namespace_get_uri(found_ns, env); + /* If uri provided, ensure this namespace found by prefix matches the uri */ + if(uri) + { + return (axutil_strcmp(found_uri, uri) == 0) ? found_ns : NULL; + } + return found_ns; + } + } + return NULL; +} + +AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL +axiom_element_find_namespace_with_qname( + axiom_element_t * element, + const axutil_env_t * env, + axiom_node_t * node, + axutil_qname_t * qname) +{ + AXIS2_ENV_CHECK(env, NULL); + if(!element || !node || !qname) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "element or node or qname is NULL"); + return NULL; + } + + if(axutil_qname_get_uri(qname, env)) + { + return axiom_element_find_namespace(element, env, node, axutil_qname_get_uri(qname, env), + axutil_qname_get_prefix(qname, env)); + } + else + { + return NULL; + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_element_add_attribute( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_attribute_t * attribute, + axiom_node_t * element_node) +{ + + axutil_qname_t *qname = NULL; + axiom_namespace_t *om_namespace = NULL; + axiom_namespace_t *temp_ns = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, attribute, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, element_node, AXIS2_FAILURE); + + /* ensure the attribute's namespace structure is declared */ + om_namespace = axiom_attribute_get_namespace(attribute, env); + if(om_namespace) + { + temp_ns = axiom_element_find_namespace(om_element, env, element_node, + axiom_namespace_get_uri(om_namespace, env), axiom_namespace_get_prefix(om_namespace, + env)); + if(temp_ns != om_namespace) + { + axis2_status_t status; + /* as the attribute's namespace structure is not declared in scope, + declare it here */ + status = axiom_element_declare_namespace_assume_param_ownership(om_element, env, + om_namespace); + if(status != AXIS2_SUCCESS) + { + return status; + } + } + } + + if(!(om_element->attributes)) + { + om_element->attributes = axutil_hash_make(env); + if(!(om_element->attributes)) + { + return AXIS2_FAILURE; + } + } + + qname = axiom_attribute_get_qname(attribute, env); + if(qname) + { + axis2_char_t *name = axutil_qname_to_string(qname, env); + axutil_hash_set(om_element->attributes, name, AXIS2_HASH_KEY_STRING, attribute); + axiom_attribute_increment_ref(attribute, env); + } + return ((qname) ? AXIS2_SUCCESS : AXIS2_FAILURE); +} + +AXIS2_EXTERN axiom_attribute_t *AXIS2_CALL +axiom_element_get_attribute( + axiom_element_t * om_element, + const axutil_env_t * env, + axutil_qname_t * qname) +{ + axis2_char_t *name = NULL; + axiom_attribute_t *attr = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, qname, NULL); + + name = axutil_qname_to_string(qname, env); + + if((om_element->attributes) && name) + { + attr = (axiom_attribute_t *)(axutil_hash_get(om_element->attributes, name, + AXIS2_HASH_KEY_STRING)); + } + return attr; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_element_free( + axiom_element_t * om_element, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(!om_element) + { + return; + } + + if(om_element->localname) + { + axutil_string_free(om_element->localname, env); + } + if(om_element->ns) + { + /* it is the responsibility of the element where the namespace is declared to free it */ + } + if(om_element->attributes) + { + axutil_hash_index_t *hi; + void *val = NULL; + + for(hi = axutil_hash_first(om_element->attributes, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + + if(val) + { + axiom_attribute_free((axiom_attribute_t *)val, env); + } + } + axutil_hash_free(om_element->attributes, env); + } + + if(om_element->namespaces) + { + axutil_hash_index_t *hi; + void *val = NULL; + for(hi = axutil_hash_first(om_element->namespaces, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + if(val) + { + axiom_namespace_free((axiom_namespace_t *)val, env); + } + } + axutil_hash_free(om_element->namespaces, env); + } + if(om_element->qname) + { + axutil_qname_free(om_element->qname, env); + } + if(om_element->children_iter) + { + axiom_children_iterator_free(om_element->children_iter, env); + } + if(om_element->child_ele_iter) + { + AXIOM_CHILD_ELEMENT_ITERATOR_FREE(om_element->child_ele_iter, env); + } + if(om_element->children_qname_iter) + { + axiom_children_qname_iterator_free(om_element->children_qname_iter, env); + } + if(om_element->text_value) + { + AXIS2_FREE(env->allocator, om_element->text_value); + } + AXIS2_FREE(env->allocator, om_element); + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_element_serialize_start_part( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_output_t * om_output, + axiom_node_t * ele_node) +{ + int status = AXIS2_SUCCESS; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_output, AXIS2_FAILURE); + + if(om_element->is_empty) + { + if(om_element->ns) + { + axis2_char_t *uri = NULL; + axis2_char_t *prefix = NULL; + + uri = axiom_namespace_get_uri(om_element->ns, env); + prefix = axiom_namespace_get_prefix(om_element->ns, env); + + if((uri) && (prefix) && (axutil_strcmp(prefix, "") != 0)) + { + status = axiom_output_write(om_output, env, AXIOM_ELEMENT, 4, + axutil_string_get_buffer(om_element-> localname, env), uri, prefix, NULL); + } + else if(uri) + { + status = axiom_output_write(om_output, env, AXIOM_ELEMENT, 4, + axutil_string_get_buffer(om_element-> localname, env), uri, NULL, NULL); + } + } + else + { + status = axiom_output_write(om_output, env, AXIOM_ELEMENT, 4, axutil_string_get_buffer( + om_element-> localname, env), NULL, NULL, NULL); + } + } + else + { + if(om_element->ns) + { + axis2_char_t *uri = NULL; + axis2_char_t *prefix = NULL; + + uri = axiom_namespace_get_uri(om_element->ns, env); + prefix = axiom_namespace_get_prefix(om_element->ns, env); + + if((uri) && (prefix) && (axutil_strcmp(prefix, "") != 0)) + { + status = axiom_output_write(om_output, env, AXIOM_ELEMENT, 3, + axutil_string_get_buffer(om_element-> localname, env), uri, prefix); + } + else if(uri) + { + status = axiom_output_write(om_output, env, AXIOM_ELEMENT, 2, + axutil_string_get_buffer(om_element-> localname, env), uri); + } + } + else + { + status = axiom_output_write(om_output, env, AXIOM_ELEMENT, 1, axutil_string_get_buffer( + om_element-> localname, env)); + } + } + if(om_element->attributes) + { + axutil_hash_index_t *hi; + void *val; + for(hi = axutil_hash_first(om_element->attributes, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + + if(val) + { + status = axiom_attribute_serialize((axiom_attribute_t *)val, env, om_output); + } + else + { + status = AXIS2_FAILURE; + } + } + } + + if(om_element->namespaces) + { + axutil_hash_index_t *hi; + void *val; + for(hi = axutil_hash_first(om_element->namespaces, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + + if(val) + { + status = axiom_namespace_serialize((axiom_namespace_t *)val, env, om_output); + } + else + { + status = AXIS2_FAILURE; + } + } + } + + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_element_serialize_end_part( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_output_t * om_output) +{ + int status = AXIS2_SUCCESS; + AXIS2_PARAM_CHECK(env->error, om_output, AXIS2_FAILURE); + status = axiom_output_write(om_output, env, AXIOM_ELEMENT, 0); + return status; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_element_get_localname( + axiom_element_t * om_element, + const axutil_env_t * env) +{ + if(om_element->localname) + return (axis2_char_t *)axutil_string_get_buffer(om_element->localname, env); + else + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_element_set_localname( + axiom_element_t * om_element, + const axutil_env_t * env, + const axis2_char_t * localname) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + if(om_element->localname) + { + axutil_string_free(om_element->localname, env); + om_element->localname = NULL; + } + om_element->localname = axutil_string_create(env, localname); + if(!(om_element->localname)) + { + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL +axiom_element_get_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * ele_node) +{ + axiom_namespace_t *ns = NULL; + AXIS2_ENV_CHECK(env, NULL); + + if(om_element->ns) + { + ns = om_element->ns; + } + else + { + ns = axiom_element_get_default_namespace(om_element, env, ele_node); + + } + return ns; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_element_set_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_namespace_t * ns, + axiom_node_t * node) +{ + axiom_namespace_t *om_ns = NULL; + axis2_status_t status = AXIS2_SUCCESS; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, ns, AXIS2_FAILURE); + om_ns = axiom_element_find_namespace(om_element, env, node, axiom_namespace_get_uri(ns, env), + axiom_namespace_get_prefix(ns, env)); + if(!om_ns) + { + status = axiom_element_declare_namespace(om_element, env, node, ns); + if(status == AXIS2_FAILURE) + { + return AXIS2_FAILURE; + } + om_element->ns = ns; + } + else + { + om_element->ns = om_ns; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_element_set_namespace_assume_param_ownership( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_namespace_t * ns) +{ + om_element->ns = ns; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axiom_element_get_all_attributes( + axiom_element_t * om_element, + const axutil_env_t * env) +{ + + return om_element->attributes; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axiom_element_get_namespaces( + axiom_element_t * om_element, + const axutil_env_t * env) +{ + return om_element->namespaces; +} + +AXIS2_EXTERN axutil_qname_t *AXIS2_CALL +axiom_element_get_qname( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * ele_node) +{ + axiom_namespace_t *ns = NULL; + AXIS2_ENV_CHECK(env, NULL); + + if(om_element->qname) + { + return om_element->qname; + } + else + { + ns = axiom_element_get_namespace(om_element, env, ele_node); + if(ns) + { + if(axiom_namespace_get_prefix(ns, env)) + { + om_element->qname = axutil_qname_create(env, axutil_string_get_buffer( + om_element->localname, env), axiom_namespace_get_uri(ns, env), + axiom_namespace_get_prefix(ns, env)); + } + else + { + om_element->qname = axutil_qname_create(env, axutil_string_get_buffer( + om_element->localname, env), axiom_namespace_get_uri(ns, env), NULL); + } + } + else + { + om_element->qname = axutil_qname_create(env, axutil_string_get_buffer( + om_element->localname, env), NULL, NULL); + } + } + return om_element->qname; +} + +AXIS2_EXTERN axiom_children_iterator_t *AXIS2_CALL +axiom_element_get_children( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * element_node) +{ + AXIS2_PARAM_CHECK(env->error, element_node, NULL); + + if(!om_element->children_iter) + { + om_element->children_iter = axiom_children_iterator_create(env, axiom_node_get_first_child( + element_node, env)); + } + else + { + axiom_children_iterator_reset(om_element->children_iter, env); + } + return om_element->children_iter; +} + +AXIS2_EXTERN axiom_children_qname_iterator_t *AXIS2_CALL +axiom_element_get_children_with_qname( + axiom_element_t * om_element, + const axutil_env_t * env, + axutil_qname_t * element_qname, + axiom_node_t * element_node) +{ + AXIS2_PARAM_CHECK(env->error, element_node, NULL); + if(om_element->children_qname_iter) + { + axiom_children_qname_iterator_free(om_element->children_qname_iter, env); + om_element->children_qname_iter = NULL; + } + om_element->children_qname_iter = axiom_children_qname_iterator_create(env, + axiom_node_get_first_child(element_node, env), element_qname); + return om_element->children_qname_iter; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_element_get_first_child_with_qname( + axiom_element_t * om_element, + const axutil_env_t * env, + axutil_qname_t * element_qname, + axiom_node_t * element_node, + axiom_node_t ** child_node) +{ + axiom_node_t *om_node = NULL; + axiom_children_qname_iterator_t *children_iterator = NULL; + + AXIS2_PARAM_CHECK(env->error, element_qname, NULL); + AXIS2_PARAM_CHECK(env->error, element_node, NULL); + + om_node = axiom_node_get_first_child(element_node, env); + if(!om_node) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "There are no child elements for the node"); + return NULL; + } + children_iterator = axiom_children_qname_iterator_create(env, om_node, element_qname); + if(!children_iterator) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Could not create children qname iterator"); + return NULL; + } + om_node = NULL; + if(axiom_children_qname_iterator_has_next(children_iterator, env)) + { + om_node = axiom_children_qname_iterator_next(children_iterator, env); + } + if(om_node && (axiom_node_get_node_type(om_node, env) == AXIOM_ELEMENT)) + { + axiom_children_qname_iterator_free(children_iterator, env); + + if(child_node) + { + *child_node = om_node; + } + return (axiom_element_t *)axiom_node_get_data_element(om_node, env); + } + + axiom_children_qname_iterator_free(children_iterator, env); + + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_element_remove_attribute( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_attribute_t * om_attribute) +{ + axutil_qname_t *qname = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_attribute, AXIS2_FAILURE); + + qname = axiom_attribute_get_qname(om_attribute, env); + if(qname && (om_element->attributes)) + { + axis2_char_t *name = NULL; + name = axutil_qname_to_string(qname, env); + if(name) + { + axutil_hash_set(om_element->attributes, name, AXIS2_HASH_KEY_STRING, NULL); + return AXIS2_SUCCESS; + } + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_element_get_first_element( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * element_node, + axiom_node_t ** first_ele_node) +{ + axiom_node_t *temp_node = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, element_node, NULL); + + temp_node = axiom_node_get_first_child(element_node, env); + while(temp_node) + { + if(axiom_node_get_node_type(temp_node, env) == AXIOM_ELEMENT) + { + if(first_ele_node) + { + *first_ele_node = temp_node; + } + return (axiom_element_t *)axiom_node_get_data_element(temp_node, env); + } + else + { + temp_node = axiom_node_get_next_sibling(temp_node, env); + } + } + return NULL; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_element_get_text( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * element_node) +{ + axis2_char_t *dest = NULL; + const axis2_char_t *temp_text = NULL; + axiom_text_t *text_node = NULL; + axiom_node_t *temp_node = NULL; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, element_node, NULL); + + if(om_element->text_value) + { + AXIS2_FREE(env->allocator, om_element->text_value); + om_element->text_value = NULL; + } + + temp_node = axiom_node_get_first_child(element_node, env); + + while(temp_node) + { + if(axiom_node_get_node_type(temp_node, env) == AXIOM_TEXT) + { + int dest_len = 0; + int curr_len = 0; + axis2_char_t *temp_dest = NULL; + + text_node = (axiom_text_t *)axiom_node_get_data_element(temp_node, env); + if(text_node) + { + temp_text = axiom_text_get_value(text_node, env); + if(dest && temp_text && axutil_strcmp(temp_text, "") != 0) + { + dest_len = axutil_strlen(dest); + curr_len = dest_len + axutil_strlen(temp_text); + temp_dest = AXIS2_MALLOC(env->allocator, (curr_len + 1) * sizeof(axis2_char_t)); + + memcpy(temp_dest, dest, dest_len * sizeof(axis2_char_t)); + memcpy((temp_dest + dest_len * sizeof(axis2_char_t)), temp_text, curr_len + - dest_len); + + temp_dest[curr_len] = '\0'; + + AXIS2_FREE(env->allocator, dest); + dest = NULL; + dest = temp_dest; + } + else if(!dest && temp_text && axutil_strcmp(temp_text, "") != 0) + { + dest = axutil_strdup(env, temp_text); + } + } + } + temp_node = axiom_node_get_next_sibling(temp_node, env); + } + + om_element->text_value = dest; + return om_element->text_value; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_element_set_text( + axiom_element_t * om_element, + const axutil_env_t * env, + const axis2_char_t * text, + axiom_node_t * element_node) +{ + axiom_node_t *temp_node, *next_node; + axiom_text_t *om_text = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, text, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, element_node, AXIS2_FAILURE); + + next_node = axiom_node_get_first_child(element_node, env); + while(next_node) + { + temp_node = next_node; + next_node = axiom_node_get_next_sibling(temp_node, env); + if(axiom_node_get_node_type(temp_node, env) == AXIOM_TEXT) + { + axiom_node_free_tree(temp_node, env); + } + } + + om_text = axiom_text_create(env, NULL, text, &temp_node); + axiom_node_add_child(element_node, env, temp_node); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_element_to_string( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * element_node) +{ + return axiom_node_to_string(element_node, env); +} + +AXIS2_EXTERN axiom_child_element_iterator_t *AXIS2_CALL +axiom_element_get_child_elements( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * element_node) +{ + axiom_node_t *first_node = NULL; + axiom_element_t *ele = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, element_node, NULL); + ele = axiom_element_get_first_element(om_element, env, element_node, &first_node); + if(om_element->child_ele_iter) + { + return om_element->child_ele_iter; + } + else if(ele && first_node) + { + om_element->child_ele_iter = axiom_child_element_iterator_create(env, first_node); + return om_element->child_ele_iter; + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_element_build( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * om_ele_node) +{ + axiom_stax_builder_t *builder = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + AXIS2_PARAM_CHECK(env->error, om_ele_node, AXIS2_FAILURE); + if(axiom_node_get_node_type(om_ele_node, env) != AXIOM_ELEMENT) + { + return AXIS2_FAILURE; + } + + builder = axiom_node_get_builder(om_ele_node, env); + if(!builder) + { + return AXIS2_FAILURE; + } + while(!axiom_node_is_complete(om_ele_node, env) + && !axiom_stax_builder_is_complete(builder, env)) + { + void *value = NULL; + value = axiom_stax_builder_next(builder, env); + if(!value) + { + return AXIS2_FAILURE; + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL +axiom_element_get_default_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * element_node) +{ + axiom_node_t *parent_node = NULL; + axiom_namespace_t *default_ns = NULL; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, element_node, NULL); + + if(om_element->namespaces) + { + default_ns = axutil_hash_get(om_element->namespaces, "", AXIS2_HASH_KEY_STRING); + if(default_ns) + { + return default_ns; + } + } + + parent_node = axiom_node_get_parent(element_node, env); + if((parent_node) && (axiom_node_get_node_type(parent_node, env) == AXIOM_ELEMENT)) + { + axiom_element_t *parent_ele = NULL; + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + if(parent_ele) + { + return axiom_element_get_default_namespace(parent_ele, env, parent_node); + } + } + return NULL; +} + +/** + * declared a default namespace explicitly + */ +AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL +axiom_element_declare_default_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + axis2_char_t * uri) +{ + axiom_namespace_t *default_ns = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, uri, NULL); + + if(axutil_strcmp(uri, "") == 0) + { + return NULL; + } + + default_ns = axiom_namespace_create(env, uri, ""); + if(!default_ns) + { + return NULL; + } + if(!om_element->namespaces) + { + om_element->namespaces = axutil_hash_make(env); + if(!(om_element->namespaces)) + { + axiom_namespace_free(default_ns, env); + return NULL; + } + } + + axutil_hash_set(om_element->namespaces, "", AXIS2_HASH_KEY_STRING, default_ns); + axiom_namespace_increment_ref(default_ns, env); + return default_ns; +} + +/** + * checks for the namespace in the context of this element + * with the given prefix + */ + +AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL +axiom_element_find_namespace_uri( + axiom_element_t * om_element, + const axutil_env_t * env, + const axis2_char_t * prefix, + axiom_node_t * element_node) +{ + axiom_node_t *parent_node = NULL; + axiom_namespace_t *ns = NULL; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, element_node, NULL); + AXIS2_PARAM_CHECK(env->error, prefix, NULL); + + if(om_element->namespaces) + { + ns = axutil_hash_get(om_element->namespaces, prefix, AXIS2_HASH_KEY_STRING); + if(ns) + { + return ns; + } + } + + parent_node = axiom_node_get_parent(element_node, env); + if((parent_node) && (axiom_node_get_node_type(parent_node, env) == AXIOM_ELEMENT)) + { + axiom_element_t *parent_ele = NULL; + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + if(parent_ele) + { + return axiom_element_find_namespace_uri(parent_ele, env, prefix, parent_node); + } + } + return NULL; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_element_get_attribute_value( + axiom_element_t * om_element, + const axutil_env_t * env, + axutil_qname_t * qname) +{ + axis2_char_t *name = NULL; + axiom_attribute_t *attr = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, qname, NULL); + + name = axutil_qname_to_string(qname, env); + + if((om_element->attributes) && (NULL != name)) + { + attr = (axiom_attribute_t *)axutil_hash_get(om_element->attributes, name, + AXIS2_HASH_KEY_STRING); + if(attr) + { + return axiom_attribute_get_value(attr, env); + } + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_element_set_namespace_with_no_find_in_current_scope( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_namespace_t * om_ns) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_ns, AXIS2_FAILURE); + om_element->ns = om_ns; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axiom_element_extract_attributes( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * ele_node) +{ + axutil_hash_index_t *hi = NULL; + axutil_hash_t *ht_cloned = NULL; + + axiom_attribute_t *om_attr = NULL; + axiom_attribute_t *cloned_attr = NULL; + + axiom_namespace_t *om_ns = NULL; + /*axiom_namespace_t *cloned_ns = NULL; */ + + axis2_char_t *key = NULL; + axutil_qname_t *qn = NULL; + + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + if(!om_element->attributes) + { + return NULL; + } + ht_cloned = axutil_hash_make(env); + if(!ht_cloned) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + for(hi = axutil_hash_first(om_element->attributes, env); hi; hi = axutil_hash_next(env, hi)) + { + void *val = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + if(val) + { + om_attr = (axiom_attribute_t *)val; + cloned_attr = axiom_attribute_clone(om_attr, env); + + om_ns = axiom_attribute_get_namespace(om_attr, env); + if(om_ns) + { + /*cloned_ns = axiom_namespace_clone(om_ns, env); */ + /*axiom_attribute_set_namespace(cloned_attr, env, cloned_ns); */ + axiom_attribute_set_namespace(cloned_attr, env, om_ns); + } + qn = axiom_attribute_get_qname(cloned_attr, env); + key = axutil_qname_to_string(qn, env); + axutil_hash_set(ht_cloned, key, AXIS2_HASH_KEY_STRING, cloned_attr); + } + val = NULL; + key = NULL; + qn = NULL; + om_attr = NULL; + cloned_attr = NULL; + om_ns = NULL; + /*cloned_ns = NULL; */ + } + return ht_cloned; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_element_get_attribute_value_by_name( + axiom_element_t * om_element, + const axutil_env_t * env, + axis2_char_t * attr_name) +{ + axutil_hash_index_t *hi = NULL; + + AXIS2_PARAM_CHECK(env->error, attr_name, NULL); + if(!om_element->attributes) + { + return NULL; + } + for(hi = axutil_hash_first(om_element->attributes, env); hi; hi = axutil_hash_next(env, hi)) + { + void *attr = NULL; + axiom_attribute_t *om_attr = NULL; + axutil_hash_this(hi, NULL, NULL, &attr); + if(attr) + { + axis2_char_t *this_attr_name; + axis2_char_t *this_attr_value; + axis2_char_t *attr_qn_str = NULL; + axiom_namespace_t *attr_ns = NULL; + axis2_char_t *prefix = NULL; + + om_attr = (axiom_attribute_t *)attr; + this_attr_name = axiom_attribute_get_localname(om_attr, env); + this_attr_value = axiom_attribute_get_value(om_attr, env); + attr_ns = axiom_attribute_get_namespace(om_attr, env); + if(attr_ns) + { + prefix = axiom_namespace_get_prefix(attr_ns, env); + if(prefix) + { + axis2_char_t *tmp_val = NULL; + tmp_val = axutil_stracat(env, prefix, ":"); + attr_qn_str = axutil_stracat(env, tmp_val, this_attr_name); + if(tmp_val) + { + AXIS2_FREE(env->allocator, tmp_val); + tmp_val = NULL; + } + } + } + else + { + attr_qn_str = axutil_strdup(env, this_attr_name); + } + + if(attr_qn_str && axutil_strcmp(attr_qn_str, attr_name) == 0) + { + AXIS2_FREE(env->allocator, attr_qn_str); + attr_qn_str = NULL; + AXIS2_FREE(env->allocator, hi); + return this_attr_value; + } + + AXIS2_FREE(env->allocator, attr_qn_str); + attr_qn_str = NULL; + } + } + return NULL; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_element_create_str( + const axutil_env_t * env, + axiom_node_t * parent, + axutil_string_t * localname, + axiom_namespace_t * ns, + axiom_node_t ** node) +{ + axiom_element_t *element; + AXIS2_ENV_CHECK(env, NULL); + + if(!localname || !node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "localname or node is NULL"); + return NULL; + } + + (*node) = axiom_node_create(env); + if(!(*node)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + element = (axiom_element_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_element_t)); + + if(!element) + { + AXIS2_FREE(env->allocator, (*node)); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + element->ns = NULL; + element->localname = NULL; + element->attributes = NULL; + element->namespaces = NULL; + element->qname = NULL; + element->child_ele_iter = NULL; + element->children_iter = NULL; + element->children_qname_iter = NULL; + element->text_value = NULL; + element->next_ns_prefix_number = 0; + element->is_empty = AXIS2_FALSE; + + element->localname = axutil_string_clone(localname, env); + if(!element->localname) + { + AXIS2_FREE(env->allocator, element); + AXIS2_FREE(env->allocator, (*node)); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + if(parent) + { + axiom_node_add_child(parent, env, (*node)); + } + axiom_node_set_complete((*node), env, AXIS2_FALSE); + axiom_node_set_node_type((*node), env, AXIOM_ELEMENT); + axiom_node_set_data_element((*node), env, element); + + if(ns) + { + axis2_char_t *uri = NULL; + axis2_char_t *prefix = NULL; + + uri = axiom_namespace_get_uri(ns, env); + prefix = axiom_namespace_get_prefix(ns, env); + + element->ns = axiom_element_find_namespace(element, env, *node, uri, prefix); + if(!(element->ns)) + { + if(axiom_element_declare_namespace(element, env, *node, ns) == AXIS2_SUCCESS) + { + element->ns = ns; + } + } + if(prefix && axutil_strcmp(prefix, "") == 0) + { + element->ns = NULL; + } + } + + return element; +} + +AXIS2_EXTERN axutil_string_t *AXIS2_CALL +axiom_element_get_localname_str( + axiom_element_t * om_element, + const axutil_env_t * env) +{ + return om_element->localname; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_element_set_localname_str( + axiom_element_t * om_element, + const axutil_env_t * env, + axutil_string_t * localname) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + + if(om_element->localname) + { + axutil_string_free(om_element->localname, env); + om_element->localname = NULL; + } + + om_element->localname = axutil_string_clone(localname, env); + + if(!(om_element->localname)) + { + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_element_get_is_empty( + axiom_element_t * om_element, + const axutil_env_t * env) +{ + return om_element->is_empty; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_element_set_is_empty( + axiom_element_t * om_element, + const axutil_env_t * env, + axis2_bool_t is_empty) +{ + om_element->is_empty = is_empty; +} + +/** + * Scan the parents of the element, to determine which namespaces are inscope for the + * the element and its children. + */ +AXIS2_EXTERN axutil_hash_t * AXIS2_CALL +axiom_element_gather_parent_namespaces( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * om_node) +{ + axutil_hash_t *inscope_namespaces = NULL; + axiom_node_t *parent_node = om_node; + + while((parent_node = axiom_node_get_parent(parent_node, env)) && (axiom_node_get_node_type( + parent_node, env) == AXIOM_ELEMENT)) + { + axiom_element_t *parent_element = (axiom_element_t *)axiom_node_get_data_element( + parent_node, env); + axutil_hash_t *parent_namespaces = axiom_element_get_namespaces(parent_element, env); + if(parent_namespaces) + { + axutil_hash_index_t *hi; + void *val; + for(hi = axutil_hash_first(parent_namespaces, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + if(val) + { + /* Check if prefix is already associated with some namespace in node being detached */ + if(!axiom_element_find_declared_namespace(om_element, env, NULL, + axiom_namespace_get_prefix((axiom_namespace_t *)val, env))) + { + axis2_char_t *key = axiom_namespace_get_prefix((axiom_namespace_t *)val, + env); + if(!key) + key = ""; + /* Check if prefix already associated with some namespace in a parent node */ + if(!(inscope_namespaces && axutil_hash_get(inscope_namespaces, key, + AXIS2_HASH_KEY_STRING))) + { + /* Remember this namespace as needing to be declared, if used */ + if(!inscope_namespaces) + inscope_namespaces = axutil_hash_make(env); + if(inscope_namespaces) + axutil_hash_set(inscope_namespaces, key, AXIS2_HASH_KEY_STRING, val); + } + } + } + } + } + } + + return inscope_namespaces; +} + +/** + * Test if the provided namespace pointer is declared in a parent namespace + * If so, redeclare it in the provided root element + */ +AXIS2_EXTERN void AXIS2_CALL +axiom_element_use_parent_namespace( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * om_node, + axiom_namespace_t *ns, + axiom_element_t * root_element, + axutil_hash_t *inscope_namespaces) +{ + if(ns && inscope_namespaces) + { + axiom_namespace_t *parent_ns; + axis2_char_t *key = axiom_namespace_get_prefix(ns, env); + if(!key) + key = ""; + + parent_ns = axutil_hash_get(inscope_namespaces, key, AXIS2_HASH_KEY_STRING); + /* Check if namespace is a namespace declared in a parent and not also + declared at an intermediate level */ + if(parent_ns && (parent_ns == ns) && (ns != axiom_element_find_namespace(om_element, env, + om_node, axiom_namespace_get_uri(ns, env), axiom_namespace_get_prefix(ns, env)))) + { + /* Redeclare this parent namespace at the level of the element being detached */ + axiom_element_declare_namespace_assume_param_ownership(root_element, env, parent_ns); + /* Remove the namespace from the inscope parent namespaces now that it has + been redeclared. */ + axutil_hash_set(inscope_namespaces, key, AXIS2_HASH_KEY_STRING, NULL); + } + } +} + +/** + * For each child node, determine if it uses a namespace from a parent of the node being detached + * If so, re-declare that namespace in the node being detached + */ +AXIS2_EXTERN void AXIS2_CALL +axiom_element_redeclare_parent_namespaces( + axiom_element_t * om_element, + const axutil_env_t * env, + axiom_node_t * om_node, + axiom_element_t * root_element, + axutil_hash_t *inscope_namespaces) +{ + axiom_node_t *child_node; + axutil_hash_t * attributes; + + if(!om_element || !om_node || !inscope_namespaces) + return; + + /* ensure the element's namespace is declared */ + axiom_element_use_parent_namespace(om_element, env, om_node, om_element->ns, root_element, + inscope_namespaces); + + /* for each attribute, ensure the attribute's namespace is declared */ + attributes = om_element->attributes; + if(attributes) + { + axutil_hash_index_t *hi; + void *val; + for(hi = axutil_hash_first(attributes, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + if(val) + { + axiom_element_use_parent_namespace(om_element, env, om_node, + axiom_attribute_get_namespace((axiom_attribute_t *)val, env), root_element, + inscope_namespaces); + } + } + } + + /* ensure the namespaces in all the children are declared */ + child_node = axiom_node_get_first_child(om_node, env); + while(child_node && (axutil_hash_count(inscope_namespaces) > 0)) + { + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + axiom_element_redeclare_parent_namespaces(axiom_node_get_data_element(child_node, env), + env, child_node, root_element, inscope_namespaces); + } + child_node = axiom_node_get_next_sibling(child_node, env); + } +} diff --git a/axiom/src/om/om_namespace.c b/axiom/src/om/om_namespace.c new file mode 100644 index 0000000..2d9df2f --- /dev/null +++ b/axiom/src/om/om_namespace.c @@ -0,0 +1,385 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "axiom_namespace_internal.h" + +struct axiom_namespace +{ + + /** namespace URI */ + axutil_string_t *uri; + + /** namespace prefix */ + axutil_string_t *prefix; + + axis2_char_t *key; + + int ref; +}; + +AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL +axiom_namespace_create( + const axutil_env_t * env, + const axis2_char_t * uri, + const axis2_char_t * prefix) +{ + axiom_namespace_t *om_namespace = NULL; + + AXIS2_ENV_CHECK(env, NULL); + if(!uri) + { + uri = ""; + } + + om_namespace = (axiom_namespace_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_namespace_t)); + if(!om_namespace) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + om_namespace->ref = 0; + om_namespace->prefix = NULL; + om_namespace->uri = NULL; + om_namespace->key = NULL; + + om_namespace->uri = axutil_string_create(env, uri); + if(!om_namespace->uri) + { + AXIS2_FREE(env->allocator, om_namespace); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + if(prefix) + { + om_namespace->prefix = axutil_string_create(env, prefix); + if(!om_namespace->prefix) + { + AXIS2_FREE(env->allocator, om_namespace); + AXIS2_FREE(env->allocator, om_namespace->uri); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + } + + return om_namespace; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_namespace_free( + axiom_namespace_t * om_namespace, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(--om_namespace->ref > 0) + { + return; + } + + if(om_namespace->prefix) + { + axutil_string_free(om_namespace->prefix, env); + } + + if(om_namespace->uri) + { + axutil_string_free(om_namespace->uri, env); + } + + if(om_namespace->key) + { + AXIS2_FREE(env->allocator, om_namespace->key); + } + + AXIS2_FREE(env->allocator, om_namespace); + + return; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_namespace_equals( + axiom_namespace_t * om_namespace, + const axutil_env_t * env, + axiom_namespace_t * om_namespace1) +{ + int uris_differ = 0; + int prefixes_differ = 0; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_namespace, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_namespace1, AXIS2_FAILURE); + + if(!om_namespace || !om_namespace1) + { + return AXIS2_FALSE; + } + + if(om_namespace->uri && om_namespace1->uri) + { + uris_differ = axutil_strcmp(axutil_string_get_buffer(om_namespace->uri, env), + axutil_string_get_buffer(om_namespace1->uri, env)); + } + else + { + uris_differ = (om_namespace->uri || om_namespace1->uri); + } + + if(om_namespace->prefix && om_namespace1->prefix) + { + prefixes_differ = axutil_strcmp(axutil_string_get_buffer(om_namespace->prefix, env), + axutil_string_get_buffer(om_namespace1->prefix, env)); + } + else + { + prefixes_differ = (om_namespace->prefix || om_namespace1->prefix); + } + + return (!uris_differ && !prefixes_differ); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_namespace_serialize( + axiom_namespace_t * om_namespace, + const axutil_env_t * env, + axiom_output_t * om_output) +{ + int status = AXIS2_SUCCESS; + if(!om_namespace) + { + return AXIS2_FAILURE; + } + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_output, AXIS2_FAILURE); + + if(om_namespace->uri && NULL != om_namespace->prefix && axutil_strcmp(axutil_string_get_buffer( + om_namespace->prefix, env), "") != 0) + { + status = axiom_output_write(om_output, env, AXIOM_NAMESPACE, 2, axutil_string_get_buffer( + om_namespace-> prefix, env), axutil_string_get_buffer(om_namespace->uri, env)); + } + else if(om_namespace->uri) + { + status = axiom_output_write(om_output, env, AXIOM_NAMESPACE, 2, NULL, + axutil_string_get_buffer(om_namespace->uri, env)); + } + return status; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_namespace_get_uri( + axiom_namespace_t * om_namespace, + const axutil_env_t * env) +{ + if(om_namespace->uri) + { + return (axis2_char_t *)axutil_string_get_buffer(om_namespace->uri, env); + } + return NULL; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_namespace_get_prefix( + axiom_namespace_t * om_namespace, + const axutil_env_t * env) +{ + if(om_namespace->prefix) + { + return (axis2_char_t *)axutil_string_get_buffer(om_namespace->prefix, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL +axiom_namespace_clone( + axiom_namespace_t * om_namespace, + const axutil_env_t * env) +{ + axiom_namespace_t *cloned_ns = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + cloned_ns = axiom_namespace_create_str(env, om_namespace->uri, om_namespace->prefix); + if(cloned_ns) + { + return cloned_ns; + } + return NULL; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_namespace_to_string( + axiom_namespace_t * om_namespace, + const axutil_env_t * env) +{ + axis2_char_t *temp_str = NULL; + AXIS2_ENV_CHECK(env, NULL); + if(om_namespace->key) + { + AXIS2_FREE(env->allocator, om_namespace->key); + om_namespace->key = NULL; + } + if((om_namespace->uri) && (NULL != om_namespace->prefix)) + { + temp_str = axutil_stracat(env, axutil_string_get_buffer(om_namespace->uri, env), "|"); + om_namespace->key = axutil_stracat(env, temp_str, axutil_string_get_buffer( + om_namespace->prefix, env)); + if(temp_str) + { + AXIS2_FREE(env->allocator, temp_str); + temp_str = NULL; + } + } + else if((om_namespace->uri) && !(om_namespace->prefix)) + { + om_namespace->key = axutil_strdup(env, axutil_string_get_buffer(om_namespace->uri, env)); + if(!(om_namespace->key)) + { + return NULL; + } + } + return om_namespace->key; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_namespace_set_uri( + axiom_namespace_t * om_namespace, + const axutil_env_t * env, + const axis2_char_t * uri) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, uri, AXIS2_FAILURE); + + if(om_namespace->uri) + { + axutil_string_free(om_namespace->uri, env); + om_namespace->uri = NULL; + } + + om_namespace->uri = axutil_string_create(env, uri); + if(!(om_namespace->uri)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_namespace_increment_ref( + struct axiom_namespace * om_namespace, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + om_namespace->ref++; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL +axiom_namespace_create_str( + const axutil_env_t * env, + axutil_string_t * uri, + axutil_string_t * prefix) +{ + axiom_namespace_t *om_namespace = NULL; + + AXIS2_ENV_CHECK(env, NULL); + if(!uri) + { + uri = axutil_string_create(env, ""); + } + + om_namespace = (axiom_namespace_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_namespace_t)); + if(!om_namespace) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + om_namespace->ref = 0; + om_namespace->prefix = NULL; + om_namespace->uri = NULL; + om_namespace->key = NULL; + + om_namespace->uri = axutil_string_clone(uri, env); + if(!om_namespace->uri) + { + AXIS2_FREE(env->allocator, om_namespace); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + if(prefix) + { + om_namespace->prefix = axutil_string_clone(prefix, env); + if(!om_namespace->prefix) + { + AXIS2_FREE(env->allocator, om_namespace); + AXIS2_FREE(env->allocator, om_namespace->uri); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + } + + return om_namespace; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_namespace_set_uri_str( + axiom_namespace_t * om_namespace, + const axutil_env_t * env, + axutil_string_t * uri) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, uri, AXIS2_FAILURE); + + if(om_namespace->uri) + { + axutil_string_free(om_namespace->uri, env); + om_namespace->uri = NULL; + } + + om_namespace->uri = axutil_string_clone(uri, env); + if(!(om_namespace->uri)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN axutil_string_t *AXIS2_CALL +axiom_namespace_get_uri_str( + axiom_namespace_t * om_namespace, + const axutil_env_t * env) +{ + return om_namespace->uri; +} + +AXIS2_EXTERN axutil_string_t *AXIS2_CALL +axiom_namespace_get_prefix_str( + axiom_namespace_t * om_namespace, + const axutil_env_t * env) +{ + return om_namespace->prefix; +} diff --git a/axiom/src/om/om_navigator.c b/axiom/src/om/om_navigator.c new file mode 100644 index 0000000..c0405b8 --- /dev/null +++ b/axiom/src/om/om_navigator.c @@ -0,0 +1,206 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +static void +axiom_navigator_update_next_node( + axiom_navigator_t * om_navigator, + const axutil_env_t * env); + +struct axiom_navigator +{ + axiom_node_t *node; + + axis2_bool_t visited; + + axiom_node_t *next; + + axiom_node_t *root; + + axis2_bool_t backtracked; + + axis2_bool_t end; + + axis2_bool_t start; + +}; + +AXIS2_EXTERN axiom_navigator_t *AXIS2_CALL +axiom_navigator_create( + const axutil_env_t * env, + axiom_node_t * om_node) +{ + axiom_navigator_t *om_navigator = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, om_node, NULL); + + om_navigator = (axiom_navigator_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_navigator_t)); + if(!om_navigator) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + om_navigator->node = NULL; + om_navigator->visited = AXIS2_FALSE; + om_navigator->next = NULL; + om_navigator->root = NULL; + om_navigator->end = AXIS2_FALSE; + om_navigator->start = AXIS2_TRUE; + om_navigator->backtracked = AXIS2_FALSE; + + om_navigator->next = om_node; + om_navigator->root = om_node; + + return om_navigator; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_navigator_free( + axiom_navigator_t * om_navigator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_FREE(env->allocator, om_navigator); + return; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_navigator_is_navigable( + axiom_navigator_t * om_navigator, + const axutil_env_t * env) +{ + if(AXIS2_TRUE == om_navigator->end) + { + return AXIS2_FALSE; + } + else + { + if(om_navigator->next) + { + return AXIS2_TRUE; + } + } + return AXIS2_FALSE; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_navigator_is_completed( + axiom_navigator_t * om_navigator, + const axutil_env_t * env) +{ + return om_navigator->end; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_navigator_visited( + axiom_navigator_t * om_navigator, + const axutil_env_t * env) +{ + return om_navigator->visited; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_navigator_next( + axiom_navigator_t * om_navigator, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + if(!om_navigator->next) + { + return NULL; + } + + om_navigator->node = om_navigator->next; + om_navigator->visited = om_navigator->backtracked; + om_navigator->backtracked = AXIS2_FALSE; + + axiom_navigator_update_next_node(om_navigator, env); + + /** set the starting and ending flags */ + if(om_navigator->root == om_navigator->next) + { + if(!(om_navigator->start)) + { + om_navigator->end = AXIS2_TRUE; + } + else + { + om_navigator->start = AXIS2_FALSE; + } + } + return om_navigator->node; +} + +/** this method encapsulate searching logic */ +static void +axiom_navigator_update_next_node( + axiom_navigator_t * om_navigator, + const axutil_env_t * env) +{ + if(!om_navigator) + { + return; + } + + if(!om_navigator->next) + { + return; + } + + if((AXIOM_ELEMENT == axiom_node_get_node_type(om_navigator->next, env)) + && !(om_navigator->visited)) + { + if(axiom_node_get_first_child(om_navigator->next, env)) + { + om_navigator->next = axiom_node_get_first_child(om_navigator->next, env); + } + else if(AXIS2_TRUE == axiom_node_is_complete(om_navigator->next, env)) + { + om_navigator->backtracked = AXIS2_TRUE; + } + else + { + om_navigator->next = NULL; + } + } + else + { + axiom_node_t *parent = NULL; + axiom_node_t *next_sibling = NULL; + + next_sibling = axiom_node_get_next_sibling(om_navigator->next, env); + + parent = axiom_node_get_parent(om_navigator->next, env); + + if(next_sibling) + { + om_navigator->next = next_sibling; + } + else if((parent) && axiom_node_is_complete(parent, env)) + { + om_navigator->next = parent; + om_navigator->backtracked = AXIS2_TRUE; + } + else + { + om_navigator->next = NULL; + } + } +} diff --git a/axiom/src/om/om_node.c b/axiom/src/om/om_node.c new file mode 100644 index 0000000..9b525aa --- /dev/null +++ b/axiom/src/om/om_node.c @@ -0,0 +1,1455 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axiom_node_internal.h" +#include "axiom_stax_builder_internal.h" +#include +#include +#include +#include +#include +#include +#include +#include + +struct axiom_node +{ + + /** document only available if build through builder */ + struct axiom_document *om_doc; + + axiom_stax_builder_t *builder; + + /** parent node */ + axiom_node_t *parent; + + /** previous sibling */ + axiom_node_t *prev_sibling; + + /** next sibling */ + axiom_node_t *next_sibling; + + /** first child */ + axiom_node_t *first_child; + + /** last child */ + axiom_node_t *last_child; + + /** node type, indicates the type stored in data_element */ + axiom_types_t node_type; + + /** done true means that this node is completely built , false otherwise */ + int done; + + /** instances of an om struct, whose type is defined by node type */ + void *data_element; + +}; + +static axiom_node_t * +axiom_node_detach_without_namespaces( + axiom_node_t * om_node, + const axutil_env_t * env); + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_node_create( + const axutil_env_t * env) +{ + axiom_node_t *node = NULL; + AXIS2_ENV_CHECK(env, NULL); + + node = (axiom_node_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_node_t)); + if(!node) + { + env->error->error_number = AXIS2_ERROR_NO_MEMORY; + return NULL; + } + node->first_child = NULL; + node->last_child = NULL; + node->next_sibling = NULL; + node->prev_sibling = NULL; + node->parent = NULL; + node->node_type = AXIOM_INVALID; + node->done = AXIS2_FALSE; + node->data_element = NULL; + node->om_doc = NULL; + node->builder = NULL; + return node; +} + +AXIS2_EXTERN axiom_node_t* AXIS2_CALL +axiom_node_create_from_buffer( + const axutil_env_t * env, + axis2_char_t *buffer) +{ + axiom_xml_reader_t *reader = NULL; + axiom_stax_builder_t *builder = NULL; + axiom_document_t *document = NULL; + axiom_node_t *om_node = NULL; + + reader = axiom_xml_reader_create_for_memory(env, buffer, axutil_strlen(buffer), "UTF-8", + AXIS2_XML_PARSER_TYPE_BUFFER); + + if(!reader) + { + return NULL; + } + + builder = axiom_stax_builder_create(env, reader); + + if(!builder) + { + return NULL; + } + document = axiom_stax_builder_get_document(builder, env); + if(!document) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Document is null for deserialization"); + return NULL; + } + + om_node = axiom_document_get_root_element(document, env); + + if(!om_node) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Root element of the document is not found"); + return NULL; + } + axiom_document_build_all(document, env); + + axiom_stax_builder_free_self(builder, env); + + return om_node; +} + +static void +axiom_node_free_detached_subtree( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + /* Free any child nodes first */ + if(om_node->first_child) + { + axiom_node_t *child_node = om_node->first_child, *next_sibling; + while(child_node) + { + next_sibling = child_node->next_sibling; + axiom_node_free_detached_subtree(child_node, env); + child_node = next_sibling; + } + } + + if(om_node->node_type == AXIOM_ELEMENT) + { + if(om_node->data_element) + { + axiom_element_free((axiom_element_t *)(om_node->data_element), env); + } + } + else if(om_node->node_type == AXIOM_COMMENT) + { + if(om_node->data_element) + { + axiom_comment_free((axiom_comment_t *)(om_node->data_element), env); + } + } + else if(om_node->node_type == AXIOM_DOCTYPE) + { + /*axiom_doctype_free((axiom_doctype_t*)(om_node->data_element), env); */ + } + else if(om_node->node_type == AXIOM_PROCESSING_INSTRUCTION) + { + if(om_node->data_element) + { + axiom_processing_instruction_free( + (axiom_processing_instruction_t *)(om_node->data_element), env); + } + } + else if(om_node->node_type == AXIOM_TEXT) + { + if(om_node->data_element) + { + axiom_text_free((axiom_text_t *)(om_node->data_element), env); + } + } + else if(om_node->node_type == AXIOM_DATA_SOURCE) + { + if(om_node->data_element) + { + axiom_data_source_free((axiom_data_source_t *)(om_node->data_element), env); + } + } + + AXIS2_FREE(env->allocator, om_node); + + return; +} + +/** + * This free function will free an om_element and all the children contained in it + * If the node is still attached to the tree, it will be detached first + */ +AXIS2_EXTERN void AXIS2_CALL +axiom_node_free_tree( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + if(!om_node) + { + return; + } + + /* Detach this node before freeing it and its subtree. */ + axiom_node_detach_without_namespaces(om_node, env); + + /* Free this node and its subtree */ + axiom_node_free_detached_subtree(om_node, env); + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_node_add_child( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_node_t * child) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, child, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_node, AXIS2_FAILURE); + + if(child->parent) + { + child = axiom_node_detach(child, env); + } + + if(!(om_node->first_child)) + { + om_node->first_child = child; + } + else + { + axiom_node_t *last_sib = NULL; + last_sib = om_node->last_child; + if(last_sib) + { + last_sib->next_sibling = child; + child->prev_sibling = last_sib; + } + } + + child->parent = om_node; + om_node->last_child = child; + return AXIS2_SUCCESS; +} + +/** + * Detach the node without regard to any namespace references in the node or + * its children. + */ +static axiom_node_t * +axiom_node_detach_without_namespaces( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + axiom_node_t *parent = NULL; + + parent = om_node->parent; + if(!parent) + { + /* Node is already detached */ + om_node->builder = NULL; + return om_node; + } + + if(!om_node->prev_sibling) + { + parent->first_child = om_node->next_sibling; + } + else + { + axiom_node_t *prev_sib = NULL; + prev_sib = om_node->prev_sibling; + if(prev_sib) + { + prev_sib->next_sibling = om_node->next_sibling; + } + } + + if(om_node->next_sibling) + { + axiom_node_t *next_sibling = NULL; + next_sibling = om_node->next_sibling; + if(next_sibling) + { + next_sibling->prev_sibling = om_node->prev_sibling; + } + } + + if(parent->last_child && (parent->last_child == om_node)) + { + parent->last_child = om_node->prev_sibling; + } + + /* if the STAX builder's last node is what we are detaching, then we should adjust the + * last node if previous sibling is available, set that as the builder's last node. Else set the + * parent as the last node*/ + if(om_node->builder && (axiom_stax_builder_get_lastnode(om_node->builder, env) == om_node)) + { + axiom_node_t *lastnode = parent; + if(om_node->prev_sibling) + { + lastnode = om_node->prev_sibling; + } + axiom_stax_builder_set_lastnode(om_node->builder, env, lastnode); + } + + om_node->parent = NULL; + om_node->prev_sibling = NULL; + om_node->next_sibling = NULL; + om_node->builder = NULL; + return om_node; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_node_detach( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + axutil_hash_t *inscope_namespaces = NULL; + axiom_element_t *om_element = NULL; + + AXIS2_ENV_CHECK(env, NULL); + if(!om_node) + { + return NULL; + } + + /* If this is an element node, determine which namespaces are available to it + from its parent nodes. */ + if((om_node->node_type == AXIOM_ELEMENT) && (om_element = om_node->data_element)) + { + inscope_namespaces = axiom_element_gather_parent_namespaces(om_element, env, om_node); + } + + /* Detach this node from its parent. */ + om_node = axiom_node_detach_without_namespaces(om_node, env); + + /* If this is an element node, ensure that any namespaces available to it or its + children remain available after the detach. */ + if(om_node && inscope_namespaces) + { + axiom_element_redeclare_parent_namespaces(om_element, env, om_node, om_element, + inscope_namespaces); + } + + if(inscope_namespaces) + { + axutil_hash_free(inscope_namespaces, env); + } + + return om_node; +} + +/** + Internal function , only used in om and soap + not to be used by users + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_node_set_parent( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_node_t * parent) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(!om_node) + { + return AXIS2_FAILURE; + } + + AXIS2_PARAM_CHECK(env->error, parent, AXIS2_FAILURE); + + if(parent == om_node->parent) + { /* same parent already exist */ + return AXIS2_SUCCESS; + } + /* if a new parent is assigned in place of existing + one first the node should be detached + */ + if(om_node->parent) + { + om_node = axiom_node_detach_without_namespaces(om_node, env); + } + + om_node->parent = parent; + + return AXIS2_SUCCESS; +} + +/** + * This will insert a sibling just after the current information item + * @param node the node in consideration + * @param nodeto_insert the node that will be inserted + */ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_node_insert_sibling_after( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_node_t * node_to_insert) +{ + axiom_node_t *next_sib = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + AXIS2_PARAM_CHECK(env->error, node_to_insert, AXIS2_FAILURE); + + if(!om_node->parent) + { + /* We shouldn't add a sibling because this node doesn't has a parent. + * This can be the root node of the tree*/ + return AXIS2_FAILURE; + } + + node_to_insert->parent = om_node->parent; + + node_to_insert->prev_sibling = om_node; + + next_sib = om_node->next_sibling; + + if(next_sib) + { + next_sib->prev_sibling = node_to_insert; + } + + node_to_insert->next_sibling = om_node->next_sibling; + + om_node->next_sibling = node_to_insert; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_node_insert_sibling_before( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_node_t * node_to_insert) +{ + axiom_node_t *prev_sibling = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, node_to_insert, AXIS2_FAILURE); + + if(!om_node->parent) + { + /* We shouldn't add a sibling because this node doesn't has a parent. + * This can be the root node of the tree*/ + return AXIS2_FAILURE; + } + + node_to_insert->parent = om_node->parent; + + node_to_insert->prev_sibling = om_node->prev_sibling; + + node_to_insert->next_sibling = om_node; + + prev_sibling = om_node->prev_sibling; + + if(!prev_sibling) + { + axiom_node_t *parent = om_node->parent; + parent->first_child = node_to_insert; + } + else + { + axiom_node_t *prev_sibling = om_node->prev_sibling; + if(prev_sibling) + { + prev_sibling->next_sibling = node_to_insert; + } + } + om_node->prev_sibling = node_to_insert; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_node_serialize( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_output_t * om_output) +{ + + int status = AXIS2_SUCCESS; + axiom_node_t *temp_node = NULL; + axiom_node_t *nodes[256]; + int count = 0; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(!om_node) + { + return AXIS2_SUCCESS; + } + + nodes[count++] = om_node; + + AXIS2_PARAM_CHECK(env->error, om_output, AXIS2_FAILURE); + + do + { + + if(om_node->node_type == AXIOM_ELEMENT) + { + if(om_node->data_element) + { + status = axiom_element_serialize_start_part( + (axiom_element_t *)(om_node-> data_element), env, om_output, om_node); + } + if(status != AXIS2_SUCCESS) + { + return status; + } + } + else if(om_node->node_type == AXIOM_DATA_SOURCE) + { + if(om_node->data_element) + { + status = axiom_data_source_serialize( + (axiom_data_source_t *)(om_node->data_element), env, om_output); + } + if(status != AXIS2_SUCCESS) + { + return status; + } + } + else if(om_node->node_type == AXIOM_TEXT) + { + if(om_node->data_element) + { + status = axiom_text_serialize((axiom_text_t *)(om_node-> data_element), env, + om_output); + } + if(status != AXIS2_SUCCESS) + { + return status; + } + } + else if(om_node->node_type == AXIOM_COMMENT) + { + if(om_node->data_element) + { + status = axiom_comment_serialize((axiom_comment_t *)(om_node-> data_element), env, + om_output); + } + if(status != AXIS2_SUCCESS) + { + return status; + } + } + else if(om_node->node_type == AXIOM_DOCTYPE) + { + if(om_node->data_element) + { + status = axiom_doctype_serialize((axiom_doctype_t *)(om_node-> data_element), env, + om_output); + } + if(status != AXIS2_SUCCESS) + { + return status; + } + } + else if(om_node->node_type == AXIOM_PROCESSING_INSTRUCTION) + { + if(om_node->data_element) + { + status = axiom_processing_instruction_serialize( + (axiom_processing_instruction_t *)(om_node->data_element), env, om_output); + } + + if(status != AXIS2_SUCCESS) + { + return status; + } + } + + temp_node = axiom_node_get_first_child(om_node, env); + /* serialize children of this node */ + if(temp_node) + { + om_node = temp_node; + nodes[count++] = om_node; + } + else + { + if(om_node->node_type == AXIOM_ELEMENT) + { + if(om_node->data_element) + { + status = axiom_element_serialize_end_part( + (axiom_element_t *)(om_node-> data_element), env, om_output); + } + if(status != AXIS2_SUCCESS) + { + return status; + } + } + + temp_node = axiom_node_get_next_sibling(om_node, env); + if(temp_node) + { + om_node = temp_node; + nodes[count - 1] = om_node; + } + else + { + while(count > 1 && !temp_node) + { + count--; + om_node = nodes[count - 1]; + if(om_node->node_type == AXIOM_ELEMENT) + { + if(om_node->data_element) + { + status = axiom_element_serialize_end_part( + (axiom_element_t *)(om_node->data_element), env, om_output); + } + if(status != AXIS2_SUCCESS) + { + return status; + } + } + + temp_node = axiom_node_get_next_sibling(om_node, env); + } + + if(temp_node && count > 1) + { + om_node = temp_node; + nodes[count - 1] = om_node; + } + else + { + count--; + } + } + + } + } + while(count > 0); + + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_node_serialize_sub_tree( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_output_t * om_output) +{ + + int status = AXIS2_SUCCESS; + axiom_node_t *temp_node = NULL; + axiom_node_t *nodes[256]; + int count = 0; + axutil_hash_t *namespaces = NULL; + axutil_hash_t *namespaces_from_parents = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(!om_node) + { + return AXIS2_SUCCESS; + } + + namespaces = axutil_hash_make(env); + if(!namespaces) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "hash for namespaces creation failed"); + return AXIS2_FAILURE; + } + + namespaces_from_parents = axutil_hash_make(env); + if(!namespaces_from_parents) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "hash for namespaces_from_parents creation failed"); + return AXIS2_FAILURE; + } + + nodes[count++] = om_node; + + AXIS2_PARAM_CHECK(env->error, om_output, AXIS2_FAILURE); + + do + { + + if(om_node->node_type == AXIOM_ELEMENT) + { + if(om_node->data_element) + { + axutil_hash_t *temp_namespaces = NULL; + axutil_hash_t *temp_attributes = NULL; + axiom_namespace_t *namespace = NULL; + status = axiom_element_serialize_start_part( + (axiom_element_t *)(om_node-> data_element), env, om_output, om_node); + temp_namespaces = axiom_element_get_namespaces( + (axiom_element_t *)(om_node-> data_element), env); + if(temp_namespaces) + { + axutil_hash_t *new_hash = NULL; + new_hash = axutil_hash_overlay(temp_namespaces, env, namespaces); + if(namespaces) + axutil_hash_free(namespaces, env); + namespaces = new_hash; + } + namespace = axiom_element_get_namespace( + (axiom_element_t *)(om_node-> data_element), env, om_node); + if(namespace) + { + axiom_namespace_t *ns = NULL; + axis2_char_t *prefix = NULL; + prefix = axiom_namespace_get_prefix(namespace, env); + if(prefix) + { + ns = axutil_hash_get(namespaces, prefix, AXIS2_HASH_KEY_STRING); + if(!ns) + { + ns = axutil_hash_get(namespaces_from_parents, prefix, + AXIS2_HASH_KEY_STRING); + if(!ns) + { + axiom_namespace_serialize(namespace, env, om_output); + axutil_hash_set(namespaces_from_parents, prefix, + AXIS2_HASH_KEY_STRING, namespace); + } + } + } + } + + temp_attributes = axiom_element_get_all_attributes( + (axiom_element_t *)(om_node->data_element), env); + if(temp_attributes) + { + axutil_hash_index_t *hi; + void *val; + for(hi = axutil_hash_first(temp_attributes, env); hi; hi = axutil_hash_next( + env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + + if(val) + { + axiom_namespace_t *ns = NULL; + axis2_char_t *prefix = NULL; + + namespace + = axiom_attribute_get_namespace((axiom_attribute_t *)val, env); + + if(namespace) + { + prefix = axiom_namespace_get_prefix(namespace, env); + if(prefix) + { + ns = axutil_hash_get(namespaces, prefix, AXIS2_HASH_KEY_STRING); + if(!ns) + { + ns = axutil_hash_get(namespaces_from_parents, prefix, + AXIS2_HASH_KEY_STRING); + if(!ns) + { + axiom_namespace_serialize(namespace, env, om_output); + axutil_hash_set(namespaces_from_parents, prefix, + AXIS2_HASH_KEY_STRING, namespace); + } + } + } + } + } + else + { + status = AXIS2_FAILURE; + } + } + } + } + if(status != AXIS2_SUCCESS) + { + break; + } + } + else if(om_node->node_type == AXIOM_DATA_SOURCE) + { + if(om_node->data_element) + { + status = axiom_data_source_serialize( + (axiom_data_source_t *)(om_node->data_element), env, om_output); + } + if(status != AXIS2_SUCCESS) + { + break; + } + } + else if(om_node->node_type == AXIOM_TEXT) + { + if(om_node->data_element) + { + status = axiom_text_serialize((axiom_text_t *)(om_node-> data_element), env, + om_output); + } + if(status != AXIS2_SUCCESS) + { + break; + } + } + else if(om_node->node_type == AXIOM_COMMENT) + { + if(om_node->data_element) + { + status = axiom_comment_serialize((axiom_comment_t *)(om_node-> data_element), env, + om_output); + } + if(status != AXIS2_SUCCESS) + { + break; + } + } + else if(om_node->node_type == AXIOM_DOCTYPE) + { + if(om_node->data_element) + { + status = axiom_doctype_serialize((axiom_doctype_t *)(om_node-> data_element), env, + om_output); + } + if(status != AXIS2_SUCCESS) + { + break; + } + } + else if(om_node->node_type == AXIOM_PROCESSING_INSTRUCTION) + { + if(om_node->data_element) + { + status = axiom_processing_instruction_serialize( + (axiom_processing_instruction_t *)(om_node->data_element), env, om_output); + } + + if(status != AXIS2_SUCCESS) + { + break; + } + } + + temp_node = axiom_node_get_first_child(om_node, env); + /* serialize children of this node */ + if(temp_node) + { + om_node = temp_node; + nodes[count++] = om_node; + } + else + { + if(om_node->node_type == AXIOM_ELEMENT) + { + if(om_node->data_element) + { + + axutil_hash_t *temp_attributes = NULL; + axiom_namespace_t *namespace = NULL; + /* at the writing of end part all the namespaces declared + specially to that element should be cancelled */ + + /* first checking the element namespace */ + namespace = axiom_element_get_namespace( + (axiom_element_t *)(om_node-> data_element), env, om_node); + if(namespace) + { + axiom_namespace_t *ns = NULL; + axis2_char_t *prefix = NULL; + prefix = axiom_namespace_get_prefix(namespace, env); + if(prefix) + { + ns = axutil_hash_get(namespaces_from_parents, prefix, + AXIS2_HASH_KEY_STRING); + if(ns) + { + axutil_hash_set(namespaces_from_parents, prefix, + AXIS2_HASH_KEY_STRING, NULL); + } + } + } + + /* then checking the attribute namespaces */ + + temp_attributes = axiom_element_get_all_attributes( + (axiom_element_t *)(om_node->data_element), env); + if(temp_attributes) + { + axutil_hash_index_t *hi; + void *val; + for(hi = axutil_hash_first(temp_attributes, env); hi; hi + = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + + if(val) + { + axiom_namespace_t *ns = NULL; + axis2_char_t *prefix = NULL; + + namespace = axiom_attribute_get_namespace((axiom_attribute_t *)val, + env); + + if(namespace) + { + prefix = axiom_namespace_get_prefix(namespace, env); + if(prefix) + { + ns = axutil_hash_get(namespaces_from_parents, prefix, + AXIS2_HASH_KEY_STRING); + if(ns) + { + axutil_hash_set(namespaces_from_parents, prefix, + AXIS2_HASH_KEY_STRING, NULL); + } + } + } + } + } + } + + status = axiom_element_serialize_end_part( + (axiom_element_t *)(om_node-> data_element), env, om_output); + } + if(status != AXIS2_SUCCESS) + { + break; + } + } + /* We need to make make sure that om_node is not the root when we take the next sibling */ + if(count > 1) + { + temp_node = axiom_node_get_next_sibling(om_node, env); + } + if(temp_node) + { + om_node = temp_node; + nodes[count - 1] = om_node; + } + else + { + while(count > 1 && !temp_node) + { + count--; + om_node = nodes[count - 1]; + if(om_node->node_type == AXIOM_ELEMENT) + { + if(om_node->data_element) + { + axutil_hash_t *temp_attributes = NULL; + axiom_namespace_t *namespace = NULL; + + /* similar to the earlier time, whenever the ending is happened + * namespaces declared specially to that element should be cancelled */ + + /* first checking the element namespace */ + namespace = axiom_element_get_namespace( + (axiom_element_t *)(om_node-> data_element), env, om_node); + if(namespace) + { + axiom_namespace_t *ns = NULL; + axis2_char_t *prefix = NULL; + prefix = axiom_namespace_get_prefix(namespace, env); + if(prefix) + { + ns = axutil_hash_get(namespaces_from_parents, prefix, + AXIS2_HASH_KEY_STRING); + if(ns) + { + axutil_hash_set(namespaces_from_parents, prefix, + AXIS2_HASH_KEY_STRING, NULL); + } + } + } + + /* then checking the attribute namespaces */ + + temp_attributes = axiom_element_get_all_attributes( + (axiom_element_t *)(om_node->data_element), env); + if(temp_attributes) + { + axutil_hash_index_t *hi; + void *val; + for(hi = axutil_hash_first(temp_attributes, env); hi; hi + = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + + if(val) + { + axiom_namespace_t *ns = NULL; + axis2_char_t *prefix = NULL; + + namespace = axiom_attribute_get_namespace( + (axiom_attribute_t *)val, env); + + if(namespace) + { + prefix = axiom_namespace_get_prefix(namespace, env); + if(prefix) + { + ns = axutil_hash_get(namespaces_from_parents, + prefix, AXIS2_HASH_KEY_STRING); + if(ns) + { + axutil_hash_set(namespaces_from_parents, + prefix, AXIS2_HASH_KEY_STRING, NULL); + } + } + } + } + } + } + status = axiom_element_serialize_end_part( + (axiom_element_t *)(om_node->data_element), env, om_output); + } + if(status != AXIS2_SUCCESS) + { + break; + } + } + + temp_node = axiom_node_get_next_sibling(om_node, env); + } + + if(temp_node && count > 1) + { + om_node = temp_node; + nodes[count - 1] = om_node; + } + else + { + count--; + } + } + } + } + while(count > 0); + + axutil_hash_free(namespaces_from_parents, env); + axutil_hash_free(namespaces, env); + + return status; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_node_get_parent( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + return om_node->parent; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_node_get_first_child( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + int token = 0; + if(!om_node) + { + return NULL; + } + + /**********************************************************/ + while(!(om_node->first_child) && !(om_node->done) && om_node->builder) + { + token = axiom_stax_builder_next_with_token(om_node->builder, env); + if(token == -1) + { + return NULL; + } + } + + /**********************************************************/ + return om_node->first_child; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_node_get_first_element( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + int token = 0; + axiom_node_t *first_element; + if(!om_node) + { + return NULL; + } + + /**********************************************************/ + while(!(om_node->first_child) && !(om_node->done) && om_node->builder) + { + token = axiom_stax_builder_next_with_token(om_node->builder, env); + if(token == -1) + { + return NULL; + } + } + + /**********************************************************/ + first_element = om_node->first_child; + + while(first_element && (axiom_node_get_node_type(first_element, env) != AXIOM_ELEMENT)) + { + first_element = axiom_node_get_next_sibling(first_element, env); + } + + return first_element; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_node_get_last_child( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + return om_node->last_child; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_node_get_previous_sibling( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + return om_node->prev_sibling; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_node_get_next_sibling( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + int token = 0; + if(!om_node) + { + return NULL; + } + + while(!(om_node->next_sibling) && om_node->parent && om_node->builder + && !(axiom_node_is_complete(om_node->parent, env))) + { + token = axiom_stax_builder_next_with_token(om_node->builder, env); + if(token == -1) + { + return NULL; + } + } + + return om_node->next_sibling; +} + +AXIS2_EXTERN axiom_types_t AXIS2_CALL +axiom_node_get_node_type( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + return om_node->node_type; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_node_is_complete( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + return om_node->done; + +} + +AXIS2_EXTERN struct axiom_document *AXIS2_CALL +axiom_node_get_document( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + return om_node->om_doc; +} + +AXIS2_EXTERN void *AXIS2_CALL +axiom_node_get_data_element( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + return om_node->data_element; +} + +/** + internal function , not to be used by users + only sets the first_child link because this is needed by builder + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_node_set_first_child( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_node_t * first_child) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_node, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, first_child, AXIS2_FAILURE); + + /** set the parent */ + axiom_node_set_parent(first_child, env, om_node); + + om_node->first_child = first_child; + return AXIS2_SUCCESS; +} + +/** + internal function not to be used by users + only sets the previous sibling link as it is needed by builders + + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_node_set_previous_sibling( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_node_t * prev_sibling) +{ + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_node, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, prev_sibling, AXIS2_FAILURE); + + om_node->prev_sibling = prev_sibling; + return AXIS2_SUCCESS; +} + +/** + internal function, not to be used by users + only sets the next sibling link; + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_node_set_next_sibling( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_node_t * next_sibling) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_node, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, next_sibling, AXIS2_FAILURE); + om_node->next_sibling = next_sibling; + return AXIS2_SUCCESS; +} + +/** + internal function not to be used by users + sets the node type only used in soap and om + */ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_node_set_node_type( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_types_t type) +{ + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_node, AXIS2_FAILURE); + om_node->node_type = type; + return AXIS2_SUCCESS; +} + +/** + internal function , not to be used by users + only used in om and soap + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_node_set_data_element( + axiom_node_t * om_node, + const axutil_env_t * env, + void *data_element) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_node, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, data_element, AXIS2_FAILURE); + om_node->data_element = data_element; + return AXIS2_SUCCESS; +} + +/** + internal function not to be used by users + only sets the build status + + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_node_set_complete( + axiom_node_t * om_node, + const axutil_env_t * env, + axis2_bool_t done) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_node, AXIS2_FAILURE); + om_node->done = done; + return AXIS2_SUCCESS; +} + +/** + internal function not to be used by users + only used by om builder + + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_node_set_document( + axiom_node_t * om_node, + const axutil_env_t * env, + struct axiom_document * om_doc) +{ + AXIS2_PARAM_CHECK(env->error, om_node, AXIS2_FAILURE); + om_node->om_doc = om_doc; + return AXIS2_SUCCESS; +} + +/** + internal function only sets the builder reference , + should not be used by user + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_node_set_builder( + axiom_node_t * om_node, + const axutil_env_t * env, + axiom_stax_builder_t * builder) +{ + AXIS2_PARAM_CHECK(env->error, om_node, AXIS2_FAILURE); + om_node->builder = builder; + return AXIS2_SUCCESS; +} + +/** + * This is an internal function + */ +AXIS2_EXTERN axiom_stax_builder_t *AXIS2_CALL +axiom_node_get_builder( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + if(!om_node) + { + return NULL; + } + return om_node->builder; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_node_to_string( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + axiom_output_t *om_output = NULL; + axiom_xml_writer_t *xml_writer = NULL; + axis2_char_t *xml = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, om_node, NULL); + + xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + if(!xml_writer) + { + return NULL; + } + + om_output = axiom_output_create(env, xml_writer); + if(!om_output) + { + axiom_xml_writer_free(xml_writer, env); + return NULL; + } + status = axiom_node_serialize(om_node, env, om_output); + if(status == AXIS2_SUCCESS) + { + xml = axutil_strdup(env, (axis2_char_t *)axiom_xml_writer_get_xml(xml_writer, env)); + } + axiom_output_free(om_output, env); + return xml; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_node_sub_tree_to_string( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + axiom_output_t *om_output = NULL; + axiom_xml_writer_t *xml_writer = NULL; + axis2_char_t *xml = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, om_node, NULL); + + xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + if(!xml_writer) + { + return NULL; + } + + om_output = axiom_output_create(env, xml_writer); + if(!om_output) + { + axiom_xml_writer_free(xml_writer, env); + return NULL; + } + status = axiom_node_serialize_sub_tree(om_node, env, om_output); + if(status == AXIS2_SUCCESS) + { + xml = axutil_strdup(env, (axis2_char_t *)axiom_xml_writer_get_xml(xml_writer, env)); + } + axiom_output_free(om_output, env); + return xml; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_node_to_string_non_optimized( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + axiom_output_t *om_output = NULL; + axiom_xml_writer_t *xml_writer = NULL; + axis2_char_t *xml = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, om_node, NULL); + + xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + if(!xml_writer) + { + return NULL; + } + + om_output = axiom_output_create(env, xml_writer); + if(!om_output) + { + axiom_xml_writer_free(xml_writer, env); + return NULL; + } + /*This is where we set the output to be non-optimized*/ + axiom_output_set_do_optimize(om_output, env, AXIS2_FALSE); + status = axiom_node_serialize(om_node, env, om_output); + if(status == AXIS2_SUCCESS) + { + xml = axutil_strdup(env, (axis2_char_t *)axiom_xml_writer_get_xml(xml_writer, env)); + } + axiom_output_free(om_output, env); + return xml; +} + diff --git a/axiom/src/om/om_output.c b/axiom/src/om/om_output.c new file mode 100644 index 0000000..893f426 --- /dev/null +++ b/axiom/src/om/om_output.c @@ -0,0 +1,638 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define AXIS2_DEFAULT_CHAR_SET_ENCODING "UTF-8" + +/** also defined in axiom_soap.h */ + +/** max args for om_output_write function */ +#define MAX_ARGS 4 + +struct axiom_output +{ + + /** axiom_xml_writer. any xml writer which + implemet axiom_xml_writer.h interface */ + axiom_xml_writer_t *xml_writer; + + axis2_bool_t do_optimize; + + axis2_char_t *mime_boundary; + + axis2_char_t *root_content_id; + + int next_id; + + axis2_char_t *next_content_id; + + axis2_bool_t is_soap11; + + axis2_char_t *char_set_encoding; + + axis2_char_t *xml_version; + + axis2_bool_t ignore_xml_declaration; + + axutil_array_list_t *binary_node_list; + + axis2_char_t *mime_boundry; + + axis2_char_t *content_type; + + axutil_array_list_t *mime_parts; + +}; + +AXIS2_EXTERN axiom_output_t *AXIS2_CALL +axiom_output_create( + const axutil_env_t * env, + axiom_xml_writer_t * xml_writer) +{ + axiom_output_t *om_output = NULL; + AXIS2_ENV_CHECK(env, NULL); + + om_output = (axiom_output_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_output_t)); + + if(!om_output) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + om_output->xml_writer = xml_writer; + om_output->do_optimize = AXIS2_TRUE; + om_output->mime_boundary = NULL; + om_output->root_content_id = NULL; + om_output->next_content_id = NULL; + om_output->next_id = 0; + om_output->is_soap11 = AXIS2_TRUE; + om_output->char_set_encoding = AXIS2_DEFAULT_CHAR_SET_ENCODING; + om_output->xml_version = NULL; + om_output->ignore_xml_declaration = AXIS2_TRUE; + om_output->binary_node_list = NULL; + om_output->mime_boundry = NULL; + om_output->content_type = NULL; + om_output->mime_parts = NULL; + + return om_output; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_output_free( + axiom_output_t * om_output, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(om_output->xml_version) + { + AXIS2_FREE(env->allocator, om_output->xml_version); + } + if(om_output->mime_boundary) + { + AXIS2_FREE(env->allocator, om_output->mime_boundary); + } + if(om_output->next_content_id) + { + AXIS2_FREE(env->allocator, om_output->next_content_id); + } + if(om_output->root_content_id) + { + AXIS2_FREE(env->allocator, om_output->root_content_id); + } + + if(om_output->xml_writer) + { + axiom_xml_writer_free(om_output->xml_writer, env); + } + + if(om_output->binary_node_list) + { + axutil_array_list_free(om_output->binary_node_list, env); + } + + if(om_output->content_type) + { + AXIS2_FREE(env->allocator, om_output->content_type); + } + + AXIS2_FREE(env->allocator, om_output); + return; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_output_is_soap11( + axiom_output_t * om_output, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + return om_output->is_soap11; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_output_is_ignore_xml_declaration( + axiom_output_t * om_output, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + return om_output->ignore_xml_declaration; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_output_set_ignore_xml_declaration( + axiom_output_t * om_output, + const axutil_env_t * env, + axis2_bool_t ignore_xml_dec) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + om_output->ignore_xml_declaration = ignore_xml_dec; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_output_set_soap11( + axiom_output_t * om_output, + const axutil_env_t * env, + axis2_bool_t soap11) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + om_output->is_soap11 = soap11; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_output_set_xml_version( + axiom_output_t * om_output, + const axutil_env_t * env, + axis2_char_t * xml_version) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + AXIS2_PARAM_CHECK(env->error, xml_version, AXIS2_FAILURE); + + if(om_output->xml_version) + { + AXIS2_FREE(env->allocator, om_output->xml_version); + om_output->xml_version = NULL; + } + + om_output->xml_version = axutil_strdup(env, xml_version); + if(!om_output->xml_version) + { + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_output_get_xml_version( + axiom_output_t * om_output, + const axutil_env_t * env) +{ + return om_output->xml_version; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_output_set_char_set_encoding( + axiom_output_t * om_output, + const axutil_env_t * env, + axis2_char_t * char_set_encoding) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + om_output->char_set_encoding = char_set_encoding; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_output_get_char_set_encoding( + axiom_output_t * om_output, + const axutil_env_t * env) +{ + return om_output->char_set_encoding; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_output_set_do_optimize( + axiom_output_t * om_output, + const axutil_env_t * env, + axis2_bool_t optimize) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + om_output->do_optimize = optimize; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_xml_writer_t *AXIS2_CALL +axiom_output_get_xml_writer( + axiom_output_t * om_output, + const axutil_env_t * env) +{ + return om_output->xml_writer; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_output_is_optimized( + axiom_output_t * om_output, + const axutil_env_t * env) +{ + return om_output->do_optimize; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axiom_output_get_content_type( + axiom_output_t * om_output, + const axutil_env_t * env) +{ + const axis2_char_t *soap_content_type = NULL; + if(AXIS2_TRUE == om_output->do_optimize) + { + if(AXIS2_TRUE == om_output->is_soap11) + { + soap_content_type = AXIOM_SOAP11_CONTENT_TYPE; + } + else + { + soap_content_type = AXIOM_SOAP12_CONTENT_TYPE; + } + if(om_output->content_type) + { + AXIS2_FREE(env->allocator, om_output->content_type); + om_output->content_type = NULL; + } + + om_output->content_type = (axis2_char_t *)axiom_mime_part_get_content_type_for_mime(env, + om_output->mime_boundry, om_output->root_content_id, om_output->char_set_encoding, + soap_content_type); + return om_output->content_type; + } + else if(AXIS2_TRUE == om_output->is_soap11) + { + return AXIOM_SOAP11_CONTENT_TYPE; + } + return AXIOM_SOAP12_CONTENT_TYPE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_output_write_optimized( + axiom_output_t * om_output, + const axutil_env_t * env, + axiom_text_t * om_text) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(om_output->binary_node_list) + { + axutil_array_list_add(om_output->binary_node_list, env, om_text); + } + else + { + om_output->binary_node_list = axutil_array_list_create(env, 5); + if(!(om_output->binary_node_list)) + { + return AXIS2_FAILURE; + } + axutil_array_list_add(om_output->binary_node_list, env, om_text); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_output_get_next_content_id( + axiom_output_t * om_output, + const axutil_env_t * env) +{ + axis2_char_t *uuid = NULL; + axis2_char_t *temp_str = NULL; + axis2_char_t *temp_str1 = NULL; + axis2_char_t id[256]; + om_output->next_id++; + + /** free existing id */ + if(om_output->next_content_id) + { + AXIS2_FREE(env->allocator, om_output->next_content_id); + om_output->next_content_id = NULL; + } + + uuid = axutil_uuid_gen(env); + if(!uuid) + { + return NULL; + } + + sprintf(id, "%d", om_output->next_id); + + temp_str = axutil_stracat(env, id, "."); + temp_str1 = axutil_stracat(env, temp_str, uuid); + om_output->next_content_id = axutil_stracat(env, temp_str1, "@apache.org"); + if(temp_str) + { + AXIS2_FREE(env->allocator, temp_str); + temp_str = NULL; + } + if(temp_str1) + { + AXIS2_FREE(env->allocator, temp_str1); + temp_str1 = NULL; + } + if(uuid) + { + AXIS2_FREE(env->allocator, uuid); + uuid = NULL; + } + return om_output->next_content_id; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_output_get_root_content_id( + axiom_output_t * om_output, + const axutil_env_t * env) +{ + axis2_char_t *temp_str = NULL; + axis2_char_t *uuid = NULL; + + if(!om_output->root_content_id) + { + uuid = axutil_uuid_gen(env); + + temp_str = axutil_stracat(env, "0.", uuid); + + om_output->root_content_id = axutil_stracat(env, temp_str, "@apache.org"); + + if(temp_str) + { + AXIS2_FREE(env->allocator, temp_str); + temp_str = NULL; + } + if(uuid) + { + AXIS2_FREE(env->allocator, uuid); + uuid = NULL; + } + } + + return om_output->root_content_id; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_output_get_mime_boundry( + axiom_output_t * om_output, + const axutil_env_t * env) +{ + axis2_char_t *uuid = NULL; + if(!om_output->mime_boundary) + { + uuid = axutil_uuid_gen(env); + + om_output->mime_boundary = axutil_stracat(env, "MIMEBoundary", uuid); + if(uuid) + { + AXIS2_FREE(env->allocator, uuid); + uuid = NULL; + } + } + return om_output->mime_boundary; +} + +/******************************************************************************/ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_output_write( + axiom_output_t * om_output, + const axutil_env_t * env, + axiom_types_t type, + int no_of_args, + ...) +{ + int status = AXIS2_SUCCESS; + axis2_char_t *args_list[MAX_ARGS]; + int i = 0; + va_list ap; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + va_start(ap, no_of_args); + for(i = 0; i < no_of_args; i++) + { + args_list[i] = va_arg(ap, axis2_char_t *); + } + va_end(ap); + + if(type == AXIOM_ELEMENT) + { + if(no_of_args == 0) + { + status = axiom_xml_writer_write_end_element(om_output->xml_writer, env); + } + else if(no_of_args == 1) + { + status = axiom_xml_writer_write_start_element(om_output->xml_writer, env, args_list[0]); + } + else if(no_of_args == 2) + { + status = axiom_xml_writer_write_start_element_with_namespace( + om_output->xml_writer, env, args_list[0], args_list[1]); + } + else if(no_of_args == 3) + { + status = axiom_xml_writer_write_start_element_with_namespace_prefix( + om_output->xml_writer, env, args_list[0], args_list[1], args_list[2]); + } + else if(no_of_args == 4) + { + if(!args_list[0]) + { + status = AXIS2_FAILURE; + } + else if(!args_list[1]) + { + status = axiom_xml_writer_write_empty_element( + om_output->xml_writer, env,args_list[0]); + } + else if(!args_list[2]) + { + status = axiom_xml_writer_write_empty_element_with_namespace( + om_output->xml_writer, env, args_list[0], args_list[1]); + } + else + { + status = axiom_xml_writer_write_empty_element_with_namespace_prefix( + om_output->xml_writer, env, args_list[0], args_list[1], args_list[2]); + } + } + } + else if(type == AXIOM_DATA_SOURCE) + { + status = axiom_xml_writer_write_raw(om_output->xml_writer, env, args_list[0]); + } + else if(type == AXIOM_ATTRIBUTE) + { + if(no_of_args == 2) + { + status = axiom_xml_writer_write_attribute( + om_output->xml_writer, env, args_list[0], args_list[1]); + } + else if(no_of_args == 3) + { + status = axiom_xml_writer_write_attribute_with_namespace( + om_output-> xml_writer, env, args_list[0], args_list[1], args_list[2]); + } + else if(no_of_args == 4) + { + status = axiom_xml_writer_write_attribute_with_namespace_prefix( + om_output->xml_writer, env, args_list[0], args_list[1], args_list[2], args_list[3]); + } + } + else if(type == AXIOM_NAMESPACE) + { + /* If the namespace prefix is xml, it must be the pre-defined xml + namespace. Although the XML spec allows it to be declared + explicitly, this is superfluous and not accepted by all xml + parsers. */ + if((!args_list[0]) || (strcmp(args_list[0], "xml") != 0)) + { + status = axiom_xml_writer_write_namespace( + om_output->xml_writer, env, args_list[0], args_list[1]); + } + } + else if(type == AXIOM_TEXT) + { + status = axiom_xml_writer_write_characters(om_output->xml_writer, env, args_list[0]); + } + else if(type == AXIOM_COMMENT) + { + status = axiom_xml_writer_write_comment(om_output->xml_writer, env, args_list[0]); + } + else if(type == AXIOM_PROCESSING_INSTRUCTION) + { + if(no_of_args == 1) + { + status = axiom_xml_writer_write_processing_instruction( + om_output-> xml_writer, env, args_list[0]); + } + else if(no_of_args == 2) + { + status = axiom_xml_writer_write_processing_instruction_data( + om_output-> xml_writer, env, args_list[0], args_list[1]); + } + } + else if(type == AXIOM_DOCTYPE) + { + status = axiom_xml_writer_write_dtd(om_output->xml_writer, env, args_list[0]); + } + + if(status == AXIS2_SUCCESS) + { + return AXIS2_SUCCESS; + } + else + return AXIS2_FAILURE; +} + +axis2_status_t AXIS2_CALL +axiom_output_write_xml_version_encoding( + axiom_output_t * om_output, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(!om_output->xml_version) + { + axiom_output_set_xml_version(om_output, env, "1.0"); + } + if(!om_output->char_set_encoding) + { + axiom_output_set_char_set_encoding(om_output, env, "UTF-8"); + } + return axiom_xml_writer_write_start_document_with_version_encoding(om_output-> xml_writer, env, + om_output-> xml_version, om_output-> char_set_encoding); + +} + +/* This method will be called from transport. After this method each and every + * message part needs to be send are stored in an arraylits. So the transport + * sender should correctly figure out how to send from the given information. + */ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_output_flush( + axiom_output_t * om_output, + const axutil_env_t * env) +{ + const axis2_char_t *soap_content_type = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + if(om_output->do_optimize) + { + axis2_char_t *root_content_id = NULL; + axis2_char_t *buffer = NULL; + + /* Extracting the soap part */ + + buffer = axiom_xml_writer_get_xml(om_output->xml_writer, env); + if(om_output->is_soap11) + { + soap_content_type = AXIOM_SOAP11_CONTENT_TYPE; + } + else + { + soap_content_type = AXIOM_SOAP12_CONTENT_TYPE; + } + + /* The created mime_boundary for this soap message */ + + om_output->mime_boundry = axiom_output_get_mime_boundry(om_output, env); + + /* This is also created for attachments*/ + root_content_id = axiom_output_get_root_content_id(om_output, env); + + /* different parts of the message is added according to their order + * to an arraylist */ + om_output->mime_parts = axiom_mime_part_create_part_list(env, buffer, + om_output->binary_node_list, om_output->mime_boundry, om_output->root_content_id, + om_output->char_set_encoding, soap_content_type); + + if(om_output->mime_parts) + { + return AXIS2_SUCCESS; + } + else + { + return AXIS2_FAILURE; + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axiom_output_get_mime_parts( + axiom_output_t * om_output, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + return om_output->mime_parts; +} + diff --git a/axiom/src/om/om_processing_instruction.c b/axiom/src/om/om_processing_instruction.c new file mode 100644 index 0000000..5be688b --- /dev/null +++ b/axiom/src/om/om_processing_instruction.c @@ -0,0 +1,187 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "axiom_node_internal.h" + +struct axiom_processing_instruction +{ + + /** processing instruction target */ + axis2_char_t *target; + + /** processing instruction value */ + axis2_char_t *value; +}; + +AXIS2_EXTERN axiom_processing_instruction_t *AXIS2_CALL +axiom_processing_instruction_create( + const axutil_env_t * env, + axiom_node_t * parent, + const axis2_char_t * target, + const axis2_char_t * value, + axiom_node_t ** node) +{ + axiom_processing_instruction_t *processing_instruction = NULL; + AXIS2_ENV_CHECK(env, NULL); + + if(!node || !target || !value) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Node or target or value is NULL"); + return NULL; + } + + *node = axiom_node_create(env); + + if(!*node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + processing_instruction = (axiom_processing_instruction_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_processing_instruction_t)); + + if(!processing_instruction) + { + AXIS2_FREE(env->allocator, (*node)); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + processing_instruction->value = NULL; + + if(value) + { + processing_instruction->value = (axis2_char_t *)axutil_strdup(env, value); + if(!processing_instruction->value) + { + AXIS2_FREE(env->allocator, processing_instruction); + AXIS2_FREE(env->allocator, *node); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + } + + processing_instruction->target = NULL; + + if(target) + { + processing_instruction->target = (axis2_char_t *)axutil_strdup(env, target); + if(!processing_instruction->target) + { + AXIS2_FREE(env->allocator, processing_instruction->value); + AXIS2_FREE(env->allocator, processing_instruction); + AXIS2_FREE(env->allocator, *node); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + } + axiom_node_set_data_element(*node, env, processing_instruction); + axiom_node_set_node_type(*node, env, AXIOM_PROCESSING_INSTRUCTION); + if(parent) + { + axiom_node_add_child(parent, env, (*node)); + } + + return processing_instruction; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_processing_instruction_free( + axiom_processing_instruction_t * om_pi, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(om_pi->value) + { + AXIS2_FREE(env->allocator, om_pi->value); + om_pi->value = NULL; + } + + if(om_pi->target) + { + AXIS2_FREE(env->allocator, om_pi->target); + om_pi->target = NULL; + } + + AXIS2_FREE(env->allocator, om_pi); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_processing_instruction_set_value( + axiom_processing_instruction_t * om_pi, + const axutil_env_t * env, + const axis2_char_t * value) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + om_pi->value = (axis2_char_t *)axutil_strdup(env, value); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_processing_instruction_set_target( + axiom_processing_instruction_t * om_pi, + const axutil_env_t * env, + const axis2_char_t * target) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, target, AXIS2_FAILURE); + om_pi->target = (axis2_char_t *)axutil_strdup(env, target); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_processing_instruction_get_value( + axiom_processing_instruction_t * om_pi, + const axutil_env_t * env) +{ + return om_pi->value; +} +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_processing_instruction_get_target( + axiom_processing_instruction_t * om_pi, + const axutil_env_t * env) +{ + return om_pi->target; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_processing_instruction_serialize( + axiom_processing_instruction_t * om_pi, + const axutil_env_t * env, + axiom_output_t * om_output) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_output, AXIS2_FAILURE); + + if(om_pi->target && om_pi->value) + { + return axiom_output_write(om_output, env, AXIOM_PROCESSING_INSTRUCTION, 2, om_pi->target, + om_pi->value); + } + else if(om_pi->target) + { + return axiom_output_write(om_output, env, AXIOM_PROCESSING_INSTRUCTION, 2, om_pi->target, + om_pi->value); + } + return AXIS2_FAILURE; +} diff --git a/axiom/src/om/om_stax_builder.c b/axiom/src/om/om_stax_builder.c new file mode 100644 index 0000000..399a711 --- /dev/null +++ b/axiom/src/om/om_stax_builder.c @@ -0,0 +1,1072 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "axiom_node_internal.h" +#include "axiom_stax_builder_internal.h" + +struct axiom_stax_builder +{ + + /** pull parser instance used by the om_builder */ + axiom_xml_reader_t *parser; + + /** last node the om_builder found */ + axiom_node_t *lastnode; + + axiom_node_t *root_node; + + /** document associated with the om_builder */ + axiom_document_t *document; + + /** done building the document? */ + axis2_bool_t done; + + /** parser was accessed? */ + axis2_bool_t parser_accessed; + + /** caching enabled? */ + axis2_bool_t cache; + + /** current event */ + int current_event; + /** Indicate the current element level. */ + int element_level; + axutil_hash_t *declared_namespaces; +}; + +AXIS2_EXTERN axiom_stax_builder_t *AXIS2_CALL +axiom_stax_builder_create( + const axutil_env_t * env, + axiom_xml_reader_t * parser) +{ + axiom_stax_builder_t *om_builder = NULL; + AXIS2_PARAM_CHECK(env->error, parser, NULL); + + om_builder = (axiom_stax_builder_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_stax_builder_t)); + if(!om_builder) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + om_builder->cache = AXIS2_TRUE; + om_builder->parser_accessed = AXIS2_FALSE; + om_builder->done = AXIS2_FALSE; + om_builder->lastnode = NULL; + om_builder->document = NULL; + om_builder->parser = parser; + om_builder->current_event = -1; + om_builder->root_node = NULL; + om_builder->element_level = 0; + om_builder->declared_namespaces = axutil_hash_make(env); + om_builder->document = axiom_document_create(env, NULL, om_builder); + if(!om_builder->document) + { + AXIS2_FREE(env->allocator, om_builder); + return NULL; + } + + return om_builder; +} + +static axis2_status_t +axiom_stax_builder_process_attributes( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env, + axiom_node_t * element_node) +{ + int i = 0; + int attribute_count; + axiom_element_t *om_ele = NULL; + + om_ele = (axiom_element_t *)axiom_node_get_data_element(element_node, env); + attribute_count = axiom_xml_reader_get_attribute_count(om_builder->parser, env); + for(i = 1; i <= attribute_count; ++i) + { + axiom_namespace_t *ns = NULL; + axis2_char_t *uri = NULL; + axis2_char_t *prefix = NULL; + axis2_char_t *attr_name = NULL; + axis2_char_t *attr_value = NULL; + + uri = axiom_xml_reader_get_attribute_namespace_by_number(om_builder-> parser, env, i); + prefix = axiom_xml_reader_get_attribute_prefix_by_number(om_builder->parser, env, i); + if(uri && (axutil_strcmp(uri, "") != 0)) + { + ns = axiom_element_find_namespace(om_ele, env, element_node, uri, prefix); + if(!ns) + { + /* if namespace is not defined yet, create it */ + ns = axiom_namespace_create(env, uri, prefix); + } + } + if(uri) + { + axiom_xml_reader_xml_free(om_builder->parser, env, uri); + } + if(prefix) + { + axiom_xml_reader_xml_free(om_builder->parser, env, prefix); + } + + attr_name = axiom_xml_reader_get_attribute_name_by_number(om_builder->parser, env, i); + attr_value = axiom_xml_reader_get_attribute_value_by_number(om_builder->parser, env, i); + + if(attr_name) + { + axutil_string_t *attr_name_str = NULL; + axutil_string_t *attr_value_str = NULL; + axiom_attribute_t *attribute = NULL; + +#ifdef AXIS2_LIBXML2_ENABLED + attr_name_str = axutil_string_create(env, attr_name); + attr_value_str = axutil_string_create(env, attr_value); + axiom_xml_reader_xml_free(om_builder->parser, env, attr_name); + axiom_xml_reader_xml_free(om_builder->parser, env, attr_value); +#else + attr_name_str = axutil_string_create_assume_ownership(env, &attr_name); + attr_value_str = axutil_string_create_assume_ownership(env, &attr_value); +#endif + + attribute = axiom_attribute_create_str(env, attr_name_str, attr_value_str, ns); + axutil_string_free(attr_name_str, env); + axutil_string_free(attr_value_str, env); + + if(!attribute) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create attribute"); + return AXIS2_FAILURE; + } + if(axiom_element_add_attribute(om_ele, env, attribute, element_node) != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot add attribute to element"); + return AXIS2_FAILURE; + } + } + } + return AXIS2_SUCCESS; +} + +static axiom_node_t * +axiom_stax_builder_create_om_text( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + axis2_char_t *temp_value = NULL; + axutil_string_t *temp_value_str = NULL; + axiom_node_t *node = NULL; + axiom_node_t *parent = om_builder->lastnode; + + if(!parent) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_BUILDER_STATE_LAST_NODE_NULL, AXIS2_FAILURE); + return NULL; + } + + temp_value = axiom_xml_reader_get_value(om_builder->parser, env); + if(!temp_value) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_XML_READER_VALUE_NULL, AXIS2_FAILURE); + return NULL; + } + +#ifdef AXIS2_LIBXML2_ENABLED + temp_value_str = axutil_string_create(env, temp_value); + axiom_xml_reader_xml_free(om_builder->parser, env, temp_value); +#else + temp_value_str = axutil_string_create_assume_ownership(env, &temp_value); +#endif + + if(!temp_value_str) + { + /* axutil_string_create will have set an error number */ + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create OM Text value"); + return NULL; + } + + if(axiom_node_is_complete(parent, env)) + { + parent = axiom_node_get_parent(om_builder->lastnode, env); + } + + axiom_text_create_str(env, parent, temp_value_str, &node); + axutil_string_free(temp_value_str, env); + + if(node) + { + axiom_node_set_complete(node, env, AXIS2_TRUE); + om_builder->lastnode = node; + } + + return node; +} + +static axis2_status_t +axiom_stax_builder_process_namespaces( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env, + axiom_node_t * node, + int is_soap_element) +{ + axis2_status_t status = AXIS2_SUCCESS; + int namespace_count = 0; + axiom_namespace_t *om_ns = NULL; + axiom_element_t *om_ele = NULL; + + /* temp values */ + axis2_char_t *tmp_prefix = NULL; + axis2_char_t *tmp_ns_prefix = NULL; + axis2_char_t *tmp_ns_uri = NULL; + axutil_string_t *tmp_ns_prefix_str = NULL; + axutil_string_t *tmp_ns_uri_str = NULL; + + int i = 0; + om_ele = (axiom_element_t *)axiom_node_get_data_element(node, env); + + namespace_count = axiom_xml_reader_get_namespace_count(om_builder->parser, env); + for(i = 1; i <= namespace_count; ++i) + { + tmp_ns_prefix = axiom_xml_reader_get_namespace_prefix_by_number(om_builder->parser, env, i); + tmp_ns_uri = axiom_xml_reader_get_namespace_uri_by_number(om_builder->parser, env, i); + +#ifdef AXIS2_LIBXML2_ENABLED + tmp_ns_prefix_str = axutil_string_create(env, tmp_ns_prefix); + tmp_ns_uri_str = axutil_string_create(env, tmp_ns_uri); +#else + tmp_ns_prefix_str = axutil_string_create_assume_ownership(env, &tmp_ns_prefix); + tmp_ns_uri_str = axutil_string_create_assume_ownership(env, &tmp_ns_uri); +#endif + + if(!tmp_ns_prefix || axutil_strcmp(tmp_ns_prefix, "xmlns") == 0) + { + /* default namespace case. !temp_ns_prefix is for guththila */ + + if(tmp_ns_prefix_str) + { + axutil_string_free(tmp_ns_prefix_str, env); + } + + tmp_ns_prefix_str = axutil_string_create(env, ""); + om_ns = axiom_namespace_create_str(env, tmp_ns_uri_str, tmp_ns_prefix_str); + if(!om_ns) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create namespace"); + return AXIS2_FAILURE; + } + + status = axiom_element_declare_namespace(om_ele, env, node, om_ns); + if(!status) + { + axiom_namespace_free(om_ns, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error when declaring namespace"); + return AXIS2_FAILURE; + } + } + else + { + axis2_char_t *prefix = NULL; + om_ns = axiom_namespace_create_str(env, tmp_ns_uri_str, tmp_ns_prefix_str); + if(!om_ns) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create namespace"); + return AXIS2_FAILURE; + } + + status = axiom_element_declare_namespace_assume_param_ownership(om_ele, env, om_ns); + prefix = axiom_namespace_get_prefix(om_ns, env); + axutil_hash_set(om_builder->declared_namespaces, prefix, AXIS2_HASH_KEY_STRING, om_ns); + } + + axutil_string_free(tmp_ns_uri_str, env); + axutil_string_free(tmp_ns_prefix_str, env); +#ifdef AXIS2_LIBXML2_ENABLED + axiom_xml_reader_xml_free(om_builder->parser, env, tmp_ns_uri); + axiom_xml_reader_xml_free(om_builder->parser, env, tmp_ns_prefix); +#endif + } + + /* set own namespace */ + tmp_prefix = axiom_xml_reader_get_prefix(om_builder->parser, env); + if(tmp_prefix) + { + om_ns = axutil_hash_get(om_builder->declared_namespaces, tmp_prefix, AXIS2_HASH_KEY_STRING); + + if(om_ns) + { + axiom_element_set_namespace_assume_param_ownership(om_ele, env, om_ns); + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_INVALID_DOCUMENT_STATE_UNDEFINED_NAMESPACE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error when setting namespace"); + return AXIS2_FAILURE; + } + + axiom_xml_reader_xml_free(om_builder->parser, env, tmp_prefix); + } + + return status; +} + +static axiom_node_t * +axiom_stax_builder_create_om_element( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env, + axis2_bool_t is_empty) +{ + axiom_node_t *element_node = NULL; + axiom_element_t *om_ele = NULL; + axis2_char_t *temp_localname = NULL; + axutil_string_t *temp_localname_str = NULL; + + temp_localname = axiom_xml_reader_get_name(om_builder->parser, env); + + if(!temp_localname) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_XML_READER_ELEMENT_NULL, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot find name of the element"); + return NULL; + } + +#ifdef AXIS2_LIBXML2_ENABLED + temp_localname_str = axutil_string_create(env, temp_localname); + axiom_xml_reader_xml_free(om_builder->parser, env, temp_localname); +#else + temp_localname_str = axutil_string_create_assume_ownership(env, &temp_localname); +#endif + + om_builder->element_level++; + + if(!om_builder->lastnode) + { + /* since last node is null, this should be the root node */ + om_ele = axiom_element_create_str(env, NULL, temp_localname_str, NULL, &element_node); + om_builder->root_node = element_node; + if(om_builder->document) + { + axiom_document_set_root_element(om_builder->document, env, element_node); + } + } + else if(axiom_node_is_complete(om_builder->lastnode, env)) + { + /* previous node building is finished. So, this node should be a sibling of previous node */ + axiom_node_t *parent = axiom_node_get_parent(om_builder->lastnode, env); + om_ele = axiom_element_create_str(env, parent, temp_localname_str, NULL, &element_node); + if(element_node) + { + axiom_node_set_next_sibling(om_builder->lastnode, env, element_node); + axiom_node_set_previous_sibling(element_node, env, om_builder->lastnode); + } + } + else + { + /* previous node building is not finished. This should be first child of previous node */ + om_ele = axiom_element_create_str( + env, om_builder->lastnode, temp_localname_str, NULL, &element_node); + if(element_node) + { + axiom_node_set_first_child(om_builder->lastnode, env, element_node); + axiom_node_set_parent(element_node, env, om_builder->lastnode); + } + } + + axutil_string_free(temp_localname_str, env); + + if((!om_ele) || (!element_node)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create axiom element"); + return NULL; + } + + axiom_node_set_builder(element_node, env, om_builder); + axiom_node_set_document(element_node, env, om_builder->document); + axiom_element_set_is_empty(om_ele, env, is_empty); + + /* order of processing name spaces first (before processing attributes) is important */ + axiom_stax_builder_process_namespaces(om_builder, env, element_node, 0); + axiom_stax_builder_process_attributes(om_builder, env, element_node); + + om_builder->lastnode = element_node; + return element_node; +} + +static axiom_node_t * +axiom_stax_builder_create_om_comment( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + axiom_node_t *comment_node = NULL; + axis2_char_t *comment_value = NULL; + + if(!om_builder->lastnode) + { + /* if the comment is at the root level, we will omit it */ + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Top level comment is ignored"); + return NULL; + } + + comment_value = axiom_xml_reader_get_value(om_builder->parser, env); + if(!comment_value) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_XML_READER_ELEMENT_NULL, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in reading comment"); + return NULL; + } + + if(axiom_node_is_complete(om_builder->lastnode, env)) + { + /* Last node is completed means, this node should be a sibling of last node */ + axiom_node_t *parent = axiom_node_get_parent(om_builder->lastnode, env); + axiom_comment_create(env, parent, comment_value, &comment_node); + axiom_node_set_next_sibling(om_builder->lastnode, env, comment_node); + axiom_node_set_previous_sibling(comment_node, env, om_builder->lastnode); + } + else + { + /* this node should be a child of last node */ + axiom_comment_create(env, om_builder->lastnode, comment_value, &comment_node); + axiom_node_set_first_child(om_builder->lastnode, env, comment_node); + axiom_node_set_parent(comment_node, env, om_builder->lastnode); + } + + axiom_xml_reader_xml_free(om_builder->parser,env,comment_value); + axiom_node_set_builder(comment_node, env, om_builder); + axiom_node_set_document(comment_node, env, om_builder->document); + om_builder->element_level++; + om_builder->lastnode = comment_node; + + return comment_node; +} + + +static axiom_node_t * +axiom_stax_builder_create_om_processing_instruction( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + axiom_node_t *pi_node = NULL; + axis2_char_t *target = NULL; + axis2_char_t *value = NULL; + + target = axiom_xml_reader_get_pi_target(om_builder->parser, env); + value = axiom_xml_reader_get_pi_data(om_builder->parser, env); + if(!target) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_XML_READER_ELEMENT_NULL, AXIS2_FAILURE); + return NULL; + } + if(!om_builder->lastnode) + { + /* do nothing */ + axiom_xml_reader_xml_free(om_builder->parser, env, target); + axiom_xml_reader_xml_free(om_builder->parser, env, value); + return NULL; + } + else if(axiom_node_is_complete(om_builder->lastnode, env) + || (axiom_node_get_node_type(om_builder->lastnode, env) == AXIOM_TEXT)) + { + axiom_processing_instruction_create(env, axiom_node_get_parent(om_builder-> lastnode, env), + target, value, &pi_node); + + axiom_node_set_next_sibling(om_builder->lastnode, env, pi_node); + axiom_node_set_previous_sibling(pi_node, env, om_builder->lastnode); + } + else + { + axiom_processing_instruction_create(env, om_builder->lastnode, target, value, &pi_node); + axiom_node_set_first_child(om_builder->lastnode, env, pi_node); + axiom_node_set_parent(pi_node, env, om_builder->lastnode); + } + + om_builder->element_level++; + + if(target) + { + axiom_xml_reader_xml_free(om_builder->parser, env, target); + } + if(value) + { + axiom_xml_reader_xml_free(om_builder->parser, env, value); + } + + om_builder->lastnode = pi_node; + return pi_node; +} + +static axis2_status_t +axiom_stax_builder_end_element( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + /* if last node is not set, that means end_element is called before start_element, + * which is an error */ + if(!om_builder->lastnode) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Invalid XML. End element is received before start element."); + return AXIS2_FAILURE; + } + + om_builder->element_level--; + if(axiom_node_is_complete(om_builder->lastnode, env)) + { + /* Last node completed means, this end element should be parent of the last node. */ + axiom_node_t *parent = NULL; + parent = axiom_node_get_parent(om_builder->lastnode, env); + if(parent) + { + axiom_node_set_complete(parent, env, AXIS2_TRUE); + om_builder->lastnode = parent; + } + } + else + { + axiom_node_set_complete((om_builder->lastnode), env, AXIS2_TRUE); + } + + /* if we finish building the root node, then we can set the complete status of om_builder */ + if(om_builder->root_node && axiom_node_is_complete(om_builder->root_node, env)) + { + om_builder->done = AXIS2_TRUE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_stax_builder_next( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + int token = 0; + axiom_node_t *node = NULL; + AXIS2_ENV_CHECK(env, NULL); + + if(!om_builder->parser) + { + return NULL; + } + do + { + if(om_builder->done) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL, AXIS2_FAILURE); + return NULL; + } + + token = axiom_xml_reader_next(om_builder->parser, env); + if(token == -1) + { + return NULL; + } + + om_builder->current_event = token; + + if(!(om_builder->cache)) + { + return NULL; + } + + switch(token) + { + case AXIOM_XML_READER_START_DOCUMENT: + /*Do nothing */ + break; + + case AXIOM_XML_READER_START_ELEMENT: + node = axiom_stax_builder_create_om_element(om_builder, env, AXIS2_FALSE); + break; + + case AXIOM_XML_READER_EMPTY_ELEMENT: + +#ifdef AXIS2_LIBXML2_ENABLED + node = axiom_stax_builder_create_om_element(om_builder, env, AXIS2_FALSE); +#else + node = axiom_stax_builder_create_om_element(om_builder, env, AXIS2_TRUE); +#endif + + case AXIOM_XML_READER_END_ELEMENT: + axiom_stax_builder_end_element(om_builder, env); + break; + + case AXIOM_XML_READER_SPACE: + node = axiom_stax_builder_create_om_text(om_builder, env); + break; + + case AXIOM_XML_READER_CHARACTER: + node = axiom_stax_builder_create_om_text(om_builder, env); + break; + + case AXIOM_XML_READER_ENTITY_REFERENCE: + break; + + case AXIOM_XML_READER_COMMENT: + + node = axiom_stax_builder_create_om_comment(om_builder, env); + axiom_stax_builder_end_element(om_builder, env); + break; + + case AXIOM_XML_READER_PROCESSING_INSTRUCTION: + + node = axiom_stax_builder_create_om_processing_instruction(om_builder, env); + axiom_stax_builder_end_element(om_builder, env); + break; + + case AXIOM_XML_READER_CDATA: + break; + + case AXIOM_XML_READER_DOCUMENT_TYPE: + break; + + default: + break; + } + } + while(!node); + return node; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_stax_builder_free( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(!om_builder) + { + return; + } + if(om_builder->declared_namespaces) + { + axutil_hash_free(om_builder->declared_namespaces, env); + om_builder->declared_namespaces = NULL; + } + + if(om_builder->document) + { + axiom_document_free(om_builder->document, env); + om_builder->document = NULL; + } + else + { + if(om_builder->root_node) + { + axiom_node_free_tree(om_builder->root_node, env); + om_builder->root_node = NULL; + } + } + + if(om_builder->parser) + { + axiom_xml_reader_free(om_builder->parser, env); + om_builder->parser = NULL; + } + + AXIS2_FREE(env->allocator, om_builder); + + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_stax_builder_free_self( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + + axiom_node_t *temp_node = NULL; + axiom_node_t *nodes[256]; + axiom_node_t *om_node = NULL; + int count = 0; + + om_node = om_builder->root_node; + + nodes[count++] = om_node; + + if(om_node) + { + do + { + + axiom_node_set_builder(om_node, env, NULL); + axiom_node_set_document(om_node, env, NULL); + + temp_node = axiom_node_get_first_child(om_node, env); + /* serialize children of this node */ + if(temp_node) + { + om_node = temp_node; + nodes[count++] = om_node; + } + else + { + temp_node = axiom_node_get_next_sibling(om_node, env); + if(temp_node) + { + om_node = temp_node; + nodes[count - 1] = om_node; + } + else + { + while(count > 1 && !temp_node) + { + count--; + om_node = nodes[count - 1]; + temp_node = axiom_node_get_next_sibling(om_node, env); + } + if(temp_node && count > 1) + { + om_node = temp_node; + nodes[count - 1] = om_node; + } + else + { + count--; + } + } + } + } + while(count > 0); + } + if(om_builder->declared_namespaces) + { + axutil_hash_free(om_builder->declared_namespaces, env); + om_builder->declared_namespaces = NULL; + } + + if(om_builder->parser) + { + axiom_xml_reader_free(om_builder->parser, env); + om_builder->parser = NULL; + } + if(om_builder->document) + { + axiom_document_free_self(om_builder->document, env); + om_builder->document = NULL; + } + AXIS2_FREE(env->allocator, om_builder); + return; +} + +AXIS2_EXTERN axiom_document_t *AXIS2_CALL +axiom_stax_builder_get_document( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + return om_builder->document; +} + +/** + * moves the reader to next event and returns the token returned by the xml_reader , + * @param builder pointer to STAX builder struct to be used + * @param environment Environment. MUST NOT be NULL. + * @return next event axiom_xml_reader_event_types. Returns -1 on error + */ +AXIS2_EXTERN int AXIS2_CALL +axiom_stax_builder_next_with_token( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + int token = 0; + + if((!om_builder) || (!om_builder->parser)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid OM builder"); + return -1; + } + + if(om_builder->done) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "OM is fully built. Nothing more to build"); + return -1; + } + + token = axiom_xml_reader_next(om_builder->parser, env); + om_builder->current_event = token; + + if(token == -1) + { + om_builder->done = AXIS2_TRUE; + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error when reading xml"); + return -1; + } + + if(!om_builder->cache) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Caching disabled"); + return -1; + } + + switch(token) + { + case AXIOM_XML_READER_START_DOCUMENT: + { + /*Do nothing */ + break; + } + case AXIOM_XML_READER_START_ELEMENT: + { + if(!axiom_stax_builder_create_om_element(om_builder, env, AXIS2_FALSE)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in creating start element"); + return -1; + } + break; + } + case AXIOM_XML_READER_EMPTY_ELEMENT: + { + axis2_bool_t is_empty = AXIS2_TRUE; +#ifdef AXIS2_LIBXML2_ENABLED + is_empty = AXIS2_FALSE; +#endif + if(!axiom_stax_builder_create_om_element(om_builder, env, is_empty)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in creating empty element"); + return -1; + } + /* Let this to fall to AXIOM_XML_READER_END_ELEMENT case as well, since empty element + * = start element logic + end element logic */ + } + case AXIOM_XML_READER_END_ELEMENT: + { + if(axiom_stax_builder_end_element(om_builder, env) != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in processing end element"); + return -1; + } + break; + } + case AXIOM_XML_READER_SPACE: + { + /* ignore white space before the root element */ + if(om_builder->lastnode) + { + if(!axiom_stax_builder_create_om_text(om_builder, env)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in creating axiom text"); + return -1; + } + } + break; + } + case AXIOM_XML_READER_CHARACTER: + { + if(!axiom_stax_builder_create_om_text(om_builder, env)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in creating axiom text"); + return -1; + } + break; + } + case AXIOM_XML_READER_ENTITY_REFERENCE: + { + break; + } + case AXIOM_XML_READER_COMMENT: + { + if(axiom_stax_builder_create_om_comment(om_builder, env)) + { + axiom_stax_builder_end_element(om_builder, env); + } + break; + } + case AXIOM_XML_READER_PROCESSING_INSTRUCTION: + { + if(axiom_stax_builder_create_om_processing_instruction(om_builder, env)) + { + axiom_stax_builder_end_element(om_builder, env); + } + break; + } + case AXIOM_XML_READER_CDATA: + case AXIOM_XML_READER_DOCUMENT_TYPE: + default: + break; + } + return token; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_stax_builder_discard_current_element( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + axiom_node_t *element = NULL; + axiom_node_t *prev_node = NULL; + axiom_node_t *parent = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + element = om_builder->lastnode; + + if(axiom_node_is_complete(element, env) || !(om_builder->cache)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_BUILDER_STATE_CANNOT_DISCARD, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + om_builder->cache = AXIS2_FALSE; + do + { + while(axiom_xml_reader_next(om_builder->parser, env) != AXIOM_XML_READER_END_ELEMENT) + ; + } + while(!(axiom_node_is_complete(element, env))); + + /*All children of this element is pulled now */ + + prev_node = axiom_node_get_previous_sibling(element, env); + if(prev_node) + { + axiom_node_free_tree(axiom_node_get_next_sibling(prev_node, env), env); + axiom_node_set_next_sibling(prev_node, env, NULL); + } + else + { + parent = axiom_node_get_parent(element, env); + axiom_node_free_tree(axiom_node_get_first_child(parent, env), env); + axiom_node_set_first_child(parent, env, NULL); + om_builder->lastnode = parent; + } + om_builder->cache = AXIS2_TRUE; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_xml_reader_t *AXIS2_CALL +axiom_stax_builder_get_parser( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + return om_builder->parser; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_stax_builder_set_cache( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env, + axis2_bool_t enable_cache) +{ + om_builder->cache = enable_cache; +} + +/** + internal function for soap om_builder only + */ +AXIS2_EXTERN int AXIS2_CALL +axiom_stax_builder_get_current_event( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + return om_builder->current_event; +} + +/** + internal function for soap om_builder only + */ +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_stax_builder_get_lastnode( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + return om_builder->lastnode; +} + +/** + internal function for soap om_builder only + */ +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_stax_builder_is_complete( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + return om_builder->done; +} + +/** + internal function for soap om_builder only + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_stax_builder_set_lastnode( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env, + axiom_node_t * om_node) +{ + om_builder->lastnode = om_node; + return AXIS2_SUCCESS; +} + +/** + internal function for soap om_builder only + */ +AXIS2_EXTERN int AXIS2_CALL +axiom_stax_builder_get_element_level( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + return om_builder->element_level; +} + +/** + internal function for soap om_builder only + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_stax_builder_set_element_level( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env, + int element_level) +{ + om_builder->element_level = element_level; + return AXIS2_SUCCESS; +} + +#if 0 +static axiom_node_t * +axiom_stax_builder_create_om_doctype( + axiom_stax_builder_t * om_builder, + const axutil_env_t * env) +{ + axiom_node_t *doctype_node = NULL; + axis2_char_t *doc_value = NULL; + + doc_value = axiom_xml_reader_get_dtd(om_builder->parser, env); + if(!doc_value) + { + return NULL; + } + if(!(om_builder->lastnode)) + { + axiom_doctype_create(env, NULL, doc_value, &doctype_node); + if(om_builder->document) + { + axiom_document_set_root_element(om_builder->document, env, doctype_node); + } + } + om_builder->lastnode = doctype_node; + axiom_xml_reader_xml_free(om_builder->parser, env, doc_value); + return doctype_node; +} +#endif diff --git a/axiom/src/om/om_text.c b/axiom/src/om/om_text.c new file mode 100644 index 0000000..453c395 --- /dev/null +++ b/axiom/src/om/om_text.c @@ -0,0 +1,637 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include "axiom_node_internal.h" +#include +#include +#include +#include +#include + +static axis2_bool_t AXIS2_CALL axiom_text_get_is_binary( + axiom_text_t * om_text, + const axutil_env_t * env); + +static axis2_status_t AXIS2_CALL axiom_text_serialize_start_part( + axiom_text_t * om_text, + const axutil_env_t * env, + axiom_output_t * om_output); + +struct axiom_text +{ + + /** Text value */ + axutil_string_t *value; + + /** The following fields are for MTOM */ + axis2_char_t *mime_type; + axis2_bool_t optimize; + const axis2_char_t *localname; + axis2_bool_t is_binary; + axis2_bool_t is_swa; + axis2_char_t *content_id; + axiom_attribute_t *om_attribute; + axiom_namespace_t *ns; + axiom_data_handler_t *data_handler; +}; + +AXIS2_EXTERN axiom_text_t *AXIS2_CALL +axiom_text_create( + const axutil_env_t * env, + axiom_node_t * parent, + const axis2_char_t * value, + axiom_node_t ** node) +{ + axiom_text_t *om_text = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, node, NULL); + + *node = axiom_node_create(env); + + if(!(*node)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + om_text = (axiom_text_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_text_t)); + if(!om_text) + { + AXIS2_FREE(env->allocator, *node); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + om_text->mime_type = NULL; + om_text->optimize = AXIS2_FALSE; + om_text->localname = "Include"; + om_text->is_binary = AXIS2_FALSE; + om_text->is_swa = AXIS2_FALSE; + om_text->content_id = NULL; + om_text->om_attribute = NULL; + om_text->value = NULL; + om_text->ns = NULL; + om_text->data_handler = NULL; + om_text->mime_type = NULL; + + if(value) + { + om_text->value = axutil_string_create(env, value); + } + + axiom_node_set_data_element((*node), env, om_text); + axiom_node_set_node_type((*node), env, AXIOM_TEXT); + axiom_node_set_complete((*node), env, AXIS2_FALSE); + + if(parent && axiom_node_get_node_type(parent, env) == AXIOM_ELEMENT) + { + axiom_node_add_child(parent, env, (*node)); + } + + return om_text; +} + +AXIS2_EXTERN axiom_text_t *AXIS2_CALL +axiom_text_create_with_data_handler( + const axutil_env_t * env, + axiom_node_t * parent, + axiom_data_handler_t * data_handler, + axiom_node_t ** node) +{ + + axiom_text_t *om_text = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, data_handler, NULL); + + om_text = (axiom_text_t *)axiom_text_create(env, parent, NULL, node); + if(!om_text) + { + return NULL; + } + om_text->optimize = AXIS2_TRUE; + om_text->is_binary = AXIS2_TRUE; + om_text->data_handler = data_handler; + om_text->mime_type = axiom_data_handler_get_content_type(data_handler, env); + return om_text; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_text_free( + axiom_text_t * om_text, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(om_text->value) + { + axutil_string_free(om_text->value, env); + } + + if(om_text->ns) + { + axiom_namespace_free(om_text->ns, env); + } + + if(om_text->content_id) + { + AXIS2_FREE(env->allocator, om_text->content_id); + } + + if(om_text->om_attribute) + { + axiom_attribute_free(om_text->om_attribute, env); + } + + if(om_text->data_handler) + { + axiom_data_handler_free(om_text->data_handler, env); + } + + AXIS2_FREE(env->allocator, om_text); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_text_serialize( + axiom_text_t * om_text, + const axutil_env_t * env, + axiom_output_t * om_output) +{ + int status = AXIS2_SUCCESS; + axis2_char_t *attribute_value = NULL; + const axis2_char_t *text = NULL; + axiom_xml_writer_t *om_output_xml_writer = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_output, AXIS2_FAILURE); + + if(!axiom_text_get_is_binary(om_text, env)) + { + if(om_text->value) + { + status = axiom_output_write(om_output, env, AXIOM_TEXT, 1, axutil_string_get_buffer( + om_text->value, env)); + } + } + else + { + om_output_xml_writer = axiom_output_get_xml_writer(om_output, env); + if(axiom_output_is_optimized(om_output, env) && om_text->optimize) + { + if(!(axiom_text_get_content_id(om_text, env))) + { + axis2_char_t *content_id = axiom_output_get_next_content_id(om_output, env); + if(content_id) + { + om_text->content_id = axutil_strdup(env, content_id); + } + } + + attribute_value = axutil_stracat(env, "cid:", om_text->content_id); + + /*send binary as MTOM optimised */ + if(om_text->om_attribute) + { + axiom_attribute_free(om_text->om_attribute, env); + om_text->om_attribute = NULL; + } + + om_text->om_attribute = axiom_attribute_create(env, "href", attribute_value, NULL); + + AXIS2_FREE(env->allocator, attribute_value); + attribute_value = NULL; + + if(!om_text->is_swa) /* This is a hack to get SwA working */ + { + axiom_text_serialize_start_part(om_text, env, om_output); + } + else + { + status = axiom_output_write(om_output, env, AXIOM_TEXT, 1, om_text->content_id); + } + + axiom_output_write_optimized(om_output, env, om_text); + + axiom_output_write(om_output, env, AXIOM_ELEMENT, 0); + } + else + { + text = axiom_text_get_text(om_text, env); + axiom_xml_writer_write_characters(om_output_xml_writer, env, (axis2_char_t *)text); + } + } + return status; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axiom_text_get_value( + axiom_text_t * om_text, + const axutil_env_t * env) +{ + if(om_text->value) + { + return axutil_string_get_buffer(om_text->value, env); + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_text_set_value( + axiom_text_t * om_text, + const axutil_env_t * env, + const axis2_char_t * value) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_text, AXIS2_FAILURE); + + if(om_text->value) + { + axutil_string_free(om_text->value, env); + om_text->value = NULL; + } + + om_text->value = axutil_string_create(env, value); + if(!om_text->value) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +/*Following has been implemented for the MTOM support*/ + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_text_get_mime_type( + axiom_text_t * om_text, + const axutil_env_t * env) +{ + return om_text->mime_type; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_text_set_mime_type( + axiom_text_t * om_text, + const axutil_env_t * env, + const axis2_char_t * mime_type) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_text, AXIS2_FAILURE); + if(om_text->mime_type) + { + AXIS2_FREE(env->allocator, om_text->mime_type); + } + om_text->mime_type = (axis2_char_t *)axutil_strdup(env, mime_type); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_text_get_optimize( + axiom_text_t * om_text, + const axutil_env_t * env) +{ + return om_text->optimize; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_text_set_optimize( + axiom_text_t * om_text, + const axutil_env_t * env, + axis2_bool_t optimize) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_text, AXIS2_FAILURE); + om_text->optimize = optimize; + return AXIS2_SUCCESS; +} + +static axis2_bool_t AXIS2_CALL +axiom_text_get_is_binary( + axiom_text_t * om_text, + const axutil_env_t * env) +{ + return om_text->is_binary; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_text_set_is_binary( + axiom_text_t * om_text, + const axutil_env_t * env, + const axis2_bool_t is_binary) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_text, AXIS2_FAILURE); + om_text->is_binary = is_binary; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axiom_text_get_localname( + axiom_text_t * om_text, + const axutil_env_t * env) +{ + return om_text->localname; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_text_get_content_id( + axiom_text_t * om_text, + const axutil_env_t * env) +{ + return om_text->content_id; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_text_set_content_id( + axiom_text_t * om_text, + const axutil_env_t * env, + const axis2_char_t * content_id) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_text, AXIS2_FAILURE); + if(om_text->content_id) + { + AXIS2_FREE(env->allocator, om_text->content_id); + } + om_text->content_id = (axis2_char_t *)axutil_strdup(env, content_id); + return AXIS2_SUCCESS; +} + +static axis2_status_t AXIS2_CALL +axiom_text_serialize_start_part( + axiom_text_t * om_text, + const axutil_env_t * env, + axiom_output_t * om_output) +{ + axis2_char_t *namespace_uri = NULL; + axis2_char_t *prefix = NULL; + const axis2_char_t *local_name = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + local_name = axiom_text_get_localname(om_text, env); + + om_text->ns = axiom_namespace_create(env, "http://www.w3.org/2004/08/xop/include", "xop"); + + if(om_text->ns) + { + namespace_uri = axiom_namespace_get_uri(om_text->ns, env); + if(namespace_uri) + { + prefix = axiom_namespace_get_prefix(om_text->ns, env); + + if(prefix) + { + axiom_output_write(om_output, env, AXIOM_ELEMENT, 3, local_name, namespace_uri, + prefix); + } + else + { + axiom_output_write(om_output, env, AXIOM_ELEMENT, 2, local_name, namespace_uri); + } + } + else + { + axiom_output_write(om_output, env, AXIOM_ELEMENT, 1, local_name); + } + } + else + { + axiom_output_write(om_output, env, AXIOM_TEXT, 1, local_name); + } + if(om_text->om_attribute) + { + axiom_attribute_serialize(om_text->om_attribute, env, om_output); + } + if(om_text->ns) + { + axiom_namespace_serialize(om_text->ns, env, om_output); + axiom_namespace_free(om_text->ns, env); + om_text->ns = NULL; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_text_serialize_attribute( + axiom_text_t * om_text, + const axutil_env_t * env, + axiom_output_t * om_output, + axiom_attribute_t * om_attribute) +{ + axiom_xml_writer_t *xml_writer = NULL; + axiom_namespace_t *om_namespace = NULL; + + axis2_char_t *namespace_uri = NULL; + axis2_char_t *prefix = NULL; + axis2_char_t *attribute_local_name = NULL; + axis2_char_t *attribute_value = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_namespace = axiom_namespace_create(env, "", ""); + + namespace_uri = axiom_namespace_get_uri(om_text->ns, env); + attribute_local_name = axiom_attribute_get_localname(om_attribute, env); + + if(om_namespace) + { + prefix = axiom_namespace_get_prefix(om_text->ns, env); + attribute_value = axiom_attribute_get_value(om_attribute, env); + if(prefix) + { + axiom_xml_writer_write_attribute(xml_writer, env, attribute_local_name, attribute_value); + } + else + { + axiom_xml_writer_write_attribute_with_namespace(xml_writer, env, attribute_local_name, + attribute_value, namespace_uri); + } + } + else + { + axiom_xml_writer_write_attribute(xml_writer, env, attribute_local_name, attribute_value); + } + axiom_namespace_free(om_namespace, env); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_text_serialize_namespace( + axiom_text_t * om_text, + const axutil_env_t * env, + const axiom_namespace_t * om_namespace, + axiom_output_t * om_output) +{ + axiom_xml_writer_t *xml_writer = NULL; + axis2_char_t *namespace_uri = NULL; + axis2_char_t *namespace_prefix = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_namespace = axiom_namespace_create(env, "", ""); + + if(om_namespace) + { + namespace_uri = axiom_namespace_get_uri(om_text->ns, env); + namespace_prefix = axiom_namespace_get_prefix(om_text->ns, env); + axiom_xml_writer_write_namespace(xml_writer, env, namespace_prefix, namespace_uri); + axiom_xml_writer_set_prefix(xml_writer, env, namespace_prefix, namespace_uri); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axiom_text_get_text( + axiom_text_t * om_text, + const axutil_env_t * env) +{ + if(om_text->value) + { + return axutil_string_get_buffer(om_text->value, env); + } + else + { + axis2_char_t *data_handler_stream = NULL; + size_t data_handler_stream_size = 0; + if(om_text->data_handler) + { + int encoded_len = 0; + axis2_char_t *encoded_str = NULL; + axiom_data_handler_read_from(om_text->data_handler, env, &data_handler_stream, + &data_handler_stream_size); + if(data_handler_stream) + { + encoded_len = axutil_base64_encode_len((int)data_handler_stream_size); + encoded_str = AXIS2_MALLOC(env->allocator, encoded_len + 2); + if(encoded_str) + { + encoded_len = axutil_base64_encode(encoded_str, data_handler_stream, + (int)data_handler_stream_size); + encoded_str[encoded_len] = '\0'; + return encoded_str; + } + } + } + } + return NULL; +} + +AXIS2_EXTERN axiom_data_handler_t *AXIS2_CALL +axiom_text_get_data_handler( + axiom_text_t * om_text, + const axutil_env_t * env) +{ + return om_text->data_handler; +} + +AXIS2_EXTERN axiom_text_t *AXIS2_CALL +axiom_text_create_str( + const axutil_env_t * env, + axiom_node_t * parent, + axutil_string_t * value, + axiom_node_t ** node) +{ + axiom_text_t *om_text = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, node, NULL); + + *node = axiom_node_create(env); + + if(!(*node)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + om_text = (axiom_text_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_text_t)); + if(!om_text) + { + AXIS2_FREE(env->allocator, *node); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + om_text->mime_type = NULL; + om_text->optimize = AXIS2_FALSE; + om_text->localname = "Include"; + om_text->is_binary = AXIS2_FALSE; + om_text->content_id = NULL; + om_text->om_attribute = NULL; + om_text->value = NULL; + om_text->ns = NULL; + om_text->data_handler = NULL; + om_text->mime_type = NULL; + + if(value) + { + om_text->value = axutil_string_clone(value, env); + } + + axiom_node_set_data_element((*node), env, om_text); + axiom_node_set_node_type((*node), env, AXIOM_TEXT); + axiom_node_set_complete((*node), env, AXIS2_FALSE); + + if(parent && axiom_node_get_node_type(parent, env) == AXIOM_ELEMENT) + { + axiom_node_add_child(parent, env, (*node)); + } + + return om_text; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_text_set_value_str( + struct axiom_text * om_text, + const axutil_env_t * env, + axutil_string_t * value) +{ + if(om_text->value) + { + axutil_string_free(om_text->value, env); + om_text->value = NULL; + } + if(value) + { + om_text->value = axutil_string_clone(value, env); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_string_t *AXIS2_CALL +axiom_text_get_value_str( + struct axiom_text * om_text, + const axutil_env_t * env) +{ + return om_text->value; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_text_set_is_swa( + axiom_text_t * om_text, + const axutil_env_t * env, + const axis2_bool_t is_swa) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_text, AXIS2_FAILURE); + om_text->is_swa = is_swa; + return AXIS2_SUCCESS; +} diff --git a/axiom/src/parser/Makefile.am b/axiom/src/parser/Makefile.am new file mode 100644 index 0000000..6c1d2ba --- /dev/null +++ b/axiom/src/parser/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS = $(WRAPPER_DIR) + +DIST_SUBDIRS=guththila libxml2 diff --git a/axiom/src/parser/guththila/Makefile.am b/axiom/src/parser/guththila/Makefile.am new file mode 100644 index 0000000..0cc6be5 --- /dev/null +++ b/axiom/src/parser/guththila/Makefile.am @@ -0,0 +1,13 @@ +lib_LTLIBRARIES = libaxis2_parser.la + +libaxis2_parser_la_LIBADD = ../../../../guththila/src/libguththila.la \ + ../../../../util/src/libaxutil.la + +libaxis2_parser_la_SOURCES = ../xml_reader.c ../xml_writer.c guththila_xml_writer_wrapper.c \ + guththila_xml_reader_wrapper.c + +libaxis2_parser_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../../util/include \ + -I ../../../../guththila/include diff --git a/axiom/src/parser/guththila/guththila_xml_reader_wrapper.c b/axiom/src/parser/guththila/guththila_xml_reader_wrapper.c new file mode 100644 index 0000000..086ed12 --- /dev/null +++ b/axiom/src/parser/guththila/guththila_xml_reader_wrapper.c @@ -0,0 +1,613 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +/**************** function prototypes ******************************************/ + +int AXIS2_CALL guththila_xml_reader_wrapper_next( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +void AXIS2_CALL guththila_xml_reader_wrapper_free( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +int AXIS2_CALL guththila_xml_reader_wrapper_get_attribute_count( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_attribute_name_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_attribute_prefix_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_attribute_value_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_attribute_namespace_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + +axis2_char_t *AXIS2_CALL guththila_xml_reader_wrapper_get_value( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +int AXIS2_CALL guththila_xml_reader_wrapper_get_namespace_count( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_namespace_uri_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_namespace_prefix_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + +axis2_char_t *AXIS2_CALL guththila_xml_reader_wrapper_get_prefix( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL guththila_xml_reader_wrapper_get_name( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL guththila_xml_reader_wrapper_get_pi_target( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL guththila_xml_reader_wrapper_get_pi_data( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL guththila_xml_reader_wrapper_get_dtd( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +void AXIS2_CALL guththila_xml_reader_wrapper_xml_free( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + void *data); + +axis2_char_t *AXIS2_CALL guththila_xml_reader_wrapper_get_char_set_encoding( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL guththila_xml_reader_wrapper_get_namespace_uri( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_namespace_uri_by_prefix( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + axis2_char_t * prefix); + +void *AXIS2_CALL +guththila_xml_reader_wrapper_get_context( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_current_buffer( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +/*********** guththila_xml_reader_wrapper_impl_t wrapper struct *******************/ + +typedef struct guththila_xml_reader_wrapper_impl +{ + axiom_xml_reader_t parser; + guththila_t *guththila_parser; + guththila_reader_t *reader; + int event_map[10]; + void *context; + +} guththila_xml_reader_wrapper_impl_t; + +/********************************* Macro ***************************************/ + +#define AXIS2_INTF_TO_IMPL(p) ((guththila_xml_reader_wrapper_impl_t*)p) + +#define AXIS2_IMPL_TO_INTF(p) &(p->parser) + +/**********End macros -- event_map initializing function *********************/ + +static axis2_status_t +guththila_xml_reader_wrapper_init_map( + guththila_xml_reader_wrapper_impl_t * parser) +{ + if(parser) + { + parser->event_map[GUTHTHILA_START_DOCUMENT] = AXIOM_XML_READER_START_DOCUMENT; + parser->event_map[GUTHTHILA_START_ELEMENT] = AXIOM_XML_READER_START_ELEMENT; + parser->event_map[GUTHTHILA_END_ELEMENT] = AXIOM_XML_READER_END_ELEMENT; + parser->event_map[GUTHTHILA_SPACE] = AXIOM_XML_READER_SPACE; + parser->event_map[GUTHTHILA_EMPTY_ELEMENT] = AXIOM_XML_READER_EMPTY_ELEMENT; + parser->event_map[GUTHTHILA_CHARACTER] = AXIOM_XML_READER_CHARACTER; + parser->event_map[GUTHTHILA_ENTITY_REFERANCE] = AXIOM_XML_READER_ENTITY_REFERENCE; + parser->event_map[GUTHTHILA_COMMENT] = AXIOM_XML_READER_COMMENT; + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +static const axiom_xml_reader_ops_t axiom_xml_reader_ops_var = { guththila_xml_reader_wrapper_next, + guththila_xml_reader_wrapper_free, guththila_xml_reader_wrapper_get_attribute_count, + guththila_xml_reader_wrapper_get_attribute_name_by_number, + guththila_xml_reader_wrapper_get_attribute_prefix_by_number, + guththila_xml_reader_wrapper_get_attribute_value_by_number, + guththila_xml_reader_wrapper_get_attribute_namespace_by_number, + guththila_xml_reader_wrapper_get_value, guththila_xml_reader_wrapper_get_namespace_count, + guththila_xml_reader_wrapper_get_namespace_uri_by_number, + guththila_xml_reader_wrapper_get_namespace_prefix_by_number, + guththila_xml_reader_wrapper_get_prefix, guththila_xml_reader_wrapper_get_name, + guththila_xml_reader_wrapper_get_pi_target, guththila_xml_reader_wrapper_get_pi_data, + guththila_xml_reader_wrapper_get_dtd, guththila_xml_reader_wrapper_xml_free, + guththila_xml_reader_wrapper_get_char_set_encoding, + guththila_xml_reader_wrapper_get_namespace_uri, + guththila_xml_reader_wrapper_get_namespace_uri_by_prefix, + guththila_xml_reader_wrapper_get_context, + guththila_xml_reader_wrapper_get_current_buffer}; + +/********************************************************************************/ + +AXIS2_EXTERN axiom_xml_reader_t *AXIS2_CALL +axiom_xml_reader_create_for_file( + const axutil_env_t * env, + char *filename, + const axis2_char_t * encoding) +{ + guththila_xml_reader_wrapper_impl_t *guththila_impl = NULL; + guththila_t *guththila = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + guththila_impl = AXIS2_MALLOC(env->allocator, sizeof(guththila_xml_reader_wrapper_impl_t)); + + if(!guththila_impl) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + guththila_impl->reader = guththila_reader_create_for_file(filename, env); + + if(!(guththila_impl->reader)) + { + AXIS2_FREE(env->allocator, guththila_impl); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + guththila = (guththila_t *)AXIS2_MALLOC(env->allocator, sizeof(guththila_t)); + guththila_init(guththila, guththila_impl->reader, env); + if(!guththila) + { + AXIS2_FREE(env->allocator, guththila_impl); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + guththila_impl->guththila_parser = guththila; + guththila_impl->context = NULL; + guththila_impl->parser.ops = NULL; + /* guththila_impl->parser.ops = + (axiom_xml_reader_ops_t *) AXIS2_MALLOC(env->allocator, + sizeof(axiom_xml_reader_ops_t)); + if (!(guththila_impl->parser.ops)) + { + guththila_free(guththila, env); + AXIS2_FREE(env->allocator, guththila_impl); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + */ + guththila_xml_reader_wrapper_init_map(guththila_impl); + + /************** ops *****/ + guththila_impl->parser.ops = &axiom_xml_reader_ops_var; + return &(guththila_impl->parser); +} + +/****** pull parser for io create function ***************************/ + +axiom_xml_reader_t *AXIS2_CALL +axiom_xml_reader_create_for_io( + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK read_input_callback, + AXIS2_CLOSE_INPUT_CALLBACK close_input_callback, + void *ctx, + const char *encoding) +{ + guththila_xml_reader_wrapper_impl_t *guththila_impl = NULL; + /*axutil_allocator_t *allocator = NULL; */ + guththila_t *guththila = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + guththila_impl = AXIS2_MALLOC(env->allocator, sizeof(guththila_xml_reader_wrapper_impl_t)); + + if(!guththila_impl) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + /*allocator = axutil_allocator_init(NULL); */ + + /*-------difference of two create function is here--------*/ + guththila_impl->reader = guththila_reader_create_for_io(read_input_callback, ctx, env); + + if(!(guththila_impl->reader)) + { + AXIS2_FREE(env->allocator, guththila_impl); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + guththila = (guththila_t *)AXIS2_MALLOC(env->allocator, sizeof(guththila_t)); + guththila_init(guththila, guththila_impl->reader, env); + if(!guththila) + { + AXIS2_FREE(env->allocator, guththila_impl); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + guththila_impl->guththila_parser = guththila; + guththila_impl->context = ctx; + guththila_impl->parser.ops = NULL; + /* guththila_impl->parser.ops = (axiom_xml_reader_ops_t *) + AXIS2_MALLOC(env->allocator, sizeof(axiom_xml_reader_ops_t)); + if (!(guththila_impl->parser.ops)) + { + guththila_free(guththila, env); + AXIS2_FREE(env->allocator, guththila_impl); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + }*/ + + guththila_xml_reader_wrapper_init_map(guththila_impl); + + /************** ops *****/ + guththila_impl->parser.ops = &axiom_xml_reader_ops_var; + return &(guththila_impl->parser); +} + +/* ####################################################################### */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_reader_init() +{ + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_reader_cleanup() +{ + return AXIS2_SUCCESS; +} + +/* ######################################################################## */ + +AXIS2_EXTERN axiom_xml_reader_t *AXIS2_CALL +axiom_xml_reader_create_for_memory( + const axutil_env_t * env, + void *buffer, + int size, + const char *encoding, + int type) +{ + guththila_xml_reader_wrapper_impl_t *guththila_impl = NULL; + /*axutil_allocator_t *allocator = NULL; */ + guththila_t *guththila = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + guththila_impl = AXIS2_MALLOC(env->allocator, sizeof(guththila_xml_reader_wrapper_impl_t)); + + if(!guththila_impl) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + /*allocator = axutil_allocator_init(NULL); */ + + /*-------difference of two create function is here--------*/ + guththila_impl->reader = guththila_reader_create_for_memory(buffer, size, env); + + if(!(guththila_impl->reader)) + { + AXIS2_FREE(env->allocator, guththila_impl); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + guththila = (guththila_t *)AXIS2_MALLOC(env->allocator, sizeof(guththila_t)); + guththila_init(guththila, guththila_impl->reader, env); + if(!guththila) + { + AXIS2_FREE(env->allocator, guththila_impl); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + guththila_impl->guththila_parser = guththila; + guththila_impl->context = NULL; + guththila_impl->parser.ops = NULL; + /* guththila_impl->parser.ops = (axiom_xml_reader_ops_t *) + AXIS2_MALLOC(env->allocator, sizeof(axiom_xml_reader_ops_t)); + if (!(guththila_impl->parser.ops)) + { + guththila_free(guththila, env); + AXIS2_FREE(env->allocator, guththila_impl); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + */ + guththila_xml_reader_wrapper_init_map(guththila_impl); + + /************** ops *****/ + guththila_impl->parser.ops = &axiom_xml_reader_ops_var; + return &(guththila_impl->parser); +} + +int AXIS2_CALL +guththila_xml_reader_wrapper_next( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + int i = -1; + AXIS2_ENV_CHECK(env, -1); + i = guththila_next(AXIS2_INTF_TO_IMPL(parser)->guththila_parser, env); + return i == -1 ? -1 : AXIS2_INTF_TO_IMPL(parser)->event_map[i]; +} + +void AXIS2_CALL +guththila_xml_reader_wrapper_free( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + guththila_xml_reader_wrapper_impl_t *parser_impl = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + parser_impl = AXIS2_INTF_TO_IMPL(parser); + if(parser_impl->reader) + { + guththila_reader_free(parser_impl->reader, env); + } + + if(parser_impl->guththila_parser) + { + guththila_un_init(parser_impl->guththila_parser, env); + } + + AXIS2_FREE(env->allocator, parser_impl); +} + +int AXIS2_CALL +guththila_xml_reader_wrapper_get_attribute_count( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + return guththila_get_attribute_count(AXIS2_INTF_TO_IMPL(parser)-> guththila_parser, env); +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_attribute_name_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + AXIS2_ENV_CHECK(env, NULL); + return guththila_get_attribute_name_by_number(AXIS2_INTF_TO_IMPL(parser)-> guththila_parser, i, + env); +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_attribute_prefix_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + AXIS2_ENV_CHECK(env, NULL); + return guththila_get_attribute_prefix_by_number(AXIS2_INTF_TO_IMPL(parser)-> guththila_parser, + i, env); +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_attribute_value_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + AXIS2_ENV_CHECK(env, NULL); + return guththila_get_attribute_value_by_number(AXIS2_INTF_TO_IMPL(parser)-> guththila_parser, + i, env); +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_attribute_namespace_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + AXIS2_ENV_CHECK(env, NULL); + return guththila_get_attribute_namespace_by_number( + AXIS2_INTF_TO_IMPL(parser)-> guththila_parser, i, env); +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_value( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + return guththila_get_value(AXIS2_INTF_TO_IMPL(parser)->guththila_parser, env); +} + +int AXIS2_CALL +guththila_xml_reader_wrapper_get_namespace_count( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + return guththila_get_namespace_count(AXIS2_INTF_TO_IMPL(parser)-> guththila_parser, env); +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_namespace_uri_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + AXIS2_ENV_CHECK(env, NULL); + return guththila_get_namespace_uri_by_number(AXIS2_INTF_TO_IMPL(parser)-> guththila_parser, i, + env); +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_namespace_prefix_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + AXIS2_ENV_CHECK(env, NULL); + return guththila_get_namespace_prefix_by_number(AXIS2_INTF_TO_IMPL(parser)-> guththila_parser, + i, env); +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_prefix( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + return guththila_get_prefix(AXIS2_INTF_TO_IMPL(parser)->guththila_parser, env); +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_name( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + return guththila_get_name(AXIS2_INTF_TO_IMPL(parser)->guththila_parser, env); +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_pi_target( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + /* guththila_does not support pi's yet */ + return NULL; +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_pi_data( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + /* guththila_dose not support yet */ + return NULL; +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_dtd( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + printf("not implemented in guththila"); + return NULL; +} + +void AXIS2_CALL +guththila_xml_reader_wrapper_xml_free( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + void *data) +{ + if(data) + AXIS2_FREE(env->allocator, data); +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_char_set_encoding( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return guththila_get_encoding(AXIS2_INTF_TO_IMPL(parser)->guththila_parser, env); +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_namespace_uri( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + + return (axis2_char_t *)NULL; +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_namespace_uri_by_prefix( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + axis2_char_t * prefix) +{ + return (axis2_char_t *)NULL; +} + +void *AXIS2_CALL +guththila_xml_reader_wrapper_get_context( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + guththila_xml_reader_wrapper_impl_t* parser_impl = NULL; + parser_impl = AXIS2_INTF_TO_IMPL(parser); + return parser_impl->context; +} + +axis2_char_t *AXIS2_CALL +guththila_xml_reader_wrapper_get_current_buffer( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return guththila_get_current_buffer(AXIS2_INTF_TO_IMPL(parser)->guththila_parser, env); +} + diff --git a/axiom/src/parser/guththila/guththila_xml_writer_wrapper.c b/axiom/src/parser/guththila/guththila_xml_writer_wrapper.c new file mode 100644 index 0000000..31b4040 --- /dev/null +++ b/axiom/src/parser/guththila/guththila_xml_writer_wrapper.c @@ -0,0 +1,787 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +/************************ function prototypes ************************************/ +void AXIS2_CALL guththila_xml_writer_wrapper_free( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_start_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_end_start_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_start_element_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_start_element_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri, + axis2_char_t * prefix); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_empty_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_empty_element_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_empty_element_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri, + axis2_char_t * prefix); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_end_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_end_document( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_attribute( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_attribute_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value, + axis2_char_t * namespace_uri); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_attribute_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value, + axis2_char_t * namespace_uri, + axis2_char_t * prefix); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * prefix, + axis2_char_t * namespace_uri); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_default_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * namespace_uri); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_comment( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * value); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_processing_instruction( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * target); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_processing_instruction_data( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * target, + axis2_char_t * data); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_cdata( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * data); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_dtd( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * dtd); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_entity_ref( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * name); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_start_document( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_start_document_with_version( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * version); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_start_document_with_version_encoding( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * encoding, + axis2_char_t * version); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_characters( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * text); + +axis2_char_t *AXIS2_CALL guththila_xml_writer_wrapper_get_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_set_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * prefix, + axis2_char_t * uri); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_set_default_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_encoded( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * text, + int in_attr); + +void *AXIS2_CALL guththila_xml_writer_wrapper_get_xml( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +unsigned int AXIS2_CALL guththila_xml_writer_wrapper_get_xml_size( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +int AXIS2_CALL guththila_xml_writer_wrapper_get_type( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_raw( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * content); + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_flush( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +/***************************** end function pointers *****************************/ + +typedef struct guththila_xml_writer_wrapper_impl +{ + axiom_xml_writer_t writer; + guththila_xml_writer_t *wr; +} guththila_xml_writer_wrapper_impl_t; + +static const axiom_xml_writer_ops_t axiom_xml_writer_ops_var = { guththila_xml_writer_wrapper_free, + guththila_xml_writer_wrapper_write_start_element, + guththila_xml_writer_wrapper_end_start_element, + guththila_xml_writer_wrapper_write_start_element_with_namespace, + guththila_xml_writer_wrapper_write_start_element_with_namespace_prefix, + guththila_xml_writer_wrapper_write_empty_element, + guththila_xml_writer_wrapper_write_empty_element_with_namespace, + guththila_xml_writer_wrapper_write_empty_element_with_namespace_prefix, + guththila_xml_writer_wrapper_write_end_element, + guththila_xml_writer_wrapper_write_end_document, guththila_xml_writer_wrapper_write_attribute, + guththila_xml_writer_wrapper_write_attribute_with_namespace, + guththila_xml_writer_wrapper_write_attribute_with_namespace_prefix, + guththila_xml_writer_wrapper_write_namespace, + guththila_xml_writer_wrapper_write_default_namespace, + guththila_xml_writer_wrapper_write_comment, + guththila_xml_writer_wrapper_write_processing_instruction, + guththila_xml_writer_wrapper_write_processing_instruction_data, + guththila_xml_writer_wrapper_write_cdata, guththila_xml_writer_wrapper_write_dtd, + guththila_xml_writer_wrapper_write_entity_ref, + guththila_xml_writer_wrapper_write_start_document, + guththila_xml_writer_wrapper_write_start_document_with_version, + guththila_xml_writer_wrapper_write_start_document_with_version_encoding, + guththila_xml_writer_wrapper_write_characters, guththila_xml_writer_wrapper_get_prefix, + guththila_xml_writer_wrapper_set_prefix, guththila_xml_writer_wrapper_set_default_prefix, + guththila_xml_writer_wrapper_write_encoded, guththila_xml_writer_wrapper_get_xml, + guththila_xml_writer_wrapper_get_xml_size, guththila_xml_writer_wrapper_get_type, + guththila_xml_writer_wrapper_write_raw, guththila_xml_writer_wrapper_flush }; + +/****************************** Macros *******************************************/ + +#define AXIS2_INTF_TO_IMPL(p) ((guththila_xml_writer_wrapper_impl_t*)p) + +/******************************* End macro ***************************************/ + +AXIS2_EXTERN axiom_xml_writer_t *AXIS2_CALL +axiom_xml_writer_create( + const axutil_env_t * env, + axis2_char_t * filename, + axis2_char_t * encoding, + int is_prefix_default, + int compression) +{ + guththila_xml_writer_wrapper_impl_t *writer_impl; + + AXIS2_ENV_CHECK(env, NULL); + + writer_impl = (guththila_xml_writer_wrapper_impl_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_xml_writer_wrapper_impl_t)); + return &(writer_impl->writer); +} + +AXIS2_EXTERN axiom_xml_writer_t *AXIS2_CALL +axiom_xml_writer_create_for_memory( + const axutil_env_t * env, + axis2_char_t * encoding, + int is_prefix_default, + int compression, + int type) +{ + guththila_xml_writer_wrapper_impl_t *writer_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + writer_impl = (guththila_xml_writer_wrapper_impl_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_xml_writer_wrapper_impl_t)); + + if(!writer_impl) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + /* creating guththila parser */ + /* guththila xml stream writer for memory */ + + writer_impl->wr = guththila_create_xml_stream_writer_for_memory(env); + + if(!(writer_impl->wr)) + { + AXIS2_FREE(env->allocator, writer_impl->wr); + AXIS2_FREE(env->allocator, writer_impl); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + writer_impl->writer.ops = NULL; + /* ops */ + writer_impl->writer.ops = &axiom_xml_writer_ops_var; + return &(writer_impl->writer); + +} + +void AXIS2_CALL +guththila_xml_writer_wrapper_free( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(AXIS2_INTF_TO_IMPL(writer)->wr) + { + guththila_xml_writer_free(AXIS2_INTF_TO_IMPL(writer)->wr, env); + } + + if(writer) + { + AXIS2_FREE(env->allocator, AXIS2_INTF_TO_IMPL(writer)); + } + +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_start_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname) +{ + int status = AXIS2_SUCCESS; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + guththila_write_start_element(AXIS2_INTF_TO_IMPL(writer)->wr, localname, env); + return status; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_start_element_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri) +{ + int status = AXIS2_SUCCESS; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + guththila_write_start_element_with_namespace(AXIS2_INTF_TO_IMPL(writer)->wr, namespace_uri, + localname, env); + return status; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_start_element_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri, + axis2_char_t * prefix) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, prefix, AXIS2_FAILURE); + guththila_write_start_element_with_prefix_and_namespace(AXIS2_INTF_TO_IMPL + (writer)->wr, prefix, namespace_uri, localname, env); + return AXIS2_SUCCESS; + +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_empty_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + guththila_write_empty_element(AXIS2_INTF_TO_IMPL(writer)->wr, localname, env); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_empty_element_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + guththila_write_empty_element_with_namespace(AXIS2_INTF_TO_IMPL(writer)->wr, namespace_uri, + localname, env); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_empty_element_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri, + axis2_char_t * prefix) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, prefix, AXIS2_FAILURE); + + guththila_write_empty_element_with_prefix_and_namespace(AXIS2_INTF_TO_IMPL + (writer)->wr, prefix, namespace_uri, localname, env); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_end_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + guththila_write_end_element(AXIS2_INTF_TO_IMPL(writer)->wr, env); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_end_document( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + guththila_write_end_document(AXIS2_INTF_TO_IMPL(writer)->wr, env); + return AXIS2_SUCCESS; + +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_attribute( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value) +{ + if(!value) + value = ""; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + guththila_write_attribute(AXIS2_INTF_TO_IMPL(writer)->wr, localname, value, env); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_attribute_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value, + axis2_char_t * namespace_uri) +{ + if(!value) + value = ""; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + + guththila_write_attribute_with_namespace(AXIS2_INTF_TO_IMPL(writer)->wr, namespace_uri, + localname, value, env); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_attribute_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value, + axis2_char_t * namespace_uri, + axis2_char_t * prefix) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, prefix, AXIS2_FAILURE); + guththila_write_attribute_with_prefix_and_namespace(AXIS2_INTF_TO_IMPL + (writer)->wr, prefix, namespace_uri, localname, value, env); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * prefix, + axis2_char_t * namespace_uri) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + /* when default namespace comes is passed, prefix is null */ + if(prefix) + guththila_write_namespace(AXIS2_INTF_TO_IMPL(writer)->wr, prefix, namespace_uri, env); + else + guththila_write_default_namespace(AXIS2_INTF_TO_IMPL(writer)->wr, namespace_uri, env); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_default_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * namespace_uri) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + guththila_write_default_namespace(AXIS2_INTF_TO_IMPL(writer)->wr, namespace_uri, env); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_comment( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * value) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + guththila_write_comment(AXIS2_INTF_TO_IMPL(writer)->wr, value, env); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_processing_instruction( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * target) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, target, AXIS2_FAILURE); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_processing_instruction_data( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * target, + axis2_char_t * data) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, target, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, data, AXIS2_FAILURE); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_cdata( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * data) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, data, AXIS2_FAILURE); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_dtd( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * dtd) +{ + /* AXIS2_ENV_CHECK( env, AXIS2_FAILURE); */ + /* AXIS2_PARAM_CHECK(env->error, dtd, AXIS2_FAILURE); */ + /* return guththila_write_dtd( */ + /* (axutil_env_t *)env, */ + /* AXIS2_INTF_TO_IMPL(writer)->parser, */ + /* dtd); */ + return 0; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_entity_ref( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * name) +{ + /* AXIS2_ENV_CHECK( env, AXIS2_FAILURE); */ + /* AXIS2_PARAM_CHECK(env->error, name, AXIS2_FAILURE); */ + /* return guththila_write_entity_ref( */ + /* (axutil_env_t *)env, */ + /* AXIS2_INTF_TO_IMPL(writer)->parser, */ + /* name); */ + return 0; + +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_start_document( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + guththila_write_start_document(AXIS2_INTF_TO_IMPL(writer)->wr, env, NULL, NULL); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_start_document_with_version( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * version) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, version, AXIS2_FAILURE); + guththila_write_start_document(AXIS2_INTF_TO_IMPL(writer)->wr, env, NULL, version); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_start_document_with_version_encoding( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * encoding, + axis2_char_t * version) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, encoding, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, version, AXIS2_FAILURE); + guththila_write_start_document(AXIS2_INTF_TO_IMPL(writer)->wr, env, encoding, version); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_characters( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * text) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, text, AXIS2_FAILURE); + guththila_write_characters(AXIS2_INTF_TO_IMPL(writer)->wr, text, env); + return AXIS2_SUCCESS; +} + +axis2_char_t *AXIS2_CALL +guththila_xml_writer_wrapper_get_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri) +{ + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, uri, NULL); + return guththila_get_prefix_for_namespace(AXIS2_INTF_TO_IMPL(writer)->wr, uri, env); +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_set_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * prefix, + axis2_char_t * uri) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, prefix, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, uri, AXIS2_FAILURE); + guththila_write_namespace(AXIS2_INTF_TO_IMPL(writer)->wr, prefix, uri, env); + return AXIS2_SUCCESS; + +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_set_default_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, uri, AXIS2_FAILURE); + guththila_write_default_namespace(AXIS2_INTF_TO_IMPL(writer)->wr, uri, env); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_encoded( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * text, + int in_attr) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, text, AXIS2_FAILURE); + return AXIS2_SUCCESS; +} + +void *AXIS2_CALL +guththila_xml_writer_wrapper_get_xml( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + char *buffer = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + buffer = guththila_get_memory_buffer(AXIS2_INTF_TO_IMPL(writer)->wr, env); + return (void *)buffer; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_write_raw( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * content) +{ + if(!content) + { + return AXIS2_FAILURE; + } + else + { + guththila_write_to_buffer(AXIS2_INTF_TO_IMPL(writer)->wr, (char *)content, (int)strlen( + content), env); + return AXIS2_SUCCESS; + } +} + +unsigned int AXIS2_CALL +guththila_xml_writer_wrapper_get_xml_size( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + return guththila_get_memory_buffer_size(AXIS2_INTF_TO_IMPL(writer)->wr, env); +} + +int AXIS2_CALL +guththila_xml_writer_wrapper_get_type( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + return 0; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_flush( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +guththila_xml_writer_wrapper_end_start_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + /* nothing to do , + it is automatically taken care by the libxml2 writer */ + return AXIS2_SUCCESS; +} diff --git a/axiom/src/parser/libxml2/Makefile.am b/axiom/src/parser/libxml2/Makefile.am new file mode 100644 index 0000000..a5b4c75 --- /dev/null +++ b/axiom/src/parser/libxml2/Makefile.am @@ -0,0 +1,17 @@ +lib_LTLIBRARIES = libaxis2_parser.la + + +libaxis2_parser_la_SOURCES = ../xml_reader.c ../xml_writer.c \ + libxml2_reader_wrapper.c libxml2_writer_wrapper.c + +libaxis2_parser_la_LIBADD = @LIBXML2_LIBS@ \ + ../../../../util/src/libaxutil.la + +libaxis2_parser_la_LDFLAGS = -version-info $(VERSION_NO) +libaxis2_libxml2_la_LDFLAGS = -version-info $(VERSION_NO) + + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/parser \ + -I ../../../../util/include \ + @LIBXML2_CFLAGS@ diff --git a/axiom/src/parser/libxml2/libxml2_reader_wrapper.c b/axiom/src/parser/libxml2/libxml2_reader_wrapper.c new file mode 100644 index 0000000..2510d49 --- /dev/null +++ b/axiom/src/parser/libxml2/libxml2_reader_wrapper.c @@ -0,0 +1,949 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + + +int AXIS2_CALL axis2_libxml2_reader_wrapper_next( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +void AXIS2_CALL axis2_libxml2_reader_wrapper_free( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +int AXIS2_CALL axis2_libxml2_reader_wrapper_get_attribute_count( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_attribute_name_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_attribute_prefix_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_attribute_value_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_attribute_namespace_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + +axis2_char_t *AXIS2_CALL axis2_libxml2_reader_wrapper_get_value( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +int AXIS2_CALL axis2_libxml2_reader_wrapper_get_namespace_count( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_namespace_uri_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_namespace_prefix_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i); + +axis2_char_t *AXIS2_CALL axis2_libxml2_reader_wrapper_get_prefix( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL axis2_libxml2_reader_wrapper_get_name( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL axis2_libxml2_reader_wrapper_get_pi_target( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL axis2_libxml2_reader_wrapper_get_pi_data( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL axis2_libxml2_reader_wrapper_get_dtd( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +void AXIS2_CALL axis2_libxml2_reader_wrapper_xml_free( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + void *data); + +axis2_char_t *AXIS2_CALL axis2_libxml2_reader_wrapper_get_char_set_encoding( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL axis2_libxml2_reader_wrapper_get_namespace_uri( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_namespace_uri_by_prefix( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + axis2_char_t * prefix); + +axis2_status_t +axis2_libxml2_reader_wrapper_fill_maps( + axiom_xml_reader_t * parser, + const axutil_env_t * env); + +void +axis2_libxml2_reader_wrapper_error_handler( + void *arg, + const char *msg, + int severities, + void *locator_ptr); + +static int +axis2_libxml2_reader_wrapper_read_input_callback( + void *ctx, + char *buffer, + int size); + +static int +axis2_libxml2_reader_wrapper_close_input_callback( + void *ctx); + +typedef struct axis2_libxml2_reader_wrapper_impl_t +{ + axiom_xml_reader_t parser; + + xmlTextReaderPtr reader; + + int current_event; + int current_attribute_count; + int current_namespace_count; + int event_map[18]; + + void *ctx; + /* assuming that max ns and attribute will be 20 */ + + int *namespace_map; + int *attribute_map; + + AXIS2_READ_INPUT_CALLBACK read_input_callback; + + AXIS2_CLOSE_INPUT_CALLBACK close_input_callback; + +} axis2_libxml2_reader_wrapper_impl_t; + +#define AXIS2_INTF_TO_IMPL(p) ((axis2_libxml2_reader_wrapper_impl_t*)p) +#define AXIS2_IMPL_TO_INTF(p) &(p->parser) + +static const axiom_xml_reader_ops_t axiom_xml_reader_ops_var = { axis2_libxml2_reader_wrapper_next, + axis2_libxml2_reader_wrapper_free, axis2_libxml2_reader_wrapper_get_attribute_count, + axis2_libxml2_reader_wrapper_get_attribute_name_by_number, + axis2_libxml2_reader_wrapper_get_attribute_prefix_by_number, + axis2_libxml2_reader_wrapper_get_attribute_value_by_number, + axis2_libxml2_reader_wrapper_get_attribute_namespace_by_number, + axis2_libxml2_reader_wrapper_get_value, axis2_libxml2_reader_wrapper_get_namespace_count, + axis2_libxml2_reader_wrapper_get_namespace_uri_by_number, + axis2_libxml2_reader_wrapper_get_namespace_prefix_by_number, + axis2_libxml2_reader_wrapper_get_prefix, axis2_libxml2_reader_wrapper_get_name, + axis2_libxml2_reader_wrapper_get_pi_target, axis2_libxml2_reader_wrapper_get_pi_data, + axis2_libxml2_reader_wrapper_get_dtd, axis2_libxml2_reader_wrapper_xml_free, + axis2_libxml2_reader_wrapper_get_char_set_encoding, + axis2_libxml2_reader_wrapper_get_namespace_uri, + axis2_libxml2_reader_wrapper_get_namespace_uri_by_prefix }; + +static axis2_status_t +axis2_libxml2_reader_wrapper_init_map( + axis2_libxml2_reader_wrapper_impl_t * parser) +{ + int i = 0; + if(parser) + { + for(i = 0; i < 18; i++) + { + parser->event_map[i] = -1; + } + + parser->event_map[XML_READER_TYPE_ELEMENT] = AXIOM_XML_READER_START_ELEMENT; + parser->event_map[XML_READER_TYPE_DOCUMENT] = AXIOM_XML_READER_START_DOCUMENT; + parser->event_map[XML_READER_TYPE_TEXT] = AXIOM_XML_READER_CHARACTER; + parser->event_map[XML_READER_TYPE_CDATA] = AXIOM_XML_READER_CHARACTER; + parser->event_map[XML_READER_TYPE_SIGNIFICANT_WHITESPACE] = AXIOM_XML_READER_SPACE; + parser->event_map[XML_READER_TYPE_WHITESPACE] = AXIOM_XML_READER_SPACE; + parser->event_map[XML_READER_TYPE_END_ELEMENT] = AXIOM_XML_READER_END_ELEMENT; + parser->event_map[XML_READER_TYPE_ENTITY_REFERENCE] = AXIOM_XML_READER_ENTITY_REFERENCE; + parser->event_map[XML_READER_TYPE_END_ENTITY] = AXIOM_XML_READER_SPACE; + parser->event_map[XML_READER_TYPE_ENTITY] = AXIOM_XML_READER_SPACE; + parser->event_map[XML_READER_TYPE_PROCESSING_INSTRUCTION] + = AXIOM_XML_READER_PROCESSING_INSTRUCTION; + parser->event_map[XML_READER_TYPE_COMMENT] = AXIOM_XML_READER_COMMENT; + parser->event_map[XML_READER_TYPE_DOCUMENT_TYPE] = AXIOM_XML_READER_DOCUMENT_TYPE; + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_reader_init() +{ + xmlInitParser(); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_reader_cleanup() +{ + xmlCleanupParser(); + return AXIS2_SUCCESS; +} + +static axis2_libxml2_reader_wrapper_impl_t* +libxml2_reader_wrapper_create( + const axutil_env_t *env) +{ + axis2_libxml2_reader_wrapper_impl_t *wrapper_impl = NULL; + wrapper_impl = (axis2_libxml2_reader_wrapper_impl_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_libxml2_reader_wrapper_impl_t)); + + if(!wrapper_impl) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create libxml2 reader wrapper"); + return NULL; + } + memset(wrapper_impl, 0, sizeof(axis2_libxml2_reader_wrapper_impl_t)); + wrapper_impl->attribute_map = NULL; + wrapper_impl->namespace_map = NULL; + wrapper_impl->close_input_callback = NULL; + wrapper_impl->read_input_callback = NULL; + wrapper_impl->ctx = NULL; + wrapper_impl->current_namespace_count = 0; + wrapper_impl->current_attribute_count = 0; + wrapper_impl->current_event = -1; + return wrapper_impl; +} + +AXIS2_EXTERN axiom_xml_reader_t *AXIS2_CALL +axiom_xml_reader_create_for_file( + const axutil_env_t * env, + char *filename, + const axis2_char_t * encoding) +{ + + axis2_libxml2_reader_wrapper_impl_t *wrapper_impl = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, filename, NULL); + + wrapper_impl = libxml2_reader_wrapper_create(env); + if(!wrapper_impl) + { + return NULL; + } + + wrapper_impl->reader = xmlReaderForFile(filename, encoding, XML_PARSE_RECOVER); + if(!(wrapper_impl->reader)) + { + AXIS2_FREE(env->allocator, wrapper_impl); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_CREATING_XML_STREAM_READER, AXIS2_FAILURE); + return NULL; + } + + xmlTextReaderSetErrorHandler(wrapper_impl->reader, + (xmlTextReaderErrorFunc)axis2_libxml2_reader_wrapper_error_handler, (void *)env); + wrapper_impl->current_event = -1; + wrapper_impl->ctx = NULL; + axis2_libxml2_reader_wrapper_init_map(wrapper_impl); + + wrapper_impl->parser.ops = &axiom_xml_reader_ops_var; + return &(wrapper_impl->parser); +} + +AXIS2_EXTERN axiom_xml_reader_t *AXIS2_CALL +axiom_xml_reader_create_for_io( + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK read_input_callback, + AXIS2_CLOSE_INPUT_CALLBACK close_input_callback, + void *ctx, + const axis2_char_t * encoding) +{ + axis2_libxml2_reader_wrapper_impl_t *wrapper_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + if(!read_input_callback) + { + return NULL; + } + + wrapper_impl = libxml2_reader_wrapper_create(env); + if(!wrapper_impl) + { + return NULL; + } + wrapper_impl->close_input_callback = NULL; + wrapper_impl->read_input_callback = NULL; + wrapper_impl->read_input_callback = read_input_callback; + wrapper_impl->close_input_callback = close_input_callback; + wrapper_impl->ctx = ctx; + if(wrapper_impl->close_input_callback) + { + wrapper_impl->reader = xmlReaderForIO(axis2_libxml2_reader_wrapper_read_input_callback, + axis2_libxml2_reader_wrapper_close_input_callback, wrapper_impl, NULL, encoding, + XML_PARSE_RECOVER); + } + else + { + wrapper_impl->reader = xmlReaderForIO(axis2_libxml2_reader_wrapper_read_input_callback, + NULL, wrapper_impl, NULL, encoding, XML_PARSE_RECOVER); + } + if(!(wrapper_impl->reader)) + { + AXIS2_FREE(env->allocator, wrapper_impl); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_CREATING_XML_STREAM_READER, AXIS2_FAILURE); + return NULL; + } + + xmlTextReaderSetErrorHandler(wrapper_impl->reader, + (xmlTextReaderErrorFunc)axis2_libxml2_reader_wrapper_error_handler, (void *)env); + + wrapper_impl->current_event = -1; + + axis2_libxml2_reader_wrapper_init_map(wrapper_impl); + + wrapper_impl->parser.ops = &axiom_xml_reader_ops_var; + return &(wrapper_impl->parser); +} + +AXIS2_EXTERN axiom_xml_reader_t *AXIS2_CALL +axiom_xml_reader_create_for_memory( + const axutil_env_t * env, + void *container, + int size, + const axis2_char_t * encoding, + int type) +{ + axis2_libxml2_reader_wrapper_impl_t *wrapper_impl = NULL; + + AXIS2_PARAM_CHECK(env->error, container, NULL); + + wrapper_impl = libxml2_reader_wrapper_create(env); + if(!wrapper_impl) + { + return NULL; + } + wrapper_impl->close_input_callback = NULL; + wrapper_impl->read_input_callback = NULL; + wrapper_impl->ctx = NULL; + + if(AXIS2_XML_PARSER_TYPE_BUFFER == type) + { + wrapper_impl->reader = xmlReaderForMemory((axis2_char_t *)container, size, NULL, encoding, + XML_PARSE_RECOVER); + } + else if(AXIS2_XML_PARSER_TYPE_DOC == type) + { + wrapper_impl->reader = xmlReaderWalker((xmlDocPtr)container); + } + else + { + AXIS2_FREE(env->allocator, wrapper_impl); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_XML_PARSER_INVALID_MEM_TYPE, AXIS2_FAILURE); + return NULL; + } + + if(!(wrapper_impl->reader)) + { + AXIS2_FREE(env->allocator, wrapper_impl); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_CREATING_XML_STREAM_READER, AXIS2_FAILURE); + return NULL; + } + + if(AXIS2_XML_PARSER_TYPE_BUFFER == type) + { + xmlTextReaderSetErrorHandler(wrapper_impl->reader, + (xmlTextReaderErrorFunc)axis2_libxml2_reader_wrapper_error_handler, (void *)env); + } + + wrapper_impl->current_event = -1; + + axis2_libxml2_reader_wrapper_init_map(wrapper_impl); + + wrapper_impl->parser.ops = &axiom_xml_reader_ops_var; + return &(wrapper_impl->parser); +} + +int AXIS2_CALL +axis2_libxml2_reader_wrapper_next( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + int ret_val = 0; + int node = 2; + int empty_check = 0; + axis2_libxml2_reader_wrapper_impl_t *parser_impl; + AXIS2_ENV_CHECK(env, -1); + parser_impl = AXIS2_INTF_TO_IMPL(parser); + ret_val = xmlTextReaderRead(parser_impl->reader); + if(ret_val == 0) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "xml stream is over "); + } + if(ret_val == -1) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, " error occurred in reading xml stream "); + return -1; + } + + if(ret_val == 1) + { + node = xmlTextReaderNodeType(parser_impl->reader); + parser_impl->current_event = parser_impl->event_map[node]; + parser_impl->current_attribute_count = 0; + parser_impl->current_namespace_count = 0; + + if(node == XML_READER_TYPE_ELEMENT) + { + empty_check = xmlTextReaderIsEmptyElement(parser_impl->reader); + axis2_libxml2_reader_wrapper_fill_maps(parser, env); + } + if(empty_check == 1) + { + parser_impl->current_event = AXIOM_XML_READER_EMPTY_ELEMENT; + return AXIOM_XML_READER_EMPTY_ELEMENT; + } + return parser_impl->event_map[node]; + } + else + { + return -1; + } +} + +/** + * If your application crashes here, it may be due to an earlier call to + * xmlCleanupParser() function. In client API, op_client create function has a call + * to axiom_xml_reader_init and op_client_free function has a call to axiom_xml_reader_cleanup + * function. You can avoid the call to axiom_xml_reader_cleanup using + * axis2_options_set_xml_parser_reset function in client API. + * refer to jira issue: https://issues.apache.org/jira/browse/AXIS2C-884 + */ +void AXIS2_CALL +axis2_libxml2_reader_wrapper_free( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + parser_impl = AXIS2_INTF_TO_IMPL(parser); + if(parser_impl->ctx) + { + AXIS2_FREE(env->allocator, parser_impl->ctx); + } + + if(parser_impl->reader) + { + xmlTextReaderClose(parser_impl->reader); + xmlFreeTextReader(parser_impl->reader); + } + if(parser_impl->namespace_map) + { + AXIS2_FREE(env->allocator, parser_impl->namespace_map); + parser_impl->namespace_map = NULL; + } + if(parser_impl->attribute_map) + { + AXIS2_FREE(env->allocator, parser_impl->attribute_map); + parser_impl->attribute_map = NULL; + } + AXIS2_FREE(env->allocator, AXIS2_INTF_TO_IMPL(parser)); + return; +} + +int AXIS2_CALL +axis2_libxml2_reader_wrapper_get_attribute_count( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + parser_impl = AXIS2_INTF_TO_IMPL(parser); + if(parser_impl->current_event == AXIOM_XML_READER_START_ELEMENT || parser_impl->current_event + == AXIOM_XML_READER_EMPTY_ELEMENT) + { + return parser_impl->current_attribute_count; + } + else + { + return 0; + } +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_attribute_name_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl; + AXIS2_ENV_CHECK(env, NULL); + parser_impl = AXIS2_INTF_TO_IMPL(parser); + + if(parser_impl->current_attribute_count > 0 && parser_impl->current_attribute_count >= i) + { + int ret = + xmlTextReaderMoveToAttributeNo(parser_impl->reader, parser_impl->attribute_map[i]); + if(ret == 1) + { + return (axis2_char_t *)xmlTextReaderLocalName(parser_impl->reader); + } + else + { + return NULL; + } + } + return NULL; +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_attribute_prefix_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + AXIS2_ENV_CHECK(env, NULL); + parser_impl = AXIS2_INTF_TO_IMPL(parser); + + if(parser_impl->current_attribute_count > 0 && parser_impl->current_attribute_count >= i) + { + int ret = + xmlTextReaderMoveToAttributeNo(parser_impl->reader, parser_impl->attribute_map[i]); + if(ret == 1) + { + return (axis2_char_t *)xmlTextReaderPrefix(parser_impl->reader); + } + else + { + return NULL; + } + } + return NULL; +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_attribute_value_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + + axis2_libxml2_reader_wrapper_impl_t *parser_impl; + AXIS2_ENV_CHECK(env, NULL); + parser_impl = AXIS2_INTF_TO_IMPL(parser); + + if(parser_impl->current_attribute_count > 0 && parser_impl->current_attribute_count >= i) + { + int ret = + xmlTextReaderMoveToAttributeNo(parser_impl->reader, parser_impl->attribute_map[i]); + if(ret == 1) + { + return (axis2_char_t *)xmlTextReaderValue(parser_impl->reader); + } + else + { + return NULL; + } + } + return NULL; +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_attribute_namespace_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl; + AXIS2_ENV_CHECK(env, NULL); + parser_impl = AXIS2_INTF_TO_IMPL(parser); + + if(parser_impl->current_attribute_count > 0 && parser_impl->current_attribute_count >= i) + { + int ret = + xmlTextReaderMoveToAttributeNo(parser_impl->reader, parser_impl->attribute_map[i]); + + if(ret == 1) + { + return (axis2_char_t *)xmlTextReaderNamespaceUri(parser_impl-> reader); + } + else + { + return NULL; + } + } + return NULL; +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_value( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + parser_impl = AXIS2_INTF_TO_IMPL(parser); + return (axis2_char_t *)xmlTextReaderValue(parser_impl->reader); + +} + +int AXIS2_CALL +axis2_libxml2_reader_wrapper_get_namespace_count( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + parser_impl = AXIS2_INTF_TO_IMPL(parser); + if(parser_impl->current_event == AXIOM_XML_READER_START_ELEMENT || parser_impl->current_event + == AXIOM_XML_READER_EMPTY_ELEMENT) + { + return parser_impl->current_namespace_count; + } + else + { + return 0; + } +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_namespace_uri_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + AXIS2_ENV_CHECK(env, NULL); + parser_impl = AXIS2_INTF_TO_IMPL(parser); + + if(parser_impl->current_namespace_count > 0 && parser_impl->current_namespace_count >= i) + { + + int ret = + xmlTextReaderMoveToAttributeNo(parser_impl->reader, parser_impl->namespace_map[i]); + if(ret == 1) + { + return (axis2_char_t *)xmlTextReaderValue(parser_impl->reader); + } + else + return NULL; + } + return NULL; +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_namespace_prefix_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + AXIS2_ENV_CHECK(env, NULL); + parser_impl = AXIS2_INTF_TO_IMPL(parser); + + if(parser_impl->current_namespace_count > 0 && parser_impl->current_namespace_count >= i) + { + int ret = + xmlTextReaderMoveToAttributeNo(parser_impl->reader, parser_impl->namespace_map[i]); + + if(ret == 1) + { + return (axis2_char_t *)xmlTextReaderLocalName(parser_impl->reader); + } + else + { + return NULL; + } + } + return NULL; +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_prefix( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + parser_impl = AXIS2_INTF_TO_IMPL(parser); + xmlTextReaderMoveToElement(parser_impl->reader); + return (axis2_char_t *)xmlTextReaderPrefix(parser_impl->reader); +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_name( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + parser_impl = AXIS2_INTF_TO_IMPL(parser); + xmlTextReaderMoveToElement(parser_impl->reader); + return (axis2_char_t *)xmlTextReaderLocalName(parser_impl->reader); +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_pi_target( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + parser_impl = AXIS2_INTF_TO_IMPL(parser); + if(parser_impl->current_event == AXIOM_XML_READER_PROCESSING_INSTRUCTION) + { + return (axis2_char_t *)xmlTextReaderLocalName(parser_impl->reader); + } + else + { + return NULL; + } +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_dtd( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + parser_impl = AXIS2_INTF_TO_IMPL(parser); + if(parser_impl->current_event == AXIOM_XML_READER_DOCUMENT_TYPE) + { + return (axis2_char_t *)xmlTextReaderLocalName(parser_impl->reader); + } + else + { + return NULL; + } +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_pi_data( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + parser_impl = AXIS2_INTF_TO_IMPL(parser); + if(parser_impl->current_event == AXIOM_XML_READER_PROCESSING_INSTRUCTION) + { + return (axis2_char_t *)xmlTextReaderValue(parser_impl->reader); + } + else + { + return NULL; + } +} + +void AXIS2_CALL +axis2_libxml2_reader_wrapper_xml_free( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + void *data) +{ + AXIS2_ENV_CHECK(env, void); + if(data) + xmlFree(data); + return; +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_char_set_encoding( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + axis2_libxml2_reader_wrapper_impl_t *reader_impl = NULL; + reader_impl = AXIS2_INTF_TO_IMPL(parser); + return (axis2_char_t *)xmlTextReaderConstEncoding(reader_impl->reader); +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_namespace_uri( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + parser_impl = AXIS2_INTF_TO_IMPL(parser); + return (axis2_char_t *)xmlTextReaderNamespaceUri(parser_impl->reader); +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_reader_wrapper_get_namespace_uri_by_prefix( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + axis2_char_t * prefix) +{ + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + parser_impl = AXIS2_INTF_TO_IMPL(parser); + if(!prefix || axutil_strcmp(prefix, "") == 0) + { + return NULL; + } + return (axis2_char_t *)xmlTextReaderLookupNamespace(parser_impl->reader, + (const xmlChar *)prefix); +} + +axis2_status_t +axis2_libxml2_reader_wrapper_fill_maps( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + int libxml2_attribute_count = 0; + int attr_count = 0; + int ns_count = 0; + int i = 0; + char *q_name = NULL; + axis2_libxml2_reader_wrapper_impl_t *parser_impl = NULL; + int map_size = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + parser_impl = AXIS2_INTF_TO_IMPL(parser); + + libxml2_attribute_count = xmlTextReaderAttributeCount(parser_impl->reader); + if(libxml2_attribute_count == 0) + { + parser_impl->current_attribute_count = 0; + parser_impl->current_namespace_count = 0; + return AXIS2_SUCCESS; + } + map_size = libxml2_attribute_count + 1; + if(parser_impl->namespace_map) + { + AXIS2_FREE(env->allocator, parser_impl->namespace_map); + parser_impl->namespace_map = NULL; + } + if(parser_impl->attribute_map) + { + AXIS2_FREE(env->allocator, parser_impl->attribute_map); + parser_impl->attribute_map = NULL; + } + parser_impl->attribute_map = AXIS2_MALLOC(env->allocator, sizeof(int) * map_size); + memset(parser_impl->attribute_map, 0, map_size * sizeof(int)); + + parser_impl->namespace_map = AXIS2_MALLOC(env->allocator, sizeof(int) * map_size); + memset(parser_impl->namespace_map, 0, map_size * sizeof(int)); + + for(i = 0; i < map_size; i++) + { + parser_impl->namespace_map[i] = -1; + parser_impl->attribute_map[i] = -1; + } + + for(i = 0; i < libxml2_attribute_count; i++) + { + xmlTextReaderMoveToAttributeNo(parser_impl->reader, i); + q_name = (char *)xmlTextReaderName(parser_impl->reader); + if(q_name) + { + if((strcmp(q_name, "xmlns") == 0) || (strncmp(q_name, "xmlns:", 6) == 0)) + { + /* found a namespace */ + ns_count++; + parser_impl->namespace_map[ns_count] = i; + } + else + { + /* found an attribute */ + attr_count++; + parser_impl->attribute_map[attr_count] = i; + } + + xmlFree(q_name); + q_name = NULL; + } + + parser_impl->current_attribute_count = attr_count; + parser_impl->current_namespace_count = ns_count; + } + return AXIS2_SUCCESS; +} + +static int +axis2_libxml2_reader_wrapper_read_input_callback( + void *ctx, + char *buffer, + int size) +{ + return ((axis2_libxml2_reader_wrapper_impl_t *)ctx)-> read_input_callback(buffer, size, + ((axis2_libxml2_reader_wrapper_impl_t *)ctx)->ctx); +} + +void +axis2_libxml2_reader_wrapper_error_handler( + void *arg, + const char *msg, + int severities, + void *locator_ptr) +{ + const axutil_env_t *env = NULL; + env = (const axutil_env_t *)arg; + + switch(severities) + { + case XML_PARSER_SEVERITY_VALIDITY_WARNING: + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "%s VALIDITY WARNTING", msg); + } + break; + case XML_PARSER_SEVERITY_VALIDITY_ERROR: + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "%s -- VALIDITY ERROR", msg); + } + break; + case XML_PARSER_SEVERITY_WARNING: + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "%s -- VALIDITY ERROR", msg); + } + break; + case XML_PARSER_SEVERITY_ERROR: + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "%s -- SEVERITY_ERROR", msg); + } + break; + default: + break; + } +} + +static int +axis2_libxml2_reader_wrapper_close_input_callback( + void *ctx) +{ + return ((axis2_libxml2_reader_wrapper_impl_t *)ctx)-> close_input_callback( + ((axis2_libxml2_reader_wrapper_impl_t *)ctx)-> ctx); +} diff --git a/axiom/src/parser/libxml2/libxml2_writer_wrapper.c b/axiom/src/parser/libxml2/libxml2_writer_wrapper.c new file mode 100644 index 0000000..4c889d4 --- /dev/null +++ b/axiom/src/parser/libxml2/libxml2_writer_wrapper.c @@ -0,0 +1,1571 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/*******************************************************************************/ + +#define ENCODING "ISO-8859-1" + +#define AXIS2_XMLNS_NAMESPACE_URI "http://www.w3.org/XML/1998/namespace" +#define AXIS2_XMLNS_PREFIX "xml" + +typedef struct uri_prefix_element +{ + axis2_char_t *prefix; + + axis2_char_t *uri; + + axis2_char_t *real_prefix; + + axis2_char_t *key; + +} uri_prefix_element_t; + +typedef struct axis2_libxml2_writer_wrapper_impl +{ + axiom_xml_writer_t writer; + + xmlTextWriterPtr xml_writer; + + xmlBufferPtr buffer; + + xmlDocPtr doc; + + int writer_type; + + axis2_char_t *encoding; + + int is_prefix_defaulting; + + int compression; + + axutil_stack_t *stack; + + axis2_bool_t in_empty_element; + + axis2_bool_t in_start_element; + + axutil_hash_t *uri_prefix_map; + + uri_prefix_element_t *default_lang_namespace; + +} axis2_libxml2_writer_wrapper_impl_t; + +#define AXIS2_INTF_TO_IMPL(p) ((axis2_libxml2_writer_wrapper_impl_t*)p) + +void AXIS2_CALL axis2_libxml2_writer_wrapper_free( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_start_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_end_start_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_start_element_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_start_element_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri, + axis2_char_t * prefix); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_empty_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_empty_element_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_empty_element_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri, + axis2_char_t * prefix); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_end_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_end_document( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_attribute( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_attribute_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value, + axis2_char_t * namespace_uri); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_attribute_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value, + axis2_char_t * namespace_uri, + axis2_char_t * prefix); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * prefix, + axis2_char_t * namespace_uri); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_default_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * namespace_uri); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_comment( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * value); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_processing_instruction( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * target); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_processing_instruction_data( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * target, + axis2_char_t * data); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_cdata( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * data); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_dtd( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * dtd); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_entity_ref( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * name); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_start_document( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_start_document_with_version( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * version); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_start_document_with_version_encoding( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * encoding, + axis2_char_t * version); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_characters( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * text); + +axis2_char_t *AXIS2_CALL axis2_libxml2_writer_wrapper_get_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_set_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * prefix, + axis2_char_t * uri); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_set_default_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_encoded( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * text, + int in_attr); + +void *AXIS2_CALL axis2_libxml2_writer_wrapper_get_xml( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +unsigned int AXIS2_CALL axis2_libxml2_writer_wrapper_get_xml_size( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_flush( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +int AXIS2_CALL axis2_libxml2_writer_wrapper_get_type( + axiom_xml_writer_t * writer, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_raw( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * content); + +static axis2_status_t +axis2_libxml2_writer_wrapper_push( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + const axis2_char_t * uri, + const axis2_char_t * prefix); + +static axis2_bool_t +axis2_libxml2_writer_wrapper_is_namespace_declared( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * key); + +static void +uri_prefix_element_free( + uri_prefix_element_t * up_element, + const axutil_env_t * env); + +static uri_prefix_element_t * +uri_prefix_element_create( + const axutil_env_t * env, + const axis2_char_t * uri, + const axis2_char_t * prefix, + const axis2_char_t * real_prefix, + const axis2_char_t * key); + +static void +create_key_from_uri_prefix( + const axutil_env_t * env, + const axis2_char_t * uri, + const axis2_char_t * prefix, + axis2_char_t * array); + +static axis2_char_t * +axis2_libxml2_writer_wrapper_find_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri); + +static uri_prefix_element_t * +axis2_libxml2_writer_wrapper_find_prefix_in_context( + axutil_array_list_t * context, + const axutil_env_t * env, + axis2_char_t * uri); + +static const axiom_xml_writer_ops_t axiom_xml_writer_ops_var = { axis2_libxml2_writer_wrapper_free, + axis2_libxml2_writer_wrapper_write_start_element, + axis2_libxml2_writer_wrapper_end_start_element, + axis2_libxml2_writer_wrapper_write_start_element_with_namespace, + axis2_libxml2_writer_wrapper_write_start_element_with_namespace_prefix, + axis2_libxml2_writer_wrapper_write_empty_element, + axis2_libxml2_writer_wrapper_write_empty_element_with_namespace, + axis2_libxml2_writer_wrapper_write_empty_element_with_namespace_prefix, + axis2_libxml2_writer_wrapper_write_end_element, + axis2_libxml2_writer_wrapper_write_end_document, axis2_libxml2_writer_wrapper_write_attribute, + axis2_libxml2_writer_wrapper_write_attribute_with_namespace, + axis2_libxml2_writer_wrapper_write_attribute_with_namespace_prefix, + axis2_libxml2_writer_wrapper_write_namespace, + axis2_libxml2_writer_wrapper_write_default_namespace, + axis2_libxml2_writer_wrapper_write_comment, + axis2_libxml2_writer_wrapper_write_processing_instruction, + axis2_libxml2_writer_wrapper_write_processing_instruction_data, + axis2_libxml2_writer_wrapper_write_cdata, axis2_libxml2_writer_wrapper_write_dtd, + axis2_libxml2_writer_wrapper_write_entity_ref, + axis2_libxml2_writer_wrapper_write_start_document, + axis2_libxml2_writer_wrapper_write_start_document_with_version, + axis2_libxml2_writer_wrapper_write_start_document_with_version_encoding, + axis2_libxml2_writer_wrapper_write_characters, axis2_libxml2_writer_wrapper_get_prefix, + axis2_libxml2_writer_wrapper_set_prefix, axis2_libxml2_writer_wrapper_set_default_prefix, + axis2_libxml2_writer_wrapper_write_encoded, axis2_libxml2_writer_wrapper_get_xml, + axis2_libxml2_writer_wrapper_get_xml_size, axis2_libxml2_writer_wrapper_get_type, + axis2_libxml2_writer_wrapper_write_raw, axis2_libxml2_writer_wrapper_flush }; + +AXIS2_EXTERN axiom_xml_writer_t *AXIS2_CALL +axiom_xml_writer_create( + const axutil_env_t * env, + axis2_char_t * filename, + axis2_char_t * encoding, + int is_prefix_default, + int compression) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + AXIS2_ENV_CHECK(env, NULL); + writer_impl = (axis2_libxml2_writer_wrapper_impl_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_libxml2_writer_wrapper_impl_t)); + if(!writer_impl) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create an XML writer wrapper"); + return NULL; + } + writer_impl->xml_writer = xmlNewTextWriterFilename(filename, compression); + + if(!(writer_impl->xml_writer)) + { + AXIS2_FREE(env->allocator, writer_impl); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_CREATING_XML_STREAM_WRITER, AXIS2_FAILURE); + return NULL; + } + writer_impl->buffer = NULL; + writer_impl->encoding = NULL; + writer_impl->compression = 0; + writer_impl->in_empty_element = AXIS2_FALSE; + writer_impl->in_start_element = AXIS2_FALSE; + writer_impl->stack = NULL; + writer_impl->uri_prefix_map = NULL; + writer_impl->default_lang_namespace = NULL; + + writer_impl->writer_type = AXIS2_XML_PARSER_TYPE_FILE; + writer_impl->compression = compression; + + if(encoding) + { + writer_impl->encoding = axutil_strdup(env, encoding); + } + else + { + writer_impl->encoding = axutil_strdup(env, ENCODING); + } + + writer_impl->uri_prefix_map = axutil_hash_make(env); + if(!(writer_impl->uri_prefix_map)) + { + axis2_libxml2_writer_wrapper_free(&(writer_impl->writer), env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create URI prefix hash map"); + return NULL; + } + writer_impl->writer.ops = &axiom_xml_writer_ops_var; + return &(writer_impl->writer); +} + +AXIS2_EXTERN axiom_xml_writer_t *AXIS2_CALL +axiom_xml_writer_create_for_memory( + const axutil_env_t * env, + axis2_char_t * encoding, + int is_prefix_default, + int compression, + int type) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + AXIS2_ENV_CHECK(env, NULL); + writer_impl = (axis2_libxml2_writer_wrapper_impl_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_libxml2_writer_wrapper_impl_t)); + if(!writer_impl) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create writer wrapper"); + return NULL; + } + + writer_impl->encoding = NULL; + writer_impl->buffer = NULL; + writer_impl->doc = NULL; + writer_impl->in_empty_element = AXIS2_FALSE; + writer_impl->in_start_element = AXIS2_FALSE; + writer_impl->stack = NULL; + writer_impl->uri_prefix_map = NULL; + writer_impl->default_lang_namespace = NULL; + writer_impl->compression = compression; + + if(AXIS2_XML_PARSER_TYPE_BUFFER == type) + { + writer_impl->writer_type = AXIS2_XML_PARSER_TYPE_BUFFER; + writer_impl->buffer = xmlBufferCreate(); + if(!(writer_impl->buffer)) + { + axis2_libxml2_writer_wrapper_free(&(writer_impl->writer), env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create a buffer for writer wrapper"); + return NULL; + } + + writer_impl->xml_writer = xmlNewTextWriterMemory(writer_impl->buffer, 0); + } + else if(AXIS2_XML_PARSER_TYPE_DOC == type) + { + writer_impl->writer_type = AXIS2_XML_PARSER_TYPE_DOC; + writer_impl->xml_writer = xmlNewTextWriterDoc(&writer_impl->doc, 0); + } + else + { + axis2_libxml2_writer_wrapper_free(&(writer_impl->writer), env); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_XML_PARSER_INVALID_MEM_TYPE, AXIS2_FAILURE); + return NULL; + } + + if(!(writer_impl->xml_writer)) + { + axis2_libxml2_writer_wrapper_free(&(writer_impl->writer), env); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_CREATING_XML_STREAM_WRITER, AXIS2_FAILURE); + return NULL; + } + + if(encoding) + { + writer_impl->encoding = axutil_strdup(env, encoding); + } + else + { + writer_impl->encoding = axutil_strdup(env, ENCODING); + } + + writer_impl->uri_prefix_map = axutil_hash_make(env); + if(!(writer_impl->uri_prefix_map)) + { + axis2_libxml2_writer_wrapper_free(&(writer_impl->writer), env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create URI prefix hash map"); + return NULL; + } + writer_impl->stack = axutil_stack_create(env); + if(!(writer_impl->stack)) + { + axis2_libxml2_writer_wrapper_free(&(writer_impl->writer), env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create the stack for writer wrapper"); + return NULL; + } + + writer_impl->writer.ops = &axiom_xml_writer_ops_var; + + return &(writer_impl->writer); +} + +void AXIS2_CALL +axis2_libxml2_writer_wrapper_free( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + if(writer_impl->xml_writer) + { + xmlFreeTextWriter(writer_impl->xml_writer); + writer_impl->xml_writer = NULL; + } + if(writer_impl->buffer) + { + xmlBufferFree(writer_impl->buffer); + writer_impl->buffer = NULL; + } + if(writer_impl->encoding) + { + AXIS2_FREE(env->allocator, writer_impl->encoding); + writer_impl->encoding = NULL; + } + if(writer_impl->uri_prefix_map) + { + axutil_hash_free(writer_impl->uri_prefix_map, env); + writer_impl->uri_prefix_map = NULL; + } + if(writer_impl->stack) + { + axutil_stack_free(writer_impl->stack, env); + writer_impl->stack = NULL; + } + if(writer_impl->default_lang_namespace) + { + uri_prefix_element_free(writer_impl->default_lang_namespace, env); + writer_impl->default_lang_namespace = NULL; + } + + AXIS2_FREE(env->allocator, writer_impl); + writer_impl = NULL; + return; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_start_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname) +{ + int status = 0; + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + writer_impl->in_start_element = AXIS2_TRUE; + + status = xmlTextWriterStartElement(writer_impl->xml_writer, (xmlChar *)localname); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_START_ELEMENT, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_end_start_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + /* nothing to do , + it is automatically taken care by the libxml2 writer */ + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_start_element_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + status = xmlTextWriterStartElementNS(writer_impl->xml_writer, + NULL, BAD_CAST localname, NULL); + + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_start_element_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri, + axis2_char_t * prefix) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, prefix, AXIS2_FAILURE); + + writer_impl = AXIS2_INTF_TO_IMPL(writer); + writer_impl->in_start_element = AXIS2_TRUE; + + status = xmlTextWriterStartElementNS(writer_impl->xml_writer, + BAD_CAST prefix, + BAD_CAST localname, BAD_CAST NULL); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE_PREFIX, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_empty_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname) +{ + int status = 0; + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + status = xmlTextWriterStartElement(writer_impl->xml_writer, (xmlChar *)localname); + + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_EMPTY_ELEMENT, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + status = xmlTextWriterEndElement(writer_impl->xml_writer); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_EMPTY_ELEMENT, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_empty_element_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + status = xmlTextWriterStartElementNS(writer_impl->xml_writer, + NULL, BAD_CAST localname, + BAD_CAST namespace_uri); + + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + status = xmlTextWriterEndElement(writer_impl->xml_writer); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_empty_element_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri, + axis2_char_t * prefix) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, prefix, AXIS2_FAILURE); + + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + status = xmlTextWriterStartElementNS(writer_impl->xml_writer, + BAD_CAST prefix, + BAD_CAST localname, BAD_CAST NULL); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE_PREFIX, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + status = xmlTextWriterEndElement(writer_impl->xml_writer); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE_PREFIX, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_end_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + writer_impl->in_start_element = AXIS2_FALSE; + /* write an empty element in case the element is empty, + status = xmlTextWriterFullEndElement(writer_impl->xml_writer); + Above call write it like . + Call below will write it like */ + status = xmlTextWriterEndElement(writer_impl->xml_writer); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_END_ELEMENT, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_end_document( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + writer_impl = AXIS2_INTF_TO_IMPL(writer); + status = xmlTextWriterEndDocument(writer_impl->xml_writer); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_END_DOCUMENT, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_attribute( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + if(!value) + { + value = ""; + } + + writer_impl = AXIS2_INTF_TO_IMPL(writer); + status = xmlTextWriterWriteAttribute(writer_impl->xml_writer, + BAD_CAST localname, BAD_CAST value); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_ATTRIBUTE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_attribute_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value, + axis2_char_t * namespace_uri) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + + if(!value) + { + value = ""; + } + + writer_impl = AXIS2_INTF_TO_IMPL(writer); + status = xmlTextWriterWriteAttributeNS(writer_impl->xml_writer, + NULL, BAD_CAST localname, + BAD_CAST NULL, BAD_CAST value); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_attribute_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value, + axis2_char_t * namespace_uri, + axis2_char_t * prefix) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, prefix, AXIS2_FAILURE); + + if(!value) + { + value = ""; + } + writer_impl = AXIS2_INTF_TO_IMPL(writer); + status = xmlTextWriterWriteAttributeNS(writer_impl->xml_writer, + BAD_CAST prefix, BAD_CAST localname, + BAD_CAST NULL, BAD_CAST value); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE_PREFIX, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +/** need to work on this */ +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * prefix, + axis2_char_t * namespace_uri) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + char *xmlnsprefix = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); + + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + if(prefix && (axutil_strcmp(prefix, "") != 0)) + { + xmlnsprefix = (axis2_char_t *)AXIS2_MALLOC(env->allocator, (sizeof(char) * (axutil_strlen( + prefix) + 7))); + sprintf(xmlnsprefix, "xmlns:%s", prefix); + } + else + { + xmlnsprefix = axutil_strdup(env, "xmlns"); + } + + status = xmlTextWriterWriteAttribute(writer_impl->xml_writer, + BAD_CAST xmlnsprefix, + BAD_CAST namespace_uri); + AXIS2_FREE(env->allocator, xmlnsprefix); + xmlnsprefix = NULL; + + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE_PREFIX, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + AXIS2_FREE(env->allocator, xmlnsprefix); + xmlnsprefix = NULL; + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_default_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * namespace_uri) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + axis2_char_t *xmlns = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE) + xmlns = AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * (strlen("xmlns") + 1)); + sprintf(xmlns, "xmlns"); + status = xmlTextWriterWriteAttribute(writer_impl->xml_writer, + (const xmlChar *) xmlns, + BAD_CAST namespace_uri); + + if(xmlns) + { + AXIS2_FREE(env->allocator, xmlns); + xmlns = NULL; + } + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_DEFAULT_NAMESPACE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_comment( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * value) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + + writer_impl = AXIS2_INTF_TO_IMPL(writer); + status = xmlTextWriterWriteComment(writer_impl->xml_writer, BAD_CAST value); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_COMMENT, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_processing_instruction( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * target) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, target, AXIS2_FAILURE); + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + status = xmlTextWriterStartPI(writer_impl->xml_writer, BAD_CAST target); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_PROCESSING_INSTRUCTION, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_processing_instruction_data( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * target, + axis2_char_t * data) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, target, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, data, AXIS2_FAILURE); + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + status = xmlTextWriterWritePI(writer_impl->xml_writer, + BAD_CAST target, BAD_CAST data); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_PROCESSING_INSTRUCTION, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_cdata( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * data) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, data, AXIS2_FAILURE); + + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + status = xmlTextWriterWriteCDATA(writer_impl->xml_writer, BAD_CAST data); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_CDATA, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_dtd( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * dtd) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, dtd, AXIS2_FAILURE); + + status = xmlTextWriterStartDTD(writer_impl->xml_writer, + BAD_CAST dtd, NULL, NULL); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_DTD, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_entity_ref( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * name) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, name, AXIS2_FAILURE); + return AXIS2_FAILURE; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_start_document( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + axis2_libxml2_writer_wrapper_impl_t *wrapper_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + wrapper_impl = AXIS2_INTF_TO_IMPL(writer); + status = xmlTextWriterStartDocument(wrapper_impl->xml_writer, NULL, NULL, NULL); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_START_DOCUMENT, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_start_document_with_version( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * version) +{ + axis2_libxml2_writer_wrapper_impl_t *wrapper_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, version, AXIS2_FAILURE); + + wrapper_impl = AXIS2_INTF_TO_IMPL(writer); + status = xmlTextWriterStartDocument(wrapper_impl->xml_writer, version, NULL, NULL); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_START_DOCUMENT, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_start_document_with_version_encoding( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * encoding, + axis2_char_t * version) +{ + axis2_libxml2_writer_wrapper_impl_t *wrapper_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + wrapper_impl = AXIS2_INTF_TO_IMPL(writer); + status = xmlTextWriterStartDocument(wrapper_impl->xml_writer, version, encoding, NULL); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_START_DOCUMENT, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_characters( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * text) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, text, AXIS2_FAILURE); + + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + status = xmlTextWriterWriteString(writer_impl->xml_writer, BAD_CAST text); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_START_DOCUMENT, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_char_t *AXIS2_CALL +axis2_libxml2_writer_wrapper_get_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + AXIS2_PARAM_CHECK(env->error, uri, NULL); + writer_impl = AXIS2_INTF_TO_IMPL(writer); + if(!uri || axutil_strcmp(uri, "") == 0) + { + return NULL; + } + return axis2_libxml2_writer_wrapper_find_prefix(writer, env, uri); +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_set_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * prefix, + axis2_char_t * uri) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + + axis2_bool_t is_declared = AXIS2_FALSE; + axis2_char_t key[1024]; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, prefix, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, uri, AXIS2_FAILURE); + writer_impl = AXIS2_INTF_TO_IMPL(writer); + if(axutil_strcmp(uri, "") == 0) + { + return AXIS2_FAILURE; + } + + create_key_from_uri_prefix(env, uri, prefix, key); + + is_declared = axis2_libxml2_writer_wrapper_is_namespace_declared(writer, env, key); + if(!is_declared) + { + return axis2_libxml2_writer_wrapper_push(writer, env, uri, prefix); + } + return AXIS2_FAILURE; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_set_default_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri) +{ + axis2_bool_t is_declared = AXIS2_FALSE; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, uri, AXIS2_FAILURE); + if(axutil_strcmp(uri, "") == 0) + { + return AXIS2_FAILURE; + } + is_declared = axis2_libxml2_writer_wrapper_is_namespace_declared(writer, env, uri); + if(!is_declared) + { + return axis2_libxml2_writer_wrapper_push(writer, env, uri, NULL); + } + return AXIS2_FAILURE; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_encoded( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * text, + int in_attr) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, text, AXIS2_FAILURE); + writer_impl = AXIS2_INTF_TO_IMPL(writer); + return AXIS2_FAILURE; +} + +void *AXIS2_CALL +axis2_libxml2_writer_wrapper_get_xml( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + writer_impl = AXIS2_INTF_TO_IMPL(writer); + if(writer_impl->writer_type == AXIS2_XML_PARSER_TYPE_BUFFER) + { + int output_bytes = 0; + output_bytes = xmlTextWriterFlush(writer_impl->xml_writer); + return writer_impl->buffer->content; + } + else if(writer_impl->writer_type == AXIS2_XML_PARSER_TYPE_DOC) + { + return (void *)writer_impl->doc; + } + else if(writer_impl->writer_type == AXIS2_XML_PARSER_TYPE_FILE) + { + return NULL; + } + + return NULL; +} + +unsigned int AXIS2_CALL +axis2_libxml2_writer_wrapper_get_xml_size( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + if(writer_impl->writer_type == AXIS2_XML_PARSER_TYPE_BUFFER) + { + return writer_impl->buffer->use; + } + else + { + return 0; + } +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_flush( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + writer_impl = AXIS2_INTF_TO_IMPL(writer); + if(writer_impl->xml_writer) + { + int ret = 0; + ret = xmlTextWriterFlush(writer_impl->xml_writer); + if(ret > -1) + return AXIS2_SUCCESS; + } + + return AXIS2_FAILURE; +} + +int AXIS2_CALL +axis2_libxml2_writer_wrapper_get_type( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + return writer_impl->writer_type; +} + +static axis2_status_t +axis2_libxml2_writer_wrapper_push( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + const axis2_char_t * uri, + const axis2_char_t * prefix) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + axutil_array_list_t *current_list = NULL; + axis2_char_t key[1024]; + const axis2_char_t *temp_prefix = NULL; + writer_impl = AXIS2_INTF_TO_IMPL(writer); + if(!prefix || axutil_strcmp(prefix, "") == 0) + { + temp_prefix = "default"; + } + else + { + temp_prefix = prefix; + } + + if(writer_impl->stack) + { + current_list = (axutil_array_list_t *)axutil_stack_get(writer_impl->stack, env); + + if(current_list) + { + uri_prefix_element_t *ele = NULL; + create_key_from_uri_prefix(env, uri, prefix, key); + + ele = uri_prefix_element_create(env, uri, temp_prefix, prefix, key); + if(ele) + { + axutil_array_list_add(current_list, env, ele); + axutil_hash_set(writer_impl->uri_prefix_map, ele->key, AXIS2_HASH_KEY_STRING, + ele->prefix); + } + } + } + return AXIS2_SUCCESS; +} + +static axis2_bool_t +axis2_libxml2_writer_wrapper_is_namespace_declared( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * key) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + writer_impl = AXIS2_INTF_TO_IMPL(writer); + if(writer_impl->uri_prefix_map && NULL != key) + { + void *ret = NULL; + ret = axutil_hash_get(writer_impl->uri_prefix_map, key, AXIS2_HASH_KEY_STRING); + if(ret) + { + return AXIS2_TRUE; + } + } + return AXIS2_FALSE; +} + +static void +uri_prefix_element_free( + uri_prefix_element_t * up_element, + const axutil_env_t * env) +{ + if(up_element) + { + if(up_element->uri) + { + AXIS2_FREE(env->allocator, up_element->uri); + up_element->uri = NULL; + } + if(up_element->prefix) + { + AXIS2_FREE(env->allocator, up_element->prefix); + up_element->prefix = NULL; + } + if(up_element->key) + { + AXIS2_FREE(env->allocator, up_element->key); + up_element->key = NULL; + } + if(up_element->real_prefix) + { + AXIS2_FREE(env->allocator, up_element->real_prefix); + up_element->real_prefix = NULL; + } + AXIS2_FREE(env->allocator, up_element); + up_element = NULL; + } + return; +} + +static uri_prefix_element_t * +uri_prefix_element_create( + const axutil_env_t * env, + const axis2_char_t * uri, + const axis2_char_t * prefix, + const axis2_char_t * real_prefix, + const axis2_char_t * key) +{ + uri_prefix_element_t *up_element = NULL; + up_element = (uri_prefix_element_t *)AXIS2_MALLOC(env->allocator, sizeof(uri_prefix_element_t)); + + if(!uri) + { + return NULL; + } + + if(!up_element) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create URI prefix element %s", + uri); + return NULL; + } + up_element->key = NULL; + up_element->prefix = NULL; + up_element->uri = NULL; + up_element->real_prefix = NULL; + + up_element->uri = axutil_strdup(env, uri); + if(!up_element->uri) + { + uri_prefix_element_free(up_element, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + up_element->prefix = axutil_strdup(env, prefix); + if(prefix && !up_element->prefix) + { + uri_prefix_element_free(up_element, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + up_element->key = axutil_strdup(env, key); + if(key && !up_element->key) + { + uri_prefix_element_free(up_element, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + up_element->real_prefix = axutil_strdup(env, real_prefix); + + return up_element; +} + +static void +create_key_from_uri_prefix( + const axutil_env_t * env, + const axis2_char_t * uri, + const axis2_char_t * prefix, + axis2_char_t * array) +{ + if(!prefix) + { + prefix = ""; + } + sprintf(array, "%s%s%s", uri, "|", prefix); +} + +static axis2_char_t * +axis2_libxml2_writer_wrapper_find_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int size = 0; + int i = 0; + + writer_impl = AXIS2_INTF_TO_IMPL(writer); + + if(!writer_impl->stack) + { + return NULL; + } + size = axutil_stack_size(writer_impl->stack, env); + if(size <= 0) + { + return NULL; + } + + for(i = size - 1; i < 0; i--) + { + axutil_array_list_t *context = NULL; + void *value = NULL; + value = axutil_stack_get_at(writer_impl->stack, env, i); + if(value) + { + uri_prefix_element_t *up_ele = NULL; + context = (axutil_array_list_t *)value; + up_ele = axis2_libxml2_writer_wrapper_find_prefix_in_context(context, env, uri); + if(up_ele) + { + return up_ele->real_prefix; + } + } + } + return NULL; +} + +static uri_prefix_element_t * +axis2_libxml2_writer_wrapper_find_prefix_in_context( + axutil_array_list_t * context, + const axutil_env_t * env, + axis2_char_t * uri) +{ + int size = 0; + int i = 0; + if(!context) + { + return NULL; + } + size = axutil_array_list_size(context, env); + for(i = 0; i < size; i++) + { + uri_prefix_element_t *ele = NULL; + void *value = NULL; + value = axutil_array_list_get(context, env, i); + if(value) + { + ele = (uri_prefix_element_t *)value; + if(ele->uri && axutil_strcmp(uri, ele->uri)) + { + return ele; + } + } + } + return NULL; +} + +axis2_status_t AXIS2_CALL +axis2_libxml2_writer_wrapper_write_raw( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * content) +{ + axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; + int status = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, content, AXIS2_FAILURE); + + writer_impl = AXIS2_INTF_TO_IMPL(writer); + status = xmlTextWriterWriteRaw(writer_impl->xml_writer, BAD_CAST content); + if(status < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_DATA_SOURCE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/axiom/src/parser/xml_reader.c b/axiom/src/parser/xml_reader.c new file mode 100644 index 0000000..47e2334 --- /dev/null +++ b/axiom/src/parser/xml_reader.c @@ -0,0 +1,203 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +AXIS2_EXTERN int AXIS2_CALL +axiom_xml_reader_next( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return (parser)->ops->next(parser, env); +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_xml_reader_free( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + (parser)->ops->free(parser, env); +} + +AXIS2_EXTERN int AXIS2_CALL +axiom_xml_reader_get_attribute_count( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return (parser)->ops->get_attribute_count(parser, env); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_attribute_name_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + return (parser)->ops->get_attribute_name_by_number(parser, env, i); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_attribute_prefix_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + return (parser)->ops->get_attribute_prefix_by_number(parser, env, i); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_attribute_value_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + return (parser)->ops->get_attribute_value_by_number(parser, env, i); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_attribute_namespace_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + return (parser)->ops->get_attribute_namespace_by_number(parser, env, i); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_value( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return (parser)->ops->get_value(parser, env); +} + +AXIS2_EXTERN int AXIS2_CALL +axiom_xml_reader_get_namespace_count( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return (parser)->ops->get_namespace_count(parser, env); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_namespace_uri_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + return (parser)->ops->get_namespace_uri_by_number(parser, env, i); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_namespace_prefix_by_number( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + int i) +{ + return (parser)->ops->get_namespace_prefix_by_number(parser, env, i); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_prefix( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return (parser)->ops->get_prefix(parser, env); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_name( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return (parser)->ops->get_name(parser, env); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_pi_target( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return (parser)->ops->get_pi_target(parser, env); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_pi_data( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return (parser)->ops->get_pi_data(parser, env); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_dtd( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return (parser)->ops->get_dtd(parser, env); +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_xml_reader_xml_free( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + void *data) +{ + (parser)->ops->xml_free(parser, env, data); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_char_set_encoding( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return (parser)->ops->get_char_set_encoding(parser, env); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_namespace_uri( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return (parser)->ops->get_namespace_uri(parser, env); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_namespace_uri_by_prefix( + axiom_xml_reader_t * parser, + const axutil_env_t * env, + axis2_char_t * prefix) +{ + return (parser)->ops->get_namespace_uri_by_prefix(parser, env, prefix); +} + +AXIS2_EXTERN void *AXIS2_CALL +axiom_xml_reader_get_context( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return (parser)->ops->get_context(parser, env); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_reader_get_current_buffer( + axiom_xml_reader_t * parser, + const axutil_env_t * env) +{ + return (parser)->ops->get_current_buffer(parser, env); +} + diff --git a/axiom/src/parser/xml_writer.c b/axiom/src/parser/xml_writer.c new file mode 100644 index 0000000..cefaeae --- /dev/null +++ b/axiom/src/parser/xml_writer.c @@ -0,0 +1,337 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +AXIS2_EXTERN void AXIS2_CALL +axiom_xml_writer_free( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + (writer)->ops->free(writer, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_start_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname) +{ + return (writer)->ops->write_start_element(writer, env, localname); + +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_end_start_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + return (writer)->ops->end_start_element(writer, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_start_element_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri) +{ + return (writer)->ops->write_start_element_with_namespace(writer, env, localname, namespace_uri); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_start_element_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri, + axis2_char_t * prefix) +{ + return (writer)->ops->write_start_element_with_namespace_prefix(writer, env, localname, + namespace_uri, prefix); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_empty_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname) +{ + return (writer)->ops->write_empty_element(writer, env, localname); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_empty_element_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri) +{ + return (writer)->ops->write_empty_element_with_namespace(writer, env, localname, namespace_uri); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_empty_element_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * namespace_uri, + axis2_char_t * prefix) +{ + return (writer)->ops->write_empty_element_with_namespace_prefix(writer, env, localname, + namespace_uri, prefix); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_end_element( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + return (writer)->ops->write_end_element(writer, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_end_document( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + return (writer)->ops->write_end_document(writer, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_attribute( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value) +{ + return (writer)->ops->write_attribute(writer, env, localname, value); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_attribute_with_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value, + axis2_char_t * namespace_uri) +{ + return (writer)->ops->write_attribute_with_namespace(writer, env, localname, value, + namespace_uri); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_attribute_with_namespace_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * localname, + axis2_char_t * value, + axis2_char_t * namespace_uri, + axis2_char_t * prefix) +{ + return (writer)->ops->write_attribute_with_namespace_prefix(writer, env, localname, value, + namespace_uri, prefix); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * prefix, + axis2_char_t * namespace_uri) +{ + return (writer)->ops->write_namespace(writer, env, prefix, namespace_uri); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_default_namespace( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * namespace_uri) +{ + return (writer)->ops->write_default_namespace(writer, env, namespace_uri); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_comment( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * value) +{ + return (writer)->ops->write_comment(writer, env, value); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_processing_instruction( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * target) +{ + return (writer)->ops->write_processing_instruction(writer, env, target); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_processing_instruction_data( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * target, + axis2_char_t * data) +{ + return (writer)->ops->write_processing_instruction_data(writer, env, target, data); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_cdata( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * data) +{ + return (writer)->ops->write_cdata(writer, env, data); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_dtd( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * dtd) +{ + return (writer)->ops->write_cdata(writer, env, dtd); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_entity_ref( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * name) +{ + return (writer)->ops->write_entity_ref(writer, env, name); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_start_document( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + return (writer)->ops->write_start_document(writer, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_start_document_with_version( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * version) +{ + return (writer)->ops->write_start_document_with_version(writer, env, version); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_start_document_with_version_encoding( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * version, + axis2_char_t * encoding) +{ + return (writer)->ops->write_start_document_with_version_encoding(writer, env, encoding, version); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_characters( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * text) +{ + return (writer)->ops->write_characters(writer, env, text); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_xml_writer_get_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri) +{ + return (writer)->ops->get_prefix(writer, env, uri); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_set_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * prefix, + axis2_char_t * uri) +{ + return (writer)->ops->set_prefix(writer, env, prefix, uri); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_set_default_prefix( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * uri) +{ + return (writer)->ops->set_default_prefix(writer, env, uri); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_encoded( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * text, + int in_attr) +{ + return (writer)->ops->write_encoded(writer, env, text, in_attr); +} + +AXIS2_EXTERN void *AXIS2_CALL +axiom_xml_writer_get_xml( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + return (writer)->ops->get_xml(writer, env); +} + +AXIS2_EXTERN unsigned int AXIS2_CALL +axiom_xml_writer_get_xml_size( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + return (writer)->ops->get_xml_size(writer, env); +} + +AXIS2_EXTERN int AXIS2_CALL +axiom_xml_writer_get_type( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + return (writer)->ops->get_type(writer, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_write_raw( + axiom_xml_writer_t * writer, + const axutil_env_t * env, + axis2_char_t * content) +{ + return (writer)->ops->write_raw(writer, env, content); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_xml_writer_flush( + axiom_xml_writer_t * writer, + const axutil_env_t * env) +{ + return (writer)->ops->flush(writer, env); +} diff --git a/axiom/src/soap/Makefile.am b/axiom/src/soap/Makefile.am new file mode 100644 index 0000000..5b53ba8 --- /dev/null +++ b/axiom/src/soap/Makefile.am @@ -0,0 +1,33 @@ +noinst_LTLIBRARIES = libaxis2_soap.la +libaxis2_soap_la_SOURCES = soap_fault.c \ + soap_fault_code.c \ + soap_fault_detail.c \ + soap_fault_node.c \ + soap_fault_reason.c \ + soap_fault_role.c \ + soap_fault_sub_code.c \ + soap_fault_text.c \ + soap_fault_value.c \ + soap_header_block.c \ + soap_header.c \ + soap_body.c \ + soap_envelope.c \ + soap_builder.c \ + soap11_builder_helper.c \ + soap12_builder_helper.c + +libaxis2_soap_la_LIBADD = +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/parser \ + -I$(top_builddir)/src/om \ + -I ../../../util/include + +EXTRA_DIST = axiom_soap11_builder_helper.h \ + _axiom_soap_fault_code.h _axiom_soap_fault_reason.h \ + _axiom_soap_fault_value.h axiom_soap12_builder_helper.h \ + _axiom_soap_fault_detail.h _axiom_soap_fault_role.h \ + _axiom_soap_header_block.h _axiom_soap_body.h \ + _axiom_soap_fault.h _axiom_soap_fault_sub_code.h \ + _axiom_soap_header.h _axiom_soap_envelope.h \ + _axiom_soap_fault_node.h _axiom_soap_fault_text.h + diff --git a/axiom/src/soap/_axiom_soap_body.h b/axiom/src/soap/_axiom_soap_body.h new file mode 100644 index 0000000..bb25b84 --- /dev/null +++ b/axiom/src/soap/_axiom_soap_body.h @@ -0,0 +1,69 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AXIOM_SOAP_BODY_H +#define _AXIOM_SOAP_BODY_H + +/** @defgroup axiom_soap AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_soap_body Soap Body + * @ingroup axiom_soap + * @{ + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_body_set_base_node( + axiom_soap_body_t * body, + const axutil_env_t * env, + axiom_node_t * om_node); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_body_set_builder( + axiom_soap_body_t * body, + const axutil_env_t * env, + struct axiom_soap_builder *builder); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_body_set_fault( + axiom_soap_body_t * body, + const axutil_env_t * env, + struct axiom_soap_fault *soap_fault); + + AXIS2_EXTERN axiom_soap_body_t *AXIS2_CALL + axiom_soap_body_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** _AXIOM_SOAP_BODY_H */ diff --git a/axiom/src/soap/_axiom_soap_envelope.h b/axiom/src/soap/_axiom_soap_envelope.h new file mode 100644 index 0000000..1c446cc --- /dev/null +++ b/axiom/src/soap/_axiom_soap_envelope.h @@ -0,0 +1,84 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AXIOM_SOAP_ENVELOPE_H +#define _AXIOM_SOAP_ENVELOPE_H + +/** @defgroup axiom_soap AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_soap_envelope Soap Envelope + * @ingroup axiom_soap + * @{ + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_envelope_set_base_node( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env, + axiom_node_t * om_node); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_envelope_set_body( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env, + struct axiom_soap_body *body); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_envelope_set_header( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env, + struct axiom_soap_header *header); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_envelope_set_builder( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env, + struct axiom_soap_builder *soap_builder); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_envelope_set_soap_version_internal( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env, + int soap_version); + + AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL + + axiom_soap_envelope_create_null( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** _AXIOM_SOAP_ENVELOPE_H */ diff --git a/axiom/src/soap/_axiom_soap_fault.h b/axiom/src/soap/_axiom_soap_fault.h new file mode 100644 index 0000000..2f0c410 --- /dev/null +++ b/axiom/src/soap/_axiom_soap_fault.h @@ -0,0 +1,105 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AXIOM_SOAP_FAULT_H +#define _AXIOM_SOAP_FAULT_H + +/** @defgroup axiom_soap AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_soap_fault Soap fault + * @ingroup axiom_soap + * @{ + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_set_code( + axiom_soap_fault_t * fault, + const axutil_env_t * env, + struct axiom_soap_fault_code *code); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_set_reason( + axiom_soap_fault_t * fault, + const axutil_env_t * env, + struct axiom_soap_fault_reason *reason); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_set_node( + axiom_soap_fault_t * fault, + const axutil_env_t * env, + struct axiom_soap_fault_node *node); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_set_role( + axiom_soap_fault_t * fault, + const axutil_env_t * env, + struct axiom_soap_fault_role *role); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_set_detail( + axiom_soap_fault_t * fault, + const axutil_env_t * env, + struct axiom_soap_fault_detail *detail); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_set_base_node( + axiom_soap_fault_t * fault, + const axutil_env_t * env, + axiom_node_t * node); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_set_builder( + axiom_soap_fault_t * fault, + const axutil_env_t * env, + struct axiom_soap_builder *builder); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_set_soap_version( + axiom_soap_fault_t * fault, + const axutil_env_t * env, + int soap_version); + + AXIS2_EXTERN int AXIS2_CALL + axiom_soap_fault_get_soap_version( + axiom_soap_fault_t * fault, + const axutil_env_t * env); + + AXIS2_EXTERN axiom_soap_fault_t *AXIS2_CALL + axiom_soap_fault_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** _AXIOM_SOAP_FAULT_H */ diff --git a/axiom/src/soap/_axiom_soap_fault_code.h b/axiom/src/soap/_axiom_soap_fault_code.h new file mode 100644 index 0000000..3905a18 --- /dev/null +++ b/axiom/src/soap/_axiom_soap_fault_code.h @@ -0,0 +1,91 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AXIOM_SOAP_FAULT_CODE_H +#define _AXIOM_SOAP_FAULT_CODE_H + +/** @defgroup axiom_soap AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_soap_fault_code Soap fault code + * @ingroup axiom_soap + * @{ + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_code_set_value( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env, + struct axiom_soap_fault_value *fault_val); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_code_set_sub_code( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env, + struct axiom_soap_fault_sub_code *fault_subcode); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_code_set_base_node( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env, + axiom_node_t * node); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_fault_code_set_builder( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env, + struct axiom_soap_builder *soap_builder); + + AXIS2_EXTERN int AXIS2_CALL + axiom_soap_fault_code_get_soap_version( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_code_set_soap_version( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env, + int soap_version); + + AXIS2_EXTERN axiom_soap_fault_code_t *AXIS2_CALL + + axiom_soap_fault_code_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** _AXIOM_SOAP_FAULT_CODE_H */ diff --git a/axiom/src/soap/_axiom_soap_fault_detail.h b/axiom/src/soap/_axiom_soap_fault_detail.h new file mode 100644 index 0000000..69369ca --- /dev/null +++ b/axiom/src/soap/_axiom_soap_fault_detail.h @@ -0,0 +1,60 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AXIOM_SOAP_FAULT_DETAIL_H +#define _AXIOM_SOAP_FAULT_DETAIL_H + +/** @defgroup axiom_soap AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_soap_fault_detail soap fault detail + * @ingroup axiom_soap + * @{ + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_detail_set_base_node( + axiom_soap_fault_detail_t * fault_detail, + const axutil_env_t * env, + axiom_node_t * node); + + AXIS2_EXTERN axiom_soap_fault_detail_t *AXIS2_CALL + + axiom_soap_fault_detail_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** _AXIOM_SOAP_FAULT_DETAIL_H */ diff --git a/axiom/src/soap/_axiom_soap_fault_node.h b/axiom/src/soap/_axiom_soap_fault_node.h new file mode 100644 index 0000000..94ddad7 --- /dev/null +++ b/axiom/src/soap/_axiom_soap_fault_node.h @@ -0,0 +1,60 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AXIOM_SOAP_FAULT_NODE_H +#define _AXIOM_SOAP_FAULT_NODE_H + +/** @defgroup axiom_soap AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_soap_fault_node Soap fault_node + * @ingroup axiom_soap + * @{ + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_node_set_base_node( + axiom_soap_fault_node_t * fault_node, + const axutil_env_t * env, + axiom_node_t * node); + + AXIS2_EXTERN axiom_soap_fault_node_t *AXIS2_CALL + + axiom_soap_fault_node_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** _AXIOM_SOAP_FAULT_NODE_H */ diff --git a/axiom/src/soap/_axiom_soap_fault_reason.h b/axiom/src/soap/_axiom_soap_fault_reason.h new file mode 100644 index 0000000..2307a31 --- /dev/null +++ b/axiom/src/soap/_axiom_soap_fault_reason.h @@ -0,0 +1,87 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AXIOM_SOAP_FAULT_REASON_H +#define _AXIOM_SOAP_FAULT_REASON_H + +/** @defgroup axiom_soap AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_soap_fault_reason Soap Reason + * @ingroup axiom_soap + * @{ + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_reason_set_builder( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env, + struct axiom_soap_builder *builder); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_reason_set_base_node( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env, + axiom_node_t * node); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_reason_set_soap_fault_text( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env, + struct axiom_soap_fault_text *soap_text); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_reason_set_soap_version( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env, + int soap_version); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_reason_get_soap_version( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env); + + AXIS2_EXTERN axiom_soap_fault_reason_t *AXIS2_CALL + + axiom_soap_fault_reason_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** _AXIOM_SOAP_FAULT_REASON_H */ diff --git a/axiom/src/soap/_axiom_soap_fault_role.h b/axiom/src/soap/_axiom_soap_fault_role.h new file mode 100644 index 0000000..9c4ec4b --- /dev/null +++ b/axiom/src/soap/_axiom_soap_fault_role.h @@ -0,0 +1,60 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AXIOM_SOAP_FAULT_ROLE_H +#define _AXIOM_SOAP_FAULT_ROLE_H + +/** @defgroup axiom_soap AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_soap_fault_role Soap_fault_role + * @ingroup axiom_soap + * @{ + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_role_set_base_node( + axiom_soap_fault_role_t * fault_role, + const axutil_env_t * env, + axiom_node_t * node); + + AXIS2_EXTERN axiom_soap_fault_role_t *AXIS2_CALL + + axiom_soap_fault_role_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** _AXIOM_SOAP_FAULT_ROLE_H */ diff --git a/axiom/src/soap/_axiom_soap_fault_sub_code.h b/axiom/src/soap/_axiom_soap_fault_sub_code.h new file mode 100644 index 0000000..878d4e6 --- /dev/null +++ b/axiom/src/soap/_axiom_soap_fault_sub_code.h @@ -0,0 +1,93 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AXIOM_SOAP_FAULT_CODE_SUB_CODE_H +#define _AXIOM_SOAP_FAULT_CODE_SUB_CODE_H + +/** @defgroup axiom_soap AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_soap_fault_sub_code Soap_fault_code + * @ingroup axiom_soap + * @{ + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_sub_code_set_sub_code( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env, + axiom_soap_fault_sub_code_t * sub_code); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_sub_code_set_value( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env, + struct axiom_soap_fault_value *fault_sub_code_val); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_sub_code_set_base_node( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env, + axiom_node_t * node); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_sub_code_set_builder( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env, + struct axiom_soap_builder *builder); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_sub_code_set_soap_version( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env, + int soap_version); + + AXIS2_EXTERN int AXIS2_CALL + axiom_soap_fault_sub_code_get_soap_version( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env); + + AXIS2_EXTERN axiom_soap_fault_sub_code_t *AXIS2_CALL + + axiom_soap_fault_sub_code_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** _AXIOM_SOAP_FAULT_CODE_SUB_CODE_H */ diff --git a/axiom/src/soap/_axiom_soap_fault_text.h b/axiom/src/soap/_axiom_soap_fault_text.h new file mode 100644 index 0000000..dfc8772 --- /dev/null +++ b/axiom/src/soap/_axiom_soap_fault_text.h @@ -0,0 +1,60 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AXIOM_SOAP_FAULT_TEXT_H +#define _AXIOM_SOAP_FAULT_TEXT_H + +/** @defgroup axiom_soap AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_soap_fault_text soap fault text + * @ingroup axiom_soap + * @{ + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_text_set_base_node( + axiom_soap_fault_text_t * fault_text, + const axutil_env_t * env, + axiom_node_t * node); + + AXIS2_EXTERN axiom_soap_fault_text_t *AXIS2_CALL + + axiom_soap_fault_text_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** _AXIOM_SOAP_FAULT_TEXT_H */ diff --git a/axiom/src/soap/_axiom_soap_fault_value.h b/axiom/src/soap/_axiom_soap_fault_value.h new file mode 100644 index 0000000..a524f7f --- /dev/null +++ b/axiom/src/soap/_axiom_soap_fault_value.h @@ -0,0 +1,60 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AXIOM_SOAP_FAULT_VALUE_H +#define _AXIOM_SOAP_FAULT_VALUE_H + +/** @defgroup axiom_soap AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_soap_fault_value Soap Fault Value + * @ingroup axiom_soap + * @{ + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_fault_value_set_base_node( + axiom_soap_fault_value_t * fault_value, + const axutil_env_t * env, + axiom_node_t * node); + + AXIS2_EXTERN axiom_soap_fault_value_t *AXIS2_CALL + + axiom_soap_fault_value_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** _AXIOM_SOAP_FAULT_VALUE_H */ diff --git a/axiom/src/soap/_axiom_soap_header.h b/axiom/src/soap/_axiom_soap_header.h new file mode 100644 index 0000000..7571aa6 --- /dev/null +++ b/axiom/src/soap/_axiom_soap_header.h @@ -0,0 +1,77 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AXIOM_SOAP_HEADER_H +#define _AXIOM_SOAP_HEADER_H + +/** @defgroup axiom_soap AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_soap_header Soap header + * @ingroup axiom_soap + * @{ + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_header_set_base_node( + axiom_soap_header_t * header, + const axutil_env_t * env, + axiom_node_t * node); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_header_set_soap_version( + axiom_soap_header_t * header, + const axutil_env_t * env, + int soap_version); + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_header_set_header_block( + axiom_soap_header_t * header, + const axutil_env_t * env, + struct axiom_soap_header_block *header_block); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axiom_soap_header_set_builder( + axiom_soap_header_t * header, + const axutil_env_t * env, + struct axiom_soap_builder *builder); + + AXIS2_EXTERN axiom_soap_header_t *AXIS2_CALL + axiom_soap_header_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** _AXIOM_SOAP_HEADER_H */ diff --git a/axiom/src/soap/_axiom_soap_header_block.h b/axiom/src/soap/_axiom_soap_header_block.h new file mode 100644 index 0000000..65cb3ab --- /dev/null +++ b/axiom/src/soap/_axiom_soap_header_block.h @@ -0,0 +1,66 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AXIOM_SOAP_HEADER_BLOCK_H +#define _AXIOM_SOAP_HEADER_BLOCK_H + +/** @defgroup axiom_soap AXIOM (Axis Object Model) + * @ingroup axis2 + * @{ + */ + +/** @} */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_soap_header_block Soap header block + * @ingroup axiom_soap + * @{ + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_header_block_set_soap_version( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env, + int soap_version); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap_header_block_set_base_node( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env, + axiom_node_t * node); + + AXIS2_EXTERN axiom_soap_header_block_t *AXIS2_CALL + + axiom_soap_header_block_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /** _AXIOM_SOAP_HEADER_BLOCK_H */ diff --git a/axiom/src/soap/axiom_soap11_builder_helper.h b/axiom/src/soap/axiom_soap11_builder_helper.h new file mode 100644 index 0000000..13e914a --- /dev/null +++ b/axiom/src/soap/axiom_soap11_builder_helper.h @@ -0,0 +1,71 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP11_BUILDER_HELPER_H +#define AXIOM_SOAP11_BUILDER_HELPER_H + +/** + * @file axiom_soap_11_builder_helper.h + * @brief axiom_soap11_builder_helper + */ +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap11_builder_helper + axiom_soap11_builder_helper_t; + + /** + * @defgroup axiom_soap11_builder_helper + * @ingroup axiom_soap + * @{ + */ + + /** + * creates a soap11_builder_helper_create + * @param env Environment. MUST NOT be NULL + */ + AXIS2_EXTERN axiom_soap11_builder_helper_t *AXIS2_CALL + + axiom_soap11_builder_helper_create( + const axutil_env_t * env, + axiom_soap_builder_t * soap_builder, + axiom_stax_builder_t * om_builder); + + AXIS2_EXTERN void AXIS2_CALL + axiom_soap11_builder_helper_free( + axiom_soap11_builder_helper_t * builder_helper, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap11_builder_helper_handle_event( + axiom_soap11_builder_helper_t * builder_helper, + const axutil_env_t * env, + axiom_node_t * om_element_node, + int element_level); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIOM_SOAP11_BUILDER_HELPER_H */ diff --git a/axiom/src/soap/axiom_soap12_builder_helper.h b/axiom/src/soap/axiom_soap12_builder_helper.h new file mode 100644 index 0000000..e901627 --- /dev/null +++ b/axiom/src/soap/axiom_soap12_builder_helper.h @@ -0,0 +1,71 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_SOAP12_BUILDER_HELPER_H +#define AXIOM_SOAP12_BUILDER_HELPER_H + +#include + +/** + * @file axiom_soap_12_builder_helper.h + * @brief axiom_soap12_builder_helper + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axiom_soap12_builder_helper + axiom_soap12_builder_helper_t; + + /** + * @defgroup axiom_soap12_builder_helper + * @ingroup axiom_soap + * @{ + */ + + /** + * creates a soap12_builder_helper_create + * @param env Environment. MUST NOT be NULL + */ + AXIS2_EXTERN axiom_soap12_builder_helper_t *AXIS2_CALL + + axiom_soap12_builder_helper_create( + const axutil_env_t * env, + axiom_soap_builder_t * soap_builder); + + AXIS2_EXTERN void AXIS2_CALL + axiom_soap12_builder_helper_free( + axiom_soap12_builder_helper_t * builder_helper, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axiom_soap12_builder_helper_handle_event( + axiom_soap12_builder_helper_t * builder_helper, + const axutil_env_t * env, + axiom_node_t * om_element_node, + int element_level); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /*AXIOM_SOAP11_BUILDER_HELPER_H */ diff --git a/axiom/src/soap/soap11_builder_helper.c b/axiom/src/soap/soap11_builder_helper.c new file mode 100644 index 0000000..ab2e4d8 --- /dev/null +++ b/axiom/src/soap/soap11_builder_helper.c @@ -0,0 +1,340 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axiom_soap11_builder_helper.h" +#include +#include +#include +#include "_axiom_soap_fault_code.h" +#include "_axiom_soap_fault_value.h" +#include "_axiom_soap_fault_reason.h" +#include "_axiom_soap_fault.h" +#include "_axiom_soap_body.h" +#include "_axiom_soap_fault_detail.h" +#include +#include "_axiom_soap_fault_role.h" +#include +#include + +static axis2_status_t +axiom_soap11_builder_helper_process_text( + axiom_soap11_builder_helper_t * builder_helper, + const axutil_env_t * env); + +struct axiom_soap11_builder_helper +{ + axiom_soap_builder_t *soap_builder; + + axis2_bool_t fault_code_present; + + axis2_bool_t fault_string_present; + + axiom_stax_builder_t *om_builder; + + axiom_node_t *last_processed_node; + +}; + +AXIS2_EXTERN axiom_soap11_builder_helper_t *AXIS2_CALL +axiom_soap11_builder_helper_create( + const axutil_env_t * env, + axiom_soap_builder_t * soap_builder, + axiom_stax_builder_t * om_builder) +{ + axiom_soap11_builder_helper_t *builder_helper = NULL; + + AXIS2_PARAM_CHECK(env->error, soap_builder, NULL); + AXIS2_PARAM_CHECK(env->error, om_builder, NULL); + + builder_helper = (axiom_soap11_builder_helper_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_soap11_builder_helper_t)); + + if(!builder_helper) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create SOAP 1.1 builder helper"); + return NULL; + } + + builder_helper->fault_code_present = AXIS2_FALSE; + builder_helper->fault_string_present = AXIS2_FALSE; + builder_helper->last_processed_node = NULL; + builder_helper->soap_builder = soap_builder; + builder_helper->om_builder = om_builder; + + return builder_helper; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap11_builder_helper_free( + axiom_soap11_builder_helper_t * builder_helper, + const axutil_env_t * env) +{ + + AXIS2_FREE(env->allocator, builder_helper); + builder_helper = NULL; + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap11_builder_helper_handle_event( + axiom_soap11_builder_helper_t * builder_helper, + const axutil_env_t * env, + axiom_node_t * om_element_node, + int element_level) +{ + axiom_element_t *om_ele = NULL; + axis2_char_t *ele_localname = NULL; + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_body_t *soap_body = NULL; + axiom_soap_fault_t *soap_fault = NULL; + + AXIS2_PARAM_CHECK(env->error, om_element_node, AXIS2_FAILURE); + + om_ele = (axiom_element_t *)axiom_node_get_data_element(om_element_node, env); + + ele_localname = axiom_element_get_localname(om_ele, env); + if(!ele_localname) + { + return AXIS2_FAILURE; + } + + soap_envelope = axiom_soap_builder_get_soap_envelope(builder_helper->soap_builder, env); + + if(!soap_envelope) + { + return AXIS2_FAILURE; + } + + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + if(!soap_body) + { + return AXIS2_FAILURE; + } + + soap_fault = axiom_soap_body_get_fault(soap_body, env); + if(!soap_fault) + { + return AXIS2_FAILURE; + } + + if(element_level == 4) + { + axiom_soap_fault_code_t *fault_code = NULL; + axiom_soap_fault_value_t *fault_value = NULL; + axiom_node_t *fault_value_node = NULL; + axiom_element_t *fault_value_ele = NULL; + + if(axutil_strcmp(ele_localname, AXIOM_SOAP11_SOAP_FAULT_CODE_LOCAL_NAME) == 0) + { + axis2_status_t status = AXIS2_SUCCESS; + + if(builder_helper->fault_string_present) + { + axiom_soap_builder_set_bool_processing_mandatory_fault_elements( + builder_helper->soap_builder, env, AXIS2_FALSE); + } + + fault_code = axiom_soap_fault_code_create(env); + if(!fault_code) + { + return AXIS2_FAILURE; + } + axiom_soap_fault_code_set_base_node(fault_code, env, om_element_node); + + axiom_soap_fault_set_code(soap_fault, env, fault_code); + + axiom_soap_fault_code_set_builder(fault_code, env, builder_helper->soap_builder); + + axiom_element_set_localname(om_ele, env, AXIOM_SOAP12_SOAP_FAULT_CODE_LOCAL_NAME); + + fault_value = axiom_soap_fault_value_create_with_code(env, fault_code); + if(!fault_value) + { + return AXIS2_FAILURE; + } + fault_value_node = axiom_soap_fault_value_get_base_node(fault_value, env); + if(!fault_value_node) + { + return AXIS2_FAILURE; + } + fault_value_ele = (axiom_element_t *)axiom_node_get_data_element(fault_value_node, env); + + axiom_stax_builder_set_lastnode(builder_helper->om_builder, env, fault_value_node); + + status = axiom_soap11_builder_helper_process_text(builder_helper, env); + if(status == AXIS2_FAILURE) + { + return AXIS2_FAILURE; + } + axiom_stax_builder_set_lastnode(builder_helper->om_builder, env, om_element_node); + axiom_node_set_complete(om_element_node, env, AXIS2_TRUE); + + axiom_stax_builder_set_element_level(builder_helper->om_builder, env, (element_level + - 1)); + builder_helper->fault_code_present = AXIS2_TRUE; + } + else if(axutil_strcmp(AXIOM_SOAP11_SOAP_FAULT_STRING_LOCAL_NAME, ele_localname) == 0) + { + + axiom_soap_fault_reason_t *fault_reason = NULL; + axiom_soap_fault_text_t *fault_text = NULL; + axiom_node_t *fault_text_node = NULL; + int status = AXIS2_SUCCESS; + if(builder_helper->fault_code_present) + { + axiom_soap_builder_set_bool_processing_mandatory_fault_elements( + builder_helper->soap_builder, env, AXIS2_FALSE); + } + + axiom_element_set_localname(om_ele, env, AXIOM_SOAP12_SOAP_FAULT_REASON_LOCAL_NAME); + + fault_reason = axiom_soap_fault_reason_create(env); + if(!fault_reason) + { + return AXIS2_FAILURE; + } + axiom_soap_fault_reason_set_base_node(fault_reason, env, om_element_node); + + axiom_soap_fault_set_reason(soap_fault, env, fault_reason); + + fault_text = axiom_soap_fault_text_create_with_parent(env, fault_reason); + if(!fault_text) + { + return AXIS2_FAILURE; + } + fault_text_node = axiom_soap_fault_text_get_base_node(fault_text, env); + if(!fault_text_node) + { + return AXIS2_FAILURE; + } + axiom_stax_builder_set_lastnode(builder_helper->om_builder, env, fault_text_node); + + status = axiom_soap11_builder_helper_process_text(builder_helper, env); + if(status == AXIS2_FAILURE) + { + return AXIS2_FAILURE; + } + axiom_stax_builder_set_lastnode(builder_helper->om_builder, env, om_element_node); + + axiom_node_set_complete(om_element_node, env, AXIS2_TRUE); + + axiom_stax_builder_set_element_level(builder_helper->om_builder, env, (element_level + - 1)); + + builder_helper->fault_string_present = AXIS2_TRUE; + + } + else if(axutil_strcmp(AXIOM_SOAP11_SOAP_FAULT_ACTOR_LOCAL_NAME, ele_localname) == 0) + { + axiom_soap_fault_role_t *fault_role = NULL; + fault_role = axiom_soap_fault_role_create(env); + if(!fault_role) + { + return AXIS2_FAILURE; + } + axiom_element_set_localname(om_ele, env, AXIOM_SOAP12_SOAP_FAULT_ROLE_LOCAL_NAME); + + axiom_soap_fault_role_set_base_node(fault_role, env, om_element_node); + + axiom_soap_fault_set_role(soap_fault, env, fault_role); + /* + Role element may not have a namespace associated, hence commented, else it segfaults here - Samisa + status = axiom_soap_builder_process_namespace_data( + builder_helper->soap_builder, env, om_element_node, AXIS2_TRUE); + if(status == AXIS2_FAILURE) + return AXIS2_FAILURE; */ + } + else if(axutil_strcmp(AXIOM_SOAP11_SOAP_FAULT_DETAIL_LOCAL_NAME, ele_localname) == 0) + { + axiom_soap_fault_detail_t *fault_detail = NULL; + fault_detail = axiom_soap_fault_detail_create(env); + if(!fault_detail) + { + return AXIS2_FAILURE; + } + axiom_element_set_localname(om_ele, env, AXIOM_SOAP12_SOAP_FAULT_DETAIL_LOCAL_NAME); + + axiom_soap_fault_detail_set_base_node(fault_detail, env, om_element_node); + + axiom_soap_fault_set_detail(soap_fault, env, fault_detail); + } + else + { + return AXIS2_SUCCESS; + } + } + else if(element_level == 5) + { + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_element = NULL; + axis2_char_t *parent_localname = NULL; + + parent_node = axiom_node_get_parent(om_element_node, env); + if(!parent_node) + { + return AXIS2_FAILURE; + } + parent_element = (axiom_element_t *)axiom_node_get_data_element(om_element_node, env); + parent_localname = axiom_element_get_localname(parent_element, env); + + if(!parent_localname) + { + return AXIS2_FAILURE; + } + if(axutil_strcmp(parent_localname, AXIOM_SOAP12_SOAP_FAULT_ROLE_LOCAL_NAME) == 0) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SOAP11_FAULT_ACTOR_SHOULD_NOT_HAVE_CHILD_ELEMENTS, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "SOAP 1.1 Actor should not have child elements"); + return AXIS2_FAILURE; + } + } + return AXIS2_SUCCESS; +} + +static axis2_status_t +axiom_soap11_builder_helper_process_text( + axiom_soap11_builder_helper_t * builder_helper, + const axutil_env_t * env) +{ + int token = 0; + + token = axiom_stax_builder_next_with_token(builder_helper->om_builder, env); + + if(token == -1) + { + return AXIS2_FAILURE; + } + while(token != AXIOM_XML_READER_END_ELEMENT) + { + if(token != AXIOM_XML_READER_CHARACTER) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_ONLY_CHARACTERS_ARE_ALLOWED_HERE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Unidentified character in SOAP 1.1 builder helper processing"); + return AXIS2_FAILURE; + + } + token = axiom_stax_builder_next_with_token(builder_helper->om_builder, env); + if(token == -1) + { + return AXIS2_FAILURE; + } + } + return AXIS2_SUCCESS; +} diff --git a/axiom/src/soap/soap12_builder_helper.c b/axiom/src/soap/soap12_builder_helper.c new file mode 100644 index 0000000..179d26d --- /dev/null +++ b/axiom/src/soap/soap12_builder_helper.c @@ -0,0 +1,718 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axiom_soap12_builder_helper.h" +#include +#include "_axiom_soap_body.h" +#include "_axiom_soap_fault.h" +#include "_axiom_soap_envelope.h" +#include "_axiom_soap_fault_code.h" +#include "_axiom_soap_fault_sub_code.h" +#include "_axiom_soap_fault_node.h" +#include "_axiom_soap_fault_detail.h" +#include "_axiom_soap_fault_reason.h" +#include "_axiom_soap_fault_role.h" +#include "_axiom_soap_fault_value.h" +#include "_axiom_soap_fault_text.h" + +struct axiom_soap12_builder_helper +{ + axiom_soap_builder_t *soap_builder; + + axis2_bool_t code_present; + + axis2_bool_t reason_present; + + axis2_bool_t node_present; + + axis2_bool_t role_present; + + axis2_bool_t detail_present; + + axis2_bool_t subcode_value_present; + + axis2_bool_t value_present; + + axis2_bool_t sub_code_present; + + axis2_bool_t sub_sub_code_present; + + axis2_bool_t code_processing; + + axis2_bool_t sub_code_processing; + + axis2_bool_t reason_processing; + + axutil_array_list_t *detail_element_names; +}; + +AXIS2_EXTERN axiom_soap12_builder_helper_t *AXIS2_CALL +axiom_soap12_builder_helper_create( + const axutil_env_t * env, + axiom_soap_builder_t * soap_builder) +{ + axiom_soap12_builder_helper_t *builder_helper = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, soap_builder, NULL); + + builder_helper = (axiom_soap12_builder_helper_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_soap12_builder_helper_t)); + if(!builder_helper) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create SOAP 1.1 builder helper"); + return NULL; + } + + builder_helper->code_present = AXIS2_FALSE; + builder_helper->detail_present = AXIS2_FALSE; + builder_helper->reason_present = AXIS2_FALSE; + builder_helper->role_present = AXIS2_FALSE; + builder_helper->sub_code_present = AXIS2_FALSE; + builder_helper->reason_processing = AXIS2_FALSE; + builder_helper->code_processing = AXIS2_FALSE; + builder_helper->sub_code_processing = AXIS2_FALSE; + builder_helper->detail_element_names = NULL; + builder_helper->node_present = AXIS2_FALSE; + builder_helper->soap_builder = soap_builder; + builder_helper->sub_sub_code_present = AXIS2_FALSE; + builder_helper->value_present = AXIS2_FALSE; + builder_helper->subcode_value_present = AXIS2_FALSE; + + return builder_helper; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap12_builder_helper_free( + axiom_soap12_builder_helper_t * builder_helper, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(builder_helper->detail_element_names) + { + axutil_array_list_free(builder_helper->detail_element_names, env); + builder_helper->detail_element_names = NULL; + } + + AXIS2_FREE(env->allocator, builder_helper); + builder_helper = NULL; + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap12_builder_helper_handle_event( + axiom_soap12_builder_helper_t * builder_helper, + const axutil_env_t * env, + axiom_node_t * om_ele_node, + int element_level) +{ + axis2_char_t *ele_localname = NULL; + axiom_element_t *om_ele = NULL; + + axiom_soap_body_t *soap_body = NULL; + axiom_soap_fault_t *soap_fault = NULL; + axiom_soap_envelope_t *soap_envelope = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_ele_node, AXIS2_FAILURE); + + om_ele = (axiom_element_t *)axiom_node_get_data_element(om_ele_node, env); + if(!om_ele) + { + return AXIS2_FAILURE; + } + + ele_localname = axiom_element_get_localname(om_ele, env); + if(!ele_localname) + { + return AXIS2_FAILURE; + } + + soap_envelope = axiom_soap_builder_get_soap_envelope(builder_helper->soap_builder, env); + if(!soap_envelope) + { + return AXIS2_FAILURE; + } + + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + if(!soap_body) + { + return AXIS2_FAILURE; + } + + soap_fault = axiom_soap_body_get_fault(soap_body, env); + if(!soap_fault) + { + return AXIS2_FAILURE; + } + + if(element_level == 4) + { + if(axutil_strcmp(AXIOM_SOAP12_SOAP_FAULT_CODE_LOCAL_NAME, ele_localname) == 0) + { + if(builder_helper->code_present) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MULTIPLE_CODE_ELEMENTS_ENCOUNTERED, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Multiple fault code elements encountered in SOAP fault"); + return AXIS2_FAILURE; + } + else + { + axiom_soap_fault_code_t *soap_fault_code = NULL; + soap_fault_code = axiom_soap_fault_code_create(env); + if(!soap_fault_code) + { + return AXIS2_FAILURE; + } + axiom_soap_fault_code_set_base_node(soap_fault_code, env, om_ele_node); + + axiom_soap_fault_code_set_builder(soap_fault_code, env, + builder_helper->soap_builder); + + axiom_soap_fault_set_code(soap_fault, env, soap_fault_code); + + builder_helper->code_present = AXIS2_TRUE; + builder_helper->code_processing = AXIS2_TRUE; + } + } + else if(axutil_strcmp(AXIOM_SOAP12_SOAP_FAULT_REASON_LOCAL_NAME, ele_localname) == 0) + { + if(!(builder_helper->code_processing) && !(builder_helper->sub_code_processing)) + { + if(builder_helper->code_present) + { + if(builder_helper->reason_present) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_MULTIPLE_REASON_ELEMENTS_ENCOUNTERED, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Multiple fault reason elements encountered in SOAP fault"); + + return AXIS2_FAILURE; + } + else + { + axiom_soap_fault_reason_t *fault_reason = NULL; + fault_reason = axiom_soap_fault_reason_create(env); + if(!fault_reason) + { + return AXIS2_FAILURE; + } + + axiom_soap_fault_reason_set_base_node(fault_reason, env, om_ele_node); + + axiom_soap_fault_set_reason(soap_fault, env, fault_reason); + + axiom_soap_fault_reason_set_builder(fault_reason, env, + builder_helper-> soap_builder); + + builder_helper->reason_present = AXIS2_TRUE; + builder_helper->reason_processing = AXIS2_TRUE; + } + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_WRONG_ELEMENT_ORDER_ENCOUNTERED, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + else + { + if(builder_helper->code_processing) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOAP_FAULT_CODE_DOES_NOT_HAVE_A_VALUE, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOAP_FAULT_CODE_DOES_NOT_HAVE_A_VALUE, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + } + else if(axutil_strcmp(ele_localname, AXIOM_SOAP12_SOAP_FAULT_NODE_LOCAL_NAME) == 0) + { + if(!(builder_helper->reason_processing)) + { + if(builder_helper->reason_present && !(builder_helper->role_present) + && !(builder_helper->detail_present)) + { + if(builder_helper->node_present) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MULTIPLE_NODE_ELEMENTS_ENCOUNTERED, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + else + { + axiom_soap_fault_node_t *soap_fault_node = NULL; + soap_fault_node = axiom_soap_fault_node_create(env); + if(!soap_fault_node) + { + return AXIS2_FAILURE; + } + + axiom_soap_fault_node_set_base_node(soap_fault_node, env, om_ele_node); + + axiom_soap_fault_set_node(soap_fault, env, soap_fault_node); + + builder_helper->node_present = AXIS2_TRUE; + } + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_WRONG_ELEMENT_ORDER_ENCOUNTERED, + AXIS2_FALSE); + + return AXIS2_FAILURE; + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SOAP_FAULT_REASON_ELEMENT_SHOULD_HAVE_A_TEXT, AXIS2_FALSE); + return AXIS2_FAILURE; + } + + } + else if(axutil_strcmp(ele_localname, AXIOM_SOAP12_SOAP_FAULT_ROLE_LOCAL_NAME) == 0) + { + if(!(builder_helper->reason_processing)) + { + if(builder_helper->reason_present && !(builder_helper->detail_present)) + { + if(builder_helper->role_present) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MULTIPLE_ROLE_ELEMENTS_ENCOUNTERED, + AXIS2_FAILURE); + + return AXIS2_FAILURE; + } + else + { + axiom_soap_fault_role_t *soap_fault_role = NULL; + soap_fault_role = axiom_soap_fault_role_create(env); + if(!soap_fault_role) + return AXIS2_FAILURE; + + axiom_soap_fault_role_set_base_node(soap_fault_role, env, om_ele_node); + + axiom_soap_fault_set_role(soap_fault, env, soap_fault_role); + builder_helper->role_present = AXIS2_TRUE; + } + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_WRONG_ELEMENT_ORDER_ENCOUNTERED, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + else + { + + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOAP_FAULT_ROLE_ELEMENT_SHOULD_HAVE_A_TEXT, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + else if(axutil_strcmp(ele_localname, AXIOM_SOAP12_SOAP_FAULT_DETAIL_LOCAL_NAME) == 0) + { + if(!(builder_helper->reason_processing)) + { + if(builder_helper->reason_present) + { + if(builder_helper->detail_present) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_MULTIPLE_DETAIL_ELEMENTS_ENCOUNTERED, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + else + { + + axiom_soap_fault_detail_t *soap_fault_detail = NULL; + soap_fault_detail = axiom_soap_fault_detail_create(env); + if(!soap_fault_detail) + return AXIS2_FAILURE; + + axiom_soap_fault_detail_set_base_node(soap_fault_detail, env, om_ele_node); + + axiom_soap_fault_set_detail(soap_fault, env, soap_fault_detail); + builder_helper->detail_present = AXIS2_TRUE; + } + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_WRONG_ELEMENT_ORDER_ENCOUNTERED, + AXIS2_FAILURE); + + return AXIS2_FAILURE; + + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SOAP_FAULT_REASON_ELEMENT_SHOULD_HAVE_A_TEXT, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_UNSUPPORTED_ELEMENT_IN_SOAP_FAULT_ELEMENT, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + else if(element_level == 5) + { + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + axis2_char_t *parent_localname = NULL; + parent_node = axiom_node_get_parent(om_ele_node, env); + if(!parent_node) + { + return AXIS2_FAILURE; + } + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + if(!parent_ele) + { + return AXIS2_FAILURE; + } + parent_localname = axiom_element_get_localname(parent_ele, env); + if(!parent_localname) + { + return AXIS2_FAILURE; + } + + if(axutil_strcmp(parent_localname, AXIOM_SOAP12_SOAP_FAULT_CODE_LOCAL_NAME) == 0) + { + if(axutil_strcmp(ele_localname, AXIOM_SOAP12_SOAP_FAULT_VALUE_LOCAL_NAME) == 0) + { + if(!(builder_helper->value_present)) + { + axiom_soap_fault_value_t *soap_fault_value = NULL; + axiom_soap_fault_code_t *parent_fcode = NULL; + + soap_fault_value = axiom_soap_fault_value_create(env); + if(!soap_fault_value) + { + return AXIS2_FAILURE; + } + axiom_soap_fault_value_set_base_node(soap_fault_value, env, om_ele_node); + + parent_fcode = axiom_soap_fault_get_code(soap_fault, env); + if(!parent_fcode) + { + return AXIS2_FAILURE; + } + axiom_soap_fault_code_set_value(parent_fcode, env, soap_fault_value); + + builder_helper->value_present = AXIS2_TRUE; + builder_helper->code_processing = AXIS2_FALSE; + + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_MULTIPLE_VALUE_ENCOUNTERED_IN_CODE_ELEMENT, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + else if(axutil_strcmp(ele_localname, AXIOM_SOAP12_SOAP_FAULT_SUB_CODE_LOCAL_NAME) == 0) + { + if(!(builder_helper->sub_code_present)) + { + if(builder_helper->value_present) + { + + axiom_soap_fault_sub_code_t *fault_subcode = NULL; + axiom_soap_fault_code_t *fault_code = NULL; + + fault_subcode = axiom_soap_fault_sub_code_create(env); + if(!fault_subcode) + { + return AXIS2_FAILURE; + } + axiom_soap_fault_sub_code_set_base_node(fault_subcode, env, om_ele_node); + + fault_code = axiom_soap_fault_get_code(soap_fault, env); + if(!fault_code) + { + return AXIS2_FAILURE; + } + axiom_soap_fault_code_set_sub_code(fault_code, env, fault_subcode); + + axiom_soap_fault_sub_code_set_builder(fault_subcode, env, + builder_helper-> soap_builder); + + builder_helper->sub_code_present = AXIS2_TRUE; + builder_helper->sub_code_processing = AXIS2_TRUE; + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SOAP_FAULT_VALUE_SHOULD_BE_PRESENT_BEFORE_SUB_CODE, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MULTIPLE_SUB_CODE_VALUES_ENCOUNTERED, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_THIS_LOCALNAME_NOT_SUPPORTED_INSIDE_THE_CODE_ELEMENT, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + else if(axutil_strcmp(parent_localname, AXIOM_SOAP12_SOAP_FAULT_REASON_LOCAL_NAME) == 0) + { + if(axutil_strcmp(ele_localname, AXIOM_SOAP12_SOAP_FAULT_TEXT_LOCAL_NAME) == 0) + { + axiom_soap_fault_text_t *soap_fault_text = NULL; + axiom_soap_fault_reason_t *fault_reason = NULL; + + soap_fault_text = axiom_soap_fault_text_create(env); + if(!soap_fault_text) + { + return AXIS2_FAILURE; + } + axiom_soap_fault_text_set_base_node(soap_fault_text, env, om_ele_node); + + fault_reason = axiom_soap_fault_get_reason(soap_fault, env); + if(!fault_reason) + { + return AXIS2_FAILURE; + } + + axiom_soap_fault_reason_add_soap_fault_text(fault_reason, env, soap_fault_text); + builder_helper->reason_processing = AXIS2_FALSE; + + axiom_soap_builder_set_bool_processing_mandatory_fault_elements( + builder_helper->soap_builder, env, AXIS2_FALSE); + + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_THIS_LOCALNAME_IS_NOT_SUPPORTED_INSIDE_THE_REASON_ELEMENT, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + } + else if(axutil_strcmp(parent_localname, AXIOM_SOAP12_SOAP_FAULT_DETAIL_LOCAL_NAME) == 0) + { + axiom_soap_builder_set_processing_detail_elements(builder_helper-> soap_builder, env, + AXIS2_TRUE); + + if(!(builder_helper->detail_element_names)) + { + builder_helper->detail_element_names = axutil_array_list_create(env, 20); + } + + axutil_array_list_add(builder_helper->detail_element_names, env, ele_localname); + + } + else + { + + return AXIS2_FAILURE; + } + + } + else if(element_level > 5) + { + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + axis2_char_t *parent_localname = NULL; + + parent_node = axiom_node_get_parent(om_ele_node, env); + if(!parent_node) + { + return AXIS2_FAILURE; + } + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + if(!parent_ele) + { + return AXIS2_FAILURE; + } + + parent_localname = axiom_element_get_localname(parent_ele, env); + if(!parent_localname) + { + return AXIS2_FAILURE; + } + if(axutil_strcmp(parent_localname, AXIOM_SOAP12_SOAP_FAULT_SUB_CODE_LOCAL_NAME) == 0) + { + if(axutil_strcmp(ele_localname, AXIOM_SOAP12_SOAP_FAULT_VALUE_LOCAL_NAME) == 0) + { + if(builder_helper->subcode_value_present) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MULTIPLE_SUB_CODE_VALUES_ENCOUNTERED, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + else + { + + axiom_soap_fault_sub_code_t *sub_code = NULL; + axiom_soap_fault_code_t *code = NULL; + axiom_soap_fault_value_t *value = NULL; + code = axiom_soap_fault_get_code(soap_fault, env); + + if(!code) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "fault code null when it should not be null"); + return AXIS2_FAILURE; + } + + sub_code = axiom_soap_fault_code_get_sub_code(code, env); + if(!sub_code) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "fault subcode null when it should not be null"); + return AXIS2_FAILURE; + } + value = axiom_soap_fault_value_create(env); + if(!value) + { + return AXIS2_FAILURE; + } + + axiom_soap_fault_value_set_base_node(value, env, om_ele_node); + + axiom_soap_fault_sub_code_set_value(sub_code, env, value); + + builder_helper->subcode_value_present = AXIS2_TRUE; + builder_helper->sub_sub_code_present = AXIS2_FALSE; + builder_helper->sub_code_processing = AXIS2_FALSE; + } + } + else if(axutil_strcmp(ele_localname, AXIOM_SOAP12_SOAP_FAULT_SUB_CODE_LOCAL_NAME) == 0) + { + if(builder_helper->subcode_value_present) + { + if(!(builder_helper->sub_sub_code_present)) + { + axiom_soap_fault_code_t *fault_code = NULL; + axiom_soap_fault_sub_code_t *parent_subcode = NULL; + axiom_soap_fault_sub_code_t *subcode = NULL; + + subcode = axiom_soap_fault_sub_code_create(env); + if(!subcode) + { + return AXIS2_FAILURE; + } + + axiom_soap_fault_sub_code_set_base_node(subcode, env, om_ele_node); + + fault_code = axiom_soap_fault_get_code(soap_fault, env); + if(!fault_code) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "fault code null when it should not be null"); + return AXIS2_FAILURE; + } + parent_subcode = axiom_soap_fault_code_get_sub_code(fault_code, env); + if(!parent_subcode) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "fault subcode null when it should not be null"); + return AXIS2_FAILURE; + } + + axiom_soap_fault_sub_code_set_sub_code(parent_subcode, env, subcode); + + builder_helper->subcode_value_present = AXIS2_FALSE; + builder_helper->sub_sub_code_present = AXIS2_TRUE; + builder_helper->sub_code_processing = AXIS2_TRUE; + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_MULTIPLE_SUB_CODE_VALUES_ENCOUNTERED, AXIS2_FAILURE); + + return AXIS2_FAILURE; + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SOAP_FAULT_VALUE_SHOULD_BE_PRESENT_BEFORE_SUB_CODE, + AXIS2_FAILURE); + + return AXIS2_FAILURE; + + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_THIS_LOCALNAME_IS_NOT_SUPPORTED_INSIDE_THE_SUB_CODE_ELEMENT, + AXIS2_FAILURE); + + return AXIS2_FAILURE; + } + } + else if(axiom_soap_builder_is_processing_detail_elements(builder_helper->soap_builder, env)) + { + + int detail_element_level = 0; + axis2_bool_t local_name_exists = AXIS2_FALSE; + int i = 0; + if(!(builder_helper->detail_element_names)) + { + return AXIS2_FAILURE; + } + + for(i = 0; i < axutil_array_list_size(builder_helper->detail_element_names, env); i++) + { + if(axutil_strcmp(parent_localname, axutil_array_list_get( + builder_helper->detail_element_names, env, i)) == 0) + { + local_name_exists = AXIS2_TRUE; + detail_element_level = i + 1; + } + } + if(local_name_exists) + { + axutil_array_list_add(builder_helper->detail_element_names, env, ele_localname); + } + else + { + return AXIS2_FAILURE; + } + } + } + return AXIS2_SUCCESS; +} diff --git a/axiom/src/soap/soap_body.c b/axiom/src/soap/soap_body.c new file mode 100644 index 0000000..8fb7d8f --- /dev/null +++ b/axiom/src/soap/soap_body.c @@ -0,0 +1,547 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "_axiom_soap_envelope.h" +#include "_axiom_soap_body.h" +#include +#include +#include +#include +#include +#include +#include +#include "_axiom_soap_fault_value.h" +#include "_axiom_soap_fault_text.h" +#include + +struct axiom_soap_body +{ + axiom_node_t *om_ele_node; + + axis2_bool_t has_fault; + + axiom_soap_fault_t *soap_fault; + + axiom_soap_builder_t *soap_builder; + + int soap_version; +}; + +AXIS2_EXTERN axiom_soap_body_t *AXIS2_CALL +axiom_soap_body_create( + const axutil_env_t * env) +{ + axiom_soap_body_t *soap_body = NULL; + + soap_body = (axiom_soap_body_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_soap_body_t)); + + if(!soap_body) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + soap_body->om_ele_node = NULL; + soap_body->soap_builder = NULL; + soap_body->has_fault = AXIS2_FALSE; + soap_body->soap_fault = NULL; + + return soap_body; +} + +AXIS2_EXTERN axiom_soap_body_t *AXIS2_CALL +axiom_soap_body_create_with_parent( + const axutil_env_t * env, + axiom_soap_envelope_t * envelope) +{ + axiom_soap_body_t *soap_body = NULL; + axiom_element_t *ele = NULL; + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + axiom_namespace_t *om_ns = NULL; + + AXIS2_PARAM_CHECK(env->error, envelope, NULL); + + soap_body = axiom_soap_body_create(env); + if(!soap_body) + { + return NULL; + } + + /*get parent node from SOAP envelope */ + parent_node = axiom_soap_envelope_get_base_node(envelope, env); + if(!parent_node) + { + axiom_soap_body_free(soap_body, env); + return NULL; + } + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + + if(!parent_ele) + { + axiom_soap_body_free(soap_body, env); + return NULL; + } + + om_ns = axiom_element_get_namespace(parent_ele, env, parent_node); + + ele = axiom_element_create(env, parent_node, AXIOM_SOAP_BODY_LOCAL_NAME, om_ns, + &(soap_body->om_ele_node)); + if(!ele) + { + axiom_soap_body_free(soap_body, env); + return NULL; + } + + axiom_soap_envelope_set_body(envelope, env, soap_body); + + return soap_body; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_body_free( + axiom_soap_body_t * soap_body, + const axutil_env_t * env) +{ + + if(soap_body->soap_fault) + { + axiom_soap_fault_free(soap_body->soap_fault, env); + soap_body->soap_fault = NULL; + } + AXIS2_FREE(env->allocator, soap_body); + soap_body = NULL; + return; +} + +/** + * Indicates whether a soap fault is available with this soap body + * @param soap_body axiom_soap_body struct + * @param env environment must not be null + * @return AXIS2_TRUE if fault is available, AXIS2_FALSE otherwise + */ +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_soap_body_has_fault( + axiom_soap_body_t * soap_body, + const axutil_env_t * env) +{ + if(soap_body->soap_fault) + { + soap_body->has_fault = AXIS2_TRUE; + } + else + { + while(!axiom_node_is_complete(soap_body->om_ele_node, env)) + { + if(axiom_soap_builder_next(soap_body->soap_builder, env) != AXIS2_SUCCESS) + { + /* problem in building the SOAP body. Note that has_fault is about soap fault, + * not about problem in building the node. So, even though there is a problem + * building the body, has_fault should be AXIS2_FALSE + */ + break; + } + + if(soap_body->soap_fault) + { + soap_body->has_fault = AXIS2_TRUE; + break; + } + } + } + + return soap_body->has_fault; +} + +/** + * Returns the axiom_soap_fault_t struct in this axiom_soap_bodY_t + * struct + * + * @return the SOAPFault object in this SOAPBody + * object + */ +AXIS2_EXTERN axiom_soap_fault_t *AXIS2_CALL +axiom_soap_body_get_fault( + axiom_soap_body_t * soap_body, + const axutil_env_t * env) +{ + if(soap_body->soap_fault) + { + return soap_body->soap_fault; + } + else if(soap_body->soap_builder) + { + while(!(soap_body->soap_fault) && !(axiom_node_is_complete(soap_body->om_ele_node, env))) + { + int status = AXIS2_SUCCESS; + status = axiom_soap_builder_next(soap_body->soap_builder, env); + if(status == AXIS2_FAILURE) + { + return NULL; + } + } + if(soap_body->soap_fault) + { + soap_body->has_fault = AXIS2_TRUE; + return soap_body->soap_fault; + } + } + return NULL; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_soap_body_get_base_node( + axiom_soap_body_t * soap_body, + const axutil_env_t * env) +{ + return soap_body->om_ele_node; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_body_set_base_node( + axiom_soap_body_t * soap_body, + const axutil_env_t * env, + axiom_node_t * node) +{ + AXIS2_PARAM_CHECK(env->error, node, AXIS2_FAILURE); + if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_BASE_TYPE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + soap_body->om_ele_node = node; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_body_set_builder( + axiom_soap_body_t * soap_body, + const axutil_env_t * env, + axiom_soap_builder_t * builder) +{ + AXIS2_PARAM_CHECK(env->error, builder, AXIS2_FAILURE); + + soap_body->soap_builder = builder; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_soap_builder_t *AXIS2_CALL +axiom_soap_body_get_builder( + axiom_soap_body_t * soap_body, + const axutil_env_t * env) +{ + if(!soap_body) + { + return NULL; + } + return soap_body->soap_builder; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_body_build( + axiom_soap_body_t * soap_body, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + axiom_node_t *xop_node = NULL; + axis2_bool_t is_replaced = AXIS2_FALSE; + axiom_element_t *xop_element = NULL; + + if(soap_body->om_ele_node && soap_body->soap_builder) + { + xop_node + = axiom_util_get_node_by_local_name(env, soap_body->om_ele_node, AXIS2_XOP_INCLUDE); + + if(xop_node) + { + xop_element = (axiom_element_t *)axiom_node_get_data_element(xop_node, env); + if(xop_element) + { + is_replaced = axiom_soap_builder_replace_xop(soap_body->soap_builder, env, + xop_node, xop_element); + } + } + + while(axiom_node_is_complete(soap_body->om_ele_node, env) != AXIS2_TRUE) + { + status = axiom_soap_builder_next(soap_body->soap_builder, env); + if(status == AXIS2_FAILURE) + { + return AXIS2_FAILURE; + } + } + } + return AXIS2_SUCCESS; +} + +/** + This is an internal function + + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_body_set_fault( + axiom_soap_body_t * soap_body, + const axutil_env_t * env, + axiom_soap_fault_t * soap_fault) +{ + AXIS2_PARAM_CHECK(env->error, soap_fault, AXIS2_FAILURE); + if(soap_body->soap_fault) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_ONLY_ONE_SOAP_FAULT_ALLOWED_IN_BODY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + else + { + soap_body->soap_fault = soap_fault; + soap_body->has_fault = AXIS2_TRUE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_body_add_child( + axiom_soap_body_t * soap_body, + const axutil_env_t * env, + axiom_node_t * child) +{ + AXIS2_PARAM_CHECK(env->error, child, AXIS2_FAILURE); + + if(soap_body->om_ele_node) + { + return axiom_node_add_child(soap_body->om_ele_node, env, child); + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN int AXIS2_CALL +axiom_soap_body_get_soap_version( + axiom_soap_body_t * soap_body, + const axutil_env_t * env) +{ + axiom_element_t *body_ele = NULL; + axiom_namespace_t *om_ns = NULL; + axis2_char_t *uri = NULL; + + if(!soap_body->om_ele_node) + { + return AXIS2_FAILURE; + } + body_ele = axiom_node_get_data_element(soap_body->om_ele_node, env); + if(!body_ele) + { + return AXIS2_FAILURE; + } + om_ns = axiom_element_get_namespace(body_ele, env, soap_body->om_ele_node); + if(!om_ns) + { + return AXIS2_FAILURE; + } + uri = axiom_namespace_get_uri(om_ns, env); + if(uri) + { + if(axutil_strcmp(uri, AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI) == 0) + { + return AXIOM_SOAP11; + } + else if(axutil_strcmp(uri, AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI) == 0) + { + return AXIOM_SOAP12; + } + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_body_convert_fault_to_soap11( + axiom_soap_body_t * soap_body, + const axutil_env_t * env) +{ + if(soap_body) + { + axiom_soap_fault_t *soap_fault = NULL; + if(axiom_soap_body_has_fault(soap_body, env)) + { + soap_fault = axiom_soap_body_get_fault(soap_body, env); + if(soap_fault) + { + axiom_soap_fault_code_t *fault_code = NULL; + axiom_soap_fault_reason_t *fault_reason = NULL; + axiom_soap_fault_detail_t *fault_detail = NULL; + axiom_soap_fault_role_t *fault_role = NULL; + fault_code = axiom_soap_fault_get_code(soap_fault, env); + if(fault_code) + { + axiom_node_t *fault_code_om_node = NULL; + axiom_element_t *fault_code_om_ele = NULL; + axiom_node_t *fault_value_om_node = NULL; + axiom_element_t *fault_value_om_ele = NULL; + axiom_soap_fault_value_t *fault_value = NULL; + axis2_char_t *text = NULL; + + fault_code_om_node = axiom_soap_fault_code_get_base_node(fault_code, env); + if(fault_code_om_node) + { + fault_code_om_ele = (axiom_element_t *)axiom_node_get_data_element( + fault_code_om_node, env); + if(fault_code_om_ele) + { + axiom_element_set_localname(fault_code_om_ele, env, + AXIOM_SOAP11_SOAP_FAULT_CODE_LOCAL_NAME); + + fault_value = axiom_soap_fault_code_get_value(fault_code, env); + + if(fault_value) + { + fault_value_om_node = axiom_soap_fault_value_get_base_node( + fault_value, env); + if(fault_value_om_node) + { + fault_value_om_ele + = (axiom_element_t *)axiom_node_get_data_element( + fault_value_om_node, env); + if(fault_value_om_ele) + { + text = axiom_element_get_text(fault_value_om_ele, env, + fault_value_om_node); + if(text) + { + axiom_element_set_text(fault_code_om_ele, env, text, + fault_code_om_node); + } + } + axiom_node_free_tree(fault_value_om_node, env); + axiom_soap_fault_value_set_base_node(fault_value, env, NULL); + } + } + } + } + } + fault_reason = axiom_soap_fault_get_reason(soap_fault, env); + if(fault_reason) + { + axiom_node_t *fault_reason_om_node = NULL; + axiom_element_t *fault_reason_om_ele = NULL; + axiom_node_t *fault_text_om_node = NULL; + axiom_element_t *fault_text_om_ele = NULL; + axiom_soap_fault_text_t *fault_text = NULL; + axis2_char_t *text = NULL; + + fault_reason_om_node = axiom_soap_fault_reason_get_base_node(fault_reason, env); + if(fault_reason_om_node) + { + fault_reason_om_ele = (axiom_element_t *)axiom_node_get_data_element( + fault_reason_om_node, env); + + if(fault_reason_om_ele) + { + + axiom_element_set_localname(fault_reason_om_ele, env, + AXIOM_SOAP11_SOAP_FAULT_STRING_LOCAL_NAME); + + fault_text = axiom_soap_fault_reason_get_first_soap_fault_text( + fault_reason, env); + if(fault_text) + { + fault_text_om_node = axiom_soap_fault_text_get_base_node( + fault_text, env); + if(fault_text_om_node) + { + fault_text_om_ele + = (axiom_element_t *)axiom_node_get_data_element( + fault_text_om_node, env); + if(fault_text_om_ele) + { + text = axiom_element_get_text(fault_text_om_ele, env, + fault_text_om_node); + if(text) + { + axiom_element_set_text(fault_reason_om_ele, env, text, + fault_reason_om_node); + } + } + axiom_node_free_tree(fault_text_om_node, env); + axiom_soap_fault_text_set_base_node(fault_text, env, NULL); + } + } + } + } + } + + fault_role = axiom_soap_fault_get_role(soap_fault, env); + if(fault_role) + { + axiom_node_t *fault_role_om_node = NULL; + axiom_element_t *fault_role_om_ele = NULL; + + fault_role_om_node = axiom_soap_fault_role_get_base_node(fault_role, env); + if(fault_role_om_node) + { + fault_role_om_ele = (axiom_element_t *)axiom_node_get_data_element( + fault_role_om_node, env); + if(fault_role_om_ele) + { + axiom_element_set_localname(fault_role_om_ele, env, + AXIOM_SOAP11_SOAP_FAULT_ACTOR_LOCAL_NAME); + } + } + } + + fault_detail = axiom_soap_fault_get_detail(soap_fault, env); + if(fault_detail) + { + axiom_node_t *fault_detail_om_node = NULL; + axiom_element_t *fault_detail_om_ele = NULL; + fault_detail_om_node = axiom_soap_fault_detail_get_base_node(fault_detail, env); + if(fault_detail_om_node) + { + fault_detail_om_ele = (axiom_element_t *)axiom_node_get_data_element( + fault_detail_om_node, env); + if(fault_detail_om_ele) + { + axiom_element_set_localname(fault_detail_om_ele, env, + AXIOM_SOAP11_SOAP_FAULT_DETAIL_LOCAL_NAME); + } + } + } + } + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_body_process_attachments( + axiom_soap_body_t * soap_body, + const axutil_env_t * env, + void *user_pram, + axis2_char_t *callback_name) +{ + axis2_status_t status = AXIS2_FAILURE; + + status = axiom_soap_builder_create_attachments(soap_body->soap_builder, env, user_pram, + callback_name); + + if(status == AXIS2_FAILURE) + { + return status; + } + else + { + return axiom_soap_body_build(soap_body, env); + } +} + + diff --git a/axiom/src/soap/soap_builder.c b/axiom/src/soap/soap_builder.c new file mode 100644 index 0000000..6960c03 --- /dev/null +++ b/axiom/src/soap/soap_builder.c @@ -0,0 +1,1206 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "_axiom_soap_envelope.h" +#include "_axiom_soap_header.h" +#include "axiom_soap11_builder_helper.h" +#include "axiom_soap12_builder_helper.h" +#include +#include "_axiom_soap_body.h" +#include "_axiom_soap_header_block.h" +#include +#include "_axiom_soap_fault.h" +#include + +static axis2_status_t +axiom_soap_builder_construct_node( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env, + axiom_node_t * om_element_node); + +static axis2_status_t +axiom_soap_builder_identify_soap_version( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env, + const axis2_char_t * soap_version_uri_from_transport); + +static axis2_status_t +axiom_soap_builder_parse_headers( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env); + +static axis2_status_t +axiom_soap_builder_process_namespace_data( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env, + axiom_node_t * om_node); + +static axis2_status_t +axiom_soap_builder_construct_soap_header( + axiom_soap_builder_t *soap_builder, + const axutil_env_t *env, + axiom_node_t *om_node); + +static axis2_status_t +axiom_soap_builder_construct_soap_body( + axiom_soap_builder_t *soap_builder, + const axutil_env_t *env, + axiom_node_t *om_node); + +static axis2_status_t +axiom_soap_builder_construct_soap_fault( + axiom_soap_builder_t *soap_builder, + const axutil_env_t *env, + axiom_node_t *om_node); + +static axis2_status_t +axiom_soap_builder_construct_xop_include( + axiom_soap_builder_t *soap_builder, + const axutil_env_t *env, + axiom_node_t *om_element_node); + +struct axiom_soap_builder +{ + axiom_stax_builder_t *om_builder; + + axiom_soap_envelope_t *soap_envelope; + + axis2_bool_t header_present; + + axis2_bool_t body_present; + + int element_level; + + axis2_bool_t processing_fault; + + axis2_bool_t processing_detail_elements; + + axis2_char_t *sender_fault_code; + + axis2_char_t *receiver_fault_code; + + axis2_bool_t processing_mandatory_fault_elements; + + void *builder_helper; + + axiom_namespace_t *envelope_ns; + + int soap_version; + + int last_node_status; + + axis2_bool_t done; + + axutil_hash_t *mime_body_parts; + + axiom_mime_parser_t *mime_parser; + + AXIS2_READ_INPUT_CALLBACK callback; + + void *callback_ctx; + +}; + +typedef enum axis2_builder_last_node_states +{ + AXIS2_BUILDER_LAST_NODE_NULL = 0, + AXIS2_BUILDER_LAST_NODE_NOT_NULL +} axis2_builder_last_node_states; + +#define AXIS2_MAX_EVENT 100 + +AXIS2_EXTERN axiom_soap_builder_t *AXIS2_CALL +axiom_soap_builder_create( + const axutil_env_t * env, + axiom_stax_builder_t * stax_builder, + const axis2_char_t * soap_version) +{ + axiom_soap_builder_t *soap_builder = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + AXIS2_PARAM_CHECK(env->error, stax_builder, NULL); + + soap_builder = (axiom_soap_builder_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_soap_builder_t)); + + if(soap_builder == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + soap_builder->done = AXIS2_FALSE; + soap_builder->body_present = AXIS2_FALSE; + soap_builder->builder_helper = NULL; + soap_builder->element_level = 0; + soap_builder->header_present = AXIS2_FALSE; + soap_builder->processing_detail_elements = AXIS2_FALSE; + soap_builder->processing_fault = AXIS2_FALSE; + soap_builder->processing_mandatory_fault_elements = AXIS2_FALSE; + soap_builder->receiver_fault_code = NULL; + soap_builder->sender_fault_code = NULL; + soap_builder->soap_version = AXIOM_SOAP12; + soap_builder->last_node_status = -1; + soap_builder->envelope_ns = NULL; + soap_builder->soap_envelope = NULL; + soap_builder->mime_body_parts = NULL; + soap_builder->om_builder = stax_builder; + soap_builder->mime_parser = NULL; + soap_builder->callback = NULL; + soap_builder->callback_ctx = NULL; + + status = axiom_soap_builder_identify_soap_version(soap_builder, env, soap_version); + if(status == AXIS2_FAILURE) + { + axiom_soap_builder_free(soap_builder, env); + return NULL; + } + status = axiom_soap_builder_parse_headers(soap_builder, env); + if(status == AXIS2_FAILURE) + { + axiom_soap_builder_free(soap_builder, env); + return NULL; + } + return soap_builder; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_builder_free( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env) +{ + if(!soap_builder) + { + return; + } + if(soap_builder->builder_helper) + { + if(soap_builder->soap_version == AXIOM_SOAP11 && soap_builder->builder_helper) + { + axiom_soap11_builder_helper_free( + (axiom_soap11_builder_helper_t *)(soap_builder->builder_helper), env); + soap_builder->builder_helper = NULL; + } + else if(soap_builder->soap_version == AXIOM_SOAP12 && soap_builder->builder_helper) + { + axiom_soap12_builder_helper_free( + (axiom_soap12_builder_helper_t *)(soap_builder->builder_helper), env); + soap_builder->builder_helper = NULL; + } + } + + if(soap_builder->om_builder) + { + axiom_stax_builder_free(soap_builder->om_builder, env); + soap_builder->om_builder = NULL; + } + + if(soap_builder->mime_body_parts) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + const void *key = NULL; + for(hi = axutil_hash_first(soap_builder->mime_body_parts, env); hi; hi = axutil_hash_next( + env, hi)) + { + axutil_hash_this(hi, &key, NULL, &val); + + if(key) + { + AXIS2_FREE(env->allocator, (char *)key); + } + + val = NULL; + key = NULL; + } + + axutil_hash_free(soap_builder->mime_body_parts, env); + soap_builder->mime_body_parts = NULL; + } + + if(soap_builder->mime_parser) + { + axiom_mime_parser_free(soap_builder->mime_parser, env); + soap_builder->mime_parser = NULL; + } + + if(soap_builder->callback_ctx) + { + axis2_callback_info_t *callback_info = NULL; + + callback_info = (axis2_callback_info_t *)(soap_builder->callback_ctx); + if(callback_info) + { + if(callback_info->chunked_stream) + { + axutil_http_chunked_stream_free(callback_info->chunked_stream, env); + callback_info->chunked_stream = NULL; + } + + AXIS2_FREE(env->allocator, callback_info); + callback_info = NULL; + soap_builder->callback_ctx = NULL; + } + } + + if(soap_builder) + { + AXIS2_FREE(env->allocator, soap_builder); + soap_builder = NULL; + } + + return; +} + +AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL +axiom_soap_builder_get_soap_envelope( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + + if(!soap_builder) + { + return NULL; + } + if(!(soap_builder->om_builder)) + { + return NULL; + } + while(!(soap_builder->soap_envelope) && !axiom_stax_builder_is_complete( + soap_builder->om_builder, env)) + { + status = axiom_soap_builder_next(soap_builder, env); + if(status == AXIS2_FAILURE) + { + break; + } + } + + return soap_builder->soap_envelope; +} + +AXIS2_EXTERN axiom_document_t *AXIS2_CALL axiom_soap_builder_get_document( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env) +{ + if (!soap_builder) + { + return NULL; + } + if (soap_builder->om_builder) + { + return axiom_stax_builder_get_document(soap_builder->om_builder, env); + } + else + return NULL; +} + +/** + * Builds next element of the OM structure + * @param builder pointer to the SOAP Builder struct + * @param env Environment. MUST NOT be NULL + * @return AXIS2_SUCCESS if the next element is present else AXIS2_FAILURE + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_builder_next( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env) +{ + int current_event = AXIS2_MAX_EVENT; + int status = AXIS2_SUCCESS; + + if((!soap_builder) || (soap_builder->done) || (!soap_builder->om_builder)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid soap builder"); + return AXIS2_FAILURE; + } + + /* Get the status of previous node before building next node. We need the previous state of the + * node to identify very first element, which is SOAP Envelope. If last_node_status is + * AXIS2_BUILDER_LAST_NODE_NULL, then it means next node is SOAP Envelope + */ + if(axiom_stax_builder_get_lastnode(soap_builder->om_builder, env)) + { + soap_builder->last_node_status = AXIS2_BUILDER_LAST_NODE_NOT_NULL; + } + else + { + soap_builder->last_node_status = AXIS2_BUILDER_LAST_NODE_NULL; + } + + current_event = axiom_stax_builder_next_with_token(soap_builder->om_builder, env); + if(current_event == AXIOM_XML_READER_START_ELEMENT + || current_event == AXIOM_XML_READER_EMPTY_ELEMENT) + { + axiom_node_t *current_node = axiom_stax_builder_get_lastnode(soap_builder->om_builder, env); + if(current_node) + { + status = axiom_soap_builder_construct_node(soap_builder, env, current_node); + } + else + { + /* there is an error. So, don't continue building it */ + soap_builder->done = AXIS2_TRUE; + status = AXIS2_FAILURE; + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error occurred when building node"); + } + } + else if(current_event == -1) + { + /* there is an error. So, don't continue building it */ + soap_builder->done = AXIS2_TRUE; + status = AXIS2_FAILURE; + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error occurred when building node"); + } + + /* for any other event types, return AXIS2_SUCCESS as the return value. */ + + return status; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_soap_builder_get_document_element( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env) +{ + axiom_node_t *document_node = NULL; + if(soap_builder->soap_envelope) + { + document_node = axiom_soap_envelope_get_base_node(soap_builder->soap_envelope, env); + } + + return document_node; +} + +static axis2_status_t +axiom_soap_builder_construct_node( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env, + axiom_node_t * om_element_node) +{ + axiom_element_t *om_element = NULL; + const axis2_char_t *ele_localname = NULL; + int element_level = 0; + int status = AXIS2_SUCCESS; + axiom_node_t *parent = NULL; + + /* get OM element struct from node */ + om_element = (axiom_element_t *)axiom_node_get_data_element(om_element_node, env); + if(!om_element) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot construct node. Invalid element"); + return AXIS2_FAILURE; + } + + /* get element local name */ + ele_localname = axiom_element_get_localname(om_element, env); + if(!ele_localname) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot construct node. Invalid element name"); + return AXIS2_FAILURE; + } + + parent = axiom_node_get_parent(om_element_node, env); + if(!parent) + { + /* parent node doesn't exist means, this should be SOAP Envelope */ + if(soap_builder->last_node_status != AXIS2_BUILDER_LAST_NODE_NULL) + { + /* this means, there are two elements in the first level */ + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SOAP_MESSAGE_FIRST_ELEMENT_MUST_CONTAIN_LOCAL_NAME, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Soap message can contain only one SOAP Envelope as the top level element"); + return AXIS2_FAILURE; + } + + if(axutil_strcasecmp(ele_localname, AXIOM_SOAP_ENVELOPE_LOCAL_NAME) != 0) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SOAP_MESSAGE_FIRST_ELEMENT_MUST_CONTAIN_LOCAL_NAME, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "SOAP message first element must be Envelope"); + return AXIS2_FAILURE; + } + + /** create a null soap envelope struct */ + soap_builder->soap_envelope = axiom_soap_envelope_create_null(env); + if(!soap_builder->soap_envelope) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Unable to create SOAP Envelope"); + return AXIS2_FAILURE; + } + + /** wrap this OM node in it */ + axiom_soap_envelope_set_base_node(soap_builder->soap_envelope, env, om_element_node); + axiom_soap_envelope_set_builder(soap_builder->soap_envelope, env, soap_builder); + status = axiom_soap_builder_process_namespace_data(soap_builder, env, om_element_node); + if(status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "SOAP Envelope is having invalid namespace"); + } + + return status; + } + + /** a parent node exist , so not soap envelope. Can be either header/body/children of them */ + + /* get element level of this OM element. Envelope will be in element_level 1. Body and Header + * will be in element level 2. SOAP fault will be child of Body, so it will be in level 3*/ + element_level = axiom_stax_builder_get_element_level(soap_builder->om_builder, env); + if(axiom_stax_builder_get_current_event(soap_builder->om_builder, env) + == AXIOM_XML_READER_EMPTY_ELEMENT) + { + /* if it is an empty element, increase the element level. This is because the element level + * is incremented by STAX builder only if tag is identified. It will not be + * incremented if tag is seen. But for our logic, even empty element should be + * considered as full element. so, = . */ + ++element_level; + } + + if(element_level == 2) + { + /* At this level, we can only have soap:Header or soap:Body */ + status = axiom_soap_builder_process_namespace_data(soap_builder, env, om_element_node); + if(status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "invalid SOAP namespace"); + return AXIS2_FAILURE; + } + + if(axutil_strcmp(ele_localname, AXIOM_SOAP_HEADER_LOCAL_NAME) == 0) + { + /* this is the soap header element */ + status = axiom_soap_builder_construct_soap_header(soap_builder, env, om_element_node); + } + else if(axutil_strcmp(ele_localname, AXIOM_SOAP_BODY_LOCAL_NAME) == 0) + { + /* This is the SOAP Body element */ + status = axiom_soap_builder_construct_soap_body(soap_builder, env, om_element_node); + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SOAP_BUILDER_ENVELOPE_CAN_HAVE_ONLY_HEADER_AND_BODY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "SOAP builder found a child element other than header or body in envelope element"); + return AXIS2_FAILURE; + } + } + else if(element_level == 3) + { + axiom_element_t *parent_ele = NULL; + axis2_char_t *parent_localname = NULL; + + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent, env); + if(parent_ele) + { + parent_localname = axiom_element_get_localname(parent_ele, env); + } + + if(!parent_localname) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot identify parent element local name"); + return AXIS2_FAILURE; + } + + if(axutil_strcasecmp(parent_localname, AXIOM_SOAP_HEADER_LOCAL_NAME) == 0) + { + axiom_soap_header_block_t *header_block = NULL; + axiom_soap_header_t *soap_header = NULL; + + soap_header = axiom_soap_envelope_get_header(soap_builder->soap_envelope, env); + if(!soap_header) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot get SOAP Header from OM Envelope"); + return AXIS2_FAILURE; + } + + header_block = axiom_soap_header_block_create(env); + if(!header_block) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create SOAP Header block"); + return AXIS2_FAILURE; + } + + axiom_soap_header_block_set_base_node(header_block, env, om_element_node); + axiom_soap_header_set_header_block(soap_header, env, header_block); + axiom_soap_header_block_set_soap_version(header_block, env, soap_builder->soap_version); + } + else if(axutil_strcasecmp(parent_localname, AXIOM_SOAP_BODY_LOCAL_NAME) == 0) + { + /* if the node is or MTOM message */ + if(axutil_strcmp(ele_localname, AXIS2_XOP_INCLUDE) == 0) + { + return axiom_soap_builder_construct_xop_include(soap_builder, env, om_element_node); + } + + if(axutil_strcasecmp(ele_localname, AXIOM_SOAP_BODY_FAULT_LOCAL_NAME) == 0) + { + return axiom_soap_builder_construct_soap_fault(soap_builder, env, om_element_node); + } + + /* We don't need to process any other children of SOAP Body. */ + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SOAP_BUILDER_ENVELOPE_CAN_HAVE_ONLY_HEADER_AND_BODY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "SOAP builder found a child element other than header or body in envelope element"); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; + } + else if(element_level > 3) + { + if(soap_builder->processing_fault) + { + if(soap_builder->soap_version == AXIOM_SOAP11) + { + status = axiom_soap11_builder_helper_handle_event((axiom_soap11_builder_helper_t *) + soap_builder->builder_helper, env, om_element_node, element_level); + } + else if(soap_builder->soap_version == AXIOM_SOAP12) + { + status = axiom_soap12_builder_helper_handle_event((axiom_soap12_builder_helper_t *) + soap_builder->builder_helper, env, om_element_node, element_level); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Unknown SOAP Version"); + status = AXIS2_FAILURE; + } + } + + /* if the node is or MTOM message */ + else if(axutil_strcmp(ele_localname, AXIS2_XOP_INCLUDE) == 0) + { + return axiom_soap_builder_construct_xop_include(soap_builder, env, om_element_node); + } + + /* we don't need to consider any other elements at this level. */ + } + return status; +} + +static axis2_status_t +axiom_soap_builder_construct_soap_header( + axiom_soap_builder_t *soap_builder, + const axutil_env_t *env, + axiom_node_t *om_node) +{ + axiom_soap_header_t *soap_header = NULL; + if(soap_builder->header_present) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOAP_BUILDER_MULTIPLE_HEADERS_ENCOUNTERED, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "SOAP builder encountered multiple headers"); + return AXIS2_FAILURE; + } + if(soap_builder->body_present) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOAP_BUILDER_HEADER_BODY_WRONG_ORDER, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "SOAP builder encountered body element first and header next"); + return AXIS2_FAILURE; + } + + soap_builder->header_present = AXIS2_TRUE; + soap_header = axiom_soap_header_create(env); + if(!soap_header) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Unable to create SOAP Header"); + return AXIS2_FAILURE; + } + + axiom_soap_header_set_base_node(soap_header, env, om_node); + axiom_soap_envelope_set_header(soap_builder->soap_envelope, env, soap_header); + axiom_soap_header_set_builder(soap_header, env, soap_builder); + axiom_soap_header_set_soap_version(soap_header, env, soap_builder->soap_version); + + return AXIS2_SUCCESS; +} + +static axis2_status_t +axiom_soap_builder_construct_soap_body( + axiom_soap_builder_t *soap_builder, + const axutil_env_t *env, + axiom_node_t *om_node) +{ + axiom_soap_body_t *soap_body = NULL; + if(soap_builder->body_present) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SOAP_BUILDER_MULTIPLE_BODY_ELEMENTS_ENCOUNTERED, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "SOAP builder multiple body elements encountered"); + return AXIS2_FAILURE; + } + + soap_builder->body_present = AXIS2_TRUE; + soap_body = axiom_soap_body_create(env); + if(!soap_body) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Unable to create SOAP Body"); + return AXIS2_FAILURE; + } + + axiom_soap_body_set_base_node(soap_body, env, om_node); + axiom_soap_body_set_builder(soap_body, env, soap_builder); + axiom_soap_envelope_set_body(soap_builder->soap_envelope, env, soap_body); + + return AXIS2_SUCCESS; +} + +static axis2_status_t +axiom_soap_builder_construct_soap_fault( + axiom_soap_builder_t *soap_builder, + const axutil_env_t *env, + axiom_node_t *om_node) +{ + axiom_soap_body_t *soap_body = NULL; + axiom_soap_fault_t *soap_fault = NULL; + axiom_namespace_t *env_ns = NULL; + + env_ns = axiom_soap_envelope_get_namespace(soap_builder->soap_envelope, env); + if(!env_ns) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot get soap envelope namespace"); + return AXIS2_FAILURE; + } + + soap_body = axiom_soap_envelope_get_body(soap_builder->soap_envelope, env); + if(!soap_body) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot get soap body from OM Envelope"); + return AXIS2_FAILURE; + } + + soap_fault = axiom_soap_fault_create(env); + if(!soap_fault) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create SOAP Fault structure"); + return AXIS2_FAILURE; + } + + axiom_soap_fault_set_base_node(soap_fault, env, om_node); + axiom_soap_body_set_fault(soap_body, env, soap_fault); + axiom_soap_fault_set_builder(soap_fault, env, soap_builder); + soap_builder->processing_fault = AXIS2_TRUE; + soap_builder->processing_mandatory_fault_elements = AXIS2_TRUE; + + if(axutil_strcmp(AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI, + axiom_namespace_get_uri(env_ns, env)) == 0) + { + soap_builder->builder_helper = axiom_soap12_builder_helper_create(env, soap_builder); + } + else if(axutil_strcmp(AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI, + axiom_namespace_get_uri(env_ns, env)) == 0) + { + soap_builder->builder_helper = axiom_soap11_builder_helper_create( + env, soap_builder,soap_builder->om_builder); + } + + if(!soap_builder->builder_helper) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create soap builder helper"); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +static axis2_status_t +axiom_soap_builder_construct_xop_include( + axiom_soap_builder_t *soap_builder, + const axutil_env_t *env, + axiom_node_t *om_element_node) +{ + axiom_namespace_t *ns = NULL; + axis2_char_t *uri = NULL; + axiom_element_t *om_element = NULL; + axutil_qname_t *qname = NULL; + axis2_char_t *id = NULL; + + om_element = (axiom_element_t *)axiom_node_get_data_element(om_element_node, env); + ns = axiom_element_get_namespace(om_element, env, om_element_node); + if(!ns) + { + /* this is not a xop:include element. so, we can safely return success */ + return AXIS2_SUCCESS; + } + + uri = axiom_namespace_get_uri(ns, env); + if((!uri) || (axutil_strcmp(uri, AXIS2_XOP_NAMESPACE_URI) != 0)) + { + /* this is not a xop:include element. so, we can safely return success */ + return AXIS2_SUCCESS; + } + + qname = axutil_qname_create(env, "href", NULL, NULL); + if(!qname) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create qname with value href"); + return AXIS2_FAILURE; + } + + id = axiom_element_get_attribute_value(om_element, env, qname); + axutil_qname_free(qname, env); + if(!id) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot get href ID of the xop:include element"); + return AXIS2_FAILURE; + } + + if(!axutil_strstr(id, "cid:")) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "ID of xop:include doesn't include 'cid:' part"); + return AXIS2_FAILURE; + } + + /* everything looks fine, so recursively build the OM tree, so that we can get data handlers */ + while(!axiom_node_is_complete(om_element_node, env)) + { + axiom_stax_builder_next_with_token(soap_builder->om_builder, env); + } + + if(soap_builder->mime_body_parts) + { + axiom_data_handler_t *data_handler = NULL; + axis2_char_t *id_decoded = NULL; + axiom_text_t *data_text = NULL; + axiom_node_t *data_om_node = NULL; + axiom_node_t *parent = NULL; + + /* Get the value of href id, after "cid:" */ + id += 4; + id_decoded = axutil_strdup(env, id); + axutil_url_decode(env, id_decoded, id_decoded); + + /* Find the data handler of given xop:include */ + data_handler = (axiom_data_handler_t *)axutil_hash_get( + soap_builder-> mime_body_parts, (void *)id_decoded, AXIS2_HASH_KEY_STRING); + if(!data_handler) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Cannot find data handler corresponding to id %s", id_decoded); + AXIS2_FREE(env->allocator, id_decoded); + return AXIS2_FAILURE; + } + + /* remove the element, and add the data handler as the child of + * xop:include's parent */ + parent = axiom_node_get_parent(om_element_node, env); + axiom_node_free_tree(om_element_node, env); + data_text = axiom_text_create_with_data_handler(env, parent, data_handler, &data_om_node); + axiom_text_set_content_id(data_text, env, id_decoded); + axiom_stax_builder_set_lastnode(soap_builder->om_builder,env, parent); + AXIS2_FREE(env->allocator, id_decoded); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot find mime_body_part in soap builder"); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +/* check whether the namespace of given node is either SOAP11 or SOAP12 namespace */ +static axis2_status_t +axiom_soap_builder_process_namespace_data( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env, + axiom_node_t * om_node) +{ + axiom_element_t *om_ele = NULL; + axiom_namespace_t *om_ns = NULL; + + om_ele = (axiom_element_t *)axiom_node_get_data_element(om_node, env); + om_ns = axiom_element_get_namespace(om_ele, env, om_node); + if(om_ns) + { + axis2_char_t *ns_uri = NULL; + ns_uri = axiom_namespace_get_uri(om_ns, env); + if(ns_uri) + { + if((axutil_strcmp(ns_uri, AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI) == 0) + || (axutil_strcmp(ns_uri, AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI) == 0)) + { + return AXIS2_SUCCESS; + } + } + } + + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_SOAP_NAMESPACE_URI, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid SOAP Namespace URI"); + return AXIS2_FAILURE; +} + +static axis2_status_t +axiom_soap_builder_identify_soap_version( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env, + const axis2_char_t * soap_version_uri_from_transport) +{ + axiom_namespace_t *om_ns = NULL; + axiom_node_t *envelope_node = NULL; + axiom_element_t *om_ele = NULL; + axis2_char_t *ns_uri = NULL; + + AXIS2_PARAM_CHECK(env->error, soap_version_uri_from_transport, AXIS2_FAILURE); + if(!soap_builder) + { + return AXIS2_FAILURE; + } + soap_builder->soap_envelope = axiom_soap_builder_get_soap_envelope(soap_builder, env); + + if(soap_builder->soap_envelope == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOAP_MESSAGE_DOES_NOT_CONTAIN_AN_ENVELOPE, + AXIS2_FAILURE); + AXIS2_LOG_CRITICAL(env->log, AXIS2_LOG_SI, + "SOAP message does not have a SOAP envelope element "); + return AXIS2_FAILURE; + } + + envelope_node = axiom_soap_envelope_get_base_node(soap_builder->soap_envelope, env); + + if(!envelope_node) + { + return AXIS2_FAILURE; + } + om_ele = (axiom_element_t *)axiom_node_get_data_element(envelope_node, env); + if(!om_ele) + { + return AXIS2_FAILURE; + } + om_ns = axiom_element_get_namespace(om_ele, env, envelope_node); + if(!om_ns) + { + return AXIS2_FAILURE; + } + ns_uri = axiom_namespace_get_uri(om_ns, env); + + if(ns_uri) + { + if(soap_version_uri_from_transport + && axutil_strcmp(soap_version_uri_from_transport, ns_uri) != 0) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_TRANSPORT_LEVEL_INFORMATION_DOES_NOT_MATCH_WITH_SOAP, AXIS2_FAILURE); + + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "AXIS2_ERROR_TRANSPORT_LEVEL_INFORMATION_DOES_NOT_MATCH_WITH_SOAP"); + return AXIS2_FAILURE; + } + if(axutil_strcmp(AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI, ns_uri) == 0) + { + soap_builder->soap_version = AXIOM_SOAP11; + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Identified soap version is soap11"); + + axiom_soap_envelope_set_soap_version_internal(soap_builder-> soap_envelope, env, + soap_builder-> soap_version); + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI, ns_uri) == 0) + { + soap_builder->soap_version = AXIOM_SOAP12; + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "identified soap version is soap12"); + + axiom_soap_envelope_set_soap_version_internal(soap_builder-> soap_envelope, env, + soap_builder-> soap_version); + + return AXIS2_SUCCESS; + } + } + return AXIS2_FAILURE; +} + +static axis2_status_t +axiom_soap_builder_parse_headers( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env) +{ + axiom_node_t *om_node = NULL; + axiom_soap_header_t *soap_header = NULL; + int status = AXIS2_SUCCESS; + if(!soap_builder) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Soap Builder is NULL"); + return AXIS2_FAILURE; + } + if(!soap_builder->soap_envelope) + { + return AXIS2_FAILURE; + } + soap_header = axiom_soap_envelope_get_header(soap_builder->soap_envelope, env); + + if(soap_header) + { + om_node = axiom_soap_header_get_base_node(soap_header, env); + if(om_node) + { + while(!axiom_node_is_complete(om_node, env)) + { + status = axiom_soap_builder_next(soap_builder, env); + if(status == AXIS2_FAILURE) + return AXIS2_FAILURE; + } + /*HACK: to fix AXIS2C-129 - Samisa */ + /* + axiom_stax_builder_set_element_level( + soap_builder->om_builder, env, 1); + */ + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_builder_set_bool_processing_mandatory_fault_elements( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env, + axis2_bool_t value) +{ + soap_builder->processing_mandatory_fault_elements = value; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_builder_set_processing_detail_elements( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env, + axis2_bool_t value) +{ + soap_builder->processing_detail_elements = value; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_soap_builder_is_processing_detail_elements( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env) +{ + return soap_builder->processing_detail_elements; +} + +AXIS2_EXTERN int AXIS2_CALL +axiom_soap_builder_get_soap_version( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env) +{ + return soap_builder->soap_version; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_builder_set_mime_body_parts( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env, + axutil_hash_t * map) +{ + soap_builder->mime_body_parts = map; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axiom_soap_builder_get_mime_body_parts( + axiom_soap_builder_t * builder, + const axutil_env_t * env) +{ + return builder->mime_body_parts; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_builder_set_mime_parser( + axiom_soap_builder_t * builder, + const axutil_env_t * env, + axiom_mime_parser_t *mime_parser) +{ + builder->mime_parser = mime_parser; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_builder_set_callback_function( + axiom_soap_builder_t * builder, + const axutil_env_t * env, + AXIS2_READ_INPUT_CALLBACK callback) +{ + builder->callback = callback; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_builder_set_callback_ctx( + axiom_soap_builder_t * builder, + const axutil_env_t * env, + void *callback_ctx) +{ + builder->callback_ctx = callback_ctx; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_builder_create_attachments( + axiom_soap_builder_t * builder, + const axutil_env_t * env, + void *user_param, + axis2_char_t *callback_name) +{ + axutil_hash_t *attachments_map = NULL; + axis2_char_t *mime_boundary = NULL; + + if(builder->mime_parser) + { + if(builder->callback_ctx) + { + mime_boundary = axiom_mime_parser_get_mime_boundary(builder->mime_parser, env); + + if(mime_boundary) + { + if(callback_name) + { + axiom_mime_parser_set_caching_callback_name(builder->mime_parser, env, + callback_name); + } + attachments_map = axiom_mime_parser_parse_for_attachments(builder->mime_parser, + env, builder->callback, builder->callback_ctx, mime_boundary, user_param); + + if(attachments_map) + { + builder->mime_body_parts = attachments_map; + return AXIS2_SUCCESS; + } + else + { + return AXIS2_FAILURE; + } + } + else + { + return AXIS2_FAILURE; + } + } + else + { + return AXIS2_FAILURE; + } + } + else + { + return AXIS2_FAILURE; + } +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_soap_builder_replace_xop( + axiom_soap_builder_t * builder, + const axutil_env_t * env, + axiom_node_t *om_element_node, + axiom_element_t *om_element) +{ + axiom_namespace_t *ns = NULL; + axis2_bool_t is_replaced = AXIS2_FALSE; + + ns = axiom_element_get_namespace(om_element, env, om_element_node); + if(ns) + { + axis2_char_t *uri = axiom_namespace_get_uri(ns, env); + if(uri) + { + if(axutil_strcmp(uri, AXIS2_XOP_NAMESPACE_URI) == 0) + { + axutil_qname_t *qname = NULL; + qname = axutil_qname_create(env, "href", NULL, NULL); + if(qname) + { + axis2_char_t *id = NULL; + id = axiom_element_get_attribute_value(om_element, env, qname); + if(id) + { + axis2_char_t *pos = NULL; + pos = axutil_strstr(id, "cid:"); + if(pos) + { + axiom_data_handler_t *data_handler = NULL; + id += 4; + + if(builder->mime_body_parts) + { + + axis2_char_t *id_decoded = NULL; + + id_decoded = axutil_strdup(env, id); + + axutil_url_decode(env, id_decoded, id_decoded); + + data_handler = (axiom_data_handler_t *)axutil_hash_get( + builder-> mime_body_parts, (void *)id_decoded, + AXIS2_HASH_KEY_STRING); + if(data_handler) + { + axiom_text_t *data_text = NULL; + axiom_node_t *data_om_node = NULL; + axiom_node_t *parent = NULL; + + parent = axiom_node_get_parent(om_element_node, env); + + /*remove the element */ + axiom_node_free_tree(om_element_node, env); + + data_text = axiom_text_create_with_data_handler(env, parent, + data_handler, &data_om_node); + + axiom_text_set_content_id(data_text, env, id_decoded); + /*axiom_stax_builder_set_lastnode + (soap_builder->om_builder, env, + parent);*/ + is_replaced = AXIS2_TRUE; + } + if(id_decoded) + { + AXIS2_FREE(env->allocator, id_decoded); + } + } + } + } + } + axutil_qname_free(qname, env); + } + } + } + + return is_replaced; +} + +AXIS2_EXTERN axiom_stax_builder_t *AXIS2_CALL +axiom_soap_builder_get_om_builder( + axiom_soap_builder_t * soap_builder, + const axutil_env_t * env) +{ + if(!soap_builder) + { + return NULL; + } + return soap_builder->om_builder; +} + diff --git a/axiom/src/soap/soap_envelope.c b/axiom/src/soap/soap_envelope.c new file mode 100644 index 0000000..48e10f7 --- /dev/null +++ b/axiom/src/soap/soap_envelope.c @@ -0,0 +1,631 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "_axiom_soap_envelope.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct axiom_soap_envelope +{ + /* corresponding om element node */ + axiom_node_t *om_ele_node; + /* soap version */ + int soap_version; + /* soap header */ + axiom_soap_header_t *header; + /* soap body */ + axiom_soap_body_t *body; + /* pointer to soap builder */ + axiom_soap_builder_t *soap_builder; + int ref; +}; +static axis2_status_t +check_and_set_soap_version( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env, + axiom_namespace_t * ns); + +AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL +axiom_soap_envelope_create_null( + const axutil_env_t * env) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + + soap_envelope = (axiom_soap_envelope_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_soap_envelope_t)); + if(!soap_envelope) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create a SOAP Envelope"); + return NULL; + } + soap_envelope->om_ele_node = NULL; + soap_envelope->soap_version = AXIOM_SOAP12; + soap_envelope->header = NULL; + soap_envelope->body = NULL; + soap_envelope->ref = 1; + soap_envelope->soap_builder = NULL; + + return soap_envelope; +} + +AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL +axiom_soap_envelope_create( + const axutil_env_t * env, + axiom_namespace_t * ns) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_element_t *ele = NULL; + int status = AXIS2_SUCCESS; + + AXIS2_PARAM_CHECK(env->error, ns, NULL); + + soap_envelope = axiom_soap_envelope_create_null(env); + if(!soap_envelope) + { + return NULL; + } + status = check_and_set_soap_version(soap_envelope, env, ns); + if(status == AXIS2_FAILURE) + { + AXIS2_FREE(env->allocator, soap_envelope); + return NULL; + } + + ele = axiom_element_create(env, NULL, AXIOM_SOAP_ENVELOPE_LOCAL_NAME, ns, + &(soap_envelope->om_ele_node)); + if(!ele) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create a SOAP element"); + axiom_soap_envelope_free(soap_envelope, env); + return NULL; + } + return soap_envelope; +} + +AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL +axiom_soap_envelope_create_with_soap_version_prefix( + const axutil_env_t * env, + int soap_version, + const axis2_char_t * prefix) +{ + axiom_namespace_t *ns = NULL; + const axis2_char_t *ns_prefix = NULL; + const axis2_char_t *ns_uri = NULL; + + if(soap_version == AXIOM_SOAP11) + { + ns_uri = AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI; + } + else if(soap_version == AXIOM_SOAP12) + { + ns_uri = AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_SOAP_VERSION, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid SOAP version"); + return NULL; + } + if(!prefix || axutil_strcmp(prefix, "") == 0) + { + ns_prefix = AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX; + } + else + { + ns_prefix = prefix; + } + + ns = axiom_namespace_create(env, ns_uri, ns_prefix); + if(!ns) + return NULL; + return axiom_soap_envelope_create(env, ns); +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_envelope_free( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env) +{ + if(--(soap_envelope->ref) > 0) + { + return; + } + if(soap_envelope->header) + { + axiom_soap_header_free(soap_envelope->header, env); + } + if(soap_envelope->body) + { + axiom_soap_body_free(soap_envelope->body, env); + } + if(soap_envelope->om_ele_node) + { + if(soap_envelope->soap_builder) + { + axiom_soap_builder_free(soap_envelope->soap_builder, env); + soap_envelope->om_ele_node = NULL; + } + else + { + axiom_node_free_tree(soap_envelope->om_ele_node, env); + } + } + + AXIS2_FREE(env->allocator, soap_envelope); + return; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_soap_envelope_get_base_node( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env) +{ + return soap_envelope->om_ele_node; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_envelope_set_base_node( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env, + axiom_node_t * node) +{ + AXIS2_PARAM_CHECK(env->error, node, AXIS2_FAILURE); + + if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_BASE_TYPE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + soap_envelope->om_ele_node = node; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axiom_soap_envelope_get_soap_version( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env) +{ + return soap_envelope->soap_version; +} + +/** this is an internal function */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_envelope_set_soap_version_internal( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env, + int soap_version) +{ + soap_envelope->soap_version = soap_version; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_soap_header_t *AXIS2_CALL +axiom_soap_envelope_get_header( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + + if(soap_envelope->header) + { + return soap_envelope->header; + } + else if(soap_envelope->soap_builder) + { + while(!(soap_envelope->header) && !(soap_envelope->body) && !axiom_node_is_complete( + soap_envelope->om_ele_node, env)) + { + status = axiom_soap_builder_next(soap_envelope->soap_builder, env); + if(status == AXIS2_FAILURE) + { + break; + } + } + } + + return soap_envelope->header; +} + +AXIS2_EXTERN axiom_soap_header_block_t *AXIS2_CALL +axiom_soap_envelope_add_header( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env, + axis2_char_t * namespace_uri, + axis2_char_t * name) +{ + axiom_namespace_t *ns = NULL; + + if(!soap_envelope->header) + { + return NULL; + } + if(namespace_uri) + { + ns = axiom_namespace_create(env, namespace_uri, NULL); + } + + return axiom_soap_header_block_create_with_parent(env, name, ns, soap_envelope->header); +} + +AXIS2_EXTERN axiom_soap_body_t *AXIS2_CALL +axiom_soap_envelope_get_body( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + + if(soap_envelope->body) + { + return soap_envelope->body; + } + else if(soap_envelope->soap_builder) + { + while(!(soap_envelope->body) && !axiom_node_is_complete(soap_envelope->om_ele_node, env)) + { + status = axiom_soap_builder_next(soap_envelope->soap_builder, env); + if(status == AXIS2_FAILURE) + { + return NULL; + } + } + } + return soap_envelope->body; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_envelope_serialize( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env, + axiom_output_t * om_output, + axis2_bool_t cache) +{ + AXIS2_PARAM_CHECK(env->error, soap_envelope, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_output, AXIS2_FAILURE); + + /* + if soap version is soap11 we modify the soap fault part. + This is done because the builder construct a soap12 fault all + the time. So when serializing if the soap version is soap11 + we should convert it back to soap11 fault + */ + if(soap_envelope->soap_version == AXIOM_SOAP11) + { + axiom_soap_body_t *soap_body = NULL; + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + axiom_soap_body_convert_fault_to_soap11(soap_body, env); + } + /* write the xml version and encoding + These should be set to om output before calling the serialize function + Otherwise default values will be written + */ + axiom_output_get_content_type(om_output, env); + return axiom_node_serialize(soap_envelope->om_ele_node, env, om_output); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_envelope_set_body( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env, + axiom_soap_body_t * body) +{ + + if(!(soap_envelope->body)) + { + soap_envelope->body = body; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "trying to set a soap bedy to soap_envelope when a soap body alrady exists"); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_envelope_set_header( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env, + axiom_soap_header_t * header) +{ + + if(!(soap_envelope->header)) + { + soap_envelope->header = header; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + " trying to set a soap header to soap_envelope when a soap header alrady exists"); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_namespace_t *AXIS2_CALL +axiom_soap_envelope_get_namespace( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env) +{ + + if(soap_envelope->om_ele_node) + { + axiom_element_t *ele = NULL; + if(axiom_node_get_node_type(soap_envelope->om_ele_node, env) == AXIOM_ELEMENT) + { + ele = (axiom_element_t *)axiom_node_get_data_element(soap_envelope-> om_ele_node, env); + if(ele) + { + return axiom_element_get_namespace(ele, env, soap_envelope->om_ele_node); + } + } + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_envelope_set_builder( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env, + axiom_soap_builder_t * soap_builder) +{ + AXIS2_PARAM_CHECK(env->error, soap_builder, AXIS2_FAILURE); + soap_envelope->soap_builder = soap_builder; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_soap_builder_t *AXIS2_CALL +axiom_soap_envelope_get_builder( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env) +{ + if(!soap_envelope) + { + return NULL; + } + return soap_envelope->soap_builder; +} + +AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL +axiom_soap_envelope_create_default_soap_envelope( + const axutil_env_t * env, + int soap_version) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_header_t *soap_header = NULL; + axiom_soap_body_t *soap_body = NULL; + axiom_namespace_t *om_ns = NULL; + + if(soap_version == AXIOM_SOAP11) + { + om_ns = axiom_namespace_create(env, AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI, + AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX); + if(!om_ns) + { + return NULL; + } + soap_envelope = axiom_soap_envelope_create(env, om_ns); + + soap_header = axiom_soap_header_create_with_parent(env, soap_envelope); + soap_body = axiom_soap_body_create_with_parent(env, soap_envelope); + soap_envelope->body = soap_body; + soap_envelope->header = soap_header; + return soap_envelope; + } + else if(soap_version == AXIOM_SOAP12) + { + om_ns = axiom_namespace_create(env, AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI, + AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX); + if(!om_ns) + { + return NULL; + } + soap_envelope = axiom_soap_envelope_create(env, om_ns); + + soap_header = axiom_soap_header_create_with_parent(env, soap_envelope); + soap_body = axiom_soap_body_create_with_parent(env, soap_envelope); + soap_envelope->body = soap_body; + soap_envelope->header = soap_header; + return soap_envelope; + } + + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_SOAP_VERSION, AXIS2_FAILURE); + return NULL; +} + +AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL +axiom_soap_envelope_create_default_soap_fault_envelope( + const axutil_env_t * env, + const axis2_char_t * code_value, + const axis2_char_t * reason_text, + const int soap_version, + axutil_array_list_t * sub_codes, + axiom_node_t * detail_node) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_body_t *soap_body = NULL; + axiom_soap_fault_t *fault = NULL; + + if(AXIOM_SOAP11 != soap_version && AXIOM_SOAP12 != soap_version) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_SOAP_VERSION, AXIS2_FAILURE); + return NULL; + } + + soap_envelope = axiom_soap_envelope_create_default_soap_envelope(env, soap_version); + if(!soap_envelope) + { + return NULL; + } + + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + if(!soap_body) + { + axiom_soap_envelope_free(soap_envelope, env); + return NULL; + } + fault = axiom_soap_fault_create_default_fault(env, soap_body, code_value, reason_text, + soap_version); + if(!fault) + { + axiom_soap_envelope_free(soap_envelope, env); + return NULL; + } + + if(sub_codes) + { + int i = 0; + axiom_soap_fault_code_t *fault_code = NULL; + fault_code = axiom_soap_fault_get_code(fault, env); + if(fault_code) + { + for(i = 0; i < axutil_array_list_size(sub_codes, env); i++) + { + axis2_char_t *sub_code = (axis2_char_t *)axutil_array_list_get(sub_codes, env, i); + if(sub_code) + { + axiom_soap_fault_sub_code_create_with_parent_value(env, fault_code, sub_code); + } + } + } + } + + if(detail_node) + { + axiom_soap_fault_detail_t *detail = axiom_soap_fault_detail_create_with_parent(env, fault); + if(detail) + { + axiom_soap_fault_detail_add_detail_entry(detail, env, detail_node); + } + } + + return soap_envelope; + +} + +static axis2_status_t +check_and_set_soap_version( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env, + axiom_namespace_t * ns) +{ + axis2_char_t *uri = NULL; + if(!soap_envelope) + { + return AXIS2_FAILURE; + } + if(!ns) + { + return AXIS2_FAILURE; + } + uri = axiom_namespace_get_uri(ns, env); + if(!uri) + { + return AXIS2_FAILURE; + } + if(axutil_strcmp(uri, AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI) == 0) + { + soap_envelope->soap_version = AXIOM_SOAP11; + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(uri, AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI) == 0) + { + soap_envelope->soap_version = AXIOM_SOAP12; + return AXIS2_SUCCESS; + } + else + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_SOAP_NAMESPACE_URI, AXIS2_FAILURE); + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_envelope_set_soap_version( + axiom_soap_envelope_t * soap_envelope, + const axutil_env_t * env, + int soap_version) +{ + axiom_element_t *env_ele = NULL; + axiom_namespace_t *env_ns = NULL; + const axis2_char_t *ns_uri = NULL; + int status = AXIS2_SUCCESS; + + if(soap_version == AXIOM_SOAP11) + { + ns_uri = AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI; + } + else if(soap_version == AXIOM_SOAP12) + { + ns_uri = AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + } + else + { + return AXIS2_FAILURE; + } + + env_ele = (axiom_element_t *)axiom_node_get_data_element(soap_envelope->om_ele_node, env); + if(!env_ele) + { + return AXIS2_FAILURE; + } + + env_ns = axiom_element_get_namespace(env_ele, env, soap_envelope->om_ele_node); + if(!env_ns) + { + return AXIS2_FAILURE; + } + status = axiom_namespace_set_uri(env_ns, env, ns_uri); + if(status == AXIS2_SUCCESS) + { + axiom_soap_envelope_set_soap_version_internal(soap_envelope, env, soap_version); + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_envelope_increment_ref( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env) +{ + envelope->ref++; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN struct axiom_soap_builder *AXIS2_CALL +axiom_soap_envelope_get_soap_builder( + axiom_soap_envelope_t * envelope, + const axutil_env_t * env) +{ + return envelope->soap_builder; +} + diff --git a/axiom/src/soap/soap_fault.c b/axiom/src/soap/soap_fault.c new file mode 100644 index 0000000..7ee69a8 --- /dev/null +++ b/axiom/src/soap/soap_fault.c @@ -0,0 +1,630 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "_axiom_soap_fault.h" +#include +#include "_axiom_soap_body.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct axiom_soap_fault +{ + /* om element node corresponding to soap soap_fault */ + axiom_node_t *om_ele_node; + + /* soap soap_fault code sub element */ + axiom_soap_fault_code_t *fcode; + /* soap soap_fault reason sub element */ + axiom_soap_fault_reason_t *freason; + /* soap soap_fault node sub element */ + axiom_soap_fault_node_t *fnode; + /* soap soap_fault role sub element */ + axiom_soap_fault_role_t *frole; + /* soap soap_fault detail sub element */ + axiom_soap_fault_detail_t *fdetail; + + axis2_char_t *exception; + /* reference to soap builder */ + axiom_soap_builder_t *soap_builder; + + int soap_version; +}; + +AXIS2_EXTERN axiom_soap_fault_t *AXIS2_CALL +axiom_soap_fault_create( + const axutil_env_t * env) +{ + axiom_soap_fault_t *soap_fault = NULL; + soap_fault = (axiom_soap_fault_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_soap_fault_t)); + if(!soap_fault) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create a SOAP fault"); + return NULL; + } + soap_fault->exception = NULL; + soap_fault->fcode = NULL; + soap_fault->fdetail = NULL; + soap_fault->fnode = NULL; + soap_fault->freason = NULL; + soap_fault->frole = NULL; + soap_fault->om_ele_node = NULL; + soap_fault->soap_builder = NULL; + soap_fault->soap_version = -1; + return soap_fault; +} + +AXIS2_EXTERN axiom_soap_fault_t *AXIS2_CALL +axiom_soap_fault_create_with_parent( + const axutil_env_t * env, + axiom_soap_body_t * body) +{ + axiom_soap_fault_t *soap_fault = NULL; + axiom_element_t *this_ele = NULL; + axiom_node_t *this_node = NULL; + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + axiom_namespace_t *parent_ns = NULL; + + AXIS2_PARAM_CHECK(env->error, body, NULL); + + soap_fault = axiom_soap_fault_create(env); + if(!soap_fault) + { + return NULL; + } + parent_node = axiom_soap_body_get_base_node(body, env); + if(!parent_node) + { + AXIS2_FREE(env->allocator, soap_fault); + return NULL; + } + soap_fault->soap_version = axiom_soap_body_get_soap_version(body, env); + + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + if(!parent_ele) + { + AXIS2_FREE(env->allocator, soap_fault); + return NULL; + } + parent_ns = axiom_element_get_namespace(parent_ele, env, parent_node); + + this_ele = axiom_element_create(env, parent_node, AXIOM_SOAP_FAULT_LOCAL_NAME, parent_ns, + &this_node); + if(!this_ele) + { + AXIS2_FREE(env->allocator, soap_fault); + return NULL; + } + + soap_fault->om_ele_node = this_node; + axiom_soap_body_set_fault(body, env, soap_fault); + return soap_fault; +} + +AXIS2_EXTERN axiom_soap_fault_t *AXIS2_CALL +axiom_soap_fault_create_with_exception( + const axutil_env_t * env, + axiom_soap_body_t * body, + axis2_char_t * exception) +{ + axiom_soap_fault_t *soap_fault = NULL; + axis2_status_t status = AXIS2_SUCCESS; + AXIS2_PARAM_CHECK(env->error, body, NULL); + AXIS2_PARAM_CHECK(env->error, exception, NULL); + soap_fault = axiom_soap_fault_create_with_parent(env, body); + if(!soap_fault) + { + return NULL; + } + status = axiom_soap_fault_set_exception(soap_fault, env, exception); + if(status == AXIS2_FAILURE) + { + axiom_soap_fault_free(soap_fault, env); + return NULL; + } + return soap_fault; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_fault_free( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env) +{ + + if(soap_fault->fcode) + { + axiom_soap_fault_code_free(soap_fault->fcode, env); + soap_fault->fcode = NULL; + } + if(soap_fault->fdetail) + { + axiom_soap_fault_detail_free(soap_fault->fdetail, env); + soap_fault->fdetail = NULL; + } + if(soap_fault->fnode) + { + axiom_soap_fault_node_free(soap_fault->fnode, env); + soap_fault->fnode = NULL; + } + if(soap_fault->freason) + { + axiom_soap_fault_reason_free(soap_fault->freason, env); + soap_fault->freason = NULL; + } + if(soap_fault->frole) + { + axiom_soap_fault_role_free(soap_fault->frole, env); + soap_fault->frole = NULL; + } + AXIS2_FREE(env->allocator, soap_fault); + soap_fault = NULL; + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_set_code( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env, + axiom_soap_fault_code_t * code) +{ + AXIS2_PARAM_CHECK(env->error, code, AXIS2_FAILURE); + if(!(soap_fault->fcode)) + { + soap_fault->fcode = code; + return AXIS2_SUCCESS; + } + else + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "tring to set multiple code elements to soap_fault "); + + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_soap_fault_code_t *AXIS2_CALL +axiom_soap_fault_get_code( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + if(soap_fault->fcode) + { + return soap_fault->fcode; + } + else if(soap_fault->soap_builder) + { + while(!(soap_fault->fcode) && !(axiom_node_is_complete(soap_fault->om_ele_node, env))) + { + status = axiom_soap_builder_next(soap_fault->soap_builder, env); + if(status == AXIS2_FAILURE) + { + break; + } + } + } + return soap_fault->fcode; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_set_reason( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env, + axiom_soap_fault_reason_t * reason) +{ + AXIS2_PARAM_CHECK(env->error, reason, AXIS2_FAILURE); + if(!(soap_fault->freason)) + { + soap_fault->freason = reason; + return AXIS2_SUCCESS; + } + else + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "tring to set soap_fault reason twice"); + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axiom_soap_fault_reason_t *AXIS2_CALL +axiom_soap_fault_get_reason( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + if(soap_fault->freason) + { + return soap_fault->freason; + } + else if(soap_fault->soap_builder) + { + while(!(soap_fault->freason) && !(axiom_node_is_complete(soap_fault->om_ele_node, env))) + { + status = axiom_soap_builder_next(soap_fault->soap_builder, env); + if(status == AXIS2_FAILURE) + { + break; + } + } + } + return soap_fault->freason; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_set_node( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env, + axiom_soap_fault_node_t * node) +{ + AXIS2_PARAM_CHECK(env->error, node, AXIS2_FAILURE); + if(!(soap_fault->fnode)) + { + soap_fault->fnode = node; + return AXIS2_SUCCESS; + } + else + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "tring to set soap_fault node more than once"); + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axiom_soap_fault_node_t *AXIS2_CALL +axiom_soap_fault_get_node( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + + if(soap_fault->fnode) + { + return soap_fault->fnode; + } + else if(soap_fault->soap_builder) + { + while(!(soap_fault->fnode) && !(axiom_node_is_complete(soap_fault->om_ele_node, env))) + { + status = axiom_soap_builder_next(soap_fault->soap_builder, env); + if(status == AXIS2_FAILURE) + { + break; + } + } + } + return soap_fault->fnode; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_set_role( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env, + axiom_soap_fault_role_t * role) +{ + AXIS2_PARAM_CHECK(env->error, role, AXIS2_FAILURE); + + if(!(soap_fault->frole)) + { + soap_fault->frole = role; + return AXIS2_FAILURE; + } + else + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "tring to set soap_fault role more than once "); + } + return AXIS2_FAILURE; + +} + +AXIS2_EXTERN axiom_soap_fault_role_t *AXIS2_CALL +axiom_soap_fault_get_role( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + if(soap_fault->frole) + { + return soap_fault->frole; + } + else if(soap_fault->soap_builder) + { + while(!(soap_fault->frole) && !(axiom_node_is_complete(soap_fault->om_ele_node, env))) + { + status = axiom_soap_builder_next(soap_fault->soap_builder, env); + if(status == AXIS2_FAILURE) + { + break; + } + } + } + return soap_fault->frole; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_set_detail( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env, + axiom_soap_fault_detail_t * detail) +{ + AXIS2_PARAM_CHECK(env->error, detail, AXIS2_FAILURE); + + if(!(soap_fault->fdetail)) + { + soap_fault->fdetail = detail; + return AXIS2_SUCCESS; + } + else + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, " tring to set soap_fault detail more than once"); + + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axiom_soap_fault_detail_t *AXIS2_CALL +axiom_soap_fault_get_detail( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + if(soap_fault->fdetail) + { + return soap_fault->fdetail; + } + else if(soap_fault->soap_builder) + { + while(!(soap_fault->fdetail) && !(axiom_node_is_complete(soap_fault->om_ele_node, env))) + { + status = axiom_soap_builder_next(soap_fault->soap_builder, env); + if(status == AXIS2_FAILURE) + { + break; + } + } + } + return soap_fault->fdetail; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_set_base_node( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env, + axiom_node_t * node) +{ + AXIS2_PARAM_CHECK(env->error, node, AXIS2_FAILURE); + + if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_BASE_TYPE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + soap_fault->om_ele_node = node; + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_soap_fault_get_base_node( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env) +{ + return soap_fault->om_ele_node; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_soap_fault_get_exception( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env) +{ + axiom_soap_fault_detail_t *detail = NULL; + axiom_node_t *detail_node = NULL; + axiom_element_t *detail_ele = NULL; + axiom_node_t *exception_node = NULL; + axiom_element_t *exception_ele = NULL; + axutil_qname_t *qn = NULL; + axis2_char_t *excep = NULL; + + detail = axiom_soap_fault_get_detail(soap_fault, env); + if(!detail) + { + return NULL; + } + detail_node = axiom_soap_fault_detail_get_base_node(detail, env); + if(detail_node) + { + detail_ele = (axiom_element_t *)axiom_node_get_data_element(detail_node, env); + + qn = axutil_qname_create(env, AXIOM_SOAP_FAULT_DETAIL_EXCEPTION_ENTRY, NULL, NULL); + if(qn) + { + exception_ele = axiom_element_get_first_child_with_qname(detail_ele, env, qn, + detail_node, &exception_node); + axutil_qname_free(qn, env); + if(exception_ele) + { + excep = axiom_element_get_text(exception_ele, env, exception_node); + } + return excep; + } + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_set_exception( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env, + axis2_char_t * exception) +{ + axiom_soap_fault_detail_t *detail = NULL; + axiom_node_t *fault_detail_entry_node = NULL; + axiom_element_t *fault_detail_ele = NULL; + + AXIS2_PARAM_CHECK(env->error, exception, AXIS2_FAILURE); + + detail = axiom_soap_fault_get_detail(soap_fault, env); + + if(!detail) + { + detail = axiom_soap_fault_detail_create_with_parent(env, soap_fault); + if(!detail) + { + return AXIS2_FAILURE; + } + } + + /** create an om element with the exception enrty */ + + fault_detail_ele = axiom_element_create(env, NULL, AXIOM_SOAP_FAULT_DETAIL_EXCEPTION_ENTRY, + NULL, &fault_detail_entry_node); + if(!fault_detail_ele) + { + return AXIS2_FAILURE; + } + + /** set the exception string as a text node of newly created om element */ + axiom_element_set_text(fault_detail_ele, env, exception, fault_detail_entry_node); + + /** now add this om element as a child of soap soap_fault detail om element node */ + return axiom_soap_fault_detail_add_detail_entry(detail, env, fault_detail_entry_node); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_set_builder( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env, + axiom_soap_builder_t * builder) +{ + AXIS2_PARAM_CHECK(env->error, builder, AXIS2_FAILURE); + soap_fault->soap_builder = builder; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_soap_fault_t *AXIS2_CALL +axiom_soap_fault_create_default_fault( + const axutil_env_t * env, + struct axiom_soap_body * parent, + const axis2_char_t * code_value, + const axis2_char_t * reason_text, + const int soap_version) +{ + axiom_soap_fault_t *soap_fault = NULL; + axiom_node_t *fault_node = NULL; + + axiom_soap_fault_code_t *soap_fault_code = NULL; + axiom_soap_fault_value_t *soap_fault_value = NULL; + + axiom_soap_fault_reason_t *soap_fault_reason = NULL; + axiom_soap_fault_text_t *soap_fault_text = NULL; + + axiom_node_t *value_node = NULL; + axiom_element_t *value_ele = NULL; + + axiom_node_t *text_node = NULL; + axiom_element_t *text_ele = NULL; + + AXIS2_PARAM_CHECK(env->error, code_value, NULL); + AXIS2_PARAM_CHECK(env->error, reason_text, NULL); + + soap_fault = axiom_soap_fault_create_with_parent(env, parent); + if(!soap_fault) + { + return NULL; + } + fault_node = axiom_soap_fault_get_base_node(soap_fault, env); + if(!fault_node) + { + axiom_soap_fault_free(soap_fault, env); + return NULL; + } + + soap_fault_code = axiom_soap_fault_code_create_with_parent(env, soap_fault); + if(!soap_fault_code) + { + axiom_soap_fault_free(soap_fault, env); + axiom_node_free_tree(fault_node, env); + return NULL; + } + soap_fault_reason = axiom_soap_fault_reason_create_with_parent(env, soap_fault); + if(!soap_fault_reason) + { + axiom_soap_fault_free(soap_fault, env); + axiom_node_free_tree(fault_node, env); + return NULL; + } + + soap_fault_value = axiom_soap_fault_value_create_with_code(env, soap_fault_code); + if(!soap_fault_value) + { + axiom_soap_fault_free(soap_fault, env); + axiom_node_free_tree(fault_node, env); + return NULL; + } + + value_node = axiom_soap_fault_value_get_base_node(soap_fault_value, env); + if(!value_node) + { + return NULL; + } + value_ele = (axiom_element_t *)axiom_node_get_data_element(value_node, env); + + axiom_element_set_text(value_ele, env, code_value, value_node); + + soap_fault_text = axiom_soap_fault_text_create_with_parent(env, soap_fault_reason); + if(!soap_fault_text) + { + axiom_soap_fault_free(soap_fault, env); + axiom_node_free_tree(fault_node, env); + return NULL; + } + axiom_soap_fault_text_set_lang(soap_fault_text, env, "en"); + + text_node = axiom_soap_fault_text_get_base_node(soap_fault_text, env); + if(!text_node) + { + return NULL; + } + text_ele = (axiom_element_t *)axiom_node_get_data_element(text_node, env); + + axiom_element_set_text(text_ele, env, reason_text, text_node); + + return soap_fault; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_set_soap_version( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env, + int soap_version) +{ + soap_fault->soap_version = soap_version; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axiom_soap_fault_get_soap_version( + axiom_soap_fault_t * soap_fault, + const axutil_env_t * env) +{ + return soap_fault->soap_version; +} diff --git a/axiom/src/soap/soap_fault_code.c b/axiom/src/soap/soap_fault_code.c new file mode 100644 index 0000000..b0ded55 --- /dev/null +++ b/axiom/src/soap/soap_fault_code.c @@ -0,0 +1,308 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "_axiom_soap_fault_code.h" +#include +#include +#include +#include "_axiom_soap_fault.h" + +struct axiom_soap_fault_code +{ + axiom_node_t *om_ele_node; + + axiom_soap_fault_sub_code_t *subcode; + + axiom_soap_fault_value_t *value; + + axiom_soap_builder_t *builder; + + int soap_version; + +}; + +AXIS2_EXTERN axiom_soap_fault_code_t *AXIS2_CALL +axiom_soap_fault_code_create( + const axutil_env_t * env) +{ + axiom_soap_fault_code_t *fault_code = NULL; + fault_code = (axiom_soap_fault_code_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_soap_fault_code_t)); + + if(!fault_code) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create SOAP fault code"); + return NULL; + } + + fault_code->om_ele_node = NULL; + fault_code->subcode = NULL; + fault_code->value = NULL; + fault_code->builder = NULL; + fault_code->soap_version = AXIOM_SOAP_VERSION_NOT_SET; + + return fault_code; +} + +AXIS2_EXTERN axiom_soap_fault_code_t *AXIS2_CALL +axiom_soap_fault_code_create_with_parent( + const axutil_env_t * env, + axiom_soap_fault_t * fault) +{ + axiom_soap_fault_code_t *fault_code = NULL; + axiom_element_t *this_ele = NULL; + axiom_node_t *this_node = NULL; + + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + + axiom_namespace_t *parent_ns = NULL; + + AXIS2_PARAM_CHECK(env->error, fault, NULL); + + fault_code = axiom_soap_fault_code_create(env); + if(!fault_code) + { + return NULL; + } + + parent_node = axiom_soap_fault_get_base_node(fault, env); + if(!parent_node) + { + axiom_soap_fault_code_free(fault_code, env); + return NULL; + } + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + + if(!parent_ele) + { + axiom_soap_fault_code_free(fault_code, env); + return NULL; + } + fault_code->soap_version = axiom_soap_fault_get_soap_version(fault, env); + if(fault_code->soap_version == AXIOM_SOAP12) + { + parent_ns = axiom_element_get_namespace(parent_ele, env, parent_node); + } + this_ele = axiom_element_create(env, parent_node, AXIOM_SOAP12_SOAP_FAULT_CODE_LOCAL_NAME, + parent_ns, &this_node); + + if(!this_ele) + { + axiom_soap_fault_code_free(fault_code, env); + return NULL; + } + + fault_code->om_ele_node = this_node; + + axiom_soap_fault_set_code(fault, env, fault_code); + + return fault_code; +} + +AXIS2_EXTERN axiom_soap_fault_code_t *AXIS2_CALL +axiom_soap_fault_code_create_with_parent_value( + const axutil_env_t * env, + axiom_soap_fault_t * fault, + axis2_char_t * value) +{ + axiom_soap_fault_code_t *fault_code = NULL; + axiom_soap_fault_value_t *fault_value = NULL; + AXIS2_PARAM_CHECK(env->error, value, NULL); + + fault_code = axiom_soap_fault_code_create_with_parent(env, fault); + if(!fault_code) + { + return NULL; + } + + fault_value = axiom_soap_fault_value_create_with_code(env, fault_code); + if(!fault_value) + { + axiom_soap_fault_code_free(fault_code, env); + return NULL; + } + axiom_soap_fault_value_set_text(fault_value, env, value); + return fault_code; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_fault_code_free( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env) +{ + + if(fault_code->subcode) + { + axiom_soap_fault_sub_code_free(fault_code->subcode, env); + } + if(fault_code->value) + { + axiom_soap_fault_value_free(fault_code->value, env); + } + + AXIS2_FREE(env->allocator, fault_code); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_code_set_value( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env, + axiom_soap_fault_value_t * fault_val) +{ + + AXIS2_PARAM_CHECK(env->error, fault_val, AXIS2_FAILURE); + + if(!(fault_code->value)) + { + fault_code->value = fault_val; + return AXIS2_SUCCESS; + } + else + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "trying to set fault value to fault code more than once"); + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_code_set_sub_code( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env, + axiom_soap_fault_sub_code_t * fault_subcode) +{ + AXIS2_PARAM_CHECK(env->error, fault_subcode, AXIS2_FAILURE); + + if(!(fault_code->subcode)) + { + fault_code->subcode = fault_subcode; + return AXIS2_SUCCESS; + } + else + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "trying to set fault subcode to fault code more than once "); + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axiom_soap_fault_sub_code_t *AXIS2_CALL +axiom_soap_fault_code_get_sub_code( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + + if(fault_code->subcode) + { + return fault_code->subcode; + } + else if(fault_code->builder) + { + while(!(fault_code->subcode) && !(axiom_node_is_complete(fault_code->om_ele_node, env))) + { + status = axiom_soap_builder_next(fault_code->builder, env); + if(status == AXIS2_FAILURE) + { + break; + } + } + } + return fault_code->subcode; +} + +AXIS2_EXTERN axiom_soap_fault_value_t *AXIS2_CALL +axiom_soap_fault_code_get_value( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + + if(fault_code->value) + { + return fault_code->value; + } + else if(fault_code->builder) + { + while(!(fault_code->value) && !(axiom_node_is_complete(fault_code->om_ele_node, env))) + { + status = axiom_soap_builder_next(fault_code->builder, env); + if(status == AXIS2_FAILURE) + { + break; + } + } + } + return fault_code->value; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_code_set_base_node( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env, + axiom_node_t * node) +{ + AXIS2_PARAM_CHECK(env->error, node, AXIS2_FAILURE); + + if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_BASE_TYPE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + fault_code->om_ele_node = node; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_soap_fault_code_get_base_node( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env) +{ + return fault_code->om_ele_node; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_code_set_builder( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env, + axiom_soap_builder_t * soap_builder) +{ + AXIS2_PARAM_CHECK(env->error, soap_builder, AXIS2_FAILURE); + fault_code->builder = soap_builder; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axiom_soap_fault_code_get_soap_version( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env) +{ + return fault_code->soap_version; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_code_set_soap_version( + axiom_soap_fault_code_t * fault_code, + const axutil_env_t * env, + int soap_version) +{ + fault_code->soap_version = soap_version; + return AXIS2_SUCCESS; +} diff --git a/axiom/src/soap/soap_fault_detail.c b/axiom/src/soap/soap_fault_detail.c new file mode 100644 index 0000000..0375767 --- /dev/null +++ b/axiom/src/soap/soap_fault_detail.c @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "_axiom_soap_fault.h" +#include +#include +#include "_axiom_soap_fault_detail.h" + +struct axiom_soap_fault_detail +{ + axiom_node_t *om_ele_node; +}; + +AXIS2_EXTERN axiom_soap_fault_detail_t *AXIS2_CALL +axiom_soap_fault_detail_create( + const axutil_env_t * env) +{ + axiom_soap_fault_detail_t *fault_detail = NULL; + + fault_detail = (axiom_soap_fault_detail_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_soap_fault_detail_t)); + if(!fault_detail) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create a fault detail"); + return NULL; + } + + fault_detail->om_ele_node = NULL; + + return fault_detail; +} + +AXIS2_EXTERN axiom_soap_fault_detail_t *AXIS2_CALL +axiom_soap_fault_detail_create_with_parent( + const axutil_env_t * env, + axiom_soap_fault_t * fault) +{ + axiom_soap_fault_detail_t *fault_detail = NULL; + axiom_element_t *this_ele = NULL; + axiom_node_t *this_node = NULL; + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + axiom_namespace_t *parent_ns = NULL; + int soap_version = -1; + + AXIS2_PARAM_CHECK(env->error, fault, NULL); + + fault_detail = axiom_soap_fault_detail_create(env); + if(!fault_detail) + { + return NULL; + } + parent_node = axiom_soap_fault_get_base_node(fault, env); + if(!parent_node) + { + return NULL; + } + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + if(!parent_ele) + { + return NULL; + } + soap_version = axiom_soap_fault_get_soap_version(fault, env); + if(soap_version == AXIOM_SOAP12) + { + parent_ns = axiom_element_get_namespace(parent_ele, env, parent_node); + } + this_ele = axiom_element_create(env, parent_node, AXIOM_SOAP12_SOAP_FAULT_DETAIL_LOCAL_NAME, + parent_ns, &this_node); + + if(!this_ele) + { + axiom_soap_fault_detail_free(fault_detail, env); + return NULL; + } + fault_detail->om_ele_node = this_node; + axiom_soap_fault_set_detail(fault, env, fault_detail); + return fault_detail; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_fault_detail_free( + axiom_soap_fault_detail_t * fault_detail, + const axutil_env_t * env) +{ + AXIS2_FREE(env->allocator, fault_detail); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_detail_add_detail_entry( + axiom_soap_fault_detail_t * fault_detail, + const axutil_env_t * env, + axiom_node_t * node) +{ + AXIS2_PARAM_CHECK(env->error, node, AXIS2_FAILURE); + + if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_OM_ELEMENT_EXPECTED, AXIS2_FAILURE); + + return AXIS2_FAILURE; + } + + axiom_node_add_child(fault_detail->om_ele_node, env, node); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_children_iterator_t *AXIS2_CALL +axiom_soap_fault_detail_get_all_detail_entries( + axiom_soap_fault_detail_t * fault_detail, + const axutil_env_t * env) +{ + axiom_element_t *om_ele = NULL; + if(fault_detail->om_ele_node) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(fault_detail->om_ele_node, env); + return axiom_element_get_children(om_ele, env, fault_detail->om_ele_node); + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_detail_set_base_node( + axiom_soap_fault_detail_t * fault_detail, + const axutil_env_t * env, + axiom_node_t * node) +{ + AXIS2_PARAM_CHECK(env->error, node, AXIS2_FAILURE); + + if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_BASE_TYPE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + fault_detail->om_ele_node = node; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL axiom_soap_fault_detail_get_base_node( + axiom_soap_fault_detail_t * fault_detail, + const axutil_env_t * env) +{ + return fault_detail->om_ele_node; +} diff --git a/axiom/src/soap/soap_fault_node.c b/axiom/src/soap/soap_fault_node.c new file mode 100644 index 0000000..143bc87 --- /dev/null +++ b/axiom/src/soap/soap_fault_node.c @@ -0,0 +1,176 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "_axiom_soap_fault_node.h" +#include +#include +#include "_axiom_soap_fault.h" + +struct axiom_soap_fault_node +{ + axiom_node_t *om_ele_node; +}; + +AXIS2_EXTERN axiom_soap_fault_node_t *AXIS2_CALL +axiom_soap_fault_node_create( + const axutil_env_t * env) +{ + axiom_soap_fault_node_t *fault_node = NULL; + + fault_node = (axiom_soap_fault_node_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_soap_fault_node_t)); + + if(!fault_node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create a SOAP fault node"); + return NULL; + } + fault_node->om_ele_node = NULL; + + return fault_node; +} + +AXIS2_EXTERN axiom_soap_fault_node_t *AXIS2_CALL +axiom_soap_fault_node_create_with_parent( + const axutil_env_t * env, + axiom_soap_fault_t * fault) +{ + axiom_soap_fault_node_t *fault_node = NULL; + axiom_element_t *this_ele = NULL; + axiom_node_t *this_node = NULL; + + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + + axiom_namespace_t *parent_ns = NULL; + + AXIS2_PARAM_CHECK(env->error, fault, NULL); + + fault_node = axiom_soap_fault_node_create(env); + if(!fault_node) + { + return NULL; + } + parent_node = axiom_soap_fault_get_base_node(fault, env); + if(!parent_node) + { + axiom_soap_fault_node_free(fault_node, env); + return NULL; + } + + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + if(!parent_ele) + { + axiom_soap_fault_node_free(fault_node, env); + return NULL; + } + + parent_ns = axiom_element_get_namespace(parent_ele, env, parent_node); + + this_ele = axiom_element_create(env, parent_node, AXIOM_SOAP12_SOAP_FAULT_NODE_LOCAL_NAME, + parent_ns, &this_node); + + if(!this_ele) + { + axiom_soap_fault_node_free(fault_node, env); + return NULL; + } + + fault_node->om_ele_node = this_node; + + axiom_soap_fault_set_node(fault, env, fault_node); + + return fault_node; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_fault_node_free( + axiom_soap_fault_node_t * fault_node, + const axutil_env_t * env) +{ + AXIS2_FREE(env->allocator, fault_node); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_node_set_value( + axiom_soap_fault_node_t * fault_node, + const axutil_env_t * env, + axis2_char_t * uri) +{ + axiom_element_t *om_ele = NULL; + + AXIS2_PARAM_CHECK(env->error, uri, AXIS2_FAILURE); + + if(fault_node->om_ele_node) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(fault_node-> om_ele_node, env); + + if(om_ele) + { + return axiom_element_set_text(om_ele, env, uri, fault_node->om_ele_node); + } + } + + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_soap_fault_node_get_value( + axiom_soap_fault_node_t * fault_node, + const axutil_env_t * env) +{ + axiom_element_t *om_ele = NULL; + + if(fault_node->om_ele_node) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(fault_node-> om_ele_node, env); + if(om_ele) + { + return axiom_element_get_text(om_ele, env, fault_node->om_ele_node); + } + + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_node_set_base_node( + axiom_soap_fault_node_t * fault_node, + const axutil_env_t * env, + axiom_node_t * node) +{ + AXIS2_PARAM_CHECK(env->error, node, AXIS2_FAILURE); + if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_BASE_TYPE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + fault_node->om_ele_node = node; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_soap_fault_node_get_base_node( + axiom_soap_fault_node_t * fault_node, + const axutil_env_t * env) +{ + return fault_node->om_ele_node; +} diff --git a/axiom/src/soap/soap_fault_reason.c b/axiom/src/soap/soap_fault_reason.c new file mode 100644 index 0000000..516d58c --- /dev/null +++ b/axiom/src/soap/soap_fault_reason.c @@ -0,0 +1,386 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "_axiom_soap_fault.h" +#include +#include +#include +#include + +struct axiom_soap_fault_reason +{ + /* corresponding om element node */ + axiom_node_t *om_ele_node; + + axutil_array_list_t *fault_texts; + /* pointer to soap builder */ + axiom_soap_builder_t *soap_builder; + + int soap_version; +}; + +static axis2_bool_t +axiom_soap_fault_reason_lang_exists( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env, + axis2_char_t * lang); + +AXIS2_EXTERN axiom_soap_fault_reason_t *AXIS2_CALL +axiom_soap_fault_reason_create( + const axutil_env_t * env) +{ + axiom_soap_fault_reason_t *fault_reason = NULL; + fault_reason = (axiom_soap_fault_reason_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_soap_fault_reason_t)); + if(!fault_reason) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create SOAP fault reason"); + return NULL; + } + + fault_reason->om_ele_node = NULL; + fault_reason->fault_texts = NULL; + fault_reason->soap_version = -1; + return fault_reason; +} + +AXIS2_EXTERN axiom_soap_fault_reason_t *AXIS2_CALL +axiom_soap_fault_reason_create_with_parent( + const axutil_env_t * env, + axiom_soap_fault_t * fault) +{ + axiom_soap_fault_reason_t *fault_reason = NULL; + axiom_element_t *this_ele = NULL; + axiom_node_t *this_node = NULL; + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + axiom_namespace_t *parent_ns = NULL; + + AXIS2_PARAM_CHECK(env->error, fault, NULL); + + fault_reason = axiom_soap_fault_reason_create(env); + if(!fault_reason) + { + return NULL; + } + parent_node = axiom_soap_fault_get_base_node(fault, env); + if(!parent_node) + { + return NULL; + } + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + if(!parent_ele) + { + return NULL; + } + fault_reason->soap_version = axiom_soap_fault_get_soap_version(fault, env); + if(fault_reason->soap_version == AXIOM_SOAP12) + { + parent_ns = axiom_element_get_namespace(parent_ele, env, parent_node); + } + this_ele = axiom_element_create(env, parent_node, AXIOM_SOAP12_SOAP_FAULT_REASON_LOCAL_NAME, + parent_ns, &this_node); + if(!this_ele) + { + return NULL; + } + + fault_reason->om_ele_node = this_node; + + axiom_soap_fault_set_reason(fault, env, fault_reason); + return fault_reason; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_fault_reason_free( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env) +{ + + if(fault_reason->fault_texts) + { + int size = 0; + int i = 0; + size = axutil_array_list_size(fault_reason->fault_texts, env); + + for(i = 0; i < size; i++) + { + axiom_soap_fault_text_t *fault_text = NULL; + void *value = NULL; + value = axutil_array_list_get(fault_reason->fault_texts, env, i); + if(value) + { + fault_text = (axiom_soap_fault_text_t *)value; + axiom_soap_fault_text_free(fault_text, env); + fault_text = NULL; + } + } + axutil_array_list_free(fault_reason->fault_texts, env); + fault_reason->fault_texts = NULL; + } + + AXIS2_FREE(env->allocator, fault_reason); + + fault_reason = NULL; + + return; +} + +AXIS2_EXTERN axiom_soap_fault_text_t *AXIS2_CALL +axiom_soap_fault_reason_get_soap_fault_text( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env, + axis2_char_t * lang) +{ + int status = AXIS2_SUCCESS; + int size = 0; + int i = 0; + + AXIS2_PARAM_CHECK(env->error, fault_reason, NULL); + if(!lang || (axutil_strcmp(lang, "") == 0)) + { + return NULL; + } + /** Here we have to build the soap fault reason element completly */ + if(!fault_reason->fault_texts) + { + + if(fault_reason->soap_builder && !(axiom_node_is_complete(fault_reason->om_ele_node, env))) + { + while(!(axiom_node_is_complete(fault_reason->om_ele_node, env))) + { + status = axiom_soap_builder_next(fault_reason->soap_builder, env); + if(status == AXIS2_FAILURE) + { + return NULL; + } + } + } + } + + if(!fault_reason->fault_texts) + { + return NULL; + } + /** iterate the array list */ + size = axutil_array_list_size(fault_reason->fault_texts, env); + for(i = 0; i < size; i++) + { + axiom_soap_fault_text_t *fault_text = NULL; + void *value = NULL; + + value = axutil_array_list_get(fault_reason->fault_texts, env, i); + if(value) + { + axis2_char_t *fault_lang = NULL; + fault_text = (axiom_soap_fault_text_t *)value; + fault_lang = axiom_soap_fault_text_get_lang(fault_text, env); + if(fault_lang && axutil_strcmp(lang, fault_lang) == 0) + { + return fault_text; + } + } + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_reason_set_base_node( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env, + axiom_node_t * node) +{ + AXIS2_PARAM_CHECK(env->error, node, AXIS2_FAILURE); + + if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_BASE_TYPE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + fault_reason->om_ele_node = node; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL axiom_soap_fault_reason_get_base_node( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env) +{ + return fault_reason->om_ele_node; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_reason_set_builder( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env, + axiom_soap_builder_t * builder) +{ + AXIS2_PARAM_CHECK(env->error, builder, AXIS2_FAILURE); + + fault_reason->soap_builder = builder; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axiom_soap_fault_reason_get_all_soap_fault_texts( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + + if(!(fault_reason->fault_texts) && (fault_reason->soap_builder)) + { + if(!(axiom_node_is_complete(fault_reason->om_ele_node, env))) + { + while(!(axiom_node_is_complete(fault_reason->om_ele_node, env))) + { + status = axiom_soap_builder_next(fault_reason->soap_builder, env); + if(status == AXIS2_FAILURE) + { + return NULL; + } + } + } + } + return fault_reason->fault_texts; +} + +AXIS2_EXTERN axiom_soap_fault_text_t *AXIS2_CALL +axiom_soap_fault_reason_get_first_soap_fault_text( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + + if(!(fault_reason->fault_texts) && (fault_reason->soap_builder)) + { + if(!(axiom_node_is_complete(fault_reason->om_ele_node, env))) + { + while(!(axiom_node_is_complete(fault_reason->om_ele_node, env))) + { + status = axiom_soap_builder_next(fault_reason->soap_builder, env); + if(status == AXIS2_FAILURE) + { + return NULL; + } + } + } + } + if(fault_reason->fault_texts) + { + void *value = NULL; + value = axutil_array_list_get(fault_reason->fault_texts, env, 0); + if(value) + { + return (axiom_soap_fault_text_t *)value; + } + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_reason_add_soap_fault_text( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env, + axiom_soap_fault_text_t * fault_text) +{ + if(!fault_text) + { + return AXIS2_FAILURE; + } + if(!(fault_reason->fault_texts)) + { + fault_reason->fault_texts = axutil_array_list_create(env, 1); + if(!fault_reason->fault_texts) + { + return AXIS2_FAILURE; + } + axutil_array_list_add(fault_reason->fault_texts, env, fault_text); + } + else + { + axis2_char_t *lang = NULL; + axis2_bool_t is_exists = AXIS2_FALSE; + lang = axiom_soap_fault_text_get_lang(fault_text, env); + if(lang) + { + is_exists = axiom_soap_fault_reason_lang_exists(fault_reason, env, lang); + if(is_exists == AXIS2_TRUE) + { + return AXIS2_FAILURE; + } + /** this soap_fault text already exists */ + } + axutil_array_list_add(fault_reason->fault_texts, env, fault_text); + } + return AXIS2_SUCCESS; +} + +static axis2_bool_t +axiom_soap_fault_reason_lang_exists( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env, + axis2_char_t * lang) +{ + int size = 0; + int i = 0; + + if(!lang || (axutil_strcmp(lang, "") == 0) || !fault_reason->fault_texts) + { + return AXIS2_FALSE; + } + size = axutil_array_list_size(fault_reason->fault_texts, env); + for(i = 0; i < size; i++) + { + axiom_soap_fault_text_t *fault_text = NULL; + void *value = NULL; + value = axutil_array_list_get(fault_reason->fault_texts, env, i); + if(value) + { + axis2_char_t *text_lang = NULL; + fault_text = (axiom_soap_fault_text_t *)value; + + text_lang = axiom_soap_fault_text_get_lang(fault_text, env); + if(text_lang && (axutil_strcmp(lang, text_lang) == 0)) + { + return AXIS2_TRUE; + } + } + } + return AXIS2_FALSE; +} + +/** internal function */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_reason_set_soap_version( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env, + int soap_version) +{ + fault_reason->soap_version = soap_version; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_reason_get_soap_version( + axiom_soap_fault_reason_t * fault_reason, + const axutil_env_t * env) +{ + return fault_reason->soap_version; +} diff --git a/axiom/src/soap/soap_fault_role.c b/axiom/src/soap/soap_fault_role.c new file mode 100644 index 0000000..a438ea4 --- /dev/null +++ b/axiom/src/soap/soap_fault_role.c @@ -0,0 +1,180 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "_axiom_soap_fault.h" +#include +#include + +struct axiom_soap_fault_role +{ + axiom_node_t *om_ele_node; +}; + +AXIS2_EXTERN axiom_soap_fault_role_t *AXIS2_CALL +axiom_soap_fault_role_create( + const axutil_env_t * env) +{ + axiom_soap_fault_role_t *fault_role = NULL; + + fault_role = (axiom_soap_fault_role_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_soap_fault_role_t)); + + if(!fault_role) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create SOAP fault role"); + return NULL; + } + + fault_role->om_ele_node = NULL; + + return fault_role; +} + +AXIS2_EXTERN axiom_soap_fault_role_t *AXIS2_CALL +axiom_soap_fault_role_create_with_parent( + const axutil_env_t * env, + axiom_soap_fault_t * fault) +{ + axiom_soap_fault_role_t *fault_role = NULL; + int soap_version = -1; + + axiom_element_t *this_ele = NULL; + axiom_node_t *this_node = NULL; + + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + + axiom_namespace_t *parent_ns = NULL; + + AXIS2_PARAM_CHECK(env->error, fault, NULL); + + fault_role = axiom_soap_fault_role_create(env); + if(!fault_role) + { + return NULL; + } + parent_node = axiom_soap_fault_get_base_node(fault, env); + if(!parent_node) + { + axiom_soap_fault_role_free(fault_role, env); + return NULL; + } + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + + if(!parent_ele) + { + axiom_soap_fault_role_free(fault_role, env); + return NULL; + } + soap_version = axiom_soap_fault_get_soap_version(fault, env); + if(soap_version == AXIOM_SOAP12) + { + parent_ns = axiom_element_get_namespace(parent_ele, env, parent_node); + } + this_ele = axiom_element_create(env, parent_node, AXIOM_SOAP12_SOAP_FAULT_ROLE_LOCAL_NAME, + parent_ns, &this_node); + + if(!this_ele) + { + axiom_soap_fault_role_free(fault_role, env); + return NULL; + } + + fault_role->om_ele_node = this_node; + + axiom_soap_fault_set_role(fault, env, fault_role); + + return fault_role; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_fault_role_free( + axiom_soap_fault_role_t * fault_role, + const axutil_env_t * env) +{ + AXIS2_FREE(env->allocator, fault_role); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_role_set_role_value( + axiom_soap_fault_role_t * fault_role, + const axutil_env_t * env, + axis2_char_t * uri) +{ + axiom_element_t *role_ele = NULL; + + AXIS2_PARAM_CHECK(env->error, uri, AXIS2_FAILURE); + + if(!fault_role->om_ele_node) + { + return AXIS2_FAILURE; + } + role_ele = (axiom_element_t *)axiom_node_get_data_element(fault_role->om_ele_node, env); + + if(role_ele) + { + return axiom_element_set_text(role_ele, env, uri, fault_role->om_ele_node); + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL axiom_soap_fault_role_get_role_value( + axiom_soap_fault_role_t * fault_role, + const axutil_env_t * env) +{ + axiom_element_t *role_ele = NULL; + + if (!fault_role->om_ele_node) + { + return NULL; + } + role_ele = (axiom_element_t *) axiom_node_get_data_element + (fault_role->om_ele_node, env); + + if (role_ele) + { + return axiom_element_get_text(role_ele, env, fault_role->om_ele_node); + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_role_set_base_node( + axiom_soap_fault_role_t * fault_role, + const axutil_env_t * env, + axiom_node_t * node) +{ + AXIS2_PARAM_CHECK(env->error, node, AXIS2_FAILURE); + + if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_BASE_TYPE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + fault_role->om_ele_node = node; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL axiom_soap_fault_role_get_base_node( + axiom_soap_fault_role_t * fault_role, + const axutil_env_t * env) +{ + return fault_role->om_ele_node; +} diff --git a/axiom/src/soap/soap_fault_sub_code.c b/axiom/src/soap/soap_fault_sub_code.c new file mode 100644 index 0000000..904b406 --- /dev/null +++ b/axiom/src/soap/soap_fault_sub_code.c @@ -0,0 +1,298 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "_axiom_soap_fault_code.h" +#include +#include + +struct axiom_soap_fault_sub_code +{ + /* corresponding om element node */ + axiom_node_t *om_ele_node; + /* sub element fault value */ + axiom_soap_fault_value_t *value; + /* sub element fault subcode */ + axiom_soap_fault_sub_code_t *subcode; + /* pointer to soap builder */ + axiom_soap_builder_t *builder; + + int soap_version; +}; + +AXIS2_EXTERN axiom_soap_fault_sub_code_t *AXIS2_CALL +axiom_soap_fault_sub_code_create( + const axutil_env_t * env) +{ + axiom_soap_fault_sub_code_t *fault_sub_code = NULL; + AXIS2_ENV_CHECK(env, NULL); + fault_sub_code = (axiom_soap_fault_sub_code_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_soap_fault_sub_code_t)); + if(!fault_sub_code) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create SOAP fault sub-code"); + return NULL; + } + + fault_sub_code->om_ele_node = NULL; + fault_sub_code->value = NULL; + fault_sub_code->subcode = NULL; + fault_sub_code->builder = NULL; + + return fault_sub_code; +} + +AXIS2_EXTERN axiom_soap_fault_sub_code_t *AXIS2_CALL +axiom_soap_fault_sub_code_create_with_parent( + const axutil_env_t * env, + axiom_soap_fault_code_t * fault_code) +{ + axiom_soap_fault_sub_code_t *fault_sub_code = NULL; + axiom_element_t *this_ele = NULL; + axiom_node_t *this_node = NULL; + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + axiom_namespace_t *parent_ns = NULL; + + AXIS2_PARAM_CHECK(env->error, fault_code, NULL); + fault_sub_code = axiom_soap_fault_sub_code_create(env); + + if(!fault_sub_code) + { + return NULL; + } + parent_node = axiom_soap_fault_code_get_base_node(fault_code, env); + if(!parent_node) + { + axiom_soap_fault_sub_code_free(fault_sub_code, env); + return NULL; + } + + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + if(!parent_ele) + { + axiom_soap_fault_sub_code_free(fault_sub_code, env); + return NULL; + } + fault_sub_code->soap_version = axiom_soap_fault_code_get_soap_version(fault_code, env); + + if(fault_sub_code->soap_version == AXIOM_SOAP12) + { + parent_ns = axiom_element_get_namespace(parent_ele, env, parent_node); + } + + this_ele = axiom_element_create(env, parent_node, AXIOM_SOAP12_SOAP_FAULT_SUB_CODE_LOCAL_NAME, + parent_ns, &this_node); + + if(!this_ele) + { + axiom_soap_fault_sub_code_free(fault_sub_code, env); + return NULL; + } + + fault_sub_code->om_ele_node = this_node; + + axiom_soap_fault_code_set_sub_code(fault_code, env, fault_sub_code); + + return fault_sub_code; +} + +AXIS2_EXTERN axiom_soap_fault_sub_code_t *AXIS2_CALL +axiom_soap_fault_sub_code_create_with_parent_value( + const axutil_env_t * env, + axiom_soap_fault_code_t * fault_code, + axis2_char_t * value) +{ + axiom_soap_fault_sub_code_t *fault_sub_code = NULL; + axiom_soap_fault_value_t *fault_value = NULL; + AXIS2_PARAM_CHECK(env->error, value, NULL); + + fault_sub_code = axiom_soap_fault_sub_code_create_with_parent(env, fault_code); + if(!fault_sub_code) + { + return NULL; + } + fault_value = axiom_soap_fault_value_create_with_subcode(env, fault_sub_code); + if(!fault_value) + { + axiom_soap_fault_sub_code_free(fault_sub_code, env); + return NULL; + } + + axiom_soap_fault_value_set_text(fault_value, env, value); + return fault_sub_code; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_fault_sub_code_free( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env) +{ + if(fault_sub_code->value) + { + axiom_soap_fault_value_free(fault_sub_code->value, env); + fault_sub_code->value = NULL; + } + if(fault_sub_code->subcode) + { + axiom_soap_fault_sub_code_free(fault_sub_code->subcode, env); + fault_sub_code->subcode = NULL; + } + AXIS2_FREE(env->allocator, fault_sub_code); + + fault_sub_code = NULL; + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_sub_code_set_sub_code( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env, + axiom_soap_fault_sub_code_t * subcode) +{ + AXIS2_PARAM_CHECK(env->error, subcode, AXIS2_FAILURE); + + if(!(fault_sub_code->subcode)) + { + fault_sub_code->subcode = subcode; + return AXIS2_SUCCESS; + } + else + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "error tring to set fault subcode more than once"); + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axiom_soap_fault_value_t *AXIS2_CALL +axiom_soap_fault_sub_code_get_value( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + + if(fault_sub_code->builder) + { + while(!(fault_sub_code->value) && !axiom_node_is_complete(fault_sub_code->om_ele_node, env)) + { + status = axiom_soap_builder_next(fault_sub_code->builder, env); + if(status == AXIS2_FAILURE) + { + break; + } + } + } + return fault_sub_code->value; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_sub_code_set_value( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env, + axiom_soap_fault_value_t * fault_sub_code_val) +{ + AXIS2_PARAM_CHECK(env->error, fault_sub_code_val, AXIS2_FAILURE); + + if(!(fault_sub_code->value)) + { + fault_sub_code->value = fault_sub_code_val; + return AXIS2_SUCCESS; + } + else + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "error tring to set fault subcode value more than once"); + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axiom_soap_fault_sub_code_t *AXIS2_CALL +axiom_soap_fault_sub_code_get_subcode( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env) +{ + int status = AXIS2_SUCCESS; + + if(fault_sub_code->builder) + { + while(!(fault_sub_code->subcode) && !axiom_node_is_complete(fault_sub_code->om_ele_node, + env)) + { + status = axiom_soap_builder_next(fault_sub_code->builder, env); + if(status == AXIS2_FAILURE) + { + break; + } + } + } + return fault_sub_code->subcode; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_sub_code_set_base_node( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env, + axiom_node_t * node) +{ + AXIS2_PARAM_CHECK(env->error, node, AXIS2_FAILURE); + + if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_BASE_TYPE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + fault_sub_code->om_ele_node = node; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL axiom_soap_fault_sub_code_get_base_node( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env) +{ + return fault_sub_code->om_ele_node; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_sub_code_set_builder( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env, + axiom_soap_builder_t * builder) +{ + AXIS2_PARAM_CHECK(env->error, builder, AXIS2_FAILURE); + + fault_sub_code->builder = builder; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_sub_code_set_soap_version( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env, + int soap_version) +{ + fault_sub_code->soap_version = soap_version; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL axiom_soap_fault_sub_code_get_soap_version( + axiom_soap_fault_sub_code_t * fault_sub_code, + const axutil_env_t * env) +{ + return fault_sub_code->soap_version; +} diff --git a/axiom/src/soap/soap_fault_text.c b/axiom/src/soap/soap_fault_text.c new file mode 100644 index 0000000..9c51821 --- /dev/null +++ b/axiom/src/soap/soap_fault_text.c @@ -0,0 +1,305 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "_axiom_soap_fault_text.h" +#include "_axiom_soap_fault_reason.h" +#include +#include + +struct axiom_soap_fault_text +{ + axiom_attribute_t *lang_attribute; + + axiom_namespace_t *lang_namespace; + + axiom_node_t *om_ele_node; + + axis2_bool_t lang_ns_used; +}; + +AXIS2_EXTERN axiom_soap_fault_text_t *AXIS2_CALL +axiom_soap_fault_text_create( + const axutil_env_t * env) +{ + axiom_soap_fault_text_t *fault_text = NULL; + + fault_text = (axiom_soap_fault_text_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_soap_fault_text_t)); + if(!fault_text) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create SOAP fault text"); + return NULL; + } + + fault_text->om_ele_node = NULL; + fault_text->lang_attribute = NULL; + fault_text->lang_namespace = NULL; + fault_text->lang_ns_used = AXIS2_FALSE; + + fault_text->lang_namespace = axiom_namespace_create(env, + AXIOM_SOAP12_SOAP_FAULT_TEXT_LANG_ATTR_NS_URI, + AXIOM_SOAP12_SOAP_FAULT_TEXT_LANG_ATTR_NS_PREFIX); + + if(!(fault_text->lang_namespace)) + { + return NULL; + } + + return fault_text; +} + +AXIS2_EXTERN axiom_soap_fault_text_t *AXIS2_CALL +axiom_soap_fault_text_create_with_parent( + const axutil_env_t * env, + axiom_soap_fault_reason_t * parent) +{ + axiom_soap_fault_text_t *fault_text = NULL; + axiom_element_t *this_ele = NULL; + int soap_version = -1; + axiom_node_t *this_node = NULL; + axiom_namespace_t *parent_ns = NULL; + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + + AXIS2_PARAM_CHECK(env->error, parent, NULL); + + fault_text = axiom_soap_fault_text_create(env); + + if(!fault_text) + { + return NULL; + } + + parent_node = axiom_soap_fault_reason_get_base_node(parent, env); + if(!parent_node) + { + axiom_soap_fault_text_free(fault_text, env); + return NULL; + } + + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + if(!parent_ele) + { + axiom_soap_fault_text_free(fault_text, env); + return NULL; + } + + soap_version = axiom_soap_fault_reason_get_soap_version(parent, env); + if(AXIOM_SOAP12 == soap_version) + { + parent_ns = axiom_element_get_namespace(parent_ele, env, parent_node); + } + this_ele = axiom_element_create(env, parent_node, AXIOM_SOAP12_SOAP_FAULT_TEXT_LOCAL_NAME, + parent_ns, &this_node); + + if(!this_ele) + { + axiom_soap_fault_text_free(fault_text, env); + return NULL; + } + + fault_text->om_ele_node = this_node; + + axiom_soap_fault_reason_add_soap_fault_text(parent, env, fault_text); + + return fault_text; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_fault_text_free( + axiom_soap_fault_text_t * fault_text, + const axutil_env_t * env) +{ + + if(fault_text->lang_ns_used == AXIS2_FALSE && fault_text->lang_namespace) + { + axiom_namespace_free(fault_text->lang_namespace, env); + fault_text->lang_namespace = NULL; + } + AXIS2_FREE(env->allocator, fault_text); + fault_text = NULL; + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_text_set_lang( + axiom_soap_fault_text_t * fault_text, + const axutil_env_t * env, + const axis2_char_t * lang) +{ + int status = AXIS2_SUCCESS; + axiom_element_t *om_ele = NULL; + + AXIS2_PARAM_CHECK(env->error, lang, AXIS2_FAILURE); + + if(fault_text->lang_attribute) + { + axis2_char_t *attr_lang = NULL; + attr_lang = axiom_attribute_get_value(fault_text->lang_attribute, env); + if(attr_lang) + { + if(axutil_strcmp(attr_lang, lang) == 0) + { + + /** this attribute already exists */ + return AXIS2_SUCCESS; + } + } + axiom_attribute_set_value(fault_text->lang_attribute, env, lang); + return AXIS2_SUCCESS; + } + + fault_text->lang_attribute = axiom_attribute_create(env, + AXIOM_SOAP12_SOAP_FAULT_TEXT_LANG_ATTR_LOCAL_NAME, lang, fault_text-> lang_namespace); + if(!fault_text->lang_attribute) + { + return AXIS2_FAILURE; + } + + if(!fault_text->om_ele_node) + { + return AXIS2_FAILURE; + } + om_ele = (axiom_element_t *)axiom_node_get_data_element(fault_text->om_ele_node, env); + if(!om_ele) + { + return AXIS2_FAILURE; + } + + status = axiom_element_add_attribute(om_ele, env, fault_text->lang_attribute, + fault_text->om_ele_node); + + if(status == AXIS2_SUCCESS) + { + fault_text->lang_ns_used = AXIS2_TRUE; + } + else + { + axiom_attribute_free(fault_text->lang_attribute, env); + fault_text->lang_attribute = NULL; + } + return status; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_soap_fault_text_get_lang( + axiom_soap_fault_text_t * fault_text, + const axutil_env_t * env) +{ + axiom_element_t *om_ele = NULL; + axutil_qname_t *tmp_qname = NULL; + + if(!fault_text->om_ele_node) + { + return NULL; + } + om_ele = (axiom_element_t *)axiom_node_get_data_element(fault_text->om_ele_node, env); + if(!om_ele) + { + return NULL; + } + if(!(fault_text->lang_attribute)) + { + + /* this logic need to be rechecked */ + tmp_qname = axutil_qname_create(env, AXIOM_SOAP12_SOAP_FAULT_TEXT_LANG_ATTR_LOCAL_NAME, + AXIOM_SOAP12_SOAP_FAULT_TEXT_LANG_ATTR_NS_URI, + AXIOM_SOAP12_SOAP_FAULT_TEXT_LANG_ATTR_NS_PREFIX); + + fault_text->lang_attribute = axiom_element_get_attribute(om_ele, env, tmp_qname); + axutil_qname_free(tmp_qname, env); + } + if(fault_text->lang_attribute) + { + return axiom_attribute_get_value(fault_text->lang_attribute, env); + } + else + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_text_set_base_node( + axiom_soap_fault_text_t * fault_text, + const axutil_env_t * env, + axiom_node_t * node) +{ + + if(node && (axiom_node_get_node_type(node, env) != AXIOM_ELEMENT)) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_BASE_TYPE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + fault_text->om_ele_node = node; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_soap_fault_text_get_base_node( + axiom_soap_fault_text_t * fault_text, + const axutil_env_t * env) +{ + return fault_text->om_ele_node; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_text_set_text( + axiom_soap_fault_text_t * fault_text, + const axutil_env_t * env, + axis2_char_t * value, + axis2_char_t * lang) +{ + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + + if(fault_text->om_ele_node) + { + axiom_element_t *text_ele = NULL; + text_ele = (axiom_element_t *)axiom_node_get_data_element(fault_text->om_ele_node, env); + if(text_ele) + { + axiom_element_set_text(text_ele, env, value, fault_text->om_ele_node); + if(lang) + { + axiom_soap_fault_text_set_lang(fault_text, env, lang); + } + return AXIS2_SUCCESS; + } + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_soap_fault_text_get_text( + axiom_soap_fault_text_t * fault_text, + const axutil_env_t * env) +{ + axis2_char_t *text = NULL; + + if(fault_text->om_ele_node) + { + axiom_element_t *text_ele = NULL; + text_ele = (axiom_element_t *)axiom_node_get_data_element(fault_text->om_ele_node, env); + if(text_ele) + { + text = axiom_element_get_text(text_ele, env, fault_text->om_ele_node); + return text; + } + } + return NULL; +} diff --git a/axiom/src/soap/soap_fault_value.c b/axiom/src/soap/soap_fault_value.c new file mode 100644 index 0000000..775cba4 --- /dev/null +++ b/axiom/src/soap/soap_fault_value.c @@ -0,0 +1,237 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include "_axiom_soap_fault_sub_code.h" +#include "_axiom_soap_fault_code.h" +#include +#include + +struct axiom_soap_fault_value +{ + + /** store om element node */ + axiom_node_t *om_ele_node; +}; + +AXIS2_EXTERN axiom_soap_fault_value_t *AXIS2_CALL +axiom_soap_fault_value_create( + const axutil_env_t * env) +{ + axiom_soap_fault_value_t *fault_value = NULL; + + fault_value = (axiom_soap_fault_value_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_soap_fault_value_t)); + + if(!fault_value) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create SOAP fault value"); + return NULL; + } + + fault_value->om_ele_node = NULL; + + return fault_value; +} + +AXIS2_EXTERN axiom_soap_fault_value_t *AXIS2_CALL +axiom_soap_fault_value_create_with_subcode( + const axutil_env_t * env, + axiom_soap_fault_sub_code_t * parent) +{ + axiom_soap_fault_value_t *fault_value = NULL; + + axiom_element_t *this_ele = NULL; + axiom_node_t *this_node = NULL; + axiom_namespace_t *parent_ns = NULL; + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + int soap_version = -1; + + AXIS2_PARAM_CHECK(env->error, parent, NULL); + + fault_value = axiom_soap_fault_value_create(env); + + if(!fault_value) + { + return NULL; + } + + parent_node = axiom_soap_fault_sub_code_get_base_node(parent, env); + + if(!parent_node) + { + axiom_soap_fault_value_free(fault_value, env); + return NULL; + } + + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + + if(!parent_ele) + { + axiom_soap_fault_value_free(fault_value, env); + return NULL; + } + soap_version = axiom_soap_fault_sub_code_get_soap_version(parent, env); + if(soap_version == AXIOM_SOAP12) + { + parent_ns = axiom_element_get_namespace(parent_ele, env, parent_node); + } + + this_ele = axiom_element_create(env, parent_node, AXIOM_SOAP12_SOAP_FAULT_VALUE_LOCAL_NAME, + parent_ns, &this_node); + + if(!this_ele) + { + axiom_soap_fault_value_free(fault_value, env); + return NULL; + } + + fault_value->om_ele_node = this_node; + + axiom_soap_fault_sub_code_set_value(parent, env, fault_value); + + return fault_value; +} + +AXIS2_EXTERN axiom_soap_fault_value_t *AXIS2_CALL +axiom_soap_fault_value_create_with_code( + const axutil_env_t * env, + axiom_soap_fault_code_t * parent) +{ + axiom_soap_fault_value_t *fault_value = NULL; + int soap_version = -1; + axiom_element_t *this_ele = NULL; + axiom_node_t *this_node = NULL; + axiom_namespace_t *parent_ns = NULL; + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + + AXIS2_PARAM_CHECK(env->error, parent, NULL); + + fault_value = axiom_soap_fault_value_create(env); + + if(!fault_value) + { + return NULL; + } + + parent_node = axiom_soap_fault_code_get_base_node(parent, env); + if(!parent_node) + { + axiom_soap_fault_value_free(fault_value, env); + return NULL; + } + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + if(!parent_ele) + { + axiom_soap_fault_value_free(fault_value, env); + return NULL; + } + soap_version = axiom_soap_fault_code_get_soap_version(parent, env); + if(soap_version == AXIOM_SOAP12) + { + parent_ns = axiom_element_get_namespace(parent_ele, env, parent_node); + } + this_ele = axiom_element_create(env, parent_node, AXIOM_SOAP12_SOAP_FAULT_VALUE_LOCAL_NAME, + parent_ns, &this_node); + + if(!this_ele) + { + axiom_soap_fault_value_free(fault_value, env); + return NULL; + } + fault_value->om_ele_node = this_node; + + axiom_soap_fault_code_set_value(parent, env, fault_value); + + return fault_value; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_fault_value_free( + axiom_soap_fault_value_t * fault_value, + const axutil_env_t * env) +{ + AXIS2_FREE(env->allocator, fault_value); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_value_set_base_node( + axiom_soap_fault_value_t * fault_value, + const axutil_env_t * env, + axiom_node_t * node) +{ + + if(node && (axiom_node_get_node_type(node, env) != AXIOM_ELEMENT)) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_BASE_TYPE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + fault_value->om_ele_node = node; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_soap_fault_value_get_base_node( + axiom_soap_fault_value_t * fault_value, + const axutil_env_t * env) +{ + return fault_value->om_ele_node; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_soap_fault_value_get_text( + axiom_soap_fault_value_t * fault_value, + const axutil_env_t * env) +{ + axiom_node_t *value_node = NULL; + axiom_element_t *value_element = NULL; + + value_node = axiom_soap_fault_value_get_base_node(fault_value, env); + + if(!value_node) + { + return NULL; + } + value_element = (axiom_element_t *)axiom_node_get_data_element(value_node, env); + + if(!value_element) + { + return NULL; + } + return axiom_element_get_text(value_element, env, value_node); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_fault_value_set_text( + axiom_soap_fault_value_t * fault_value, + const axutil_env_t * env, + axis2_char_t * text) +{ + AXIS2_PARAM_CHECK(env->error, text, AXIS2_FAILURE); + if(fault_value->om_ele_node && axiom_node_get_node_type(fault_value->om_ele_node, env) + == AXIOM_ELEMENT) + { + axiom_element_t *om_ele = NULL; + om_ele = (axiom_element_t *)axiom_node_get_data_element(fault_value->om_ele_node, env); + return axiom_element_set_text(om_ele, env, text, fault_value->om_ele_node); + } + return AXIS2_FAILURE; +} diff --git a/axiom/src/soap/soap_header.c b/axiom/src/soap/soap_header.c new file mode 100644 index 0000000..6c6a71c --- /dev/null +++ b/axiom/src/soap/soap_header.c @@ -0,0 +1,655 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "_axiom_soap_envelope.h" +#include "_axiom_soap_header.h" +#include "_axiom_soap_body.h" +#include +#include +#include +#include +#include +#include +#include + +struct axiom_soap_header +{ + axiom_node_t *om_ele_node; + + int soap_version; + + axutil_hash_t *header_blocks; + + int hbnumber; + + axiom_soap_builder_t *soap_builder; + + axiom_soap_envelope_t *soap_envelope; + + axutil_array_list_t *header_block_keys; +}; + +static axis2_bool_t AXIS2_CALL axiom_soap_header_qname_matches( + const axutil_env_t * env, + axutil_qname_t * element_qname, + axutil_qname_t * qname_to_match); + +AXIS2_EXTERN axiom_soap_header_t *AXIS2_CALL +axiom_soap_header_create( + const axutil_env_t * env) +{ + axiom_soap_header_t *soap_header = NULL; + + soap_header = (axiom_soap_header_t *)AXIS2_MALLOC(env->allocator, sizeof(axiom_soap_header_t)); + if(!soap_header) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create SOAP header"); + return NULL; + } + + soap_header->om_ele_node = NULL; + soap_header->soap_envelope = NULL; + soap_header->hbnumber = 0; + soap_header->header_blocks = NULL; + + /** default value */ + soap_header->soap_version = AXIOM_SOAP12; + soap_header->header_block_keys = NULL; + + soap_header->header_block_keys = axutil_array_list_create(env, 10); + if(!soap_header->header_block_keys) + { + AXIS2_FREE(env->allocator, soap_header); + return NULL; + } + + return soap_header; +} + +AXIS2_EXTERN axiom_soap_header_t *AXIS2_CALL +axiom_soap_header_create_with_parent( + const axutil_env_t * env, + axiom_soap_envelope_t * envelope) +{ + axiom_soap_header_t *soap_header = NULL; + + /*axiom_element_t *this_ele = NULL; + axiom_node_t *this_node = NULL;*/ + axiom_node_t *body_node = NULL; + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + + /*axiom_namespace_t *parent_ns = NULL;*/ + + AXIS2_PARAM_CHECK(env->error, envelope, NULL); + + soap_header = axiom_soap_header_create(env); + if(!soap_header) + { + return NULL; + } + soap_header->soap_version = axiom_soap_envelope_get_soap_version(envelope, env); + + parent_node = axiom_soap_envelope_get_base_node(envelope, env); + + if(!parent_node || axiom_node_get_node_type(parent_node, env) != AXIOM_ELEMENT) + { + axiom_soap_header_free(soap_header, env); + return NULL; + } + + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + if(!parent_ele) + { + axiom_soap_header_free(soap_header, env); + return NULL; + } + if(axiom_node_get_first_element(parent_node, env)) + { + body_node = axiom_node_get_first_element(parent_node, env); + axiom_node_detach(body_node, env); + } + + /*parent_ns = axiom_element_get_namespace(parent_ele, env, parent_node); + this_ele = axiom_element_create(env, parent_node, + AXIOM_SOAP_HEADER_LOCAL_NAME, parent_ns, + &this_node); + if (!this_ele) + { + axiom_soap_header_free(soap_header, env); + return NULL; + } + + soap_header->om_ele_node = this_node;*/ + + axiom_soap_envelope_set_header(envelope, env, soap_header); + + if(body_node) + { + axiom_node_add_child(parent_node, env, body_node); + } + + soap_header->soap_envelope = envelope; + + return soap_header; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_header_free( + axiom_soap_header_t * soap_header, + const axutil_env_t * env) +{ + + if(soap_header->header_blocks) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + for(hi = axutil_hash_first(soap_header->header_blocks, env); hi; hi = axutil_hash_next(env, + hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + + if(val) + { + axiom_soap_header_block_free((axiom_soap_header_block_t *)val, env); + val = NULL; + } + } + + axutil_hash_free(soap_header->header_blocks, env); + } + if(soap_header->header_block_keys) + { + int size = 0; + void *val = NULL; + int i = 0; + size = axutil_array_list_size(soap_header->header_block_keys, env); + for(i = 0; i < size; i++) + { + val = axutil_array_list_get(soap_header->header_block_keys, env, i); + if(val) + { + AXIS2_FREE(env->allocator, (char *)val); + val = NULL; + } + } + axutil_array_list_free(soap_header->header_block_keys, env); + soap_header->header_block_keys = NULL; + } + AXIS2_FREE(env->allocator, soap_header); + + soap_header = NULL; + + return; +} + +AXIS2_EXTERN axiom_soap_header_block_t *AXIS2_CALL +axiom_soap_header_add_header_block( + axiom_soap_header_t * soap_header, + const axutil_env_t * env, + const axis2_char_t * localname, + axiom_namespace_t * ns) +{ + axiom_soap_header_block_t *header_block = NULL; + + axiom_namespace_t *cloned_ns = NULL; + + axiom_node_t *header_block_node = NULL; + + AXIS2_PARAM_CHECK(env->error, localname, NULL); + AXIS2_PARAM_CHECK(env->error, ns, NULL); + + cloned_ns = axiom_namespace_clone(ns, env); + if(!cloned_ns) + { + return NULL; + } + header_block = axiom_soap_header_block_create_with_parent(env, localname, cloned_ns, + soap_header); + + if(!header_block) + { + return NULL; + } + header_block_node = axiom_soap_header_block_get_base_node(header_block, env); + + if(header_block_node) + { + axiom_node_set_complete(header_block_node, env, AXIS2_TRUE); + + return header_block; + } + else + { + return NULL; + } +} +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL axiom_soap_header_examine_header_blocks( + axiom_soap_header_t * soap_header, + const axutil_env_t * env, + axis2_char_t * param_role) +{ + AXIS2_PARAM_CHECK(env->error, param_role, NULL); + + return soap_header->header_blocks; +} + +AXIS2_EXTERN axiom_children_qname_iterator_t *AXIS2_CALL +axiom_soap_header_examine_all_header_blocks( + axiom_soap_header_t * soap_header, + const axutil_env_t * env) +{ + axiom_element_t *om_ele = NULL; + + if(!soap_header->om_ele_node) + { + return NULL; + } + om_ele = (axiom_element_t *)axiom_node_get_data_element(soap_header-> om_ele_node, env); + + if(om_ele) + { + return axiom_element_get_children_with_qname(om_ele, env, NULL, soap_header->om_ele_node); + } + else + return NULL; +} + +AXIS2_EXTERN axiom_children_with_specific_attribute_iterator_t *AXIS2_CALL +axiom_soap_header_extract_header_blocks( + axiom_soap_header_t * soap_header, + const axutil_env_t * env, + axis2_char_t * role) +{ + const axis2_char_t *localname = NULL; + const axis2_char_t *nsuri = NULL; + + axiom_node_t *first_node = NULL; + axiom_element_t *first_ele = NULL; + + axutil_qname_t *qn = NULL; + + axiom_element_t *header_om_ele = NULL; + axiom_children_with_specific_attribute_iterator_t *iter = NULL; + + if(soap_header->soap_version == AXIOM_SOAP_VERSION_NOT_SET) + { + return NULL; + } + if(soap_header->soap_version == AXIOM_SOAP11) + { + localname = AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI; + nsuri = AXIOM_SOAP11_ATTR_ACTOR; + } + if(soap_header->soap_version == AXIOM_SOAP12) + { + localname = AXIOM_SOAP12_SOAP_ROLE; + nsuri = AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + } + + qn = axutil_qname_create(env, localname, nsuri, NULL); + if(!qn) + { + return NULL; + } + header_om_ele = (axiom_element_t *)axiom_node_get_data_element(soap_header->om_ele_node, env); + + if(header_om_ele) + { + first_ele = axiom_element_get_first_element(header_om_ele, env, soap_header->om_ele_node, + &first_node); + if(first_node) + { + return axiom_children_with_specific_attribute_iterator_create(env, first_node, qn, + role, AXIS2_TRUE); + } + } + + axutil_qname_free(qn, env); + + return iter; + +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_header_set_base_node( + axiom_soap_header_t * soap_header, + const axutil_env_t * env, + axiom_node_t * node) +{ + AXIS2_PARAM_CHECK(env->error, node, AXIS2_FAILURE); + + if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_BASE_TYPE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + soap_header->om_ele_node = node; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_soap_header_get_base_node( + axiom_soap_header_t * soap_header, + const axutil_env_t * env) +{ + if(!soap_header->om_ele_node) + { + axiom_node_t *parent_node = NULL; + axiom_element_t *parent_ele = NULL; + axiom_namespace_t *parent_ns = NULL; + axiom_element_t *this_ele = NULL; + axiom_node_t *this_node = NULL; + axiom_soap_body_t *soap_body = NULL; + axiom_node_t *body_node = NULL; + + parent_node = axiom_soap_envelope_get_base_node(soap_header->soap_envelope, env); + + if(!parent_node || axiom_node_get_node_type(parent_node, env) != AXIOM_ELEMENT) + { + axiom_soap_header_free(soap_header, env); + return NULL; + } + + parent_ele = (axiom_element_t *)axiom_node_get_data_element(parent_node, env); + if(!parent_ele) + { + axiom_soap_header_free(soap_header, env); + return NULL; + } + + parent_ns = axiom_element_get_namespace(parent_ele, env, parent_node); + this_ele = axiom_element_create(env, NULL, AXIOM_SOAP_HEADER_LOCAL_NAME, parent_ns, + &this_node); + if(!this_ele) + { + axiom_soap_header_free(soap_header, env); + return NULL; + } + + soap_body = axiom_soap_envelope_get_body(soap_header->soap_envelope, env); + if(soap_body) + { + body_node = axiom_soap_body_get_base_node(soap_body, env); + axiom_node_insert_sibling_before(body_node, env, this_node); + } + else + { + axiom_node_add_child(parent_node, env, this_node); + } + soap_header->om_ele_node = this_node; + } + + return soap_header->om_ele_node; +} + +/** + set soap version and get soap version are internal functions + + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_header_get_soap_version( + axiom_soap_header_t * soap_header, + const axutil_env_t * env) +{ + return soap_header->soap_version; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_header_set_soap_version( + axiom_soap_header_t * soap_header, + const axutil_env_t * env, + int soap_version) +{ + soap_header->soap_version = soap_version; + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_header_set_header_block( + axiom_soap_header_t * soap_header, + const axutil_env_t * env, + struct axiom_soap_header_block * header_block) +{ + axis2_char_t *key = NULL; + AXIS2_PARAM_CHECK(env->error, header_block, AXIS2_FAILURE); + + key = (axis2_char_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * 10); + + if(!key) + { + return AXIS2_FAILURE; + } + sprintf(key, "%d", soap_header->hbnumber++); + + if(soap_header->header_blocks) + { + axutil_hash_set(soap_header->header_blocks, key, AXIS2_HASH_KEY_STRING, header_block); + } + else + { + soap_header->header_blocks = axutil_hash_make(env); + axutil_hash_set(soap_header->header_blocks, key, AXIS2_HASH_KEY_STRING, header_block); + } + if(soap_header->header_block_keys) + { + axutil_array_list_add(soap_header->header_block_keys, env, key); + } + return AXIS2_SUCCESS; + +} +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_header_set_builder( + axiom_soap_header_t * soap_header, + const axutil_env_t * env, + struct axiom_soap_builder * builder) +{ + AXIS2_PARAM_CHECK(env->error, builder, AXIS2_FAILURE); + + soap_header->soap_builder = builder; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axiom_soap_header_get_header_blocks_with_namespace_uri( + axiom_soap_header_t * soap_header, + const axutil_env_t * env, + const axis2_char_t * ns_uri) +{ + axutil_array_list_t *header_block_list = NULL; + axutil_hash_index_t *hash_index = NULL; + + axiom_soap_header_block_t *header_block = NULL; + + axiom_node_t *header_block_om_node = NULL; + axiom_element_t *header_block_om_ele = NULL; + + axiom_namespace_t *ns = NULL; + axis2_char_t *hb_namespace_uri = NULL; + + int found = 0; + void *hb = NULL; + + AXIS2_PARAM_CHECK(env->error, ns_uri, NULL); + + if(!(soap_header->header_blocks)) + { + return NULL; + } + header_block_list = axutil_array_list_create(env, 10); + if(!header_block_list) + { + return NULL; + } + for(hash_index = axutil_hash_first(soap_header->header_blocks, env); hash_index; hash_index + = axutil_hash_next(env, hash_index)) + { + axutil_hash_this(hash_index, NULL, NULL, &hb); + if(hb) + { + header_block = (axiom_soap_header_block_t *)hb; + + header_block_om_node = axiom_soap_header_block_get_base_node(header_block, env); + if(header_block_om_node) + { + header_block_om_ele = (axiom_element_t *)axiom_node_get_data_element( + header_block_om_node, env); + if(header_block_om_ele) + { + ns + = axiom_element_get_namespace(header_block_om_ele, env, + header_block_om_node); + if(ns) + { + hb_namespace_uri = axiom_namespace_get_uri(ns, env); + if(axutil_strcmp(hb_namespace_uri, ns_uri) == 0) + { + axutil_array_list_add(header_block_list, env, header_block); + found++; + } + } + } + } + hb = NULL; + header_block = NULL; + header_block_om_ele = NULL; + header_block_om_node = NULL; + ns = NULL; + hb_namespace_uri = NULL; + } + } + if(found > 0) + { + return header_block_list; + } + else + { + axutil_array_list_free(header_block_list, env); + } + return NULL; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axiom_soap_header_get_all_header_blocks( + axiom_soap_header_t * soap_header, + const axutil_env_t * env) +{ + return soap_header->header_blocks; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_header_remove_header_block( + axiom_soap_header_t * soap_header, + const axutil_env_t * env, + axutil_qname_t * qname) +{ + axis2_char_t *qn_localname = NULL; + axis2_char_t *qname_ns = NULL; + axis2_char_t *qname_prefix = NULL; + axutil_hash_index_t *hi = NULL; + + AXIS2_PARAM_CHECK(env->error, qname, AXIS2_FAILURE); + + qn_localname = axutil_qname_get_localpart(qname, env); + qname_ns = axutil_qname_get_uri(qname, env); + qname_prefix = axutil_qname_get_prefix(qname, env); + + if(!soap_header->header_blocks) + { + return AXIS2_FAILURE; + } + for(hi = axutil_hash_first(soap_header->header_blocks, env); hi; hi = axutil_hash_next(env, hi)) + { + const void *key = NULL; + void *val = NULL; + + axutil_hash_this(hi, &key, NULL, &val); + if(val) + { + axiom_soap_header_block_t *header_block = NULL; + axiom_element_t *ele = NULL; + axiom_node_t *node = NULL; + + header_block = (axiom_soap_header_block_t *)val; + node = axiom_soap_header_block_get_base_node(header_block, env); + if(node) + { + axutil_qname_t *element_qname = NULL; + + ele = (axiom_element_t *)axiom_node_get_data_element(node, env); + element_qname = axiom_element_get_qname(ele, env, node); + if(axiom_soap_header_qname_matches(env, element_qname, qname) == AXIS2_TRUE) + { + axiom_node_detach(node, env); + /* axiom_node_free_tree(node, env); */ + axutil_hash_set(soap_header->header_blocks, key, AXIS2_HASH_KEY_STRING, NULL); + axiom_soap_header_block_free(header_block, env); + axiom_node_free_tree(node, env); + break; + } + } + } + } + + if(hi) + { + AXIS2_FREE(env->allocator, hi); + } + + return AXIS2_SUCCESS; +} + +static axis2_bool_t AXIS2_CALL +axiom_soap_header_qname_matches( + const axutil_env_t * env, + axutil_qname_t * element_qname, + axutil_qname_t * qname_to_match) +{ + int lparts_match = 0; + int uris_match = 0; + axis2_char_t *ele_lpart = NULL; + axis2_char_t *match_lpart = NULL; + axis2_char_t *ele_nsuri = NULL; + axis2_char_t *match_nsuri = NULL; + + if(!(qname_to_match)) + { + return AXIS2_TRUE; + } + if(qname_to_match) + { + match_lpart = axutil_qname_get_localpart(qname_to_match, env); + match_nsuri = axutil_qname_get_uri(qname_to_match, env); + } + if(element_qname) + { + ele_lpart = axutil_qname_get_localpart(element_qname, env); + ele_nsuri = axutil_qname_get_uri(element_qname, env); + } + + lparts_match = (!match_lpart || (axutil_strcmp(match_lpart, "") == 0) || (element_qname + && (axutil_strcmp(ele_lpart, match_lpart) == 0))); + + uris_match = (!match_nsuri || (axutil_strcmp(match_nsuri, "") == 0) || (element_qname + && (axutil_strcmp(ele_nsuri, match_nsuri) == 0))); + + return lparts_match && uris_match; +} diff --git a/axiom/src/soap/soap_header_block.c b/axiom/src/soap/soap_header_block.c new file mode 100644 index 0000000..6f80f3a --- /dev/null +++ b/axiom/src/soap/soap_header_block.c @@ -0,0 +1,460 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "_axiom_soap_header_block.h" +#include "_axiom_soap_header.h" +#include +#include + +struct axiom_soap_header_block +{ + + /** om_element node corresponding to this headerblock */ + axiom_node_t *om_ele_node; + + /** soap version */ + int soap_version; + axis2_bool_t processed; +}; + +AXIS2_EXTERN axiom_soap_header_block_t *AXIS2_CALL +axiom_soap_header_block_create( + const axutil_env_t * env) +{ + axiom_soap_header_block_t *header_block = NULL; + AXIS2_ENV_CHECK(env, NULL); + header_block = (axiom_soap_header_block_t *)AXIS2_MALLOC(env->allocator, + sizeof(axiom_soap_header_block_t)); + if(!header_block) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create SOAP header block"); + return NULL; + } + + header_block->om_ele_node = NULL; + header_block->soap_version = AXIOM_SOAP_VERSION_NOT_SET; + header_block->processed = AXIS2_FALSE; + + return header_block; +} + +AXIS2_EXTERN axiom_soap_header_block_t *AXIS2_CALL +axiom_soap_header_block_create_with_parent( + const axutil_env_t * env, + const axis2_char_t * localname, + axiom_namespace_t * ns, + axiom_soap_header_t * header) +{ + axiom_soap_header_block_t *header_block = NULL; + axiom_node_t *this_node = NULL; + axiom_node_t *parent_node = NULL; + axiom_element_t *om_ele = NULL; + AXIS2_PARAM_CHECK(env->error, localname, NULL); + + header_block = axiom_soap_header_block_create(env); + if(!header_block) + { + return NULL; + } + parent_node = axiom_soap_header_get_base_node(header, env); + if(!parent_node) + { + return NULL; + } + om_ele = axiom_element_create(env, parent_node, localname, ns, &this_node); + if(!om_ele) + { + axiom_soap_header_block_free(header_block, env); + return NULL; + } + header_block->om_ele_node = this_node; + + axiom_soap_header_set_header_block(header, env, header_block); + + header_block->soap_version = axiom_soap_header_get_soap_version(header, env); + + return header_block; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_soap_header_block_free( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env) +{ + AXIS2_FREE(env->allocator, header_block); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_header_block_set_role( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env, + axis2_char_t * role_uri) +{ + const axis2_char_t *attr_localname = NULL; + const axis2_char_t *attr_nsuri = NULL; + + if(header_block->soap_version == AXIOM_SOAP_VERSION_NOT_SET) + { + return AXIS2_FAILURE; + } + if(header_block->soap_version == AXIOM_SOAP11) + { + attr_localname = AXIOM_SOAP11_ATTR_ACTOR; + attr_nsuri = AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI; + } + if(header_block->soap_version == AXIOM_SOAP12) + { + attr_localname = AXIOM_SOAP12_SOAP_ROLE; + attr_nsuri = AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + } + axiom_soap_header_block_set_attribute(header_block, env, attr_localname, role_uri, attr_nsuri); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL axiom_soap_header_block_get_role( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env) +{ + const axis2_char_t *attr_localname = NULL; + const axis2_char_t *attr_nsuri = NULL; + + if (header_block->soap_version == AXIOM_SOAP_VERSION_NOT_SET) + { + return NULL; + } + if (header_block->soap_version == AXIOM_SOAP11) + { + attr_localname = AXIOM_SOAP11_ATTR_ACTOR; + attr_nsuri = AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI; + } + if (header_block->soap_version == AXIOM_SOAP12) + { + attr_localname = AXIOM_SOAP12_SOAP_ROLE; + attr_nsuri = AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + } + return axiom_soap_header_block_get_attribute(header_block, env, + attr_localname, attr_nsuri); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_header_block_set_must_understand_with_bool( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env, + axis2_bool_t must_understand) +{ + const axis2_char_t *attr_nsuri = NULL; + const axis2_char_t *attr_value = NULL; + + if(header_block->soap_version == AXIOM_SOAP_VERSION_NOT_SET) + { + return AXIS2_FAILURE; + } + if(header_block->soap_version == AXIOM_SOAP11) + { + attr_nsuri = AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI; + } + if(header_block->soap_version == AXIOM_SOAP12) + { + attr_nsuri = AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + } + if(must_understand) + { + attr_value = "1"; + } + else + { + attr_value = "0"; + } + return axiom_soap_header_block_set_attribute(header_block, env, + AXIOM_SOAP_ATTR_MUST_UNDERSTAND, attr_value, attr_nsuri); + +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_header_block_set_must_understand_with_string( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env, + axis2_char_t * must_understand) +{ + const axis2_char_t *attr_nsuri = NULL; + + AXIS2_PARAM_CHECK(env->error, must_understand, AXIS2_FAILURE); + + if(header_block->soap_version == AXIOM_SOAP_VERSION_NOT_SET) + { + return AXIS2_FAILURE; + } + if(header_block->soap_version == AXIOM_SOAP11) + { + attr_nsuri = AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI; + } + if(header_block->soap_version == AXIOM_SOAP12) + { + attr_nsuri = AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + } + + if(axutil_strcmp(AXIOM_SOAP_ATTR_MUST_UNDERSTAND_TRUE, must_understand) == 0 || axutil_strcmp( + AXIOM_SOAP_ATTR_MUST_UNDERSTAND_FALSE, must_understand) == 0 || axutil_strcmp( + AXIOM_SOAP_ATTR_MUST_UNDERSTAND_0, must_understand) == 0 || axutil_strcmp( + AXIOM_SOAP_ATTR_MUST_UNDERSTAND_1, must_understand) == 0) + { + + axiom_soap_header_block_set_attribute(header_block, env, AXIOM_SOAP_ATTR_MUST_UNDERSTAND, + must_understand, attr_nsuri); + return AXIS2_SUCCESS; + } + else + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_MUST_UNDERSTAND_SHOULD_BE_1_0_TRUE_FALSE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_soap_header_block_get_must_understand( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env) +{ + const axis2_char_t *must_understand = NULL; + const axis2_char_t *attr_nsuri = NULL; + + if(header_block->soap_version == AXIOM_SOAP_VERSION_NOT_SET) + { + return AXIS2_FAILURE; + } + if(header_block->soap_version == AXIOM_SOAP11) + { + attr_nsuri = AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI; + } + if(header_block->soap_version == AXIOM_SOAP12) + { + attr_nsuri = AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + } + must_understand = axiom_soap_header_block_get_attribute(header_block, env, + AXIOM_SOAP_ATTR_MUST_UNDERSTAND, attr_nsuri); + if(!must_understand) + { + return AXIS2_FALSE; + } + if(axutil_strcmp(must_understand, AXIOM_SOAP_ATTR_MUST_UNDERSTAND_1) == 0 || axutil_strcmp( + must_understand, AXIOM_SOAP_ATTR_MUST_UNDERSTAND_TRUE) == 0) + { + return AXIS2_TRUE; + } + else if(axutil_strcmp(must_understand, AXIOM_SOAP_ATTR_MUST_UNDERSTAND_0) == 0 + || axutil_strcmp(must_understand, AXIOM_SOAP_ATTR_MUST_UNDERSTAND_FALSE) == 0) + { + return AXIS2_FALSE; + } + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_VALUE_FOUND_IN_MUST_UNDERSTAND, AXIS2_FAILURE); + return AXIS2_FALSE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_header_block_set_attribute( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env, + const axis2_char_t * attr_name, + const axis2_char_t * attr_value, + const axis2_char_t * soap_envelope_namespace_uri) +{ + axiom_attribute_t *om_attr = NULL; + axiom_node_t *header_node = NULL; + axiom_element_t *header_ele = NULL; + axiom_namespace_t *header_ns = NULL; + axis2_char_t *prefix = NULL; + axutil_qname_t *qn = NULL; + axiom_namespace_t *om_ns = NULL; + axiom_element_t *om_ele = NULL; + + AXIS2_PARAM_CHECK(env->error, attr_name, AXIS2_FAILURE); + + header_node = axiom_node_get_parent(header_block->om_ele_node, env); + if(!header_node) + { + return AXIS2_FAILURE; + } + if(axiom_node_get_node_type(header_node, env) == AXIOM_ELEMENT) + { + header_ele = (axiom_element_t *)axiom_node_get_data_element(header_node, env); + if(!header_ele) + { + return AXIS2_FAILURE; + } + header_ns = axiom_element_get_namespace(header_ele, env, header_node); + if(!header_ns) + { + return AXIS2_FAILURE; + } + prefix = axiom_namespace_get_prefix(header_ns, env); + } + + qn = axutil_qname_create(env, attr_name, soap_envelope_namespace_uri, prefix); + + if(!qn) + { + return AXIS2_FAILURE; + } + if(!header_block->om_ele_node) + { + return AXIS2_FAILURE; + } + om_ele = (axiom_element_t *)axiom_node_get_data_element(header_block-> om_ele_node, env); + + om_attr = axiom_element_get_attribute(om_ele, env, qn); + + axutil_qname_free(qn, env); + if(om_attr) + { + return axiom_attribute_set_value(om_attr, env, attr_value); + } + if(soap_envelope_namespace_uri) + { + if(prefix) + { + om_ns = axiom_namespace_create(env, soap_envelope_namespace_uri, prefix); + } + else + { + om_ns = axiom_namespace_create(env, soap_envelope_namespace_uri, + AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX); + } + } + om_attr = axiom_attribute_create(env, attr_name, attr_value, om_ns); + if(!om_attr && om_ns) + { + axiom_namespace_free(om_ns, env); + return AXIS2_FAILURE; + } + + return axiom_element_add_attribute(om_ele, env, om_attr, header_block->om_ele_node); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_soap_header_block_get_attribute( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env, + const axis2_char_t * attr_name, + const axis2_char_t * soap_envelope_namespace_uri) +{ + axiom_attribute_t *om_attr = NULL; + axis2_char_t *attr_value = NULL; + axiom_node_t *header_node = NULL; + axiom_element_t *header_ele = NULL; + axiom_namespace_t *header_ns = NULL; + axis2_char_t *prefix = NULL; + axutil_qname_t *qn = NULL; + axiom_element_t *om_ele = NULL; + AXIS2_PARAM_CHECK(env->error, attr_name, NULL); + AXIS2_PARAM_CHECK(env->error, soap_envelope_namespace_uri, NULL); + + header_node = axiom_node_get_parent(header_block->om_ele_node, env); + if(!header_node) + { + return NULL; + } + if(axiom_node_get_node_type(header_node, env) == AXIOM_ELEMENT) + { + header_ele = (axiom_element_t *)axiom_node_get_data_element(header_node, env); + if(!header_ele) + { + return NULL; + } + header_ns = axiom_element_get_namespace(header_ele, env, header_node); + if(!header_ns) + { + return NULL; + } + prefix = axiom_namespace_get_prefix(header_ns, env); + } + qn = axutil_qname_create(env, attr_name, soap_envelope_namespace_uri, prefix); + if(!qn) + { + return NULL; + } + om_ele = (axiom_element_t *)axiom_node_get_data_element(header_block-> om_ele_node, env); + om_attr = axiom_element_get_attribute(om_ele, env, qn); + if(om_attr) + { + attr_value = axiom_attribute_get_value(om_attr, env); + } + axutil_qname_free(qn, env); + return attr_value; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_soap_header_block_is_processed( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env) +{ + return header_block->processed; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_header_block_set_processed( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env) +{ + header_block->processed = AXIS2_TRUE; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_header_block_set_base_node( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env, + axiom_node_t * node) +{ + AXIS2_PARAM_CHECK(env->error, node, AXIS2_FAILURE); + + if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_BASE_TYPE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + header_block->om_ele_node = node; + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL axiom_soap_header_block_get_base_node( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env) +{ + return header_block->om_ele_node; +} + +AXIS2_EXTERN int AXIS2_CALL axiom_soap_header_block_get_soap_version( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env) +{ + return header_block->soap_version; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axiom_soap_header_block_set_soap_version( + axiom_soap_header_block_t * header_block, + const axutil_env_t * env, + int soap_version) +{ + + header_block->soap_version = soap_version; + return AXIS2_SUCCESS; +} diff --git a/axiom/src/util/Makefile.am b/axiom/src/util/Makefile.am new file mode 100644 index 0000000..ea76b68 --- /dev/null +++ b/axiom/src/util/Makefile.am @@ -0,0 +1,8 @@ +noinst_LTLIBRARIES = libaxis2_axiom_util.la +libaxis2_axiom_util_la_SOURCES = om_util.c + +libaxis2_axiom_util_la_LIBADD = +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/parser \ + -I$(top_builddir)/src/om \ + -I ../../../util/include diff --git a/axiom/src/util/om_util.c b/axiom/src/util/om_util.c new file mode 100644 index 0000000..fcdd90b --- /dev/null +++ b/axiom/src/util/om_util.c @@ -0,0 +1,1181 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_util_get_child_text( + axiom_node_t *node, + const axutil_env_t * env) +{ + axiom_element_t *ele = NULL; + axis2_char_t *txt = NULL; + + ele = (axiom_element_t*)axiom_node_get_data_element(node, env); + txt = axiom_element_get_text(ele, env, node); + + return txt; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_first_child_element_with_uri( + axiom_node_t * ele_node, + const axutil_env_t * env, + axis2_char_t * uri, + axiom_node_t ** child) +{ + axiom_node_t *child_node = NULL; + + if(!ele_node || !uri) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Element node or uri is NULL"); + return NULL; + } + + child_node = axiom_node_get_first_child(ele_node, env); + while(child_node) + { + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + axiom_element_t *child_ele = NULL; + axiom_namespace_t *ns = NULL; + + child_ele = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + ns = axiom_element_get_namespace(child_ele, env, child_node); + if(ns) + { + axis2_char_t *child_uri = NULL; + child_uri = axiom_namespace_get_uri(ns, env); + if(child_uri && axutil_strcmp(child_uri, uri) == 0) + { + (*child) = child_node; + return child_ele; + } + } + } + child_node = axiom_node_get_next_sibling(child_node, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_next_sibling_element_with_uri( + axiom_node_t * ele_node, + const axutil_env_t * env, + axis2_char_t * uri, + axiom_node_t ** next_node) +{ + axiom_node_t *next_sib_node = NULL; + if(!ele_node || !uri) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Element node or uri is NULL"); + return NULL; + } + + next_sib_node = axiom_node_get_next_sibling(ele_node, env); + while(next_sib_node) + { + if(axiom_node_get_node_type(next_sib_node, env) == AXIOM_ELEMENT) + { + axiom_element_t *sib_ele = NULL; + axiom_namespace_t *ns = NULL; + + sib_ele = (axiom_element_t *)axiom_node_get_data_element(next_sib_node, env); + ns = axiom_element_get_namespace(sib_ele, env, next_sib_node); + if(ns) + { + axis2_char_t *sib_uri = NULL; + sib_uri = axiom_namespace_get_uri(ns, env); + if(sib_uri && axutil_strcmp(sib_uri, uri) == 0) + { + (*next_node) = next_sib_node; + return sib_ele; + } + } + } + next_sib_node = axiom_node_get_next_sibling(next_sib_node, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_first_child_element( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axiom_node_t ** child_node) +{ + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + AXIS2_PARAM_CHECK(env->error, child_node, NULL); + + return axiom_element_get_first_element(ele, env, ele_node, child_node); +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_last_child_element( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axiom_node_t ** child_node) +{ + axiom_node_t *last_node = NULL; + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + AXIS2_PARAM_CHECK(env->error, child_node, NULL); + + last_node = axiom_node_get_last_child(ele_node, env); + while(last_node) + { + if(axiom_node_get_node_type(last_node, env) == AXIOM_ELEMENT) + { + *child_node = last_node; + return (axiom_element_t *)axiom_node_get_data_element(last_node, env); + + } + last_node = axiom_node_get_previous_sibling(ele_node, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_next_sibling_element( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axiom_node_t ** next_node) +{ + axiom_node_t *next_sibling = NULL; + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + + next_sibling = axiom_node_get_next_sibling(ele_node, env); + while(next_sibling) + { + if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) + { + *next_node = next_sibling; + return (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); + } + next_sibling = axiom_node_get_next_sibling(next_sibling, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_first_child_element_with_localname( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axiom_node_t ** child_node) +{ + axiom_node_t *child = NULL; + axiom_node_t *next_sibling = NULL; + axis2_char_t *child_localname = NULL; + axiom_element_t *om_ele = NULL; + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + AXIS2_PARAM_CHECK(env->error, child_node, NULL); + AXIS2_PARAM_CHECK(env->error, localname, NULL); + + child = axiom_node_get_first_child(ele_node, env); + if(child) + { + if(axiom_node_get_node_type(child, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(child, env); + if(om_ele) + { + child_localname = axiom_element_get_localname(om_ele, env); + if(child_localname && axutil_strcmp(child_localname, localname) == 0) + { + *child_node = child; + return om_ele; + } + } + } + om_ele = NULL; + child_localname = NULL; + } + + next_sibling = axiom_node_get_next_sibling(child, env); + while(next_sibling) + { + if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); + if(om_ele) + { + child_localname = axiom_element_get_localname(om_ele, env); + if(child_localname && axutil_strcmp(child_localname, localname) == 0) + { + *child_node = next_sibling; + return om_ele; + } + + } + om_ele = NULL; + child_localname = NULL; + } + next_sibling = axiom_node_get_next_sibling(next_sibling, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_last_child_element_with_localname( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axiom_node_t ** child_node) +{ + axiom_node_t *child = NULL; + axiom_element_t *om_ele = NULL; + axis2_char_t *child_localname = NULL; + + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + AXIS2_PARAM_CHECK(env->error, localname, NULL); + AXIS2_PARAM_CHECK(env->error, child_node, NULL); + + child = axiom_node_get_last_child(ele_node, env); + while(child) + { + if(axiom_node_get_node_type(child, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(ele_node, env); + if(om_ele) + { + child_localname = axiom_element_get_localname(om_ele, env); + if(child_localname && axutil_strcmp(child_localname, localname) == 0) + { + *child_node = child; + return om_ele; + } + + } + om_ele = NULL; + child_localname = NULL; + } + child = axiom_node_get_previous_sibling(child, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_next_siblng_element_with_localname( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axiom_node_t ** next_node) +{ + axiom_node_t *next_sibling = NULL; + axiom_element_t *om_ele = NULL; + axis2_char_t *ele_localname = NULL; + + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + + next_sibling = axiom_node_get_next_sibling(ele_node, env); + while(next_sibling) + { + if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); + if(om_ele) + { + ele_localname = axiom_element_get_localname(om_ele, env); + if(ele_localname && axutil_strcmp(localname, ele_localname) == 0) + { + *next_node = next_sibling; + return om_ele; + } + } + om_ele = NULL; + ele_localname = NULL; + } + next_sibling = axiom_node_get_next_sibling(next_sibling, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_first_child_element_with_uri_localname( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axis2_char_t * uri, + axiom_node_t ** child_node) +{ + axiom_node_t *child = NULL; + axiom_node_t *next_sibling = NULL; + axis2_char_t *child_localname = NULL; + axiom_element_t *om_ele = NULL; + axiom_namespace_t *ns = NULL; + axis2_char_t *ns_uri = NULL; + + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + AXIS2_PARAM_CHECK(env->error, child_node, NULL); + AXIS2_PARAM_CHECK(env->error, localname, NULL); + AXIS2_PARAM_CHECK(env->error, uri, NULL); + + child = axiom_node_get_first_child(ele_node, env); + if(!child) + { + return NULL; + + } + if(axiom_node_get_node_type(ele_node, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(child, env); + if(om_ele) + { + child_localname = axiom_element_get_localname(om_ele, env); + ns = axiom_element_get_namespace(om_ele, env, child); + if(ns) + { + ns_uri = axiom_namespace_get_uri(ns, env); + } + + if((child_localname) && (axutil_strcmp(child_localname, localname) == 0) && (ns_uri) + && (axutil_strcmp(ns_uri, uri) == 0)) + { + *child_node = child; + return om_ele; + } + } + } + om_ele = NULL; + child_localname = NULL; + ns = NULL; + ns_uri = NULL; + + next_sibling = axiom_node_get_next_sibling(child, env); + while(next_sibling) + { + if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); + if(om_ele) + { + child_localname = axiom_element_get_localname(om_ele, env); + ns = axiom_element_get_namespace(om_ele, env, next_sibling); + if(ns) + { + ns_uri = axiom_namespace_get_uri(ns, env); + } + + if((child_localname) && (axutil_strcmp(child_localname, localname) == 0) + && (ns_uri) && (axutil_strcmp(ns_uri, uri) == 0)) + { + *child_node = next_sibling; + return om_ele; + } + + } + om_ele = NULL; + child_localname = NULL; + ns = NULL; + ns_uri = NULL; + } + next_sibling = axiom_node_get_next_sibling(next_sibling, env); + } + return NULL; +} +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_last_child_element_with_uri_localname( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axis2_char_t * uri, + axiom_node_t ** child_node) +{ + axiom_node_t *child = NULL; + axiom_element_t *om_ele = NULL; + axis2_char_t *child_localname = NULL; + axiom_namespace_t *ns = NULL; + axis2_char_t *ns_uri = NULL; + + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + AXIS2_PARAM_CHECK(env->error, localname, NULL); + AXIS2_PARAM_CHECK(env->error, child_node, NULL); + AXIS2_PARAM_CHECK(env->error, uri, NULL); + + child = axiom_node_get_last_child(ele_node, env); + while(child) + { + if(axiom_node_get_node_type(child, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(ele_node, env); + if(om_ele) + { + ns = axiom_element_get_namespace(om_ele, env, ele_node); + if(ns) + { + ns_uri = axiom_namespace_get_uri(ns, env); + } + child_localname = axiom_element_get_localname(om_ele, env); + if(child_localname && (axutil_strcmp(child_localname, localname) == 0) && (ns_uri) + && (axutil_strcmp(ns_uri, uri) == 0)) + { + *child_node = child; + return om_ele; + } + } + om_ele = NULL; + child_localname = NULL; + ns = NULL; + ns_uri = NULL; + } + child = axiom_node_get_previous_sibling(child, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_next_sibling_element_with_uri_localname( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axis2_char_t * uri, + axiom_node_t ** next_node) +{ + axiom_node_t *next_sibling = NULL; + axiom_element_t *om_ele = NULL; + axis2_char_t *ele_localname = NULL; + axiom_namespace_t *ns = NULL; + axis2_char_t *ns_uri = NULL; + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + + next_sibling = axiom_node_get_next_sibling(ele_node, env); + while(next_sibling) + { + if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); + if(om_ele) + { + ns = axiom_element_get_namespace(om_ele, env, next_sibling); + if(ns) + { + ns_uri = axiom_namespace_get_uri(ns, env); + } + ele_localname = axiom_element_get_localname(om_ele, env); + if(ele_localname && (axutil_strcmp(localname, ele_localname) == 0) && (ns) + && (axutil_strcmp(ns_uri, uri) == 0)) + { + *next_node = next_sibling; + return om_ele; + } + } + om_ele = NULL; + ele_localname = NULL; + ns_uri = NULL; + ns = NULL; + } + next_sibling = axiom_node_get_next_sibling(next_sibling, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_first_child_element_with_localnames( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axutil_array_list_t * names, + axiom_node_t ** child_node) +{ + axiom_node_t *child = NULL; + axiom_node_t *next_sibling = NULL; + axis2_char_t *child_localname = NULL; + axis2_char_t *given_localname = NULL; + axiom_element_t *om_ele = NULL; + int size = 0; + int i = 0; + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + AXIS2_PARAM_CHECK(env->error, child_node, NULL); + AXIS2_PARAM_CHECK(env->error, names, NULL); + + child = axiom_node_get_first_child(ele_node, env); + if(child) + { + if(axiom_node_get_node_type(child, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(child, env); + if(om_ele) + { + size = axutil_array_list_size(names, env); + child_localname = axiom_element_get_localname(om_ele, env); + + for(i = 0; i < size; i++) + { + given_localname = (axis2_char_t *)axutil_array_list_get(names, env, i); + + if((child_localname) && (NULL != given_localname) && axutil_strcmp( + child_localname, given_localname) == 0) + { + *child_node = child; + return om_ele; + } + given_localname = NULL; + } + } + } + om_ele = NULL; + child_localname = NULL; + given_localname = NULL; + size = 0; + } + + next_sibling = axiom_node_get_next_sibling(child, env); + while(next_sibling) + { + if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); + if(om_ele) + { + size = axutil_array_list_size(names, env); + child_localname = axiom_element_get_localname(om_ele, env); + for(i = 0; i < size; i++) + { + given_localname = (axis2_char_t *)axutil_array_list_get(names, env, i); + if((child_localname) && (NULL != given_localname) && (axutil_strcmp( + child_localname, given_localname) == 0)) + { + *child_node = next_sibling; + return om_ele; + } + given_localname = NULL; + } + } + om_ele = NULL; + child_localname = NULL; + given_localname = NULL; + } + next_sibling = axiom_node_get_next_sibling(next_sibling, env); + } + return NULL; + +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_last_child_element_with_localnames( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axutil_array_list_t * names, + axiom_node_t ** child_node) +{ + axiom_node_t *child = NULL; + axiom_element_t *om_ele = NULL; + axis2_char_t *child_localname = NULL; + axis2_char_t *given_localname = NULL; + int size = 0; + int i = 0; + + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + AXIS2_PARAM_CHECK(env->error, names, NULL); + AXIS2_PARAM_CHECK(env->error, child_node, NULL); + + child = axiom_node_get_last_child(ele_node, env); + while(child) + { + if(axiom_node_get_node_type(child, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(ele_node, env); + if(om_ele) + { + size = axutil_array_list_size(names, env); + for(i = 0; i < size; i++) + { + given_localname = (axis2_char_t *)axutil_array_list_get(names, env, i); + child_localname = axiom_element_get_localname(om_ele, env); + if(child_localname && (NULL != given_localname) && (axutil_strcmp( + child_localname, given_localname) == 0)) + { + *child_node = child; + return om_ele; + } + } + } + om_ele = NULL; + child_localname = NULL; + given_localname = NULL; + } + child = axiom_node_get_previous_sibling(child, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_next_siblng_element_with_localnames( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axutil_array_list_t * names, + axiom_node_t ** next_node) +{ + axiom_node_t *next_sibling = NULL; + axiom_element_t *om_ele = NULL; + axis2_char_t *ele_localname = NULL; + axis2_char_t *given_localname = NULL; + int size = 0; + int i = 0; + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + AXIS2_PARAM_CHECK(env->error, names, NULL); + AXIS2_PARAM_CHECK(env->error, next_node, NULL); + + next_sibling = axiom_node_get_next_sibling(ele_node, env); + while(next_sibling) + { + if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); + if(om_ele) + { + size = axutil_array_list_size(names, env); + for(i = 0; i < size; i++) + { + given_localname = (axis2_char_t *)axutil_array_list_get(names, env, i); + ele_localname = axiom_element_get_localname(om_ele, env); + if((ele_localname) && (NULL != given_localname) && (axutil_strcmp( + given_localname, ele_localname) == 0)) + { + *next_node = next_sibling; + return om_ele; + } + + } + } + om_ele = NULL; + ele_localname = NULL; + } + next_sibling = axiom_node_get_next_sibling(next_sibling, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_first_child_element_with_localname_attr( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axis2_char_t * attr_name, + axis2_char_t * attr_value, + axiom_node_t ** child_node) +{ + axiom_node_t *child = NULL; + axiom_node_t *next_sibling = NULL; + axis2_char_t *child_localname = NULL; + axiom_element_t *om_ele = NULL; + axiom_attribute_t *om_attr = NULL; + axutil_hash_t *attr_ht = NULL; + axutil_hash_index_t *hi = NULL; + axis2_char_t *om_attr_value = NULL; + axis2_char_t *om_attr_name = NULL; + + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + AXIS2_PARAM_CHECK(env->error, child_node, NULL); + AXIS2_PARAM_CHECK(env->error, localname, NULL); + AXIS2_PARAM_CHECK(env->error, attr_name, NULL); + AXIS2_PARAM_CHECK(env->error, attr_value, NULL); + + child = axiom_node_get_first_child(ele_node, env); + + if(child) + { + if(axiom_node_get_node_type(child, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(child, env); + if(om_ele) + { + + child_localname = axiom_element_get_localname(om_ele, env); + if(child_localname && axutil_strcmp(child_localname, localname) == 0) + { + attr_ht = axiom_element_get_all_attributes(om_ele, env); + if(attr_ht) + { + for(hi = axutil_hash_first(attr_ht, env); hi; hi + = axutil_hash_next(env, hi)) + { + void *val = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + if(val) + { + om_attr = (axiom_attribute_t *)val; + om_attr_name = axiom_attribute_get_localname(om_attr, env); + + om_attr_value = axiom_attribute_get_value(om_attr, env); + if(om_attr_name && NULL != om_attr_value && axutil_strcmp( + om_attr_name, attr_name) == 0 && axutil_strcmp(om_attr_value, + attr_value) == 0) + { + AXIS2_FREE(env->allocator, hi); + *child_node = child; + return om_ele; + } + om_attr = NULL; + om_attr_name = NULL; + om_attr_value = NULL; + } + } + } + } + } + } + om_ele = NULL; + child_localname = NULL; + hi = NULL; + } + + next_sibling = axiom_node_get_next_sibling(child, env); + while(next_sibling) + { + if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); + if(om_ele) + { + child_localname = axiom_element_get_localname(om_ele, env); + if(child_localname && axutil_strcmp(child_localname, localname) == 0) + { + attr_ht = axiom_element_get_all_attributes(om_ele, env); + if(attr_ht) + { + + for(hi = axutil_hash_first(attr_ht, env); hi; hi + = axutil_hash_next(env, hi)) + { + void *val = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + if(val) + { + om_attr = (axiom_attribute_t *)val; + om_attr_name = axiom_attribute_get_localname(om_attr, env); + + om_attr_value = axiom_attribute_get_value(om_attr, env); + + if(om_attr_name && NULL != om_attr_value && axutil_strcmp( + om_attr_name, attr_name) == 0 && axutil_strcmp(om_attr_value, + attr_value) == 0) + { + *child_node = child; + return om_ele; + } + om_attr = NULL; + om_attr_name = NULL; + om_attr_value = NULL; + } + } + } + } + + } + om_ele = NULL; + child_localname = NULL; + } + next_sibling = axiom_node_get_next_sibling(next_sibling, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_last_child_element_with_localname_attr( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axis2_char_t * attr_name, + axis2_char_t * attr_value, + axiom_node_t ** child_node) +{ + axiom_node_t *child = NULL; + axiom_element_t *om_ele = NULL; + axis2_char_t *child_localname = NULL; + axiom_attribute_t *om_attr = NULL; + axis2_char_t *om_attr_name = NULL; + axis2_char_t *om_attr_value = NULL; + axutil_hash_index_t *hi = NULL; + axutil_hash_t *attr_ht = NULL; + + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + AXIS2_PARAM_CHECK(env->error, localname, NULL); + AXIS2_PARAM_CHECK(env->error, child_node, NULL); + + child = axiom_node_get_last_child(ele_node, env); + while(child) + { + if(axiom_node_get_node_type(child, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(ele_node, env); + if(om_ele) + { + child_localname = axiom_element_get_localname(om_ele, env); + if(child_localname && axutil_strcmp(child_localname, localname) == 0) + { + attr_ht = axiom_element_get_all_attributes(om_ele, env); + if(attr_ht) + { + for(hi = axutil_hash_first(attr_ht, env); hi; hi + = axutil_hash_next(env, hi)) + { + void *val = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + if(val) + { + om_attr = (axiom_attribute_t *)val; + om_attr_name = axiom_attribute_get_localname(om_attr, env); + + om_attr_value = axiom_attribute_get_value(om_attr, env); + + if(om_attr_name && NULL != om_attr_value && axutil_strcmp( + om_attr_name, attr_name) == 0 && axutil_strcmp(om_attr_value, + attr_value) == 0) + { + AXIS2_FREE(env->allocator, hi); + *child_node = child; + return om_ele; + } + om_attr = NULL; + om_attr_name = NULL; + om_attr_value = NULL; + } + } + } + } + + } + om_ele = NULL; + child_localname = NULL; + } + child = axiom_node_get_previous_sibling(child, env); + } + return NULL; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +axiom_util_get_next_siblng_element_with_localname_attr( + axiom_element_t * ele, + const axutil_env_t * env, + axiom_node_t * ele_node, + axis2_char_t * localname, + axis2_char_t * attr_name, + axis2_char_t * attr_value, + axiom_node_t ** child_node) +{ + axiom_node_t *next_sibling = NULL; + axiom_element_t *om_ele = NULL; + axis2_char_t *ele_localname = NULL; + axiom_attribute_t *om_attr = NULL; + axis2_char_t *om_attr_value = NULL; + axis2_char_t *om_attr_name = NULL; + axutil_hash_t *attr_ht = NULL; + axutil_hash_index_t *hi = NULL; + + AXIS2_PARAM_CHECK(env->error, ele_node, NULL); + + next_sibling = axiom_node_get_next_sibling(ele_node, env); + while(next_sibling) + { + if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); + if(om_ele) + { + ele_localname = axiom_element_get_localname(om_ele, env); + if(ele_localname && axutil_strcmp(localname, ele_localname) == 0) + { + attr_ht = axiom_element_get_all_attributes(om_ele, env); + if(attr_ht) + { + for(hi = axutil_hash_first(attr_ht, env); hi; hi + = axutil_hash_next(env, hi)) + { + void *val = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + if(val) + { + om_attr = (axiom_attribute_t *)val; + om_attr_name = axiom_attribute_get_localname(om_attr, env); + + om_attr_value = axiom_attribute_get_value(om_attr, env); + + if(om_attr_name && NULL != om_attr_value && axutil_strcmp( + om_attr_name, attr_name) == 0 && axutil_strcmp(om_attr_value, + attr_value) == 0) + { + AXIS2_FREE(env->allocator, hi); + *child_node = next_sibling; + return om_ele; + } + om_attr = NULL; + om_attr_name = NULL; + om_attr_value = NULL; + } + } + } + } + } + om_ele = NULL; + ele_localname = NULL; + } + next_sibling = axiom_node_get_next_sibling(next_sibling, env); + } + return NULL; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_util_get_child_node_text( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + axiom_element_t *om_ele = NULL; + if(!om_node) + { + return NULL; + } + if(axiom_node_get_node_type(om_node, env) != AXIOM_ELEMENT) + { + return NULL; + } + + om_ele = (axiom_element_t *)axiom_node_get_data_element(om_node, env); + + if(om_ele) + { + return axiom_element_get_text(om_ele, env, om_node); + } + return NULL; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_util_get_localname( + axiom_node_t * node, + const axutil_env_t * env) +{ + axiom_element_t *om_ele = NULL; + + AXIS2_ENV_CHECK(env, NULL); + if(!node) + { + return NULL; + } + if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) + { + return NULL; + } + om_ele = (axiom_element_t *)axiom_node_get_data_element(node, env); + if(om_ele) + { + return axiom_element_get_localname(om_ele, env); + } + return NULL; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axiom_util_get_node_namespace_uri( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + axiom_element_t *om_ele = NULL; + axiom_namespace_t *om_ns = NULL; + if(!om_node) + { + return NULL; + } + if(axiom_node_get_node_type(om_node, env) == AXIOM_ELEMENT) + { + om_ele = axiom_node_get_data_element(om_node, env); + if(!om_ele) + { + return NULL; + } + om_ns = axiom_element_get_namespace(om_ele, env, om_node); + if(om_ns) + { + return axiom_namespace_get_uri(om_ns, env); + } + } + return NULL; +} + +AXIS2_EXTERN axiom_child_element_iterator_t *AXIS2_CALL +axiom_util_get_child_elements( + axiom_element_t * om_ele, + const axutil_env_t * env, + axiom_node_t * om_node) +{ + axiom_element_t *first_ele = NULL; + axiom_node_t *first_node = NULL; + AXIS2_PARAM_CHECK(env->error, om_node, NULL); + AXIS2_PARAM_CHECK(env->error, om_ele, NULL); + first_ele = axiom_element_get_first_element(om_ele, env, om_node, &first_node); + if(first_ele) + { + return axiom_child_element_iterator_create(env, first_node); + } + return NULL; +} + +AXIS2_EXTERN axiom_document_t *AXIS2_CALL +axiom_util_new_document( + const axutil_env_t * env, + const axutil_uri_t * uri) +{ + axis2_char_t *path = NULL; + axiom_xml_reader_t *reader = NULL; + axiom_stax_builder_t *om_builder = NULL; + axiom_document_t *doc = NULL; + + AXIS2_PARAM_CHECK(env->error, uri, NULL); + /* This is temporary code. Later complete the code to read from uri and build + * the document + */ + if(uri) + { + path = axutil_uri_get_path((axutil_uri_t *)uri, env); + } + else + { + return NULL; + } + if(path) + { + reader = axiom_xml_reader_create_for_file(env, path, NULL); + } + else + { + return NULL; + } + if(reader) + { + om_builder = axiom_stax_builder_create(env, reader); + } + else + { + return NULL; + } + if(om_builder) + { + doc = axiom_stax_builder_get_document(om_builder, env); + } + else + { + return NULL; + } + if(doc) + { + axiom_document_build_all(doc, env); + } + else + { + return NULL; + } + + return doc; +} + +AXIS2_EXTERN axiom_node_t* AXIS2_CALL +axiom_util_get_node_by_local_name( + const axutil_env_t *env, + axiom_node_t *node, + axis2_char_t *local_name) +{ + axis2_char_t *temp_name = NULL; + + if(!node) + { + return NULL; + } + + if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) + { + return NULL; + } + + temp_name = axiom_util_get_localname(node, env); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[rampart]Checking node %s for %s", temp_name, + local_name); + + if(!axutil_strcmp(temp_name, local_name)) + { + /* Gottcha.. return this node */ + return node; + } + else + { + /* Doesn't match? Get the children and search for them */ + axiom_node_t *temp_node = NULL; + + temp_node = axiom_node_get_first_element(node, env); + while(temp_node) + { + axiom_node_t *res_node = NULL; + res_node = axiom_util_get_node_by_local_name(env, temp_node, local_name); + if(res_node) + { + return res_node; + } + temp_node = axiom_node_get_next_sibling(temp_node, env); + } + } + return NULL; +} + +/** + * Creates a clone of given node + * @param env environment, MUST not be NULL + * @param node node to be cloned + * @return cloned node + */ +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axiom_util_clone_node( + const axutil_env_t *env, + axiom_node_t *node) +{ + axis2_char_t* node_string = NULL; + axiom_node_t *clone = NULL; + + if(!node) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Could not be able to clone the node. Given node is not valid."); + return NULL; + } + + node_string = axiom_node_sub_tree_to_string(node, env); + clone = axiom_node_create_from_buffer(env, node_string); + + if(node_string) + { + AXIS2_FREE(env->allocator, node_string); + } + + return clone; +} diff --git a/axiom/src/xpath/Makefile.am b/axiom/src/xpath/Makefile.am new file mode 100644 index 0000000..5d4f42f --- /dev/null +++ b/axiom/src/xpath/Makefile.am @@ -0,0 +1,22 @@ +lib_LTLIBRARIES = libaxis2_xpath.la +libaxis2_xpath_la_SOURCES = xpath.c \ + xpath_functions.c \ + xpath_internals.c \ + xpath_internals_engine.c \ + xpath_internals_iterators.c \ + xpath_internals_parser.c \ + xpath_streaming.c + +libaxis2_xpath_la_LDFLAGS = -version-info $(VERSION_NO) + +libaxis2_xpath_la_LIBADD = +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/parser \ + -I$(top_builddir)/src/om \ + -I ../../../util/include \ + -I ../../../include + +EXTRA_DIST = xpath_functions.h xpath_internals_engine.h \ + xpath_internals.h xpath_internals_iterators.h \ + xpath_internals_parser.h xpath_streaming.h + diff --git a/axiom/src/xpath/xpath.c b/axiom/src/xpath/xpath.c new file mode 100755 index 0000000..38f422c --- /dev/null +++ b/axiom/src/xpath/xpath.c @@ -0,0 +1,462 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "xpath_internals.h" +#include "xpath_internals_parser.h" +#include "xpath_internals_engine.h" +#include "xpath_functions.h" +#include "xpath_streaming.h" + +/* Create XPath context */ +AXIS2_EXTERN axiom_xpath_context_t * AXIS2_CALL +axiom_xpath_context_create( + const axutil_env_t *env, + axiom_node_t * root_node) +{ + axiom_xpath_context_t* context; + + /*HACK: xpath impl requires a dummy root node in order to process properly.*/ + axiom_node_t * dummy_root; + dummy_root = axiom_node_create(env); + axiom_node_add_child(dummy_root, env, root_node); + + context = AXIS2_MALLOC(env->allocator, + sizeof(axiom_xpath_context_t)); + + context->env = env; + context->root_node = dummy_root; + context->node = dummy_root; + context->expr = NULL; + context->attribute = NULL; + context->namespaces = NULL; + context->functions = NULL; + + axiom_xpath_register_default_functions_set(context); + + return context; +} + +/* Compile XPath expression */ +AXIS2_EXTERN axiom_xpath_expression_t * AXIS2_CALL +axiom_xpath_compile_expression( + const axutil_env_t *env, + const axis2_char_t* xpath_expr) +{ + axiom_xpath_expression_t* expr; + + expr = AXIS2_MALLOC(env->allocator, + sizeof(axiom_xpath_expression_t)); + + expr->expr_str = axutil_strdup(env, xpath_expr); + + if (axiom_xpath_compile(env, expr) == AXIOM_XPATH_PARSE_ERROR) + { + AXIS2_FREE(env->allocator, expr->expr_str); + AXIS2_FREE(env->allocator, expr); + + return NULL; + } + else + { + return expr; + } +} + +/* Evaluate compiled XPath expression */ +AXIS2_EXTERN axiom_xpath_result_t * AXIS2_CALL +axiom_xpath_evaluate( + axiom_xpath_context_t *context, + axiom_xpath_expression_t *xpath_expr) +{ + axiom_xpath_expression_copy(context, xpath_expr); + + context->streaming = AXIS2_FALSE; + + return axiom_xpath_run(context); +} + +AXIS2_EXTERN axiom_xpath_result_t * AXIS2_CALL +axiom_xpath_evaluate_streaming( + axiom_xpath_context_t *context, + axiom_xpath_expression_t *xpath_expr) +{ + axiom_xpath_result_t *res; + + axiom_xpath_expression_copy(context, xpath_expr); + + if (axiom_xpath_streaming_check(context->env, xpath_expr)) + { + context->streaming = AXIS2_TRUE; + return axiom_xpath_run(context); + } + else + { + res = AXIS2_MALLOC( + context->env->allocator, sizeof(axiom_xpath_result_t)); + res->nodes = NULL; + res->flag = AXIOM_XPATH_ERROR_STREAMING_NOT_SUPPORTED; + + return res; + } +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_xpath_register_default_functions_set( + axiom_xpath_context_t *context) +{ + axiom_xpath_register_function( + context, "count", axiom_xpath_function_count); +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_xpath_register_function( + axiom_xpath_context_t *context, + axis2_char_t *name, + axiom_xpath_function_t func) +{ + if (name && func) + { + if (!context->functions) + { + context->functions = axutil_hash_make(context->env); + } + + axutil_hash_set(context->functions, name, AXIS2_HASH_KEY_STRING, func); + } +} + +AXIS2_EXTERN axiom_xpath_function_t AXIS2_CALL +axiom_xpath_get_function( + axiom_xpath_context_t *context, + axis2_char_t *name) +{ + axiom_xpath_function_t func = NULL; + + if(context->functions) + { + func = axutil_hash_get(context->functions, name, AXIS2_HASH_KEY_STRING); + } + + return func; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_xpath_register_namespace( + axiom_xpath_context_t *context, + axiom_namespace_t *ns) +{ + axis2_char_t *prefix = NULL; + + if (!context->namespaces) + { + context->namespaces = axutil_hash_make(context->env); + } + + prefix = axiom_namespace_get_prefix(ns, context->env); + + if (prefix) + { + axutil_hash_set( + context->namespaces, prefix, AXIS2_HASH_KEY_STRING, ns); + } +} + +AXIS2_EXTERN axiom_namespace_t * AXIS2_CALL +axiom_xpath_get_namespace( + axiom_xpath_context_t *context, + axis2_char_t *prefix) +{ + axiom_namespace_t *ns = NULL; + + if (context->namespaces) + { + ns = axutil_hash_get(context->namespaces, prefix, AXIS2_HASH_KEY_STRING); + } + + return ns; +} + +AXIS2_EXTERN void AXIS2_CALL +axiom_xpath_clear_namespaces( + axiom_xpath_context_t *context) +{ + axutil_hash_index_t *hi; + void *val; + + if (context->namespaces) + { + for (hi = axutil_hash_first(context->namespaces, context->env); + hi; + hi = axutil_hash_next(context->env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + axiom_namespace_free((axiom_namespace_t *)val, context->env); + } + + axutil_hash_free(context->namespaces, context->env); + } + + context->namespaces = NULL; +} + +/* Cast to boolean */ +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_xpath_cast_node_to_boolean( + const axutil_env_t *env, + axiom_xpath_result_node_t * node) +{ + if(node->type == AXIOM_XPATH_TYPE_BOOLEAN) + { + return *(axis2_bool_t *)node->value; + } + else if(node->type == AXIOM_XPATH_TYPE_NUMBER) + { + /* Cannot evaluate as *(double *)(node->value) == 1e-12 + since there might be an precision error */ + if(*(double *)(node->value) > 1e-12 || *(double *)(node->value) < -1e-12) + { + return AXIS2_TRUE; + } + else + { + return AXIS2_FALSE; + } + } + else if(node->value) + { + return AXIS2_TRUE; + } + else + { + return AXIS2_FALSE; + } +} + +/* Cast to double */ +AXIS2_EXTERN double AXIS2_CALL +axiom_xpath_cast_node_to_number( + const axutil_env_t *env, + axiom_xpath_result_node_t * node) +{ + if (node->type == AXIOM_XPATH_TYPE_BOOLEAN) + { + if (*(axis2_bool_t *)(node->value) == AXIS2_TRUE) + { + return 1.0; + } + else + { + return 0.0; + } + } + else if (node->type == AXIOM_XPATH_TYPE_NUMBER) + { + return *(double *)node->value; + } + else if (node->value) + { + return 1.0; + } + else + { + return 0.0; + } +} + +/* Cast to text */ +AXIS2_EXTERN axis2_char_t * AXIS2_CALL +axiom_xpath_cast_node_to_string( + const axutil_env_t *env, + axiom_xpath_result_node_t * node) +{ + axiom_element_t *ele; + axis2_char_t *res; + + if (!node->value) + { + return NULL; + } + + if (node->type == AXIOM_XPATH_TYPE_BOOLEAN) + { + if (*(axis2_bool_t *)(node->value) == AXIS2_TRUE) + { + return axutil_strdup(env, "true"); + } + else + { + return axutil_strdup(env, "false"); + } + } + else if (node->type == AXIOM_XPATH_TYPE_NUMBER) + { + /* Allocate 50 bytes */ + res = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * 50); + + sprintf(res, "%lf", *(double *)(node->value)); + + return res; + } + else if (node->type == AXIOM_XPATH_TYPE_TEXT) + { + return (axis2_char_t *)node->value; + } + else if (node->type == AXIOM_XPATH_TYPE_NODE) + { + ele = (axiom_element_t *)axiom_node_get_data_element( + (axiom_node_t *)(node->value), env); + + if (ele) + { + return axiom_element_get_text( + ele, env, (axiom_node_t *)(node->value)); + } + else + { + return NULL; + } + } + else if (node->type == AXIOM_XPATH_TYPE_ATTRIBUTE) + { + return axiom_attribute_get_value( + (axiom_attribute_t *)(node->value), env); + } + else if (node->type == AXIOM_XPATH_TYPE_NAMESPACE) + { + return axiom_namespace_get_prefix( + (axiom_namespace_t *)(node->value), env); + } + + return NULL; +} + +/* Cast to axiom node */ +AXIS2_EXTERN axiom_node_t * AXIS2_CALL +axiom_xpath_cast_node2axiom_node( + const axutil_env_t *env, + axiom_xpath_result_node_t * node) +{ + if (node->type == AXIOM_XPATH_TYPE_NODE && node->value) + { + return (axiom_node_t *)node->value; + } + else + { + return NULL; + } +} + +/* Free context */ +AXIS2_EXTERN void AXIS2_CALL +axiom_xpath_free_context( + const axutil_env_t *env, + axiom_xpath_context_t *context) +{ + if (context) + { + /* Free the expression if not freed */ + if (context->expr) + { + /* axiom_xpath_free_expression(env, context->expr); */ + + context->expr = NULL; + } + + if (context->root_node) + { + axiom_node_detach(axiom_node_get_first_child(context->root_node, context->env), context->env); + axiom_node_free_tree(context->root_node, context->env); + context->root_node = NULL; + } + + if (context->functions) + { + axutil_hash_free(context->functions, context->env); + context->functions = NULL; + } + + if(context->namespaces) + { + axiom_xpath_clear_namespaces(context); + context->namespaces = NULL; + } + + AXIS2_FREE(env->allocator, context); + } +} + +/* Free expression */ +AXIS2_EXTERN void AXIS2_CALL +axiom_xpath_free_expression( + const axutil_env_t *env, + axiom_xpath_expression_t * xpath_expr) +{ + if (xpath_expr) + { + if (xpath_expr->expr_str) + { + AXIS2_FREE(env->allocator, xpath_expr->expr_str); + + xpath_expr->expr_str = NULL; + } + + if (xpath_expr->operations) + { + axutil_array_list_free(xpath_expr->operations, env); + xpath_expr->operations = NULL; + } + + AXIS2_FREE(env->allocator, xpath_expr); + } +} + +/* Free result set */ +AXIS2_EXTERN void AXIS2_CALL +axiom_xpath_free_result( + const axutil_env_t *env, + axiom_xpath_result_t* result) +{ + if (result) + { + if (result->nodes) + { + axutil_array_list_free(result->nodes, env); + } + + AXIS2_FREE(env->allocator, result); + } +} + +/* Check if the expression can be evaluated on streaming XML */ +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axiom_xpath_streaming_check( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + axiom_xpath_streaming_t r = AXIOM_XPATH_CHECK(expr->start); + + if(r == AXIOM_XPATH_STREAMING_NOT_SUPPORTED) + { + return AXIS2_FALSE; + } + else + { + return AXIS2_TRUE; + } +} + diff --git a/axiom/src/xpath/xpath_functions.c b/axiom/src/xpath/xpath_functions.c new file mode 100755 index 0000000..bdf65c2 --- /dev/null +++ b/axiom/src/xpath/xpath_functions.c @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "xpath_functions.h" +#include "xpath_internals_engine.h" + +int +axiom_xpath_function_count( + axiom_xpath_context_t *context, + int np) +{ + axiom_xpath_result_node_t *node; + double * v; + int i; + + node = AXIS2_MALLOC(context->env->allocator, sizeof(axiom_xpath_result_node_t)); + v = AXIS2_MALLOC(context->env->allocator, sizeof(double)); + + *v = np; + node->value = v; + node->type = AXIOM_XPATH_TYPE_NUMBER; + + for(i = 0; i < np; i++) + { + axutil_stack_pop(context->stack, context->env); + } + + axutil_stack_push(context->stack, context->env, node); + + return 1; +} diff --git a/axiom/src/xpath/xpath_functions.h b/axiom/src/xpath/xpath_functions.h new file mode 100755 index 0000000..d44f0a2 --- /dev/null +++ b/axiom/src/xpath/xpath_functions.h @@ -0,0 +1,47 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_XPATH_FUNCTIONS_H +#define AXIOM_XPATH_FUNCTIONS_H + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_xpath_functions functions + * @ingroup axiom_xpath + * @{ + */ + + /** + * count(node-set) function + * http://www.w3.org/TR/xpath#function-count + */ + int axiom_xpath_function_count(axiom_xpath_context_t *context, int np); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/axiom/src/xpath/xpath_internals.c b/axiom/src/xpath/xpath_internals.c new file mode 100755 index 0000000..c313baf --- /dev/null +++ b/axiom/src/xpath/xpath_internals.c @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "xpath_internals.h" + +/* Make a copy of the xpath expression */ +void +axiom_xpath_expression_copy( + axiom_xpath_context_t *context, + axiom_xpath_expression_t* expr) +{ + int i; + axiom_xpath_operation_t *op; + + context->expr = expr; + + /* Set value of pos in every operation to 0 */ + for(i = 0; i < axutil_array_list_size(expr->operations, context->env); i++) + { + op = AXIOM_XPATH_OPR_GET(i); + op->pos = 0; + } +} diff --git a/axiom/src/xpath/xpath_internals.h b/axiom/src/xpath/xpath_internals.h new file mode 100755 index 0000000..891d543 --- /dev/null +++ b/axiom/src/xpath/xpath_internals.h @@ -0,0 +1,199 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_XPATH_INTERNALS_H +#define AXIOM_XPATH_INTERNALS_H + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_xpath_internals internals + * @ingroup axiom_xpath + * @{ + */ + + + /** Get operation at index ind */ +#define AXIOM_XPATH_OPR_GET(ind) (axiom_xpath_operation_t *) \ + axutil_array_list_get(context->expr->operations, context->env, ind) + + /** + * An error has occured while parsing + */ +#define AXIOM_XPATH_PARSE_ERROR -2 + + /** + * XPath expression was successfully compiled + */ +#define AXIOM_XPATH_PARSE_SUCCESS 0 + + /** + * End of expression reached + */ +#define AXIOM_XPATH_PARSE_END -1 + + /* Types */ + + /** + * XPath operation + * Contains the operands and parameters + */ + typedef struct axiom_xpath_operation axiom_xpath_operation_t; + + /** + * XPath node test + * Stores the components of a node test + */ + typedef struct axiom_xpath_node_test axiom_xpath_node_test_t; + + /** + * Functions to process a XPath operator + */ + typedef int (*axiom_xpath_operator_t)(axiom_xpath_context_t *context, + axiom_xpath_operation_t * op); + + /** + * Functions to iterate through different XPath axes + */ + typedef int (*axiom_xpath_iterator_t)(axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate); + + /** + * XPath node test types + */ + typedef enum axiom_xpath_node_test_type_t + { + AXIOM_XPATH_NODE_TEST_NONE = 0, + AXIOM_XPATH_NODE_TEST_ALL, + AXIOM_XPATH_NODE_TYPE_COMMENT, + AXIOM_XPATH_NODE_TYPE_NODE, + AXIOM_XPATH_NODE_TYPE_PI, + AXIOM_XPATH_NODE_TYPE_TEXT, + AXIOM_XPATH_NODE_TEST_STANDARD + } axiom_xpath_node_test_type_t; + + /** + * XPath operations + */ + typedef enum axiom_xpath_operation_type_t + { + AXIOM_XPATH_OPERATION_ROOT_NODE = 0, + AXIOM_XPATH_OPERATION_CONTEXT_NODE, + AXIOM_XPATH_OPERATION_NODE_TEST, + AXIOM_XPATH_OPERATION_STEP, + AXIOM_XPATH_OPERATION_RESULT, + AXIOM_XPATH_OPERATION_UNION, + AXIOM_XPATH_OPERATION_EQUAL_EXPR, + AXIOM_XPATH_OPERATION_AND_EXPR, + AXIOM_XPATH_OPERATION_OR_EXPR, + AXIOM_XPATH_OPERATION_PREDICATE, + AXIOM_XPATH_OPERATION_LITERAL, + AXIOM_XPATH_OPERATION_NUMBER, + AXIOM_XPATH_OPERATION_PATH_EXPRESSION, + AXIOM_XPATH_OPERATION_FUNCTION_CALL, + AXIOM_XPATH_OPERATION_ARGUMENT + } axiom_xpath_operation_type_t; + + /** + * XPath axes + */ + typedef enum axiom_xpath_axis_t + { + AXIOM_XPATH_AXIS_NONE = -1, + AXIOM_XPATH_AXIS_CHILD, + AXIOM_XPATH_AXIS_DESCENDANT, + AXIOM_XPATH_AXIS_PARENT, + AXIOM_XPATH_AXIS_ANCESTOR, + AXIOM_XPATH_AXIS_FOLLOWING_SIBLING, + AXIOM_XPATH_AXIS_PRECEDING_SIBLING, + AXIOM_XPATH_AXIS_FOLLOWING, + AXIOM_XPATH_AXIS_PRECEDING, + AXIOM_XPATH_AXIS_ATTRIBUTE, + AXIOM_XPATH_AXIS_NAMESPACE, + AXIOM_XPATH_AXIS_SELF, + AXIOM_XPATH_AXIS_DESCENDANT_OR_SELF, + AXIOM_XPATH_AXIS_ANCESTOR_OR_SELF + } axiom_xpath_axis_t; + + /** + * XPath node test structure + */ + struct axiom_xpath_node_test + { + /** Node test type */ + axiom_xpath_node_test_type_t type; + + /** Prefix + * NULL if no prefix + */ + axis2_char_t *prefix; + + /** Name */ + axis2_char_t *name; + + /** Literal for processing instruction (PI) */ + axis2_char_t *lit; + }; + + /** + * XPath operation structure + */ + struct axiom_xpath_operation + { + /** Type of operator */ + axiom_xpath_operation_type_t opr; + + /** Parameters of the operation */ + void *par1; + void *par2; + + /** Position: Used for predicate evaluation + */ + int pos; + + /** Operands pointing to other operations */ + int op1; + int op2; + }; + + /** + * Copies an XPath expression to a context + * + * No data is duplicated just the reference is assigned. + * Some parameters in the expression are reset. + * - pos in every operation + * + * @param context XPath context must not be NULL + * @param expr Expression to be copied + */ + void axiom_xpath_expression_copy( + axiom_xpath_context_t *context, + axiom_xpath_expression_t* expr); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/axiom/src/xpath/xpath_internals_engine.c b/axiom/src/xpath/xpath_internals_engine.c new file mode 100644 index 0000000..3c96d0e --- /dev/null +++ b/axiom/src/xpath/xpath_internals_engine.c @@ -0,0 +1,1203 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "xpath_internals.h" +#include "xpath_internals_engine.h" +#include "xpath_internals_iterators.h" + +/* Evaluates the expath expression */ +axiom_xpath_result_t * +axiom_xpath_run( + axiom_xpath_context_t *context) +{ + axiom_xpath_result_t* res; + + /* Initialize result ret */ + res = AXIS2_MALLOC(context->env->allocator, sizeof(axiom_xpath_result_t)); + + res->flag = 0; + + res->nodes = axutil_array_list_create(context->env, 0); + + /* Expression is empty */ + if(context->expr->start == AXIOM_XPATH_PARSE_END) + { + return res; + } + + context->stack = axutil_stack_create(context->env); + + axiom_xpath_evaluate_operation(context, context->expr->start); + + /* Add nodes to the result set from the stack */ + while(axutil_stack_size(context->stack, context->env) > 0) + { + axutil_array_list_add(res->nodes, context->env, + axutil_stack_pop(context->stack, context->env)); + } + + axutil_stack_free(context->stack, context->env); + + return res; +} + +/* Casting functions; these make use of the casting functions defined in xpath.h */ +void +axiom_xpath_cast_boolean( + axiom_xpath_result_node_t *node, + axiom_xpath_context_t *context) +{ + axis2_bool_t v = axiom_xpath_cast_node_to_boolean(context->env, node); + + AXIOM_XPATH_CAST_SET_VALUE(axis2_bool_t, v); + + node->type = AXIOM_XPATH_TYPE_BOOLEAN; +} + +void +axiom_xpath_cast_number( + axiom_xpath_result_node_t *node, + axiom_xpath_context_t *context) +{ + double v = axiom_xpath_cast_node_to_number(context->env, node); + + AXIOM_XPATH_CAST_SET_VALUE(double, v); + + node->type = AXIOM_XPATH_TYPE_NUMBER; +} + +void +axiom_xpath_cast_string( + axiom_xpath_result_node_t *node, + axiom_xpath_context_t *context) +{ + node->value = axiom_xpath_cast_node_to_string(context->env, node); + + node->type = AXIOM_XPATH_TYPE_TEXT; +} + +/* Evaluate whether two results are equal + + If either node is a boolean other is casted to a boolean; + Otherwise, if either node is a number other is casted to a number; + Otherwise, both nodes are casted to strings.*/ +axis2_bool_t +axiom_xpath_compare_equal( + axiom_xpath_result_node_t *node1, + axiom_xpath_result_node_t *node2, + axiom_xpath_context_t *context) +{ + if(node1->type == AXIOM_XPATH_TYPE_BOOLEAN || node2->type == AXIOM_XPATH_TYPE_BOOLEAN) + { + axiom_xpath_cast_boolean(node1, context); + axiom_xpath_cast_boolean(node2, context); + + if(*(axis2_bool_t*)(node1->value) == *(axis2_bool_t*)(node2->value)) + { + return AXIS2_TRUE; + } + else + { + return AXIS2_FALSE; + } + } + + if(node1->type == AXIOM_XPATH_TYPE_NUMBER || node2->type == AXIOM_XPATH_TYPE_NUMBER) + { + axiom_xpath_cast_number(node1, context); + axiom_xpath_cast_number(node2, context); + + if(*(double *)(node1->value) == *(double *)(node2->value)) + { + return AXIS2_TRUE; + } + else + { + return AXIS2_FALSE; + } + } + + axiom_xpath_cast_string(node1, context); + axiom_xpath_cast_string(node2, context); + + if(axutil_strcmp((axis2_char_t *)(node1->value), (axis2_char_t *)(node2->value)) == 0) + { + return AXIS2_TRUE; + } + else + { + return AXIS2_FALSE; + } +} + +/* Convert a node set to boolean */ +axis2_bool_t +axiom_xpath_convert_to_boolean( + axutil_array_list_t *node_set, + axiom_xpath_context_t *context) +{ + if(axutil_array_list_size(node_set, context->env) == 0) + { + return AXIS2_FALSE; + } + else if(axutil_array_list_size(node_set, context->env) >= 2) + { + return AXIS2_TRUE; + } + else + { + axiom_xpath_result_node_t *node = axutil_array_list_get(node_set, context->env, 0); + axiom_xpath_cast_boolean(node, context); + + return *(axis2_bool_t *)node->value; + } +} + +/* Operators */ + +/* Literal */ +int +axiom_xpath_literal_operator( + axiom_xpath_context_t *context, + axiom_xpath_operation_t * op) +{ + axiom_xpath_result_node_t *node; + + node = AXIS2_MALLOC(context->env->allocator, sizeof(axiom_xpath_result_node_t)); + + /* Set the context node to NULL */ + /* This is not required; it gives some problems */ + /* context->node = NULL;*/ + + node->value = op->par1; + node->type = AXIOM_XPATH_TYPE_TEXT; + + axutil_stack_push(context->stack, context->env, node); + + return 1; +} + +/* Number */ +int +axiom_xpath_number_operator( + axiom_xpath_context_t *context, + axiom_xpath_operation_t * op) +{ + axiom_xpath_result_node_t *node; + + node = AXIS2_MALLOC(context->env->allocator, sizeof(axiom_xpath_result_node_t)); + + /* Set the context node to NULL */ + /* This is not required; it gives some problems */ + /* context->node = NULL;*/ + + node->value = op->par1; + node->type = AXIOM_XPATH_TYPE_NUMBER; + + axutil_stack_push(context->stack, context->env, node); + + return 1; +} + +/* Path Expression */ +int +axiom_xpath_path_expression_operator( + axiom_xpath_context_t *context, + axiom_xpath_operation_t * op) +{ + int filter_res_n, n_nodes = 0; + axiom_xpath_operation_t *rel_loc_op; + axiom_xpath_operator_t rel_loc_func; + axutil_array_list_t *arr; + axiom_xpath_result_node_t *res_node; + int i; + + /* Filter operation */ + if(op->op1 == AXIOM_XPATH_PARSE_END) + { + return 0; + } + + filter_res_n = axiom_xpath_evaluate_operation(context, op->op1); + + /* Relative location path */ + if(op->op2 == AXIOM_XPATH_PARSE_END) + { + return filter_res_n; + } + + rel_loc_op = AXIOM_XPATH_OPR_GET(op->op2); + rel_loc_func = axiom_xpath_get_operator(rel_loc_op); + + /* Array list to add all results from the filter expression */ + arr = axutil_array_list_create(context->env, 0); + + for(i = 0; i < filter_res_n; i++) + { + axutil_array_list_add(arr, context->env, axutil_stack_pop(context->stack, context->env)); + } + + /* Evaluate relative location path for all results from the + filter expression */ + for(i = 0; i < axutil_array_list_size(arr, context->env); i++) + { + res_node = (axiom_xpath_result_node_t *)axutil_array_list_get(arr, context->env, i); + + if(res_node->type == AXIOM_XPATH_TYPE_NODE) + { + context->node = (axiom_node_t *)res_node->value; + context->position = i + 1; + context->size = filter_res_n; + + n_nodes += rel_loc_func(context, rel_loc_op); + } + + AXIS2_FREE(context->env->allocator, res_node); + } + + axutil_array_list_free(arr, context->env); + + return n_nodes; +} + +/* Or Expression */ +int +axiom_xpath_orexpr_operator( + axiom_xpath_context_t *context, + axiom_xpath_operation_t * op) +{ + axiom_xpath_result_node_t *node; + axiom_xpath_result_node_t *res_node; + int n_nodes[2]; + int i, j; + int op12[2]; + axutil_array_list_t *arr[2]; + + op12[0] = op->op1; + op12[1] = op->op2; + + /* Evaluate both operands and get number of results */ + for(i = 0; i < 2; i++) + { + if(op12[i] == AXIOM_XPATH_PARSE_END) + { + continue; + } + + n_nodes[i] = axiom_xpath_evaluate_operation(context, op12[i]); + } + + for(i = 1; i >= 0; i--) + { + arr[i] = axutil_array_list_create(context->env, 0); + + for(j = 0; j < n_nodes[i]; j++) + { + axutil_array_list_add(arr[i], context->env, axutil_stack_pop(context->stack, + context->env)); + } + } + + node = AXIS2_MALLOC(context->env->allocator, sizeof(axiom_xpath_result_node_t)); + + node->type = AXIOM_XPATH_TYPE_BOOLEAN; + node->value = NULL; + + /* Checking equality + - If any node from the first set is equal to any node from the second set + the result is true */ + if(axiom_xpath_convert_to_boolean(arr[0], context) || axiom_xpath_convert_to_boolean(arr[1], + context)) + { + AXIOM_XPATH_CAST_SET_VALUE(axis2_bool_t, AXIS2_TRUE); + + axutil_stack_push(context->stack, context->env, node); + } + else + { + AXIOM_XPATH_CAST_SET_VALUE(axis2_bool_t, AXIS2_FALSE); + + axutil_stack_push(context->stack, context->env, node); + } + + for (i = 1; i >= 0; i--) + { + for (j = 0; j < n_nodes[i]; j++) + { + res_node = (axiom_xpath_result_node_t *)axutil_array_list_get(arr[i], context->env, j); + AXIS2_FREE(context->env->allocator, res_node); + } + + axutil_array_list_free(arr[i], context->env); + } + + return 1; +} + +/* And Expression */ +int +axiom_xpath_andexpr_operator( + axiom_xpath_context_t *context, + axiom_xpath_operation_t * op) +{ + axiom_xpath_result_node_t *node; + axiom_xpath_result_node_t *res_node; + int n_nodes[2]; + int i, j; + int op12[2]; + axutil_array_list_t *arr[2]; + + op12[0] = op->op1; + op12[1] = op->op2; + + /* Evaluate both operands and get number of results */ + for(i = 0; i < 2; i++) + { + if(op12[i] == AXIOM_XPATH_PARSE_END) + { + continue; + } + + n_nodes[i] = axiom_xpath_evaluate_operation(context, op12[i]); + } + + for(i = 1; i >= 0; i--) + { + arr[i] = axutil_array_list_create(context->env, 0); + + for(j = 0; j < n_nodes[i]; j++) + { + axutil_array_list_add(arr[i], context->env, axutil_stack_pop(context->stack, + context->env)); + } + } + + node = AXIS2_MALLOC(context->env->allocator, sizeof(axiom_xpath_result_node_t)); + + node->type = AXIOM_XPATH_TYPE_BOOLEAN; + node->value = NULL; + + /* Checking equality + - If any node from the first set is equal to any node from the second set + the result is true */ + if(axiom_xpath_convert_to_boolean(arr[0], context) && axiom_xpath_convert_to_boolean(arr[1], + context)) + { + AXIOM_XPATH_CAST_SET_VALUE(axis2_bool_t, AXIS2_TRUE); + + axutil_stack_push(context->stack, context->env, node); + } + else + { + AXIOM_XPATH_CAST_SET_VALUE(axis2_bool_t, AXIS2_FALSE); + + axutil_stack_push(context->stack, context->env, node); + } + + for (i = 1; i >= 0; i--) + { + for (j = 0; j < n_nodes[i]; j++) + { + res_node = (axiom_xpath_result_node_t *)axutil_array_list_get(arr[i], context->env, j); + AXIS2_FREE(context->env->allocator, res_node); + } + + axutil_array_list_free(arr[i], context->env); + } + + return 1; +} + +/* Equal Expression */ +int +axiom_xpath_equalexpr_operator( + axiom_xpath_context_t *context, + axiom_xpath_operation_t * op) +{ + axiom_xpath_result_node_t *node; + axiom_xpath_result_node_t *res_node; + int n_nodes[2]; + int i, j; + int op12[2]; + axutil_array_list_t *arr[2]; + + op12[0] = op->op1; + op12[1] = op->op2; + + /* Evaluate both operands and get number of results */ + for(i = 0; i < 2; i++) + { + if(op12[i] == AXIOM_XPATH_PARSE_END) + { + continue; + } + + n_nodes[i] = axiom_xpath_evaluate_operation(context, op12[i]); + } + + for(i = 1; i >= 0; i--) + { + arr[i] = axutil_array_list_create(context->env, 0); + + for(j = 0; j < n_nodes[i]; j++) + { + axutil_array_list_add(arr[i], context->env, axutil_stack_pop(context->stack, + context->env)); + } + } + + node = AXIS2_MALLOC(context->env->allocator, sizeof(axiom_xpath_result_node_t)); + + node->type = AXIOM_XPATH_TYPE_BOOLEAN; + node->value = NULL; + + /* Checking equality + - If any node from the first set is equal to any node from the second set + the result is true */ + for(i = 0; i < n_nodes[0]; i++) + { + for(j = 0; j < n_nodes[1]; j++) + { + if(axiom_xpath_compare_equal(axutil_array_list_get(arr[0], context->env, i), + axutil_array_list_get(arr[1], context->env, j), context)) + { + AXIOM_XPATH_CAST_SET_VALUE(axis2_bool_t, AXIS2_TRUE); + + axutil_stack_push(context->stack, context->env, node); + + break; + } + } + + if(j < n_nodes[1]) + { + break; + } + } + + if(!node->value) + { + AXIOM_XPATH_CAST_SET_VALUE(axis2_bool_t, AXIS2_FALSE); + + axutil_stack_push(context->stack, context->env, node); + } + + for (i = 1; i >= 0; i--) + { + for (j = 0; j < n_nodes[i]; j++) + { + res_node =(axiom_xpath_result_node_t *)axutil_array_list_get(arr[i], context->env, j); + AXIS2_FREE(context->env->allocator, res_node); + } + + axutil_array_list_free(arr[i], context->env); + } + + return 1; +} + +/* Union */ +int +axiom_xpath_union_operator( + axiom_xpath_context_t *context, + axiom_xpath_operation_t * op) +{ + int n_nodes = 0; + int i; + int op12[2]; + + op12[0] = op->op1; + op12[1] = op->op2; + + for(i = 0; i < 2; i++) + { + if(op12[i] == AXIOM_XPATH_PARSE_END) + { + continue; + } + + n_nodes += axiom_xpath_evaluate_operation(context, op12[i]); + } + + return n_nodes; +} + +/* Set context node depending on whether relative or absolute location path */ +int +axiom_xpath_start_node_operator( + axiom_xpath_context_t *context, + axiom_xpath_operation_t * op) +{ + int n_nodes = 0; + + if(op->op1 == AXIOM_XPATH_PARSE_END) + { + return 0; + } + + if(op->opr == AXIOM_XPATH_OPERATION_ROOT_NODE) + { + context->node = context->root_node; + n_nodes += axiom_xpath_evaluate_operation(context, op->op1); + } + else if(op->opr == AXIOM_XPATH_OPERATION_CONTEXT_NODE) + { + n_nodes += axiom_xpath_evaluate_operation(context, op->op1); + } + + return n_nodes; +} + +/* Step */ +int +axiom_xpath_step_operator( + axiom_xpath_context_t *context, + axiom_xpath_operation_t * op) +{ + axiom_xpath_operation_t * node_test_op; + axiom_xpath_iterator_t iter; + axiom_xpath_axis_t axis; + + if(op->op1 == AXIOM_XPATH_PARSE_END) + { +#ifdef AXIOM_XPATH_DEBUG + printf("Node test operator empty\n"); +#endif + + return AXIOM_XPATH_EVALUATION_ERROR; + } + + if(op->op2 == AXIOM_XPATH_PARSE_END) + { + return 0; + } + + /* Get the name */ + node_test_op = AXIOM_XPATH_OPR_GET(op->op1); + + /* Get the axis */ + if(!node_test_op->par2) + { +#ifdef AXIOM_XPATH_DEBUG + printf("axis is NULL in the step operator\n"); +#endif + return AXIOM_XPATH_EVALUATION_ERROR; + } + axis = *((axiom_xpath_axis_t *)node_test_op->par2); + + /* Get the iteration for the axis */ + iter = axiom_xpath_get_iterator(axis); + + return iter(context, op->op1 /* node test */, op->op2 /* next step */, node_test_op->op1 /* predicate */); +} + +/* Predicates */ +axis2_bool_t +axiom_xpath_evaluate_predicate_condition( + axiom_xpath_context_t *context, + int n_nodes) +{ + axiom_xpath_result_node_t *res; + int i; + + if(n_nodes <= 0) + { + return AXIS2_FALSE; + } + else if(n_nodes > 1) + { + for(i = 0; i < n_nodes; i++) + { + res = (axiom_xpath_result_node_t *)axutil_stack_pop(context->stack, context->env); + + if (res->type > AXIOM_XPATH_TYPE_NAMESPACE) + { + AXIS2_FREE(context->env->allocator, res->value); + } + + AXIS2_FREE(context->env->allocator, res); + } + + return AXIS2_TRUE; + } + else + { + res = (axiom_xpath_result_node_t *)axutil_stack_pop(context->stack, context->env); + + if(res->type == AXIOM_XPATH_TYPE_NUMBER) + { + if(*(double *)(res->value) == context->position) + { + AXIS2_FREE(context->env->allocator, res); + return AXIS2_TRUE; + } + else + { + AXIS2_FREE(context->env->allocator, res); + return AXIS2_FALSE; + } + } + else if(res->type == AXIOM_XPATH_TYPE_BOOLEAN) + { + if(*(axis2_bool_t *)(res->value)) + { + AXIS2_FREE(context->env->allocator, res); + return AXIS2_TRUE; + } + else + { + AXIS2_FREE(context->env->allocator, res); + return AXIS2_FALSE; + } + } + else + { + AXIS2_FREE(context->env->allocator, res); + return AXIS2_TRUE; + } + } +} + +/* Predicate */ +int +axiom_xpath_evaluate_predicate( + axiom_xpath_context_t *context, + int op_next, + int op_predicate) +{ + int n_res; + axis2_bool_t res; + + axiom_xpath_operation_t * pred_op; + axiom_node_t *context_node = context->node; + + if(op_predicate == AXIOM_XPATH_PARSE_END) + { + return axiom_xpath_evaluate_operation(context, op_next); + } + else + { + pred_op = AXIOM_XPATH_OPR_GET(op_predicate); + + pred_op->pos++; + + /* Evaluate the predicate */ + if(pred_op->op1 != AXIOM_XPATH_PARSE_END) + { + n_res = axiom_xpath_evaluate_operation(context, pred_op->op1); + context->position = pred_op->pos; + + res = axiom_xpath_evaluate_predicate_condition(context, n_res); + } + else + { + res = AXIS2_TRUE; + } + /* A PredicateExpr is evaluated by evaluating the Expr and + converting the result to a boolean. If the result is a number, + the result will be converted to true if the number is equal to the + context position and will be converted to false otherwise; if the + result is not a number, then the result will be converted as if + by a call to the boolean function. */ + + /* Transform the result to number or boolean ? */ + + if(res) + { + context->node = context_node; + + return axiom_xpath_evaluate_predicate(context, op_next, pred_op->op2); + } + } + + return 0; +} + +/* Node test match */ +axis2_bool_t +axiom_xpath_node_test_match( + axiom_xpath_context_t *context, + axiom_xpath_node_test_t *node_test) +{ + axiom_types_t type; + axiom_element_t *element = NULL; + axis2_char_t *name = NULL; + axiom_namespace_t *ns = NULL, *xpath_ns = NULL; + + if(!context->node && !context->attribute && !context->ns) + { +#ifdef AXIOM_XPATH_DEBUG + printf("Both context node and attribute are NULL."); + printf(" May be a literal or a number.\n"); +#endif + return AXIS2_FALSE; + } + else if(context->node) + { + /* Test if the node matches */ + type = axiom_node_get_node_type(context->node, context->env); + + if(type == AXIOM_ELEMENT) + { + element = axiom_node_get_data_element(context->node, context->env); + + name = axiom_element_get_localname(element, context->env); + + ns = axiom_element_get_namespace(element, context->env, context->node); + } + + if(node_test->type == AXIOM_XPATH_NODE_TEST_NONE) + { + return AXIS2_FALSE; + } + else + { + if(node_test->type == AXIOM_XPATH_NODE_TEST_ALL || node_test->type + == AXIOM_XPATH_NODE_TEST_STANDARD) + { + if(type != AXIOM_ELEMENT) + { + return AXIS2_FALSE; + } + + /* Check namespace */ + if(node_test->type == AXIOM_XPATH_NODE_TEST_ALL) + { + if(!ns && node_test->prefix) + { + return AXIS2_FALSE; + } + } + else + { + if((ns && !node_test->prefix) || (!ns && node_test->prefix)) + { + return AXIS2_FALSE; + } + } + + if(ns && node_test->prefix) + { + xpath_ns = axiom_xpath_get_namespace(context, node_test->prefix); + + if(!xpath_ns) + { + return AXIS2_FALSE; + } + + if(axutil_strcmp(axiom_namespace_get_uri(ns, context->env), + axiom_namespace_get_uri(xpath_ns, context->env))) + { + return AXIS2_FALSE; + } + } + + /* Check local name */ + if(node_test->type == AXIOM_XPATH_NODE_TEST_ALL) + { + return AXIS2_TRUE; + } + else if(node_test->type == AXIOM_XPATH_NODE_TEST_STANDARD) + { + if(name && axutil_strcmp(node_test->name, name) == 0) + { + return AXIS2_TRUE; + } + else + { + return AXIS2_FALSE; + } + } + } + else if(node_test->type == AXIOM_XPATH_NODE_TYPE_COMMENT) + { + if(type == AXIOM_COMMENT) + { + return AXIS2_TRUE; + } + else + { + return AXIS2_FALSE; + } + } + else if(node_test->type == AXIOM_XPATH_NODE_TYPE_PI) + { + if(type == AXIOM_PROCESSING_INSTRUCTION) + { + return AXIS2_TRUE; + } + else + { + return AXIS2_FALSE; + } + } + else if(node_test->type == AXIOM_XPATH_NODE_TYPE_NODE) + { + if(type == AXIOM_ELEMENT) + { + return AXIS2_TRUE; + } + else + { + return AXIS2_FALSE; + } + } + else if(node_test->type == AXIOM_XPATH_NODE_TYPE_TEXT) + { + if(type == AXIOM_TEXT) + { + return AXIS2_TRUE; + } + else + { + return AXIS2_FALSE; + } + } + } + } + /* Attributes */ + else if(context->attribute) + { + name = axiom_attribute_get_localname(context->attribute, context->env); + ns = axiom_attribute_get_namespace(context->attribute, context->env); + + if(node_test->type == AXIOM_XPATH_NODE_TEST_NONE) + { + return AXIS2_FALSE; + } + else + { + /* Check namespace */ + if(node_test->type == AXIOM_XPATH_NODE_TEST_ALL) + { + if(!ns && node_test->prefix) + { + return AXIS2_FALSE; + } + } + else + { + if((ns && !node_test->prefix) || (!ns && node_test->prefix)) + { + return AXIS2_FALSE; + } + } + + if(ns && node_test->prefix) + { + xpath_ns = axiom_xpath_get_namespace(context, node_test->prefix); + + if(!xpath_ns) + { + return AXIS2_FALSE; + } + + if(axutil_strcmp(axiom_namespace_get_uri(ns, context->env), + axiom_namespace_get_uri(xpath_ns, context->env))) + { + return AXIS2_FALSE; + } + } + + /* Check local name */ + if(node_test->type == AXIOM_XPATH_NODE_TEST_ALL) + { + return AXIS2_TRUE; + } + else if(node_test->type == AXIOM_XPATH_NODE_TEST_STANDARD) + { + if(name && axutil_strcmp(node_test->name, name) == 0) + { + return AXIS2_TRUE; + } + else + { + return AXIS2_FALSE; + } + } + } + } + + /* Namespace */ + else if(context->ns) + { + /* Prefix is checked ??? If changed to uri the cast + method in xpath.c needs to be changed as well */ + name = axiom_namespace_get_prefix(context->ns, context->env); + ns = NULL; + + if(node_test->type == AXIOM_XPATH_NODE_TEST_NONE) + { + return AXIS2_FALSE; + } + else + { + /* Check namespace */ + if(node_test->type == AXIOM_XPATH_NODE_TEST_ALL) + { + if(!ns && node_test->prefix) + { + return AXIS2_FALSE; + } + } + else + { + if((ns && !node_test->prefix) || (!ns && node_test->prefix)) + { + return AXIS2_FALSE; + } + } + + if(ns && node_test->prefix) + { + xpath_ns = axiom_xpath_get_namespace(context, node_test->prefix); + + if(!xpath_ns) + { + return AXIS2_FALSE; + } + + if(axutil_strcmp(axiom_namespace_get_uri(ns, context->env), + axiom_namespace_get_uri(xpath_ns, context->env))) + { + return AXIS2_FALSE; + } + } + + /* Check local name */ + if(node_test->type == AXIOM_XPATH_NODE_TEST_ALL) + { + return AXIS2_TRUE; + } + else if(node_test->type == AXIOM_XPATH_NODE_TEST_STANDARD) + { + if(name && axutil_strcmp(node_test->name, name) == 0) + { + return AXIS2_TRUE; + } + else + { + return AXIS2_FALSE; + } + } + } + } + + return AXIS2_FALSE; +} + +int +axiom_xpath_function_call_operator( + axiom_xpath_context_t *context, + axiom_xpath_operation_t * op) +{ + axiom_xpath_function_t func = axiom_xpath_get_function(context, op->par1); + int n_args = 0; + + if(!func) + { +#ifdef AXIOM_XPATH_DEBUG + printf("Function %s not found\n", (char *)op->par1); +#endif + + return AXIOM_XPATH_EVALUATION_ERROR; + } + + if(op->op1 != AXIOM_XPATH_PARSE_END) + { + n_args = axiom_xpath_evaluate_operation(context, op->op1); + } + + return func(context, n_args); +} + +int +axiom_xpath_argument_operator( + axiom_xpath_context_t *context, + axiom_xpath_operation_t * op) +{ + int n_args = 0; + + if(op->op1 != AXIOM_XPATH_PARSE_END) + { + n_args += axiom_xpath_evaluate_operation(context, op->op1); + } + + if(op->op2 != AXIOM_XPATH_PARSE_END) + { + n_args += axiom_xpath_evaluate_operation(context, op->op1); + } + + return n_args; +} + +/* Collect the current node to the results list */ +int +axiom_xpath_collect_operator( + axiom_xpath_context_t *context, + axiom_xpath_operation_t * op) +{ + axiom_xpath_result_node_t *node; + + node = AXIS2_MALLOC(context->env->allocator, sizeof(axiom_xpath_result_node_t)); + + if(context->node) + { + node->value = context->node; + node->type = AXIOM_XPATH_TYPE_NODE; + } + else if(context->attribute) + { + node->value = context->attribute; + node->type = AXIOM_XPATH_TYPE_ATTRIBUTE; + } + else if(context->ns) + { + node->value = context->ns; + node->type = AXIOM_XPATH_TYPE_NAMESPACE; + } + + axutil_stack_push(context->stack, context->env, node); + + return 1; +} + +/* Returns a pointer to the respective processing function */ +axiom_xpath_operator_t +axiom_xpath_get_operator( + axiom_xpath_operation_t * op) +{ + switch(op->opr) + { + case AXIOM_XPATH_OPERATION_STEP: + return axiom_xpath_step_operator; + + case AXIOM_XPATH_OPERATION_ROOT_NODE: + case AXIOM_XPATH_OPERATION_CONTEXT_NODE: + return axiom_xpath_start_node_operator; + + case AXIOM_XPATH_OPERATION_RESULT: + return axiom_xpath_collect_operator; + + case AXIOM_XPATH_OPERATION_UNION: + return axiom_xpath_union_operator; + + case AXIOM_XPATH_OPERATION_OR_EXPR: + return axiom_xpath_orexpr_operator; + + case AXIOM_XPATH_OPERATION_AND_EXPR: + return axiom_xpath_andexpr_operator; + + case AXIOM_XPATH_OPERATION_EQUAL_EXPR: + return axiom_xpath_equalexpr_operator; + + case AXIOM_XPATH_OPERATION_LITERAL: + return axiom_xpath_literal_operator; + + case AXIOM_XPATH_OPERATION_NUMBER: + return axiom_xpath_number_operator; + + case AXIOM_XPATH_OPERATION_PATH_EXPRESSION: + return axiom_xpath_path_expression_operator; + + case AXIOM_XPATH_OPERATION_FUNCTION_CALL: + return axiom_xpath_function_call_operator; + + case AXIOM_XPATH_OPERATION_ARGUMENT: + return axiom_xpath_argument_operator; + + default: +#ifdef AXIOM_XPATH_DEBUG + printf("Unidentified operation.\n"); +#endif + + return NULL; + } +} + +/* Returns a pointer to the respective processing function */ +axiom_xpath_iterator_t +axiom_xpath_get_iterator( + axiom_xpath_axis_t axis) +{ + switch(axis) + { + case AXIOM_XPATH_AXIS_CHILD: + return axiom_xpath_child_iterator; + + case AXIOM_XPATH_AXIS_DESCENDANT: + return axiom_xpath_descendant_iterator; + + case AXIOM_XPATH_AXIS_PARENT: + return axiom_xpath_parent_iterator; + + case AXIOM_XPATH_AXIS_ANCESTOR: + return axiom_xpath_ancestor_iterator; + + case AXIOM_XPATH_AXIS_FOLLOWING_SIBLING: + return axiom_xpath_following_sibling_iterator; + + case AXIOM_XPATH_AXIS_PRECEDING_SIBLING: + return axiom_xpath_preceding_sibling_iterator; + + case AXIOM_XPATH_AXIS_FOLLOWING: + return axiom_xpath_following_iterator; + + case AXIOM_XPATH_AXIS_PRECEDING: + return axiom_xpath_preceding_iterator; + + case AXIOM_XPATH_AXIS_ATTRIBUTE: + return axiom_xpath_attribute_iterator; + + case AXIOM_XPATH_AXIS_NAMESPACE: + return axiom_xpath_namespace_iterator; + + case AXIOM_XPATH_AXIS_SELF: + return axiom_xpath_self_iterator; + + case AXIOM_XPATH_AXIS_DESCENDANT_OR_SELF: + return axiom_xpath_descendant_self_iterator; + + case AXIOM_XPATH_AXIS_ANCESTOR_OR_SELF: + return axiom_xpath_ancestor_self_iterator; + + default: +#ifdef AXIOM_XPATH_DEBUG + printf("Unidentified axis.\n"); +#endif + + return NULL; + } +} + +int +axiom_xpath_evaluate_operation( + axiom_xpath_context_t *context, + int op) +{ + axiom_xpath_operation_t * operation; + axiom_xpath_operator_t function; + + /* Get a pointer to the operation */ + operation = AXIOM_XPATH_OPR_GET(op); + + /* Get the funciton which processes the operations */ + function = axiom_xpath_get_operator(operation); + + return function(context, operation); +} diff --git a/axiom/src/xpath/xpath_internals_engine.h b/axiom/src/xpath/xpath_internals_engine.h new file mode 100755 index 0000000..bffc8a7 --- /dev/null +++ b/axiom/src/xpath/xpath_internals_engine.h @@ -0,0 +1,265 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_XPATH_INTERNALS_ENGINE_H +#define AXIOM_XPATH_INTERNALS_ENGINE_H + +#include "xpath_internals.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_xpath_engine engine + * @ingroup axiom_xpath + * @{ + */ + + + /* Macros */ + + /** Set node->value to _value */ +#define AXIOM_XPATH_CAST_SET_VALUE(_type, _value) { \ + _type * _var; \ + if(node->value \ + && node->type != AXIOM_XPATH_TYPE_NODE \ + && node->type != AXIOM_XPATH_TYPE_ATTRIBUTE \ + && node->type != AXIOM_XPATH_TYPE_NAMESPACE) \ + { AXIS2_FREE(context->env->allocator, node->value); } \ + _var = AXIS2_MALLOC(context->env->allocator, sizeof(_type)); \ + *_var = _value; \ + node->value = (void *) _var; \ +} + + /* Functions */ + + /** + * Evaluate an XPath context, which containes a parsed expression + * + * @param context XPath context + * @return Result set + */ + axiom_xpath_result_t* axiom_xpath_run(axiom_xpath_context_t *context); + + /** + * Finds the operator function for a given operation + * + * @param op Operation + * @return Pointer to the function which process the given operation + */ + axiom_xpath_operator_t axiom_xpath_get_operator(axiom_xpath_operation_t * op); + + /** + * Get the iterotor for give axis + * + * @param axis XPath axis + * @return Pointer to the function which iterater through the given axis + */ + axiom_xpath_iterator_t axiom_xpath_get_iterator(axiom_xpath_axis_t axis); + + /* Operators */ + + /** + * Select the start node depending on whether it is an absolute or relative location path + * + * @param context XPath context + * @param op XPath operation + * @return Number of nodes added to the stack + */ + int axiom_xpath_start_node_operator(axiom_xpath_context_t *context, axiom_xpath_operation_t * op); + + /** + * Add the context node or attribute to the results stack + * + * @param context XPath context + * @param op XPath operation + * @return Number of nodes added to the stack + */ + int axiom_xpath_collect_operator(axiom_xpath_context_t *context, axiom_xpath_operation_t * op); + + /** + * Process union operator + * + * @param context XPath context + * @param op XPath operation + * @return Number of nodes added to the stack + */ + int axiom_xpath_union_operator(axiom_xpath_context_t *context, axiom_xpath_operation_t * op); + + /** + * Perform or operation + * + * @param context XPath context + * @param op XPath operation + * @return Number of nodes added to the stack; which is one + */ + int axiom_xpath_orexpr_operator(axiom_xpath_context_t *context, axiom_xpath_operation_t * op); + + /** + * Perform and operation + * + * @param context XPath context + * @param op XPath operation + * @return Number of nodes added to the stack; which is one + */ + int axiom_xpath_andexpr_operator(axiom_xpath_context_t *context, axiom_xpath_operation_t * op); + + /** + * Perform equality test operation + * + * @param context XPath context + * @param op XPath operation + * @return Number of nodes added to the stack; which is one + */ + int axiom_xpath_equalexpr_operator(axiom_xpath_context_t *context, axiom_xpath_operation_t * op); + + /** + * Evaluate function call operation + * + * @param context XPath context + * @param op XPath operation + * @return Number of nodes added to the stack; which is one + */ + int axiom_xpath_function_call_operator(axiom_xpath_context_t *context, axiom_xpath_operation_t * op); + + /** + * Evaluate argument operation + * + * @param context XPath context + * @param op XPath operation + * @return Number of nodes added to the stack; which is one + */ + int axiom_xpath_argument_operator(axiom_xpath_context_t *context, axiom_xpath_operation_t * op); + + /** + * Process a path expression + * + * @param context XPath context + * @param op XPath operation + * @return Number of nodes added to the stack + */ + int axiom_xpath_path_expression_operator(axiom_xpath_context_t *context, axiom_xpath_operation_t * op); + + /** + * Process a number; push the value to the stack + * + * @param context XPath context + * @param op XPath operation + * @return Number of nodes added to the stack; which is one + */ + int axiom_xpath_number_operator(axiom_xpath_context_t *context, axiom_xpath_operation_t * op); + + /** + * Process a literal; push the string to the stack + * + * @param context XPath context + * @param op XPath operation + * @return Number of nodes added to the stack; which is one + */ + int axiom_xpath_literal_operator(axiom_xpath_context_t *context, axiom_xpath_operation_t * op); + + + /** + * Converts an XPath result to a boolean result + * + * @param node Result + * @param context XPath context + */ + void axiom_xpath_cast_boolean(axiom_xpath_result_node_t *node, axiom_xpath_context_t *context); + + /** + * Converts an XPath result to a number + * + * @param node Result + * @param context XPath context + */ + void axiom_xpath_cast_number(axiom_xpath_result_node_t *node, axiom_xpath_context_t *context); + + /** + * Converts an XPath result to a string + * + * @param node Result + * @param context XPath context + */ + void axiom_xpath_cast_string(axiom_xpath_result_node_t *node, axiom_xpath_context_t *context); + + /* Convert a node set to boolean */ + /** + * Convert a XPath node set to boolean + * + * @param node_set Node set + * @return AXIS2_TRUE if true; AXIS2_FALSE otherwise + */ + axis2_bool_t axiom_xpath_convert_to_boolean(axutil_array_list_t *node_set, axiom_xpath_context_t *context); + + /** + * Test if two result nodes are equal + * + * @param node1 First node + * @param node2 Second node + * @param context XPath context + * @return AXIS2_TRUE if equal; AXIS2_FALSE otherwise + */ + axis2_bool_t axiom_xpath_compare_equal(axiom_xpath_result_node_t *node1, axiom_xpath_result_node_t *node2, axiom_xpath_context_t *context); + + /** + * Test if the axiom node matches node test + * + * @param context XPath context + * @param node_test Node test + * @return AXIS2_TRUE if matches; AXIS2_FALSE otherwise + */ + axis2_bool_t axiom_xpath_node_test_match(axiom_xpath_context_t *context, axiom_xpath_node_test_t *node_test); + + /** + * Evaluate if the predicate is true + * + * @param context XPath context + * @param n_nodes Number of results after evaluating the expression in the predicate + * @return AXIS2_TRUE if matches; AXIS2_FALSE otherwise + */ + axis2_bool_t axiom_xpath_evaluate_predicate_condition(axiom_xpath_context_t *context, int n_nodes); + + /** + * Evaluate if the predicate(s) is true using axiom_xpath_evaluate_predicate_condition and executes the operation op_next + * + * @param context XPath context + * @param op_next The operation to be executed if all predicates are true + * @param op_predicate Reference to predicate + * @return Number of nodes added to the stack + */ + int axiom_xpath_evaluate_predicate(axiom_xpath_context_t *context, int op_next, int op_predicate); + + /** + * Evaluate operation pointed by op + * + * @param context XPath context + * @param op The index of the operation in the operations list + * @return Number of nodes added to the stack + */ + int axiom_xpath_evaluate_operation(axiom_xpath_context_t *context, int op); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/axiom/src/xpath/xpath_internals_iterators.c b/axiom/src/xpath/xpath_internals_iterators.c new file mode 100644 index 0000000..225bea6 --- /dev/null +++ b/axiom/src/xpath/xpath_internals_iterators.c @@ -0,0 +1,588 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "xpath_internals.h" +#include "xpath_internals_engine.h" +#include "xpath_internals_iterators.h" + + +/* child */ +int +axiom_xpath_child_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate) +{ + int n_nodes_tot = 0; + int n_nodes; + axiom_xpath_operation_t * node_test_op; + axiom_node_t *cur = NULL; + axiom_node_t *context_node = NULL; + /* For streaming */ + axiom_node_t *prev = NULL; + + AXIOM_XPATH_ITERATOR_INITIALIZE; + cur = axiom_node_get_first_child(context->node, context->env); + + while(cur != NULL) + { + n_nodes = 0; + context->node = cur; + prev = cur; + cur = axiom_node_get_next_sibling(cur, context->env); + if(axiom_xpath_node_test_match(context, (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes = axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + n_nodes_tot += n_nodes; + } + } + + /* Change the context node back to what it was */ + context->node = context_node; + + return n_nodes_tot; +} + +/* descendant */ +int +axiom_xpath_descendant_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate) +{ + int n_nodes = 0; + axiom_xpath_operation_t * node_test_op; + axiom_node_t *child = NULL; + axiom_node_t *context_node = NULL; + axutil_stack_t *stack; + + AXIOM_XPATH_ITERATOR_INITIALIZE; + + /* Setting up the stack */ + stack = axutil_stack_create(context->env); + + child = axiom_node_get_first_child(context->node, context->env); + while(child) + { + axutil_stack_push(stack, context->env, child); + child = axiom_node_get_first_child(child, context->env); + } + + /* Processing nodes */ + while(axutil_stack_size(stack, context->env) > 0) + { + child = (axiom_node_t *)axutil_stack_pop(stack, context->env); + + context->node = child; + if(axiom_xpath_node_test_match(context, (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes += axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + } + + child = axiom_node_get_next_sibling(child, context->env); + while(child) + { + axutil_stack_push(stack, context->env, child); + child = axiom_node_get_first_child(child, context->env); + } + } + + context->node = context_node; + + axutil_stack_free(stack, context->env); + + return n_nodes; +} + +/* parent */ +int +axiom_xpath_parent_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate) +{ + int n_nodes = 0; + axiom_xpath_operation_t * node_test_op; + axiom_node_t *parent = NULL; + axiom_node_t *context_node = NULL; + + AXIOM_XPATH_ITERATOR_INITIALIZE; + + parent = axiom_node_get_parent(context->node, context->env); + + if(parent != NULL) + { + context->node = parent; + if(axiom_xpath_node_test_match(context, (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes = axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + } + } + + /* Change the context node back to what it was */ + context->node = context_node; + + return n_nodes; +} + +/* ancestor axis */ +int +axiom_xpath_ancestor_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate) +{ + int n_nodes = 0; + axiom_xpath_operation_t * node_test_op; + axiom_node_t *cur = NULL; + axiom_node_t *context_node = NULL; + + AXIOM_XPATH_ITERATOR_INITIALIZE; + cur = axiom_node_get_parent(context->node, context->env); + + while(cur != NULL) + { + context->node = cur; + if(axiom_xpath_node_test_match(context, (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes += axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + } + + cur = axiom_node_get_parent(cur, context->env); + } + + /* Change the context node back to what it was */ + context->node = context_node; + + return n_nodes; +} + +/* following-sibling axis */ +int +axiom_xpath_following_sibling_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate) +{ + int n_nodes = 0; + axiom_xpath_operation_t * node_test_op; + axiom_node_t *cur = NULL; + axiom_node_t *context_node = NULL; + + AXIOM_XPATH_ITERATOR_INITIALIZE; + cur = axiom_node_get_next_sibling(context->node, context->env); + + while(cur != NULL) + { + context->node = cur; + if(axiom_xpath_node_test_match(context, (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes += axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + } + + cur = axiom_node_get_next_sibling(cur, context->env); + } + + /* Change the context node back to what it was */ + context->node = context_node; + + return n_nodes; +} + +/* preceding-sibling axis */ +int +axiom_xpath_preceding_sibling_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate) +{ + int n_nodes = 0; + axiom_xpath_operation_t * node_test_op; + axiom_node_t *cur = NULL; + axiom_node_t *context_node = NULL; + + AXIOM_XPATH_ITERATOR_INITIALIZE; + cur = axiom_node_get_previous_sibling(context->node, context->env); + + while(cur != NULL) + { + context->node = cur; + if(axiom_xpath_node_test_match(context, (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes += axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + } + + cur = axiom_node_get_previous_sibling(cur, context->env); + } + + /* Change the context node back to what it was */ + context->node = context_node; + + return n_nodes; +} + +/* following */ +int +axiom_xpath_following_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate) +{ + int n_nodes = 0; + axiom_xpath_operation_t * node_test_op; + axiom_node_t *child = NULL, *parent = NULL; + axiom_node_t *context_node = NULL; + axutil_stack_t *stack; + + AXIOM_XPATH_ITERATOR_INITIALIZE; + + /* Setting up the stack */ + stack = axutil_stack_create(context->env); + axutil_stack_push(stack, context->env, context->node); + + parent = context->node; + + while(parent) + { + axutil_stack_push(stack, context->env, parent); + + while(axutil_stack_size(stack, context->env) > 0) + { + child = (axiom_node_t *)axutil_stack_pop(stack, context->env); + + child = axiom_node_get_next_sibling(child, context->env); + + while(child) + { + context->node = child; + if(axiom_xpath_node_test_match(context, + (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes += axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + } + + axutil_stack_push(stack, context->env, child); + child = axiom_node_get_first_child(child, context->env); + } + } + parent = axiom_node_get_parent(parent, context->env); + } + + /* Change the context node back to what it was */ + context->node = context_node; + + axutil_stack_free(stack, context->env); + + return n_nodes; +} + +/* preceding */ +int +axiom_xpath_preceding_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate) +{ + int n_nodes = 0; + axiom_xpath_operation_t * node_test_op; + axiom_node_t *child = NULL, *parent = NULL; + axiom_node_t *context_node = NULL; + axutil_stack_t *stack; + + AXIOM_XPATH_ITERATOR_INITIALIZE; + + /* Setting up the stack */ + stack = axutil_stack_create(context->env); + + parent = context->node; + + while(parent) + { + axutil_stack_push(stack, context->env, parent); + + while(axutil_stack_size(stack, context->env) > 0) + { + child = (axiom_node_t *)axutil_stack_pop(stack, context->env); + + child = axiom_node_get_previous_sibling(child, context->env); + + while(child) + { + context->node = child; + if(axiom_xpath_node_test_match(context, + (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes += axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + } + + axutil_stack_push(stack, context->env, child); + + child = axiom_node_get_last_child(child, context->env); + } + } + parent = axiom_node_get_parent(parent, context->env); + } + + /* Change the context node back to what it was */ + context->node = context_node; + + axutil_stack_free(stack, context->env); + + return n_nodes; +} + +/* attribute axis */ +int +axiom_xpath_attribute_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate) +{ + int n_nodes = 0; + axiom_xpath_operation_t * node_test_op; + axiom_types_t type; + axiom_node_t *context_node = NULL; + axiom_element_t *element; + axutil_hash_t *ht; + axutil_hash_index_t *hi; + + /* void *key; + * axis2_ssize_t klen; + */ + void *attr; + + AXIOM_XPATH_ITERATOR_INITIALIZE; + + type = axiom_node_get_node_type(context_node, context->env); + + if(type != AXIOM_ELEMENT) + { + return 0; + } + + element = axiom_node_get_data_element(context_node, context->env); + + context->node = NULL; + + ht = axiom_element_get_all_attributes(element, context->env); + + if(ht) + { + for(hi = axutil_hash_first(ht, context->env); hi; hi = axutil_hash_next(context->env, hi)) + { + attr = &context->attribute; + axutil_hash_this(hi, NULL, NULL, attr); + + if(axiom_xpath_node_test_match(context, (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes += axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + } + } + } + + context->node = context_node; + context->attribute = NULL; + + return n_nodes; +} + +/* namespace axis */ +int +axiom_xpath_namespace_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate) +{ + int n_nodes = 0; + axiom_xpath_operation_t * node_test_op; + axiom_types_t type; + axiom_node_t *context_node = NULL; + axiom_element_t *element; + axutil_hash_t *ht; + axutil_hash_index_t *hi; + + /* void *key; + * axis2_ssize_t klen; + */ + + void *ns; + + AXIOM_XPATH_ITERATOR_INITIALIZE; + + type = axiom_node_get_node_type(context_node, context->env); + + if(type != AXIOM_ELEMENT) + { + return 0; + } + + element = axiom_node_get_data_element(context_node, context->env); + + context->node = NULL; + + ht = axiom_element_get_namespaces(element, context->env); + + if(ht) + { + for(hi = axutil_hash_first(ht, context->env); hi; hi = axutil_hash_next(context->env, hi)) + { + ns = &context->ns; + axutil_hash_this(hi, NULL, NULL, ns); + + if(axiom_xpath_node_test_match(context, (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes += axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + } + } + } + + context->node = context_node; + context->ns = NULL; + + return n_nodes; +} + +/* self axis */ +int +axiom_xpath_self_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate) +{ + int n_nodes = 0; + axiom_xpath_operation_t * node_test_op; + axiom_node_t *context_node = NULL; + + AXIOM_XPATH_ITERATOR_INITIALIZE; + if(axiom_xpath_node_test_match(context, (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes += axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + } + + context->node = context_node; + + return n_nodes; +} + +/* descendant-or-self axis */ +int +axiom_xpath_descendant_self_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate) +{ + int n_nodes = 0; + axiom_xpath_operation_t * node_test_op; + axiom_node_t *child = NULL; + axiom_node_t *context_node = NULL; + axutil_stack_t *stack; + + AXIOM_XPATH_ITERATOR_INITIALIZE; + + if(axiom_xpath_node_test_match(context, (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes += axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + } + + /* Setting up the stack */ + stack = axutil_stack_create(context->env); + + child = axiom_node_get_first_child(context->node, context->env); + while(child) + { + axutil_stack_push(stack, context->env, child); + child = axiom_node_get_first_child(child, context->env); + } + + /* Processing nodes */ + while(axutil_stack_size(stack, context->env) > 0) + { + child = (axiom_node_t *)axutil_stack_pop(stack, context->env); + + context->node = child; + if(axiom_xpath_node_test_match(context, (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes += axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + } + + child = axiom_node_get_next_sibling(child, context->env); + while(child) + { + axutil_stack_push(stack, context->env, child); + child = axiom_node_get_first_child(child, context->env); + } + } + + /* Change the context node back to what it was */ + context->node = context_node; + + axutil_stack_free(stack, context->env); + + return n_nodes; +} + +/* ancestor-or-self axis */ +int +axiom_xpath_ancestor_self_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate) +{ + int n_nodes = 0; + axiom_xpath_operation_t * node_test_op; + axiom_node_t *parent = NULL; + axiom_node_t *context_node = NULL; + + AXIOM_XPATH_ITERATOR_INITIALIZE; + + if(axiom_xpath_node_test_match(context, (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes += axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + } + + parent = axiom_node_get_parent(context->node, context->env); + + while(parent != NULL) + { + context->node = parent; + if(axiom_xpath_node_test_match(context, (axiom_xpath_node_test_t *)node_test_op->par1)) + { + n_nodes += axiom_xpath_evaluate_predicate(context, op_next, op_predicate); + } + + parent = axiom_node_get_parent(parent, context->env); + } + + /* Change the context node back to what it was */ + context->node = context_node; + + return n_nodes; +} diff --git a/axiom/src/xpath/xpath_internals_iterators.h b/axiom/src/xpath/xpath_internals_iterators.h new file mode 100755 index 0000000..67d06c4 --- /dev/null +++ b/axiom/src/xpath/xpath_internals_iterators.h @@ -0,0 +1,298 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_XPATH_INTERNALS_ITERATORS_H +#define AXIOM_XPATH_INTERNALS_ITERATORS_H + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_xpath_iterators iterators + * @ingroup axiom_xpath + * @{ + */ + + +#ifdef AXIOM_XPATH_DEBUG +#define AXIOM_XPATH_ITERATOR_INITIALIZE { \ + if(!context->node) { \ + printf("Context node NULL; cannot evaluate self or descendent axis.\n"); \ + return AXIOM_XPATH_EVALUATION_ERROR; } \ + node_test_op = AXIOM_XPATH_OPR_GET(op_node_test); \ + if(!node_test_op) { \ + printf("Node test not present.\n"); \ + return AXIOM_XPATH_EVALUATION_ERROR; } \ + context_node = context->node; \ +} +#else +#define AXIOM_XPATH_ITERATOR_INITIALIZE { \ + if(!context->node) { \ + return AXIOM_XPATH_EVALUATION_ERROR; } \ + node_test_op = AXIOM_XPATH_OPR_GET(op_node_test); \ + if(!node_test_op) { \ + return AXIOM_XPATH_EVALUATION_ERROR; } \ + context_node = context->node; \ +} +#endif + + /** + * Iterate through children + * + * @param context XPath context + * @param op_node_test Reference to the node test operation + * in the parsed expression + * @param op_next Reference to the next step in the location path, + * in the parsed expression + * @param op_predicate Reference to the first predicate in the + * parsed expression + * @return Number of nodes added to the stack + */ + int axiom_xpath_child_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate); + + /** + * Iterate through descendents + * + * @param context XPath context + * @param op_node_test Reference to the node test operation + * in the parsed expression + * @param op_next Reference to the next step in the location path, + * in the parsed expression + * @param op_predicate Reference to the first predicate in the + * parsed expression + * @return Number of nodes added to the stack + */ + int axiom_xpath_descendant_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate); + + /** + * Iterate through parent node. (Only one node) + * + * @param context XPath context + * @param op_node_test Reference to the node test operation + * in the parsed expression + * @param op_next Reference to the next step in the location path, + * in the parsed expression + * @param op_predicate Reference to the first predicate in the + * parsed expression + * @return Number of nodes added to the stack + */ + int axiom_xpath_parent_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate); + + /** + * Iterate through ancestors + * + * @param context XPath context + * @param op_node_test Reference to the node test operation + * in the parsed expression + * @param op_next Reference to the next step in the location path, + * in the parsed expression + * @param op_predicate Reference to the first predicate in the + * parsed expression + * @return Number of nodes added to the stack + */ + int axiom_xpath_ancestor_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate); + + /** + * Iterate through siblings following the context node + * + * @param context XPath context + * @param op_node_test Reference to the node test operation + * in the parsed expression + * @param op_next Reference to the next step in the location path, + * in the parsed expression + * @param op_predicate Reference to the first predicate in the + * parsed expression + * @return Number of nodes added to the stack + */ + int axiom_xpath_following_sibling_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate); + + /** + * Iterate through sibling preceding the context node + * + * @param context XPath context + * @param op_node_test Reference to the node test operation + * in the parsed expression + * @param op_next Reference to the next step in the location path, + * in the parsed expression + * @param op_predicate Reference to the first predicate in the + * parsed expression + * @return Number of nodes added to the stack + */ + int axiom_xpath_preceding_sibling_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate); + + /** + * Iterate through all nodes following the context node + * + * @param context XPath context + * @param op_node_test Reference to the node test operation + * in the parsed expression + * @param op_next Reference to the next step in the location path, + * in the parsed expression + * @param op_predicate Reference to the first predicate in the + * parsed expression + * @return Number of nodes added to the stack + */ + int axiom_xpath_following_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate); + + /** + * Iterate through all nodes preceding the context node + * + * @param context XPath context + * @param op_node_test Reference to the node test operation + * in the parsed expression + * @param op_next Reference to the next step in the location path, + * in the parsed expression + * @param op_predicate Reference to the first predicate in the + * parsed expression + * @return Number of nodes added to the stack + */ + int axiom_xpath_preceding_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate); + + /** + * Iterate through attributes + * + * @param context XPath context + * @param op_node_test Reference to the node test operation + * in the parsed expression + * @param op_next Reference to the next step in the location path, + * in the parsed expression + * @param op_predicate Reference to the first predicate in the + * parsed expression + * @return Number of nodes added to the stack + */ + int axiom_xpath_attribute_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate); + + /** + * Iterate through namespaces defined in the context node + * + * @param context XPath context + * @param op_node_test Reference to the node test operation + * in the parsed expression + * @param op_next Reference to the next step in the location path, + * in the parsed expression + * @param op_predicate Reference to the first predicate in the + * parsed expression + * @return Number of nodes added to the stack + */ + int axiom_xpath_namespace_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate); + + /** + * Iterate through self node (Only one node) + * + * @param context XPath context + * @param op_node_test Reference to the node test operation + * in the parsed expression + * @param op_next Reference to the next step in the location path, + * in the parsed expression + * @param op_predicate Reference to the first predicate in the + * parsed expression + * @return Number of nodes added to the stack + */ + int axiom_xpath_self_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate); + + /** + * Iterate through descendents and context node + * + * @param context XPath context + * @param op_node_test Reference to the node test operation + * in the parsed expression + * @param op_next Reference to the next step in the location path, + * in the parsed expression + * @param op_predicate Reference to the first predicate in the + * parsed expression + * @return Number of nodes added to the stack + */ + int axiom_xpath_descendant_self_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate); + + /** + * Iterate through ancestors and context node + * + * @param context XPath context + * @param op_node_test Reference to the node test operation + * in the parsed expression + * @param op_next Reference to the next step in the location path, + * in the parsed expression + * @param op_predicate Reference to the first predicate in the + * parsed expression + * @return Number of nodes added to the stack + */ + int axiom_xpath_ancestor_self_iterator( + axiom_xpath_context_t *context, + int op_node_test, + int op_next, + int op_predicate); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/axiom/src/xpath/xpath_internals_parser.c b/axiom/src/xpath/xpath_internals_parser.c new file mode 100755 index 0000000..a1ce79a --- /dev/null +++ b/axiom/src/xpath/xpath_internals_parser.c @@ -0,0 +1,1245 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "xpath_internals.h" +#include "xpath_internals_parser.h" +#include + +/* Compile an XPath expression */ +int +axiom_xpath_compile( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + if(!expr || !expr->expr_str) + { +#ifdef AXIOM_XPATH_DEBUG + printf("Expression in NULL.\n"); +#endif + + return AXIS2_FAILURE; + } + + expr->expr_len = (int)axutil_strlen(expr->expr_str); + + expr->operations = axutil_array_list_create(env, 0); + + expr->expr_ptr = 0; + + expr->start = axiom_xpath_compile_orexpr(env, expr); + + if(expr->start == AXIOM_XPATH_PARSE_ERROR) + { + axutil_array_list_free(expr->operations, env); + + return AXIOM_XPATH_PARSE_ERROR; + } + else + { +#ifdef AXIOM_XPATH_DEBUG + printf("Expression successfully parsed\n"); +#endif + + return AXIOM_XPATH_PARSE_SUCCESS; + } +} + +/* Parse Or Expression */ +int +axiom_xpath_compile_orexpr( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + int op1, op2; + + if(!AXIOM_XPATH_HAS_MORE) + { + return AXIOM_XPATH_PARSE_END; + } + + op1 = axiom_xpath_compile_andexpr(env, expr); + + if(op1 == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: AndEpxr expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + AXIOM_XPATH_SKIP_WHITESPACES; + + while(AXIOM_XPATH_CURRENT == 'o' && AXIOM_XPATH_NEXT(1) == 'r') + { + AXIOM_XPATH_READ(2); + AXIOM_XPATH_SKIP_WHITESPACES; + + op2 = axiom_xpath_compile_andexpr(env, expr); + + if(op2 == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: AndEpxr expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + op1 = AXIOM_XPATH_PUSH(AXIOM_XPATH_OPERATION_OR_EXPR, op1, op2); + + AXIOM_XPATH_SKIP_WHITESPACES; + } + + return op1; +} + +/* Parse And Expression */ +int +axiom_xpath_compile_andexpr( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + int op1, op2; + + if(!AXIOM_XPATH_HAS_MORE) + { + return AXIOM_XPATH_PARSE_END; + } + + op1 = axiom_xpath_compile_equalexpr(env, expr); + + if(op1 == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: EqualityExpr expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + AXIOM_XPATH_SKIP_WHITESPACES; + + while(AXIOM_XPATH_CURRENT == 'a' && AXIOM_XPATH_NEXT(1) == 'n' && AXIOM_XPATH_NEXT(1) == 'd') + { + AXIOM_XPATH_READ(2); + AXIOM_XPATH_SKIP_WHITESPACES; + + op2 = axiom_xpath_compile_equalexpr(env, expr); + + if(op2 == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: EqualityExpr expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + op1 = AXIOM_XPATH_PUSH(AXIOM_XPATH_OPERATION_AND_EXPR, op1, op2); + + AXIOM_XPATH_SKIP_WHITESPACES; + } + + return op1; +} + +/* Parse Equality Expression */ +int +axiom_xpath_compile_equalexpr( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + int op1, op2; + + if(!AXIOM_XPATH_HAS_MORE) + { + return AXIOM_XPATH_PARSE_END; + } + + op1 = axiom_xpath_compile_union(env, expr); + + if(op1 == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: UnionExpr expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + while(AXIOM_XPATH_CURRENT == '=') + { + AXIOM_XPATH_SKIP_WHITESPACES; + AXIOM_XPATH_READ(1); + AXIOM_XPATH_SKIP_WHITESPACES; + + op2 = axiom_xpath_compile_union(env, expr); + + if(op2 == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: UnionExpr expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + op1 = AXIOM_XPATH_PUSH(AXIOM_XPATH_OPERATION_EQUAL_EXPR, op1, op2); + + AXIOM_XPATH_SKIP_WHITESPACES; + } + + return op1; +} + +/* Parse Union */ +int +axiom_xpath_compile_union( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + int op1, op2; + + if(!AXIOM_XPATH_HAS_MORE) + { + return AXIOM_XPATH_PARSE_END; + } + + op1 = axiom_xpath_compile_path_expression(env, expr); + + if(op1 == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: PathExpr expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + AXIOM_XPATH_SKIP_WHITESPACES; + + if(AXIOM_XPATH_CURRENT == '|') + { + AXIOM_XPATH_READ(1); + AXIOM_XPATH_SKIP_WHITESPACES; + op2 = axiom_xpath_compile_union(env, expr); + + if(op2 == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: UnionExpr expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + return AXIOM_XPATH_PUSH(AXIOM_XPATH_OPERATION_UNION, op1, op2); + } + + /* Just a location path */ + return op1; +} + +/* Compile Filter expression */ +int +axiom_xpath_compile_filter( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + int op = AXIOM_XPATH_PARSE_END; + + if(AXIOM_XPATH_CURRENT == '(') + { + AXIOM_XPATH_READ(1); + op = axiom_xpath_compile_orexpr(env, expr); + AXIOM_XPATH_SKIP_WHITESPACES; + if(AXIOM_XPATH_CURRENT == ')') + { + AXIOM_XPATH_READ(1); + return op; + } + else + { + return AXIOM_XPATH_PARSE_ERROR; + } + } + else if(AXIOM_XPATH_CURRENT == '\'' || AXIOM_XPATH_CURRENT == '\"') + { + return AXIOM_XPATH_PUSH_PAR(AXIOM_XPATH_OPERATION_LITERAL, axiom_xpath_compile_literal(env, + expr), NULL, AXIOM_XPATH_PARSE_END); + } + else if(isdigit(AXIOM_XPATH_CURRENT) || (AXIOM_XPATH_CURRENT == '.' && isdigit( + AXIOM_XPATH_NEXT(1)))) + { + return AXIOM_XPATH_PUSH_PAR(AXIOM_XPATH_OPERATION_NUMBER, axiom_xpath_compile_number(env, + expr), NULL, AXIOM_XPATH_PARSE_END); + } + else if(AXIOM_XPATH_CURRENT == '$') + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: Variables are not supported, yet - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + } + else + { + return axiom_xpath_compile_function_call(env, expr); + } + +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: Invalid Filter expression - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + /* TODO: functions and variables */ +} + +/* Parse Path expression (not a location path) */ +int +axiom_xpath_path_compile_path_expression_filter( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + int op_filter, op_next; + + op_filter = axiom_xpath_compile_filter(env, expr); + + if(op_filter == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: FilterExpr expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + AXIOM_XPATH_SKIP_WHITESPACES; + + if(AXIOM_XPATH_NEXT(0) == '/' && AXIOM_XPATH_NEXT(1) == '/') + { + AXIOM_XPATH_READ(2); + + op_next = axiom_xpath_compile_relative_location(env, expr); + + if(op_next == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: RelativeLocation expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + op_next = AXIOM_XPATH_WRAP_SELF_DESCENDANT(op_next); + } + else if(AXIOM_XPATH_NEXT(0) == '/') + { + AXIOM_XPATH_READ(1); + + op_next = axiom_xpath_compile_relative_location(env, expr); + + if(op_next == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: RelativeLocation expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + } + else + { + op_next = AXIOM_XPATH_PARSE_END; + } + + return AXIOM_XPATH_PUSH(AXIOM_XPATH_OPERATION_PATH_EXPRESSION, op_filter, op_next); +} + +/* Parse Path expression */ +int +axiom_xpath_compile_path_expression( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + int temp_ptr = expr->expr_ptr; + axis2_char_t *name; + axis2_char_t *node_types[] = { "comment", "node", "processing-instruction", "text" }; + axis2_char_t filter_start[] = { '$', '\'', '\"', '(' }; + int i; + + /* if | FilterExpr + | FilterExpr '/' RelativeLocationPath + | FilterExpr '//' RelativeLocationPath */ + for(i = 0; i < 4; i++) + { + if(AXIOM_XPATH_CURRENT == filter_start[i]) + { + return axiom_xpath_path_compile_path_expression_filter(env, expr); + } + } + + if(isdigit(AXIOM_XPATH_CURRENT) || (AXIOM_XPATH_CURRENT == '.' && isdigit(AXIOM_XPATH_NEXT(1)))) + { + return axiom_xpath_path_compile_path_expression_filter(env, expr); + } + + /* Funciton calls */ + name = axiom_xpath_compile_ncname(env, expr); + AXIOM_XPATH_SKIP_WHITESPACES; + + if(name != NULL && AXIOM_XPATH_CURRENT == '(') + { + expr->expr_ptr = temp_ptr; + for(i = 0; i < 4; i++) + { + /* If node type */ + if(axutil_strcmp(name, node_types[i]) == 0) + { + return axiom_xpath_compile_location_path(env, expr); + } + } + + return axiom_xpath_path_compile_path_expression_filter(env, expr); + } + + expr->expr_ptr = temp_ptr; + + return axiom_xpath_compile_location_path(env, expr); +} + +/* Parses Location Path */ +int +axiom_xpath_compile_location_path( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + int op1; + axiom_xpath_operation_type_t opr; + + if(!AXIOM_XPATH_HAS_MORE) + { + return AXIOM_XPATH_PARSE_END; + } + + if(AXIOM_XPATH_CURRENT == '/') + { + /* Descendent */ + if(AXIOM_XPATH_NEXT(1) == '/') + { + opr = AXIOM_XPATH_OPERATION_CONTEXT_NODE; + AXIOM_XPATH_READ(2); + AXIOM_XPATH_SKIP_WHITESPACES; + + op1 = axiom_xpath_compile_relative_location(env, expr); + + if(op1 == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: RelativeLocation expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + op1 = AXIOM_XPATH_WRAP_SELF_DESCENDANT(op1); + } + else + { + opr = AXIOM_XPATH_OPERATION_ROOT_NODE; + AXIOM_XPATH_READ(1); + + op1 = axiom_xpath_compile_relative_location(env, expr); + + if(op1 == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: RelativeLocation expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + } + } + else + { + opr = AXIOM_XPATH_OPERATION_CONTEXT_NODE; + + op1 = axiom_xpath_compile_relative_location(env, expr); + + if(op1 == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: RelativeLocation expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + } + + if(op1 == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: RelativeLocation expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + return AXIOM_XPATH_PUSH(opr, op1, AXIOM_XPATH_PARSE_END); +} + +/* Parses Relative Location Path */ +int +axiom_xpath_compile_relative_location( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + int op_step, op_next; + + if(!AXIOM_XPATH_HAS_MORE) + { + return AXIOM_XPATH_PARSE_END; + } + + op_step = axiom_xpath_compile_step(env, expr); + op_next = AXIOM_XPATH_PARSE_END; /* Will change if there are more steps */ + + if(op_step == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: Step expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + AXIOM_XPATH_SKIP_WHITESPACES; + + if(AXIOM_XPATH_NEXT(0) == '/' && AXIOM_XPATH_NEXT(1) == '/') + { + AXIOM_XPATH_READ(2); + + op_next = axiom_xpath_compile_relative_location(env, expr); + + if(op_next == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: RelativeLocation expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + op_next = AXIOM_XPATH_WRAP_SELF_DESCENDANT(op_next); + } + else if(AXIOM_XPATH_NEXT(0) == '/') + { + AXIOM_XPATH_READ(1); + + op_next = axiom_xpath_compile_relative_location(env, expr); + + if(op_next == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: RelativeLocation expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + } + + /* End of the location path */ + if(op_next == AXIOM_XPATH_PARSE_END) + { + op_next = AXIOM_XPATH_PUSH(AXIOM_XPATH_OPERATION_RESULT, AXIOM_XPATH_PARSE_END, + AXIOM_XPATH_PARSE_END); + } + + return AXIOM_XPATH_PUSH(AXIOM_XPATH_OPERATION_STEP, op_step, op_next); +} + +/* Parses Step */ +int +axiom_xpath_compile_step( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + int op_predicate = AXIOM_XPATH_PARSE_END; + axiom_xpath_node_test_t *node_test; + int temp_ptr; + axis2_char_t *name = NULL; + axiom_xpath_axis_t axis = AXIOM_XPATH_AXIS_NONE; + + AXIOM_XPATH_SKIP_WHITESPACES; + + /* . and .. */ + if(AXIOM_XPATH_CURRENT == '.') + { + if(AXIOM_XPATH_NEXT(1) == '.') + { + AXIOM_XPATH_READ(2); + axis = AXIOM_XPATH_AXIS_PARENT; + } + else + { + AXIOM_XPATH_READ(1); + axis = AXIOM_XPATH_AXIS_SELF; + } + + return AXIOM_XPATH_PUSH_PAR(AXIOM_XPATH_OPERATION_NODE_TEST, + axiom_xpath_create_node_test_node(env), axiom_xpath_create_axis(env, axis), + op_predicate); + } + else if(AXIOM_XPATH_CURRENT == '@') + { + axis = AXIOM_XPATH_AXIS_ATTRIBUTE; + + AXIOM_XPATH_READ(1); + AXIOM_XPATH_SKIP_WHITESPACES; + } + else + { + temp_ptr = expr->expr_ptr; + + name = axiom_xpath_compile_ncname(env, expr); + + if(name) + { + AXIOM_XPATH_SKIP_WHITESPACES; + + /* An axis */ + if(AXIOM_XPATH_CURRENT == ':' && AXIOM_XPATH_NEXT(1) == ':') + { + axis = axiom_xpath_get_axis(env, name); + + if(axis == AXIOM_XPATH_AXIS_NONE) + { +#ifdef AXIOM_XPATH_DEBUG + printf("Parse error: Invalid axis - %s\n", name); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + AXIOM_XPATH_READ(2); + AXIOM_XPATH_SKIP_WHITESPACES; + } + else + { + axis = AXIOM_XPATH_AXIS_CHILD; + + expr->expr_ptr = temp_ptr; + } + } + else + { + axis = AXIOM_XPATH_AXIS_CHILD; + + expr->expr_ptr = temp_ptr; + } + } + + node_test = axiom_xpath_compile_node_test(env, expr); + + if(!node_test) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: NodeTest expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + op_predicate = axiom_xpath_compile_predicate(env, expr); + + if(op_predicate == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: Predicate expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + return AXIOM_XPATH_PUSH_PAR(AXIOM_XPATH_OPERATION_NODE_TEST, node_test, + axiom_xpath_create_axis(env, axis), op_predicate); +} + +axiom_xpath_node_test_t* +axiom_xpath_compile_node_test( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + axis2_char_t* name; + axiom_xpath_node_test_t *node_test; + + node_test = AXIS2_MALLOC(env->allocator, sizeof(axiom_xpath_node_test_t)); + node_test->type = AXIOM_XPATH_NODE_TEST_NONE; + node_test->prefix = NULL; + node_test->name = NULL; + node_test->lit = NULL; + + if(AXIOM_XPATH_CURRENT == '*') + { + AXIOM_XPATH_READ(1); + + node_test->type = AXIOM_XPATH_NODE_TEST_ALL; + + return node_test; + } + + name = axiom_xpath_compile_ncname(env, expr); + + if(!name) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: NCName expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + AXIS2_FREE(env->allocator, node_test); + + return NULL; + } + + /* Node type */ + + if(AXIOM_XPATH_CURRENT == '(') + { + AXIOM_XPATH_READ(1); + + if(axutil_strcmp(name, "comment") == 0) + { + node_test->type = AXIOM_XPATH_NODE_TYPE_COMMENT; + } + if(axutil_strcmp(name, "node") == 0) + { + node_test->type = AXIOM_XPATH_NODE_TYPE_NODE; + } + if(axutil_strcmp(name, "processing-instruction") == 0) + { + node_test->type = AXIOM_XPATH_NODE_TYPE_PI; + + node_test->lit = axiom_xpath_compile_literal(env, expr); + } + if(axutil_strcmp(name, "text") == 0) + { + node_test->type = AXIOM_XPATH_NODE_TYPE_TEXT; + } + + AXIOM_XPATH_SKIP_WHITESPACES; + + if(node_test->type == AXIOM_XPATH_NODE_TEST_NONE || AXIOM_XPATH_CURRENT != ')') + { +#ifdef AXIOM_XPATH_DEBUG + printf("Parse error: Invalid node type - %s\n", name); +#endif + + AXIS2_FREE(env->allocator, node_test); + + return NULL; + } + + AXIOM_XPATH_READ(1); + } + else + { + node_test->type = AXIOM_XPATH_NODE_TEST_STANDARD; + + if(AXIOM_XPATH_CURRENT == ':') + { + AXIOM_XPATH_READ(1); + + node_test->prefix = name; + + if(AXIOM_XPATH_CURRENT == '*') + { + AXIOM_XPATH_READ(1); + + node_test->type = AXIOM_XPATH_NODE_TEST_ALL; + + return node_test; + } + + node_test->name = axiom_xpath_compile_ncname(env, expr); + + if(!node_test->name) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: NCName expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + AXIS2_FREE(env->allocator, node_test); + + return NULL; + } + } + else + { + node_test->name = name; + } + } + + return node_test; +} + +int +axiom_xpath_compile_function_call( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + axis2_char_t *name; + int op1 = AXIOM_XPATH_PARSE_END; + + name = axiom_xpath_compile_ncname(env, expr); + + if(!name) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: NCName expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + if(AXIOM_XPATH_CURRENT != '(') + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: '(' expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + AXIOM_XPATH_READ(1); + + AXIOM_XPATH_SKIP_WHITESPACES; + + if(AXIOM_XPATH_CURRENT != ')') + { + op1 = axiom_xpath_compile_argument(env, expr); + } + + if(AXIOM_XPATH_CURRENT != ')') + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: ')' expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + AXIOM_XPATH_READ(1); + + return AXIOM_XPATH_PUSH_PAR(AXIOM_XPATH_OPERATION_FUNCTION_CALL, name, NULL, op1); +} + +int +axiom_xpath_compile_argument( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + int op1 = AXIOM_XPATH_PARSE_END; + int op2 = AXIOM_XPATH_PARSE_END; + + op1 = axiom_xpath_compile_orexpr(env, expr); + + AXIOM_XPATH_SKIP_WHITESPACES; + + if(AXIOM_XPATH_CURRENT == ',') + { + op2 = axiom_xpath_compile_argument(env, expr); + } + + return AXIOM_XPATH_PUSH(AXIOM_XPATH_OPERATION_ARGUMENT, op1, op2); +} + +axiom_xpath_node_test_t* +axiom_xpath_create_node_test_all( + const axutil_env_t *env) +{ + axiom_xpath_node_test_t *node_test; + + node_test = AXIS2_MALLOC(env->allocator, sizeof(axiom_xpath_node_test_t)); + node_test->type = AXIOM_XPATH_NODE_TEST_ALL; + node_test->prefix = NULL; + node_test->name = NULL; + node_test->lit = NULL; + + return node_test; +} + +axiom_xpath_node_test_t* +axiom_xpath_create_node_test_node( + const axutil_env_t *env) +{ + axiom_xpath_node_test_t *node_test; + + node_test = AXIS2_MALLOC(env->allocator, sizeof(axiom_xpath_node_test_t)); + node_test->type = AXIOM_XPATH_NODE_TYPE_NODE; + node_test->prefix = NULL; + node_test->name = NULL; + node_test->lit = NULL; + + return node_test; +} + +double* +axiom_xpath_compile_number( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + double *ret = AXIS2_MALLOC(env->allocator, sizeof(double)); + double res = 0, dec = 0.1; + axis2_bool_t dot = AXIS2_FALSE; + + *ret = 0; + + while(1) + { + if(isdigit(AXIOM_XPATH_CURRENT)) + { + if(!dot) + { + res = res * 10 + (AXIOM_XPATH_CURRENT - '0'); + } + else + { + res += dec * (AXIOM_XPATH_CURRENT - '0'); + dec /= 10; + } + } + else if(AXIOM_XPATH_CURRENT == '.') + { + if(dot) + { + return ret; + } + else + { + dot = AXIS2_TRUE; + dec = 0.1; + } + } + else + { + break; + } + + AXIOM_XPATH_READ(1); + } + + *ret = res; + return ret; +} + +axis2_char_t* +axiom_xpath_compile_literal( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + axis2_char_t lit[255]; + int i = 0; + axis2_char_t del; + + if(AXIOM_XPATH_CURRENT == '\"') + { + del = '\"'; + } + else if(AXIOM_XPATH_CURRENT == '\'') + { + del = '\''; + } + else + return NULL; + + AXIOM_XPATH_READ(1); + + while(AXIOM_XPATH_HAS_MORE && AXIOM_XPATH_CURRENT != del) + { + lit[i] = AXIOM_XPATH_CURRENT; + AXIOM_XPATH_READ(1); + ++i; + } + + if(AXIOM_XPATH_HAS_MORE) + { + AXIOM_XPATH_READ(1); + } + + lit[i] = '\0'; + + return axutil_strdup(env, lit); + +} + +/* Get axis for name */ +axiom_xpath_axis_t +axiom_xpath_get_axis( + const axutil_env_t *env, + axis2_char_t* name) +{ + if(axutil_strcmp(name, "child") == 0) + { + return AXIOM_XPATH_AXIS_CHILD; + } + else if(axutil_strcmp(name, "descendant") == 0) + { + return AXIOM_XPATH_AXIS_DESCENDANT; + } + else if(axutil_strcmp(name, "parent") == 0) + { + return AXIOM_XPATH_AXIS_PARENT; + } + else if(axutil_strcmp(name, "ancestor") == 0) + { + return AXIOM_XPATH_AXIS_ANCESTOR; + } + else if(axutil_strcmp(name, "following-sibling") == 0) + { + return AXIOM_XPATH_AXIS_FOLLOWING_SIBLING; + } + else if(axutil_strcmp(name, "preceding-sibling") == 0) + { + return AXIOM_XPATH_AXIS_PRECEDING_SIBLING; + } + else if(axutil_strcmp(name, "following") == 0) + { + return AXIOM_XPATH_AXIS_FOLLOWING; + } + else if(axutil_strcmp(name, "preceding") == 0) + { + return AXIOM_XPATH_AXIS_PRECEDING; + } + else if(axutil_strcmp(name, "attribute") == 0) + { + return AXIOM_XPATH_AXIS_ATTRIBUTE; + } + else if(axutil_strcmp(name, "namespace") == 0) + { + return AXIOM_XPATH_AXIS_NAMESPACE; + } + else if(axutil_strcmp(name, "self") == 0) + { + return AXIOM_XPATH_AXIS_SELF; + } + else if(axutil_strcmp(name, "descendant-or-self") == 0) + { + return AXIOM_XPATH_AXIS_DESCENDANT_OR_SELF; + } + else if(axutil_strcmp(name, "ancestor-or-self") == 0) + { + return AXIOM_XPATH_AXIS_ANCESTOR_OR_SELF; + } + else + { +#ifdef AXIOM_XPATH_DEBUG + printf("Unidentified axis name.\n"); +#endif + + return AXIOM_XPATH_AXIS_NONE; + } +} + +/* Parse Predicate */ +int +axiom_xpath_compile_predicate( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + int op1, op_next_predicate; + + AXIOM_XPATH_SKIP_WHITESPACES; + + if(!AXIOM_XPATH_HAS_MORE || AXIOM_XPATH_CURRENT != '[') + { + return AXIOM_XPATH_PARSE_END; + } + + AXIOM_XPATH_READ(1); + AXIOM_XPATH_SKIP_WHITESPACES; + + /* A PredicateExpr is evaluated by evaluating the Expr and converting the result to a boolean. + If the result is a number, the result will be converted to true if the number is equal to the + context position and will be converted to false otherwise; if the result is not a number, + then the result will be converted as if by a call to the boolean function. */ + + op1 = axiom_xpath_compile_orexpr(env, expr); + + if(op1 == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: EqualExpr expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + AXIOM_XPATH_SKIP_WHITESPACES; + + if(AXIOM_XPATH_CURRENT != ']') + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: ] expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + AXIOM_XPATH_READ(1); + + op_next_predicate = axiom_xpath_compile_predicate(env, expr); + + if(op_next_predicate == AXIOM_XPATH_PARSE_ERROR) + { +#ifdef AXIOM_XPATH_DEBUG + printf( + "Parse error: Predicate expected - %s\n", + expr->expr_str + expr->expr_ptr); +#endif + + return AXIOM_XPATH_PARSE_ERROR; + } + + return AXIOM_XPATH_PUSH(AXIOM_XPATH_OPERATION_PREDICATE, op1, op_next_predicate); +} + +/* Parse Node Test */ +axis2_char_t * +axiom_xpath_compile_ncname( + const axutil_env_t *env, + axiom_xpath_expression_t* expr) +{ + axis2_char_t name[255]; + int i = 0; + + if(!isalpha(AXIOM_XPATH_CURRENT) && AXIOM_XPATH_CURRENT != '_') + { + return NULL; + } + + /* TODO: Add CombiningChar and Extender + * Link http://www.w3.org/TR/REC-xml/#NT-NameChar */ + while(AXIOM_XPATH_HAS_MORE && (isalnum(AXIOM_XPATH_CURRENT) || AXIOM_XPATH_CURRENT == '_' + || AXIOM_XPATH_CURRENT == '.' || AXIOM_XPATH_CURRENT == '-')) + { + name[i] = AXIOM_XPATH_CURRENT; + AXIOM_XPATH_READ(1); + ++i; + } + + name[i] = '\0'; + + return axutil_strdup(env, name); +} + +/* Supporting functions */ +int +axiom_xpath_add_operation( + const axutil_env_t *env, + axiom_xpath_expression_t* expr, + axiom_xpath_operation_type_t op_type, + int op1, + int op2, + void *par1, + void *par2) +{ + axiom_xpath_operation_t *op; + + op = AXIS2_MALLOC(env->allocator, sizeof(axiom_xpath_operation_t)); + op->opr = op_type; + op->op1 = op1; + op->op2 = op2; + + op->pos = 0; + + op->par1 = par1; + op->par2 = par2; + + axutil_array_list_add(expr->operations, env, op); + + return axutil_array_list_size(expr->operations, env) - 1; +} + +axiom_xpath_axis_t * +axiom_xpath_create_axis( + const axutil_env_t *env, + axiom_xpath_axis_t axis) +{ + axiom_xpath_axis_t *axis_p = AXIS2_MALLOC(env->allocator, sizeof(axiom_xpath_axis_t)); + + *axis_p = axis; + return axis_p; +} diff --git a/axiom/src/xpath/xpath_internals_parser.h b/axiom/src/xpath/xpath_internals_parser.h new file mode 100755 index 0000000..7d1a2d0 --- /dev/null +++ b/axiom/src/xpath/xpath_internals_parser.h @@ -0,0 +1,421 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_XPATH_INTERNALS_PARSER_H +#define AXIOM_XPATH_INTERNALS_PARSER_H + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_xpath_parser parser + * @ingroup axiom_xpath + * @{ + */ + + + /* Macros */ + + /** Get the current character in the expression */ +#define AXIOM_XPATH_CURRENT (expr->expr_ptr < expr->expr_len ? \ + expr->expr_str[expr->expr_ptr] : -1) + + /** Get a character after the current */ +#define AXIOM_XPATH_NEXT(ind) (expr->expr_ptr + ind < expr->expr_len ? \ + expr->expr_str[expr->expr_ptr + ind] : -1) + + /** Increment the pointer to the expression */ +#define AXIOM_XPATH_READ(n) (expr->expr_ptr += n) + + /** Check if expression has finished parsing */ +#define AXIOM_XPATH_HAS_MORE (expr->expr_ptr < expr->expr_len) + + /** Skip white spaces */ +#define AXIOM_XPATH_SKIP_WHITESPACES \ + { while(AXIOM_XPATH_CURRENT == ' ') \ + AXIOM_XPATH_READ(1); \ + } + + /** Wrape an operation in a self_or_descendent step; used to handle '//' */ +#define AXIOM_XPATH_WRAP_SELF_DESCENDANT(_op2) \ + axiom_xpath_add_operation(env, expr, AXIOM_XPATH_OPERATION_STEP, \ + axiom_xpath_add_operation(env, expr, AXIOM_XPATH_OPERATION_NODE_TEST, \ + AXIOM_XPATH_PARSE_END, AXIOM_XPATH_PARSE_END, \ + axiom_xpath_create_node_test_node(env), \ + axiom_xpath_create_axis(env, AXIOM_XPATH_AXIS_DESCENDANT_OR_SELF)), \ + _op2, NULL, NULL) + + /** Adds an operation */ +#define AXIOM_XPATH_PUSH(_opr, _op1, _op2) axiom_xpath_add_operation( \ + env, expr, _opr, _op1, _op2, NULL, NULL) + + /** Adds an operation with parameters */ +#define AXIOM_XPATH_PUSH_PAR(_opr, _par1, _par2, _op1) axiom_xpath_add_operation( \ + env, expr, _opr, _op1, AXIOM_XPATH_PARSE_END, (void *)_par1, (void *)_par2) + + /* Functions */ + + /** + * Add an operation to the operations array + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @param op_type Type of the operation + * @param op1 First operand + * @param op2 Second operand + * @param par1 First parameter + * @param par2 Second parameter + * @return Index of the operation in the array + */ + int axiom_xpath_add_operation( + const axutil_env_t *env, + axiom_xpath_expression_t* expr, + axiom_xpath_operation_type_t op_type, + int op1, + int op2, + void *par1, + void *par2); + + /** + * Compile a XPath expression + * + * [14] Expr ::= OrExpr + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the main operation in the array + */ + int axiom_xpath_compile( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compile an equals expression + * + * ***Not completed*** + * [23] EqualityExpr ::= UnionExpr '=' UnionExpr + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the operation in the array + */ + int axiom_xpath_compile_equalexpr( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compile an union + * + * [18] UnionExpr ::= PathExpr + * | UnionExpr '|' PathExpr + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the operation in the array + */ + int axiom_xpath_compile_union( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compile a path expression + * + * [19] PathExpr ::= LocationPath + * | FilterExpr + * | FilterExpr '/' RelativeLocationPath + * | FilterExpr '//' RelativeLocationPath + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the operation in the array + */ + int axiom_xpath_compile_path_expression( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compile a path expression with a filter + * + * [19] PathExpr ::= FilterExpr + * | FilterExpr '/' RelativeLocationPath + * | FilterExpr '//' RelativeLocationPath + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the operation in the array + */ + int axiom_xpath_path_compile_path_expression_filter( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compile a filter expression + * + * 20] FilterExpr ::= PrimaryExpr + * | FilterExpr Predicate + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the operation in the array + */ + int axiom_xpath_compile_filter( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compile a location path + * + * [1] LocationPath ::= RelativeLocationPath + * | AbsoluteLocationPath + * [2] AbsoluteLocationPath ::= '/' RelativeLocationPath? + * | AbbreviatedAbsoluteLocationPath + * + * [10] AbbreviatedAbsoluteLocationPath ::= '//' RelativeLocationPath + * [11] AbbreviatedRelativeLocationPath ::= RelativeLocationPath '//' Step + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the operation in the array + */ + int axiom_xpath_compile_location_path( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compile a relative location + * + * [3] RelativeLocationPath ::= Step + * | RelativeLocationPath '/' Step + * | AbbreviatedRelativeLocationPath + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the operation in the array + */ + int axiom_xpath_compile_relative_location( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compile a step + * + * [4] Step ::= AxisSpecifier NodeTest Predicate* + * | AbbreviatedStep + * [5] AxisSpecifier ::= AxisName '::' + * | AbbreviatedAxisSpecifier + * + * [12] AbbreviatedStep ::= '.' | '..' + * [13] AbbreviatedAxisSpecifier ::= '@'? + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the operation in the array + */ + int axiom_xpath_compile_step( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compiles an OrExpr. + * + * [21] OrExpr ::= AndExpr + * | OrExpr 'or' AndExpr + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the operation in the array + */ + int axiom_xpath_compile_orexpr( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compiles an AndExpr. + * + * [22] AndExpr ::= EqualityExpr + * | AndExpr 'and' EqualityExpr + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the operation in the array + */ + int axiom_xpath_compile_andexpr( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + + /** + * Compiles a FunctionCall + * + * [16] FunctionCall ::= FunctionName '(' ( Argument ( ',' Argument )* )? ')' + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the operation in the array + */ + int axiom_xpath_compile_function_call( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compiles an Argument. + * + * [17] Argument ::= Expr + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the operation in the array + */ + int axiom_xpath_compile_argument( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compile a node test + * + * [7] NodeTest ::= NameTest + * | NodeType '(' ')' + * | 'processing-instruction' '(' Literal ')' + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the operation in the array + */ + axiom_xpath_node_test_t* axiom_xpath_compile_node_test( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compile a predicate(s) + * + * [8] Predicate ::= '[' PredicateExpr ']' + * [9] PredicateExpr ::= Expr + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return Index of the operation in the array + */ + int axiom_xpath_compile_predicate( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + + + /** + * Compile a literal + * + * [29] Literal ::= '"' [^"]* '"' + * | "'" [^']* "'" + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return The literal parsed + */ + axis2_char_t* axiom_xpath_compile_literal( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compile a number + * + * [30] Number ::= Digits ('.' Digits?)? + * | '.' Digits + * [31] Digits ::= [0-9]+ + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return The number parsed + */ + double* axiom_xpath_compile_number( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + /** + * Compile a ncname + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @return The ncname parsed + */ + axis2_char_t* axiom_xpath_compile_ncname( + const axutil_env_t *env, + axiom_xpath_expression_t* expr); + + + + /** + * Get the XPath axis by axis name + * + * [6] AxisName ::= 'ancestor' + * | 'ancestor-or-self' + * | 'attribute' + * | 'child' + * | 'descendant' + * | 'descendant-or-self' + * | 'following' + * | 'following-sibling' + * | 'namespace' + * | 'parent' + * | 'preceding' + * | 'preceding-sibling' + * | 'self' + * + * @param env Environment must not be null + * @param name Name of the axis + * @return XPath axis; returns AXIOM_XPATH_AXIS_NONE if invalid name + */ + axiom_xpath_axis_t axiom_xpath_get_axis( + const axutil_env_t *env, + axis2_char_t* name); + + /** + * Create a node test which matches all nodes (*) + * + * @param env Environment must not be null + * @return Node test + */ + axiom_xpath_node_test_t* axiom_xpath_create_node_test_all( + const axutil_env_t *env); + + /** + * Create a node test which matches all nodes (nodes()) + * + * @param env Environment must not be null + * @return Node test + */ + axiom_xpath_node_test_t* axiom_xpath_create_node_test_node( + const axutil_env_t *env); + + /** + * Create a pointer to an axis; allocate memory using the allocator + * + * @param env Environment must not be null + * @param axis XPath axis + * @return Pointer to the axis created + */ + axiom_xpath_axis_t *axiom_xpath_create_axis( + const axutil_env_t *env, + axiom_xpath_axis_t axis); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/axiom/src/xpath/xpath_streaming.c b/axiom/src/xpath/xpath_streaming.c new file mode 100755 index 0000000..0488d5f --- /dev/null +++ b/axiom/src/xpath/xpath_streaming.c @@ -0,0 +1,213 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "xpath_streaming.h" +#include "xpath_internals.h" +#include "xpath_internals_engine.h" + +axiom_xpath_streaming_t +axiom_xpath_streaming_check_operation( + const axutil_env_t *env, + axiom_xpath_expression_t* expr, + int op_p) +{ + axiom_xpath_operation_t *op; + + if(op_p == AXIOM_XPATH_PARSE_END) + { + return AXIOM_XPATH_STREAMING_CONSTANT; + } + + op = AXIOM_XPATH_OPR_EXPR_GET(op_p); + + switch(op->opr) + { + case AXIOM_XPATH_OPERATION_CONTEXT_NODE: + case AXIOM_XPATH_OPERATION_ROOT_NODE: + return axiom_xpath_streaming_combine_dependent(AXIOM_XPATH_CHECK(op->op1), + AXIOM_XPATH_STREAMING_CONSTANT); + + case AXIOM_XPATH_OPERATION_STEP: + return axiom_xpath_streaming_combine_dependent(AXIOM_XPATH_CHECK(op->op1), + AXIOM_XPATH_CHECK(op->op2)); + + case AXIOM_XPATH_OPERATION_RESULT: + return AXIOM_XPATH_STREAMING_CONSTANT; + + case AXIOM_XPATH_OPERATION_UNION: + return axiom_xpath_streaming_combine_independent(AXIOM_XPATH_CHECK(op->op1), + AXIOM_XPATH_CHECK(op->op2)); + + case AXIOM_XPATH_OPERATION_EQUAL_EXPR: + return axiom_xpath_streaming_combine_independent(AXIOM_XPATH_CHECK(op->op1), + AXIOM_XPATH_CHECK(op->op2)); + + case AXIOM_XPATH_OPERATION_LITERAL: + return AXIOM_XPATH_STREAMING_CONSTANT; + + case AXIOM_XPATH_OPERATION_NUMBER: + return AXIOM_XPATH_STREAMING_CONSTANT; + + case AXIOM_XPATH_OPERATION_PATH_EXPRESSION: + return axiom_xpath_streaming_combine_dependent(AXIOM_XPATH_CHECK(op->op1), + AXIOM_XPATH_CHECK(op->op2)); + + case AXIOM_XPATH_OPERATION_NODE_TEST: + return axiom_xpath_streaming_check_node_test(env, expr, op); + + case AXIOM_XPATH_OPERATION_PREDICATE: + return axiom_xpath_streaming_check_predicate(env, expr, op_p); + + default: +#ifdef AXIOM_XPATH_DEBUG + printf("Unidentified operation.\n"); +#endif + + return AXIOM_XPATH_STREAMING_NOT_SUPPORTED; + } +} + +axiom_xpath_streaming_t +axiom_xpath_streaming_check_predicate( + const axutil_env_t *env, + axiom_xpath_expression_t* expr, + int op_p) +{ + axiom_xpath_operation_t *op; + + if(op_p == AXIOM_XPATH_PARSE_END) + { + return AXIOM_XPATH_STREAMING_CONSTANT; + } + + op = AXIOM_XPATH_OPR_EXPR_GET(op_p); + + return axiom_xpath_streaming_combine_dependent(AXIOM_XPATH_CHECK(op->op1), AXIOM_XPATH_CHECK( + op->op2)); +} + +axiom_xpath_streaming_t +axiom_xpath_streaming_check_node_test( + const axutil_env_t *env, + axiom_xpath_expression_t* expr, + axiom_xpath_operation_t *op) +{ + axiom_xpath_axis_t axis = AXIOM_XPATH_AXIS_NONE; + axiom_xpath_streaming_t r; + + if(!op->par2) + { +#ifdef AXIOM_XPATH_DEBUG + printf("axis is NULL in the step operator\n"); +#endif + return AXIOM_XPATH_STREAMING_NOT_SUPPORTED; + } + + axis = *((axiom_xpath_axis_t *)op->par2); + + switch(axis) + { + case AXIOM_XPATH_AXIS_ATTRIBUTE: + case AXIOM_XPATH_AXIS_CHILD: + break; + + default: + return AXIOM_XPATH_STREAMING_NOT_SUPPORTED; + } + + r = axiom_xpath_streaming_check_predicate(env, expr, op->op1); + + if(r != AXIOM_XPATH_STREAMING_ATTRIBUTE && r != AXIOM_XPATH_STREAMING_CONSTANT) + { + return AXIOM_XPATH_STREAMING_NOT_SUPPORTED; + } + + if(axis == AXIOM_XPATH_AXIS_ATTRIBUTE) + { + return AXIOM_XPATH_STREAMING_ATTRIBUTE; + } + else + { + return AXIOM_XPATH_STREAMING_SUPPORTED; + } +} + +axiom_xpath_streaming_t +axiom_xpath_streaming_combine_dependent( + axiom_xpath_streaming_t r1, + axiom_xpath_streaming_t r2) +{ + if(r1 == AXIOM_XPATH_STREAMING_NOT_SUPPORTED || r2 == AXIOM_XPATH_STREAMING_NOT_SUPPORTED) + { + return AXIOM_XPATH_STREAMING_NOT_SUPPORTED; + } + else if(r1 == AXIOM_XPATH_STREAMING_SUPPORTED || r2 == AXIOM_XPATH_STREAMING_SUPPORTED) + { + return AXIOM_XPATH_STREAMING_SUPPORTED; + } + else if(r1 == AXIOM_XPATH_STREAMING_ATTRIBUTE || r2 == AXIOM_XPATH_STREAMING_ATTRIBUTE) + { + return AXIOM_XPATH_STREAMING_ATTRIBUTE; + } + else + { + return AXIOM_XPATH_STREAMING_CONSTANT; + } +} + +axiom_xpath_streaming_t +axiom_xpath_streaming_combine_independent( + axiom_xpath_streaming_t r1, + axiom_xpath_streaming_t r2) +{ + if(r1 == AXIOM_XPATH_STREAMING_NOT_SUPPORTED || r2 == AXIOM_XPATH_STREAMING_NOT_SUPPORTED) + { + return AXIOM_XPATH_STREAMING_NOT_SUPPORTED; + } + else if(r1 == AXIOM_XPATH_STREAMING_CONSTANT || r2 == AXIOM_XPATH_STREAMING_CONSTANT) + { + if(r1 == AXIOM_XPATH_STREAMING_SUPPORTED || r2 == AXIOM_XPATH_STREAMING_SUPPORTED) + { + return AXIOM_XPATH_STREAMING_SUPPORTED; + } + else if(r1 == AXIOM_XPATH_STREAMING_ATTRIBUTE || r2 == AXIOM_XPATH_STREAMING_ATTRIBUTE) + { + return AXIOM_XPATH_STREAMING_ATTRIBUTE; + } + else + { + return AXIOM_XPATH_STREAMING_CONSTANT; + } + } + else if(r1 == AXIOM_XPATH_STREAMING_ATTRIBUTE || r2 == AXIOM_XPATH_STREAMING_ATTRIBUTE) + { + if(r1 == AXIOM_XPATH_STREAMING_SUPPORTED || r2 == AXIOM_XPATH_STREAMING_SUPPORTED) + { + return AXIOM_XPATH_STREAMING_SUPPORTED; + } + else + { + return AXIOM_XPATH_STREAMING_ATTRIBUTE; + } + } + else + { + return AXIOM_XPATH_STREAMING_NOT_SUPPORTED; + } +} + diff --git a/axiom/src/xpath/xpath_streaming.h b/axiom/src/xpath/xpath_streaming.h new file mode 100755 index 0000000..63b1ee5 --- /dev/null +++ b/axiom/src/xpath/xpath_streaming.h @@ -0,0 +1,126 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIOM_XPATH_STREAMING_H +#define AXIOM_XPATH_STREAMING_H + +#include "xpath_internals.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axiom_xpath_streaming streaming + * @ingroup axiom_xpath + * @{ + */ + + + /** + * XPath streaming support + */ + typedef enum axiom_xpath_streaming_t + { + AXIOM_XPATH_STREAMING_NOT_SUPPORTED = 0, + AXIOM_XPATH_STREAMING_SUPPORTED, + AXIOM_XPATH_STREAMING_CONSTANT, + AXIOM_XPATH_STREAMING_ATTRIBUTE + } axiom_xpath_streaming_t; + + /** Check whether the given expression is supported on streaming XML */ +#define AXIOM_XPATH_CHECK(op) axiom_xpath_streaming_check_operation(env, expr, op) + + /** Get an operation from the list of operations */ +#define AXIOM_XPATH_OPR_EXPR_GET(ind) (axiom_xpath_operation_t *) \ + axutil_array_list_get(expr->operations, env, ind) + + /** + * Checks whether the given expression is supported on streaming XML + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @param op_p Index of the operation in the list of operations + * @return Whether the given operation can be evaluated on streaming XML + */ + axiom_xpath_streaming_t axiom_xpath_streaming_check_operation( + const axutil_env_t *env, + axiom_xpath_expression_t* expr, + int op_p); + + /** + * Checks whether the predicate is supported on streaming XML. + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @param op_p Index of the operation in the list of operations + * @return Whether the given operation can be evaluated on streaming XML + */ + axiom_xpath_streaming_t axiom_xpath_streaming_check_predicate( + const axutil_env_t *env, + axiom_xpath_expression_t* expr, + int op_p); + + /** + * Checks whether the predicate is supported on streaming XML. + * + * @param env Environment must not be null + * @param expr A pointer to the XPath expression + * @param op Index of the operation in the list of operations + * @return Whether the given operation can be evaluated on streaming XML + */ + axiom_xpath_streaming_t axiom_xpath_streaming_check_node_test( + const axutil_env_t *env, + axiom_xpath_expression_t* expr, + axiom_xpath_operation_t* op); + + + /** + * Checks whether the two operations can be evaluated on streaming XML + * sequencially (one after the other), where the result of the first + * operation is the context of the next + * + * @param r1 Type of first operation + * @param r2 Type of second operation + * @return Whether the given operations can be evaluated on streaming XML + */ + axiom_xpath_streaming_t axiom_xpath_streaming_combine_dependent( + axiom_xpath_streaming_t r1, + axiom_xpath_streaming_t r2); + + + /** + * Checks whether the two operations can be evaluated on streaming XML + * simultaneousy + * + * @param r1 Type of first operation + * @param r2 Type of second operation + * @return Whether the given operations can be evaluated on streaming XML + */ + axiom_xpath_streaming_t axiom_xpath_streaming_combine_independent( + axiom_xpath_streaming_t r1, + axiom_xpath_streaming_t r2); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/axiom/test/Makefile.am b/axiom/test/Makefile.am new file mode 100644 index 0000000..5a5b493 --- /dev/null +++ b/axiom/test/Makefile.am @@ -0,0 +1,3 @@ +TESTS = +SUBDIRS = om soap util xpath +EXTRA_DIST = resources diff --git a/axiom/test/om/Makefile.am b/axiom/test/om/Makefile.am new file mode 100644 index 0000000..7736221 --- /dev/null +++ b/axiom/test/om/Makefile.am @@ -0,0 +1,13 @@ +TESTS = +noinst_PROGRAMS = test_om +check_PROGRAMS = test_om +SUBDIRS = +AM_CFLAGS = -g -O2 -pthread +test_om_SOURCES = test_om.c + +test_om_LDADD = ../../../util/src/libaxutil.la \ + $(top_builddir)/src/om/libaxis2_axiom.la + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/parser \ + -I ../../../util/include diff --git a/axiom/test/om/test_om.c b/axiom/test/om/test_om.c new file mode 100644 index 0000000..c0d41b9 --- /dev/null +++ b/axiom/test/om/test_om.c @@ -0,0 +1,402 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** + Define the environment related variables globally so that they are available + for both functions +*/ + +axutil_allocator_t *allocator = NULL; +axutil_env_t *environment = NULL; +axutil_stream_t *stream = NULL; +axutil_error_t *error = NULL; +axutil_log_t *axis_log = NULL; +FILE *f = NULL; + +/** a method that demonstrate creating a om model using an xml file */ + +int AXIS2_CALL +read_input( + char *buffer, + int size, + void *ctx) +{ + int len = 0; + char *pos = NULL; + len = fread(buffer, sizeof(char), size, f); + if (buffer) + pos = strstr(buffer, "---"); + if (pos) + { + len = pos - buffer; + *pos = '\0'; + } + return len; +} + +int +test_om_build( + const char *filename) +{ + axiom_element_t *ele1 = NULL, + *ele2 = NULL; + axiom_stax_builder_t *builder = NULL; + axiom_text_t *text = NULL; + axiom_document_t *document = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL; + axiom_node_t *node3 = NULL; + axiom_output_t *om_output = NULL; + axiom_namespace_t *ns = NULL; + axiom_xml_reader_t *reader = NULL; + axiom_xml_writer_t *writer = NULL; + + char *buffer = NULL; + axutil_hash_t* hash = NULL; + + printf("\nstart test_om_build\n"); + + f = fopen(filename, "r"); + if (!f) + return -1; + + /** create pull parser */ + reader = + axiom_xml_reader_create_for_io(environment, read_input, NULL, NULL, + NULL); + + if (!reader) + { + printf("ERROR CREATING PULLPARSER"); + return -1; + } + + /** create axiom_stax_builder by parsing pull_parser struct */ + + builder = axiom_stax_builder_create(environment, reader); + + if (!builder) + { + printf("ERROR CREATING PULL PARSER"); + return -1; + } + + /** + create an om document + document is the container of om model created using builder + */ + + document = axiom_stax_builder_get_document(builder, environment); + + /** + get root element , building starts hear + */ + if (!document) + return -1; + + node1 = axiom_document_get_root_element(document, environment); + if (!node1) + { + printf(" root element null "); + axiom_stax_builder_free(builder, environment); + return -1; + } + if (node1) + { + + /** print root node information */ + + ele1 = axiom_node_get_data_element(node1, environment); + if (ele1) + { + printf("root localname %s\n", + axiom_element_get_localname(ele1, environment)); + + hash = axiom_element_get_all_attributes(ele1,environment); + if(hash) + { + axutil_hash_index_t *hi; + const void *key= NULL; + void *val = NULL; + for (hi = axutil_hash_first(hash,environment); hi; hi = axutil_hash_next(environment, hi)) + { + axutil_hash_this(hi, &key, NULL,&val); + if(val) + { + printf(" Attribute name: %s", + axiom_attribute_get_localname((axiom_attribute_t *)val,environment)); + printf(" value: %s\n", + axiom_attribute_get_value((axiom_attribute_t *)val,environment)); + } + } + } + } + + ns = axiom_element_get_namespace(ele1, environment, node1); + + if (ns) + { + printf("root ns prefix %s\n", + axiom_namespace_get_prefix(ns, environment)); + printf("root ns uri %s\n", + axiom_namespace_get_uri(ns, environment)); + printf("============================================="); + + } + else + printf("============================================="); + + } + + /** build the document continuously untill all the xml file is built in to a om model */ + + node2 = axiom_document_build_next(document, environment); + do + { + + if (!node2) + break; + + switch (axiom_node_get_node_type(node2, environment)) + { + case AXIOM_ELEMENT: + ele2 = + (axiom_element_t *) axiom_node_get_data_element(node2, + environment); + printf("============================================="); + if (ele2 && axiom_element_get_localname(ele2, environment)) + { + printf("\n localname %s\n", + axiom_element_get_localname(ele2, environment)); + hash = axiom_element_get_all_attributes(ele2,environment); + if(hash) + { + axutil_hash_index_t *hi; + const void *key= NULL; + void *val = NULL; + for (hi = axutil_hash_first(hash,environment); hi; hi = axutil_hash_next(environment, hi)) + { + axutil_hash_this(hi, &key, NULL,&val); + if(val) + { + printf(" Attribute name: %s", + axiom_attribute_get_localname((axiom_attribute_t *)val,environment)); + printf(" value: %s\n", + axiom_attribute_get_value((axiom_attribute_t *)val,environment)); + } + } + } + + } + + + + if (!node3) + node3 = node2; + + break; + case AXIOM_TEXT: + + text = + (axiom_text_t *) axiom_node_get_data_element(node2, + environment); + if (text && axiom_text_get_value(text, environment)) + printf("\n text value %s \n", + axiom_text_get_value(text, environment)); + break; + + default: + break; + } + + node2 = axiom_document_build_next(document, environment); + } + while (node2); + printf("END: pull document\n"); + + printf("Serialize pulled document\n"); + + writer = + axiom_xml_writer_create_for_memory(environment, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_output = axiom_output_create(environment, writer); + + axiom_node_serialize_sub_tree(node3, environment, om_output); + + buffer = (axis2_char_t *) axiom_xml_writer_get_xml(writer, environment); + + if (buffer) + printf("Sub Tree = %s\n", buffer); + + axiom_output_free(om_output, environment); + + axiom_stax_builder_free(builder, environment); + +/* if (buffer) */ + +/* AXIS2_FREE(environment->allocator, buffer); */ + printf("\nend test_om_build\n"); + fclose(f); + return 0; +} + +int +test_om_serialize( + ) +{ + + /* + + Axis2/C OM HOWTO + 1748491379 + + +

+ This is vey good book on OM! +

+
+
+ */ + int status; + axiom_element_t *ele1 = NULL, + *ele2 = NULL, + *ele3 = NULL, + *ele4 = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL, + *node3 = NULL, + *node4 = NULL, + *node5 = NULL, + *node6 = NULL; + axiom_data_source_t *data_source = NULL; + axutil_stream_t *stream = NULL; + axiom_attribute_t *attr1 = NULL, + *attr2 = NULL; + axiom_namespace_t *ns1 = NULL, + *ns2 = NULL; + axiom_text_t *text1 = NULL; + axiom_output_t *om_output = NULL; + axiom_xml_writer_t *writer = NULL; + axis2_char_t *output_buffer = NULL; + + printf("\nstart test_om_serialize\n"); + + ns1 = + axiom_namespace_create(environment, + "http://ws.apache.org/axis2/c/om", "axiom"); + ns2 = axiom_namespace_create(environment, "urn:ISBN:0-395-74341-6", "isbn"); + ele1 = axiom_element_create(environment, NULL, "book", ns1, &node1); + axiom_element_declare_namespace(ele1, environment, node1, ns2); + + ele2 = axiom_element_create(environment, node1, "title", ns1, &node2); + attr1 = axiom_attribute_create(environment, "title22", NULL, NULL); + + axiom_element_add_attribute(ele2, environment, attr1, node2); + + text1 = axiom_text_create(environment, node2, "Axis2/C OM HOWTO", &node3); + + ele3 = axiom_element_create(environment, node1, "number", ns2, &node4); + + text1 = axiom_text_create(environment, node4, "1748491379", &node5); + + ele4 = axiom_element_create(environment, node1, "author", ns1, &node6); + + attr1 = axiom_attribute_create(environment, "title", "Mr", ns1); + + axiom_element_add_attribute(ele4, environment, attr1, node6); + + attr2 = axiom_attribute_create(environment, "name", "Axitoc Oman", ns1); + + axiom_element_add_attribute(ele4, environment, attr2, node6); + + data_source = axiom_data_source_create(environment, node1, &node6); + stream = axiom_data_source_get_stream(data_source, environment); + if (stream) + { + axutil_stream_write(stream, environment, + "is a test", + axutil_strlen + ("is a test")); + } + + /* serializing stuff */ + writer = + axiom_xml_writer_create_for_memory(environment, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_output = axiom_output_create(environment, writer); + + printf("Serialize built document\n"); + status = axiom_node_serialize(node1, environment, om_output); + if (status != AXIS2_SUCCESS) + { + printf("\naxiom_node_serialize failed\n"); + return status; + } + else + printf("\naxiom_node_serialize success\n"); + /* end serializing stuff */ + + axiom_node_free_tree(node1, environment); + output_buffer = + (axis2_char_t *) axiom_xml_writer_get_xml(writer, environment); + + axiom_output_free(om_output, environment); + /* if (output_buffer) */ + /* { */ + /* printf("%s", output_buffer); */ + /* AXIS2_FREE(environment->allocator, output_buffer); */ + /* } */ + + printf("\nend test_om_serialize\n"); + + return 0; +} + +int +main( + int argc, + char *argv[]) + { + const char *file_name = "../../resources/xml/om/test.xml"; + if (argc > 1) + file_name = argv[1]; + allocator = axutil_allocator_init(NULL); + axis_log = axutil_log_create(allocator, NULL, NULL); + error = axutil_error_create(allocator); + + environment = axutil_env_create_with_error_log(allocator, error, axis_log); + test_om_build(file_name); + test_om_serialize(); + + axutil_env_free(environment); + return 0; +} diff --git a/axiom/test/resources/wsdl/Attachment1.wsdl b/axiom/test/resources/wsdl/Attachment1.wsdl new file mode 100644 index 0000000..0fc52d0 --- /dev/null +++ b/axiom/test/resources/wsdl/Attachment1.wsdl @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/AttachmentService.wsdl b/axiom/test/resources/wsdl/AttachmentService.wsdl new file mode 100644 index 0000000..b94b757 --- /dev/null +++ b/axiom/test/resources/wsdl/AttachmentService.wsdl @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/AxisBench.wsdl b/axiom/test/resources/wsdl/AxisBench.wsdl new file mode 100644 index 0000000..3138179 --- /dev/null +++ b/axiom/test/resources/wsdl/AxisBench.wsdl @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/BasicAllTest.wsdl b/axiom/test/resources/wsdl/BasicAllTest.wsdl new file mode 100644 index 0000000..13e2a79 --- /dev/null +++ b/axiom/test/resources/wsdl/BasicAllTest.wsdl @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/wsdl/BasicChoice.wsdl b/axiom/test/resources/wsdl/BasicChoice.wsdl new file mode 100644 index 0000000..25c6123 --- /dev/null +++ b/axiom/test/resources/wsdl/BasicChoice.wsdl @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/wsdl/Calculator.wsdl b/axiom/test/resources/wsdl/Calculator.wsdl new file mode 100644 index 0000000..c7d1243 --- /dev/null +++ b/axiom/test/resources/wsdl/Calculator.wsdl @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/CalculatorDoc.wsdl b/axiom/test/resources/wsdl/CalculatorDoc.wsdl new file mode 100644 index 0000000..5600279 --- /dev/null +++ b/axiom/test/resources/wsdl/CalculatorDoc.wsdl @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/Choice.wsdl b/axiom/test/resources/wsdl/Choice.wsdl new file mode 100644 index 0000000..25c6123 --- /dev/null +++ b/axiom/test/resources/wsdl/Choice.wsdl @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/wsdl/CombinedAllTest.wsdl b/axiom/test/resources/wsdl/CombinedAllTest.wsdl new file mode 100644 index 0000000..640ea4a --- /dev/null +++ b/axiom/test/resources/wsdl/CombinedAllTest.wsdl @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/wsdl/CombinedChoice.wsdl b/axiom/test/resources/wsdl/CombinedChoice.wsdl new file mode 100644 index 0000000..d4f2541 --- /dev/null +++ b/axiom/test/resources/wsdl/CombinedChoice.wsdl @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/wsdl/ComplexLists.wsdl b/axiom/test/resources/wsdl/ComplexLists.wsdl new file mode 100644 index 0000000..21674dc --- /dev/null +++ b/axiom/test/resources/wsdl/ComplexLists.wsdl @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/ComplexTypeAll.wsdl b/axiom/test/resources/wsdl/ComplexTypeAll.wsdl new file mode 100644 index 0000000..2703344 --- /dev/null +++ b/axiom/test/resources/wsdl/ComplexTypeAll.wsdl @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/DIClientDoc.wsdl b/axiom/test/resources/wsdl/DIClientDoc.wsdl new file mode 100644 index 0000000..972e768 --- /dev/null +++ b/axiom/test/resources/wsdl/DIClientDoc.wsdl @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/DataHandlerService.wsdl b/axiom/test/resources/wsdl/DataHandlerService.wsdl new file mode 100644 index 0000000..41fcec4 --- /dev/null +++ b/axiom/test/resources/wsdl/DataHandlerService.wsdl @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/Enumeration.wsdl b/axiom/test/resources/wsdl/Enumeration.wsdl new file mode 100644 index 0000000..15f72ce --- /dev/null +++ b/axiom/test/resources/wsdl/Enumeration.wsdl @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/ExceptionTest.wsdl b/axiom/test/resources/wsdl/ExceptionTest.wsdl new file mode 100644 index 0000000..557ed0f --- /dev/null +++ b/axiom/test/resources/wsdl/ExceptionTest.wsdl @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/ExceptionTestDoc.wsdl b/axiom/test/resources/wsdl/ExceptionTestDoc.wsdl new file mode 100644 index 0000000..e51b20f --- /dev/null +++ b/axiom/test/resources/wsdl/ExceptionTestDoc.wsdl @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/ExtensibilityQuery.wsdl b/axiom/test/resources/wsdl/ExtensibilityQuery.wsdl new file mode 100644 index 0000000..27a2738 --- /dev/null +++ b/axiom/test/resources/wsdl/ExtensibilityQuery.wsdl @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/FaultMapping.wsdl b/axiom/test/resources/wsdl/FaultMapping.wsdl new file mode 100644 index 0000000..557ed0f --- /dev/null +++ b/axiom/test/resources/wsdl/FaultMapping.wsdl @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/FaultMappingDoc.wsdl b/axiom/test/resources/wsdl/FaultMappingDoc.wsdl new file mode 100644 index 0000000..e51b20f --- /dev/null +++ b/axiom/test/resources/wsdl/FaultMappingDoc.wsdl @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/FourLevelTestDoc.wsdl b/axiom/test/resources/wsdl/FourLevelTestDoc.wsdl new file mode 100644 index 0000000..7c82a05 --- /dev/null +++ b/axiom/test/resources/wsdl/FourLevelTestDoc.wsdl @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/InOut.wsdl b/axiom/test/resources/wsdl/InOut.wsdl new file mode 100644 index 0000000..11f6afa --- /dev/null +++ b/axiom/test/resources/wsdl/InOut.wsdl @@ -0,0 +1,429 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/InteropTestRound1.wsdl b/axiom/test/resources/wsdl/InteropTestRound1.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/InteropTestRound1.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/InteropTestRound1Doc.wsdl b/axiom/test/resources/wsdl/InteropTestRound1Doc.wsdl new file mode 100644 index 0000000..be1d09b --- /dev/null +++ b/axiom/test/resources/wsdl/InteropTestRound1Doc.wsdl @@ -0,0 +1,774 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/LargeReturningString.wsdl b/axiom/test/resources/wsdl/LargeReturningString.wsdl new file mode 100644 index 0000000..9b031da --- /dev/null +++ b/axiom/test/resources/wsdl/LargeReturningString.wsdl @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/LimitedAllTest.wsdl b/axiom/test/resources/wsdl/LimitedAllTest.wsdl new file mode 100644 index 0000000..81522f6 --- /dev/null +++ b/axiom/test/resources/wsdl/LimitedAllTest.wsdl @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/wsdl/ManyTypeRefRoot.wsdl b/axiom/test/resources/wsdl/ManyTypeRefRoot.wsdl new file mode 100644 index 0000000..13dec3d --- /dev/null +++ b/axiom/test/resources/wsdl/ManyTypeRefRoot.wsdl @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/MathOps.wsdl b/axiom/test/resources/wsdl/MathOps.wsdl new file mode 100644 index 0000000..f7f810f --- /dev/null +++ b/axiom/test/resources/wsdl/MathOps.wsdl @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/MathOpsDoc.wsdl b/axiom/test/resources/wsdl/MathOpsDoc.wsdl new file mode 100644 index 0000000..e85ae96 --- /dev/null +++ b/axiom/test/resources/wsdl/MathOpsDoc.wsdl @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/MinOccurTest.wsdl b/axiom/test/resources/wsdl/MinOccurTest.wsdl new file mode 100644 index 0000000..2fe8308 --- /dev/null +++ b/axiom/test/resources/wsdl/MinOccurTest.wsdl @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/wsdl/MultiOut.wsdl b/axiom/test/resources/wsdl/MultiOut.wsdl new file mode 100644 index 0000000..9590b29 --- /dev/null +++ b/axiom/test/resources/wsdl/MultiOut.wsdl @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/NestedArrays.wsdl b/axiom/test/resources/wsdl/NestedArrays.wsdl new file mode 100644 index 0000000..17760b7 --- /dev/null +++ b/axiom/test/resources/wsdl/NestedArrays.wsdl @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/NestedComplex.wsdl b/axiom/test/resources/wsdl/NestedComplex.wsdl new file mode 100644 index 0000000..6384ce1 --- /dev/null +++ b/axiom/test/resources/wsdl/NestedComplex.wsdl @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/NillableArrays.wsdl b/axiom/test/resources/wsdl/NillableArrays.wsdl new file mode 100644 index 0000000..42028f0 --- /dev/null +++ b/axiom/test/resources/wsdl/NillableArrays.wsdl @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/OtherFaultException.wsdl b/axiom/test/resources/wsdl/OtherFaultException.wsdl new file mode 100644 index 0000000..56b66d1 --- /dev/null +++ b/axiom/test/resources/wsdl/OtherFaultException.wsdl @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/PlainTextAttachment.wsdl b/axiom/test/resources/wsdl/PlainTextAttachment.wsdl new file mode 100644 index 0000000..d0a9c8d --- /dev/null +++ b/axiom/test/resources/wsdl/PlainTextAttachment.wsdl @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/PrimitiveAndArray.wsdl b/axiom/test/resources/wsdl/PrimitiveAndArray.wsdl new file mode 100644 index 0000000..083cbca --- /dev/null +++ b/axiom/test/resources/wsdl/PrimitiveAndArray.wsdl @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RPCAllTest.wsdl b/axiom/test/resources/wsdl/RPCAllTest.wsdl new file mode 100644 index 0000000..1a86d52 --- /dev/null +++ b/axiom/test/resources/wsdl/RPCAllTest.wsdl @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RecurseTypes.wsdl b/axiom/test/resources/wsdl/RecurseTypes.wsdl new file mode 100644 index 0000000..4c3546a --- /dev/null +++ b/axiom/test/resources/wsdl/RecurseTypes.wsdl @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcHttpHeaderTest1.wsdl b/axiom/test/resources/wsdl/RpcHttpHeaderTest1.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcHttpHeaderTest1.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcHttpHeaderTest2.wsdl b/axiom/test/resources/wsdl/RpcHttpHeaderTest2.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcHttpHeaderTest2.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcHttpHeaderTest3.wsdl b/axiom/test/resources/wsdl/RpcHttpHeaderTest3.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcHttpHeaderTest3.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcHttpHeaderTest4.wsdl b/axiom/test/resources/wsdl/RpcHttpHeaderTest4.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcHttpHeaderTest4.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcHttpHeaderTest5.wsdl b/axiom/test/resources/wsdl/RpcHttpHeaderTest5.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcHttpHeaderTest5.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcHttpHeaderTest7.wsdl b/axiom/test/resources/wsdl/RpcHttpHeaderTest7.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcHttpHeaderTest7.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcHttpHeaderTest8.wsdl b/axiom/test/resources/wsdl/RpcHttpHeaderTest8.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcHttpHeaderTest8.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcSoapHeaderTest1.wsdl b/axiom/test/resources/wsdl/RpcSoapHeaderTest1.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcSoapHeaderTest1.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcSoapHeaderTest10.wsdl b/axiom/test/resources/wsdl/RpcSoapHeaderTest10.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcSoapHeaderTest10.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcSoapHeaderTest2.wsdl b/axiom/test/resources/wsdl/RpcSoapHeaderTest2.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcSoapHeaderTest2.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcSoapHeaderTest3.wsdl b/axiom/test/resources/wsdl/RpcSoapHeaderTest3.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcSoapHeaderTest3.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcSoapHeaderTest4.wsdl b/axiom/test/resources/wsdl/RpcSoapHeaderTest4.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcSoapHeaderTest4.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcSoapHeaderTest6.wsdl b/axiom/test/resources/wsdl/RpcSoapHeaderTest6.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcSoapHeaderTest6.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcSoapHeaderTest8.wsdl b/axiom/test/resources/wsdl/RpcSoapHeaderTest8.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcSoapHeaderTest8.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/RpcSoapHeaderTest9.wsdl b/axiom/test/resources/wsdl/RpcSoapHeaderTest9.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/axiom/test/resources/wsdl/RpcSoapHeaderTest9.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/SimpleArray.wsdl b/axiom/test/resources/wsdl/SimpleArray.wsdl new file mode 100644 index 0000000..ef42ca1 --- /dev/null +++ b/axiom/test/resources/wsdl/SimpleArray.wsdl @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/SimpleArrayDoc.wsdl b/axiom/test/resources/wsdl/SimpleArrayDoc.wsdl new file mode 100644 index 0000000..d079513 --- /dev/null +++ b/axiom/test/resources/wsdl/SimpleArrayDoc.wsdl @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/SimpleArrays.wsdl b/axiom/test/resources/wsdl/SimpleArrays.wsdl new file mode 100644 index 0000000..ae60352 --- /dev/null +++ b/axiom/test/resources/wsdl/SimpleArrays.wsdl @@ -0,0 +1,299 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/SimpleChoice.wsdl b/axiom/test/resources/wsdl/SimpleChoice.wsdl new file mode 100644 index 0000000..b2b357f --- /dev/null +++ b/axiom/test/resources/wsdl/SimpleChoice.wsdl @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/wsdl/SimpleRef.wsdl b/axiom/test/resources/wsdl/SimpleRef.wsdl new file mode 100644 index 0000000..58e2a99 --- /dev/null +++ b/axiom/test/resources/wsdl/SimpleRef.wsdl @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/SimpleRefDoc.wsdl b/axiom/test/resources/wsdl/SimpleRefDoc.wsdl new file mode 100644 index 0000000..543a472 --- /dev/null +++ b/axiom/test/resources/wsdl/SimpleRefDoc.wsdl @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/SimpleTypeArray.wsdl b/axiom/test/resources/wsdl/SimpleTypeArray.wsdl new file mode 100644 index 0000000..410ec86 --- /dev/null +++ b/axiom/test/resources/wsdl/SimpleTypeArray.wsdl @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/SimpleTypeInnerUnbounded.wsdl b/axiom/test/resources/wsdl/SimpleTypeInnerUnbounded.wsdl new file mode 100644 index 0000000..15e4eba --- /dev/null +++ b/axiom/test/resources/wsdl/SimpleTypeInnerUnbounded.wsdl @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/SimpleTypeInnerUnboundedInOutput.wsdl b/axiom/test/resources/wsdl/SimpleTypeInnerUnboundedInOutput.wsdl new file mode 100644 index 0000000..3aceb9f --- /dev/null +++ b/axiom/test/resources/wsdl/SimpleTypeInnerUnboundedInOutput.wsdl @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/StockQuotes.wsdl b/axiom/test/resources/wsdl/StockQuotes.wsdl new file mode 100644 index 0000000..a5be851 --- /dev/null +++ b/axiom/test/resources/wsdl/StockQuotes.wsdl @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + net.xmethods.services.stockquote.StockQuote web service + + + + + diff --git a/axiom/test/resources/wsdl/TestTransportTimeout.wsdl b/axiom/test/resources/wsdl/TestTransportTimeout.wsdl new file mode 100644 index 0000000..9a469d6 --- /dev/null +++ b/axiom/test/resources/wsdl/TestTransportTimeout.wsdl @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/UDDI.wsdl b/axiom/test/resources/wsdl/UDDI.wsdl new file mode 100644 index 0000000..6d3c738 --- /dev/null +++ b/axiom/test/resources/wsdl/UDDI.wsdl @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/UnboundedChoice.wsdl b/axiom/test/resources/wsdl/UnboundedChoice.wsdl new file mode 100644 index 0000000..3becac9 --- /dev/null +++ b/axiom/test/resources/wsdl/UnboundedChoice.wsdl @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/wsdl/UnboundedStringChoice.wsdl b/axiom/test/resources/wsdl/UnboundedStringChoice.wsdl new file mode 100644 index 0000000..f752eca --- /dev/null +++ b/axiom/test/resources/wsdl/UnboundedStringChoice.wsdl @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/wsdl/XSDAttribute.wsdl b/axiom/test/resources/wsdl/XSDAttribute.wsdl new file mode 100644 index 0000000..2c3f44f --- /dev/null +++ b/axiom/test/resources/wsdl/XSDAttribute.wsdl @@ -0,0 +1,1046 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSDElement.wsdl b/axiom/test/resources/wsdl/XSDElement.wsdl new file mode 100644 index 0000000..13309e6 --- /dev/null +++ b/axiom/test/resources/wsdl/XSDElement.wsdl @@ -0,0 +1,1422 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSDElementNil.wsdl b/axiom/test/resources/wsdl/XSDElementNil.wsdl new file mode 100644 index 0000000..153530b --- /dev/null +++ b/axiom/test/resources/wsdl/XSDElementNil.wsdl @@ -0,0 +1,1414 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_ENTITIES.wsdl b/axiom/test/resources/wsdl/XSD_ENTITIES.wsdl new file mode 100644 index 0000000..56628fb --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_ENTITIES.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_ENTITY.wsdl b/axiom/test/resources/wsdl/XSD_ENTITY.wsdl new file mode 100644 index 0000000..e18be29 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_ENTITY.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_ID.wsdl b/axiom/test/resources/wsdl/XSD_ID.wsdl new file mode 100644 index 0000000..06f931b --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_ID.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_IDREF.wsdl b/axiom/test/resources/wsdl/XSD_IDREF.wsdl new file mode 100644 index 0000000..8306b44 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_IDREF.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_IDREFS.wsdl b/axiom/test/resources/wsdl/XSD_IDREFS.wsdl new file mode 100644 index 0000000..cdec7fb --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_IDREFS.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_NCName.wsdl b/axiom/test/resources/wsdl/XSD_NCName.wsdl new file mode 100644 index 0000000..b65e656 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_NCName.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_NMTOKEN.wsdl b/axiom/test/resources/wsdl/XSD_NMTOKEN.wsdl new file mode 100644 index 0000000..184d47c --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_NMTOKEN.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_NMTOKENS.wsdl b/axiom/test/resources/wsdl/XSD_NMTOKENS.wsdl new file mode 100644 index 0000000..6100b1a --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_NMTOKENS.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_NOTATION.wsdl b/axiom/test/resources/wsdl/XSD_NOTATION.wsdl new file mode 100644 index 0000000..564985c --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_NOTATION.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_Name.wsdl b/axiom/test/resources/wsdl/XSD_Name.wsdl new file mode 100644 index 0000000..5198b1c --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_Name.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_QName.wsdl b/axiom/test/resources/wsdl/XSD_QName.wsdl new file mode 100644 index 0000000..7fca9ff --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_QName.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_anyURI.wsdl b/axiom/test/resources/wsdl/XSD_anyURI.wsdl new file mode 100644 index 0000000..73410d8 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_anyURI.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_base64Binary.wsdl b/axiom/test/resources/wsdl/XSD_base64Binary.wsdl new file mode 100644 index 0000000..e7b1ae8 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_base64Binary.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_boolean.wsdl b/axiom/test/resources/wsdl/XSD_boolean.wsdl new file mode 100644 index 0000000..906ba02 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_boolean.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_byte.wsdl b/axiom/test/resources/wsdl/XSD_byte.wsdl new file mode 100644 index 0000000..52aa1d3 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_byte.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_date.wsdl b/axiom/test/resources/wsdl/XSD_date.wsdl new file mode 100644 index 0000000..013a3f9 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_date.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_dateTime.wsdl b/axiom/test/resources/wsdl/XSD_dateTime.wsdl new file mode 100644 index 0000000..5031ca6 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_dateTime.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_decimal.wsdl b/axiom/test/resources/wsdl/XSD_decimal.wsdl new file mode 100644 index 0000000..587107a --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_decimal.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_double.wsdl b/axiom/test/resources/wsdl/XSD_double.wsdl new file mode 100644 index 0000000..51eb810 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_double.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_duration.wsdl b/axiom/test/resources/wsdl/XSD_duration.wsdl new file mode 100644 index 0000000..31a8b18 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_duration.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_float.wsdl b/axiom/test/resources/wsdl/XSD_float.wsdl new file mode 100644 index 0000000..dcc7464 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_float.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_gDay.wsdl b/axiom/test/resources/wsdl/XSD_gDay.wsdl new file mode 100644 index 0000000..2508f5d --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_gDay.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_gMonth.wsdl b/axiom/test/resources/wsdl/XSD_gMonth.wsdl new file mode 100644 index 0000000..1d05d42 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_gMonth.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_gMonthDay.wsdl b/axiom/test/resources/wsdl/XSD_gMonthDay.wsdl new file mode 100644 index 0000000..6d06f45 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_gMonthDay.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_gYear.wsdl b/axiom/test/resources/wsdl/XSD_gYear.wsdl new file mode 100644 index 0000000..0135260 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_gYear.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_gYearMonth.wsdl b/axiom/test/resources/wsdl/XSD_gYearMonth.wsdl new file mode 100644 index 0000000..d0bd3f1 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_gYearMonth.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_hexBinary.wsdl b/axiom/test/resources/wsdl/XSD_hexBinary.wsdl new file mode 100644 index 0000000..1ace268 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_hexBinary.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_int.wsdl b/axiom/test/resources/wsdl/XSD_int.wsdl new file mode 100644 index 0000000..897ba94 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_int.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_integer.wsdl b/axiom/test/resources/wsdl/XSD_integer.wsdl new file mode 100644 index 0000000..162cc94 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_integer.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_language.wsdl b/axiom/test/resources/wsdl/XSD_language.wsdl new file mode 100644 index 0000000..e69a08a --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_language.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_long.wsdl b/axiom/test/resources/wsdl/XSD_long.wsdl new file mode 100644 index 0000000..8d9b562 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_long.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_negativeInteger.wsdl b/axiom/test/resources/wsdl/XSD_negativeInteger.wsdl new file mode 100644 index 0000000..70abcda --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_negativeInteger.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_nonNegativeInteger.wsdl b/axiom/test/resources/wsdl/XSD_nonNegativeInteger.wsdl new file mode 100644 index 0000000..b3baf36 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_nonNegativeInteger.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_nonPositiveInteger.wsdl b/axiom/test/resources/wsdl/XSD_nonPositiveInteger.wsdl new file mode 100644 index 0000000..ab95c37 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_nonPositiveInteger.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_normalizedString.wsdl b/axiom/test/resources/wsdl/XSD_normalizedString.wsdl new file mode 100644 index 0000000..4e44c2e --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_normalizedString.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_positiveInteger.wsdl b/axiom/test/resources/wsdl/XSD_positiveInteger.wsdl new file mode 100644 index 0000000..ce5c1bb --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_positiveInteger.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_short.wsdl b/axiom/test/resources/wsdl/XSD_short.wsdl new file mode 100644 index 0000000..f707d77 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_short.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_string.wsdl b/axiom/test/resources/wsdl/XSD_string.wsdl new file mode 100644 index 0000000..f325e17 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_string.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_time.wsdl b/axiom/test/resources/wsdl/XSD_time.wsdl new file mode 100644 index 0000000..fc47d5a --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_time.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_token.wsdl b/axiom/test/resources/wsdl/XSD_token.wsdl new file mode 100644 index 0000000..6ff5990 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_token.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_unsignedByte.wsdl b/axiom/test/resources/wsdl/XSD_unsignedByte.wsdl new file mode 100644 index 0000000..4b13551 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_unsignedByte.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_unsignedInt.wsdl b/axiom/test/resources/wsdl/XSD_unsignedInt.wsdl new file mode 100644 index 0000000..2c60e37 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_unsignedInt.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_unsignedLong.wsdl b/axiom/test/resources/wsdl/XSD_unsignedLong.wsdl new file mode 100644 index 0000000..04de8dd --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_unsignedLong.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/XSD_unsignedShort.wsdl b/axiom/test/resources/wsdl/XSD_unsignedShort.wsdl new file mode 100644 index 0000000..9338c34 --- /dev/null +++ b/axiom/test/resources/wsdl/XSD_unsignedShort.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/inquire_v2.wsdl b/axiom/test/resources/wsdl/inquire_v2.wsdl new file mode 100644 index 0000000..50b7674 --- /dev/null +++ b/axiom/test/resources/wsdl/inquire_v2.wsdl @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + + + + Copyright (c) 2000 - 2002 by Accenture, Ariba, Inc., Commerce One, Inc. + Fujitsu Limited, Hewlett-Packard Company, i2 Technologies, Inc., + Intel Corporation, International Business Machines Corporation, + Microsoft Corporation, Oracle Corporation, SAP AG, Sun Microsystems, Inc., + and VeriSign, Inc. All Rights Reserved. + + WSDL Service Interface for UDDI Inquiry API V2.0 + + This WSDL document defines the inquiry API calls for interacting with + the UDDI registry. The complete UDDI API specification is available + at http://www.uddi.org/specification.html. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This portType defines all of the UDDI inquiry operations. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This is the SOAP binding for the UDDI inquiry operations. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/nillableComplexType.wsdl b/axiom/test/resources/wsdl/nillableComplexType.wsdl new file mode 100644 index 0000000..ea224c2 --- /dev/null +++ b/axiom/test/resources/wsdl/nillableComplexType.wsdl @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/nillableComplexType.xsd b/axiom/test/resources/wsdl/nillableComplexType.xsd new file mode 100644 index 0000000..765be56 --- /dev/null +++ b/axiom/test/resources/wsdl/nillableComplexType.xsd @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/wsdl/wsaTestService.wsdl b/axiom/test/resources/wsdl/wsaTestService.wsdl new file mode 100644 index 0000000..4ce8b12 --- /dev/null +++ b/axiom/test/resources/wsdl/wsaTestService.wsdl @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/xml/om/axis.xml b/axiom/test/resources/xml/om/axis.xml new file mode 100644 index 0000000..bc996c5 --- /dev/null +++ b/axiom/test/resources/xml/om/axis.xml @@ -0,0 +1,25 @@ + + + + +
+ + + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/xml/om/basic.xml b/axiom/test/resources/xml/om/basic.xml new file mode 100644 index 0000000..88385fb --- /dev/null +++ b/axiom/test/resources/xml/om/basic.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/axiom/test/resources/xml/om/basicupdate.xml b/axiom/test/resources/xml/om/basicupdate.xml new file mode 100644 index 0000000..57d458c --- /dev/null +++ b/axiom/test/resources/xml/om/basicupdate.xml @@ -0,0 +1,47 @@ + + + + + + Goudse kaas + Rond + + + + + + + More cheese! + + + + + Even more cheese! + + + + + No sausages today + + + + + + + + + + + + + + + + + + diff --git a/axiom/test/resources/xml/om/contents.xml b/axiom/test/resources/xml/om/contents.xml new file mode 100644 index 0000000..35e3ac7 --- /dev/null +++ b/axiom/test/resources/xml/om/contents.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + Java and XML + + + Introduction + + What Is It? + + + How Do I Use It? + + + Why Should I Use It? + + + What's Next? + + + + + Creating XML + An XML Document + The Header + The Content + What's Next? + + + + Parsing XML + Getting Prepared + SAX Readers + Content Handlers + Error Handlers + + A Better Way to Load a Parser + + "Gotcha!" + What's Next? + + + + + + Web Publishing Frameworks + Selecting a Framework + Installation + + Using a Publishing Framework + + XSP + Cocoon 2.0 and Beyond + What's Next? + + + diff --git a/axiom/test/resources/xml/om/defaultNamespace.xml b/axiom/test/resources/xml/om/defaultNamespace.xml new file mode 100644 index 0000000..1e32981 --- /dev/null +++ b/axiom/test/resources/xml/om/defaultNamespace.xml @@ -0,0 +1,6 @@ + + + + Hello + + diff --git a/axiom/test/resources/xml/om/evaluate.xml b/axiom/test/resources/xml/om/evaluate.xml new file mode 100644 index 0000000..90d06bd --- /dev/null +++ b/axiom/test/resources/xml/om/evaluate.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + brown + + + moderate + + diff --git a/axiom/test/resources/xml/om/fibo.xml b/axiom/test/resources/xml/om/fibo.xml new file mode 100644 index 0000000..9b5d0ec --- /dev/null +++ b/axiom/test/resources/xml/om/fibo.xml @@ -0,0 +1,29 @@ + + + 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + 55 + 89 + 144 + 233 + 377 + 610 + 987 + 1597 + 2584 + 4181 + 6765 + 10946 + 17711 + 28657 + 46368 + 75025 + diff --git a/axiom/test/resources/xml/om/id.xml b/axiom/test/resources/xml/om/id.xml new file mode 100644 index 0000000..749ab20 --- /dev/null +++ b/axiom/test/resources/xml/om/id.xml @@ -0,0 +1,21 @@ + + + + + + + + +]> + + + + baz + gouda + baz + cheddar + baz + + diff --git a/axiom/test/resources/xml/om/jaxen24.xml b/axiom/test/resources/xml/om/jaxen24.xml new file mode 100644 index 0000000..9b81996 --- /dev/null +++ b/axiom/test/resources/xml/om/jaxen24.xml @@ -0,0 +1,2 @@ + +

diff --git a/axiom/test/resources/xml/om/jaxen3.xml b/axiom/test/resources/xml/om/jaxen3.xml new file mode 100644 index 0000000..a87723a --- /dev/null +++ b/axiom/test/resources/xml/om/jaxen3.xml @@ -0,0 +1,15 @@ + + + + 2 + + CE-A + + + + 1 + + CE-B + + + diff --git a/axiom/test/resources/xml/om/lang.xml b/axiom/test/resources/xml/om/lang.xml new file mode 100644 index 0000000..49b45db --- /dev/null +++ b/axiom/test/resources/xml/om/lang.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/xml/om/message.xml b/axiom/test/resources/xml/om/message.xml new file mode 100644 index 0000000..3b81df2 --- /dev/null +++ b/axiom/test/resources/xml/om/message.xml @@ -0,0 +1,27 @@ + + +
+ lookupformservice + 9 + stammdaten + new +
+ + + + + iteminfo + ELE + + + parentinfo + Pruefgebiete + + + id + 1 + + + + +
diff --git a/axiom/test/resources/xml/om/moreover.xml b/axiom/test/resources/xml/om/moreover.xml new file mode 100644 index 0000000..38d4c4f --- /dev/null +++ b/axiom/test/resources/xml/om/moreover.xml @@ -0,0 +1,244 @@ + + +
+ http://c.moreover.com/click/here.pl?x13563273 + e-Commerce Operators Present Version 1.0 of the XML Standard + StockAccess + text + moreover... + + http://www.stockaccess.com/index.html + Dec 24 2000 6:28AM + + +
+
+ http://c.moreover.com/click/here.pl?x13560995 + W3C Publishes XML Protocol Requirements Document + Xml + text + moreover... + + http://www.xml.com/ + Dec 24 2000 12:22AM + + +
+
+ http://c.moreover.com/click/here.pl?x13553521 + Prowler: Open Source XML-Based Content Management Framework + Xml + text + moreover... + + http://www.xml.com/ + Dec 23 2000 2:05PM + + +
+
+ http://c.moreover.com/click/here.pl?x13549013 + The Middleware Company Debuts Public Training Courses in Ejb, J2ee And Xml + Java Industry Connection + text + moreover... + + http://industry.java.sun.com/javanews/more/hotnews/ + Dec 23 2000 12:15PM + + +
+
+ http://c.moreover.com/click/here.pl?x13544467 + Revised Working Draft for the W3C XML Information Set + Xml + text + moreover... + + http://www.xml.com/ + Dec 23 2000 5:50AM + + +
+
+ http://c.moreover.com/click/here.pl?x13534836 + XML: Its The Great Peacemaker + ZDNet + text + moreover... + + http://www.zdnet.com/intweek/ + Dec 22 2000 9:05PM + + +
+
+ http://c.moreover.com/click/here.pl?x13533485 + Project eL - The XML Leningrad Codex Markup Project + Xml + text + moreover... + + http://www.xml.com/ + Dec 22 2000 8:34PM + + +
+
+ http://c.moreover.com/click/here.pl?x13533488 + XML Linking Language (XLink) and XML Base Specifications Issued as W3C Proposed Recommenda + Xml + text + moreover... + + http://www.xml.com/ + Dec 22 2000 8:34PM + + +
+
+ http://c.moreover.com/click/here.pl?x13533492 + W3C Releases XHTML Basic Specification as a W3C Recommendation + Xml + text + moreover... + + http://www.xml.com/ + Dec 22 2000 8:34PM + + +
+
+ http://c.moreover.com/click/here.pl?x13521827 + Java, Xml And Oracle9i(TM) Make A Great Team + Java Industry Connection + text + moreover... + + http://industry.java.sun.com/javanews/more/hotnews/ + Dec 22 2000 3:21PM + + +
+
+ http://c.moreover.com/click/here.pl?x13511233 + Competing initiatives to vie for security standard + ZDNet + text + moreover... + + http://www.zdnet.com/eweek/filters/news/ + Dec 22 2000 10:54AM + + +
+
+ http://c.moreover.com/click/here.pl?x13492397 + Oracle Provides Developers with Great Xml Reading This Holiday Season + Java Industry Connection + text + moreover... + + http://industry.java.sun.com/javanews/more/hotnews/ + Dec 21 2000 8:08PM + + +
+
+ http://c.moreover.com/click/here.pl?x13491292 + XML as the great peacemaker - Extensible Markup Language Accomplished The Seemingly Impossible This Year: It B + Hospitality Net + text + moreover... + + http://www.hospitalitynet.org/news/list.htm?c=2000 + Dec 21 2000 7:45PM + + +
+
+ http://c.moreover.com/click/here.pl?x13484758 + XML as the great peacemaker + CNET + text + moreover... + + http://news.cnet.com/news/0-1003.html?tag=st.ne.1002.dir.1003 + Dec 21 2000 4:41PM + + +
+
+ http://c.moreover.com/click/here.pl?x13480896 + COOP Switzerland Selects Mercator as Integration Platform + Stockhouse Canada + text + moreover... + + http://www.stockhouse.ca/news/ + Dec 21 2000 1:55PM + + +
+
+ http://c.moreover.com/click/here.pl?x13471023 + Competing XML Specs Move Toward a Union + Internet World + text + moreover... + + http://www.internetworld.com/ + Dec 21 2000 11:14AM + + +
+
+ http://c.moreover.com/click/here.pl?x13452280 + Next-generation XHTML stripped down for handhelds + CNET + text + moreover... + + http://news.cnet.com/news/0-1005.html?tag=st.ne.1002.dir.1005 + Dec 20 2000 9:11PM + + +
+
+ http://c.moreover.com/click/here.pl?x13451789 + Xml Powers Oracle9i(TM) Dynamic Services + Java Industry Connection + text + moreover... + + http://industry.java.sun.com/javanews/more/hotnews/ + Dec 20 2000 9:05PM + + +
+
+ http://c.moreover.com/click/here.pl?x13442097 + XML DOM reference guide + ASPWire + text + moreover... + + http://aspwire.com/ + Dec 20 2000 6:26PM + + +
+
+ http://c.moreover.com/click/here.pl?x13424117 + Repeat/Xqsite And Bowstreet Team to Deliver Integrated Xml Solutions + Java Industry Connection + text + moreover... + + http://industry.java.sun.com/javanews/more/hotnews/ + Dec 20 2000 9:04AM + + +
+
+ diff --git a/axiom/test/resources/xml/om/much_ado.xml b/axiom/test/resources/xml/om/much_ado.xml new file mode 100644 index 0000000..f008fad --- /dev/null +++ b/axiom/test/resources/xml/om/much_ado.xml @@ -0,0 +1,6850 @@ + + +Much Ado about Nothing + + +

Text placed in the public domain by Moby Lexical Tools, 1992.

+

SGML markup by Jon Bosak, 1992-1994.

+

XML version by Jon Bosak, 1996-1998.

+

This work may be freely copied and distributed worldwide.

+
+ + + +Dramatis Personae + +DON PEDRO, prince of Arragon. +DON JOHN, his bastard brother. +CLAUDIO, a young lord of Florence. +BENEDICK, a young lord of Padua. +LEONATO, governor of Messina. +ANTONIO, his brother. +BALTHASAR, attendant on Don Pedro. + + +CONRADE +BORACHIO +followers of Don John. + + +FRIAR FRANCIS +DOGBERRY, a constable. +VERGES, a headborough. +A Sexton. +A Boy. +HERO, daughter to Leonato. +BEATRICE, niece to Leonato. + + +MARGARET +URSULA +gentlewomen attending on Hero. + + +Messengers, Watch, Attendants, &c. + + +SCENE Messina. + +MUCH ADO ABOUT NOTHING + +ACT I + +SCENE I. Before LEONATO'S house. +Enter LEONATO, HERO, and BEATRICE, with a +Messenger + + +LEONATO +I learn in this letter that Don Peter of Arragon +comes this night to Messina. + + + +Messenger +He is very near by this: he was not three leagues off +when I left him. + + + +LEONATO +How many gentlemen have you lost in this action? + + + +Messenger +But few of any sort, and none of name. + + + +LEONATO +A victory is twice itself when the achiever brings +home full numbers. I find here that Don Peter hath +bestowed much honour on a young Florentine called Claudio. + + + +Messenger +Much deserved on his part and equally remembered by +Don Pedro: he hath borne himself beyond the +promise of his age, doing, in the figure of a lamb, +the feats of a lion: he hath indeed better +bettered expectation than you must expect of me to +tell you how. + + + +LEONATO +He hath an uncle here in Messina will be very much +glad of it. + + + +Messenger +I have already delivered him letters, and there +appears much joy in him; even so much that joy could +not show itself modest enough without a badge of +bitterness. + + + +LEONATO +Did he break out into tears? + + + +Messenger +In great measure. + + + +LEONATO +A kind overflow of kindness: there are no faces +truer than those that are so washed. How much +better is it to weep at joy than to joy at weeping! + + + +BEATRICE +I pray you, is Signior Mountanto returned from the +wars or no? + + + +Messenger +I know none of that name, lady: there was none such +in the army of any sort. + + + +LEONATO +What is he that you ask for, niece? + + + +HERO +My cousin means Signior Benedick of Padua. + + + +Messenger +O, he's returned; and as pleasant as ever he was. + + + +BEATRICE +He set up his bills here in Messina and challenged +Cupid at the flight; and my uncle's fool, reading +the challenge, subscribed for Cupid, and challenged +him at the bird-bolt. I pray you, how many hath he +killed and eaten in these wars? But how many hath +he killed? for indeed I promised to eat all of his killing. + + + +LEONATO +Faith, niece, you tax Signior Benedick too much; +but he'll be meet with you, I doubt it not. + + + +Messenger +He hath done good service, lady, in these wars. + + + +BEATRICE +You had musty victual, and he hath holp to eat it: +he is a very valiant trencherman; he hath an +excellent stomach. + + + +Messenger +And a good soldier too, lady. + + + +BEATRICE +And a good soldier to a lady: but what is he to a lord? + + + +Messenger +A lord to a lord, a man to a man; stuffed with all +honourable virtues. + + + +BEATRICE +It is so, indeed; he is no less than a stuffed man: +but for the stuffing,--well, we are all mortal. + + + +LEONATO +You must not, sir, mistake my niece. There is a +kind of merry war betwixt Signior Benedick and her: +they never meet but there's a skirmish of wit +between them. + + + +BEATRICE +Alas! he gets nothing by that. In our last +conflict four of his five wits went halting off, and +now is the whole man governed with one: so that if +he have wit enough to keep himself warm, let him +bear it for a difference between himself and his +horse; for it is all the wealth that he hath left, +to be known a reasonable creature. Who is his +companion now? He hath every month a new sworn brother. + + + +Messenger +Is't possible? + + + +BEATRICE +Very easily possible: he wears his faith but as +the fashion of his hat; it ever changes with the +next block. + + + +Messenger +I see, lady, the gentleman is not in your books. + + + +BEATRICE +No; an he were, I would burn my study. But, I pray +you, who is his companion? Is there no young +squarer now that will make a voyage with him to the devil? + + + +Messenger +He is most in the company of the right noble Claudio. + + + +BEATRICE +O Lord, he will hang upon him like a disease: he +is sooner caught than the pestilence, and the taker +runs presently mad. God help the noble Claudio! if +he have caught the Benedick, it will cost him a +thousand pound ere a' be cured. + + + +Messenger +I will hold friends with you, lady. + + + +BEATRICE +Do, good friend. + + + +LEONATO +You will never run mad, niece. + + + +BEATRICE +No, not till a hot January. + + + +Messenger +Don Pedro is approached. + + + +Enter DON PEDRO, DON JOHN, CLAUDIO, BENEDICK, +and BALTHASAR + + +DON PEDRO +Good Signior Leonato, you are come to meet your +trouble: the fashion of the world is to avoid +cost, and you encounter it. + + + +LEONATO +Never came trouble to my house in the likeness of +your grace: for trouble being gone, comfort should +remain; but when you depart from me, sorrow abides +and happiness takes his leave. + + + +DON PEDRO +You embrace your charge too willingly. I think this +is your daughter. + + + +LEONATO +Her mother hath many times told me so. + + + +BENEDICK +Were you in doubt, sir, that you asked her? + + + +LEONATO +Signior Benedick, no; for then were you a child. + + + +DON PEDRO +You have it full, Benedick: we may guess by this +what you are, being a man. Truly, the lady fathers +herself. Be happy, lady; for you are like an +honourable father. + + + +BENEDICK +If Signior Leonato be her father, she would not +have his head on her shoulders for all Messina, as +like him as she is. + + + +BEATRICE +I wonder that you will still be talking, Signior +Benedick: nobody marks you. + + + +BENEDICK +What, my dear Lady Disdain! are you yet living? + + + +BEATRICE +Is it possible disdain should die while she hath +such meet food to feed it as Signior Benedick? +Courtesy itself must convert to disdain, if you come +in her presence. + + + +BENEDICK +Then is courtesy a turncoat. But it is certain I +am loved of all ladies, only you excepted: and I +would I could find in my heart that I had not a hard +heart; for, truly, I love none. + + + +BEATRICE +A dear happiness to women: they would else have +been troubled with a pernicious suitor. I thank God +and my cold blood, I am of your humour for that: I +had rather hear my dog bark at a crow than a man +swear he loves me. + + + +BENEDICK +God keep your ladyship still in that mind! so some +gentleman or other shall 'scape a predestinate +scratched face. + + + +BEATRICE +Scratching could not make it worse, an 'twere such +a face as yours were. + + + +BENEDICK +Well, you are a rare parrot-teacher. + + + +BEATRICE +A bird of my tongue is better than a beast of yours. + + + +BENEDICK +I would my horse had the speed of your tongue, and +so good a continuer. But keep your way, i' God's +name; I have done. + + + +BEATRICE +You always end with a jade's trick: I know you of old. + + + +DON PEDRO +That is the sum of all, Leonato. Signior Claudio +and Signior Benedick, my dear friend Leonato hath +invited you all. I tell him we shall stay here at +the least a month; and he heartily prays some +occasion may detain us longer. I dare swear he is no +hypocrite, but prays from his heart. + + + +LEONATO +If you swear, my lord, you shall not be forsworn. +To DON JOHN +Let me bid you welcome, my lord: being reconciled to +the prince your brother, I owe you all duty. + + + +DON JOHN +I thank you: I am not of many words, but I thank +you. + + + +LEONATO +Please it your grace lead on? + + + +DON PEDRO +Your hand, Leonato; we will go together. + + + +Exeunt all except BENEDICK and CLAUDIO + + +CLAUDIO +Benedick, didst thou note the daughter of Signior Leonato? + + + +BENEDICK +I noted her not; but I looked on her. + + + +CLAUDIO +Is she not a modest young lady? + + + +BENEDICK +Do you question me, as an honest man should do, for +my simple true judgment; or would you have me speak +after my custom, as being a professed tyrant to their sex? + + + +CLAUDIO +No; I pray thee speak in sober judgment. + + + +BENEDICK +Why, i' faith, methinks she's too low for a high +praise, too brown for a fair praise and too little +for a great praise: only this commendation I can +afford her, that were she other than she is, she +were unhandsome; and being no other but as she is, I +do not like her. + + + +CLAUDIO +Thou thinkest I am in sport: I pray thee tell me +truly how thou likest her. + + + +BENEDICK +Would you buy her, that you inquire after her? + + + +CLAUDIO +Can the world buy such a jewel? + + + +BENEDICK +Yea, and a case to put it into. But speak you this +with a sad brow? or do you play the flouting Jack, +to tell us Cupid is a good hare-finder and Vulcan a +rare carpenter? Come, in what key shall a man take +you, to go in the song? + + + +CLAUDIO +In mine eye she is the sweetest lady that ever I +looked on. + + + +BENEDICK +I can see yet without spectacles and I see no such +matter: there's her cousin, an she were not +possessed with a fury, exceeds her as much in beauty +as the first of May doth the last of December. But I +hope you have no intent to turn husband, have you? + + + +CLAUDIO +I would scarce trust myself, though I had sworn the +contrary, if Hero would be my wife. + + + +BENEDICK +Is't come to this? In faith, hath not the world +one man but he will wear his cap with suspicion? +Shall I never see a bachelor of three-score again? +Go to, i' faith; an thou wilt needs thrust thy neck +into a yoke, wear the print of it and sigh away +Sundays. Look Don Pedro is returned to seek you. + + + +Re-enter DON PEDRO + + +DON PEDRO +What secret hath held you here, that you followed +not to Leonato's? + + + +BENEDICK +I would your grace would constrain me to tell. + + + +DON PEDRO +I charge thee on thy allegiance. + + + +BENEDICK +You hear, Count Claudio: I can be secret as a dumb +man; I would have you think so; but, on my +allegiance, mark you this, on my allegiance. He is +in love. With who? now that is your grace's part. +Mark how short his answer is;--With Hero, Leonato's +short daughter. + + + +CLAUDIO +If this were so, so were it uttered. + + + +BENEDICK +Like the old tale, my lord: 'it is not so, nor +'twas not so, but, indeed, God forbid it should be +so.' + + + +CLAUDIO +If my passion change not shortly, God forbid it +should be otherwise. + + + +DON PEDRO +Amen, if you love her; for the lady is very well worthy. + + + +CLAUDIO +You speak this to fetch me in, my lord. + + + +DON PEDRO +By my troth, I speak my thought. + + + +CLAUDIO +And, in faith, my lord, I spoke mine. + + + +BENEDICK +And, by my two faiths and troths, my lord, I spoke mine. + + + +CLAUDIO +That I love her, I feel. + + + +DON PEDRO +That she is worthy, I know. + + + +BENEDICK +That I neither feel how she should be loved nor +know how she should be worthy, is the opinion that +fire cannot melt out of me: I will die in it at the stake. + + + +DON PEDRO +Thou wast ever an obstinate heretic in the despite +of beauty. + + + +CLAUDIO +And never could maintain his part but in the force +of his will. + + + +BENEDICK +That a woman conceived me, I thank her; that she +brought me up, I likewise give her most humble +thanks: but that I will have a recheat winded in my +forehead, or hang my bugle in an invisible baldrick, +all women shall pardon me. Because I will not do +them the wrong to mistrust any, I will do myself the +right to trust none; and the fine is, for the which +I may go the finer, I will live a bachelor. + + + +DON PEDRO +I shall see thee, ere I die, look pale with love. + + + +BENEDICK +With anger, with sickness, or with hunger, my lord, +not with love: prove that ever I lose more blood +with love than I will get again with drinking, pick +out mine eyes with a ballad-maker's pen and hang me +up at the door of a brothel-house for the sign of +blind Cupid. + + + +DON PEDRO +Well, if ever thou dost fall from this faith, thou +wilt prove a notable argument. + + + +BENEDICK +If I do, hang me in a bottle like a cat and shoot +at me; and he that hits me, let him be clapped on +the shoulder, and called Adam. + + + +DON PEDRO +Well, as time shall try: 'In time the savage bull +doth bear the yoke.' + + + +BENEDICK +The savage bull may; but if ever the sensible +Benedick bear it, pluck off the bull's horns and set +them in my forehead: and let me be vilely painted, +and in such great letters as they write 'Here is +good horse to hire,' let them signify under my sign +'Here you may see Benedick the married man.' + + + +CLAUDIO +If this should ever happen, thou wouldst be horn-mad. + + + +DON PEDRO +Nay, if Cupid have not spent all his quiver in +Venice, thou wilt quake for this shortly. + + + +BENEDICK +I look for an earthquake too, then. + + + +DON PEDRO +Well, you temporize with the hours. In the +meantime, good Signior Benedick, repair to +Leonato's: commend me to him and tell him I will +not fail him at supper; for indeed he hath made +great preparation. + + + +BENEDICK +I have almost matter enough in me for such an +embassage; and so I commit you-- + + + +CLAUDIO +To the tuition of God: From my house, if I had it,-- + + + +DON PEDRO +The sixth of July: Your loving friend, Benedick. + + + +BENEDICK +Nay, mock not, mock not. The body of your +discourse is sometime guarded with fragments, and +the guards are but slightly basted on neither: ere +you flout old ends any further, examine your +conscience: and so I leave you. + + + +Exit + + +CLAUDIO +My liege, your highness now may do me good. + + + +DON PEDRO +My love is thine to teach: teach it but how, +And thou shalt see how apt it is to learn +Any hard lesson that may do thee good. + + + +CLAUDIO +Hath Leonato any son, my lord? + + + +DON PEDRO +No child but Hero; she's his only heir. +Dost thou affect her, Claudio? + + + +CLAUDIO +O, my lord, +When you went onward on this ended action, +I look'd upon her with a soldier's eye, +That liked, but had a rougher task in hand +Than to drive liking to the name of love: +But now I am return'd and that war-thoughts +Have left their places vacant, in their rooms +Come thronging soft and delicate desires, +All prompting me how fair young Hero is, +Saying, I liked her ere I went to wars. + + + +DON PEDRO +Thou wilt be like a lover presently +And tire the hearer with a book of words. +If thou dost love fair Hero, cherish it, +And I will break with her and with her father, +And thou shalt have her. Was't not to this end +That thou began'st to twist so fine a story? + + + +CLAUDIO +How sweetly you do minister to love, +That know love's grief by his complexion! +But lest my liking might too sudden seem, +I would have salved it with a longer treatise. + + + +DON PEDRO +What need the bridge much broader than the flood? +The fairest grant is the necessity. +Look, what will serve is fit: 'tis once, thou lovest, +And I will fit thee with the remedy. +I know we shall have revelling to-night: +I will assume thy part in some disguise +And tell fair Hero I am Claudio, +And in her bosom I'll unclasp my heart +And take her hearing prisoner with the force +And strong encounter of my amorous tale: +Then after to her father will I break; +And the conclusion is, she shall be thine. +In practise let us put it presently. + + + +Exeunt + + +SCENE II. A room in LEONATO's house. +Enter LEONATO and ANTONIO, meeting + + +LEONATO +How now, brother! Where is my cousin, your son? +hath he provided this music? + + + +ANTONIO +He is very busy about it. But, brother, I can tell +you strange news that you yet dreamt not of. + + + +LEONATO +Are they good? + + + +ANTONIO +As the event stamps them: but they have a good +cover; they show well outward. The prince and Count +Claudio, walking in a thick-pleached alley in mine +orchard, were thus much overheard by a man of mine: +the prince discovered to Claudio that he loved my +niece your daughter and meant to acknowledge it +this night in a dance: and if he found her +accordant, he meant to take the present time by the +top and instantly break with you of it. + + + +LEONATO +Hath the fellow any wit that told you this? + + + +ANTONIO +A good sharp fellow: I will send for him; and +question him yourself. + + + +LEONATO +No, no; we will hold it as a dream till it appear +itself: but I will acquaint my daughter withal, +that she may be the better prepared for an answer, +if peradventure this be true. Go you and tell her of it. +Enter Attendants +Cousins, you know what you have to do. O, I cry you +mercy, friend; go you with me, and I will use your +skill. Good cousin, have a care this busy time. + + + +Exeunt + + +SCENE III. The same. +Enter DON JOHN and CONRADE + + +CONRADE +What the good-year, my lord! why are you thus out +of measure sad? + + + +DON JOHN +There is no measure in the occasion that breeds; +therefore the sadness is without limit. + + + +CONRADE +You should hear reason. + + + +DON JOHN +And when I have heard it, what blessing brings it? + + + +CONRADE +If not a present remedy, at least a patient +sufferance. + + + +DON JOHN +I wonder that thou, being, as thou sayest thou art, +born under Saturn, goest about to apply a moral +medicine to a mortifying mischief. I cannot hide +what I am: I must be sad when I have cause and smile +at no man's jests, eat when I have stomach and wait +for no man's leisure, sleep when I am drowsy and +tend on no man's business, laugh when I am merry and +claw no man in his humour. + + + +CONRADE +Yea, but you must not make the full show of this +till you may do it without controlment. You have of +late stood out against your brother, and he hath +ta'en you newly into his grace; where it is +impossible you should take true root but by the +fair weather that you make yourself: it is needful +that you frame the season for your own harvest. + + + +DON JOHN +I had rather be a canker in a hedge than a rose in +his grace, and it better fits my blood to be +disdained of all than to fashion a carriage to rob +love from any: in this, though I cannot be said to +be a flattering honest man, it must not be denied +but I am a plain-dealing villain. I am trusted with +a muzzle and enfranchised with a clog; therefore I +have decreed not to sing in my cage. If I had my +mouth, I would bite; if I had my liberty, I would do +my liking: in the meantime let me be that I am and +seek not to alter me. + + + +CONRADE +Can you make no use of your discontent? + + + +DON JOHN +I make all use of it, for I use it only. +Who comes here? +Enter BORACHIO +What news, Borachio? + + + +BORACHIO +I came yonder from a great supper: the prince your +brother is royally entertained by Leonato: and I +can give you intelligence of an intended marriage. + + + +DON JOHN +Will it serve for any model to build mischief on? +What is he for a fool that betroths himself to +unquietness? + + + +BORACHIO +Marry, it is your brother's right hand. + + + +DON JOHN +Who? the most exquisite Claudio? + + + +BORACHIO +Even he. + + + +DON JOHN +A proper squire! And who, and who? which way looks +he? + + + +BORACHIO +Marry, on Hero, the daughter and heir of Leonato. + + + +DON JOHN +A very forward March-chick! How came you to this? + + + +BORACHIO +Being entertained for a perfumer, as I was smoking a +musty room, comes me the prince and Claudio, hand +in hand in sad conference: I whipt me behind the +arras; and there heard it agreed upon that the +prince should woo Hero for himself, and having +obtained her, give her to Count Claudio. + + + +DON JOHN +Come, come, let us thither: this may prove food to +my displeasure. That young start-up hath all the +glory of my overthrow: if I can cross him any way, I +bless myself every way. You are both sure, and will assist me? + + + +CONRADE +To the death, my lord. + + + +DON JOHN +Let us to the great supper: their cheer is the +greater that I am subdued. Would the cook were of +my mind! Shall we go prove what's to be done? + + + +BORACHIO +We'll wait upon your lordship. + + + +Exeunt + + + + +ACT II + +SCENE I. A hall in LEONATO'S house. +Enter LEONATO, ANTONIO, HERO, BEATRICE, and others + + +LEONATO +Was not Count John here at supper? + + + +ANTONIO +I saw him not. + + + +BEATRICE +How tartly that gentleman looks! I never can see +him but I am heart-burned an hour after. + + + +HERO +He is of a very melancholy disposition. + + + +BEATRICE +He were an excellent man that were made just in the +midway between him and Benedick: the one is too +like an image and says nothing, and the other too +like my lady's eldest son, evermore tattling. + + + +LEONATO +Then half Signior Benedick's tongue in Count John's +mouth, and half Count John's melancholy in Signior +Benedick's face,-- + + + +BEATRICE +With a good leg and a good foot, uncle, and money +enough in his purse, such a man would win any woman +in the world, if a' could get her good-will. + + + +LEONATO +By my troth, niece, thou wilt never get thee a +husband, if thou be so shrewd of thy tongue. + + + +ANTONIO +In faith, she's too curst. + + + +BEATRICE +Too curst is more than curst: I shall lessen God's +sending that way; for it is said, 'God sends a curst +cow short horns;' but to a cow too curst he sends none. + + + +LEONATO +So, by being too curst, God will send you no horns. + + + +BEATRICE +Just, if he send me no husband; for the which +blessing I am at him upon my knees every morning and +evening. Lord, I could not endure a husband with a +beard on his face: I had rather lie in the woollen. + + + +LEONATO +You may light on a husband that hath no beard. + + + +BEATRICE +What should I do with him? dress him in my apparel +and make him my waiting-gentlewoman? He that hath a +beard is more than a youth, and he that hath no +beard is less than a man: and he that is more than +a youth is not for me, and he that is less than a +man, I am not for him: therefore, I will even take +sixpence in earnest of the bear-ward, and lead his +apes into hell. + + + +LEONATO +Well, then, go you into hell? + + + +BEATRICE +No, but to the gate; and there will the devil meet +me, like an old cuckold, with horns on his head, and +say 'Get you to heaven, Beatrice, get you to +heaven; here's no place for you maids:' so deliver +I up my apes, and away to Saint Peter for the +heavens; he shows me where the bachelors sit, and +there live we as merry as the day is long. + + + +ANTONIO +To HERO Well, niece, I trust you will be ruled +by your father. + + + +BEATRICE +Yes, faith; it is my cousin's duty to make curtsy +and say 'Father, as it please you.' But yet for all +that, cousin, let him be a handsome fellow, or else +make another curtsy and say 'Father, as it please +me.' + + + +LEONATO +Well, niece, I hope to see you one day fitted with a husband. + + + +BEATRICE +Not till God make men of some other metal than +earth. Would it not grieve a woman to be +overmastered with a pierce of valiant dust? to make +an account of her life to a clod of wayward marl? +No, uncle, I'll none: Adam's sons are my brethren; +and, truly, I hold it a sin to match in my kindred. + + + +LEONATO +Daughter, remember what I told you: if the prince +do solicit you in that kind, you know your answer. + + + +BEATRICE +The fault will be in the music, cousin, if you be +not wooed in good time: if the prince be too +important, tell him there is measure in every thing +and so dance out the answer. For, hear me, Hero: +wooing, wedding, and repenting, is as a Scotch jig, +a measure, and a cinque pace: the first suit is hot +and hasty, like a Scotch jig, and full as +fantastical; the wedding, mannerly-modest, as a +measure, full of state and ancientry; and then comes +repentance and, with his bad legs, falls into the +cinque pace faster and faster, till he sink into his grave. + + + +LEONATO +Cousin, you apprehend passing shrewdly. + + + +BEATRICE +I have a good eye, uncle; I can see a church by daylight. + + + +LEONATO +The revellers are entering, brother: make good room. + + +All put on their masks +Enter DON PEDRO, CLAUDIO, BENEDICK, BALTHASAR, +DON JOHN, BORACHIO, MARGARET, URSULA and others, masked + + +DON PEDRO +Lady, will you walk about with your friend? + + + +HERO +So you walk softly and look sweetly and say nothing, +I am yours for the walk; and especially when I walk away. + + + +DON PEDRO +With me in your company? + + + +HERO +I may say so, when I please. + + + +DON PEDRO +And when please you to say so? + + + +HERO +When I like your favour; for God defend the lute +should be like the case! + + + +DON PEDRO +My visor is Philemon's roof; within the house is Jove. + + + +HERO +Why, then, your visor should be thatched. + + + +DON PEDRO +Speak low, if you speak love. + + + +Drawing her aside + + +BALTHASAR +Well, I would you did like me. + + + +MARGARET +So would not I, for your own sake; for I have many +ill-qualities. + + + +BALTHASAR +Which is one? + + + +MARGARET +I say my prayers aloud. + + + +BALTHASAR +I love you the better: the hearers may cry, Amen. + + + +MARGARET +God match me with a good dancer! + + + +BALTHASAR +Amen. + + + +MARGARET +And God keep him out of my sight when the dance is +done! Answer, clerk. + + + +BALTHASAR +No more words: the clerk is answered. + + + +URSULA +I know you well enough; you are Signior Antonio. + + + +ANTONIO +At a word, I am not. + + + +URSULA +I know you by the waggling of your head. + + + +ANTONIO +To tell you true, I counterfeit him. + + + +URSULA +You could never do him so ill-well, unless you were +the very man. Here's his dry hand up and down: you +are he, you are he. + + + +ANTONIO +At a word, I am not. + + + +URSULA +Come, come, do you think I do not know you by your +excellent wit? can virtue hide itself? Go to, +mum, you are he: graces will appear, and there's an +end. + + + +BEATRICE +Will you not tell me who told you so? + + + +BENEDICK +No, you shall pardon me. + + + +BEATRICE +Nor will you not tell me who you are? + + + +BENEDICK +Not now. + + + +BEATRICE +That I was disdainful, and that I had my good wit +out of the 'Hundred Merry Tales:'--well this was +Signior Benedick that said so. + + + +BENEDICK +What's he? + + + +BEATRICE +I am sure you know him well enough. + + + +BENEDICK +Not I, believe me. + + + +BEATRICE +Did he never make you laugh? + + + +BENEDICK +I pray you, what is he? + + + +BEATRICE +Why, he is the prince's jester: a very dull fool; +only his gift is in devising impossible slanders: +none but libertines delight in him; and the +commendation is not in his wit, but in his villany; +for he both pleases men and angers them, and then +they laugh at him and beat him. I am sure he is in +the fleet: I would he had boarded me. + + + +BENEDICK +When I know the gentleman, I'll tell him what you say. + + + +BEATRICE +Do, do: he'll but break a comparison or two on me; +which, peradventure not marked or not laughed at, +strikes him into melancholy; and then there's a +partridge wing saved, for the fool will eat no +supper that night. +Music +We must follow the leaders. + + + +BENEDICK +In every good thing. + + + +BEATRICE +Nay, if they lead to any ill, I will leave them at +the next turning. + + + +Dance. Then exeunt all except DON JOHN, BORACHIO, +and CLAUDIO + + +DON JOHN +Sure my brother is amorous on Hero and hath +withdrawn her father to break with him about it. +The ladies follow her and but one visor remains. + + + +BORACHIO +And that is Claudio: I know him by his bearing. + + + +DON JOHN +Are not you Signior Benedick? + + + +CLAUDIO +You know me well; I am he. + + + +DON JOHN +Signior, you are very near my brother in his love: +he is enamoured on Hero; I pray you, dissuade him +from her: she is no equal for his birth: you may +do the part of an honest man in it. + + + +CLAUDIO +How know you he loves her? + + + +DON JOHN +I heard him swear his affection. + + + +BORACHIO +So did I too; and he swore he would marry her to-night. + + + +DON JOHN +Come, let us to the banquet. + + + +Exeunt DON JOHN and BORACHIO + + +CLAUDIO +Thus answer I in the name of Benedick, +But hear these ill news with the ears of Claudio. +'Tis certain so; the prince wooes for himself. +Friendship is constant in all other things +Save in the office and affairs of love: +Therefore, all hearts in love use their own tongues; +Let every eye negotiate for itself +And trust no agent; for beauty is a witch +Against whose charms faith melteth into blood. +This is an accident of hourly proof, +Which I mistrusted not. Farewell, therefore, Hero! + + + +Re-enter BENEDICK + + +BENEDICK +Count Claudio? + + + +CLAUDIO +Yea, the same. + + + +BENEDICK +Come, will you go with me? + + + +CLAUDIO +Whither? + + + +BENEDICK +Even to the next willow, about your own business, +county. What fashion will you wear the garland of? +about your neck, like an usurer's chain? or under +your arm, like a lieutenant's scarf? You must wear +it one way, for the prince hath got your Hero. + + + +CLAUDIO +I wish him joy of her. + + + +BENEDICK +Why, that's spoken like an honest drovier: so they +sell bullocks. But did you think the prince would +have served you thus? + + + +CLAUDIO +I pray you, leave me. + + + +BENEDICK +Ho! now you strike like the blind man: 'twas the +boy that stole your meat, and you'll beat the post. + + + +CLAUDIO +If it will not be, I'll leave you. + + + +Exit + + +BENEDICK +Alas, poor hurt fowl! now will he creep into sedges. +But that my Lady Beatrice should know me, and not +know me! The prince's fool! Ha? It may be I go +under that title because I am merry. Yea, but so I +am apt to do myself wrong; I am not so reputed: it +is the base, though bitter, disposition of Beatrice +that puts the world into her person and so gives me +out. Well, I'll be revenged as I may. + + + +Re-enter DON PEDRO + + +DON PEDRO +Now, signior, where's the count? did you see him? + + + +BENEDICK +Troth, my lord, I have played the part of Lady Fame. +I found him here as melancholy as a lodge in a +warren: I told him, and I think I told him true, +that your grace had got the good will of this young +lady; and I offered him my company to a willow-tree, +either to make him a garland, as being forsaken, or +to bind him up a rod, as being worthy to be whipped. + + + +DON PEDRO +To be whipped! What's his fault? + + + +BENEDICK +The flat transgression of a schoolboy, who, being +overjoyed with finding a birds' nest, shows it his +companion, and he steals it. + + + +DON PEDRO +Wilt thou make a trust a transgression? The +transgression is in the stealer. + + + +BENEDICK +Yet it had not been amiss the rod had been made, +and the garland too; for the garland he might have +worn himself, and the rod he might have bestowed on +you, who, as I take it, have stolen his birds' nest. + + + +DON PEDRO +I will but teach them to sing, and restore them to +the owner. + + + +BENEDICK +If their singing answer your saying, by my faith, +you say honestly. + + + +DON PEDRO +The Lady Beatrice hath a quarrel to you: the +gentleman that danced with her told her she is much +wronged by you. + + + +BENEDICK +O, she misused me past the endurance of a block! +an oak but with one green leaf on it would have +answered her; my very visor began to assume life and +scold with her. She told me, not thinking I had been +myself, that I was the prince's jester, that I was +duller than a great thaw; huddling jest upon jest +with such impossible conveyance upon me that I stood +like a man at a mark, with a whole army shooting at +me. She speaks poniards, and every word stabs: +if her breath were as terrible as her terminations, +there were no living near her; she would infect to +the north star. I would not marry her, though she +were endowed with all that Adam bad left him before +he transgressed: she would have made Hercules have +turned spit, yea, and have cleft his club to make +the fire too. Come, talk not of her: you shall find +her the infernal Ate in good apparel. I would to God +some scholar would conjure her; for certainly, while +she is here, a man may live as quiet in hell as in a +sanctuary; and people sin upon purpose, because they +would go thither; so, indeed, all disquiet, horror +and perturbation follows her. + + + +DON PEDRO +Look, here she comes. + + + +Enter CLAUDIO, BEATRICE, HERO, and LEONATO + + +BENEDICK +Will your grace command me any service to the +world's end? I will go on the slightest errand now +to the Antipodes that you can devise to send me on; +I will fetch you a tooth-picker now from the +furthest inch of Asia, bring you the length of +Prester John's foot, fetch you a hair off the great +Cham's beard, do you any embassage to the Pigmies, +rather than hold three words' conference with this +harpy. You have no employment for me? + + + +DON PEDRO +None, but to desire your good company. + + + +BENEDICK +O God, sir, here's a dish I love not: I cannot +endure my Lady Tongue. + + + +Exit + + +DON PEDRO +Come, lady, come; you have lost the heart of +Signior Benedick. + + + +BEATRICE +Indeed, my lord, he lent it me awhile; and I gave +him use for it, a double heart for his single one: +marry, once before he won it of me with false dice, +therefore your grace may well say I have lost it. + + + +DON PEDRO +You have put him down, lady, you have put him down. + + + +BEATRICE +So I would not he should do me, my lord, lest I +should prove the mother of fools. I have brought +Count Claudio, whom you sent me to seek. + + + +DON PEDRO +Why, how now, count! wherefore are you sad? + + + +CLAUDIO +Not sad, my lord. + + + +DON PEDRO +How then? sick? + + + +CLAUDIO +Neither, my lord. + + + +BEATRICE +The count is neither sad, nor sick, nor merry, nor +well; but civil count, civil as an orange, and +something of that jealous complexion. + + + +DON PEDRO +I' faith, lady, I think your blazon to be true; +though, I'll be sworn, if he be so, his conceit is +false. Here, Claudio, I have wooed in thy name, and +fair Hero is won: I have broke with her father, +and his good will obtained: name the day of +marriage, and God give thee joy! + + + +LEONATO +Count, take of me my daughter, and with her my +fortunes: his grace hath made the match, and an +grace say Amen to it. + + + +BEATRICE +Speak, count, 'tis your cue. + + + +CLAUDIO +Silence is the perfectest herald of joy: I were +but little happy, if I could say how much. Lady, as +you are mine, I am yours: I give away myself for +you and dote upon the exchange. + + + +BEATRICE +Speak, cousin; or, if you cannot, stop his mouth +with a kiss, and let not him speak neither. + + + +DON PEDRO +In faith, lady, you have a merry heart. + + + +BEATRICE +Yea, my lord; I thank it, poor fool, it keeps on +the windy side of care. My cousin tells him in his +ear that he is in her heart. + + + +CLAUDIO +And so she doth, cousin. + + + +BEATRICE +Good Lord, for alliance! Thus goes every one to the +world but I, and I am sunburnt; I may sit in a +corner and cry heigh-ho for a husband! + + + +DON PEDRO +Lady Beatrice, I will get you one. + + + +BEATRICE +I would rather have one of your father's getting. +Hath your grace ne'er a brother like you? Your +father got excellent husbands, if a maid could come by them. + + + +DON PEDRO +Will you have me, lady? + + + +BEATRICE +No, my lord, unless I might have another for +working-days: your grace is too costly to wear +every day. But, I beseech your grace, pardon me: I +was born to speak all mirth and no matter. + + + +DON PEDRO +Your silence most offends me, and to be merry best +becomes you; for, out of question, you were born in +a merry hour. + + + +BEATRICE +No, sure, my lord, my mother cried; but then there +was a star danced, and under that was I born. +Cousins, God give you joy! + + + +LEONATO +Niece, will you look to those things I told you of? + + + +BEATRICE +I cry you mercy, uncle. By your grace's pardon. + + + +Exit + + +DON PEDRO +By my troth, a pleasant-spirited lady. + + + +LEONATO +There's little of the melancholy element in her, my +lord: she is never sad but when she sleeps, and +not ever sad then; for I have heard my daughter say, +she hath often dreamed of unhappiness and waked +herself with laughing. + + + +DON PEDRO +She cannot endure to hear tell of a husband. + + + +LEONATO +O, by no means: she mocks all her wooers out of suit. + + + +DON PEDRO +She were an excellent wife for Benedict. + + + +LEONATO +O Lord, my lord, if they were but a week married, +they would talk themselves mad. + + + +DON PEDRO +County Claudio, when mean you to go to church? + + + +CLAUDIO +To-morrow, my lord: time goes on crutches till love +have all his rites. + + + +LEONATO +Not till Monday, my dear son, which is hence a just +seven-night; and a time too brief, too, to have all +things answer my mind. + + + +DON PEDRO +Come, you shake the head at so long a breathing: +but, I warrant thee, Claudio, the time shall not go +dully by us. I will in the interim undertake one of +Hercules' labours; which is, to bring Signior +Benedick and the Lady Beatrice into a mountain of +affection the one with the other. I would fain have +it a match, and I doubt not but to fashion it, if +you three will but minister such assistance as I +shall give you direction. + + + +LEONATO +My lord, I am for you, though it cost me ten +nights' watchings. + + + +CLAUDIO +And I, my lord. + + + +DON PEDRO +And you too, gentle Hero? + + + +HERO +I will do any modest office, my lord, to help my +cousin to a good husband. + + + +DON PEDRO +And Benedick is not the unhopefullest husband that +I know. Thus far can I praise him; he is of a noble +strain, of approved valour and confirmed honesty. I +will teach you how to humour your cousin, that she +shall fall in love with Benedick; and I, with your +two helps, will so practise on Benedick that, in +despite of his quick wit and his queasy stomach, he +shall fall in love with Beatrice. If we can do this, +Cupid is no longer an archer: his glory shall be +ours, for we are the only love-gods. Go in with me, +and I will tell you my drift. + + + +Exeunt + + +SCENE II. The same. +Enter DON JOHN and BORACHIO + + +DON JOHN +It is so; the Count Claudio shall marry the +daughter of Leonato. + + + +BORACHIO +Yea, my lord; but I can cross it. + + + +DON JOHN +Any bar, any cross, any impediment will be +medicinable to me: I am sick in displeasure to him, +and whatsoever comes athwart his affection ranges +evenly with mine. How canst thou cross this marriage? + + + +BORACHIO +Not honestly, my lord; but so covertly that no +dishonesty shall appear in me. + + + +DON JOHN +Show me briefly how. + + + +BORACHIO +I think I told your lordship a year since, how much +I am in the favour of Margaret, the waiting +gentlewoman to Hero. + + + +DON JOHN +I remember. + + + +BORACHIO +I can, at any unseasonable instant of the night, +appoint her to look out at her lady's chamber window. + + + +DON JOHN +What life is in that, to be the death of this marriage? + + + +BORACHIO +The poison of that lies in you to temper. Go you to +the prince your brother; spare not to tell him that +he hath wronged his honour in marrying the renowned +Claudio--whose estimation do you mightily hold +up--to a contaminated stale, such a one as Hero. + + + +DON JOHN +What proof shall I make of that? + + + +BORACHIO +Proof enough to misuse the prince, to vex Claudio, +to undo Hero and kill Leonato. Look you for any +other issue? + + + +DON JOHN +Only to despite them, I will endeavour any thing. + + + +BORACHIO +Go, then; find me a meet hour to draw Don Pedro and +the Count Claudio alone: tell them that you know +that Hero loves me; intend a kind of zeal both to the +prince and Claudio, as,--in love of your brother's +honour, who hath made this match, and his friend's +reputation, who is thus like to be cozened with the +semblance of a maid,--that you have discovered +thus. They will scarcely believe this without trial: +offer them instances; which shall bear no less +likelihood than to see me at her chamber-window, +hear me call Margaret Hero, hear Margaret term me +Claudio; and bring them to see this the very night +before the intended wedding,--for in the meantime I +will so fashion the matter that Hero shall be +absent,--and there shall appear such seeming truth +of Hero's disloyalty that jealousy shall be called +assurance and all the preparation overthrown. + + + +DON JOHN +Grow this to what adverse issue it can, I will put +it in practise. Be cunning in the working this, and +thy fee is a thousand ducats. + + + +BORACHIO +Be you constant in the accusation, and my cunning +shall not shame me. + + + +DON JOHN +I will presently go learn their day of marriage. + + + +Exeunt + + +SCENE III. LEONATO'S orchard. +Enter BENEDICK + + +BENEDICK +Boy! + + + +Enter Boy + + +Boy +Signior? + + + +BENEDICK +In my chamber-window lies a book: bring it hither +to me in the orchard. + + + +Boy +I am here already, sir. + + + +BENEDICK +I know that; but I would have thee hence, and here again. +Exit Boy +I do much wonder that one man, seeing how much +another man is a fool when he dedicates his +behaviors to love, will, after he hath laughed at +such shallow follies in others, become the argument +of his own scorn by failing in love: and such a man +is Claudio. I have known when there was no music +with him but the drum and the fife; and now had he +rather hear the tabour and the pipe: I have known +when he would have walked ten mile a-foot to see a +good armour; and now will he lie ten nights awake, +carving the fashion of a new doublet. He was wont to +speak plain and to the purpose, like an honest man +and a soldier; and now is he turned orthography; his +words are a very fantastical banquet, just so many +strange dishes. May I be so converted and see with +these eyes? I cannot tell; I think not: I will not +be sworn, but love may transform me to an oyster; but +I'll take my oath on it, till he have made an oyster +of me, he shall never make me such a fool. One woman +is fair, yet I am well; another is wise, yet I am +well; another virtuous, yet I am well; but till all +graces be in one woman, one woman shall not come in +my grace. Rich she shall be, that's certain; wise, +or I'll none; virtuous, or I'll never cheapen her; +fair, or I'll never look on her; mild, or come not +near me; noble, or not I for an angel; of good +discourse, an excellent musician, and her hair shall +be of what colour it please God. Ha! the prince and +Monsieur Love! I will hide me in the arbour. + + +Withdraws +Enter DON PEDRO, CLAUDIO, and LEONATO + + +DON PEDRO +Come, shall we hear this music? + + + +CLAUDIO +Yea, my good lord. How still the evening is, +As hush'd on purpose to grace harmony! + + + +DON PEDRO +See you where Benedick hath hid himself? + + + +CLAUDIO +O, very well, my lord: the music ended, +We'll fit the kid-fox with a pennyworth. + + + +Enter BALTHASAR with Music + + +DON PEDRO +Come, Balthasar, we'll hear that song again. + + + +BALTHASAR +O, good my lord, tax not so bad a voice +To slander music any more than once. + + + +DON PEDRO +It is the witness still of excellency +To put a strange face on his own perfection. +I pray thee, sing, and let me woo no more. + + + +BALTHASAR +Because you talk of wooing, I will sing; +Since many a wooer doth commence his suit +To her he thinks not worthy, yet he wooes, +Yet will he swear he loves. + + + +DON PEDRO +Now, pray thee, come; +Or, if thou wilt hold longer argument, +Do it in notes. + + + +BALTHASAR +Note this before my notes; +There's not a note of mine that's worth the noting. + + + +DON PEDRO +Why, these are very crotchets that he speaks; +Note, notes, forsooth, and nothing. + + + +Air + + +BENEDICK +Now, divine air! now is his soul ravished! Is it +not strange that sheeps' guts should hale souls out +of men's bodies? Well, a horn for my money, when +all's done. + + + +The Song + + +BALTHASAR +Sigh no more, ladies, sigh no more, +Men were deceivers ever, +One foot in sea and one on shore, +To one thing constant never: +Then sigh not so, but let them go, +And be you blithe and bonny, +Converting all your sounds of woe +Into Hey nonny, nonny. +Sing no more ditties, sing no moe, +Of dumps so dull and heavy; +The fraud of men was ever so, +Since summer first was leafy: +Then sigh not so, &c. + + + +DON PEDRO +By my troth, a good song. + + + +BALTHASAR +And an ill singer, my lord. + + + +DON PEDRO +Ha, no, no, faith; thou singest well enough for a shift. + + + +BENEDICK +An he had been a dog that should have howled thus, +they would have hanged him: and I pray God his bad +voice bode no mischief. I had as lief have heard the +night-raven, come what plague could have come after +it. + + + +DON PEDRO +Yea, marry, dost thou hear, Balthasar? I pray thee, +get us some excellent music; for to-morrow night we +would have it at the Lady Hero's chamber-window. + + + +BALTHASAR +The best I can, my lord. + + + +DON PEDRO +Do so: farewell. +Exit BALTHASAR +Come hither, Leonato. What was it you told me of +to-day, that your niece Beatrice was in love with +Signior Benedick? + + + +CLAUDIO +O, ay: stalk on. stalk on; the fowl sits. I did +never think that lady would have loved any man. + + + +LEONATO +No, nor I neither; but most wonderful that she +should so dote on Signior Benedick, whom she hath in +all outward behaviors seemed ever to abhor. + + + +BENEDICK +Is't possible? Sits the wind in that corner? + + + +LEONATO +By my troth, my lord, I cannot tell what to think +of it but that she loves him with an enraged +affection: it is past the infinite of thought. + + + +DON PEDRO +May be she doth but counterfeit. + + + +CLAUDIO +Faith, like enough. + + + +LEONATO +O God, counterfeit! There was never counterfeit of +passion came so near the life of passion as she +discovers it. + + + +DON PEDRO +Why, what effects of passion shows she? + + + +CLAUDIO +Bait the hook well; this fish will bite. + + + +LEONATO +What effects, my lord? She will sit you, you heard +my daughter tell you how. + + + +CLAUDIO +She did, indeed. + + + +DON PEDRO +How, how, pray you? You amaze me: I would have I +thought her spirit had been invincible against all +assaults of affection. + + + +LEONATO +I would have sworn it had, my lord; especially +against Benedick. + + + +BENEDICK +I should think this a gull, but that the +white-bearded fellow speaks it: knavery cannot, +sure, hide himself in such reverence. + + + +CLAUDIO +He hath ta'en the infection: hold it up. + + + +DON PEDRO +Hath she made her affection known to Benedick? + + + +LEONATO +No; and swears she never will: that's her torment. + + + +CLAUDIO +'Tis true, indeed; so your daughter says: 'Shall +I,' says she, 'that have so oft encountered him +with scorn, write to him that I love him?' + + + +LEONATO +This says she now when she is beginning to write to +him; for she'll be up twenty times a night, and +there will she sit in her smock till she have writ a +sheet of paper: my daughter tells us all. + + + +CLAUDIO +Now you talk of a sheet of paper, I remember a +pretty jest your daughter told us of. + + + +LEONATO +O, when she had writ it and was reading it over, she +found Benedick and Beatrice between the sheet? + + + +CLAUDIO +That. + + + +LEONATO +O, she tore the letter into a thousand halfpence; +railed at herself, that she should be so immodest +to write to one that she knew would flout her; 'I +measure him,' says she, 'by my own spirit; for I +should flout him, if he writ to me; yea, though I +love him, I should.' + + + +CLAUDIO +Then down upon her knees she falls, weeps, sobs, +beats her heart, tears her hair, prays, curses; 'O +sweet Benedick! God give me patience!' + + + +LEONATO +She doth indeed; my daughter says so: and the +ecstasy hath so much overborne her that my daughter +is sometime afeared she will do a desperate outrage +to herself: it is very true. + + + +DON PEDRO +It were good that Benedick knew of it by some +other, if she will not discover it. + + + +CLAUDIO +To what end? He would make but a sport of it and +torment the poor lady worse. + + + +DON PEDRO +An he should, it were an alms to hang him. She's an +excellent sweet lady; and, out of all suspicion, +she is virtuous. + + + +CLAUDIO +And she is exceeding wise. + + + +DON PEDRO +In every thing but in loving Benedick. + + + +LEONATO +O, my lord, wisdom and blood combating in so tender +a body, we have ten proofs to one that blood hath +the victory. I am sorry for her, as I have just +cause, being her uncle and her guardian. + + + +DON PEDRO +I would she had bestowed this dotage on me: I would +have daffed all other respects and made her half +myself. I pray you, tell Benedick of it, and hear +what a' will say. + + + +LEONATO +Were it good, think you? + + + +CLAUDIO +Hero thinks surely she will die; for she says she +will die, if he love her not, and she will die, ere +she make her love known, and she will die, if he woo +her, rather than she will bate one breath of her +accustomed crossness. + + + +DON PEDRO +She doth well: if she should make tender of her +love, 'tis very possible he'll scorn it; for the +man, as you know all, hath a contemptible spirit. + + + +CLAUDIO +He is a very proper man. + + + +DON PEDRO +He hath indeed a good outward happiness. + + + +CLAUDIO +Before God! and, in my mind, very wise. + + + +DON PEDRO +He doth indeed show some sparks that are like wit. + + + +CLAUDIO +And I take him to be valiant. + + + +DON PEDRO +As Hector, I assure you: and in the managing of +quarrels you may say he is wise; for either he +avoids them with great discretion, or undertakes +them with a most Christian-like fear. + + + +LEONATO +If he do fear God, a' must necessarily keep peace: +if he break the peace, he ought to enter into a +quarrel with fear and trembling. + + + +DON PEDRO +And so will he do; for the man doth fear God, +howsoever it seems not in him by some large jests +he will make. Well I am sorry for your niece. Shall +we go seek Benedick, and tell him of her love? + + + +CLAUDIO +Never tell him, my lord: let her wear it out with +good counsel. + + + +LEONATO +Nay, that's impossible: she may wear her heart out first. + + + +DON PEDRO +Well, we will hear further of it by your daughter: +let it cool the while. I love Benedick well; and I +could wish he would modestly examine himself, to see +how much he is unworthy so good a lady. + + + +LEONATO +My lord, will you walk? dinner is ready. + + + +CLAUDIO +If he do not dote on her upon this, I will never +trust my expectation. + + + +DON PEDRO +Let there be the same net spread for her; and that +must your daughter and her gentlewomen carry. The +sport will be, when they hold one an opinion of +another's dotage, and no such matter: that's the +scene that I would see, which will be merely a +dumb-show. Let us send her to call him in to dinner. + + + +Exeunt DON PEDRO, CLAUDIO, and LEONATO + + +BENEDICK +Coming forward This can be no trick: the +conference was sadly borne. They have the truth of +this from Hero. They seem to pity the lady: it +seems her affections have their full bent. Love me! +why, it must be requited. I hear how I am censured: +they say I will bear myself proudly, if I perceive +the love come from her; they say too that she will +rather die than give any sign of affection. I did +never think to marry: I must not seem proud: happy +are they that hear their detractions and can put +them to mending. They say the lady is fair; 'tis a +truth, I can bear them witness; and virtuous; 'tis +so, I cannot reprove it; and wise, but for loving +me; by my troth, it is no addition to her wit, nor +no great argument of her folly, for I will be +horribly in love with her. I may chance have some +odd quirks and remnants of wit broken on me, +because I have railed so long against marriage: but +doth not the appetite alter? a man loves the meat +in his youth that he cannot endure in his age. +Shall quips and sentences and these paper bullets of +the brain awe a man from the career of his humour? +No, the world must be peopled. When I said I would +die a bachelor, I did not think I should live till I +were married. Here comes Beatrice. By this day! +she's a fair lady: I do spy some marks of love in +her. + + + +Enter BEATRICE + + +BEATRICE +Against my will I am sent to bid you come in to dinner. + + + +BENEDICK +Fair Beatrice, I thank you for your pains. + + + +BEATRICE +I took no more pains for those thanks than you take +pains to thank me: if it had been painful, I would +not have come. + + + +BENEDICK +You take pleasure then in the message? + + + +BEATRICE +Yea, just so much as you may take upon a knife's +point and choke a daw withal. You have no stomach, +signior: fare you well. + + + +Exit + + +BENEDICK +Ha! 'Against my will I am sent to bid you come in +to dinner;' there's a double meaning in that 'I took +no more pains for those thanks than you took pains +to thank me.' that's as much as to say, Any pains +that I take for you is as easy as thanks. If I do +not take pity of her, I am a villain; if I do not +love her, I am a Jew. I will go get her picture. + + + +Exit + + + + +ACT III + +SCENE I. LEONATO'S garden. +Enter HERO, MARGARET, and URSULA + + +HERO +Good Margaret, run thee to the parlor; +There shalt thou find my cousin Beatrice +Proposing with the prince and Claudio: +Whisper her ear and tell her, I and Ursula +Walk in the orchard and our whole discourse +Is all of her; say that thou overheard'st us; +And bid her steal into the pleached bower, +Where honeysuckles, ripen'd by the sun, +Forbid the sun to enter, like favourites, +Made proud by princes, that advance their pride +Against that power that bred it: there will she hide her, +To listen our purpose. This is thy office; +Bear thee well in it and leave us alone. + + + +MARGARET +I'll make her come, I warrant you, presently. + + + +Exit + + +HERO +Now, Ursula, when Beatrice doth come, +As we do trace this alley up and down, +Our talk must only be of Benedick. +When I do name him, let it be thy part +To praise him more than ever man did merit: +My talk to thee must be how Benedick +Is sick in love with Beatrice. Of this matter +Is little Cupid's crafty arrow made, +That only wounds by hearsay. +Enter BEATRICE, behind +Now begin; +For look where Beatrice, like a lapwing, runs +Close by the ground, to hear our conference. + + + +URSULA +The pleasant'st angling is to see the fish +Cut with her golden oars the silver stream, +And greedily devour the treacherous bait: +So angle we for Beatrice; who even now +Is couched in the woodbine coverture. +Fear you not my part of the dialogue. + + + +HERO +Then go we near her, that her ear lose nothing +Of the false sweet bait that we lay for it. +Approaching the bower +No, truly, Ursula, she is too disdainful; +I know her spirits are as coy and wild +As haggerds of the rock. + + + +URSULA +But are you sure +That Benedick loves Beatrice so entirely? + + + +HERO +So says the prince and my new-trothed lord. + + + +URSULA +And did they bid you tell her of it, madam? + + + +HERO +They did entreat me to acquaint her of it; +But I persuaded them, if they loved Benedick, +To wish him wrestle with affection, +And never to let Beatrice know of it. + + + +URSULA +Why did you so? Doth not the gentleman +Deserve as full as fortunate a bed +As ever Beatrice shall couch upon? + + + +HERO +O god of love! I know he doth deserve +As much as may be yielded to a man: +But Nature never framed a woman's heart +Of prouder stuff than that of Beatrice; +Disdain and scorn ride sparkling in her eyes, +Misprising what they look on, and her wit +Values itself so highly that to her +All matter else seems weak: she cannot love, +Nor take no shape nor project of affection, +She is so self-endeared. + + + +URSULA +Sure, I think so; +And therefore certainly it were not good +She knew his love, lest she make sport at it. + + + +HERO +Why, you speak truth. I never yet saw man, +How wise, how noble, young, how rarely featured, +But she would spell him backward: if fair-faced, +She would swear the gentleman should be her sister; +If black, why, Nature, drawing of an antique, +Made a foul blot; if tall, a lance ill-headed; +If low, an agate very vilely cut; +If speaking, why, a vane blown with all winds; +If silent, why, a block moved with none. +So turns she every man the wrong side out +And never gives to truth and virtue that +Which simpleness and merit purchaseth. + + + +URSULA +Sure, sure, such carping is not commendable. + + + +HERO +No, not to be so odd and from all fashions +As Beatrice is, cannot be commendable: +But who dare tell her so? If I should speak, +She would mock me into air; O, she would laugh me +Out of myself, press me to death with wit. +Therefore let Benedick, like cover'd fire, +Consume away in sighs, waste inwardly: +It were a better death than die with mocks, +Which is as bad as die with tickling. + + + +URSULA +Yet tell her of it: hear what she will say. + + + +HERO +No; rather I will go to Benedick +And counsel him to fight against his passion. +And, truly, I'll devise some honest slanders +To stain my cousin with: one doth not know +How much an ill word may empoison liking. + + + +URSULA +O, do not do your cousin such a wrong. +She cannot be so much without true judgment-- +Having so swift and excellent a wit +As she is prized to have--as to refuse +So rare a gentleman as Signior Benedick. + + + +HERO +He is the only man of Italy. +Always excepted my dear Claudio. + + + +URSULA +I pray you, be not angry with me, madam, +Speaking my fancy: Signior Benedick, +For shape, for bearing, argument and valour, +Goes foremost in report through Italy. + + + +HERO +Indeed, he hath an excellent good name. + + + +URSULA +His excellence did earn it, ere he had it. +When are you married, madam? + + + +HERO +Why, every day, to-morrow. Come, go in: +I'll show thee some attires, and have thy counsel +Which is the best to furnish me to-morrow. + + + +URSULA +She's limed, I warrant you: we have caught her, madam. + + + +HERO +If it proves so, then loving goes by haps: +Some Cupid kills with arrows, some with traps. + + + +Exeunt HERO and URSULA + + +BEATRICE +Coming forward +What fire is in mine ears? Can this be true? +Stand I condemn'd for pride and scorn so much? +Contempt, farewell! and maiden pride, adieu! +No glory lives behind the back of such. +And, Benedick, love on; I will requite thee, +Taming my wild heart to thy loving hand: +If thou dost love, my kindness shall incite thee +To bind our loves up in a holy band; +For others say thou dost deserve, and I +Believe it better than reportingly. + + + +Exit + + +SCENE II. A room in LEONATO'S house +Enter DON PEDRO, CLAUDIO, BENEDICK, and LEONATO + + +DON PEDRO +I do but stay till your marriage be consummate, and +then go I toward Arragon. + + + +CLAUDIO +I'll bring you thither, my lord, if you'll +vouchsafe me. + + + +DON PEDRO +Nay, that would be as great a soil in the new gloss +of your marriage as to show a child his new coat +and forbid him to wear it. I will only be bold +with Benedick for his company; for, from the crown +of his head to the sole of his foot, he is all +mirth: he hath twice or thrice cut Cupid's +bow-string and the little hangman dare not shoot at +him; he hath a heart as sound as a bell and his +tongue is the clapper, for what his heart thinks his +tongue speaks. + + + +BENEDICK +Gallants, I am not as I have been. + + + +LEONATO +So say I methinks you are sadder. + + + +CLAUDIO +I hope he be in love. + + + +DON PEDRO +Hang him, truant! there's no true drop of blood in +him, to be truly touched with love: if he be sad, +he wants money. + + + +BENEDICK +I have the toothache. + + + +DON PEDRO +Draw it. + + + +BENEDICK +Hang it! + + + +CLAUDIO +You must hang it first, and draw it afterwards. + + + +DON PEDRO +What! sigh for the toothache? + + + +LEONATO +Where is but a humour or a worm. + + + +BENEDICK +Well, every one can master a grief but he that has +it. + + + +CLAUDIO +Yet say I, he is in love. + + + +DON PEDRO +There is no appearance of fancy in him, unless it be +a fancy that he hath to strange disguises; as, to be +a Dutchman today, a Frenchman to-morrow, or in the +shape of two countries at once, as, a German from +the waist downward, all slops, and a Spaniard from +the hip upward, no doublet. Unless he have a fancy +to this foolery, as it appears he hath, he is no +fool for fancy, as you would have it appear he is. + + + +CLAUDIO +If he be not in love with some woman, there is no +believing old signs: a' brushes his hat o' +mornings; what should that bode? + + + +DON PEDRO +Hath any man seen him at the barber's? + + + +CLAUDIO +No, but the barber's man hath been seen with him, +and the old ornament of his cheek hath already +stuffed tennis-balls. + + + +LEONATO +Indeed, he looks younger than he did, by the loss of a beard. + + + +DON PEDRO +Nay, a' rubs himself with civet: can you smell him +out by that? + + + +CLAUDIO +That's as much as to say, the sweet youth's in love. + + + +DON PEDRO +The greatest note of it is his melancholy. + + + +CLAUDIO +And when was he wont to wash his face? + + + +DON PEDRO +Yea, or to paint himself? for the which, I hear +what they say of him. + + + +CLAUDIO +Nay, but his jesting spirit; which is now crept into +a lute-string and now governed by stops. + + + +DON PEDRO +Indeed, that tells a heavy tale for him: conclude, +conclude he is in love. + + + +CLAUDIO +Nay, but I know who loves him. + + + +DON PEDRO +That would I know too: I warrant, one that knows him not. + + + +CLAUDIO +Yes, and his ill conditions; and, in despite of +all, dies for him. + + + +DON PEDRO +She shall be buried with her face upwards. + + + +BENEDICK +Yet is this no charm for the toothache. Old +signior, walk aside with me: I have studied eight +or nine wise words to speak to you, which these +hobby-horses must not hear. + + + +Exeunt BENEDICK and LEONATO + + +DON PEDRO +For my life, to break with him about Beatrice. + + + +CLAUDIO +'Tis even so. Hero and Margaret have by this +played their parts with Beatrice; and then the two +bears will not bite one another when they meet. + + + +Enter DON JOHN + + +DON JOHN +My lord and brother, God save you! + + + +DON PEDRO +Good den, brother. + + + +DON JOHN +If your leisure served, I would speak with you. + + + +DON PEDRO +In private? + + + +DON JOHN +If it please you: yet Count Claudio may hear; for +what I would speak of concerns him. + + + +DON PEDRO +What's the matter? + + + +DON JOHN +To CLAUDIO Means your lordship to be married +to-morrow? + + + +DON PEDRO +You know he does. + + + +DON JOHN +I know not that, when he knows what I know. + + + +CLAUDIO +If there be any impediment, I pray you discover it. + + + +DON JOHN +You may think I love you not: let that appear +hereafter, and aim better at me by that I now will +manifest. For my brother, I think he holds you +well, and in dearness of heart hath holp to effect +your ensuing marriage;--surely suit ill spent and +labour ill bestowed. + + + +DON PEDRO +Why, what's the matter? + + + +DON JOHN +I came hither to tell you; and, circumstances +shortened, for she has been too long a talking of, +the lady is disloyal. + + + +CLAUDIO +Who, Hero? + + + +DON PEDRO +Even she; Leonato's Hero, your Hero, every man's Hero: + + + +CLAUDIO +Disloyal? + + + +DON JOHN +The word is too good to paint out her wickedness; I +could say she were worse: think you of a worse +title, and I will fit her to it. Wonder not till +further warrant: go but with me to-night, you shall +see her chamber-window entered, even the night +before her wedding-day: if you love her then, +to-morrow wed her; but it would better fit your honour +to change your mind. + + + +CLAUDIO +May this be so? + + + +DON PEDRO +I will not think it. + + + +DON JOHN +If you dare not trust that you see, confess not +that you know: if you will follow me, I will show +you enough; and when you have seen more and heard +more, proceed accordingly. + + + +CLAUDIO +If I see any thing to-night why I should not marry +her to-morrow in the congregation, where I should +wed, there will I shame her. + + + +DON PEDRO +And, as I wooed for thee to obtain her, I will join +with thee to disgrace her. + + + +DON JOHN +I will disparage her no farther till you are my +witnesses: bear it coldly but till midnight, and +let the issue show itself. + + + +DON PEDRO +O day untowardly turned! + + + +CLAUDIO +O mischief strangely thwarting! + + + +DON JOHN +O plague right well prevented! so will you say when +you have seen the sequel. + + + +Exeunt + + +SCENE III. A street. +Enter DOGBERRY and VERGES with the Watch + + +DOGBERRY +Are you good men and true? + + + +VERGES +Yea, or else it were pity but they should suffer +salvation, body and soul. + + + +DOGBERRY +Nay, that were a punishment too good for them, if +they should have any allegiance in them, being +chosen for the prince's watch. + + + +VERGES +Well, give them their charge, neighbour Dogberry. + + + +DOGBERRY +First, who think you the most desertless man to be +constable? + + + +First Watchman +Hugh Otecake, sir, or George Seacole; for they can +write and read. + + + +DOGBERRY +Come hither, neighbour Seacole. God hath blessed +you with a good name: to be a well-favoured man is +the gift of fortune; but to write and read comes by nature. + + + +Second Watchman +Both which, master constable,-- + + + +DOGBERRY +You have: I knew it would be your answer. Well, +for your favour, sir, why, give God thanks, and make +no boast of it; and for your writing and reading, +let that appear when there is no need of such +vanity. You are thought here to be the most +senseless and fit man for the constable of the +watch; therefore bear you the lantern. This is your +charge: you shall comprehend all vagrom men; you are +to bid any man stand, in the prince's name. + + + +Second Watchman +How if a' will not stand? + + + +DOGBERRY +Why, then, take no note of him, but let him go; and +presently call the rest of the watch together and +thank God you are rid of a knave. + + + +VERGES +If he will not stand when he is bidden, he is none +of the prince's subjects. + + + +DOGBERRY +True, and they are to meddle with none but the +prince's subjects. You shall also make no noise in +the streets; for, for the watch to babble and to +talk is most tolerable and not to be endured. + + + +Watchman +We will rather sleep than talk: we know what +belongs to a watch. + + + +DOGBERRY +Why, you speak like an ancient and most quiet +watchman; for I cannot see how sleeping should +offend: only, have a care that your bills be not +stolen. Well, you are to call at all the +ale-houses, and bid those that are drunk get them to bed. + + + +Watchman +How if they will not? + + + +DOGBERRY +Why, then, let them alone till they are sober: if +they make you not then the better answer, you may +say they are not the men you took them for. + + + +Watchman +Well, sir. + + + +DOGBERRY +If you meet a thief, you may suspect him, by virtue +of your office, to be no true man; and, for such +kind of men, the less you meddle or make with them, +why the more is for your honesty. + + + +Watchman +If we know him to be a thief, shall we not lay +hands on him? + + + +DOGBERRY +Truly, by your office, you may; but I think they +that touch pitch will be defiled: the most peaceable +way for you, if you do take a thief, is to let him +show himself what he is and steal out of your company. + + + +VERGES +You have been always called a merciful man, partner. + + + +DOGBERRY +Truly, I would not hang a dog by my will, much more +a man who hath any honesty in him. + + + +VERGES +If you hear a child cry in the night, you must call +to the nurse and bid her still it. + + + +Watchman +How if the nurse be asleep and will not hear us? + + + +DOGBERRY +Why, then, depart in peace, and let the child wake +her with crying; for the ewe that will not hear her +lamb when it baes will never answer a calf when he bleats. + + + +VERGES +'Tis very true. + + + +DOGBERRY +This is the end of the charge:--you, constable, are +to present the prince's own person: if you meet the +prince in the night, you may stay him. + + + +VERGES +Nay, by'r our lady, that I think a' cannot. + + + +DOGBERRY +Five shillings to one on't, with any man that knows +the statutes, he may stay him: marry, not without +the prince be willing; for, indeed, the watch ought +to offend no man; and it is an offence to stay a +man against his will. + + + +VERGES +By'r lady, I think it be so. + + + +DOGBERRY +Ha, ha, ha! Well, masters, good night: an there be +any matter of weight chances, call up me: keep your +fellows' counsels and your own; and good night. +Come, neighbour. + + + +Watchman +Well, masters, we hear our charge: let us go sit here +upon the church-bench till two, and then all to bed. + + + +DOGBERRY +One word more, honest neighbours. I pray you watch +about Signior Leonato's door; for the wedding being +there to-morrow, there is a great coil to-night. +Adieu: be vigitant, I beseech you. + + +Exeunt DOGBERRY and VERGES +Enter BORACHIO and CONRADE + + +BORACHIO +What Conrade! + + + +Watchman +Aside Peace! stir not. + + + +BORACHIO +Conrade, I say! + + + +CONRADE +Here, man; I am at thy elbow. + + + +BORACHIO +Mass, and my elbow itched; I thought there would a +scab follow. + + + +CONRADE +I will owe thee an answer for that: and now forward +with thy tale. + + + +BORACHIO +Stand thee close, then, under this pent-house, for +it drizzles rain; and I will, like a true drunkard, +utter all to thee. + + + +Watchman +Aside Some treason, masters: yet stand close. + + + +BORACHIO +Therefore know I have earned of Don John a thousand ducats. + + + +CONRADE +Is it possible that any villany should be so dear? + + + +BORACHIO +Thou shouldst rather ask if it were possible any +villany should be so rich; for when rich villains +have need of poor ones, poor ones may make what +price they will. + + + +CONRADE +I wonder at it. + + + +BORACHIO +That shows thou art unconfirmed. Thou knowest that +the fashion of a doublet, or a hat, or a cloak, is +nothing to a man. + + + +CONRADE +Yes, it is apparel. + + + +BORACHIO +I mean, the fashion. + + + +CONRADE +Yes, the fashion is the fashion. + + + +BORACHIO +Tush! I may as well say the fool's the fool. But +seest thou not what a deformed thief this fashion +is? + + + +Watchman +Aside I know that Deformed; a' has been a vile +thief this seven year; a' goes up and down like a +gentleman: I remember his name. + + + +BORACHIO +Didst thou not hear somebody? + + + +CONRADE +No; 'twas the vane on the house. + + + +BORACHIO +Seest thou not, I say, what a deformed thief this +fashion is? how giddily a' turns about all the hot +bloods between fourteen and five-and-thirty? +sometimes fashioning them like Pharaoh's soldiers +in the reeky painting, sometime like god Bel's +priests in the old church-window, sometime like the +shaven Hercules in the smirched worm-eaten tapestry, +where his codpiece seems as massy as his club? + + + +CONRADE +All this I see; and I see that the fashion wears +out more apparel than the man. But art not thou +thyself giddy with the fashion too, that thou hast +shifted out of thy tale into telling me of the fashion? + + + +BORACHIO +Not so, neither: but know that I have to-night +wooed Margaret, the Lady Hero's gentlewoman, by the +name of Hero: she leans me out at her mistress' +chamber-window, bids me a thousand times good +night,--I tell this tale vilely:--I should first +tell thee how the prince, Claudio and my master, +planted and placed and possessed by my master Don +John, saw afar off in the orchard this amiable encounter. + + + +CONRADE +And thought they Margaret was Hero? + + + +BORACHIO +Two of them did, the prince and Claudio; but the +devil my master knew she was Margaret; and partly +by his oaths, which first possessed them, partly by +the dark night, which did deceive them, but chiefly +by my villany, which did confirm any slander that +Don John had made, away went Claudio enraged; swore +he would meet her, as he was appointed, next morning +at the temple, and there, before the whole +congregation, shame her with what he saw o'er night +and send her home again without a husband. + + + +First Watchman +We charge you, in the prince's name, stand! + + + +Second Watchman +Call up the right master constable. We have here +recovered the most dangerous piece of lechery that +ever was known in the commonwealth. + + + +First Watchman +And one Deformed is one of them: I know him; a' +wears a lock. + + + +CONRADE +Masters, masters,-- + + + +Second Watchman +You'll be made bring Deformed forth, I warrant you. + + + +CONRADE +Masters,-- + + + +First Watchman +Never speak: we charge you let us obey you to go with us. + + + +BORACHIO +We are like to prove a goodly commodity, being taken +up of these men's bills. + + + +CONRADE +A commodity in question, I warrant you. Come, we'll obey you. + + + +Exeunt + + +SCENE IV. HERO's apartment. +Enter HERO, MARGARET, and URSULA + + +HERO +Good Ursula, wake my cousin Beatrice, and desire +her to rise. + + + +URSULA +I will, lady. + + + +HERO +And bid her come hither. + + + +URSULA +Well. + + + +Exit + + +MARGARET +Troth, I think your other rabato were better. + + + +HERO +No, pray thee, good Meg, I'll wear this. + + + +MARGARET +By my troth, 's not so good; and I warrant your +cousin will say so. + + + +HERO +My cousin's a fool, and thou art another: I'll wear +none but this. + + + +MARGARET +I like the new tire within excellently, if the hair +were a thought browner; and your gown's a most rare +fashion, i' faith. I saw the Duchess of Milan's +gown that they praise so. + + + +HERO +O, that exceeds, they say. + + + +MARGARET +By my troth, 's but a night-gown in respect of +yours: cloth o' gold, and cuts, and laced with +silver, set with pearls, down sleeves, side sleeves, +and skirts, round underborne with a bluish tinsel: +but for a fine, quaint, graceful and excellent +fashion, yours is worth ten on 't. + + + +HERO +God give me joy to wear it! for my heart is +exceeding heavy. + + + +MARGARET +'Twill be heavier soon by the weight of a man. + + + +HERO +Fie upon thee! art not ashamed? + + + +MARGARET +Of what, lady? of speaking honourably? Is not +marriage honourable in a beggar? Is not your lord +honourable without marriage? I think you would have +me say, 'saving your reverence, a husband:' and bad +thinking do not wrest true speaking, I'll offend +nobody: is there any harm in 'the heavier for a +husband'? None, I think, and it be the right husband +and the right wife; otherwise 'tis light, and not +heavy: ask my Lady Beatrice else; here she comes. + + + +Enter BEATRICE + + +HERO +Good morrow, coz. + + + +BEATRICE +Good morrow, sweet Hero. + + + +HERO +Why how now? do you speak in the sick tune? + + + +BEATRICE +I am out of all other tune, methinks. + + + +MARGARET +Clap's into 'Light o' love;' that goes without a +burden: do you sing it, and I'll dance it. + + + +BEATRICE +Ye light o' love, with your heels! then, if your +husband have stables enough, you'll see he shall +lack no barns. + + + +MARGARET +O illegitimate construction! I scorn that with my heels. + + + +BEATRICE +'Tis almost five o'clock, cousin; tis time you were +ready. By my troth, I am exceeding ill: heigh-ho! + + + +MARGARET +For a hawk, a horse, or a husband? + + + +BEATRICE +For the letter that begins them all, H. + + + +MARGARET +Well, and you be not turned Turk, there's no more +sailing by the star. + + + +BEATRICE +What means the fool, trow? + + + +MARGARET +Nothing I; but God send every one their heart's desire! + + + +HERO +These gloves the count sent me; they are an +excellent perfume. + + + +BEATRICE +I am stuffed, cousin; I cannot smell. + + + +MARGARET +A maid, and stuffed! there's goodly catching of cold. + + + +BEATRICE +O, God help me! God help me! how long have you +professed apprehension? + + + +MARGARET +Even since you left it. Doth not my wit become me rarely? + + + +BEATRICE +It is not seen enough, you should wear it in your +cap. By my troth, I am sick. + + + +MARGARET +Get you some of this distilled Carduus Benedictus, +and lay it to your heart: it is the only thing for a qualm. + + + +HERO +There thou prickest her with a thistle. + + + +BEATRICE +Benedictus! why Benedictus? you have some moral in +this Benedictus. + + + +MARGARET +Moral! no, by my troth, I have no moral meaning; I +meant, plain holy-thistle. You may think perchance +that I think you are in love: nay, by'r lady, I am +not such a fool to think what I list, nor I list +not to think what I can, nor indeed I cannot think, +if I would think my heart out of thinking, that you +are in love or that you will be in love or that you +can be in love. Yet Benedick was such another, and +now is he become a man: he swore he would never +marry, and yet now, in despite of his heart, he eats +his meat without grudging: and how you may be +converted I know not, but methinks you look with +your eyes as other women do. + + + +BEATRICE +What pace is this that thy tongue keeps? + + + +MARGARET +Not a false gallop. + + + +Re-enter URSULA + + +URSULA +Madam, withdraw: the prince, the count, Signior +Benedick, Don John, and all the gallants of the +town, are come to fetch you to church. + + + +HERO +Help to dress me, good coz, good Meg, good Ursula. + + + +Exeunt + + +SCENE V. Another room in LEONATO'S house. +Enter LEONATO, with DOGBERRY and VERGES + + +LEONATO +What would you with me, honest neighbour? + + + +DOGBERRY +Marry, sir, I would have some confidence with you +that decerns you nearly. + + + +LEONATO +Brief, I pray you; for you see it is a busy time with me. + + + +DOGBERRY +Marry, this it is, sir. + + + +VERGES +Yes, in truth it is, sir. + + + +LEONATO +What is it, my good friends? + + + +DOGBERRY +Goodman Verges, sir, speaks a little off the +matter: an old man, sir, and his wits are not so +blunt as, God help, I would desire they were; but, +in faith, honest as the skin between his brows. + + + +VERGES +Yes, I thank God I am as honest as any man living +that is an old man and no honester than I. + + + +DOGBERRY +Comparisons are odorous: palabras, neighbour Verges. + + + +LEONATO +Neighbours, you are tedious. + + + +DOGBERRY +It pleases your worship to say so, but we are the +poor duke's officers; but truly, for mine own part, +if I were as tedious as a king, I could find it in +my heart to bestow it all of your worship. + + + +LEONATO +All thy tediousness on me, ah? + + + +DOGBERRY +Yea, an 'twere a thousand pound more than 'tis; for +I hear as good exclamation on your worship as of any +man in the city; and though I be but a poor man, I +am glad to hear it. + + + +VERGES +And so am I. + + + +LEONATO +I would fain know what you have to say. + + + +VERGES +Marry, sir, our watch to-night, excepting your +worship's presence, ha' ta'en a couple of as arrant +knaves as any in Messina. + + + +DOGBERRY +A good old man, sir; he will be talking: as they +say, when the age is in, the wit is out: God help +us! it is a world to see. Well said, i' faith, +neighbour Verges: well, God's a good man; an two men +ride of a horse, one must ride behind. An honest +soul, i' faith, sir; by my troth he is, as ever +broke bread; but God is to be worshipped; all men +are not alike; alas, good neighbour! + + + +LEONATO +Indeed, neighbour, he comes too short of you. + + + +DOGBERRY +Gifts that God gives. + + + +LEONATO +I must leave you. + + + +DOGBERRY +One word, sir: our watch, sir, have indeed +comprehended two aspicious persons, and we would +have them this morning examined before your worship. + + + +LEONATO +Take their examination yourself and bring it me: I +am now in great haste, as it may appear unto you. + + + +DOGBERRY +It shall be suffigance. + + + +LEONATO +Drink some wine ere you go: fare you well. + + + +Enter a Messenger + + +Messenger +My lord, they stay for you to give your daughter to +her husband. + + + +LEONATO +I'll wait upon them: I am ready. + + + +Exeunt LEONATO and Messenger + + +DOGBERRY +Go, good partner, go, get you to Francis Seacole; +bid him bring his pen and inkhorn to the gaol: we +are now to examination these men. + + + +VERGES +And we must do it wisely. + + + +DOGBERRY +We will spare for no wit, I warrant you; here's +that shall drive some of them to a non-come: only +get the learned writer to set down our +excommunication and meet me at the gaol. + + + +Exeunt + + + + +ACT IV + +SCENE I. A church. +Enter DON PEDRO, DON JOHN, LEONATO, FRIAR FRANCIS, +CLAUDIO, BENEDICK, HERO, BEATRICE, and Attendants + + +LEONATO +Come, Friar Francis, be brief; only to the plain +form of marriage, and you shall recount their +particular duties afterwards. + + + +FRIAR FRANCIS +You come hither, my lord, to marry this lady. + + + +CLAUDIO +No. + + + +LEONATO +To be married to her: friar, you come to marry her. + + + +FRIAR FRANCIS +Lady, you come hither to be married to this count. + + + +HERO +I do. + + + +FRIAR FRANCIS +If either of you know any inward impediment why you +should not be conjoined, charge you, on your souls, +to utter it. + + + +CLAUDIO +Know you any, Hero? + + + +HERO +None, my lord. + + + +FRIAR FRANCIS +Know you any, count? + + + +LEONATO +I dare make his answer, none. + + + +CLAUDIO +O, what men dare do! what men may do! what men daily +do, not knowing what they do! + + + +BENEDICK +How now! interjections? Why, then, some be of +laughing, as, ah, ha, he! + + + +CLAUDIO +Stand thee by, friar. Father, by your leave: +Will you with free and unconstrained soul +Give me this maid, your daughter? + + + +LEONATO +As freely, son, as God did give her me. + + + +CLAUDIO +And what have I to give you back, whose worth +May counterpoise this rich and precious gift? + + + +DON PEDRO +Nothing, unless you render her again. + + + +CLAUDIO +Sweet prince, you learn me noble thankfulness. +There, Leonato, take her back again: +Give not this rotten orange to your friend; +She's but the sign and semblance of her honour. +Behold how like a maid she blushes here! +O, what authority and show of truth +Can cunning sin cover itself withal! +Comes not that blood as modest evidence +To witness simple virtue? Would you not swear, +All you that see her, that she were a maid, +By these exterior shows? But she is none: +She knows the heat of a luxurious bed; +Her blush is guiltiness, not modesty. + + + +LEONATO +What do you mean, my lord? + + + +CLAUDIO +Not to be married, +Not to knit my soul to an approved wanton. + + + +LEONATO +Dear my lord, if you, in your own proof, +Have vanquish'd the resistance of her youth, +And made defeat of her virginity,-- + + + +CLAUDIO +I know what you would say: if I have known her, +You will say she did embrace me as a husband, +And so extenuate the 'forehand sin: +No, Leonato, +I never tempted her with word too large; +But, as a brother to his sister, show'd +Bashful sincerity and comely love. + + + +HERO +And seem'd I ever otherwise to you? + + + +CLAUDIO +Out on thee! Seeming! I will write against it: +You seem to me as Dian in her orb, +As chaste as is the bud ere it be blown; +But you are more intemperate in your blood +Than Venus, or those pamper'd animals +That rage in savage sensuality. + + + +HERO +Is my lord well, that he doth speak so wide? + + + +LEONATO +Sweet prince, why speak not you? + + + +DON PEDRO +What should I speak? +I stand dishonour'd, that have gone about +To link my dear friend to a common stale. + + + +LEONATO +Are these things spoken, or do I but dream? + + + +DON JOHN +Sir, they are spoken, and these things are true. + + + +BENEDICK +This looks not like a nuptial. + + + +HERO +True! O God! + + + +CLAUDIO +Leonato, stand I here? +Is this the prince? is this the prince's brother? +Is this face Hero's? are our eyes our own? + + + +LEONATO +All this is so: but what of this, my lord? + + + +CLAUDIO +Let me but move one question to your daughter; +And, by that fatherly and kindly power +That you have in her, bid her answer truly. + + + +LEONATO +I charge thee do so, as thou art my child. + + + +HERO +O, God defend me! how am I beset! +What kind of catechising call you this? + + + +CLAUDIO +To make you answer truly to your name. + + + +HERO +Is it not Hero? Who can blot that name +With any just reproach? + + + +CLAUDIO +Marry, that can Hero; +Hero itself can blot out Hero's virtue. +What man was he talk'd with you yesternight +Out at your window betwixt twelve and one? +Now, if you are a maid, answer to this. + + + +HERO +I talk'd with no man at that hour, my lord. + + + +DON PEDRO +Why, then are you no maiden. Leonato, +I am sorry you must hear: upon mine honour, +Myself, my brother and this grieved count +Did see her, hear her, at that hour last night +Talk with a ruffian at her chamber-window +Who hath indeed, most like a liberal villain, +Confess'd the vile encounters they have had +A thousand times in secret. + + + +DON JOHN +Fie, fie! they are not to be named, my lord, +Not to be spoke of; +There is not chastity enough in language +Without offence to utter them. Thus, pretty lady, +I am sorry for thy much misgovernment. + + + +CLAUDIO +O Hero, what a Hero hadst thou been, +If half thy outward graces had been placed +About thy thoughts and counsels of thy heart! +But fare thee well, most foul, most fair! farewell, +Thou pure impiety and impious purity! +For thee I'll lock up all the gates of love, +And on my eyelids shall conjecture hang, +To turn all beauty into thoughts of harm, +And never shall it more be gracious. + + + +LEONATO +Hath no man's dagger here a point for me? + + + +HERO swoons + + +BEATRICE +Why, how now, cousin! wherefore sink you down? + + + +DON JOHN +Come, let us go. These things, come thus to light, +Smother her spirits up. + + + +Exeunt DON PEDRO, DON JOHN, and CLAUDIO + + +BENEDICK +How doth the lady? + + + +BEATRICE +Dead, I think. Help, uncle! +Hero! why, Hero! Uncle! Signior Benedick! Friar! + + + +LEONATO +O Fate! take not away thy heavy hand. +Death is the fairest cover for her shame +That may be wish'd for. + + + +BEATRICE +How now, cousin Hero! + + + +FRIAR FRANCIS +Have comfort, lady. + + + +LEONATO +Dost thou look up? + + + +FRIAR FRANCIS +Yea, wherefore should she not? + + + +LEONATO +Wherefore! Why, doth not every earthly thing +Cry shame upon her? Could she here deny +The story that is printed in her blood? +Do not live, Hero; do not ope thine eyes: +For, did I think thou wouldst not quickly die, +Thought I thy spirits were stronger than thy shames, +Myself would, on the rearward of reproaches, +Strike at thy life. Grieved I, I had but one? +Chid I for that at frugal nature's frame? +O, one too much by thee! Why had I one? +Why ever wast thou lovely in my eyes? +Why had I not with charitable hand +Took up a beggar's issue at my gates, +Who smirch'd thus and mired with infamy, +I might have said 'No part of it is mine; +This shame derives itself from unknown loins'? +But mine and mine I loved and mine I praised +And mine that I was proud on, mine so much +That I myself was to myself not mine, +Valuing of her,--why, she, O, she is fallen +Into a pit of ink, that the wide sea +Hath drops too few to wash her clean again +And salt too little which may season give +To her foul-tainted flesh! + + + +BENEDICK +Sir, sir, be patient. +For my part, I am so attired in wonder, +I know not what to say. + + + +BEATRICE +O, on my soul, my cousin is belied! + + + +BENEDICK +Lady, were you her bedfellow last night? + + + +BEATRICE +No, truly not; although, until last night, +I have this twelvemonth been her bedfellow. + + + +LEONATO +Confirm'd, confirm'd! O, that is stronger made +Which was before barr'd up with ribs of iron! +Would the two princes lie, and Claudio lie, +Who loved her so, that, speaking of her foulness, +Wash'd it with tears? Hence from her! let her die. + + + +FRIAR FRANCIS +Hear me a little; for I have only been +Silent so long and given way unto +This course of fortune +By noting of the lady. I have mark'd +A thousand blushing apparitions +To start into her face, a thousand innocent shames +In angel whiteness beat away those blushes; +And in her eye there hath appear'd a fire, +To burn the errors that these princes hold +Against her maiden truth. Call me a fool; +Trust not my reading nor my observations, +Which with experimental seal doth warrant +The tenor of my book; trust not my age, +My reverence, calling, nor divinity, +If this sweet lady lie not guiltless here +Under some biting error. + + + +LEONATO +Friar, it cannot be. +Thou seest that all the grace that she hath left +Is that she will not add to her damnation +A sin of perjury; she not denies it: +Why seek'st thou then to cover with excuse +That which appears in proper nakedness? + + + +FRIAR FRANCIS +Lady, what man is he you are accused of? + + + +HERO +They know that do accuse me; I know none: +If I know more of any man alive +Than that which maiden modesty doth warrant, +Let all my sins lack mercy! O my father, +Prove you that any man with me conversed +At hours unmeet, or that I yesternight +Maintain'd the change of words with any creature, +Refuse me, hate me, torture me to death! + + + +FRIAR FRANCIS +There is some strange misprision in the princes. + + + +BENEDICK +Two of them have the very bent of honour; +And if their wisdoms be misled in this, +The practise of it lives in John the bastard, +Whose spirits toil in frame of villanies. + + + +LEONATO +I know not. If they speak but truth of her, +These hands shall tear her; if they wrong her honour, +The proudest of them shall well hear of it. +Time hath not yet so dried this blood of mine, +Nor age so eat up my invention, +Nor fortune made such havoc of my means, +Nor my bad life reft me so much of friends, +But they shall find, awaked in such a kind, +Both strength of limb and policy of mind, +Ability in means and choice of friends, +To quit me of them throughly. + + + +FRIAR FRANCIS +Pause awhile, +And let my counsel sway you in this case. +Your daughter here the princes left for dead: +Let her awhile be secretly kept in, +And publish it that she is dead indeed; +Maintain a mourning ostentation +And on your family's old monument +Hang mournful epitaphs and do all rites +That appertain unto a burial. + + + +LEONATO +What shall become of this? what will this do? + + + +FRIAR FRANCIS +Marry, this well carried shall on her behalf +Change slander to remorse; that is some good: +But not for that dream I on this strange course, +But on this travail look for greater birth. +She dying, as it must so be maintain'd, +Upon the instant that she was accused, +Shall be lamented, pitied and excused +Of every hearer: for it so falls out +That what we have we prize not to the worth +Whiles we enjoy it, but being lack'd and lost, +Why, then we rack the value, then we find +The virtue that possession would not show us +Whiles it was ours. So will it fare with Claudio: +When he shall hear she died upon his words, +The idea of her life shall sweetly creep +Into his study of imagination, +And every lovely organ of her life +Shall come apparell'd in more precious habit, +More moving-delicate and full of life, +Into the eye and prospect of his soul, +Than when she lived indeed; then shall he mourn, +If ever love had interest in his liver, +And wish he had not so accused her, +No, though he thought his accusation true. +Let this be so, and doubt not but success +Will fashion the event in better shape +Than I can lay it down in likelihood. +But if all aim but this be levell'd false, +The supposition of the lady's death +Will quench the wonder of her infamy: +And if it sort not well, you may conceal her, +As best befits her wounded reputation, +In some reclusive and religious life, +Out of all eyes, tongues, minds and injuries. + + + +BENEDICK +Signior Leonato, let the friar advise you: +And though you know my inwardness and love +Is very much unto the prince and Claudio, +Yet, by mine honour, I will deal in this +As secretly and justly as your soul +Should with your body. + + + +LEONATO +Being that I flow in grief, +The smallest twine may lead me. + + + +FRIAR FRANCIS +'Tis well consented: presently away; +For to strange sores strangely they strain the cure. +Come, lady, die to live: this wedding-day +Perhaps is but prolong'd: have patience and endure. + + + +Exeunt all but BENEDICK and BEATRICE + + +BENEDICK +Lady Beatrice, have you wept all this while? + + + +BEATRICE +Yea, and I will weep a while longer. + + + +BENEDICK +I will not desire that. + + + +BEATRICE +You have no reason; I do it freely. + + + +BENEDICK +Surely I do believe your fair cousin is wronged. + + + +BEATRICE +Ah, how much might the man deserve of me that would right her! + + + +BENEDICK +Is there any way to show such friendship? + + + +BEATRICE +A very even way, but no such friend. + + + +BENEDICK +May a man do it? + + + +BEATRICE +It is a man's office, but not yours. + + + +BENEDICK +I do love nothing in the world so well as you: is +not that strange? + + + +BEATRICE +As strange as the thing I know not. It were as +possible for me to say I loved nothing so well as +you: but believe me not; and yet I lie not; I +confess nothing, nor I deny nothing. I am sorry for my cousin. + + + +BENEDICK +By my sword, Beatrice, thou lovest me. + + + +BEATRICE +Do not swear, and eat it. + + + +BENEDICK +I will swear by it that you love me; and I will make +him eat it that says I love not you. + + + +BEATRICE +Will you not eat your word? + + + +BENEDICK +With no sauce that can be devised to it. I protest +I love thee. + + + +BEATRICE +Why, then, God forgive me! + + + +BENEDICK +What offence, sweet Beatrice? + + + +BEATRICE +You have stayed me in a happy hour: I was about to +protest I loved you. + + + +BENEDICK +And do it with all thy heart. + + + +BEATRICE +I love you with so much of my heart that none is +left to protest. + + + +BENEDICK +Come, bid me do any thing for thee. + + + +BEATRICE +Kill Claudio. + + + +BENEDICK +Ha! not for the wide world. + + + +BEATRICE +You kill me to deny it. Farewell. + + + +BENEDICK +Tarry, sweet Beatrice. + + + +BEATRICE +I am gone, though I am here: there is no love in +you: nay, I pray you, let me go. + + + +BENEDICK +Beatrice,-- + + + +BEATRICE +In faith, I will go. + + + +BENEDICK +We'll be friends first. + + + +BEATRICE +You dare easier be friends with me than fight with mine enemy. + + + +BENEDICK +Is Claudio thine enemy? + + + +BEATRICE +Is he not approved in the height a villain, that +hath slandered, scorned, dishonoured my kinswoman? O +that I were a man! What, bear her in hand until they +come to take hands; and then, with public +accusation, uncovered slander, unmitigated rancour, +--O God, that I were a man! I would eat his heart +in the market-place. + + + +BENEDICK +Hear me, Beatrice,-- + + + +BEATRICE +Talk with a man out at a window! A proper saying! + + + +BENEDICK +Nay, but, Beatrice,-- + + + +BEATRICE +Sweet Hero! She is wronged, she is slandered, she is undone. + + + +BENEDICK +Beat-- + + + +BEATRICE +Princes and counties! Surely, a princely testimony, +a goodly count, Count Comfect; a sweet gallant, +surely! O that I were a man for his sake! or that I +had any friend would be a man for my sake! But +manhood is melted into courtesies, valour into +compliment, and men are only turned into tongue, and +trim ones too: he is now as valiant as Hercules +that only tells a lie and swears it. I cannot be a +man with wishing, therefore I will die a woman with grieving. + + + +BENEDICK +Tarry, good Beatrice. By this hand, I love thee. + + + +BEATRICE +Use it for my love some other way than swearing by it. + + + +BENEDICK +Think you in your soul the Count Claudio hath wronged Hero? + + + +BEATRICE +Yea, as sure as I have a thought or a soul. + + + +BENEDICK +Enough, I am engaged; I will challenge him. I will +kiss your hand, and so I leave you. By this hand, +Claudio shall render me a dear account. As you +hear of me, so think of me. Go, comfort your +cousin: I must say she is dead: and so, farewell. + + + +Exeunt + + +SCENE II. A prison. +Enter DOGBERRY, VERGES, and Sexton, in gowns; and +the Watch, with CONRADE and BORACHIO + + +DOGBERRY +Is our whole dissembly appeared? + + + +VERGES +O, a stool and a cushion for the sexton. + + + +Sexton +Which be the malefactors? + + + +DOGBERRY +Marry, that am I and my partner. + + + +VERGES +Nay, that's certain; we have the exhibition to examine. + + + +Sexton +But which are the offenders that are to be +examined? let them come before master constable. + + + +DOGBERRY +Yea, marry, let them come before me. What is your +name, friend? + + + +BORACHIO +Borachio. + + + +DOGBERRY +Pray, write down, Borachio. Yours, sirrah? + + + +CONRADE +I am a gentleman, sir, and my name is Conrade. + + + +DOGBERRY +Write down, master gentleman Conrade. Masters, do +you serve God? + + + +CONRADE +BORACHIO +Yea, sir, we hope. + + + +DOGBERRY +Write down, that they hope they serve God: and +write God first; for God defend but God should go +before such villains! Masters, it is proved already +that you are little better than false knaves; and it +will go near to be thought so shortly. How answer +you for yourselves? + + + +CONRADE +Marry, sir, we say we are none. + + + +DOGBERRY +A marvellous witty fellow, I assure you: but I +will go about with him. Come you hither, sirrah; a +word in your ear: sir, I say to you, it is thought +you are false knaves. + + + +BORACHIO +Sir, I say to you we are none. + + + +DOGBERRY +Well, stand aside. 'Fore God, they are both in a +tale. Have you writ down, that they are none? + + + +Sexton +Master constable, you go not the way to examine: +you must call forth the watch that are their accusers. + + + +DOGBERRY +Yea, marry, that's the eftest way. Let the watch +come forth. Masters, I charge you, in the prince's +name, accuse these men. + + + +First Watchman +This man said, sir, that Don John, the prince's +brother, was a villain. + + + +DOGBERRY +Write down Prince John a villain. Why, this is flat +perjury, to call a prince's brother villain. + + + +BORACHIO +Master constable,-- + + + +DOGBERRY +Pray thee, fellow, peace: I do not like thy look, +I promise thee. + + + +Sexton +What heard you him say else? + + + +Second Watchman +Marry, that he had received a thousand ducats of +Don John for accusing the Lady Hero wrongfully. + + + +DOGBERRY +Flat burglary as ever was committed. + + + +VERGES +Yea, by mass, that it is. + + + +Sexton +What else, fellow? + + + +First Watchman +And that Count Claudio did mean, upon his words, to +disgrace Hero before the whole assembly. and not marry her. + + + +DOGBERRY +O villain! thou wilt be condemned into everlasting +redemption for this. + + + +Sexton +What else? + + + +Watchman +This is all. + + + +Sexton +And this is more, masters, than you can deny. +Prince John is this morning secretly stolen away; +Hero was in this manner accused, in this very manner +refused, and upon the grief of this suddenly died. +Master constable, let these men be bound, and +brought to Leonato's: I will go before and show +him their examination. + + + +Exit + + +DOGBERRY +Come, let them be opinioned. + + + +VERGES +Let them be in the hands-- + + + +CONRADE +Off, coxcomb! + + + +DOGBERRY +God's my life, where's the sexton? let him write +down the prince's officer coxcomb. Come, bind them. +Thou naughty varlet! + + + +CONRADE +Away! you are an ass, you are an ass. + + + +DOGBERRY +Dost thou not suspect my place? dost thou not +suspect my years? O that he were here to write me +down an ass! But, masters, remember that I am an +ass; though it be not written down, yet forget not +that I am an ass. No, thou villain, thou art full of +piety, as shall be proved upon thee by good witness. +I am a wise fellow, and, which is more, an officer, +and, which is more, a householder, and, which is +more, as pretty a piece of flesh as any is in +Messina, and one that knows the law, go to; and a +rich fellow enough, go to; and a fellow that hath +had losses, and one that hath two gowns and every +thing handsome about him. Bring him away. O that +I had been writ down an ass! + + + +Exeunt + + + + +ACT V + +SCENE I. Before LEONATO'S house. +Enter LEONATO and ANTONIO + + +ANTONIO +If you go on thus, you will kill yourself: +And 'tis not wisdom thus to second grief +Against yourself. + + + +LEONATO +I pray thee, cease thy counsel, +Which falls into mine ears as profitless +As water in a sieve: give not me counsel; +Nor let no comforter delight mine ear +But such a one whose wrongs do suit with mine. +Bring me a father that so loved his child, +Whose joy of her is overwhelm'd like mine, +And bid him speak of patience; +Measure his woe the length and breadth of mine +And let it answer every strain for strain, +As thus for thus and such a grief for such, +In every lineament, branch, shape, and form: +If such a one will smile and stroke his beard, +Bid sorrow wag, cry 'hem!' when he should groan, +Patch grief with proverbs, make misfortune drunk +With candle-wasters; bring him yet to me, +And I of him will gather patience. +But there is no such man: for, brother, men +Can counsel and speak comfort to that grief +Which they themselves not feel; but, tasting it, +Their counsel turns to passion, which before +Would give preceptial medicine to rage, +Fetter strong madness in a silken thread, +Charm ache with air and agony with words: +No, no; 'tis all men's office to speak patience +To those that wring under the load of sorrow, +But no man's virtue nor sufficiency +To be so moral when he shall endure +The like himself. Therefore give me no counsel: +My griefs cry louder than advertisement. + + + +ANTONIO +Therein do men from children nothing differ. + + + +LEONATO +I pray thee, peace. I will be flesh and blood; +For there was never yet philosopher +That could endure the toothache patiently, +However they have writ the style of gods +And made a push at chance and sufferance. + + + +ANTONIO +Yet bend not all the harm upon yourself; +Make those that do offend you suffer too. + + + +LEONATO +There thou speak'st reason: nay, I will do so. +My soul doth tell me Hero is belied; +And that shall Claudio know; so shall the prince +And all of them that thus dishonour her. + + + +ANTONIO +Here comes the prince and Claudio hastily. + + + +Enter DON PEDRO and CLAUDIO + + +DON PEDRO +Good den, good den. + + + +CLAUDIO +Good day to both of you. + + + +LEONATO +Hear you. my lords,-- + + + +DON PEDRO +We have some haste, Leonato. + + + +LEONATO +Some haste, my lord! well, fare you well, my lord: +Are you so hasty now? well, all is one. + + + +DON PEDRO +Nay, do not quarrel with us, good old man. + + + +ANTONIO +If he could right himself with quarreling, +Some of us would lie low. + + + +CLAUDIO +Who wrongs him? + + + +LEONATO +Marry, thou dost wrong me; thou dissembler, thou:-- +Nay, never lay thy hand upon thy sword; +I fear thee not. + + + +CLAUDIO +Marry, beshrew my hand, +If it should give your age such cause of fear: +In faith, my hand meant nothing to my sword. + + + +LEONATO +Tush, tush, man; never fleer and jest at me: +I speak not like a dotard nor a fool, +As under privilege of age to brag +What I have done being young, or what would do +Were I not old. Know, Claudio, to thy head, +Thou hast so wrong'd mine innocent child and me +That I am forced to lay my reverence by +And, with grey hairs and bruise of many days, +Do challenge thee to trial of a man. +I say thou hast belied mine innocent child; +Thy slander hath gone through and through her heart, +And she lies buried with her ancestors; +O, in a tomb where never scandal slept, +Save this of hers, framed by thy villany! + + + +CLAUDIO +My villany? + + + +LEONATO +Thine, Claudio; thine, I say. + + + +DON PEDRO +You say not right, old man. + + + +LEONATO +My lord, my lord, +I'll prove it on his body, if he dare, +Despite his nice fence and his active practise, +His May of youth and bloom of lustihood. + + + +CLAUDIO +Away! I will not have to do with you. + + + +LEONATO +Canst thou so daff me? Thou hast kill'd my child: +If thou kill'st me, boy, thou shalt kill a man. + + + +ANTONIO +He shall kill two of us, and men indeed: +But that's no matter; let him kill one first; +Win me and wear me; let him answer me. +Come, follow me, boy; come, sir boy, come, follow me: +Sir boy, I'll whip you from your foining fence; +Nay, as I am a gentleman, I will. + + + +LEONATO +Brother,-- + + + +ANTONIO +Content yourself. God knows I loved my niece; +And she is dead, slander'd to death by villains, +That dare as well answer a man indeed +As I dare take a serpent by the tongue: +Boys, apes, braggarts, Jacks, milksops! + + + +LEONATO +Brother Antony,-- + + + +ANTONIO +Hold you content. What, man! I know them, yea, +And what they weigh, even to the utmost scruple,-- +Scrambling, out-facing, fashion-monging boys, +That lie and cog and flout, deprave and slander, +Go anticly, show outward hideousness, +And speak off half a dozen dangerous words, +How they might hurt their enemies, if they durst; +And this is all. + + + +LEONATO +But, brother Antony,-- + + + +ANTONIO +Come, 'tis no matter: +Do not you meddle; let me deal in this. + + + +DON PEDRO +Gentlemen both, we will not wake your patience. +My heart is sorry for your daughter's death: +But, on my honour, she was charged with nothing +But what was true and very full of proof. + + + +LEONATO +My lord, my lord,-- + + + +DON PEDRO +I will not hear you. + + + +LEONATO +No? Come, brother; away! I will be heard. + + + +ANTONIO +And shall, or some of us will smart for it. + + + +Exeunt LEONATO and ANTONIO + + +DON PEDRO +See, see; here comes the man we went to seek. + + + +Enter BENEDICK + + +CLAUDIO +Now, signior, what news? + + + +BENEDICK +Good day, my lord. + + + +DON PEDRO +Welcome, signior: you are almost come to part +almost a fray. + + + +CLAUDIO +We had like to have had our two noses snapped off +with two old men without teeth. + + + +DON PEDRO +Leonato and his brother. What thinkest thou? Had +we fought, I doubt we should have been too young for them. + + + +BENEDICK +In a false quarrel there is no true valour. I came +to seek you both. + + + +CLAUDIO +We have been up and down to seek thee; for we are +high-proof melancholy and would fain have it beaten +away. Wilt thou use thy wit? + + + +BENEDICK +It is in my scabbard: shall I draw it? + + + +DON PEDRO +Dost thou wear thy wit by thy side? + + + +CLAUDIO +Never any did so, though very many have been beside +their wit. I will bid thee draw, as we do the +minstrels; draw, to pleasure us. + + + +DON PEDRO +As I am an honest man, he looks pale. Art thou +sick, or angry? + + + +CLAUDIO +What, courage, man! What though care killed a cat, +thou hast mettle enough in thee to kill care. + + + +BENEDICK +Sir, I shall meet your wit in the career, and you +charge it against me. I pray you choose another subject. + + + +CLAUDIO +Nay, then, give him another staff: this last was +broke cross. + + + +DON PEDRO +By this light, he changes more and more: I think +he be angry indeed. + + + +CLAUDIO +If he be, he knows how to turn his girdle. + + + +BENEDICK +Shall I speak a word in your ear? + + + +CLAUDIO +God bless me from a challenge! + + + +BENEDICK +Aside to CLAUDIO You are a villain; I jest not: +I will make it good how you dare, with what you +dare, and when you dare. Do me right, or I will +protest your cowardice. You have killed a sweet +lady, and her death shall fall heavy on you. Let me +hear from you. + + + +CLAUDIO +Well, I will meet you, so I may have good cheer. + + + +DON PEDRO +What, a feast, a feast? + + + +CLAUDIO +I' faith, I thank him; he hath bid me to a calf's +head and a capon; the which if I do not carve most +curiously, say my knife's naught. Shall I not find +a woodcock too? + + + +BENEDICK +Sir, your wit ambles well; it goes easily. + + + +DON PEDRO +I'll tell thee how Beatrice praised thy wit the +other day. I said, thou hadst a fine wit: 'True,' +said she, 'a fine little one.' 'No,' said I, 'a +great wit:' 'Right,' says she, 'a great gross one.' +'Nay,' said I, 'a good wit:' 'Just,' said she, 'it +hurts nobody.' 'Nay,' said I, 'the gentleman +is wise:' 'Certain,' said she, 'a wise gentleman.' +'Nay,' said I, 'he hath the tongues:' 'That I +believe,' said she, 'for he swore a thing to me on +Monday night, which he forswore on Tuesday morning; +there's a double tongue; there's two tongues.' Thus +did she, an hour together, transshape thy particular +virtues: yet at last she concluded with a sigh, thou +wast the properest man in Italy. + + + +CLAUDIO +For the which she wept heartily and said she cared +not. + + + +DON PEDRO +Yea, that she did: but yet, for all that, an if she +did not hate him deadly, she would love him dearly: +the old man's daughter told us all. + + + +CLAUDIO +All, all; and, moreover, God saw him when he was +hid in the garden. + + + +DON PEDRO +But when shall we set the savage bull's horns on +the sensible Benedick's head? + + + +CLAUDIO +Yea, and text underneath, 'Here dwells Benedick the +married man'? + + + +BENEDICK +Fare you well, boy: you know my mind. I will leave +you now to your gossip-like humour: you break jests +as braggarts do their blades, which God be thanked, +hurt not. My lord, for your many courtesies I thank +you: I must discontinue your company: your brother +the bastard is fled from Messina: you have among +you killed a sweet and innocent lady. For my Lord +Lackbeard there, he and I shall meet: and, till +then, peace be with him. + + + +Exit + + +DON PEDRO +He is in earnest. + + + +CLAUDIO +In most profound earnest; and, I'll warrant you, for +the love of Beatrice. + + + +DON PEDRO +And hath challenged thee. + + + +CLAUDIO +Most sincerely. + + + +DON PEDRO +What a pretty thing man is when he goes in his +doublet and hose and leaves off his wit! + + + +CLAUDIO +He is then a giant to an ape; but then is an ape a +doctor to such a man. + + + +DON PEDRO +But, soft you, let me be: pluck up, my heart, and +be sad. Did he not say, my brother was fled? + + + +Enter DOGBERRY, VERGES, and the Watch, with CONRADE +and BORACHIO + + +DOGBERRY +Come you, sir: if justice cannot tame you, she +shall ne'er weigh more reasons in her balance: nay, +an you be a cursing hypocrite once, you must be looked to. + + + +DON PEDRO +How now? two of my brother's men bound! Borachio +one! + + + +CLAUDIO +Hearken after their offence, my lord. + + + +DON PEDRO +Officers, what offence have these men done? + + + +DOGBERRY +Marry, sir, they have committed false report; +moreover, they have spoken untruths; secondarily, +they are slanders; sixth and lastly, they have +belied a lady; thirdly, they have verified unjust +things; and, to conclude, they are lying knaves. + + + +DON PEDRO +First, I ask thee what they have done; thirdly, I +ask thee what's their offence; sixth and lastly, why +they are committed; and, to conclude, what you lay +to their charge. + + + +CLAUDIO +Rightly reasoned, and in his own division: and, by +my troth, there's one meaning well suited. + + + +DON PEDRO +Who have you offended, masters, that you are thus +bound to your answer? this learned constable is +too cunning to be understood: what's your offence? + + + +BORACHIO +Sweet prince, let me go no farther to mine answer: +do you hear me, and let this count kill me. I have +deceived even your very eyes: what your wisdoms +could not discover, these shallow fools have brought +to light: who in the night overheard me confessing +to this man how Don John your brother incensed me +to slander the Lady Hero, how you were brought into +the orchard and saw me court Margaret in Hero's +garments, how you disgraced her, when you should +marry her: my villany they have upon record; which +I had rather seal with my death than repeat over +to my shame. The lady is dead upon mine and my +master's false accusation; and, briefly, I desire +nothing but the reward of a villain. + + + +DON PEDRO +Runs not this speech like iron through your blood? + + + +CLAUDIO +I have drunk poison whiles he utter'd it. + + + +DON PEDRO +But did my brother set thee on to this? + + + +BORACHIO +Yea, and paid me richly for the practise of it. + + + +DON PEDRO +He is composed and framed of treachery: +And fled he is upon this villany. + + + +CLAUDIO +Sweet Hero! now thy image doth appear +In the rare semblance that I loved it first. + + + +DOGBERRY +Come, bring away the plaintiffs: by this time our +sexton hath reformed Signior Leonato of the matter: +and, masters, do not forget to specify, when time +and place shall serve, that I am an ass. + + + +VERGES +Here, here comes master Signior Leonato, and the +Sexton too. + + + +Re-enter LEONATO and ANTONIO, with the Sexton + + +LEONATO +Which is the villain? let me see his eyes, +That, when I note another man like him, +I may avoid him: which of these is he? + + + +BORACHIO +If you would know your wronger, look on me. + + + +LEONATO +Art thou the slave that with thy breath hast kill'd +Mine innocent child? + + + +BORACHIO +Yea, even I alone. + + + +LEONATO +No, not so, villain; thou beliest thyself: +Here stand a pair of honourable men; +A third is fled, that had a hand in it. +I thank you, princes, for my daughter's death: +Record it with your high and worthy deeds: +'Twas bravely done, if you bethink you of it. + + + +CLAUDIO +I know not how to pray your patience; +Yet I must speak. Choose your revenge yourself; +Impose me to what penance your invention +Can lay upon my sin: yet sinn'd I not +But in mistaking. + + + +DON PEDRO +By my soul, nor I: +And yet, to satisfy this good old man, +I would bend under any heavy weight +That he'll enjoin me to. + + + +LEONATO +I cannot bid you bid my daughter live; +That were impossible: but, I pray you both, +Possess the people in Messina here +How innocent she died; and if your love +Can labour ought in sad invention, +Hang her an epitaph upon her tomb +And sing it to her bones, sing it to-night: +To-morrow morning come you to my house, +And since you could not be my son-in-law, +Be yet my nephew: my brother hath a daughter, +Almost the copy of my child that's dead, +And she alone is heir to both of us: +Give her the right you should have given her cousin, +And so dies my revenge. + + + +CLAUDIO +O noble sir, +Your over-kindness doth wring tears from me! +I do embrace your offer; and dispose +For henceforth of poor Claudio. + + + +LEONATO +To-morrow then I will expect your coming; +To-night I take my leave. This naughty man +Shall face to face be brought to Margaret, +Who I believe was pack'd in all this wrong, +Hired to it by your brother. + + + +BORACHIO +No, by my soul, she was not, +Nor knew not what she did when she spoke to me, +But always hath been just and virtuous +In any thing that I do know by her. + + + +DOGBERRY +Moreover, sir, which indeed is not under white and +black, this plaintiff here, the offender, did call +me ass: I beseech you, let it be remembered in his +punishment. And also, the watch heard them talk of +one Deformed: they say be wears a key in his ear and +a lock hanging by it, and borrows money in God's +name, the which he hath used so long and never paid +that now men grow hard-hearted and will lend nothing +for God's sake: pray you, examine him upon that point. + + + +LEONATO +I thank thee for thy care and honest pains. + + + +DOGBERRY +Your worship speaks like a most thankful and +reverend youth; and I praise God for you. + + + +LEONATO +There's for thy pains. + + + +DOGBERRY +God save the foundation! + + + +LEONATO +Go, I discharge thee of thy prisoner, and I thank thee. + + + +DOGBERRY +I leave an arrant knave with your worship; which I +beseech your worship to correct yourself, for the +example of others. God keep your worship! I wish +your worship well; God restore you to health! I +humbly give you leave to depart; and if a merry +meeting may be wished, God prohibit it! Come, neighbour. + + + +Exeunt DOGBERRY and VERGES + + +LEONATO +Until to-morrow morning, lords, farewell. + + + +ANTONIO +Farewell, my lords: we look for you to-morrow. + + + +DON PEDRO +We will not fail. + + + +CLAUDIO +To-night I'll mourn with Hero. + + + +LEONATO +To the Watch Bring you these fellows on. We'll +talk with Margaret, +How her acquaintance grew with this lewd fellow. + + + +Exeunt, severally + + +SCENE II. LEONATO'S garden. +Enter BENEDICK and MARGARET, meeting + + +BENEDICK +Pray thee, sweet Mistress Margaret, deserve well at +my hands by helping me to the speech of Beatrice. + + + +MARGARET +Will you then write me a sonnet in praise of my beauty? + + + +BENEDICK +In so high a style, Margaret, that no man living +shall come over it; for, in most comely truth, thou +deservest it. + + + +MARGARET +To have no man come over me! why, shall I always +keep below stairs? + + + +BENEDICK +Thy wit is as quick as the greyhound's mouth; it catches. + + + +MARGARET +And yours as blunt as the fencer's foils, which hit, +but hurt not. + + + +BENEDICK +A most manly wit, Margaret; it will not hurt a +woman: and so, I pray thee, call Beatrice: I give +thee the bucklers. + + + +MARGARET +Give us the swords; we have bucklers of our own. + + + +BENEDICK +If you use them, Margaret, you must put in the +pikes with a vice; and they are dangerous weapons for maids. + + + +MARGARET +Well, I will call Beatrice to you, who I think hath legs. + + + +BENEDICK +And therefore will come. +Exit MARGARET +Sings +The god of love, +That sits above, +And knows me, and knows me, +How pitiful I deserve,-- +I mean in singing; but in loving, Leander the good +swimmer, Troilus the first employer of panders, and +a whole bookful of these quondam carpet-mangers, +whose names yet run smoothly in the even road of a +blank verse, why, they were never so truly turned +over and over as my poor self in love. Marry, I +cannot show it in rhyme; I have tried: I can find +out no rhyme to 'lady' but 'baby,' an innocent +rhyme; for 'scorn,' 'horn,' a hard rhyme; for, +'school,' 'fool,' a babbling rhyme; very ominous +endings: no, I was not born under a rhyming planet, +nor I cannot woo in festival terms. +Enter BEATRICE +Sweet Beatrice, wouldst thou come when I called thee? + + + +BEATRICE +Yea, signior, and depart when you bid me. + + + +BENEDICK +O, stay but till then! + + + +BEATRICE +'Then' is spoken; fare you well now: and yet, ere +I go, let me go with that I came; which is, with +knowing what hath passed between you and Claudio. + + + +BENEDICK +Only foul words; and thereupon I will kiss thee. + + + +BEATRICE +Foul words is but foul wind, and foul wind is but +foul breath, and foul breath is noisome; therefore I +will depart unkissed. + + + +BENEDICK +Thou hast frighted the word out of his right sense, +so forcible is thy wit. But I must tell thee +plainly, Claudio undergoes my challenge; and either +I must shortly hear from him, or I will subscribe +him a coward. And, I pray thee now, tell me for +which of my bad parts didst thou first fall in love with me? + + + +BEATRICE +For them all together; which maintained so politic +a state of evil that they will not admit any good +part to intermingle with them. But for which of my +good parts did you first suffer love for me? + + + +BENEDICK +Suffer love! a good epithet! I do suffer love +indeed, for I love thee against my will. + + + +BEATRICE +In spite of your heart, I think; alas, poor heart! +If you spite it for my sake, I will spite it for +yours; for I will never love that which my friend hates. + + + +BENEDICK +Thou and I are too wise to woo peaceably. + + + +BEATRICE +It appears not in this confession: there's not one +wise man among twenty that will praise himself. + + + +BENEDICK +An old, an old instance, Beatrice, that lived in +the lime of good neighbours. If a man do not erect +in this age his own tomb ere he dies, he shall live +no longer in monument than the bell rings and the +widow weeps. + + + +BEATRICE +And how long is that, think you? + + + +BENEDICK +Question: why, an hour in clamour and a quarter in +rheum: therefore is it most expedient for the +wise, if Don Worm, his conscience, find no +impediment to the contrary, to be the trumpet of his +own virtues, as I am to myself. So much for +praising myself, who, I myself will bear witness, is +praiseworthy: and now tell me, how doth your cousin? + + + +BEATRICE +Very ill. + + + +BENEDICK +And how do you? + + + +BEATRICE +Very ill too. + + + +BENEDICK +Serve God, love me and mend. There will I leave +you too, for here comes one in haste. + + + +Enter URSULA + + +URSULA +Madam, you must come to your uncle. Yonder's old +coil at home: it is proved my Lady Hero hath been +falsely accused, the prince and Claudio mightily +abused; and Don John is the author of all, who is +fed and gone. Will you come presently? + + + +BEATRICE +Will you go hear this news, signior? + + + +BENEDICK +I will live in thy heart, die in thy lap, and be +buried in thy eyes; and moreover I will go with +thee to thy uncle's. + + + +Exeunt + + +SCENE III. A church. +Enter DON PEDRO, CLAUDIO, and three or four +with tapers + + +CLAUDIO +Is this the monument of Leonato? + + + +Lord +It is, my lord. + + + +CLAUDIO +Reading out of a scroll +Done to death by slanderous tongues +Was the Hero that here lies: +Death, in guerdon of her wrongs, +Gives her fame which never dies. +So the life that died with shame +Lives in death with glorious fame. +Hang thou there upon the tomb, +Praising her when I am dumb. +Now, music, sound, and sing your solemn hymn. +SONG. +Pardon, goddess of the night, +Those that slew thy virgin knight; +For the which, with songs of woe, +Round about her tomb they go. +Midnight, assist our moan; +Help us to sigh and groan, +Heavily, heavily: +Graves, yawn and yield your dead, +Till death be uttered, +Heavily, heavily. + + + +CLAUDIO +Now, unto thy bones good night! +Yearly will I do this rite. + + + +DON PEDRO +Good morrow, masters; put your torches out: +The wolves have prey'd; and look, the gentle day, +Before the wheels of Phoebus, round about +Dapples the drowsy east with spots of grey. +Thanks to you all, and leave us: fare you well. + + + +CLAUDIO +Good morrow, masters: each his several way. + + + +DON PEDRO +Come, let us hence, and put on other weeds; +And then to Leonato's we will go. + + + +CLAUDIO +And Hymen now with luckier issue speed's +Than this for whom we render'd up this woe. + + + +Exeunt + + +SCENE IV. A room in LEONATO'S house. +Enter LEONATO, ANTONIO, BENEDICK, BEATRICE, +MARGARET, URSULA, FRIAR FRANCIS, and HERO + + +FRIAR FRANCIS +Did I not tell you she was innocent? + + + +LEONATO +So are the prince and Claudio, who accused her +Upon the error that you heard debated: +But Margaret was in some fault for this, +Although against her will, as it appears +In the true course of all the question. + + + +ANTONIO +Well, I am glad that all things sort so well. + + + +BENEDICK +And so am I, being else by faith enforced +To call young Claudio to a reckoning for it. + + + +LEONATO +Well, daughter, and you gentle-women all, +Withdraw into a chamber by yourselves, +And when I send for you, come hither mask'd. +Exeunt Ladies +The prince and Claudio promised by this hour +To visit me. You know your office, brother: +You must be father to your brother's daughter +And give her to young Claudio. + + + +ANTONIO +Which I will do with confirm'd countenance. + + + +BENEDICK +Friar, I must entreat your pains, I think. + + + +FRIAR FRANCIS +To do what, signior? + + + +BENEDICK +To bind me, or undo me; one of them. +Signior Leonato, truth it is, good signior, +Your niece regards me with an eye of favour. + + + +LEONATO +That eye my daughter lent her: 'tis most true. + + + +BENEDICK +And I do with an eye of love requite her. + + + +LEONATO +The sight whereof I think you had from me, +From Claudio and the prince: but what's your will? + + + +BENEDICK +Your answer, sir, is enigmatical: +But, for my will, my will is your good will +May stand with ours, this day to be conjoin'd +In the state of honourable marriage: +In which, good friar, I shall desire your help. + + + +LEONATO +My heart is with your liking. + + + +FRIAR FRANCIS +And my help. +Here comes the prince and Claudio. + + + +Enter DON PEDRO and CLAUDIO, and two or +three others + + +DON PEDRO +Good morrow to this fair assembly. + + + +LEONATO +Good morrow, prince; good morrow, Claudio: +We here attend you. Are you yet determined +To-day to marry with my brother's daughter? + + + +CLAUDIO +I'll hold my mind, were she an Ethiope. + + + +LEONATO +Call her forth, brother; here's the friar ready. + + + +Exit ANTONIO + + +DON PEDRO +Good morrow, Benedick. Why, what's the matter, +That you have such a February face, +So full of frost, of storm and cloudiness? + + + +CLAUDIO +I think he thinks upon the savage bull. +Tush, fear not, man; we'll tip thy horns with gold +And all Europa shall rejoice at thee, +As once Europa did at lusty Jove, +When he would play the noble beast in love. + + + +BENEDICK +Bull Jove, sir, had an amiable low; +And some such strange bull leap'd your father's cow, +And got a calf in that same noble feat +Much like to you, for you have just his bleat. + + + +CLAUDIO +For this I owe you: here comes other reckonings. +Re-enter ANTONIO, with the Ladies masked +Which is the lady I must seize upon? + + + +ANTONIO +This same is she, and I do give you her. + + + +CLAUDIO +Why, then she's mine. Sweet, let me see your face. + + + +LEONATO +No, that you shall not, till you take her hand +Before this friar and swear to marry her. + + + +CLAUDIO +Give me your hand: before this holy friar, +I am your husband, if you like of me. + + + +HERO +And when I lived, I was your other wife: +Unmasking +And when you loved, you were my other husband. + + + +CLAUDIO +Another Hero! + + + +HERO +Nothing certainer: +One Hero died defiled, but I do live, +And surely as I live, I am a maid. + + + +DON PEDRO +The former Hero! Hero that is dead! + + + +LEONATO +She died, my lord, but whiles her slander lived. + + + +FRIAR FRANCIS +All this amazement can I qualify: +When after that the holy rites are ended, +I'll tell you largely of fair Hero's death: +Meantime let wonder seem familiar, +And to the chapel let us presently. + + + +BENEDICK +Soft and fair, friar. Which is Beatrice? + + + +BEATRICE +Unmasking I answer to that name. What is your will? + + + +BENEDICK +Do not you love me? + + + +BEATRICE +Why, no; no more than reason. + + + +BENEDICK +Why, then your uncle and the prince and Claudio +Have been deceived; they swore you did. + + + +BEATRICE +Do not you love me? + + + +BENEDICK +Troth, no; no more than reason. + + + +BEATRICE +Why, then my cousin Margaret and Ursula +Are much deceived; for they did swear you did. + + + +BENEDICK +They swore that you were almost sick for me. + + + +BEATRICE +They swore that you were well-nigh dead for me. + + + +BENEDICK +'Tis no such matter. Then you do not love me? + + + +BEATRICE +No, truly, but in friendly recompense. + + + +LEONATO +Come, cousin, I am sure you love the gentleman. + + + +CLAUDIO +And I'll be sworn upon't that he loves her; +For here's a paper written in his hand, +A halting sonnet of his own pure brain, +Fashion'd to Beatrice. + + + +HERO +And here's another +Writ in my cousin's hand, stolen from her pocket, +Containing her affection unto Benedick. + + + +BENEDICK +A miracle! here's our own hands against our hearts. +Come, I will have thee; but, by this light, I take +thee for pity. + + + +BEATRICE +I would not deny you; but, by this good day, I yield +upon great persuasion; and partly to save your life, +for I was told you were in a consumption. + + + +BENEDICK +Peace! I will stop your mouth. + + + +Kissing her + + +DON PEDRO +How dost thou, Benedick, the married man? + + + +BENEDICK +I'll tell thee what, prince; a college of +wit-crackers cannot flout me out of my humour. Dost +thou think I care for a satire or an epigram? No: +if a man will be beaten with brains, a' shall wear +nothing handsome about him. In brief, since I do +purpose to marry, I will think nothing to any +purpose that the world can say against it; and +therefore never flout at me for what I have said +against it; for man is a giddy thing, and this is my +conclusion. For thy part, Claudio, I did think to +have beaten thee, but in that thou art like to be my +kinsman, live unbruised and love my cousin. + + + +CLAUDIO +I had well hoped thou wouldst have denied Beatrice, +that I might have cudgelled thee out of thy single +life, to make thee a double-dealer; which, out of +question, thou wilt be, if my cousin do not look +exceedingly narrowly to thee. + + + +BENEDICK +Come, come, we are friends: let's have a dance ere +we are married, that we may lighten our own hearts +and our wives' heels. + + + +LEONATO +We'll have dancing afterward. + + + +BENEDICK +First, of my word; therefore play, music. Prince, +thou art sad; get thee a wife, get thee a wife: +there is no staff more reverend than one tipped with horn. + + + +Enter a Messenger + + +Messenger +My lord, your brother John is ta'en in flight, +And brought with armed men back to Messina. + + + +BENEDICK +Think not on him till to-morrow: +I'll devise thee brave punishments for him. +Strike up, pipers. + + +Dance +Exeunt + + +
diff --git a/axiom/test/resources/xml/om/namespaces.xml b/axiom/test/resources/xml/om/namespaces.xml new file mode 100644 index 0000000..e8e4df8 --- /dev/null +++ b/axiom/test/resources/xml/om/namespaces.xml @@ -0,0 +1,18 @@ + + + + Hello + + + + Hey + + + + Hey2 + + + + Hey3 + + diff --git a/axiom/test/resources/xml/om/nitf.xml b/axiom/test/resources/xml/om/nitf.xml new file mode 100644 index 0000000..269d99e --- /dev/null +++ b/axiom/test/resources/xml/om/nitf.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Use of Napster Quadruples + + By PETER SVENSSON + AP Business Writer + + The Associated Press + + NEW YORK + + + + +

Despite the uncertain legality of the Napster online music-sharing service, the number of people +using it more than quadrupled in just five months, Media Metrix said Monday.

+

That made Napster the fastest-growing software application ever recorded by the Internet research +company.

+

From 1.1 million home users in the United States in February, the first month Media Metrix +tracked the application, Napster use rocketed to 4.9 million users in July.

+

That represents 6 percent of U.S. home PC users who have modems, said Media Metrix, which pays +people to install monitoring software on their computers.

+

It estimates total usage from a panel of about 50,000 people in the United States.

+

Napster was also used at work by 887,000 people in July, Media Metrix said.

+

Napster Inc. has been sued by the recording industry for allegedly enabling copyright +infringement. The federal government weighed in on the case Friday, saying the service is not protected +under a key copyright law, as the San Mateo, Calif., company claims.

+

Bruce Ryon, head of Media Metrix's New Media Group, said Napster was used by "the full spectrum of PC users, not just the youth with time on their hands and a passion for music."

+

The Napster program allows users to copy digital music files from the hard drives of other +users over the Internet.

+

Napster Inc. said last week that 28 million people had downloaded its program. It does not reveal +its own figures for how many people actually use the software.

+

Because the program connects to the company's computers over the Internet every time +it is run, Napster Inc. can track usage exactly.

+

__

+

On the Net:

+

+http://www.napster.com

+

+http://www.mediametrix.com

+
+
+ +
diff --git a/axiom/test/resources/xml/om/numbers.xml b/axiom/test/resources/xml/om/numbers.xml new file mode 100644 index 0000000..a1791cd --- /dev/null +++ b/axiom/test/resources/xml/om/numbers.xml @@ -0,0 +1,18 @@ + + + + + 3 + 24 + 55 + 11 + 2 + -3 + + + + + + + + diff --git a/axiom/test/resources/xml/om/pi.xml b/axiom/test/resources/xml/om/pi.xml new file mode 100644 index 0000000..980bbf9 --- /dev/null +++ b/axiom/test/resources/xml/om/pi.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/axiom/test/resources/xml/om/pi2.xml b/axiom/test/resources/xml/om/pi2.xml new file mode 100644 index 0000000..46bce45 --- /dev/null +++ b/axiom/test/resources/xml/om/pi2.xml @@ -0,0 +1,6 @@ + + + foo + + bar + diff --git a/axiom/test/resources/xml/om/simple.xml b/axiom/test/resources/xml/om/simple.xml new file mode 100644 index 0000000..3cff71a --- /dev/null +++ b/axiom/test/resources/xml/om/simple.xml @@ -0,0 +1,2 @@ + +abd diff --git a/axiom/test/resources/xml/om/spaces.xml b/axiom/test/resources/xml/om/spaces.xml new file mode 100644 index 0000000..4c46c63 --- /dev/null +++ b/axiom/test/resources/xml/om/spaces.xml @@ -0,0 +1,10 @@ + + + baz + + baz + + baz + + ]]> + \ No newline at end of file diff --git a/axiom/test/resources/xml/om/test.xml b/axiom/test/resources/xml/om/test.xml new file mode 100644 index 0000000..a222795 --- /dev/null +++ b/axiom/test/resources/xml/om/test.xml @@ -0,0 +1,12 @@ + + + Axis2C OM HOWTO1748491379 + 1748491379 + + + +

+ This is vey good book on OM! +

+
+
diff --git a/axiom/test/resources/xml/om/testNamespaces.xml b/axiom/test/resources/xml/om/testNamespaces.xml new file mode 100644 index 0000000..50f7c93 --- /dev/null +++ b/axiom/test/resources/xml/om/testNamespaces.xml @@ -0,0 +1,22 @@ + diff --git a/axiom/test/resources/xml/om/underscore.xml b/axiom/test/resources/xml/om/underscore.xml new file mode 100644 index 0000000..111446f --- /dev/null +++ b/axiom/test/resources/xml/om/underscore.xml @@ -0,0 +1,6 @@ + + + 1 + <_b>2 + + diff --git a/axiom/test/resources/xml/om/web.xml b/axiom/test/resources/xml/om/web.xml new file mode 100644 index 0000000..972cf5d --- /dev/null +++ b/axiom/test/resources/xml/om/web.xml @@ -0,0 +1,42 @@ + + + + snoop + SnoopServlet + + + file + ViewFile + + initial + + 1000 + + + The initial value for the counter + + + + + + mv + + + *.wm + + + + + + + + manager + + + director + + + president + + + diff --git a/axiom/test/resources/xml/om/web2.xml b/axiom/test/resources/xml/om/web2.xml new file mode 100644 index 0000000..7d479d3 --- /dev/null +++ b/axiom/test/resources/xml/om/web2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/axiom/test/resources/xml/soap/OMElementTest.xml b/axiom/test/resources/xml/soap/OMElementTest.xml new file mode 100644 index 0000000..9cd474c --- /dev/null +++ b/axiom/test/resources/xml/soap/OMElementTest.xml @@ -0,0 +1,22 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + This is some text + 2 + Some Other Text + + +
\ No newline at end of file diff --git a/axiom/test/resources/xml/soap/badsoap/bodyNotQualified.xml b/axiom/test/resources/xml/soap/badsoap/bodyNotQualified.xml new file mode 100644 index 0000000..eef7895 --- /dev/null +++ b/axiom/test/resources/xml/soap/badsoap/bodyNotQualified.xml @@ -0,0 +1,19 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + +
\ No newline at end of file diff --git a/axiom/test/resources/xml/soap/badsoap/envelopeMissing.xml b/axiom/test/resources/xml/soap/badsoap/envelopeMissing.xml new file mode 100644 index 0000000..4106495 --- /dev/null +++ b/axiom/test/resources/xml/soap/badsoap/envelopeMissing.xml @@ -0,0 +1,20 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + + +
\ No newline at end of file diff --git a/axiom/test/resources/xml/soap/badsoap/haederBodyWrongOrder.xml b/axiom/test/resources/xml/soap/badsoap/haederBodyWrongOrder.xml new file mode 100644 index 0000000..e71c49a --- /dev/null +++ b/axiom/test/resources/xml/soap/badsoap/haederBodyWrongOrder.xml @@ -0,0 +1,20 @@ + + + + + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+
\ No newline at end of file diff --git a/axiom/test/resources/xml/soap/badsoap/notnamespaceQualified.xml b/axiom/test/resources/xml/soap/badsoap/notnamespaceQualified.xml new file mode 100644 index 0000000..dfc013c --- /dev/null +++ b/axiom/test/resources/xml/soap/badsoap/notnamespaceQualified.xml @@ -0,0 +1,15 @@ + +
+ uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + +
\ No newline at end of file diff --git a/axiom/test/resources/xml/soap/badsoap/twoBodymessage.xml b/axiom/test/resources/xml/soap/badsoap/twoBodymessage.xml new file mode 100644 index 0000000..a96a401 --- /dev/null +++ b/axiom/test/resources/xml/soap/badsoap/twoBodymessage.xml @@ -0,0 +1,24 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + + + + + + +
\ No newline at end of file diff --git a/axiom/test/resources/xml/soap/badsoap/twoheaders.xml b/axiom/test/resources/xml/soap/badsoap/twoheaders.xml new file mode 100644 index 0000000..3064771 --- /dev/null +++ b/axiom/test/resources/xml/soap/badsoap/twoheaders.xml @@ -0,0 +1,29 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + +
\ No newline at end of file diff --git a/axiom/test/resources/xml/soap/badsoap/wrongSoapNs.xml b/axiom/test/resources/xml/soap/badsoap/wrongSoapNs.xml new file mode 100644 index 0000000..7d84398 --- /dev/null +++ b/axiom/test/resources/xml/soap/badsoap/wrongSoapNs.xml @@ -0,0 +1,20 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + + +
\ No newline at end of file diff --git a/axiom/test/resources/xml/soap/emtyBodymessage.xml b/axiom/test/resources/xml/soap/emtyBodymessage.xml new file mode 100644 index 0000000..ea20929 --- /dev/null +++ b/axiom/test/resources/xml/soap/emtyBodymessage.xml @@ -0,0 +1,18 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + +
\ No newline at end of file diff --git a/axiom/test/resources/xml/soap/invalidMustUnderstandSOAP12.xml b/axiom/test/resources/xml/soap/invalidMustUnderstandSOAP12.xml new file mode 100644 index 0000000..1b5183f --- /dev/null +++ b/axiom/test/resources/xml/soap/invalidMustUnderstandSOAP12.xml @@ -0,0 +1,13 @@ + + + + foo + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/xml/soap/minimalMessage.xml b/axiom/test/resources/xml/soap/minimalMessage.xml new file mode 100644 index 0000000..ea76d72 --- /dev/null +++ b/axiom/test/resources/xml/soap/minimalMessage.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/axiom/test/resources/xml/soap/reallyReallyBigMessage.xml b/axiom/test/resources/xml/soap/reallyReallyBigMessage.xml new file mode 100644 index 0000000..687ed22 --- /dev/null +++ b/axiom/test/resources/xml/soap/reallyReallyBigMessage.xml @@ -0,0 +1,2529 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/xml/soap/sample1.txt b/axiom/test/resources/xml/soap/sample1.txt new file mode 100644 index 0000000..a5f7560 --- /dev/null +++ b/axiom/test/resources/xml/soap/sample1.txt @@ -0,0 +1,12 @@ +POST /axis/services/EchoService HTTP/1.1 +Host: 127.0.0.1 +Content-Type: application/soap+xml; charset="utf-8" + + + + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/xml/soap/sample1.xml b/axiom/test/resources/xml/soap/sample1.xml new file mode 100644 index 0000000..9d74dfe --- /dev/null +++ b/axiom/test/resources/xml/soap/sample1.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/xml/soap/security2-soap.xml b/axiom/test/resources/xml/soap/security2-soap.xml new file mode 100644 index 0000000..4d6c272 --- /dev/null +++ b/axiom/test/resources/xml/soap/security2-soap.xml @@ -0,0 +1,54 @@ + + + + + http://fabrikam123.com/getQuote + http://fabrikam123.com/stocks + mailto:johnsmith@fabrikam123.com + uuid:84b9f5d0-33fb-4a81-b02b-5b760641c1d6 + + + + MIIEZzCCA9CgAwIBAgIQEmtJZc0rqrKh5i... + + + + + + + + + + + + EULddytSo1... + + + + BL8jdfToEb1l/vXcMZNNjPOV... + + + + + + + + + + + + QQQ + + + \ No newline at end of file diff --git a/axiom/test/resources/xml/soap/soap11/soap11fault.xml b/axiom/test/resources/xml/soap/soap11/soap11fault.xml new file mode 100644 index 0000000..c9acd34 --- /dev/null +++ b/axiom/test/resources/xml/soap/soap11/soap11fault.xml @@ -0,0 +1,16 @@ + + + Test + + + + SOAP-ENV:MustUnderstand + SOAP Must Understand Error + Actor + Detail text + Some Element Text + + + + \ No newline at end of file diff --git a/axiom/test/resources/xml/soap/soap11/soap11message.xml b/axiom/test/resources/xml/soap/soap11/soap11message.xml new file mode 100644 index 0000000..8a0b231 --- /dev/null +++ b/axiom/test/resources/xml/soap/soap11/soap11message.xml @@ -0,0 +1,46 @@ + + + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+ + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + + http://localhost:8081/axis/services/BankPort + +
+ + + + env:Sender + + Sender Timeout + + http://schemas.xmlsoap.org/soap/envelope/actor/ultimateReceiver + + + Details of error + + P5M + + + + P3M + + + + + +
+ diff --git a/axiom/test/resources/xml/soap/soap12message.xml b/axiom/test/resources/xml/soap/soap12message.xml new file mode 100644 index 0000000..5830e6c --- /dev/null +++ b/axiom/test/resources/xml/soap/soap12message.xml @@ -0,0 +1,58 @@ + + + + foo + + + foo + + + foo + + + + + + env:Sender + + m:MessageTimeout In First Subcode + + m:MessageTimeout In Second Subcode + + m:MessageTimeout In Third Subcode + + + + + + Sender Timeout + + + http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver + + + ultimateReceiver + + + Details of error + + P5M\n + + + + P3M\n + + + + + + \ No newline at end of file diff --git a/axiom/test/resources/xml/soap/soapmessage.txt b/axiom/test/resources/xml/soap/soapmessage.txt new file mode 100644 index 0000000..acae3b5 --- /dev/null +++ b/axiom/test/resources/xml/soap/soapmessage.txt @@ -0,0 +1,16 @@ +POST /axis/services/EchoService HTTP/1.1 +Host: 127.0.0.1 +Content-Type: application/soap+xml; charset="utf-8" + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + http://localhost:8081/axis/services/BankPort + +
http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous
+
+
+ + + +
\ No newline at end of file diff --git a/axiom/test/resources/xml/soap/soapmessage.xml b/axiom/test/resources/xml/soap/soapmessage.xml new file mode 100644 index 0000000..0f49778 --- /dev/null +++ b/axiom/test/resources/xml/soap/soapmessage.xml @@ -0,0 +1,20 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + + +
\ No newline at end of file diff --git a/axiom/test/resources/xml/soap/soapmessage1.xml b/axiom/test/resources/xml/soap/soapmessage1.xml new file mode 100644 index 0000000..3d69585 --- /dev/null +++ b/axiom/test/resources/xml/soap/soapmessage1.xml @@ -0,0 +1,27 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + + + 1001 + + +
\ No newline at end of file diff --git a/axiom/test/resources/xml/soap/test.xml b/axiom/test/resources/xml/soap/test.xml new file mode 100644 index 0000000..3a303d4 --- /dev/null +++ b/axiom/test/resources/xml/soap/test.xml @@ -0,0 +1,59 @@ + + + + foo + + + foo + + + foo + + + + + + env:Sender + + m:MessageTimeout In First Subcode + + m:MessageTimeout In Second Subcode + + m:MessageTimeout In Third Subcode + + + + + + Sender Timeout + + + http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver + + + ultimateReceiver + + + Details of error + + P5M\n + + + + P3M\n + + + + + + + diff --git a/axiom/test/resources/xml/soap/whitespacedMessage.xml b/axiom/test/resources/xml/soap/whitespacedMessage.xml new file mode 100644 index 0000000..0af632b --- /dev/null +++ b/axiom/test/resources/xml/soap/whitespacedMessage.xml @@ -0,0 +1,27 @@ + + + + + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+ +
+ + + + + + + + +
\ No newline at end of file diff --git a/axiom/test/resources/xml/soap/wrongEnvelopeNamespace.xml b/axiom/test/resources/xml/soap/wrongEnvelopeNamespace.xml new file mode 100644 index 0000000..ff81835 --- /dev/null +++ b/axiom/test/resources/xml/soap/wrongEnvelopeNamespace.xml @@ -0,0 +1,12 @@ + + + + + + IBM + + + + \ No newline at end of file diff --git a/axiom/test/soap/Makefile.am b/axiom/test/soap/Makefile.am new file mode 100644 index 0000000..fdf79a0 --- /dev/null +++ b/axiom/test/soap/Makefile.am @@ -0,0 +1,13 @@ +TESTS = test_soap +noinst_PROGRAMS = test_soap +check_PROGRAMS = test_soap +SUBDIRS = +AM_CFLAGS = -g -O2 -pthread +test_soap_SOURCES = test_soap.c + +test_soap_LDADD = ../../../util/src/libaxutil.la \ + $(top_builddir)/src/om/libaxis2_axiom.la + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/parser \ + -I ../../../util/include diff --git a/axiom/test/soap/test_soap.c b/axiom/test/soap/test_soap.c new file mode 100644 index 0000000..13f90e6 --- /dev/null +++ b/axiom/test/soap/test_soap.c @@ -0,0 +1,550 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +FILE *f = NULL; +int +read_soap( + char *buffer, + int size, + void *ctx) +{ + int len = 0; + char *pos = NULL; + len = fread(buffer, sizeof(char), size, f); + if (buffer) + pos = strstr(buffer, "---"); + if (pos) + { + len = pos - buffer; + *pos = '\0'; + } + printf("buffer = %s\n", buffer); + return len; +} + +/*int read_soap(char *buffer, int size, void *ctx) +{ + return fread(buffer, sizeof(char), size, f); +}*/ + +int +close_soap( + void *ctx) +{ + fclose(f); + return AXIS2_TRUE; +} + +int +printnode( + axiom_node_t * om_node, + const axutil_env_t * env) +{ + axiom_element_t *om_ele = NULL; + axis2_char_t *localname = NULL; + axiom_namespace_t *om_ns = NULL; + axis2_char_t *uri = NULL; + axis2_char_t *prefix = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if (!om_node) + return AXIS2_FAILURE; + + if (axiom_node_get_node_type(om_node, env) == AXIOM_ELEMENT) + { + om_ele = (axiom_element_t *) axiom_node_get_data_element(om_node, env); + if (!om_ele) + return AXIS2_FAILURE; + + localname = axiom_element_get_localname(om_ele, env); + if (localname) + printf("\n %s \n", localname); + om_ns = axiom_element_get_namespace(om_ele, env, om_node); + + if (om_ns) + { + prefix = axiom_namespace_get_prefix(om_ns, env); + uri = axiom_namespace_get_uri(om_ns, env); + + printf("\n uri %s \n prefix %s \n", uri, prefix); + } + } + return 0; +} + +int +build_soap( + const axutil_env_t * env, + const char *filename, + const axis2_char_t * uri) +{ + axiom_stax_builder_t *om_builder = NULL; + + axiom_xml_reader_t *xml_reader = NULL; + + axiom_soap_builder_t *soap_builder = NULL; + axiom_soap_envelope_t *soap_envelope = NULL; + + axiom_node_t *om_node = NULL; + axis2_char_t *buffer = NULL; + + axiom_xml_writer_t *xml_writer = NULL; + axiom_output_t *om_output = NULL; + + axiom_soap_body_t *soap_body = NULL; + axiom_soap_header_t *soap_header = NULL; + axiom_children_qname_iterator_t *children_iter = NULL; + + int status = AXIS2_SUCCESS; + + if (!filename) + return -1; + f = fopen(filename, "r"); + if (!f) + return -1; + printf(" \n\n _________ Test SOAP BUILD ___________ \n\n "); + + xml_reader = + axiom_xml_reader_create_for_io(env, read_soap, close_soap, NULL, NULL); + if (!xml_reader) + { + printf("%s \n", axutil_error_get_message(env->error)); + return AXIS2_FAILURE; + } + + om_builder = axiom_stax_builder_create(env, xml_reader); + if (!om_builder) + { + axiom_xml_reader_free(xml_reader, env); + printf("%s \n", axutil_error_get_message(env->error)); + return AXIS2_FAILURE; + } + + soap_builder = axiom_soap_builder_create(env, om_builder, uri); + if (!soap_builder) + { + printf("%s \n", axutil_error_get_message(env->error)); + return AXIS2_FAILURE; + } + soap_envelope = axiom_soap_builder_get_soap_envelope(soap_builder, env); + if (!soap_envelope) + { + axiom_soap_builder_free(soap_builder, env); + printf("%s \n", axutil_error_get_message(env->error)); + return AXIS2_FAILURE; + } + + om_node = axiom_soap_envelope_get_base_node(soap_envelope, env); + + if (om_node) + printnode(om_node, env); + + soap_header = axiom_soap_envelope_get_header(soap_envelope, env); + if (soap_header) + { + om_node = axiom_soap_header_get_base_node(soap_header, env); + if (om_node) + printnode(om_node, env); + + children_iter = + axiom_soap_header_examine_all_header_blocks(soap_header, env); + if (children_iter) + { + /*while (axiom_children_iterator_has_next(children_iter, env)) + { + om_node = axiom_children_iterator_next(children_iter, env); + if (om_node) + printnode(om_node, env); + } */ + } + } + + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + if (soap_body) + { + if (axiom_soap_body_has_fault(soap_body, env)); + printf("axiom_soap_body_has_fault\n"); + om_node = axiom_soap_body_get_base_node(soap_body, env); + if (om_node) + printnode(om_node, env); + else + printf("\n\n soap body base node null \n\n"); + } + else + { + printf("%s \n", axutil_error_get_message(env->error)); + printf("\n\n ERROR soap_body NULL.\n\n"); + return AXIS2_FAILURE; + } + + if (axiom_soap_body_has_fault(soap_body, env)) + { + printf("\n\nsoap body has a fault element\n\n\n "); + } + + om_node = axiom_soap_body_get_base_node(soap_body, env); + if (om_node) + { + while (!(axiom_node_is_complete(om_node, env))) + { + status = axiom_soap_builder_next(soap_builder, env); + if (status == AXIS2_FAILURE) + { + printf("failure %s", axutil_error_get_message(env->error)); + return AXIS2_FAILURE; + } + } + } + + xml_writer = + axiom_xml_writer_create_for_memory(env, NULL, AXIS2_FALSE, AXIS2_FALSE, + AXIS2_XML_PARSER_TYPE_BUFFER); + if (!xml_writer) + { + axiom_soap_builder_free(soap_builder, env); + return AXIS2_FAILURE; + } + + om_output = axiom_output_create(env, xml_writer); + if (!om_output) + { + axiom_soap_builder_free(soap_builder, env); + axiom_xml_writer_free(xml_writer, env); + return AXIS2_FAILURE; + } + + axiom_soap_envelope_serialize(soap_envelope, env, om_output, AXIS2_FALSE); + + buffer = (axis2_char_t *) axiom_xml_writer_get_xml(xml_writer, env); + + printf("\n\nThe serialized xml is >>>>>>>>>>>>>\n\n\n%s \n\n\n", buffer); + + if (buffer) + AXIS2_FREE(env->allocator, buffer); + + axiom_soap_envelope_free(soap_envelope, env); + + printf(" \n __________ END TEST SOAP BUILD ____________ \n"); + + return AXIS2_SUCCESS; +} + +int +build_soap_programatically( + const axutil_env_t * env) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_body_t *soap_body = NULL; + axiom_soap_header_t *soap_header = NULL; + axiom_soap_fault_t *soap_fault = NULL; + axiom_soap_fault_code_t *fault_code = NULL; + axiom_soap_header_block_t *hb1 = NULL; + + axiom_namespace_t *env_ns = NULL; + axiom_namespace_t *test_ns = NULL; + axiom_namespace_t *role_ns = NULL; + + axiom_xml_writer_t *xml_writer = NULL; + axiom_output_t *om_output = NULL; + + axis2_char_t *buffer = NULL; + axiom_node_t *hb_node = NULL; + axiom_element_t *hb_ele = NULL; + + printf(" \n ____________ BUILD SOAP PROGRAMATICALLY _______________ \n"); + + env_ns = + axiom_namespace_create(env, "http://www.w3.org/2003/05/soap-envelope", + "env"); + if (!env_ns) + return AXIS2_FAILURE; + + soap_envelope = axiom_soap_envelope_create(env, env_ns); + if (!soap_envelope) + return AXIS2_FAILURE; + + soap_header = axiom_soap_header_create_with_parent(env, soap_envelope); + if (!soap_header) + return AXIS2_FAILURE; + + test_ns = + axiom_namespace_create(env, "http://example.org/ts-tests", "test"); + + role_ns = + axiom_namespace_create(env, + "http://www.w3.org/2003/05/soap-envelope/role/next", + "role"); + + hb1 = + axiom_soap_header_block_create_with_parent(env, "echoOk", role_ns, + soap_header); + + hb_node = axiom_soap_header_block_get_base_node(hb1, env); + + hb_ele = axiom_node_get_data_element(hb_node, env); + + axiom_element_set_namespace(hb_ele, env, test_ns, hb_node); + + soap_body = axiom_soap_body_create_with_parent(env, soap_envelope); + + soap_fault = axiom_soap_fault_create_with_parent(env, soap_body); + + fault_code = axiom_soap_fault_code_create_with_parent(env, soap_fault); + + xml_writer = + axiom_xml_writer_create_for_memory(env, NULL, AXIS2_FALSE, AXIS2_FALSE, + AXIS2_XML_PARSER_TYPE_BUFFER); + + om_output = axiom_output_create(env, xml_writer); + + axiom_soap_envelope_serialize(soap_envelope, env, om_output, AXIS2_FALSE); + + buffer = (axis2_char_t *) axiom_xml_writer_get_xml(xml_writer, env); + + printf("%s \n", buffer); + + axiom_soap_envelope_free(soap_envelope, env); + + AXIS2_FREE(env->allocator, buffer); + + buffer = NULL; + + axiom_output_free(om_output, env); + + printf("\n __________ END BUILD SOAP PROGRAMATICALLY ____________\n"); + + return AXIS2_SUCCESS; +} + +int +create_soap_fault( + const axutil_env_t * env) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_body_t *soap_body = NULL; + axiom_soap_fault_t *soap_fault = NULL; + axiom_xml_writer_t *xml_writer = NULL; + axiom_output_t *om_output = NULL; + axis2_char_t *buffer = NULL; + axis2_char_t *exception_text = NULL; + axis2_status_t status = 0; + + soap_envelope = + axiom_soap_envelope_create_default_soap_fault_envelope(env, + "Fault Code", + "Fault Reason", + AXIOM_SOAP11, + NULL, NULL); + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + soap_fault = axiom_soap_body_get_fault(soap_body, env); + + axiom_soap_fault_detail_create_with_parent(env, soap_fault); + axiom_soap_fault_role_create_with_parent(env, soap_fault); + xml_writer = + axiom_xml_writer_create_for_memory(env, NULL, AXIS2_FALSE, AXIS2_FALSE, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_output = axiom_output_create(env, xml_writer); + axiom_soap_envelope_serialize(soap_envelope, env, om_output, AXIS2_FALSE); + buffer = (axis2_char_t *) axiom_xml_writer_get_xml(xml_writer, env); + printf("\n Testing Create soap fault \n %s \n", buffer); + + status = axiom_soap_fault_set_exception(soap_fault, env, "MyNewException"); + exception_text = axiom_soap_fault_get_exception(soap_fault, env); + + printf(" Testing soap fault set exception \n"); + printf("Actual = %s Expected = %s |", exception_text, "MyNewException"); + if (status && (0 == strcmp(exception_text, "MyNewException"))) + printf("SUCCESS\n"); + else + printf("FAILURE\n"); + + axiom_soap_envelope_free(soap_envelope, env); + axiom_output_free(om_output, env); + return 0; +} + +int +create_soap_fault_with_exception( + const axutil_env_t * env) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_body_t *soap_body = NULL; + axiom_soap_fault_t *soap_fault = NULL; + axiom_xml_writer_t *xml_writer = NULL; + axiom_output_t *om_output = NULL; + axis2_char_t *exception_text = NULL; + + soap_envelope = + axiom_soap_envelope_create_default_soap_fault_envelope(env, + "Fault Code", + "Fault Reason", + AXIOM_SOAP11, + NULL, NULL); + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + soap_fault = + axiom_soap_fault_create_with_exception(env, soap_body, "MyException"); + + axiom_soap_fault_detail_create_with_parent(env, soap_fault); + axiom_soap_fault_role_create_with_parent(env, soap_fault); + xml_writer = + axiom_xml_writer_create_for_memory(env, NULL, AXIS2_FALSE, AXIS2_FALSE, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_output = axiom_output_create(env, xml_writer); + axiom_soap_envelope_serialize(soap_envelope, env, om_output, AXIS2_FALSE); + + exception_text = axiom_soap_fault_get_exception(soap_fault, env); + printf(" Testing Create soap fault with exception \n"); + printf("Actual = %s Expected = %s |", exception_text, "MyException"); + if (0 == strcmp(exception_text, "MyException")) + printf("SUCCESS\n"); + else + printf("FAILURE\n"); + + axiom_soap_envelope_free(soap_envelope, env); + axiom_output_free(om_output, env); + return 0; +} + +int +test_soap_fault_node( + const axutil_env_t * env) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_body_t *soap_body = NULL; + axiom_soap_fault_t *soap_fault = NULL; + axis2_char_t *node_text = NULL; + axiom_soap_fault_node_t *fault_node = NULL; + axis2_status_t status = 0; + + printf("Testing soap fault node \n"); + soap_envelope = + axiom_soap_envelope_create_default_soap_fault_envelope(env, + "env:Receiver", + "Something went wrong!", + AXIOM_SOAP12, + NULL, NULL); + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + soap_fault = axiom_soap_body_get_fault(soap_body, env); + + fault_node = axiom_soap_fault_node_create_with_parent(env, soap_fault); + status = axiom_soap_fault_node_set_value(fault_node, env, "MyFaultNode"); + node_text = axiom_soap_fault_node_get_value(fault_node, env); + + printf("Actual = %s Expected = %s |", node_text, "MyFaultNode"); + if (0 == strcmp(node_text, "MyFaultNode")) + printf("SUCCESS\n"); + else + printf("FAILURE\n"); + axiom_soap_envelope_free(soap_envelope, env); + return 0; +} + +int +test_soap_fault_value( + const axutil_env_t * env) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_body_t *soap_body = NULL; + axiom_soap_fault_t *soap_fault = NULL; + axiom_soap_fault_code_t *soap_code = NULL; + axiom_soap_fault_value_t *value = NULL; + axis2_char_t *value_text = NULL; + + printf("TEST SOAP FAULT VALUE\n"); + soap_envelope = + axiom_soap_envelope_create_default_soap_fault_envelope(env, + "env:Receiver", + "Something went wrong!", + AXIOM_SOAP12, + NULL, NULL); + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + soap_fault = axiom_soap_body_get_fault(soap_body, env); + soap_code = axiom_soap_fault_get_code(soap_fault, env); + value = axiom_soap_fault_code_get_value(soap_code, env); + value_text = axiom_soap_fault_value_get_text(value, env); + + printf("Actual = %s Expected = %s |", value_text, "env:Receiver"); + if (0 == strcmp(value_text, "env:Receiver")) + printf("SUCCESS\n"); + else + printf("FAILURE\n"); + + axiom_soap_envelope_free(soap_envelope, env); + return 0; +} + +int +main( + int argc, + char *argv[]) +{ + axutil_env_t *env = NULL; + axutil_allocator_t *allocator = NULL; + axutil_error_t *error = NULL; + axutil_log_t *log = NULL; + const axis2_char_t *uri = AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + const char *filename = "../resources/xml/soap/test.xml"; + if (argc > 1) + filename = argv[1]; + if (argc > 2) + { + if (axutil_strcmp(argv[2], "0") == 0) + uri = AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI; + else if (axutil_strcmp(argv[2], "1") == 0) + uri = AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + } + allocator = axutil_allocator_init(NULL); + log = axutil_log_create(allocator, NULL, "test_soap.log"); + log->level = AXIS2_LOG_LEVEL_DEBUG; + error = axutil_error_create(allocator); + env = axutil_env_create_with_error_log(allocator, error, log); + + axutil_error_init(); + /*build_soap_programatically(env); */ + build_soap(env, filename, uri); + create_soap_fault(env); + create_soap_fault_with_exception(env); + test_soap_fault_node(env); + test_soap_fault_value(env); + axutil_env_free(env); + return 0; +} diff --git a/axiom/test/util/Makefile.am b/axiom/test/util/Makefile.am new file mode 100644 index 0000000..df0fd11 --- /dev/null +++ b/axiom/test/util/Makefile.am @@ -0,0 +1,8 @@ +noinst_PROGRAMS = axiom +axiom_SOURCES = axiom_util_test.c +axiom_LDADD = \ + $(top_builddir)/src/om/libaxis2_axiom.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../util/include \ + -I ../../../include diff --git a/axiom/test/util/axiom_util_test.c b/axiom/test/util/axiom_util_test.c new file mode 100644 index 0000000..38f44f4 --- /dev/null +++ b/axiom/test/util/axiom_util_test.c @@ -0,0 +1,168 @@ +#include +#include +#include +#include +#include +#include "../../../util/test/util/create_env.h" + FILE *f = NULL; + axiom_node_t *node = NULL; + axiom_node_t *child = NULL; + axiom_types_t node_type; + axiom_node_t *first_node = NULL; + axiom_element_t *my_ele = NULL; + axiom_element_t *first_element = NULL; + axis2_char_t *uri = "http://www.develop.com/student"; + const axutil_uri_t * uri1 = NULL; + axiom_node_t *last_child = NULL; + axiom_element_t *localname_last_child = NULL; + axiom_element_t *localname_next_sibling = NULL; + axiom_element_t *uri_localname_first_child = NULL; + axiom_element_t *uri_localname_last_child = NULL; + axiom_element_t *uri_localname_next_sibling = NULL; + axiom_element_t *localname_first_child = NULL; + axis2_char_t *localname = NULL; + axiom_element_t *data_element = NULL; + axiom_element_t *next_sibling = NULL; + axiom_namespace_t *ns = NULL; + axiom_element_t *last_element = NULL; + axutil_qname_t *qname = NULL; + axis2_char_t *attr_name = NULL; + axiom_attribute_t *attr = NULL; + axis2_char_t *attr_value = NULL; + axiom_element_t *localname_attr_first_child = NULL; + axiom_element_t *localname_attr_last_child = NULL; + axiom_element_t *localname_attr_next_sibling = NULL; + axiom_child_element_iterator_t * child_element = NULL; + axis2_char_t * localpart = "type"; + axis2_char_t *child_node_text = NULL; + axis2_char_t *node_namespace_uri = NULL; + axiom_document_t * new_document = NULL; + axutil_array_list_t * names; + axiom_node_t *parent = NULL; + axis2_char_t * target = NULL; + axis2_char_t * value = NULL; + axiom_node_t *temp_node = NULL; + axiom_xml_reader_t *xml_reader = NULL; +int read_input_callback(char *buffer, int size, void* ctx) +{ + return fread(buffer, sizeof(char), size, f); +} +int close_input_callback(void *ctx) +{ + return fclose(f); +} +axis2_status_t build_and_serialize_om(axutil_env_t *env) +{ + axiom_node_t *root_node = NULL; + + axiom_element_t *root_ele = NULL; + axiom_document_t *document = NULL; + axiom_stax_builder_t *om_builder = NULL; + + f = fopen("test.xml","r"); + xml_reader = axiom_xml_reader_create_for_io(env, read_input_callback, close_input_callback, NULL, NULL); + if(!xml_reader) + return -1; + + om_builder = axiom_stax_builder_create(env, xml_reader); + if(!om_builder) + { + axiom_xml_reader_free(xml_reader, env); + return AXIS2_FAILURE; + } + + document = axiom_stax_builder_get_document(om_builder, env); + if(!document) + { + axiom_stax_builder_free(om_builder, env); + return AXIS2_FAILURE; + } + + root_node = axiom_document_get_root_element(document, env); + + if(!root_node) + { + axiom_stax_builder_free(om_builder, env); + return AXIS2_FAILURE; + } + if(root_node) + { + if(axiom_node_get_node_type(root_node, env) == AXIOM_ELEMENT) + { + root_ele = (axiom_element_t*)axiom_node_get_data_element(root_node, env); + if(root_ele) + { + printf(" %s is the root element \n" ,axiom_element_get_localname(root_ele, env)); + } + } + } + + axiom_document_build_all(document, env); + child = axiom_node_get_first_child(root_node, env); + printf ("%s\n", axiom_node_to_string (child, env)); + node = axiom_node_get_next_sibling(child, env); + temp_node = axiom_node_get_next_sibling (node, env); + child = axiom_node_get_first_child(node, env); + printf (" %s\n", axiom_node_to_string (temp_node, env)); + node_type = axiom_node_get_node_type(child,env); + data_element =(axiom_element_t*)axiom_node_get_data_element(child,env); + last_child = axiom_node_get_last_child(temp_node,env); + ns = axiom_element_get_namespace((axiom_element_t*)axiom_node_get_data_element(root_node,env), env, root_node); + printf("\nThe namespace = %s\n", axiom_namespace_to_string(ns,env)); + uri = axiom_namespace_get_uri(ns,env); + axiom_util_get_next_siblng_element_with_localnames(my_ele,env,node,names,&child); + axiom_util_get_last_child_element_with_localnames(my_ele,env,node,names,&child); + my_ele = axiom_util_get_first_child_element_with_uri(root_node,env,uri,&child); + axiom_util_get_first_child_element_with_localnames(my_ele,env,node,names,&child); + child = axiom_node_get_last_child(node, env); + axiom_util_new_document(env,uri1); + printf("\nmy_ele = "); + printf("%s\n ",axiom_element_to_string(my_ele,env,child)); + first_element = axiom_util_get_first_child_element(my_ele,env,child,&child); + printf("The first element = %s\n",axiom_element_to_string(first_element,env,node)); + last_element = axiom_util_get_last_child_element(my_ele,env,root_node,&child); + localname = axiom_element_get_localname(my_ele,env); + localname_last_child = axiom_util_get_last_child_element_with_localname(my_ele,env,root_node,localname,&child); + localname_next_sibling = axiom_util_get_next_siblng_element_with_localname(my_ele,env,root_node,localname,&child); + uri_localname_first_child = axiom_util_get_first_child_element_with_uri_localname(my_ele,env,root_node,localname,uri,&child); + uri_localname_last_child = axiom_util_get_last_child_element_with_uri_localname(my_ele,env,root_node,localname,uri,&child); + uri_localname_next_sibling = axiom_util_get_next_sibling_element_with_uri_localname(my_ele,env,root_node,localname,uri,&child); + qname = axutil_qname_create(env,localpart, NULL, NULL); + printf("The qname is "); + printf("%s",axutil_qname_to_string(qname,env)); + printf("\nThe localname is "); + printf("%s\n", axiom_element_get_localname(my_ele, env)); + attr = axiom_element_get_attribute(my_ele,env,qname); + attr_name = axiom_attribute_get_localname(attr,env); + attr_value = axiom_element_get_attribute_value(my_ele,env,qname); + localname_attr_first_child = axiom_util_get_first_child_element_with_localname_attr(my_ele,env,root_node,localname,attr_name,attr_value,&child); + localname_attr_last_child = axiom_util_get_last_child_element_with_localname_attr(my_ele,env,root_node,localname,attr_name,attr_value,&child); + localname_attr_next_sibling = axiom_util_get_next_siblng_element_with_localname_attr(my_ele,env,root_node,localname,attr_name,attr_value,&child); + axiom_util_get_child_node_text(node,env); + node_namespace_uri = axiom_util_get_node_namespace_uri(node,env); + child_element = axiom_util_get_child_elements(my_ele,env,node); + printf("%s\n",axiom_element_to_string(localname_attr_next_sibling,env,node)); + printf("%s\n","test is SUCCESS"); + return AXIS2_SUCCESS; +} + +int main() +{ + int status = AXIS2_SUCCESS; + axutil_env_t *env = NULL; + status = build_and_serialize_om(env); + + if(status == AXIS2_FAILURE) + { + printf(" build AXIOM failed"); + } + + axutil_env_free(env); + return 0; +} + + + + + + diff --git a/axiom/test/util/build.sh b/axiom/test/util/build.sh new file mode 100644 index 0000000..f3b3dd2 --- /dev/null +++ b/axiom/test/util/build.sh @@ -0,0 +1,2 @@ +#!/bin/bash +gcc axiom_util_test.c ../../../util/test/util/create_env.c -g -I$AXIS2C_HOME/include/axis2-1.2 -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -o axiom diff --git a/axiom/test/util/test.xml b/axiom/test/util/test.xml new file mode 100644 index 0000000..0b87a31 --- /dev/null +++ b/axiom/test/util/test.xml @@ -0,0 +1,7 @@ + + + 3235329 + Jeff Smith + C# + 9.5 + diff --git a/axiom/test/xpath/Makefile.am b/axiom/test/xpath/Makefile.am new file mode 100644 index 0000000..ed70ed6 --- /dev/null +++ b/axiom/test/xpath/Makefile.am @@ -0,0 +1,20 @@ +TESTS = +noinst_PROGRAMS = test_xpath test_xpath_streaming +check_PROGRAMS = test_xpath test_xpath_streaming +SUBDIRS = +test_xpath_SOURCES = test_xpath.c + +test_xpath_streaming_SOURCES = test_xpath_streaming.c + +test_xpath_LDADD = ../../../util/src/libaxutil.la \ + $(top_builddir)/src/om/libaxis2_axiom.la \ + $(top_builddir)/src/xpath/libaxis2_xpath.la + +test_xpath_streaming_LDADD = ../../../util/src/libaxutil.la \ + $(top_builddir)/src/om/libaxis2_axiom.la \ + $(top_builddir)/src/xpath/libaxis2_xpath.la + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/parser \ + -I ../../../include \ + -I ../../../util/include diff --git a/axiom/test/xpath/results.txt b/axiom/test/xpath/results.txt new file mode 100644 index 0000000..10c7385 --- /dev/null +++ b/axiom/test/xpath/results.txt @@ -0,0 +1,616 @@ + +"2020" +"1919" +"1818" +"1717" +"1616" +"1515" +"1414" +"1313" +"1212" +"1111" +"1010" +"99" +"88" +"77" +"66" +"55" +"44" +"33" +"22" +"11" +"2020" +"1919" +"1818" +"1717" +"1616" +"1515" +"1414" +"1313" +"1212" +"1111" +"1010" +"99" +"88" +"77" +"66" +"55" +"44" +"33" +"22" +"11" +# +"40.000000" +# +"55" +# +"2020" +"1919" +"1818" +"1717" +"1616" +"1515" +"1414" +"1313" +"1212" +"1111" +"1010" +"99" +"88" +"77" +"66" +"55" +"44" +"33" +"22" +"11" +"2020" +"1919" +"1818" +"1717" +"1616" +"1515" +"1414" +"1313" +"1212" +"1111" +"1010" +"99" +"88" +"77" +"66" +"55" +"44" +"33" +"22" +"11" +# +" + + 10 + + + 11 + 22 + 33 + 44 + 55 + 66 + 77 + 88 + 99 + 1010 + 1111 + 1212 + 1313 + 1414 + 1515 + 1616 + 1717 + 1818 + 1919 + 2020 + + + 5 + + + 11 + 22 + 33 + 44 + 55 + 66 + 77 + 88 + 99 + 1010 + 1111 + 1212 + 1313 + 1414 + 1515 + 1616 + 1717 + 1818 + 1919 + 2020 + + +" +# +" + + 10 + + + 11 + 22 + 33 + 44 + 55 + 66 + 77 + 88 + 99 + 1010 + 1111 + 1212 + 1313 + 1414 + 1515 + 1616 + 1717 + 1818 + 1919 + 2020 + + + 5 + + + 11 + 22 + 33 + 44 + 55 + 66 + 77 + 88 + 99 + 1010 + 1111 + 1212 + 1313 + 1414 + 1515 + 1616 + 1717 + 1818 + 1919 + 2020 + + +" +" + 11 + 22 + 33 + 44 + 55 + 66 + 77 + 88 + 99 + 1010 + 1111 + 1212 + 1313 + 1414 + 1515 + 1616 + 1717 + 1818 + 1919 + 2020 + " +"33" +# +"2020" +"1919" +"1818" +"1717" +"1616" +"1515" +"1414" +"1313" +"1212" +"1111" +"1010" +"99" +"88" +"77" +"66" +"55" +"44" +# +"11" +"22" +# +"20" +"2020" +"19" +"1919" +"18" +"1818" +"17" +"1717" +"16" +"1616" +"15" +"1515" +"14" +"1414" +"13" +"1313" +"12" +"1212" +"11" +"1111" +"10" +"1010" +"9" +"99" +"8" +"88" +"7" +"77" +"6" +"66" +"5" +"55" +"4" +"44" +"20" +"2020" +"19" +"1919" +"18" +"1818" +"17" +"1717" +"16" +"1616" +"15" +"1515" +"14" +"1414" +"13" +"1313" +"12" +"1212" +"11" +"1111" +"10" +"1010" +"9" +"99" +"8" +"88" +"7" +"77" +"6" +"66" +"5" +"55" +"4" +"44" +# +"10" +"1" +"11" +"2" +"22" +"3" +"33" +"4" +"44" +"5" +"55" +"6" +"66" +"7" +"77" +"8" +"88" +"9" +"99" +"10" +"1010" +"11" +"1111" +"12" +"1212" +"13" +"1313" +"14" +"1414" +"15" +"1515" +"16" +"1616" +"17" +"1717" +"18" +"1818" +"19" +"1919" +"20" +"2020" +" + 11 + 22 + 33 + 44 + 55 + 66 + 77 + 88 + 99 + 1010 + 1111 + 1212 + 1313 + 1414 + 1515 + 1616 + 1717 + 1818 + 1919 + 2020 + " +"5" +"1" +"11" +"2" +"22" +# +attr1 = "attribute_value_2" +attr1 = "attribute_value_1" +# +nsp = "http://xpath/test" +nsx = "http://xpath/test" +# +"5" +# +"2020" +"1919" +"1818" +"1717" +"1616" +"1515" +"1414" +"1313" +"1212" +"1111" +"1010" +"99" +"88" +"77" +"66" +"55" +"44" +"33" +"22" +"11" +"2020" +"1919" +"1818" +"1717" +"1616" +"1515" +"1414" +"1313" +"1212" +"1111" +"1010" +"99" +"88" +"77" +"66" +"55" +"44" +"33" +"22" +"11" +# +"44" +# +"20" +"19" +"18" +"17" +"16" +"15" +"14" +"13" +"12" +"11" +"10" +"9" +"8" +"7" +"6" +"5" +"4" +"3" +"2" +"1" +# +"2020" +"1919" +"1818" +"1717" +"1616" +"1515" +"1414" +"1313" +"1212" +"1111" +"1010" +"99" +"88" +"77" +"66" +"55" +"44" +"33" +"22" +"11" +# +"2020" +"1919" +"1818" +"1717" +"1616" +"1515" +"1414" +"1313" +"1212" +"1111" +"1010" +"99" +"88" +"77" +"66" +"55" +"44" +"33" +"22" +"11" +# +attr1 = "attribute_value_2" +# +"5" +"10" +# +"10" +# +"55" +# +"true" +# +"20" +"19" +"18" +"17" +"16" +"15" +"14" +"13" +"12" +"11" +"10" +"9" +"8" +"7" +"6" +"5" +"4" +"3" +"2" +"1" +# +"2020" +"1919" +"1818" +"1717" +"1616" +"1515" +"1414" +"1313" +"1212" +"1111" +"1010" +"99" +"88" +"77" +"66" +"55" +"44" +"33" +"22" +"11" +# +"2020" +"1919" +"1818" +"1717" +"1616" +"1515" +"1414" +"1313" +"1212" +"1111" +"1010" +"99" +"88" +"77" +"66" +"55" +"44" +"33" +"22" +"11" +# +"5" +"10" +# +" + 11 + 22 + 33 + 44 + 55 + 66 + 77 + 88 + 99 + 1010 + 1111 + 1212 + 1313 + 1414 + 1515 + 1616 + 1717 + 1818 + 1919 + 2020 + " +# +" + 11 + 22 + 33 + 44 + 55 + 66 + 77 + 88 + 99 + 1010 + 1111 + 1212 + 1313 + 1414 + 1515 + 1616 + 1717 + 1818 + 1919 + 2020 + " +# +attr1 = "attribute_value_1" +# \ No newline at end of file diff --git a/axiom/test/xpath/test.ns b/axiom/test/xpath/test.ns new file mode 100644 index 0000000..45508e2 --- /dev/null +++ b/axiom/test/xpath/test.ns @@ -0,0 +1,2 @@ +test +http://xpath/test diff --git a/axiom/test/xpath/test.xml b/axiom/test/xpath/test.xml new file mode 100644 index 0000000..fa0adb6 --- /dev/null +++ b/axiom/test/xpath/test.xml @@ -0,0 +1,55 @@ + + + + + 10 + + + 11 + 22 + 33 + 44 + 55 + 66 + 77 + 88 + 99 + 1010 + 1111 + 1212 + 1313 + 1414 + 1515 + 1616 + 1717 + 1818 + 1919 + 2020 + + + 5 + + + 11 + 22 + 33 + 44 + 55 + 66 + 77 + 88 + 99 + 1010 + 1111 + 1212 + 1313 + 1414 + 1515 + 1616 + 1717 + 1818 + 1919 + 2020 + + + diff --git a/axiom/test/xpath/test.xpath b/axiom/test/xpath/test.xpath new file mode 100644 index 0000000..1ebe4a8 --- /dev/null +++ b/axiom/test/xpath/test.xpath @@ -0,0 +1,37 @@ +#Test: Functions +test/descendant::child +count(test/descendant::child) +#Test: Axes +test/node2/child::child[5] +test/descendant::child +test/node2/parent::* +test/node2/child[3]/grandchild/ancestor::* +test/node2/child[3]/following-sibling::* +test/node2/child[3]/preceding-sibling::* +test/node2/child[3]/following::* +test/node2/child[3]/preceding::* +test/*/attribute::* +test/*/namespace::* +test/node1/self::* +test/descendant-or-self::child +test/node2/child[4]/grandchild/ancestor-or-self::child +#Test: Namespaces +test/test:node2//grandchild +test/test:node2/child +test/test:node2/* +#Test: Attributes and Predicates +test/node1/@* +//*[@*] +//*[@attr1 = 'attribute_value_1'] +test/node2/child[grandchild = /test/node1] +#Test: Equality Expressions +test/node1 = test/node2/child +#Test: Abbreviated Axes +test/node2//grandchild +test/node2/child +test/node2/* +#Test: Random +test/*[@*] +test/node2 +test/test:node2 +test/test:node1/@* diff --git a/axiom/test/xpath/test_xpath.c b/axiom/test/xpath/test_xpath.c new file mode 100644 index 0000000..95e0d94 --- /dev/null +++ b/axiom/test/xpath/test_xpath.c @@ -0,0 +1,513 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* +Compiling For Windows: +cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "_MBCS" /I %AXIS2C_HOME%\include /c *.c +link.exe /LIBPATH:%AXIS2C_HOME%\lib axutil.lib axiom.lib axis2_parser.lib axis2_engine.lib /OUT:test.exe *.obj +*/ +#include +#include +#include +#include +#include + +/* Function headers */ +axiom_node_t *build_test_xml(const axutil_env_t *env); + +void output_results(const axutil_env_t *env, axiom_xpath_result_t *xpath_result); + +axiom_node_t *read_test_xml(const axutil_env_t *env, char *file_name); + +void output_results(const axutil_env_t *env, + axiom_xpath_result_t *xpath_result); + +void evaluate(const axutil_env_t *env, + axiom_xpath_context_t *context, + axis2_char_t *expr_str); + +void evaluate_expressions(const axutil_env_t *env, + axiom_xpath_context_t *context, + char *file_name); + +void add_namespaces(const axutil_env_t *env, + axiom_xpath_context_t *context, + char *file_name); + +int readline(FILE *fin, char *str); + +FILE *fcor; +/*FILE *ftemp;*/ + +int main(int argc, char *argv[]) +{ + axiom_node_t *test_tree = NULL; + axis2_char_t *test_tree_str; + char *xml_file = "test.xml"; + char *xpath_file = "test.xpath"; + char *ns_file = "test.ns"; + char *cor_file = "results.txt"; + axiom_xpath_context_t *context = NULL; + + /* Create environment */ + axutil_env_t *env = + axutil_env_create_all("xpath_test.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set input file */ + if (argc > 1) + { + printf("Usage: test [xml_file xpath_file namespaces_file results_file]\n\n"); + printf("\tLook at the example test case:"); + printf(" test.xml, test.xpath test.ns\n\n"); + + if(argc > 4) + { + xml_file = argv[1]; + xpath_file = argv[2]; + ns_file = argv[3]; + cor_file = argv[4]; + } + } + + /*Create the request */ + /* test_tree = build_test_xml(env); */ + test_tree = read_test_xml(env, (axis2_char_t *)xml_file); + + fcor = fopen(cor_file, "r"); + /*ftemp = fopen("temp.txt", "w");*/ + + if (!fcor) + { + printf("Error opening file: %s\n", cor_file); + } + + if (test_tree) + { + test_tree_str = axiom_node_to_string(test_tree, env); + printf("\nTesting XML\n-----------\n\"%s\"\n\n\n", test_tree_str); + + /* Create XPath Context */ + context = axiom_xpath_context_create(env, test_tree); + + /* Namespaces */ + add_namespaces(env, context, ns_file); + + evaluate_expressions(env, context, xpath_file); + + test_tree_str = axiom_node_to_string(test_tree, env); + printf("\n\nFinal XML\n-----------\n\"%s\"\n\n\n", test_tree_str); + } + + /* Freeing memory */ + if (context) + { + axiom_xpath_free_context(env, context); + } + + if (test_tree) + { + axiom_node_free_tree(test_tree, env); + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + } + + if(fcor) + { + fclose(fcor); + } + + return 0; +} + +int readline(FILE *fin, char *str) +{ + int i; + + for (i = 0; 1; i++) + { + str[i] = (char)getc(fin); + + if (str[i] == '\n' || str[i] == '\r' || str[i] == EOF) + { + break; + } + } + + str[i] = '\0'; + + return i; +} + +void add_namespaces(const axutil_env_t *env, + axiom_xpath_context_t *context, + char *file_name) +{ + FILE *fin = NULL; + char prefix[1024]; + char uri[1024]; + axiom_namespace_t *ns; + + fin = fopen(file_name, "r"); + + if (!fin) + { + printf("Error opening file: %s\n", file_name); + return; + } + + /* Compiling XPath expression */ + while (1) + { + if (readline(fin, prefix) == 0) + { + break; + } + + if (readline(fin, uri) == 0) + { + break; + } + + ns = axiom_namespace_create( + env, (axis2_char_t *)uri, (axis2_char_t *)prefix); + + if (ns) + { + axiom_xpath_register_namespace(context, ns); + } + } + + fclose(fin); +} + +void evaluate_expressions( + const axutil_env_t *env, + axiom_xpath_context_t *context, + char *file_name) +{ + FILE *fin = NULL; + char str[1024]; + + fin = fopen(file_name, "r"); + + if (!fin) + { + printf("Error opening file: %s\n", file_name); + return; + } + + /* Compiling XPath expression */ + while (1) + { + if (readline(fin, str) == 0) + { + break; + } + + if (str[0] == '#') + { + printf("\n\n%s", str + 1); + continue; + } + + evaluate(env, context, (axis2_char_t *)str); + } + + fclose(fin); +} + +void evaluate( + const axutil_env_t *env, + axiom_xpath_context_t *context, + axis2_char_t *expr_str) +{ + axiom_xpath_expression_t *expr = NULL; + axiom_xpath_result_t *result = NULL; + + printf("\nCompiling XPath expression: \"%s\" ...\n", expr_str); + expr = axiom_xpath_compile_expression(env, expr_str); + + if (!expr) + { + printf("Compilation error."); + printf("Please check the systax of the XPath query.\n"); + + return; + } + + /* Evaluating XPath expression */ + printf("Evaluating...\n"); + result = axiom_xpath_evaluate(context, expr); + + if (!result) + { + printf("An error occured while evaluating the expression.\n"); + + axiom_xpath_free_expression(env, expr); + + return; + } + + if (result->flag == AXIOM_XPATH_ERROR_STREAMING_NOT_SUPPORTED) + { + printf("Streaming not supported.\n"); + + axiom_xpath_free_expression(env, expr); + + return; + } + + output_results(env, result); + + if (result) + { + axiom_xpath_free_result(env, result); + } + + if (expr) + { + axiom_xpath_free_expression(env, expr); + } +} + +int compare_result(axis2_char_t *rs) +{ + int i; + char c; + + /*fprintf(ftemp, "%s#", rs);*/ + + if(!fcor) + { + return 0; + } + + for(i = 0; 1; i++) + { + while(rs[i] == ' ' || rs[i] == '\n' || rs[i] == '\r' || rs[i] == '\t') + { + i++; + } + + do + { + c = (char)getc(fcor); + } + while(c == ' ' || c == '\n' || c == '\r' || c == '\t'); + + if(c == '#' || c == EOF) + { + break; + } + + if(c != rs[i]) + { + while(c != '#' && c != EOF) + { + c = getc(fcor); + } + + return 0; + } + } + + return rs[i] == '\0'; +} + +void output_results(const axutil_env_t *env, + axiom_xpath_result_t *xpath_result) +{ + axiom_xpath_result_node_t *xpath_result_node; + axiom_node_t *result_node; + axis2_char_t *result_str; + axis2_char_t result_set[100000]; + axis2_char_t temp_res[100000]; + + axiom_element_t *ele; + int i; + + result_set[0] = '\n'; + result_set[1] = '\0'; + + for (i = 0; i < axutil_array_list_size(xpath_result->nodes, env); i++) + { + xpath_result_node = axutil_array_list_get(xpath_result->nodes, env, i); + + if (xpath_result_node->type == AXIOM_XPATH_TYPE_NODE) + { + result_node = xpath_result_node->value; + ele = (axiom_element_t *)axiom_node_get_data_element( + result_node, env); + + if (ele) + { + /*result_str = axiom_element_get_text(ele, env, result_node);*/ + result_str = axiom_node_to_string(result_node, env); + + sprintf(temp_res, "\"%s\"\n", result_str); + strcat(result_set, temp_res); + } + } + else if (xpath_result_node->type == AXIOM_XPATH_TYPE_ATTRIBUTE) + { + result_str = + axiom_attribute_get_localname(xpath_result_node->value, env); + sprintf(temp_res, "%s = ", result_str); + strcat(result_set, temp_res); + result_str = + axiom_attribute_get_value(xpath_result_node->value, env); + sprintf(temp_res, "\"%s\"\n", result_str); + strcat(result_set, temp_res); + } + else if (xpath_result_node->type == AXIOM_XPATH_TYPE_NAMESPACE) + { + result_str = + axiom_namespace_get_prefix(xpath_result_node->value, env); + sprintf(temp_res, "%s = ", result_str); + strcat(result_set, temp_res); + result_str = + axiom_namespace_get_uri(xpath_result_node->value, env); + sprintf(temp_res, "\"%s\"\n", result_str); + strcat(result_set, temp_res); + } + else if (xpath_result_node->type == AXIOM_XPATH_TYPE_BOOLEAN) + { + sprintf(temp_res, "\"%s\"\n", + (*(axis2_bool_t *)xpath_result_node->value) ? "true" : "false"); + strcat(result_set, temp_res); + } + else if (xpath_result_node->type == AXIOM_XPATH_TYPE_TEXT) + { + sprintf(temp_res, "\"%s\"\n", + (axis2_char_t *)xpath_result_node->value); + strcat(result_set, temp_res); + } + else if (xpath_result_node->type == AXIOM_XPATH_TYPE_NUMBER) + { + sprintf(temp_res, "\"%lf\"\n", + *(double *)xpath_result_node->value); + strcat(result_set, temp_res); + } + } + + if(compare_result(result_set)) + { + printf("Test case passed\n"); + } + else + { + printf("Failed test case!\nOutput\n%s\n", result_set); + } +} + +axiom_node_t *read_test_xml(const axutil_env_t *env, axis2_char_t *file_name) +{ + axiom_xml_reader_t *reader = NULL; + axiom_stax_builder_t *builder = NULL; + axiom_document_t *document = NULL; + axiom_node_t *root = NULL; + + /* Create parser */ + reader = axiom_xml_reader_create_for_file(env, file_name, NULL); + + if (!reader) + { + printf("Error creating pullparser"); + return NULL; + } + + /* Create axiom_stax_builder */ + builder = axiom_stax_builder_create(env, reader); + + if (!builder) + { + printf("Error creating pull parser"); + return NULL; + } + + /* Create an om document */ + document = axiom_stax_builder_get_document(builder, env); + + if (!document) + { + printf("Error creating document"); + return NULL; + } + + /* Get root element */ + root = axiom_document_get_root_element(document, env); + if (!root) + { + printf("Root element null "); + axiom_stax_builder_free(builder, env); + return NULL; + } + + while (axiom_document_build_next(document, env)); + + return root; +} + +axiom_node_t * build_test_xml(const axutil_env_t *env) +{ + axiom_node_t *main_node; + axiom_node_t *order_node; + axiom_node_t *values_node; + axiom_node_t *value_node; + axiom_node_t *grandchild; + axis2_char_t value_str[255]; + axiom_element_t *order_ele; + axiom_element_t *values_ele; + axiom_element_t *value_ele; + axiom_element_t *grandchild_ele; + axiom_attribute_t *attribute; + int i, N = 20; + + axiom_namespace_t *ns1 = + axiom_namespace_create(env, "http://xpath/test", "ns1"); + + axiom_element_create(env, NULL, "test", ns1, &main_node); + + order_ele = + axiom_element_create(env, main_node, "node1", NULL, &order_node); + axiom_element_set_text(order_ele, env, "10", order_node); + attribute = + axiom_attribute_create(env, "attr1", "attribute_value_1", NULL); + axiom_element_add_attribute(order_ele, env, attribute, order_node); + + values_ele = + axiom_element_create(env, main_node, "node2", NULL, &values_node); + + for (i = 0 ; i < N; i++) + { + sprintf(value_str, "%d", i + 1); + + value_ele = + axiom_element_create(env, values_node, "child", NULL, &value_node); + axiom_element_set_text(value_ele, env, value_str, value_node); + + grandchild_ele = + axiom_element_create(env, value_node, "grandchild", NULL, &grandchild); + axiom_element_set_text(grandchild_ele, env, value_str /*"3 rd level"*/, grandchild); + } + + return main_node; +} diff --git a/axiom/test/xpath/test_xpath_streaming.c b/axiom/test/xpath/test_xpath_streaming.c new file mode 100644 index 0000000..6b64262 --- /dev/null +++ b/axiom/test/xpath/test_xpath_streaming.c @@ -0,0 +1,468 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* +Compiling For Windows: +cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "_MBCS" /I %AXIS2C_HOME%\include /c *.c +link.exe /LIBPATH:%AXIS2C_HOME%\lib axutil.lib axiom.lib axis2_parser.lib axis2_engine.lib /OUT:test.exe *.obj +*/ +#include +#include +#include +#include +#include + +/* Function headers */ +void output_results(const axutil_env_t *env, axiom_xpath_result_t *xpath_result); + +axiom_node_t *read_test_xml(const axutil_env_t *env, char *file_name); + +void output_results(const axutil_env_t *env, + axiom_xpath_result_t *xpath_result); + +void evaluate(const axutil_env_t *env, + axis2_char_t *expr_str); + +void evaluate_expressions(const axutil_env_t *env, + char *file_name); + +void add_namespaces(const axutil_env_t *env, + axiom_xpath_context_t *context, + char *file_name); + +int readline(FILE *fin, char *str); + +FILE *fcor; +char *xml_file = "test.xml"; +char *xpath_file = "test.xpath"; +char *cor_file = "results.txt"; +char *ns_file = "test.ns"; + +/*FILE *ftemp;*/ + +int main(int argc, char *argv[]) +{ + axiom_node_t *test_tree = NULL; + axis2_char_t *test_tree_str; + + /* Create environment */ + axutil_env_t *env = + axutil_env_create_all("xpath_test.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set input file */ + if (argc > 1) + { + printf("Usage: test [xml_file xpath_file namespaces_file results_file]\n\n"); + printf("\tLook at the example test case:"); + printf(" test.xml, test.xpath test.ns\n\n"); + + if(argc > 4) + { + xml_file = argv[1]; + xpath_file = argv[2]; + ns_file = argv[3]; + cor_file = argv[4]; + } + } + + /*Create the request */ + test_tree = read_test_xml(env, (axis2_char_t *)xml_file); + + fcor = fopen(cor_file, "r"); + /*ftemp = fopen("temp.txt", "w");*/ + + if (!fcor) + { + printf("Error opening file: %s\n", cor_file); + } + + if (test_tree) + { + test_tree_str = axiom_node_to_string(test_tree, env); + printf("\nTesting XML\n-----------\n\"%s\"\n\n\n", test_tree_str); + + axiom_node_free_tree(test_tree, env); + + evaluate_expressions(env, xpath_file); + } + + /* Freeing memory */ + if (env) + { + axutil_env_free((axutil_env_t *) env); + } + + if(fcor) + { + fclose(fcor); + } + + return 0; +} + +int readline(FILE *fin, char *str) +{ + int i; + + for (i = 0; 1; i++) + { + str[i] = (char)getc(fin); + + if (str[i] == '\n' || str[i] == '\r' || str[i] == EOF) + { + break; + } + } + + str[i] = '\0'; + + return i; +} + +void add_namespaces(const axutil_env_t *env, + axiom_xpath_context_t *context, + char *file_name) +{ + FILE *fin = NULL; + char prefix[1024]; + char uri[1024]; + axiom_namespace_t *ns; + + fin = fopen(file_name, "r"); + + if (!fin) + { + printf("Error opening file: %s\n", file_name); + return; + } + + /* Compiling XPath expression */ + while (1) + { + if (readline(fin, prefix) == 0) + { + break; + } + + if (readline(fin, uri) == 0) + { + break; + } + + ns = axiom_namespace_create( + env, (axis2_char_t *)uri, (axis2_char_t *)prefix); + + if (ns) + { + axiom_xpath_register_namespace(context, ns); + } + } + + fclose(fin); +} + +void evaluate_expressions( + const axutil_env_t *env, + char *file_name) +{ + FILE *fin = NULL; + char str[1024]; + + fin = fopen(file_name, "r"); + + if (!fin) + { + printf("Error opening file: %s\n", file_name); + return; + } + + /* Compiling XPath expression */ + while (1) + { + if (readline(fin, str) == 0) + { + break; + } + + if (str[0] == '#') + { + printf("\n\n%s", str + 1); + continue; + } + + evaluate(env, (axis2_char_t *)str); + } + + fclose(fin); +} + +void evaluate( + const axutil_env_t *env, + axis2_char_t *expr_str) +{ + axiom_xpath_expression_t *expr = NULL; + axiom_xpath_result_t *result = NULL; + axiom_node_t *test_tree = NULL; + axiom_xpath_context_t *context = NULL; + + test_tree = read_test_xml(env, (axis2_char_t *)xml_file); + + if(!test_tree) + { + printf("Error reading file: %s\n", xml_file); + return; + } + + /* Create XPath Context */ + context = axiom_xpath_context_create(env, test_tree); + + if(!context) + { + printf("Could not initialise XPath context\n"); + return; + } + + /* Namespaces */ + add_namespaces(env, context, ns_file); + + + printf("\nCompiling XPath expression: \"%s\" ...\n", expr_str); + expr = axiom_xpath_compile_expression(env, expr_str); + + if (!expr) + { + printf("Compilation error."); + printf("Please check the systax of the XPath query.\n"); + + return; + } + + /* Evaluating XPath expression */ + printf("Evaluating...\n"); + result = axiom_xpath_evaluate_streaming(context, expr); + + if (!result) + { + compare_result(""); + printf("An error occured while evaluating the expression.\n"); + + axiom_xpath_free_expression(env, expr); + + return; + } + + if (result->flag == AXIOM_XPATH_ERROR_STREAMING_NOT_SUPPORTED) + { + compare_result(""); + printf("Streaming not supported.\n"); + + axiom_xpath_free_expression(env, expr); + + return; + } + + output_results(env, result); + + if (result) + { + axiom_xpath_free_result(env, result); + } + + if (expr) + { + axiom_xpath_free_expression(env, expr); + } +} + +int compare_result(axis2_char_t *rs) +{ + int i; + char c; + + /*fprintf(ftemp, "%s#", rs);*/ + + if(!fcor) + { + return 0; + } + + for(i = 0; 1; i++) + { + while(rs[i] == ' ' || rs[i] == '\n' || rs[i] == '\r' || rs[i] == '\t') + { + i++; + } + + do + { + c = (char)getc(fcor); + } + while(c == ' ' || c == '\n' || c == '\r' || c == '\t'); + + if(c == '#' || c == EOF) + { + break; + } + + if(c != rs[i]) + { + while(c != '#' && c != EOF) + { + c = getc(fcor); + } + + return 0; + } + } + + return rs[i] == '\0'; +} + +void output_results(const axutil_env_t *env, + axiom_xpath_result_t *xpath_result) +{ + axiom_xpath_result_node_t *xpath_result_node; + axiom_node_t *result_node; + axis2_char_t *result_str; + axis2_char_t result_set[100000]; + axis2_char_t temp_res[100000]; + + axiom_element_t *ele; + int i; + + result_set[0] = '\n'; + result_set[1] = '\0'; + + for (i = 0; i < axutil_array_list_size(xpath_result->nodes, env); i++) + { + xpath_result_node = axutil_array_list_get(xpath_result->nodes, env, i); + + if (xpath_result_node->type == AXIOM_XPATH_TYPE_NODE) + { + result_node = xpath_result_node->value; + ele = (axiom_element_t *)axiom_node_get_data_element( + result_node, env); + + if (ele) + { + /*result_str = axiom_element_get_text(ele, env, result_node);*/ + result_str = axiom_node_to_string(result_node, env); + + sprintf(temp_res, "\"%s\"\n", result_str); + strcat(result_set, temp_res); + } + } + else if (xpath_result_node->type == AXIOM_XPATH_TYPE_ATTRIBUTE) + { + result_str = + axiom_attribute_get_localname(xpath_result_node->value, env); + sprintf(temp_res, "%s = ", result_str); + strcat(result_set, temp_res); + result_str = + axiom_attribute_get_value(xpath_result_node->value, env); + sprintf(temp_res, "\"%s\"\n", result_str); + strcat(result_set, temp_res); + } + else if (xpath_result_node->type == AXIOM_XPATH_TYPE_NAMESPACE) + { + result_str = + axiom_namespace_get_prefix(xpath_result_node->value, env); + sprintf(temp_res, "%s = ", result_str); + strcat(result_set, temp_res); + result_str = + axiom_namespace_get_uri(xpath_result_node->value, env); + sprintf(temp_res, "\"%s\"\n", result_str); + strcat(result_set, temp_res); + } + else if (xpath_result_node->type == AXIOM_XPATH_TYPE_BOOLEAN) + { + sprintf(temp_res, "\"%s\"\n", + (*(axis2_bool_t *)xpath_result_node->value) ? "true" : "false"); + strcat(result_set, temp_res); + } + else if (xpath_result_node->type == AXIOM_XPATH_TYPE_TEXT) + { + sprintf(temp_res, "\"%s\"\n", + (axis2_char_t *)xpath_result_node->value); + strcat(result_set, temp_res); + } + else if (xpath_result_node->type == AXIOM_XPATH_TYPE_NUMBER) + { + sprintf(temp_res, "\"%lf\"\n", + *(double *)xpath_result_node->value); + strcat(result_set, temp_res); + } + } + + if(compare_result(result_set)) + { + printf("Test case passed\n"); + } + else + { + printf("Failed test case!\nOutput\n%s\n", result_set); + } +} + +axiom_node_t *read_test_xml(const axutil_env_t *env, axis2_char_t *file_name) +{ + axiom_xml_reader_t *reader = NULL; + axiom_stax_builder_t *builder = NULL; + axiom_document_t *document = NULL; + axiom_node_t *root = NULL; + + /* Create parser */ + reader = axiom_xml_reader_create_for_file(env, file_name, NULL); + + if (!reader) + { + printf("Error creating pullparser"); + return NULL; + } + + /* Create axiom_stax_builder */ + builder = axiom_stax_builder_create(env, reader); + + if (!builder) + { + printf("Error creating pull parser"); + return NULL; + } + + /* Create an om document */ + document = axiom_stax_builder_get_document(builder, env); + + if (!document) + { + printf("Error creating document"); + return NULL; + } + + /* Get root element */ + root = axiom_document_get_root_element(document, env); + if (!root) + { + printf("Root element null "); + axiom_stax_builder_free(builder, env); + return NULL; + } + + while (axiom_document_build_next(document, env)); + + return root; +} diff --git a/axis2c.pc.in b/axis2c.pc.in new file mode 100644 index 0000000..c13fbe2 --- /dev/null +++ b/axis2c.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@/axis2-1.6.0 + +Name: Axis2/C +Version: @VERSION@ +Description: Apache Axis2/C Version 1.6.0 +Requires: +Libs: -L${libdir} -lxml2 @LIBS@ +Cflags: -I${includedir} + diff --git a/axis2c_build.sh b/axis2c_build.sh new file mode 100755 index 0000000..c616006 --- /dev/null +++ b/axis2c_build.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +if [ -z "$1" ] ; then + AXIS2C_DEPLOY="/usr/local/axis2c" +else + AXIS2C_DEPLOY=$1 +fi + +if [ `uname -s` = Darwin ] +then + export DYLD_LIBRARY_PATH=${AXIS2C_DEPLOY}/lib +else + export LD_LIBRARY_PATH=${AXIS2C_DEPLOY}/lib +fi + +./configure --prefix=${AXIS2C_DEPLOY} +make +make install + +cd samples +./configure --prefix=${AXIS2C_DEPLOY} --with-axis2=${AXIS2C_DEPLOY}/include/axis2-1.6.0 +make +make install diff --git a/bindist.sh b/bindist.sh new file mode 100755 index 0000000..5647bec --- /dev/null +++ b/bindist.sh @@ -0,0 +1,65 @@ +#!/bin/bash +sh clean.sh + +./autogen.sh +AXIS2C_HOME=`pwd`/deploy +export AXIS2C_HOME + +./configure --prefix=${AXIS2C_HOME} --enable-tests=no --enable-trace=yes --enable-diclient=no --enable-static=no --enable-openssl=no --with-apache2=/usr/local/apache2/include --with-archive=/usr/include + +make +make install + +cd tools/tcpmon +./autogen.sh +./configure --prefix=${AXIS2C_HOME} --enable-tests=no +make +make install + +cd ../../samples + +./autogen.sh + +./configure --prefix=${AXIS2C_HOME} --with-axis2=${AXIS2C_HOME}/include/axis2-1.6.0 +make +make install + +make dist +tar xf axis2c-sample-src-1.6.0.tar.gz +mv axis2c-sample-src-1.6.0 samples +#$rm -rf ${AXIS2C_HOME}/samples +mv samples ${AXIS2C_HOME}/samples/src + +cd .. + +rm -rf xdocs/api/html +maven site +cd xdocs/api +doxygen doxygenconf +cd ../.. +cp -r xdocs/api/html target/docs/api/ +cp xdocs/docs/mod_log/module.xml target/docs/docs/mod_log +cp -r target/docs ${AXIS2C_HOME} + +cd ${AXIS2C_HOME} + +# rm -rf config.sub missing config.guess depcomp ltmain.sh +for i in `find . -name "*.la"` +do + rm $i +done + +for i in `find . -name "*.a"` +do + rm $i +done + +strip -s ./lib/* +strip -s modules/addressing/* +strip -s modules/logging/* + +strip -s ./bin/axis2_http_server +strip -s ./samples/bin/* +strip -s ./bin/tools/tcpmon + +rm -rf ./lib/pkgconfig diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..5956a54 --- /dev/null +++ b/build.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -e +sh autogen.sh +AXIS2C_HOME=${AXIS2C_HOME:=`pwd`/deploy} + +export AXIS2C_HOME + +echo "AXIS2C_HOME = ${AXIS2C_HOME}" + +sh configure --prefix=${AXIS2C_HOME} --enable-tests=yes +make -j 10 +make install + +cd samples +sh build.sh + +cd .. diff --git a/build/win32/axis2_env.bat b/build/win32/axis2_env.bat new file mode 100644 index 0000000..e6b35f0 --- /dev/null +++ b/build/win32/axis2_env.bat @@ -0,0 +1,7 @@ +SET AXIS2C_HOME=%AXIS2C_HOME% +PATH=%PATH%;%ZLIB_HOME%\bin +PATH=%PATH%;%CURL_HOME%\bin +PATH=%PATH%;%ICONV_HOME%\bin +PATH=%PATH%;%LIBXML_HOME%\bin +PATH=%PATH%;%OPENSSL_HOME%\bin +PATH=%PATH%;%AXIS2C_HOME%\lib diff --git a/build/win32/bindist.bat b/build/win32/bindist.bat new file mode 100644 index 0000000..91697a2 --- /dev/null +++ b/build/win32/bindist.bat @@ -0,0 +1,13 @@ +@if "%VV32CALLED%"=="" goto call_vv32 + +:call_nmake +@nmake /NOLOGO dist +@goto end + +:call_vv32 +@call vcvars32.bat > vc.tmp +@del vc.tmp +@set VV32CALLED="YES" +@goto call_nmake + +:end diff --git a/build/win32/build.bat b/build/win32/build.bat new file mode 100644 index 0000000..02d2d15 --- /dev/null +++ b/build/win32/build.bat @@ -0,0 +1,13 @@ +@if "%VV32CALLED%"=="" goto call_vv32 + +:call_nmake +@nmake /NOLOGO install +@goto end + +:call_vv32 +@call vcvars32.bat > vc.tmp +@del vc.tmp +@set VV32CALLED="YES" +@goto call_nmake + +:end diff --git a/build/win32/clean.bat b/build/win32/clean.bat new file mode 100644 index 0000000..a0351f5 --- /dev/null +++ b/build/win32/clean.bat @@ -0,0 +1,2 @@ +@nmake /nologo clean + diff --git a/build/win32/configure.in b/build/win32/configure.in new file mode 100644 index 0000000..3eae3f9 --- /dev/null +++ b/build/win32/configure.in @@ -0,0 +1,73 @@ +############################################################################# +### Build Details ### +############################################################################# +# +# enables https support +ENABLE_SSL = 0 +# +# build libcurl transport +ENABLE_LIBCURL = 0 +# +# build axis2 with Libxml2 Parser. Axis2/C will be built with embeded guththila # parser by Default. +ENABLE_LIBXML2=0 +# +# build tcp server in addition to http server +WITH_TCP = 1 +# +# build with archive based deployment +WITH_ARCHIVE = 0 +# +# +############################################################################# +### Dependant Binary Locations (Required) ### +############################################################################# +# +# libxml2 binary location ( axis2c is built with libxml2 ) +LIBXML2_BIN_DIR = E:\libxml2-2.6.30.win32 + +# +# iconv binary location +ICONV_BIN_DIR = E:\iconv-1.9.2.win32 +# +# zlib binary location +ZLIB_BIN_DIR= E:\zlib-1.2.3.win32 +# +# +############################################################################# +### Dependant Binary Locations (Optional) ### +############################################################################# +# +# openssl binary location +# required if ENABLE_SSL = 1 +OPENSSL_BIN_DIR = E:\OpenSSL +# +# libcurl binary location, only required if libcurl transport is enabled +LIBCURL_BIN_DIR = E:\libcurl-7.15.1-msvc-win32-ssl-0.9.8a-zlib-1.2.3 +# +# +############################################################################# +### Apache Server module (required when building Axis2/C Apache Module) ### +############################################################################# +# +# apache binary location +APACHE_BIN_DIR = "E:\Apache22" +# +# apache 2 server family +# To use apache 2.2 family, use APACHE_VERSION_IS_2_0_X = 0 +APACHE_VERSION_2_0_X = 0 +# +# +############################################################################# +### Compiler Options ### +############################################################################# +# +# C runtime LIBRARY OPTION ( Use /MD or /MT ) +CRUNTIME = /MT +# +# Embed Manifest Files +EMBED_MANIFEST = 0 +# +# debug symbols +# To build with debug symbols use DEBUG = 1 +DEBUG = 0 +# diff --git a/build/win32/makefile b/build/win32/makefile new file mode 100644 index 0000000..eb4d398 --- /dev/null +++ b/build/win32/makefile @@ -0,0 +1,1454 @@ +####################################################################################### +## This is the make file for Axis2/C +# +# This file should reside in the win32 directory of the source directory when executed. +# nmake [all] - builds dlls, server and samples [ client, server ] +# nmake clean - cleans everything +# nmake samples - builds samples +# nmake install - installs axis2 with server all modules and services +# nmake dist - creates the distribution, builds all distributable components +# +# +# It is possible to run individual targets to build those targets only. +# eg: nmake axis2_apache_module, will build httpd module of Axis2/C +# +# The default install directory is ..\deploy with a directory structure as follows. +# +# AXIS2_BINDIR +# | +# |- bin - server and other executables +# |- samples - samples +# |- logs - log file location +# |- lib - library modules +# |- services - deployed services +# |- modules - deployed modules +# |- include - Axis2/C header files +# |- tests +# |- system_tests +# |- unit tests +# +######################################################################################### + + +AUTOCONF = configure.in +!include $(AUTOCONF) + +RELEASE_VER = 1.6.0 +AXIS2_RELEASE_DIR=axis2c-bin-$(RELEASE_VER)-win32 + +# Directory structure +################################## + +AXIS2_BINDIR = ..\deploy +AXIS2_SERVICES = $(AXIS2_BINDIR)\services +AXIS2_MODULES = $(AXIS2_BINDIR)\modules +AXIS2_LIBS = $(AXIS2_BINDIR)\lib +AXIS2_BINS = $(AXIS2_BINDIR)\bin +AXIS2_INCLUDE = $(AXIS2_BINDIR)\include +AXIS2_SAMPLES = $(AXIS2_BINS)\samples +AXIS2_TOOLS = $(AXIS2_BINS)\tools +AXIS2_LOG = $(AXIS2_BINDIR)\logs +AXIS2_TESTS = $(AXIS2_BINDIR)\tests +AXIS2_TESTS_SYS = $(AXIS2_TESTS)\system_tests +AXIS2_TESTS_UNIT = $(AXIS2_TESTS)\unit_tests +AXIS2_SOURCE_DIR = ..\.. + +#directories for intermediate files +################################### + +AXIS2_INTDIR= .\int.msvc +AXIS2_INTDIR_SAMPLES = $(AXIS2_INTDIR)\samples + + +# Binary distribution librarys +############################## + +AXUTIL = axutil +AXIS2_PARSER = axis2_parser +AXIOM = axiom +AXIS2_XPATH = axis2_xpath +NEETHI = neethi +AXIS2_HTTP_SENDER = axis2_http_sender +AXIS2_HTTP_RECEIVER = axis2_http_receiver +AXIS2_TCP_SENDER = axis2_tcp_sender +AXIS2_TCP_RECEIVER = axis2_tcp_receiver +AXIS2_ENGINE = axis2_engine +AXIS2_APACHE_MODULE = mod_axis2 +AXIS2_IIS_MODULE = axis2_mod_IIS +AXIS2_MOD_ADDR = axis2_mod_addr +AXIS2_HTTP_SERVER = axis2_http_server +AXIS2_TCP_SERVER = axis2_tcp_server +AXIS2_CGI = axis2.cgi +GUTHTHILA = guththila +AXIS2_MOD_LOG = axis2_mod_log + +# include path +################ + +APACHE_INCLUDE_PATH = /I$(APACHE_BIN_DIR)\include + +AXIS2_INCLUDE_PATH = /I$(AXIS2_SOURCE_DIR)\util\include \ + /I$(AXIS2_SOURCE_DIR)\util\src\ \ + /I$(AXIS2_SOURCE_DIR)\util\src\minizip\ \ + /I$(AXIS2_SOURCE_DIR)\axiom\include \ + /I$(AXIS2_SOURCE_DIR)\axiom\src\om \ + /I$(AXIS2_SOURCE_DIR)\axiom\src\soap \ + /I$(AXIS2_SOURCE_DIR)\util\include\platforms \ + /I$(AXIS2_SOURCE_DIR)\neethi\include \ + /I$(AXIS2_SOURCE_DIR)\neethi\src \ + /I$(AXIS2_SOURCE_DIR)\neethi\src\secpolicy\builder \ + /I$(AXIS2_SOURCE_DIR)\neethi\src\secpolicy\model \ + /I$(AXIS2_SOURCE_DIR)\src\core\clientapi \ + /I$(AXIS2_SOURCE_DIR)\src\core\deployment \ + /I$(AXIS2_SOURCE_DIR)\src\core\description \ + /I$(AXIS2_SOURCE_DIR)\src\core\transport \ + /I$(AXIS2_SOURCE_DIR)\src\core\transport\tcp \ + /I$(AXIS2_SOURCE_DIR)\include \ + /I$(AXIS2_SOURCE_DIR)\src\core\engine \ + /I$(AXIS2_SOURCE_DIR)\src\core\context \ + /I$(AXIS2_SOURCE_DIR)\src\core\util \ + /I$(AXIS2_SOURCE_DIR)\src\core\transport\http\server\apache2 \ + /I$(AXIS2_SOURCE_DIR)\axiom\src\attachments \ + /I$(AXIS2_SOURCE_DIR)\tools\tcpmon\include + +GUTHTHILA_INCLUDE_PATH = /I$(AXIS2_SOURCE_DIR)\guththila\include + +LIBXML2_INCLUDE_PATH = /I$(LIBXML2_BIN_DIR)\include /I$(ICONV_BIN_DIR)\include + +# optional include paths +######################## + +!if "$(WITH_ARCHIVE)" == "1" +AXIS2_INCLUDE_PATH = $(AXIS2_INCLUDE_PATH) /I$(ZLIB_BIN_DIR)\include +!endif + +!if "$(ENABLE_SSL)" == "1" +AXIS2_INCLUDE_PATH = $(AXIS2_INCLUDE_PATH) /I$(OPENSSL_BIN_DIR)\include +!endif + +!if "$(ENABLE_LIBCURL)" == "1" +AXIS2_INCLUDE_PATH = $(AXIS2_INCLUDE_PATH) /I$(LIBCURL_BIN_DIR)\include +!endif + +# Compiler Options +################### + +CC = @cl.exe +CFLAGS = /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "AXIS2_DECLARE_EXPORT" \ + /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" \ + /D "AXIS2_SVR_MULTI_THREADED" /W3 /wd4100 /WX /MP10 /nologo $(AXIS2_INCLUDE_PATH) \ + $(APACHE_INCLUDE_PATH) + +!if "$(ENABLE_SSL)" == "1" +CFLAGS = $(CFLAGS) /D "AXIS2_SSL_ENABLED" +!endif + +!if "$(ENABLE_LIBCURL)" == "1" +CFLAGS = $(CFLAGS) /D "AXIS2_LIBCURL_ENABLED" +!endif + +!if "$(ENABLE_LIBXML2)" == "1" +CFLAGS = $(CFLAGS) /D "AXIS2_LIBXML2_ENABLED" $(LIBXML2_INCLUDE_PATH) +!else +CFLAGS = $(CFLAGS) /D "AXIS2_GUTHTHILA_ENABLED" $(GUTHTHILA_INCLUDE_PATH) +!endif + +# Linker Options +#################### + +LD = @link.exe +LDFLAGS = /NOLOGO /WX /LIBPATH:$(AXIS2_LIBS) /LIBPATH:$(LIBXML2_BIN_DIR)\lib \ + /LIBPATH:$(APACHE_BIN_DIR)\lib /LIBPATH:$(ZLIB_BIN_DIR)\lib + +LIBS = Rpcrt4.lib Ws2_32.lib + +!if "$(ENABLE_SSL)" == "1" +LDFLAGS = $(LDFLAGS) /LIBPATH:$(OPENSSL_BIN_DIR)\lib\VC +LIBS = $(LIBS) libeay32MD.lib ssleay32MD.lib +!endif + +!if "$(ENABLE_LIBCURL)" == "1" +LDFLAGS = $(LDFLAGS) /LIBPATH:$(LIBCURL_BIN_DIR) +LIBS = $(LIBS) libcurl_imp.lib +!endif + +!if "$(APACHE_VERSION_2_0_X)" == "1" +APACHE_LIBS = apr.lib xml.lib libhttpd.lib libaprutil.lib libapr.lib +!else +APACHE_LIBS = apr-1.lib xml.lib libhttpd.lib libapr-1.lib libaprutil-1.lib +!endif + +# Manifest Options +#################### +MT=mt.exe +MT="$(MT)" + +!if "$(EMBED_MANIFEST)" == "0" +_VC_MANIFEST_EMBED_EXE= +_VC_MANIFEST_EMBED_DLL= +!else +_VC_MANIFEST_EMBED_EXE= if exist $@.manifest $(MT) -nologo -manifest $@.manifest -outputresource:$@;1 +_VC_MANIFEST_EMBED_DLL= if exist $@.manifest $(MT) -nologo -manifest $@.manifest -outputresource:$@;2 +!endif + +# Debug Symbols +##################### + +!if "$(DEBUG)" == "1" +CFLAGS = $(CFLAGS) /D "_DEBUG" /Od /Z7 $(CRUNTIME)d +LDFLAGS = $(LDFLAGS) /DEBUG +!else +CFLAGS = $(CFLAGS) /D "NDEBUG" /O2 $(CRUNTIME) +LDFLAGS = $(LDFLAGS) +!endif + +# Build Targets +################# + +# create the directory structure +deploy: + @if not exist $(AXIS2_BINDIR) mkdir $(AXIS2_BINDIR) + @if not exist $(AXIS2_BINS) mkdir $(AXIS2_BINS) + @if not exist $(AXIS2_SERVICES) mkdir $(AXIS2_SERVICES) + @if not exist $(AXIS2_MODULES) mkdir $(AXIS2_MODULES) + @if not exist $(AXIS2_LIBS) mkdir $(AXIS2_LIBS) + @if not exist $(AXIS2_INCLUDE) mkdir $(AXIS2_INCLUDE) + @if not exist $(AXIS2_LOG) mkdir $(AXIS2_LOG) + @if not exist $(AXIS2_MODULES)\addressing mkdir $(AXIS2_MODULES)\addressing + + @if not exist $(AXIS2_INTDIR) mkdir $(AXIS2_INTDIR) + @if not exist $(AXIS2_INTDIR_SAMPLES) mkdir $(AXIS2_INTDIR_SAMPLES) + +#clean +clean: + if exist $(AXIS2_BINDIR) rmdir /S /Q $(AXIS2_BINDIR) + if exist $(AXIS2_INTDIR) rmdir /S /Q $(AXIS2_INTDIR) + if exist ..\$(AXIS2_RELEASE_DIR) rmdir /S /Q ..\$(AXIS2_RELEASE_DIR) + +# axutil +################### + +AXUTIL_SRC = $(AXIS2_SOURCE_DIR)\util\src +AXIS2_INTDIR_AXUTIL = $(AXIS2_INTDIR)\util +AXIS2_INTDIR_AXUTIL1 = $(AXIS2_INTDIR_AXUTIL)\platform +AXIS2_INTDIR_AXUTIL2 =$(AXIS2_INTDIR_AXUTIL)\minizip + +AXUTIL_OBJS = $(AXIS2_INTDIR_AXUTIL)\*.obj \ + $(AXIS2_INTDIR_AXUTIL)\platform\*.obj + +!if "$(WITH_ARCHIVE)" == "1" +AXUTIL_OBJS = $(AXUTIL_OBJS) $(AXIS2_INTDIR_AXUTIL)\minizip\*.obj +!endif + +$(AXIS2_INTDIR_AXUTIL) : + @if not exist $(AXIS2_INTDIR_AXUTIL) mkdir $(AXIS2_INTDIR_AXUTIL) + +$(AXIS2_INTDIR_AXUTIL1) : + @if not exist $(AXIS2_INTDIR_AXUTIL1) mkdir $(AXIS2_INTDIR_AXUTIL1) + +$(AXIS2_INTDIR_AXUTIL2) : + @if not exist $(AXIS2_INTDIR_AXUTIL2) mkdir $(AXIS2_INTDIR_AXUTIL2) + + +{$(AXUTIL_SRC)}.c{$(AXIS2_INTDIR_AXUTIL)}.obj :: + $(CC) $(CFLAGS) /Fo$(AXIS2_INTDIR_AXUTIL)\ /c $< + +{$(AXUTIL_SRC)\platforms\windows}.c{$(AXIS2_INTDIR_AXUTIL1)}.obj :: + $(CC) $(CFLAGS) /Fo$(AXIS2_INTDIR_AXUTIL1)\ /c $< + + +!if "$(WITH_ARCHIVE)" == "1" +{$(AXUTIL_SRC)\minizip}.c{$(AXIS2_INTDIR_AXUTIL2)}.obj :: + $(CC) $(CFLAGS) /Fo$(AXIS2_INTDIR_AXUTIL2)\ /c $< + +$(AXUTIL_OBJS) : $(AXIS2_INTDIR_AXUTIL) $(AXIS2_INTDIR_AXUTIL1) $(AXIS2_INTDIR_AXUTIL2) + +$(AXIS2_LIBS)\$(AXUTIL).dll : $(AXUTIL_OBJS) + $(LD) $(LDFLAGS) $(AXUTIL_OBJS) $(LIBS) $(ZLIB_BIN_DIR)\lib\zdll.lib \ + /DLL /OUT:$(AXIS2_LIBS)\$(AXUTIL).dll /IMPLIB:$(AXIS2_LIBS)\$(AXUTIL).lib + -@$(_VC_MANIFEST_EMBED_DLL) + +!else + +$(AXUTIL_OBJS) : $(AXIS2_INTDIR_AXUTIL) $(AXIS2_INTDIR_AXUTIL1) + +$(AXIS2_LIBS)\$(AXUTIL).dll : $(AXUTIL_OBJS) + $(LD) $(LDFLAGS) $(AXUTIL_OBJS) $(LIBS) /DLL /OUT:$(AXIS2_LIBS)\$(AXUTIL).dll \ + /IMPLIB:$(AXIS2_LIBS)\$(AXUTIL).lib + -@$(_VC_MANIFEST_EMBED_DLL) + +!endif + +axis2_util : $(AXIS2_LIBS)\$(AXUTIL).dll + +#end axutil + + + +# guththila +################## + +GUTHTHILA_SRC = $(AXIS2_SOURCE_DIR)\guththila\src +AXIS2_INTDIR_GUTHTHILA = $(AXIS2_INTDIR)\guththila + +GUTHTHILA_OBJS = $(AXIS2_INTDIR_GUTHTHILA)\*.obj + +$(AXIS2_INTDIR_GUTHTHILA) : + @if not exist $(AXIS2_INTDIR_GUTHTHILA) mkdir $(AXIS2_INTDIR_GUTHTHILA) + +{$(GUTHTHILA_SRC)}.c{$(AXIS2_INTDIR_GUTHTHILA)}.obj :: + $(CC) $(CFLAGS) $(GUTHTHILA_INCLUDE_PATH) /Fo$(AXIS2_INTDIR_GUTHTHILA)\ /c $< + +$(GUTHTHILA_OBJS) : $(AXIS2_INTDIR_GUTHTHILA) + +$(AXIS2_LIBS)\$(GUTHTHILA).dll : $(GUTHTHILA_OBJS) + $(LD) $(LDFLAGS) $(GUTHTHILA_OBJS) $(AXUTIL).lib $(LIBS) \ + /DLL /OUT:$(AXIS2_LIBS)\$(GUTHTHILA).dll /IMPLIB:$(AXIS2_LIBS)\$(GUTHTHILA).lib + -@$(_VC_MANIFEST_EMBED_DLL) + +guththila: $(AXIS2_LIBS)\$(GUTHTHILA).dll + +# end guththila + + +# axis2 parser +################### + +AXIS2_PARSER_SRC = $(AXIS2_SOURCE_DIR)\axiom\src\parser +AXIS2_INTDIR_PARSER = $(AXIS2_INTDIR)\parser + +$(AXIS2_INTDIR_PARSER) : + @if not exist $(AXIS2_INTDIR_PARSER) mkdir $(AXIS2_INTDIR_PARSER) + + +!if "$(ENABLE_LIBXML2)" == "1" + +AXIS2_INTDIR_PARSER1 = $(AXIS2_INTDIR)\parser\libxml2 +AXIS2_PARSER_OBJS = $(AXIS2_INTDIR_PARSER)\*.obj \ + $(AXIS2_INTDIR_PARSER)\libxml2\*.obj + +PARSER_LIB= $(LIBXML2_BIN_DIR)\lib\libxml2.lib +!else + +AXIS2_INTDIR_PARSER1 = $(AXIS2_INTDIR)\parser\guththila +AXIS2_PARSER_OBJS = $(AXIS2_INTDIR_PARSER)\*.obj \ + $(AXIS2_INTDIR_PARSER)\guththila\*.obj + +PARSER_LIB = $(AXIS2_LIBS)\$(GUTHTHILA).lib +!endif + +$(AXIS2_INTDIR_PARSER1) : + @if not exist $(AXIS2_INTDIR_PARSER1) mkdir $(AXIS2_INTDIR_PARSER1) + +{$(AXIS2_PARSER_SRC)}.c{$(AXIS2_INTDIR_PARSER)}.obj :: + $(CC) $(CFLAGS) /Fo$(AXIS2_INTDIR_PARSER)\ /c $< + + +!if "$(ENABLE_LIBXML2)"=="1" +{$(AXIS2_PARSER_SRC)\libxml2}.c{$(AXIS2_INTDIR_PARSER1)}.obj :: + $(CC) $(CFLAGS) /Fo$(AXIS2_INTDIR_PARSER1)\ /c $< +!else +{$(AXIS2_PARSER_SRC)\guththila}.c{$(AXIS2_INTDIR_PARSER1)}.obj :: + $(CC) $(CFLAGS) /Fo$(AXIS2_INTDIR_PARSER1)\ /c $< +!endif + +$(AXIS2_PARSER_OBJS) : $(AXIS2_INTDIR_PARSER) $(AXIS2_INTDIR_PARSER1) + +$(AXIS2_LIBS)\$(AXIS2_PARSER).dll : $(AXIS2_PARSER_OBJS) + $(LD) $(LDFLAGS) $(AXIS2_PARSER_OBJS) $(AXUTIL).lib $(LIBS) $(PARSER_LIB) /DLL \ + /OUT:$(AXIS2_LIBS)\$(AXIS2_PARSER).dll /IMPLIB:$(AXIS2_LIBS)\$(AXIS2_PARSER).lib + -@$(_VC_MANIFEST_EMBED_DLL) + +axis2_parser : $(AXIS2_LIBS)\$(AXIS2_PARSER).dll + +# decide build order + +!if "$(ENABLE_LIBXML2)"=="1" +axis2_basic_modules: axis2_util axis2_parser +!else +axis2_basic_modules: axis2_util guththila axis2_parser +!endif + +#end parser + +##### axiom + +AXIOM_SRC = $(AXIS2_SOURCE_DIR)\axiom\src +AXIOM_INTDIR = $(AXIS2_INTDIR)\axiom\om +AXIOM_INTDIR1 = $(AXIS2_INTDIR)\axiom\soap +AXIOM_INTDIR2 = $(AXIS2_INTDIR)\axiom\util +AXIOM_INTDIR3 = $(AXIS2_INTDIR)\axiom\attachments + +AXIOM_OBJS = $(AXIOM_INTDIR)\*.obj \ + $(AXIOM_INTDIR1)\*.obj \ + $(AXIOM_INTDIR2)\*.obj \ + $(AXIOM_INTDIR3)\*.obj + +$(AXIOM_INTDIR) : + @if not exist $(AXIOM_INTDIR) mkdir $(AXIOM_INTDIR) + +$(AXIOM_INTDIR1) : + @if not exist $(AXIOM_INTDIR1) mkdir $(AXIOM_INTDIR1) + +$(AXIOM_INTDIR2) : + @if not exist $(AXIOM_INTDIR2) mkdir $(AXIOM_INTDIR2) + +$(AXIOM_INTDIR3) : + @if not exist $(AXIOM_INTDIR3) mkdir $(AXIOM_INTDIR3) + + +{$(AXIOM_SRC)\om}.c{$(AXIOM_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(AXIOM_INTDIR)\ /c $< + +{$(AXIOM_SRC)\soap}.c{$(AXIOM_INTDIR1)}.obj :: + $(CC) $(CFLAGS) /Fo$(AXIOM_INTDIR1)\ /c $< + +{$(AXIOM_SRC)\util}.c{$(AXIOM_INTDIR2)}.obj :: + $(CC) $(CFLAGS) /Fo$(AXIOM_INTDIR2)\ /c $< + +{$(AXIOM_SRC)\attachments}.c{$(AXIOM_INTDIR3)}.obj :: + $(CC) $(CFLAGS) /Fo$(AXIOM_INTDIR3)\ /c $< + + +$(AXIOM_OBJS) : $(AXIOM_INTDIR) $(AXIOM_INTDIR1) $(AXIOM_INTDIR2) $(AXIOM_INTDIR3) + + +$(AXIS2_LIBS)\$(AXIOM).dll : $(AXIOM_OBJS) + $(LD) $(LDFLAGS) $(AXIOM_OBJS) $(AXUTIL).lib $(AXIS2_PARSER).lib $(LIBS) \ + /DLL /OUT:$(AXIS2_LIBS)\$(AXIOM).dll /IMPLIB:$(AXIS2_LIBS)\$(AXIOM).lib + -@$(_VC_MANIFEST_EMBED_DLL) + +axiom : $(AXIS2_LIBS)\$(AXIOM).dll + +##### end axiom + +##### axis2_xpath + +XPATH_SRC = $(AXIS2_SOURCE_DIR)\axiom\src\xpath +XPATH_INTDIR = $(AXIS2_INTDIR)\axiom\xpath + +XPATH_OBJS = $(XPATH_INTDIR)\*.obj + +$(XPATH_INTDIR) : + @if not exist $(XPATH_INTDIR) mkdir $(XPATH_INTDIR) + +{$(AXIOM_SRC)\xpath}.c{$(XPATH_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(XPATH_INTDIR)\ /c $< + +$(XPATH_OBJS) : $(XPATH_INTDIR) + +$(AXIS2_LIBS)\$(AXIS2_XPATH).dll : $(XPATH_OBJS) + $(LD) $(LDFLAGS) $(XPATH_OBJS) $(AXUTIL).lib $(AXIOM).lib $(LIBS) \ + /DLL /OUT:$(AXIS2_LIBS)\$(AXIS2_XPATH).dll /IMPLIB:$(AXIS2_LIBS)\$(AXIS2_XPATH).lib + -@$(_VC_MANIFEST_EMBED_DLL) + +axis2_xpath : $(AXIS2_LIBS)\$(AXIS2_XPATH).dll + +##### end axis2_xpath +##### neethi +NEETHI_SRC = $(AXIS2_SOURCE_DIR)\neethi\src +NEETHI_INTDIR = $(AXIS2_INTDIR)\neethi +NEETHI_INTDIR1 = $(AXIS2_INTDIR)\neethi\model +NEETHI_INTDIR2 = $(AXIS2_INTDIR)\neethi\builder +NEETHI_INTDIR3 = $(AXIS2_INTDIR)\neethi\rmpolicy + +NEETHI_OBJS = $(NEETHI_INTDIR)\*.obj \ + $(NEETHI_INTDIR)\model\*.obj \ + $(NEETHI_INTDIR)\builder\*.obj \ + $(NEETHI_INTDIR)\rmpolicy\*.obj + +$(NEETHI_INTDIR) : + @if not exist $(NEETHI_INTDIR) mkdir $(NEETHI_INTDIR) + +$(NEETHI_INTDIR1) : + @if not exist $(NEETHI_INTDIR1) mkdir $(NEETHI_INTDIR1) + +$(NEETHI_INTDIR2) : + @if not exist $(NEETHI_INTDIR2) mkdir $(NEETHI_INTDIR2) + +$(NEETHI_INTDIR3) : + @if not exist $(NEETHI_INTDIR3) mkdir $(NEETHI_INTDIR3) + +{$(NEETHI_SRC)}.c{$(NEETHI_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(NEETHI_INTDIR)\ /c $< + +{$(NEETHI_SRC)\secpolicy\model}.c{$(NEETHI_INTDIR1)}.obj :: + $(CC) $(CFLAGS) /Fo$(NEETHI_INTDIR1)\ /c $< + +{$(NEETHI_SRC)\secpolicy\builder}.c{$(NEETHI_INTDIR2)}.obj :: + $(CC) $(CFLAGS) /Fo$(NEETHI_INTDIR2)\ /c $< + +{$(NEETHI_SRC)\rmpolicy}.c{$(NEETHI_INTDIR3)}.obj :: + $(CC) $(CFLAGS) /Fo$(NEETHI_INTDIR3)\ /c $< + +$(NEETHI_OBJS) : $(NEETHI_INTDIR) $(NEETHI_INTDIR1) $(NEETHI_INTDIR2) $(NEETHI_INTDIR3) + +$(AXIS2_LIBS)\$(NEETHI).dll : $(NEETHI_OBJS) + $(LD) $(LDFLAGS) $(NEETHI_OBJS) $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) \ + /DLL /OUT:$(AXIS2_LIBS)\$(NEETHI).dll /IMPLIB:$(AXIS2_LIBS)\$(NEETHI).lib + -@$(_VC_MANIFEST_EMBED_DLL) + +neethi : $(AXIS2_LIBS)\$(NEETHI).dll + +##### end neethi + +##### axis2 engine + +ENGINE_SRC = $(AXIS2_SOURCE_DIR)\src\core +ENGINE_INTDIR = $(AXIS2_INTDIR)\core\addr +ENGINE_INTDIR1 = $(AXIS2_INTDIR)\core\clientapi +ENGINE_INTDIR2 = $(AXIS2_INTDIR)\core\context +ENGINE_INTDIR3 = $(AXIS2_INTDIR)\core\deployment +ENGINE_INTDIR4 = $(AXIS2_INTDIR)\core\description +ENGINE_INTDIR5 = $(AXIS2_INTDIR)\core\engine +ENGINE_INTDIR6 = $(AXIS2_INTDIR)\core\phaseresolver +ENGINE_INTDIR7 = $(AXIS2_INTDIR)\core\receivers +ENGINE_INTDIR8 = $(AXIS2_INTDIR)\core\util +ENGINE_INTDIR9 = $(AXIS2_INTDIR)\core\transport +ENGINE_INTDIR10 = $(AXIS2_INTDIR)\core\transport\http\common +ENGINE_INTDIR11 = $(AXIS2_INTDIR)\core\transport\http\util + +ENGINE_OBJS = $(ENGINE_INTDIR)\*.obj \ + $(ENGINE_INTDIR1)\*.obj \ + $(ENGINE_INTDIR2)\*.obj \ + $(ENGINE_INTDIR3)\*.obj \ + $(ENGINE_INTDIR4)\*.obj \ + $(ENGINE_INTDIR5)\*.obj \ + $(ENGINE_INTDIR6)\*.obj \ + $(ENGINE_INTDIR7)\*.obj \ + $(ENGINE_INTDIR8)\*.obj \ + $(ENGINE_INTDIR9)\*.obj \ + $(ENGINE_INTDIR10)\*.obj \ + $(ENGINE_INTDIR11)\*.obj + +$(ENGINE_INTDIR) : + @if not exist $(ENGINE_INTDIR) mkdir $(ENGINE_INTDIR) + +$(ENGINE_INTDIR1) : + @if not exist $(ENGINE_INTDIR1) mkdir $(ENGINE_INTDIR1) + +$(ENGINE_INTDIR2) : + @if not exist $(ENGINE_INTDIR2) mkdir $(ENGINE_INTDIR2) + +$(ENGINE_INTDIR3) : + @if not exist $(ENGINE_INTDIR3) mkdir $(ENGINE_INTDIR3) + +$(ENGINE_INTDIR4) : + @if not exist $(ENGINE_INTDIR4) mkdir $(ENGINE_INTDIR4) + +$(ENGINE_INTDIR5) : + @if not exist $(ENGINE_INTDIR5) mkdir $(ENGINE_INTDIR5) + +$(ENGINE_INTDIR6) : + @if not exist $(ENGINE_INTDIR6) mkdir $(ENGINE_INTDIR6) + +$(ENGINE_INTDIR7) : + @if not exist $(ENGINE_INTDIR7) mkdir $(ENGINE_INTDIR7) + +$(ENGINE_INTDIR8) : + @if not exist $(ENGINE_INTDIR8) mkdir $(ENGINE_INTDIR8) + +$(ENGINE_INTDIR9) : + @if not exist $(ENGINE_INTDIR9) mkdir $(ENGINE_INTDIR9) + +$(ENGINE_INTDIR10) : + @if not exist $(ENGINE_INTDIR10) mkdir $(ENGINE_INTDIR10) + +$(ENGINE_INTDIR11) : + @if not exist $(ENGINE_INTDIR11) mkdir $(ENGINE_INTDIR11) + +{$(ENGINE_SRC)\addr}.c{$(ENGINE_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(ENGINE_INTDIR)\ /c $< + +{$(ENGINE_SRC)\clientapi}.c{$(ENGINE_INTDIR1)}.obj :: + $(CC) $(CFLAGS) /Fo$(ENGINE_INTDIR1)\ /c $< + +{$(ENGINE_SRC)\context}.c{$(ENGINE_INTDIR2)}.obj :: + $(CC) $(CFLAGS) /Fo$(ENGINE_INTDIR2)\ /c $< + +{$(ENGINE_SRC)\deployment}.c{$(ENGINE_INTDIR3)}.obj :: + $(CC) $(CFLAGS) /Fo$(ENGINE_INTDIR3)\ /c $< + +{$(ENGINE_SRC)\description}.c{$(ENGINE_INTDIR4)}.obj :: + $(CC) $(CFLAGS) /Fo$(ENGINE_INTDIR4)\ /c $< + +{$(ENGINE_SRC)\engine}.c{$(ENGINE_INTDIR5)}.obj :: + $(CC) $(CFLAGS) /Fo$(ENGINE_INTDIR5)\ /c $< + +{$(ENGINE_SRC)\phaseresolver}.c{$(ENGINE_INTDIR6)}.obj :: + $(CC) $(CFLAGS) /Fo$(ENGINE_INTDIR6)\ /c $< + +{$(ENGINE_SRC)\receivers}.c{$(ENGINE_INTDIR7)}.obj :: + $(CC) $(CFLAGS) /Fo$(ENGINE_INTDIR7)\ /c $< + +{$(ENGINE_SRC)\util}.c{$(ENGINE_INTDIR8)}.obj :: + $(CC) $(CFLAGS) /Fo$(ENGINE_INTDIR8)\ /c $< + +{$(ENGINE_SRC)\transport}.c{$(ENGINE_INTDIR9)}.obj :: + $(CC) $(CFLAGS) /Fo$(ENGINE_INTDIR9)\ /c $< + +{$(ENGINE_SRC)\transport\http\common}.c{$(ENGINE_INTDIR10)}.obj :: + $(CC) $(CFLAGS) /Fo$(ENGINE_INTDIR10)\ /c $< + +{$(ENGINE_SRC)\transport\http\util}.c{$(ENGINE_INTDIR11)}.obj :: + $(CC) $(CFLAGS) /Fo$(ENGINE_INTDIR11)\ /c $< + +$(ENGINE_OBJS) : $(ENGINE_INTDIR) $(ENGINE_INTDIR1) $(ENGINE_INTDIR2) $(ENGINE_INTDIR3) \ + $(ENGINE_INTDIR4) $(ENGINE_INTDIR5) $(ENGINE_INTDIR6) $(ENGINE_INTDIR7) \ + $(ENGINE_INTDIR8) $(ENGINE_INTDIR9) $(ENGINE_INTDIR10) $(ENGINE_INTDIR11) + +$(AXIS2_LIBS)\$(AXIS2_ENGINE).dll : $(ENGINE_OBJS) + $(LD) $(LDFLAGS) $(ENGINE_OBJS) $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib \ + $(NEETHI).lib $(LIBS) /DLL /OUT:$(AXIS2_LIBS)\$(AXIS2_ENGINE).dll \ + /IMPLIB:$(AXIS2_LIBS)\$(AXIS2_ENGINE).lib + -@$(_VC_MANIFEST_EMBED_DLL) + +axis2_engine : $(AXIS2_LIBS)\$(AXIS2_ENGINE).dll + + +##### end axis2 engine + +##### axis2 http sender + +HTTP_SENDER_SRC = $(AXIS2_SOURCE_DIR)\src\core\transport\http\sender +HTTP_SENDER_INTDIR = $(AXIS2_INTDIR)\http_sender +HTTP_SENDER_INTDIR1 = $(AXIS2_INTDIR)\http_sender\ssl +HTTP_SENDER_INTDIR2 = $(AXIS2_INTDIR)\http_sender\libcurl + +HTTP_SENDER_OBJS = $(HTTP_SENDER_INTDIR)\*.obj + +$(HTTP_SENDER_INTDIR) : + @if not exist $(HTTP_SENDER_INTDIR) mkdir $(HTTP_SENDER_INTDIR) + +$(HTTP_SENDER_INTDIR1) : + @if not exist $(HTTP_SENDER_INTDIR1) mkdir $(HTTP_SENDER_INTDIR1) + +$(HTTP_SENDER_INTDIR2) : + @if not exist $(HTTP_SENDER_INTDIR2) mkdir $(HTTP_SENDER_INTDIR2) + +{$(HTTP_SENDER_SRC)}.c{$(HTTP_SENDER_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(HTTP_SENDER_INTDIR)\ /c $< + +{$(HTTP_SENDER_SRC)\ssl}.c{$(HTTP_SENDER_INTDIR1)}.obj :: + $(CC) $(CFLAGS) /Fo$(HTTP_SENDER_INTDIR1)\ /c $< + +{$(HTTP_SENDER_SRC)\libcurl}.c{$(HTTP_SENDER_INTDIR2)}.obj :: + $(CC) $(CFLAGS) /Fo$(HTTP_SENDER_INTDIR2)\ /c $< + +!if "$(ENABLE_SSL)" == "1" +!if "$(ENABLE_LIBCURL)" == "1" +HTTP_SENDER_OBJS = $(HTTP_SENDER_OBJS) \ + $(HTTP_SENDER_INTDIR1)\*.obj \ + $(HTTP_SENDER_INTDIR2)\*.obj + +$(HTTP_SENDER_OBJS) : $(HTTP_SENDER_INTDIR) $(HTTP_SENDER_INTDIR1) $(HTTP_SENDER_INTDIR2) +!else +HTTP_SENDER_OBJS = $(HTTP_SENDER_OBJS) \ + $(HTTP_SENDER_INTDIR1)\*.obj + +$(HTTP_SENDER_OBJS) : $(HTTP_SENDER_INTDIR) $(HTTP_SENDER_INTDIR1) +!endif +!elseif "$(ENABLE_LIBCURL)" == "1" +HTTP_SENDER_OBJS = $(HTTP_SENDER_OBJS) \ + $(HTTP_SENDER_INTDIR2)\*.obj + +$(HTTP_SENDER_OBJS) : $(HTTP_SENDER_INTDIR) $(HTTP_SENDER_INTDIR2) +!else +$(HTTP_SENDER_OBJS) : $(HTTP_SENDER_INTDIR) +!endif + +$(AXIS2_LIBS)\$(AXIS2_HTTP_SENDER).dll : $(HTTP_SENDER_OBJS) + $(LD) $(LDFLAGS) $(HTTP_SENDER_OBJS) $(AXUTIL).lib \ + $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib \ + /DLL /OUT:$(AXIS2_LIBS)\$(AXIS2_HTTP_SENDER).dll /IMPLIB:$(AXIS2_LIBS)\$(AXIS2_HTTP_SENDER).lib + -@$(_VC_MANIFEST_EMBED_DLL) + +axis2_http_sender : $(AXIS2_LIBS)\$(AXIS2_HTTP_SENDER).dll + +# axis2 http sender + +# axis2_tcp_sender +########################## + +TCP_SENDER_SRC = $(AXIS2_SOURCE_DIR)\src\core\transport\tcp\sender +TCP_SENDER_INTDIR = $(AXIS2_INTDIR)\tcp_sender + +TCP_SENDER_OBJS = $(TCP_SENDER_INTDIR)\*.obj + +$(TCP_SENDER_INTDIR) : + @if not exist $(TCP_SENDER_INTDIR) mkdir $(TCP_SENDER_INTDIR) + +{$(TCP_SENDER_SRC)}.c{$(TCP_SENDER_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(TCP_SENDER_INTDIR)\ /c $< + + +$(TCP_SENDER_OBJS) : $(TCP_SENDER_INTDIR) + +$(AXIS2_LIBS)\$(AXIS2_TCP_SENDER).dll : $(TCP_SENDER_OBJS) + $(LD) $(LDFLAGS) $(TCP_SENDER_OBJS) $(AXUTIL).lib \ + $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib \ + /DLL /OUT:$(AXIS2_LIBS)\$(AXIS2_TCP_SENDER).dll /IMPLIB:$(AXIS2_LIBS)\$(AXIS2_TCP_SENDER).lib + -@$(_VC_MANIFEST_EMBED_DLL) + +axis2_tcp_sender : $(AXIS2_LIBS)\$(AXIS2_TCP_SENDER).dll + +# end axis2_tcp_sender + + +# axis2 http receiver +############################## + + +HTTP_RECEIVER_SRC = $(AXIS2_SOURCE_DIR)\src\core\transport\http\receiver +HTTP_RECEIVER_INTDIR = $(AXIS2_INTDIR)\http_receiver + +HTTP_RECEIVER_OBJS = $(HTTP_RECEIVER_INTDIR)\*.obj + +$(HTTP_RECEIVER_INTDIR) : + @if not exist $(HTTP_RECEIVER_INTDIR) mkdir $(HTTP_RECEIVER_INTDIR) + +{$(HTTP_RECEIVER_SRC)}.c{$(HTTP_RECEIVER_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(HTTP_RECEIVER_INTDIR)\ /c $< + +$(HTTP_RECEIVER_OBJS) : $(HTTP_RECEIVER_INTDIR) + +$(AXIS2_LIBS)\$(AXIS2_HTTP_RECEIVER).dll : $(HTTP_RECEIVER_OBJS) + $(LD) $(LDFLAGS) $(HTTP_RECEIVER_OBJS) $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib \ + $(LIBS) $(AXIS2_ENGINE).lib /DLL /OUT:$(AXIS2_LIBS)\$(AXIS2_HTTP_RECEIVER).dll \ + /IMPLIB:$(AXIS2_LIBS)\$(AXIS2_HTTP_RECEIVER).lib + -@$(_VC_MANIFEST_EMBED_DLL) + +axis2_http_receiver : $(AXIS2_LIBS)\$(AXIS2_HTTP_RECEIVER).dll + +# end axis2 http receiver + +# axis2_tcp_receiver +########################## + +TCP_RECEIVER_SRC = $(AXIS2_SOURCE_DIR)\src\core\transport\tcp\receiver +TCP_RECEIVER_INTDIR = $(AXIS2_INTDIR)\tcp_receiver + +TCP_RECEIVER_OBJS = $(TCP_RECEIVER_INTDIR)\*.obj + +$(TCP_RECEIVER_INTDIR) : + @if not exist $(TCP_RECEIVER_INTDIR) mkdir $(TCP_RECEIVER_INTDIR) + +{$(TCP_RECEIVER_SRC)}.c{$(TCP_RECEIVER_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(TCP_RECEIVER_INTDIR)\ /c $< + +$(TCP_RECEIVER_OBJS) : $(TCP_RECEIVER_INTDIR) + +$(AXIS2_LIBS)\$(AXIS2_TCP_RECEIVER).dll : $(TCP_RECEIVER_OBJS) + $(LD) $(LDFLAGS) $(TCP_RECEIVER_OBJS) $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib \ + $(LIBS) $(AXIS2_ENGINE).lib /DLL /OUT:$(AXIS2_LIBS)\$(AXIS2_TCP_RECEIVER).dll \ + /IMPLIB:$(AXIS2_LIBS)\$(AXIS2_TCP_RECEIVER).lib + -@$(_VC_MANIFEST_EMBED_DLL) + +axis2_tcp_receiver : $(AXIS2_LIBS)\$(AXIS2_TCP_RECEIVER).dll + + +##### end axis2_tcp_receiver + +##### axis2 mod addr +ADDR_SRC = $(AXIS2_SOURCE_DIR)\src\modules\mod_addr +ADDR_INTDIR = $(AXIS2_INTDIR)\addressing + +ADDR_OBJS = $(ADDR_INTDIR)\*.obj + +$(ADDR_INTDIR) : + @if not exist $(ADDR_INTDIR) mkdir $(ADDR_INTDIR) + +{$(ADDR_SRC)}.c{$(ADDR_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(ADDR_INTDIR)\ /c $< + +$(ADDR_OBJS) : $(ADDR_INTDIR) + +$(AXIS2_MODULES)\addressing\$(AXIS2_MOD_ADDR).dll : $(ADDR_OBJS) + $(LD) $(LDFLAGS) $(ADDR_OBJS) $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) \ + $(AXIS2_ENGINE).lib /DLL /OUT:$(AXIS2_MODULES)\addressing\$(AXIS2_MOD_ADDR).dll + @copy $(AXIS2_SOURCE_DIR)\src\modules\mod_addr\module.xml $(AXIS2_MODULES)\addressing + -@$(_VC_MANIFEST_EMBED_DLL) + +axis2_mod_addr : $(AXIS2_MODULES)\addressing\$(AXIS2_MOD_ADDR).dll + + +##### end axis2 mod addr + +##### simple_axis_server +SIMPLE_AXIS2_SVR_SRC = $(AXIS2_SOURCE_DIR)\src\core\transport\http\server\simple_axis2_server + +AXIS2_SVR_INTDIR = $(AXIS2_INTDIR)\simple_http_server + +AXIS2_SVR_OBJS = $(AXIS2_INTDIR)\simple_http_server\*.obj + +$(AXIS2_SVR_INTDIR) : + @if not exist $(AXIS2_SVR_INTDIR) mkdir $(AXIS2_SVR_INTDIR) + +{$(SIMPLE_AXIS2_SVR_SRC)}.c{$(AXIS2_SVR_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(AXIS2_SVR_INTDIR)\ /c $< + +$(AXIS2_SVR_OBJS) : $(AXIS2_SVR_INTDIR) + + +$(AXIS2_BINS)\$(AXIS2_HTTP_SERVER).exe : $(AXIS2_SVR_OBJS) + $(LD) $(LDFLAGS) $(AXIS2_SVR_OBJS) $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib \ + $(LIBS) $(AXIS2_ENGINE).lib $(AXIS2_HTTP_RECEIVER).lib /OUT:$(AXIS2_BINS)\$(AXIS2_HTTP_SERVER).exe + -@$(_VC_MANIFEST_EMBED_EXE) + @copy $(AXIS2_SOURCE_DIR)\samples\server\axis2.xml $(AXIS2_BINDIR)\ + +simple_axis2_http_server : $(AXIS2_BINS)\$(AXIS2_HTTP_SERVER).exe + +##### end simple_axis2_server + +##### simple tcp server + +AXIS2_TCP_SVR_SRC = $(AXIS2_SOURCE_DIR)\src\core\transport\tcp\server\simple_tcp_server + +AXIS2_TCP_SVR_INTDIR = $(AXIS2_INTDIR)\simple_tcp_server + +AXIS2_TCP_SVR_OBJS = $(AXIS2_INTDIR)\simple_tcp_server\*.obj + +$(AXIS2_TCP_SVR_INTDIR) : + @if not exist $(AXIS2_TCP_SVR_INTDIR) mkdir $(AXIS2_TCP_SVR_INTDIR) + +{$(AXIS2_TCP_SVR_SRC)}.c{$(AXIS2_TCP_SVR_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(AXIS2_TCP_SVR_INTDIR)\ /c $< + +$(AXIS2_TCP_SVR_OBJS) : $(AXIS2_TCP_SVR_INTDIR) + + +$(AXIS2_BINS)\$(AXIS2_TCP_SERVER).exe : $(AXIS2_TCP_SVR_OBJS) + $(LD) $(LDFLAGS) $(AXIS2_TCP_SVR_OBJS) $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib \ + $(LIBS) $(AXIS2_ENGINE).lib $(AXIS2_TCP_RECEIVER).lib /OUT:$(AXIS2_BINS)\$(AXIS2_TCP_SERVER).exe + -@$(_VC_MANIFEST_EMBED_EXE) + @copy $(AXIS2_SOURCE_DIR)\samples\server\axis2.xml $(AXIS2_BINDIR)\ + +simple_axis2_tcp_server : $(AXIS2_BINS)\$(AXIS2_TCP_SERVER).exe + + +##### end simple tcp server + +########## server modules +#apache module + +MOD_AXIS2_SRC=$(AXIS2_SOURCE_DIR)\src\core\transport\http\server\apache2 +MOD_AXIS2_INTDIR = $(AXIS2_INTDIR)\apache_module + +MOD_AXIS2_OBJS = $(MOD_AXIS2_INTDIR)\*.obj + +$(MOD_AXIS2_INTDIR) : + @if not exist $(MOD_AXIS2_INTDIR) mkdir $(MOD_AXIS2_INTDIR) + +{$(MOD_AXIS2_SRC)}.c{$(MOD_AXIS2_INTDIR)}.obj :: + $(CC) $(CFLAGS) $(APACHE_INCLUDE_PATH) /Fo$(MOD_AXIS2_INTDIR)\ /c $< + +$(MOD_AXIS2_OBJS) : $(MOD_AXIS2_INTDIR) + +$(AXIS2_LIBS)\mod_axis2.dll : $(MOD_AXIS2_OBJS) + $(LD) $(LDFLAGS) $(MOD_AXIS2_OBJS) $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib \ + $(LIBS) $(AXIS2_ENGINE).lib $(APACHE_LIBS) /DLL /OUT:$(AXIS2_LIBS)\mod_axis2.dll + -@$(_VC_MANIFEST_EMBED_DLL) + +axis2_apache_module : $(AXIS2_LIBS)\mod_axis2.dll + +#mod IIS + +MOD_IIS_SRC = $(AXIS2_SOURCE_DIR)\src\core\transport\http\server\IIS +MOD_IIS_INTDIR = $(AXIS2_INTDIR)\mod_IIS +MOD_IIS_INTDIR1 = $(AXIS2_INTDIR)\mod_IIS\isapi51 + +DEF_FILE = $(AXIS2_SOURCE_DIR)\src\core\transport\http\server\IIS\mod_axis2.def + +MOD_IIS_OBJS = $(MOD_IIS_INTDIR)\*.obj \ + $(MOD_IIS_INTDIR1)\*.obj + +$(MOD_IIS_INTDIR) : + @if not exist $(MOD_IIS_INTDIR) mkdir $(MOD_IIS_INTDIR) + +$(MOD_IIS_INTDIR1) : + @if not exist $(MOD_IIS_INTDIR1) mkdir $(MOD_IIS_INTDIR1) + + +{$(MOD_IIS_SRC)\iis_iaspi_plugin_51}.c{$(MOD_IIS_INTDIR1)}.obj :: + $(CC) $(CFLAGS) /D "WIN32" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /Fo$(MOD_IIS_INTDIR1)\ /c $< + +{$(MOD_IIS_SRC)}.c{$(MOD_IIS_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(MOD_IIS_INTDIR)\ /c $< + +$(MOD_IIS_OBJS) : $(MOD_IIS_INTDIR) $(MOD_IIS_INTDIR1) + + +$(AXIS2_LIBS)\mod_axis2_IIS.dll : $(MOD_IIS_OBJS) + $(LD) $(LDFLAGS) $(MOD_IIS_OBJS) $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib \ + $(LIBS) Advapi32.lib $(AXIS2_ENGINE).lib /DEF:$(DEF_FILE) /DLL /OUT:$(AXIS2_LIBS)\mod_axis2_IIS.dll + @copy $(MOD_IIS_SRC)\axis2_iis_regedit.js $(AXIS2_BINDIR) + -@$(_VC_MANIFEST_EMBED_DLL) + +axis2_IIS_module : $(AXIS2_LIBS)\mod_axis2_IIS.dll + + +#CGI module + +MOD_CGI_SRC=$(AXIS2_SOURCE_DIR)\src\core\transport\http\server\CGI +MOD_CGI_INTDIR = $(AXIS2_INTDIR)\CGI + +MOD_CGI_OBJS = $(MOD_CGI_INTDIR)\*.obj + +$(MOD_CGI_INTDIR) : + @if not exist $(MOD_CGI_INTDIR) mkdir $(MOD_CGI_INTDIR) + +{$(MOD_CGI_SRC)}.c{$(MOD_CGI_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(MOD_CGI_INTDIR)\ /c $< + +$(MOD_CGI_OBJS) : $(MOD_CGI_INTDIR) + +$(AXIS2_BINS)\axis2.cgi : $(MOD_CGI_OBJS) + $(LD) $(LDFLAGS) $(MOD_CGI_OBJS) $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib \ + $(LIBS) $(AXIS2_ENGINE).lib /OUT:$(AXIS2_BINS)\$(AXIS2_CGI) + -@$(_VC_MANIFEST_EMBED_EXE) + +axis2_cgi : $(AXIS2_BINS)\$(AXIS2_CGI) + +# end modules + +# Core Build Targets +################################ + +axis2_core:axis2_basic_modules axiom axis2_xpath neethi axis2_engine axis2_http_sender \ + axis2_http_receiver axis2_mod_addr simple_axis2_http_server + +axis2_core_without_server: axis2_basic_modules axiom axis2_xpath neethi axis2_engine axis2_http_sender \ + axis2_http_receiver axis2_mod_addr + +axis2_tcp : axis2_tcp_sender axis2_tcp_receiver simple_axis2_tcp_server + +##### logging module + +MOD_LOG_SRC = $(AXIS2_SOURCE_DIR)\src\modules\mod_log +MOD_LOG_INTDIR = $(AXIS2_INTDIR)\mod_log +MOD_LOG_OBJS = $(MOD_LOG_INTDIR)\*.obj + +$(MOD_LOG_INTDIR) : + @if not exist $(AXIS2_MDOULES)\logging mkdir $(AXIS2_MODULES)\logging + @if not exist $(MOD_LOG_INTDIR) mkdir $(MOD_LOG_INTDIR) + +{$(MOD_LOG_SRC)}.c{$(MOD_LOG_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(MOD_LOG_INTDIR)\ /c $< + +$(MOD_LOG_OBJS) : $(MOD_LOG_INTDIR) + +$(AXIS2_MODULES)\logging\axis2_mod_log.dll : $(MOD_LOG_OBJS) + $(LD) $(LDFLAGS) $(MOD_LOG_OBJS) $(AXUTIL).lib $(AXIOM).lib \ + $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /DLL /OUT:$(AXIS2_MODULES)\logging\axis2_mod_log.dll + @copy $(AXIS2_SOURCE_DIR)\src\modules\mod_log\module.xml $(AXIS2_MODULES)\logging + -@$(_VC_MANIFEST_EMBED_DLL) + +axis2_mod_log: $(AXIS2_MODULES)\logging\axis2_mod_log.dll + +##### end logging module + +################ samples #################### +#sample services + +### echo + +ECHO_SRC = $(AXIS2_SOURCE_DIR)\samples\server\echo +ECHO_INTDIR = $(AXIS2_INTDIR_SAMPLES)\services\echo + +ECHO_OBJS = $(ECHO_INTDIR)\*.obj + +$(ECHO_INTDIR) : + @if not exist $(ECHO_INTDIR) mkdir $(ECHO_INTDIR) + @if not exist $(AXIS2_SERVICES)\echo mkdir $(AXIS2_SERVICES)\echo + +{$(ECHO_SRC)}.c{$(ECHO_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(ECHO_INTDIR)\ /c $< + +$(ECHO_OBJS) : $(ECHO_INTDIR) + +$(AXIS2_SERVICES)\echo\echo.dll : $(ECHO_OBJS) + $(LD) $(LDFLAGS) $(ECHO_OBJS) $(AXUTIL).lib $(AXIOM).lib \ + $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /DLL /OUT:$(AXIS2_SERVICES)\echo\echo.dll + -@$(_VC_MANIFEST_EMBED_DLL) + @copy $(AXIS2_SOURCE_DIR)\samples\server\echo\services.xml $(AXIS2_SERVICES)\echo + +axis2_services_echo: $(AXIS2_SERVICES)\echo\echo.dll + +### notify + +NOTIFY_SRC = $(AXIS2_SOURCE_DIR)\samples\server\notify +NOTIFY_INTDIR = $(AXIS2_INTDIR_SAMPLES)\services\notify + +NOTIFY_OBJS = $(NOTIFY_INTDIR)\*.obj + +$(NOTIFY_INTDIR) : + @if not exist $(NOTIFY_INTDIR) mkdir $(NOTIFY_INTDIR) + @if not exist $(AXIS2_SERVICES)\notify mkdir $(AXIS2_SERVICES)\notify + +{$(NOTIFY_SRC)}.c{$(NOTIFY_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(NOTIFY_INTDIR)\ /c $< + +$(NOTIFY_OBJS) : $(NOTIFY_INTDIR) + +$(AXIS2_SERVICES)\notify\notify.dll : $(NOTIFY_OBJS) + $(LD) $(LDFLAGS) $(NOTIFY_OBJS) $(AXUTIL).lib $(AXIOM).lib \ + $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /DLL /OUT:$(AXIS2_SERVICES)\notify\notify.dll + -@$(_VC_MANIFEST_EMBED_DLL) + @copy $(AXIS2_SOURCE_DIR)\samples\server\notify\services.xml $(AXIS2_SERVICES)\notify + +axis2_services_notify: $(AXIS2_SERVICES)\notify\notify.dll + +### math + +MATH_SRC = $(AXIS2_SOURCE_DIR)\samples\server\math +MATH_INTDIR = $(AXIS2_INTDIR_SAMPLES)\services\math + +MATH_OBJS = $(MATH_INTDIR)\*.obj + +$(MATH_INTDIR) : + @if not exist $(MATH_INTDIR) mkdir $(MATH_INTDIR) + @if not exist $(AXIS2_SERVICES)\math mkdir $(AXIS2_SERVICES)\math + +{$(MATH_SRC)}.c{$(MATH_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(MATH_INTDIR)\ /c $< + +$(MATH_OBJS) : $(MATH_INTDIR) + +$(AXIS2_SERVICES)\math\math.dll : $(MATH_OBJS) + $(LD) $(LDFLAGS) $(MATH_OBJS) $(AXUTIL).lib $(AXIOM).lib \ + $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /DLL /OUT:$(AXIS2_SERVICES)\math\math.dll + -@$(_VC_MANIFEST_EMBED_DLL) + @copy $(AXIS2_SOURCE_DIR)\samples\server\math\services.xml $(AXIS2_SERVICES)\math + +axis2_services_math: $(AXIS2_SERVICES)\math\math.dll + +### mtom + +MTOM_SRC = $(AXIS2_SOURCE_DIR)\samples\server\mtom +MTOM_INTDIR = $(AXIS2_INTDIR_SAMPLES)\services\mtom + +MTOM_OBJS = $(MTOM_INTDIR)\*.obj + +$(MTOM_INTDIR) : + @if not exist $(MTOM_INTDIR) mkdir $(MTOM_INTDIR) + @if not exist $(AXIS2_SERVICES)\mtom mkdir $(AXIS2_SERVICES)\mtom + +{$(MTOM_SRC)}.c{$(MTOM_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(MTOM_INTDIR)\ /c $< + +$(MTOM_OBJS) : $(MTOM_INTDIR) + +$(AXIS2_SERVICES)\mtom\mtom.dll : $(MTOM_OBJS) + $(LD) $(LDFLAGS) $(MTOM_OBJS) $(AXUTIL).lib $(AXIOM).lib \ + $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /DLL /OUT:$(AXIS2_SERVICES)\mtom\mtom.dll + -@$(_VC_MANIFEST_EMBED_DLL) + @copy $(AXIS2_SOURCE_DIR)\samples\server\mtom\services.xml $(AXIS2_SERVICES)\mtom + +axis2_services_mtom: $(AXIS2_SERVICES)\mtom\mtom.dll + +MTOM_SERVICE_CALLBACK_SRC = $(AXIS2_SOURCE_DIR)\samples\server\mtom_callback +MTOM_SERVICE_CALLBACK_INTDIR = $(AXIS2_INTDIR_SAMPLES)\services\mtom_callback + +MTOM_SERVICE_CALLBACK_OBJS = $(MTOM_SERVICE_CALLBACK_INTDIR)\*.obj + +$(MTOM_SERVICE_CALLBACK_INTDIR) : + @if not exist $(MTOM_SERVICE_CALLBACK_INTDIR) mkdir $(MTOM_SERVICE_CALLBACK_INTDIR) + @if not exist $(AXIS2_SERVICES)\mtom_callback mkdir $(AXIS2_SERVICES)\mtom_callback + +{$(MTOM_SERVICE_CALLBACK_SRC)}.c{$(MTOM_SERVICE_CALLBACK_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(MTOM_SERVICE_CALLBACK_INTDIR)\ /c $< + +$(MTOM_SERVICE_CALLBACK_OBJS) : $(MTOM_SERVICE_CALLBACK_INTDIR) + +$(AXIS2_SERVICES)\mtom_callback\mtom_callback.dll : $(MTOM_SERVICE_CALLBACK_OBJS) + $(LD) $(LDFLAGS) $(MTOM_SERVICE_CALLBACK_OBJS) $(AXUTIL).lib $(AXIOM).lib \ + $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /DLL /OUT:$(AXIS2_SERVICES)\mtom_callback\mtom_callback.dll + -@$(_VC_MANIFEST_EMBED_DLL) + @copy $(AXIS2_SOURCE_DIR)\samples\server\mtom_callback\services.xml $(AXIS2_SERVICES)\mtom_callback + +axis2_services_mtom_callback: $(AXIS2_SERVICES)\mtom_callback\mtom_callback.dll + +#### Calculator + +CALCULATOR_SRC = $(AXIS2_SOURCE_DIR)\samples\server\\Calculator +CALCULATOR_INTDIR = $(AXIS2_INTDIR_SAMPLES)\services\\Calculator + +CALCULATOR_OBJS = $(CALCULATOR_INTDIR)\*.obj + +$(CALCULATOR_INTDIR) : + @if not exist $(CALCULATOR_INTDIR) mkdir $(CALCULATOR_INTDIR) + @if not exist $(AXIS2_SERVICES)\\Calculator mkdir $(AXIS2_SERVICES)\\Calculator + +{$(CALCULATOR_SRC)}.c{$(CALCULATOR_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(CALCULATOR_INTDIR)\ /c $< + +$(CALCULATOR_OBJS) : $(CALCULATOR_INTDIR) + +$(AXIS2_SERVICES)\Calculator\Calculator.dll : $(CALCULATOR_OBJS) + $(LD) $(LDFLAGS) $(CALCULATOR_OBJS) $(AXUTIL).lib $(AXIOM).lib \ + $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /DLL /OUT:$(AXIS2_SERVICES)\Calculator\Calculator.dll + -@$(_VC_MANIFEST_EMBED_DLL) + @copy $(AXIS2_SOURCE_DIR)\samples\server\Calculator\services.xml $(AXIS2_SERVICES)\Calculator + @copy $(AXIS2_SOURCE_DIR)\samples\server\Calculator\Calculator.wsdl $(AXIS2_SERVICES)\Calculator + +axis2_services_calculator : $(AXIS2_SERVICES)\Calculator\Calculator.dll + +### sgmath + +AXIS2_INTDIR_SGM=$(AXIS2_INTDIR_SAMPLES)\services\sgmath + +axis2_services_sg_math_int: + @if not exist $(AXIS2_SERVICES)\sg_math mkdir $(AXIS2_SERVICES)\sg_math + @if not exist $(AXIS2_INTDIR_SGM)\add mkdir $(AXIS2_INTDIR_SGM)\add + @if not exist $(AXIS2_INTDIR_SGM)\sub mkdir $(AXIS2_INTDIR_SGM)\sub + @if not exist $(AXIS2_INTDIR_SGM)\mul mkdir $(AXIS2_INTDIR_SGM)\mul + @if not exist $(AXIS2_INTDIR_SGM)\div mkdir $(AXIS2_INTDIR_SGM)\div + +$(AXIS2_SERVICES)\sg_math\add.dll : + $(CC) $(CFLAGS) /I$(AXIS2_SOURCE_DIR)\samples\server\sg_math \ + $(AXIS2_SOURCE_DIR)\samples\server\sg_math\add.c \ + $(AXIS2_SOURCE_DIR)\samples\server\sg_math\add_skeleton.c /Fo$(AXIS2_INTDIR_SGM)\add\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR_SGM)\add\*.obj $(AXUTIL).lib $(AXIOM).lib \ + $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib \ + /DLL /OUT:$(AXIS2_SERVICES)\sg_math\add.dll + -@$(_VC_MANIFEST_EMBED_DLL) + + +$(AXIS2_SERVICES)\sg_math\div.dll : + $(CC) $(CFLAGS) /I$(AXIS2_SOURCE_DIR)\samples\server\sg_math \ + $(AXIS2_SOURCE_DIR)\samples\server\sg_math\div.c \ + $(AXIS2_SOURCE_DIR)\samples\server\sg_math\div_skeleton.c /Fo$(AXIS2_INTDIR_SGM)\div\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR_SGM)\div\*.obj $(AXUTIL).lib $(AXIOM).lib \ + $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /DLL /OUT:$(AXIS2_SERVICES)\sg_math\div.dll + -@$(_VC_MANIFEST_EMBED_DLL) + +$(AXIS2_SERVICES)\sg_math\sub.dll : + $(CC) $(CFLAGS) /I$(AXIS2_SOURCE_DIR)\samples\server\sg_math \ + $(AXIS2_SOURCE_DIR)\samples\server\sg_math\sub.c \ + $(AXIS2_SOURCE_DIR)\samples\server\sg_math\sub_skeleton.c /Fo$(AXIS2_INTDIR_SGM)\sub\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR_SGM)\sub\*.obj $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib \ + $(LIBS) $(AXIS2_ENGINE).lib /DLL /OUT:$(AXIS2_SERVICES)\sg_math\sub.dll + -@$(_VC_MANIFEST_EMBED_DLL) + +$(AXIS2_SERVICES)\sg_math\mul.dll : + $(CC) $(CFLAGS) /I$(AXIS2_SOURCE_DIR)\samples\server\sg_math \ + $(AXIS2_SOURCE_DIR)\samples\server\sg_math\mul.c \ + $(AXIS2_SOURCE_DIR)\samples\server\sg_math\mul_skeleton.c /Fo$(AXIS2_INTDIR_SGM)\mul\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR_SGM)\mul\*.obj $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib \ + $(LIBS) $(AXIS2_ENGINE).lib $(AXIS2_HTTP_RECEIVER).lib \ + $(AXIS2_HTTP_SENDER).lib /DLL /OUT:$(AXIS2_SERVICES)\sg_math\mul.dll + -@$(_VC_MANIFEST_EMBED_DLL) + +axis2_services_sg_math : axis2_services_sg_math_int $(AXIS2_SERVICES)\sg_math\add.dll \ + $(AXIS2_SERVICES)\sg_math\div.dll $(AXIS2_SERVICES)\sg_math\sub.dll $(AXIS2_SERVICES)\sg_math\mul.dll + @copy $(AXIS2_SOURCE_DIR)\samples\server\sg_math\services.xml $(AXIS2_SERVICES)\sg_math + +###################### clients ################################# +AXIS2_INTDIR_CLI = $(AXIS2_INTDIR)\samples\clients +axis2_clients_intdir: + @if not exist $(AXIS2_BINDIR)\samples\bin mkdir $(AXIS2_BINDIR)\samples\bin + @if not exist $(AXIS2_INTDIR_CLI)\math mkdir $(AXIS2_INTDIR_CLI)\math + @if not exist $(AXIS2_INTDIR_CLI)\echo mkdir $(AXIS2_INTDIR_CLI)\echo + @if not exist $(AXIS2_INTDIR_CLI)\dyn_cli mkdir $(AXIS2_INTDIR_CLI)\dyn_cli + @if not exist $(AXIS2_INTDIR_CLI)\gslc mkdir $(AXIS2_INTDIR_CLI)\gslc + @if not exist $(AXIS2_INTDIR_CLI)\yahoo mkdir $(AXIS2_INTDIR_CLI)\yahoo + @if not exist $(AXIS2_INTDIR_CLI)\notify mkdir $(AXIS2_INTDIR_CLI)\notify + @if not exist $(AXIS2_INTDIR_CLI)\mtom mkdir $(AXIS2_INTDIR_CLI)\mtom + @if not exist $(AXIS2_INTDIR_CLI)\mtom_callback mkdir $(AXIS2_INTDIR_CLI)\mtom_callback + +AXIS2_SAMPLES_BIN = $(AXIS2_BINDIR)\samples\bin + +$(AXIS2_SAMPLES_BIN)\math.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\client\math\*.c /Fo$(AXIS2_INTDIR_CLI)\math\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR_CLI)\math\*.obj $(AXUTIL).lib $(AXIOM).lib \ + $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /OUT:$(AXIS2_SAMPLES_BIN)\math.exe + -@$(_VC_MANIFEST_EMBED_EXE) + +axis2_client_math: $(AXIS2_SAMPLES_BIN)\math.exe + +$(AXIS2_SAMPLES_BIN)\echo.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\client\echo\echo.c /Fo$(AXIS2_INTDIR_CLI)\echo\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR_CLI)\echo\*.obj $(AXUTIL).lib $(AXIOM).lib \ + $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /OUT:$(AXIS2_SAMPLES_BIN)\echo.exe + -@$(_VC_MANIFEST_EMBED_EXE) + +axis2_client_echo: $(AXIS2_SAMPLES_BIN)\echo.exe + +$(AXIS2_SAMPLES_BIN)\google.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\client\google\*.c /Fo$(AXIS2_INTDIR_CLI)\gslc\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR_CLI)\gslc\*.obj $(AXUTIL).lib $(AXIOM).lib \ + $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /OUT:$(AXIS2_SAMPLES_BIN)\google.exe + -@$(_VC_MANIFEST_EMBED_EXE) + +axis2_client_google_spell : $(AXIS2_SAMPLES_BIN)\google.exe + +$(AXIS2_SAMPLES_BIN)\yahoo.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\client\yahoo\*.c /Fo$(AXIS2_INTDIR_CLI)\yahoo\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR_CLI)\yahoo\*.obj $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) \ + $(AXIS2_ENGINE).lib /OUT:$(AXIS2_SAMPLES_BIN)\yahoo.exe + -@$(_VC_MANIFEST_EMBED_EXE) + +axis2_client_yahoo: $(AXIS2_SAMPLES_BIN)\yahoo.exe + +$(AXIS2_SAMPLES_BIN)\notify.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\client\notify\*.c /Fo$(AXIS2_INTDIR_CLI)\notify\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR_CLI)\notify\*.obj $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) \ + $(AXIS2_ENGINE).lib /OUT:$(AXIS2_SAMPLES_BIN)\notify.exe + -@$(_VC_MANIFEST_EMBED_EXE) + +axis2_client_notify: $(AXIS2_SAMPLES_BIN)\notify.exe + + +$(AXIS2_SAMPLES_BIN)\mtom.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\client\mtom\*.c /Fo$(AXIS2_INTDIR_CLI)\mtom\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR_CLI)\mtom\*.obj $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) \ + $(AXIS2_ENGINE).lib /OUT:$(AXIS2_SAMPLES_BIN)\mtom.exe + -@$(_VC_MANIFEST_EMBED_EXE) + + @if not exist $(AXIS2_SAMPLES_BIN)\resources mkdir $(AXIS2_SAMPLES_BIN)\resources + @xcopy /Y $(AXIS2_SOURCE_DIR)\samples\client\mtom\resources $(AXIS2_SAMPLES_BIN)\resources + +axis2_client_mtom: $(AXIS2_SAMPLES_BIN)\mtom.exe + +$(AXIS2_SAMPLES_BIN)\mtom_callback.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\client\mtom_callback\*.c /Fo$(AXIS2_INTDIR_CLI)\mtom_callback\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR_CLI)\mtom_callback\*.obj $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) \ + $(AXIS2_ENGINE).lib /OUT:$(AXIS2_SAMPLES_BIN)\mtom_callback.exe + -@$(_VC_MANIFEST_EMBED_EXE) + +axis2_client_mtom_callback: $(AXIS2_SAMPLES_BIN)\mtom_callback.exe + +axis2_client_userguide_int: + @if not exist $(AXIS2_INTDIR)\userguide\echo_blocking mkdir $(AXIS2_INTDIR)\userguide\echo_blocking + @if not exist $(AXIS2_INTDIR)\userguide\echo_non_blocking mkdir $(AXIS2_INTDIR)\userguide\echo_non_blocking + @if not exist $(AXIS2_INTDIR)\userguide\echo_blocking_addr mkdir $(AXIS2_INTDIR)\userguide\echo_blocking_addr + @if not exist $(AXIS2_INTDIR)\userguide\echo_rest mkdir $(AXIS2_INTDIR)\userguide\echo_rest + @if not exist $(AXIS2_INTDIR)\userguide\echo_blocking_dual mkdir $(AXIS2_INTDIR)\userguide\echo_blocking_dual + @if not exist $(AXIS2_INTDIR)\userguide\echo_non_blocking_dual mkdir $(AXIS2_INTDIR)\userguide\echo_non_blocking_dual + @if not exist $(AXIS2_INTDIR)\userguide\echo_blocking_soap11 mkdir $(AXIS2_INTDIR)\userguide\echo_blocking_soap11 + @if not exist $(AXIS2_INTDIR)\userguide\echo_blocking_auth mkdir $(AXIS2_INTDIR)\userguide\echo_blocking_auth + +$(AXIS2_SAMPLES_BIN)\echo_blocking.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_blocking.c \ + $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_util.c /Fo$(AXIS2_INTDIR)\userguide\echo_blocking\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR)\userguide\echo_blocking\*.obj $(AXUTIL).lib \ + $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /OUT:$(AXIS2_SAMPLES_BIN)\echo_blocking.exe + -@$(_VC_MANIFEST_EMBED_EXE) + +$(AXIS2_SAMPLES_BIN)\echo_non_blocking.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_non_blocking.c \ + $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_util.c /Fo$(AXIS2_INTDIR)\userguide\echo_non_blocking\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR)\userguide\echo_non_blocking\*.obj $(AXUTIL).lib \ + $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib \ + /OUT:$(AXIS2_SAMPLES_BIN)\echo_non_blocking.exe + -@$(_VC_MANIFEST_EMBED_EXE) + +$(AXIS2_SAMPLES_BIN)\echo_blocking_addr.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_blocking_addr.c \ + $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_util.c /Fo$(AXIS2_INTDIR)\userguide\echo_blocking_addr\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR)\userguide\echo_blocking_addr\*.obj $(AXUTIL).lib \ + $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib \ + /OUT:$(AXIS2_SAMPLES_BIN)\echo_blocking_addr.exe + -@$(_VC_MANIFEST_EMBED_EXE) + +$(AXIS2_SAMPLES_BIN)\echo_rest.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_rest.c \ + $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_util.c /Fo$(AXIS2_INTDIR)\userguide\echo_rest\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR)\userguide\echo_rest\*.obj $(AXUTIL).lib \ + $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib \ + /OUT:$(AXIS2_SAMPLES_BIN)\echo_rest.exe + -@$(_VC_MANIFEST_EMBED_EXE) + +$(AXIS2_SAMPLES_BIN)\echo_blocking_dual.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_blocking_dual.c \ + $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_util.c /Fo$(AXIS2_INTDIR)\userguide\echo_blocking_dual\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR)\userguide\echo_blocking_dual\*.obj $(AXUTIL).lib \ + $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /OUT:$(AXIS2_SAMPLES_BIN)\echo_blocking_dual.exe + -@$(_VC_MANIFEST_EMBED_EXE) + +$(AXIS2_SAMPLES_BIN)\echo_non_blocking_dual.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_non_blocking_dual.c \ + $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_util.c /Fo$(AXIS2_INTDIR)\userguide\echo_non_blocking_dual\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR)\userguide\echo_non_blocking_dual\*.obj $(AXUTIL).lib \ + $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib \ + /OUT:$(AXIS2_SAMPLES_BIN)\echo_non_blocking_dual.exe + -@$(_VC_MANIFEST_EMBED_EXE) + +$(AXIS2_SAMPLES_BIN)\echo_blocking_soap11.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_blocking_soap11.c \ + $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_util.c /Fo$(AXIS2_INTDIR)\userguide\echo_blocking_soap11\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR)\userguide\echo_blocking_soap11\*.obj $(AXUTIL).lib \ + $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) \ + $(AXIS2_ENGINE).lib /OUT:$(AXIS2_SAMPLES_BIN)\echo_blocking_soap11.exe + -@$(_VC_MANIFEST_EMBED_EXE) + + +$(AXIS2_SAMPLES_BIN)\echo_blocking_auth.exe : + $(CC) $(CFLAGS) $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_blocking_auth.c \ + $(AXIS2_SOURCE_DIR)\samples\user_guide\clients\echo_util.c /Fo$(AXIS2_INTDIR)\userguide\echo_blocking_auth\ /c + $(LD) $(LDFLAGS) $(AXIS2_INTDIR)\userguide\echo_blocking_auth\*.obj $(AXUTIL).lib \ + $(AXIOM).lib $(AXIS2_PARSER).lib $(LIBS) \ + $(AXIS2_ENGINE).lib /OUT:$(AXIS2_SAMPLES_BIN)\echo_blocking_auth.exe + -@$(_VC_MANIFEST_EMBED_EXE) + +################ callbacks ################### +AXIS2_INTDIR_CALLBACK = $(AXIS2_INTDIR)\samples\callback +MTOM_SENDING_CALLBACK_SRC = $(AXIS2_SOURCE_DIR)\samples\mtom_sending_callback +MTOM_SENDING_CALLBACK_INTDIR = $(AXIS2_INTDIR_CALLBACK)\mtom_sending_callback +MTOM_SENDING_CALLBACK_OBJS = $(MTOM_SENDING_CALLBACK_INTDIR)\*.obj + +AXIS2_SAMPLES_LIB = $(AXIS2_BINDIR)\samples\lib + +$(MTOM_SENDING_CALLBACK_INTDIR) : + @if not exist $(AXIS2_INTDIR_CALLBACK) mkdir $(AXIS2_INTDIR_CALLBACK) + @if not exist $(MTOM_SENDING_CALLBACK_INTDIR) mkdir $(MTOM_SENDING_CALLBACK_INTDIR) + @if not exist $(AXIS2_SAMPLES_LIB)\mtom_sending_callback mkdir $(AXIS2_SAMPLES_LIB)\mtom_sending_callback + +{$(MTOM_SENDING_CALLBACK_SRC)}.c{$(MTOM_SENDING_CALLBACK_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(MTOM_SENDING_CALLBACK_INTDIR)\ /c $< + +$(MTOM_SENDING_CALLBACK_OBJS) : $(MTOM_SENDING_CALLBACK_INTDIR) + +$(AXIS2_SAMPLES_LIB)\mtom_sending_callback\mtom_sending_callback.dll : $(MTOM_SENDING_CALLBACK_OBJS) + $(LD) $(LDFLAGS) $(MTOM_SENDING_CALLBACK_OBJS) $(AXUTIL).lib $(AXIOM).lib \ + $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /DLL /OUT:$(AXIS2_SAMPLES_LIB)\mtom_sending_callback\mtom_sending_callback.dll + -@$(_VC_MANIFEST_EMBED_DLL) + +axis2_mtom_sending_callback: $(AXIS2_SAMPLES_LIB)\mtom_sending_callback\mtom_sending_callback.dll + +MTOM_CACHING_CALLBACK_SRC = $(AXIS2_SOURCE_DIR)\samples\mtom_caching_callback +MTOM_CACHING_CALLBACK_INTDIR = $(AXIS2_INTDIR_CALLBACK)\mtom_caching_callback +MTOM_CACHING_CALLBACK_OBJS = $(MTOM_CACHING_CALLBACK_INTDIR)\*.obj + +$(MTOM_CACHING_CALLBACK_INTDIR) : + @if not exist $(AXIS2_INTDIR_CALLBACK) mkdir $(AXIS2_INTDIR_CALLBACK) + @if not exist $(MTOM_CACHING_CALLBACK_INTDIR) mkdir $(MTOM_CACHING_CALLBACK_INTDIR) + @if not exist $(AXIS2_SAMPLES_LIB)\mtom_caching_callback mkdir $(AXIS2_SAMPLES_LIB)\mtom_caching_callback + +{$(MTOM_CACHING_CALLBACK_SRC)}.c{$(MTOM_CACHING_CALLBACK_INTDIR)}.obj :: + $(CC) $(CFLAGS) /Fo$(MTOM_CACHING_CALLBACK_INTDIR)\ /c $< + +$(MTOM_CACHING_CALLBACK_OBJS) : $(MTOM_CACHING_CALLBACK_INTDIR) + +$(AXIS2_SAMPLES_LIB)\mtom_caching_callback\mtom_caching_callback.dll : $(MTOM_CACHING_CALLBACK_OBJS) + $(LD) $(LDFLAGS) $(MTOM_CACHING_CALLBACK_OBJS) $(AXUTIL).lib $(AXIOM).lib \ + $(AXIS2_PARSER).lib $(LIBS) $(AXIS2_ENGINE).lib /DLL /OUT:$(AXIS2_SAMPLES_LIB)\mtom_caching_callback\mtom_caching_callback.dll + -@$(_VC_MANIFEST_EMBED_DLL) + +axis2_mtom_caching_callback: $(AXIS2_SAMPLES_LIB)\mtom_caching_callback\mtom_caching_callback.dll + + +axis2_client_userguide : axis2_client_userguide_int $(AXIS2_SAMPLES_BIN)\echo_blocking_soap11.exe \ + $(AXIS2_SAMPLES_BIN)\echo_non_blocking_dual.exe $(AXIS2_SAMPLES_BIN)\echo_blocking.exe \ + $(AXIS2_SAMPLES_BIN)\echo_blocking_dual.exe $(AXIS2_SAMPLES_BIN)\echo_rest.exe \ + $(AXIS2_SAMPLES_BIN)\echo_blocking_addr.exe $(AXIS2_SAMPLES_BIN)\echo_non_blocking.exe \ + $(AXIS2_SAMPLES_BIN)\echo_blocking_auth.exe + +clean_manifest: + @del /s $(AXIS2_BINDIR)\*.manifest + + +copy_extra: + @copy $(AXIS2_SOURCE_DIR)\INSTALL $(AXIS2_BINDIR) + @copy $(AXIS2_SOURCE_DIR)\LICENSE $(AXIS2_BINDIR) + @copy $(AXIS2_SOURCE_DIR)\CREDITS $(AXIS2_BINDIR) + @copy $(AXIS2_SOURCE_DIR)\README $(AXIS2_BINDIR) + @copy $(AXIS2_SOURCE_DIR)\AUTHORS $(AXIS2_BINDIR) + @copy $(AXIS2_SOURCE_DIR)\NEWS $(AXIS2_BINDIR) + @copy $(AXIS2_SOURCE_DIR)\NOTICE $(AXIS2_BINDIR) + @copy $(AXIS2_SOURCE_DIR)\ChangeLog $(AXIS2_BINDIR) + @if exist $(AXIS2_SOURCE_DIR)\docs xcopy /E /I /Y $(AXIS2_SOURCE_DIR)\docs $(AXIS2_BINDIR)\docs + +copy_samples: + @if not exist $(AXIS2_BINDIR)\samples mkdir $(AXIS2_BINDIR)\samples + @if not exist $(AXIS2_BINDIR)\samples\src mkdir $(AXIS2_BINDIR)\samples\src + @xcopy /E /I /Y $(AXIS2_SOURCE_DIR)\samples\client $(AXIS2_BINDIR)\samples\src\client + @xcopy /E /I /Y $(AXIS2_SOURCE_DIR)\samples\user_guide $(AXIS2_BINDIR)\samples\src\user_guide + @xcopy /E /I /Y $(AXIS2_SOURCE_DIR)\samples\codegen $(AXIS2_BINDIR)\samples\src\codegen + @xcopy /E /I /Y $(AXIS2_SOURCE_DIR)\samples\server $(AXIS2_BINDIR)\samples\src\server + @xcopy /E /I /Y $(AXIS2_SOURCE_DIR)\samples\mtom_caching_callback $(AXIS2_BINDIR)\samples\src\mtom_caching_callback + @xcopy /E /I /Y $(AXIS2_SOURCE_DIR)\samples\mtom_sending_callback $(AXIS2_BINDIR)\samples\src\mtom_sending_callback + @cd $(AXIS2_BINDIR)\samples\src + @del /s /q *.am + @cd .\..\..\..\win32 + +copy_include: + @xcopy /E /I /Y $(AXIS2_SOURCE_DIR)\include $(AXIS2_BINDIR)\include + @xcopy /E /I /Y $(AXIS2_SOURCE_DIR)\axiom\include $(AXIS2_BINDIR)\include + @xcopy /E /I /Y $(AXIS2_SOURCE_DIR)\util\include $(AXIS2_BINDIR)\include + @xcopy /E /I /Y $(AXIS2_SOURCE_DIR)\neethi\include $(AXIS2_BINDIR)\include + @if exist $(AXIS2_BINDIR)\include\Makefile.am del $(AXIS2_BINDIR)\include\Makefile.am + + +copy_vc_projects: + @if not exist $(AXIS2_BINDIR)\ides mkdir $(AXIS2_BINDIR)\ides + @if not exist $(AXIS2_BINDIR)\ides\vc\samples mkdir $(AXIS2_BINDIR)\ides\vc\samples + @xcopy /E /I /Y $(AXIS2_SOURCE_DIR)\ides\vc\samples $(AXIS2_BINDIR)\ides\vc\samples + +copy_wsdl2c: + if not exist $(AXIS2_BINDIR)\bin\tools\wsdl2c mkdir $(AXIS2_BINDIR)\bin\tools\wsdl2c + @copy $(AXIS2_SOURCE_DIR)\tools\codegen\javatool\README $(AXIS2_BINDIR)\bin\tools\wsdl2c + @copy $(AXIS2_SOURCE_DIR)\tools\codegen\javatool\WSDL2C.bat $(AXIS2_BINDIR)\bin\tools\wsdl2c + @copy $(AXIS2_SOURCE_DIR)\tools\codegen\javatool\WSDL2C.sh $(AXIS2_BINDIR)\bin\tools\wsdl2c + +mv_dist: + cd $(AXIS2_BINDIR) + cd .. + @if exist $(AXIS2_RELEASE_DIR) rmdir /S /Q $(AXIS2_RELEASE_DIR) + @xcopy /Y /E /I deploy $(AXIS2_RELEASE_DIR) + + +all_services: axis2_services_echo axis2_services_math axis2_services_notify axis2_services_sg_math axis2_services_mtom axis2_services_mtom_callback axis2_services_calculator + +all_clients: axis2_clients_intdir axis2_client_echo axis2_client_math axis2_client_google_spell axis2_client_yahoo axis2_client_notify axis2_client_mtom axis2_client_mtom_callback axis2_client_userguide + +all_callback: axis2_mtom_sending_callback axis2_mtom_caching_callback +axis2_samples: axis2_mod_log all_services all_clients all_callback + +axis2_server_modules: axis2_apache_module axis2_IIS_module + +################ tools ################### +# tcpmon +TCPMON_SRC = $(AXIS2_SOURCE_DIR)\tools\tcpmon\src +TCPMON_INTDIR = $(AXIS2_INTDIR)\tools\tcpmon + +TCPMON_OBJS = $(TCPMON_INTDIR)\*.obj + +$(TCPMON_INTDIR) : + @if not exist $(TCPMON_INTDIR) mkdir $(TCPMON_INTDIR) + +{$(TCPMON_SRC)}.c{$(TCPMON_INTDIR)}.obj :: + $(CC) $(CFLAGS) /I $(TCPMON_INTDIR)\include /Fo$(TCPMON_INTDIR)\ /c $< + +$(TCPMON_OBJS) : $(TCPMON_INTDIR) + +$(AXIS2_TOOLS)\tcpmon.exe : $(TCPMON_OBJS) + @if not exist $(AXIS2_TOOLS) mkdir $(AXIS2_TOOLS) + $(LD) $(LDFLAGS) $(TCPMON_OBJS) $(AXUTIL).lib $(AXIOM).lib $(AXIS2_PARSER).lib /OUT:$(AXIS2_TOOLS)\tcpmon.exe + -@$(_VC_MANIFEST_EMBED_EXE) + +tcpmon: $(AXIS2_TOOLS)\tcpmon.exe + +######################################### +#Copy axis2 xml +copy_axis2_xml: + @copy $(AXIS2_SOURCE_DIR)\samples\server\axis2.xml $(AXIS2_BINDIR)\ + +######################################### + +build: deploy axis2_core axis2_samples copy_include + +!if "$(WITH_TCP)" == "1" +all: build axis2_tcp +!else +all: build +!endif + +############################################################################################## + +install: all copy_extra copy_wsdl2c + +dist: install axis2_apache_module axis2_IIS_module axis2_cgi tcpmon copy_samples copy_vc_projects clean_manifest mv_dist + +dist_as_lib : deploy axis2_core_without_server copy_axis2_xml copy_include clean_manifest mv_dist + diff --git a/clean.sh b/clean.sh new file mode 100755 index 0000000..80c3a05 --- /dev/null +++ b/clean.sh @@ -0,0 +1,7 @@ +#!/bin/bash +cd samples +make distclean +cd .. +make distclean +rm -rf deploy + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..8393e3d --- /dev/null +++ b/configure.ac @@ -0,0 +1,510 @@ +dnl run autogen.sh to generate the configure script. +AC_PREREQ(2.59) + +AC_INIT(axis2c-src, 1.6.0) +AC_CANONICAL_SYSTEM +AM_CONFIG_HEADER(config.h) +AM_INIT_AUTOMAKE([tar-ustar]) +AC_PREFIX_DEFAULT(/usr/local/axis2c) + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_CPP +AC_PROG_LIBTOOL +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET + + +dnl check for flavours of varargs macros (test from GLib) +AC_MSG_CHECKING(for ISO C99 varargs macros in C) +AC_TRY_COMPILE([],[ +int a(int p1, int p2, int p3); +#define call_a(...) a(1,__VA_ARGS__) +call_a(2,3); +],axis2c_have_iso_c_varargs=yes,axis2c_have_iso_c_varargs=no) +AC_MSG_RESULT($axis2c_have_iso_c_varargs) + +AC_MSG_CHECKING(for GNUC varargs macros) +AC_TRY_COMPILE([],[ +int a(int p1, int p2, int p3); +#define call_a(params...) a(1,params) +call_a(2,3); +],axis2c_have_gnuc_varargs=yes,axis2c_have_gnuc_varargs=no) +AC_MSG_RESULT($axis2c_have_gnuc_varargs) + +dnl Output varargs tests +if test x$axis2c_have_iso_c_varargs = xyes; then + AC_DEFINE(HAVE_ISO_VARARGS,1,[Have ISO C99 varargs macros]) +fi +if test x$axis2c_have_gnuc_varargs = xyes; then + AC_DEFINE(HAVE_GNUC_VARARGS,1,[Have GNU-style varargs macros]) +fi + +dnl Checks for libraries. +AC_CHECK_LIB(dl, dlopen) +AC_CHECK_LIB(z, inflate) +AC_CHECK_LIB(socket, socket) + +if test -d $srcdir/util; then + AC_CONFIG_SUBDIRS(util) +fi + +if test -d $srcdir/axiom; then + AC_CONFIG_SUBDIRS(axiom) +fi + +if test -d $srcdir/neethi; then + AC_CONFIG_SUBDIRS(neethi) +fi + +#CFLAGS="$CFLAGS -ansi -Wall -D_LARGEFILE64_SOURCE -Wno-implicit-function-declaration" +CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE" +CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" +if test "$GCC" = "yes"; then + CFLAGS="$CFLAGS -ansi -Wall -Werror -Wno-implicit-function-declaration -g -D_GNU_SOURCE" +# CFLAGS="$CFLAGS -ansi -Wall -Wno-implicit-function-declaration" +fi + +dnl Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([stdio.h stdlib.h string.h]) +AC_CHECK_HEADERS([sys/socket.h]) +AC_CHECK_HEADERS([net/if.h], [], [], +[#include +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_SYS_SOCKET_H +# include +#endif +]) +AC_CHECK_HEADERS([linux/if.h],[],[], +[ +#if HAVE_SYS_SOCKET_H +# include +#endif +]) +AC_CHECK_HEADERS([net/if_types.h]) +AC_CHECK_HEADERS([net/if_dl.h]) + +dnl This is a check to see if we are running MacOS X +dnl It may be better to do a Darwin check +AC_CHECK_HEADERS([sys/appleapiopts.h]) +dnl Checks for typedefs, structures, and compiler characteristics. + +dnl Checks for library functions. +dnl AC_FUNC_MALLOC +dnl AC_FUNC_REALLOC +#AC_CHECK_FUNCS([memmove]) + +AC_MSG_CHECKING(whether to use archive) +AC_ARG_WITH(archive, +[ --with-archive[=PATH] Find the zlib header files in 'PATH'. + If you omit the '=PATH' part completely, the configure script will search + '/usr/include/' for zlib headers.], +[ case "$withval" in + no) + AC_MSG_RESULT(no) + ZLIBBUILD="" + zliblibs="" + ;; + *) + AC_MSG_RESULT(yes) + zliblibs="minizip/libaxis2_minizip.la" + CFLAGS="$CFLAGS -DAXIS2_ARCHIVE_ENABLED" + CPPFLAGS="$CPPFLAGS -DAXIS2_ARCHIVE_ENABLED" + if test -d $withval; then + zlibinc="-I$withval" + elif test -d '/usr/include'; then + zlibinc="-I/usr/include" + else + AC_MSG_ERROR(could not find zlib stop) + fi + ZLIBBUILD="minizip" + ;; + esac ], + AC_MSG_RESULT(no) +) + +AC_MSG_CHECKING(whether to build xpath) +AC_ARG_ENABLE(xpath, [ --enable-xpath build xpath. default=yes], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + XPATH_DIR="xpath" + + ;; + esac ], + AC_MSG_RESULT(yes) + XPATH_DIR="xpath" +) + +GUTHTHILA_LIBS= +GUTHTHILA_DIR= + +AC_MSG_CHECKING(whether to build guththila xml parser library) +AC_ARG_ENABLE(guththila, [ --enable-guththila + build Guththila XML parser library wrapper (default=yes)], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + guththilla_enabled=no + ;; + *) + AC_MSG_RESULT(yes) + guththilla_enabled=yes + ;; + esac ], [ + AC_MSG_RESULT(yes) + guththilla_enabled=yes +]) + +AS_IF([test $guththilla_enabled = yes], [ + CFLAGS="$CFLAGS -DAXIS2_GUTHTHILA_ENABLED" + CPPFLAGS="$CPPFLAGS -DAXIS2_GUTHTHILA_ENABLED" + WRAPPER_DIR="guththila" + AC_CONFIG_SUBDIRS(guththila) + GUTHTHILA_LIBS="/guththila/src/" + GUTHTHILA_DIR="guththila" +]) +AS_UNSET(guththilla_enabled) + +AC_MSG_CHECKING(whether to build libxml2 xml parser library) +AC_ARG_ENABLE(libxml2, [ --enable-libxml2 + build Libxml2 XML parser library wrapper (default=no)], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + WRAPPER_DIR="" + ;; + *) + AC_MSG_RESULT(yes) + WRAPPER_DIR="libxml2" + PKG_CHECK_MODULES(LIBXML2, libxml-2.0) + CFLAGS="$CFLAGS -DAXIS2_LIBXML2_ENABLED" + CPPFLAGS="$CPPFLAGS $PARSER_CFLAGS -DAXIS2_LIBXML2_ENABLED" + LDFLAGS="$LDFLAGS $PARSER_LIBS" + ;; + esac ], + AC_MSG_RESULT(no) +) + + +AC_MSG_CHECKING(whether to build tcp transport) +AC_ARG_ENABLE(tcp, [ --enable-tcp + build tcp transport (default=no)], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + TCP_DIR="tcp" + + ;; + esac ], + AC_MSG_RESULT(no) +) + +AC_MSG_CHECKING(whether to use cgi transport) +AC_ARG_ENABLE(cgi, [ --enable-cgi + build cgi transport (default=no)], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + CGI_DIR="CGI" + + ;; + esac ], + AC_MSG_RESULT(no) +) + +AC_MSG_CHECKING(whether to build AMQP transport) +AC_ARG_WITH(qpid, +[ --with-qpid[=PATH] 'PATH' specifies the location where the Qpid is installed into. + If this option is specified, AMQP transport would be built. + If you omit the '=PATH' part completely, the configure script will take + '/usr/local' as the Qpid home.], +[ case "$withval" in + no) + AC_MSG_RESULT(no) + AMQP_DIR="" + ;; + *) + AC_MSG_RESULT(yes) + if test -d $withval; then + qpidhome="$withval" + elif test -d '/usr/local/include/qpid'; then + qpidhome="/usr/local" + else + AC_MSG_ERROR(*** Could not Find Qpid in /usr/local ...) + fi + AMQP_DIR="amqp" + ;; + esac ], + AC_MSG_RESULT(no) +) + +AC_MSG_CHECKING(whether to use apache2 as server transport) +AC_ARG_WITH(apache2, +[ --with-apache2[=PATH] Find the Apache2 HTTP Web server header files in 'PATH'. + If this option is given, the Apache2 httpd module would be built. + 'PATH' should point to Apache2 httpd include files location. + If you omit the '=PATH' part completely, the configure script will search + '/usr/include/apache2' for Apache2 headers.], +[ case "$withval" in + no) + AC_MSG_RESULT(no) + APACHE2BUILD="" + ;; + *) + AC_MSG_RESULT(yes) + dnl Find apache2 include dir in the path pointed by APACHE2_HOME env variable + if test -d $withval; then + apache2inc="-I$withval" + dnl else find the apache2 include dir in /usr/local/apache2 + elif test -d '/usr/include/apache2'; then + apache2inc="-I/usr/include/apache2" + else + AC_MSG_ERROR(could not find apache2. stop) + fi + APACHE2BUILD="apache2" + ;; + esac ], + AC_MSG_RESULT(no) +) + +AC_MSG_CHECKING(whether to use apr. Note that if you build with apache2 you might need to do this.) +AC_ARG_WITH(apr, +[ --with-apr[=PATH] Find the APR header files in 'PATH'. + Some Apache2 distributions, specially development versions, install APR + (Apache Portable Run-time) include files in a separate location. + In that case, to build Apache2 httpd module, this option is also required. + 'PATH' should point to APR include files location. + If you omit the '=PATH' part completely, the configure script will search + '/usr/include/apr-0' for APR headers.], +[ case "$withval" in + no) + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + dnl Find apr include dir in the path + if test -d $withval; then + aprinc="-I$withval" + dnl else find the apache2 include dir in /usr/local/apache2 + elif test -d '/usr/include/apr-0'; then + aprinc="-I/usr/include/apr-0" + else + AC_MSG_ERROR(could not find apr. stop) + fi + ;; + esac ], + AC_MSG_RESULT(no) +) + +AC_MSG_CHECKING(whether to build tests) +AC_ARG_ENABLE(tests, [ --enable-tests + build tests (default=no)], +[ case "${enableval}" in + yes) + AC_MSG_RESULT(yes) + TESTDIR="test" + ;; + *) + AC_MSG_RESULT(no) + TESTDIR="" + + ;; + esac ], + AC_MSG_RESULT(no) + TESTDIR="" +) + + +AC_MSG_CHECKING(whether to enable trace) +AC_ARG_ENABLE(trace, [ --enable-trace + enable logging trace messages useful when debugging (default=no)], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + CFLAGS="$CFLAGS" + CPPFLAGS="$CPPFLAGS" + ;; + *) + AC_MSG_RESULT(yes) + CFLAGS="$CFLAGS -DAXIS2_TRACE" + CPPFLAGS="$CPPFLAGS -DAXIS2_TRACE" + ;; + esac ], + AC_MSG_RESULT(no) + CFLAGS="$CFLAGS" + CPPFLAGS="$CPPFLAGS" +) + +AC_MSG_CHECKING(whether to enable multi threading) +AC_ARG_ENABLE(multi-thread, [ --enable-multi-thread + enable multi threaded axis2 worker (default=yes)], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + CFLAGS="$CFLAGS" + CPPFLAGS="$CPPFLAGS" + ;; + *) + AC_MSG_RESULT(yes) + CFLAGS="$CFLAGS -DAXIS2_SVR_MULTI_THREADED" + CPPFLAGS="$CPPFLAGS -DAXIS2_SVR_MULTI_THREADED" + ;; + esac ],[ + AC_MSG_RESULT(yes) + CFLAGS="$CFLAGS -DAXIS2_SVR_MULTI_THREADED" + CPPFLAGS="$CPPFLAGS -DAXIS2_SVR_MULTI_THREADED"] +) + +AC_MSG_CHECKING(whether to use openssl) +AC_ARG_ENABLE(openssl, [ --enable-openssl + enable OpenSSL support in client transport (default=no)], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + CFLAGS="$CFLAGS" + CPPFLAGS="$CPPFLAGS" + ssl_enabled=false + ;; + *) + AC_MSG_RESULT(yes) + CFLAGS="$CFLAGS -DAXIS2_SSL_ENABLED" + CPPFLAGS="$CPPFLAGS -DAXIS2_SSL_ENABLED" + ssl_enabled=true + ;; + esac ], + AC_MSG_RESULT(no) + CFLAGS="$CFLAGS" + CPPFLAGS="$CPPFLAGS" +) + +AC_MSG_CHECKING(whether to use libcurl) +AC_ARG_ENABLE(libcurl, [ --enable-libcurl + enable libcurl based client transport (default=no)], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + CFLAGS="$CFLAGS" + CPPFLAGS="$CPPFLAGS" + libcurl_enabled=false + ;; + *) + AC_MSG_RESULT(yes) + CFLAGS="$CFLAGS -DAXIS2_LIBCURL_ENABLED" + CPPFLAGS="$CPPFLAGS -DAXIS2_LIBCURL_ENABLED" + libcurl_enabled=true + ;; + esac ], + AC_MSG_RESULT(no) + CFLAGS="$CFLAGS" + CPPFLAGS="$CPPFLAGS" +) + + +APACHE2INC=$apache2inc +IKSEMELINC=$iksemelinc +APRINC=$aprinc +VERSION_NO="6:0:6" +QPID_HOME=$qpidhome + +AC_SUBST(VERSION_NO) +AC_SUBST(APACHE2INC) +AC_SUBST(APRINC) +AC_SUBST(DICLIENT_DIR) +AC_SUBST(TESTDIR) +AC_SUBST(SAMPLES) +AC_SUBST(APACHE2BUILD) +AC_SUBST(WRAPPER_DIR) +AC_SUBST(TCP_DIR) +AC_SUBST(CGI_DIR) +AC_SUBST(AMQP_DIR) +AC_SUBST(QPID_HOME) +AC_SUBST(GUTHTHILA_DIR) +AC_SUBST(GUTHTHILA_LIBS) +AC_SUBST(ZLIBBUILD) +AM_CONDITIONAL(AXIS2_SSL_ENABLED, test x$ssl_enabled = xtrue) +AM_CONDITIONAL(AXIS2_LIBCURL_ENABLED, test x$libcurl_enabled = xtrue) + +export WRAPPER_DIR +export prefix + +AC_CONFIG_FILES([Makefile \ + src/Makefile \ + src/core/Makefile \ + src/core/description/Makefile \ + src/core/context/Makefile \ + src/core/engine/Makefile \ + src/core/addr/Makefile \ + src/core/phaseresolver/Makefile \ + src/core/transport/Makefile \ + src/core/transport/http/Makefile \ + src/core/transport/http/common/Makefile \ + src/core/transport/http/util/Makefile \ + src/core/transport/http/sender/Makefile \ + src/core/transport/http/sender/ssl/Makefile \ + src/core/transport/http/sender/libcurl/Makefile \ + src/core/transport/http/receiver/Makefile \ + src/core/transport/http/server/simple_axis2_server/Makefile \ + src/core/transport/http/server/Makefile \ + src/core/transport/http/server/apache2/Makefile \ + src/core/transport/tcp/Makefile \ + src/core/transport/tcp/sender/Makefile \ + src/core/transport/tcp/receiver/Makefile \ + src/core/transport/tcp/server/Makefile \ + src/core/transport/tcp/server/simple_tcp_server/Makefile \ + src/core/transport/amqp/Makefile \ + src/core/transport/amqp/util/Makefile \ + src/core/transport/amqp/receiver/Makefile \ + src/core/transport/amqp/receiver/qpid_receiver/Makefile \ + src/core/transport/amqp/receiver/qpid_receiver/request_processor/Makefile \ + src/core/transport/amqp/sender/Makefile \ + src/core/transport/amqp/sender/qpid_sender/Makefile \ + src/core/transport/amqp/server/Makefile \ + src/core/transport/amqp/server/axis2_amqp_server/Makefile \ + src/core/transport/http/server/CGI/Makefile \ + src/core/deployment/Makefile \ + src/core/clientapi/Makefile \ + src/core/receivers/Makefile \ + src/core/util/Makefile \ + src/modules/Makefile \ + src/modules/mod_addr/Makefile \ + src/modules/mod_log/Makefile \ + test/Makefile \ + test/core/Makefile \ + test/core/description/Makefile \ + test/core/clientapi/Makefile \ + test/core/deployment/Makefile \ + test/core/context/Makefile \ + test/core/engine/Makefile \ + test/core/addr/Makefile \ + test/core/transport/Makefile\ + test/core/transport/http/Makefile \ + tools/tcpmon/Makefile \ + tools/tcpmon/src/Makefile \ + tools/md5/Makefile \ + tools/md5/src/Makefile \ + ides/Makefile \ + include/Makefile \ + axis2c.pc + ]) + +AC_OUTPUT diff --git a/dist.sh b/dist.sh new file mode 100755 index 0000000..ca84745 --- /dev/null +++ b/dist.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +rm -rf xdocs/api/html +maven site +cd xdocs/api +doxygen doxygenconf +cd ../.. +cp -r xdocs/api/html target/docs/api/ +cp xdocs/docs/mod_log/module.xml target/docs/docs/mod_log +rm target/docs/README +rm target/docs/dependencies.html +rm target/docs/downloads.html +rm target/xdocs/mail-lists.html +cp -r target/docs axis2c-src-1.6.0 + +cd samples +make dist +tar -xf axis2c-src-1.6.0.tar.gz +mv axis2c-src-1.6.0 ../axis2c-src-1.6.0 +cd ../axis2c-src-1.6.0 +mv axis2c-src-1.6.0 samples + +for i in `find . -name "*.la"` +do + rm $i +done + +for i in `find . -name "*.a"` +do + rm $i +done + +for i in `find . -type d -name ".svn"` +do + rm -rf $i +done diff --git a/docs/README b/docs/README new file mode 100644 index 0000000..b8e0609 --- /dev/null +++ b/docs/README @@ -0,0 +1 @@ +If you're using a svn checkout docs are inside the xdocs directory. diff --git a/guththila/AUTHORS b/guththila/AUTHORS new file mode 100644 index 0000000..e69de29 diff --git a/guththila/COPYING b/guththila/COPYING new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/guththila/COPYING @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/guththila/ChangeLog b/guththila/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/guththila/INSTALL b/guththila/INSTALL new file mode 100644 index 0000000..1cdc320 --- /dev/null +++ b/guththila/INSTALL @@ -0,0 +1,12 @@ +Getting Guththila source working on Linux +============================================= +Build the source +This can be done using the following command sequence: + ./configure + make + make install + use './configure --help' for options + +NOTE: If you don't provide a --prefix configure option, it will by default +install into /usr/local/guththila directory. + diff --git a/guththila/LICENSE b/guththila/LICENSE new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/guththila/LICENSE @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/guththila/Makefile.am b/guththila/Makefile.am new file mode 100644 index 0000000..b94c0c2 --- /dev/null +++ b/guththila/Makefile.am @@ -0,0 +1,12 @@ +datadir=$(prefix) +SUBDIRS = src +includedir=$(prefix)/include/axis2-1.6.0/ +include_HEADERS=$(top_builddir)/include/*.h +data_DATA= INSTALL README AUTHORS NEWS LICENSE COPYING +#EXTRA_DIST = build.sh autogen.sh CREDITS LICENSE +dist-hook: + rm -rf `find $(distdir)/ -type d -name .svn` + rm -rf `find $(distdir)/ -type d -name .deps` + +EXTRA_DIST=LICENSE + diff --git a/guththila/NEWS b/guththila/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/guththila/README b/guththila/README new file mode 100644 index 0000000..8c40b8b --- /dev/null +++ b/guththila/README @@ -0,0 +1,41 @@ + + Apache Axis2/C Guththila + ======================== + + What Is It? + ----------- + + Guththila is Streaming XML Parser for the Apache Axis2/C. + + The Latest Version + ------------------ + + You can get the latest svn checkout of Apache Axis2/C Guththila module from + + https://svn.apache.org/repos/asf/webservices/axis2/trunk/c/guththila + + Installation + ------------ + + Please see the file called INSTALL. + + Licensing + --------- + + Please see the file called LICENSE. + + Contacts + -------- + + o If you want freely available support for using Apache Axis2/C Guththila please + join the Apache Axis2/C user community by subscribing to users mailing + list, axis-c-user@ws.apache.org' as described at + http://ws.apache.org/axis2/c/mail-lists.html + + o If you have a bug report for Apache Axis2/C Guththila please log-in and create a JIRA issue + at http://issues.apache.org/jira/browse/AXIS2C + + o If you want to participate actively in developing Apache Axis2/C Guththila please + subscribe to the `axis-c-dev@ws.apache.org' mailing list as described at + http://ws.apache.org/axis2/c/mail-lists.html + diff --git a/guththila/autogen.sh b/guththila/autogen.sh new file mode 100755 index 0000000..8ca13d8 --- /dev/null +++ b/guththila/autogen.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +echo -n 'Running libtoolize...' +if [ `uname -s` = Darwin ] +then + LIBTOOLIZE=glibtoolize +else + LIBTOOLIZE=libtoolize +fi + +if $LIBTOOLIZE --force > /dev/null 2>&1; then + + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running aclocal...' +if aclocal > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoheader...' +if autoheader > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoconf...' +if autoconf > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running automake...' +if automake --add-missing > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo 'done' diff --git a/guththila/build.sh b/guththila/build.sh new file mode 100755 index 0000000..48dfd02 --- /dev/null +++ b/guththila/build.sh @@ -0,0 +1,4 @@ +./autogen.sh +./configure --prefix=${AXIS2C_HOME} --with-axis2_util=${AXIS2C_HOME}/include +make +make install diff --git a/guththila/configure.ac b/guththila/configure.ac new file mode 100644 index 0000000..5a6951b --- /dev/null +++ b/guththila/configure.ac @@ -0,0 +1,81 @@ +dnl run autogen.sh to generate the configure script. + +AC_PREREQ(2.59) + +AC_INIT(guththilac-src, 1.6.0) +AC_CANONICAL_SYSTEM +AM_CONFIG_HEADER(config.h) +dnl AM_INIT_AUTOMAKE([tar-ustar]) +AM_INIT_AUTOMAKE +AC_PREFIX_DEFAULT(/usr/local/guththila) + +m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])]) + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_CPP +AC_PROG_LIBTOOL +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET + +dnl check for flavours of varargs macros (test from GLib) +AC_MSG_CHECKING(for ISO C99 varargs macros in C) +AC_TRY_COMPILE([],[ +int a(int p1, int p2, int p3); +#define call_a(...) a(1,__VA_ARGS__) +call_a(2,3); +],axis2c_have_iso_c_varargs=yes,axis2c_have_iso_c_varargs=no) +AC_MSG_RESULT($axis2c_have_iso_c_varargs) + +AC_MSG_CHECKING(for GNUC varargs macros) +AC_TRY_COMPILE([],[ +int a(int p1, int p2, int p3); +#define call_a(params...) a(1,params) +call_a(2,3); +],axis2c_have_gnuc_varargs=yes,axis2c_have_gnuc_varargs=no) +AC_MSG_RESULT($axis2c_have_gnuc_varargs) + +dnl Output varargs tests +if test x$axis2c_have_iso_c_varargs = xyes; then + AC_DEFINE(HAVE_ISO_VARARGS,1,[Have ISO C99 varargs macros]) +fi +if test x$axis2c_have_gnuc_varargs = xyes; then + AC_DEFINE(HAVE_GNUC_VARARGS,1,[Have GNU-style varargs macros]) +fi + +dnl Checks for libraries. +AC_CHECK_LIB(dl, dlopen) + +CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE -DAXIS2_GUTHTHILA_ENABLED" + +if test "$GCC" = "yes"; then + CFLAGS="$CFLAGS -ansi -ggdb3 -Wall -Wno-implicit-function-declaration " +fi + + +dnl Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([stdio.h stdlib.h string.h]) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST + +dnl Checks for library functions. +AC_FUNC_MALLOC +AC_FUNC_REALLOC +#AC_CHECK_FUNCS([memmove]) + + +UTILINC=$axis2_utilinc +VERSION_NO="6:0:6" + +AC_SUBST(UTILINC) +AC_SUBST(VERSION_NO) + +AC_CONFIG_FILES([Makefile \ + src/Makefile \ + ]) + +AC_OUTPUT diff --git a/guththila/include/guththila.h b/guththila/include/guththila.h new file mode 100644 index 0000000..663883d --- /dev/null +++ b/guththila/include/guththila.h @@ -0,0 +1,353 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef GUTHTHILA_H +#define GUTHTHILA_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +/* +All the functions in this library does not check weather the given arguments are NULL. +It is the responsblity of the user to check weather the arguments contain NULL values. +*/ +EXTERN_C_START() + +enum guththila_status +{ + S_0 = 0, + S_1, + S_2, + S_3 +}; + +enum guththila_UTF16_endianess +{ + None = 1, + LE, + BE +}; + +typedef enum guththila_type +{ + type_file_name = 0, + type_memory_buffer, + type_reader, + type_io +} guththila_type_t; + +enum guththila_event_types +{ + GUTHTHILA_START_DOCUMENT =0, + GUTHTHILA_END_ELEMENT, + GUTHTHILA_CHARACTER, + GUTHTHILA_ENTITY_REFERANCE, + GUTHTHILA_COMMENT, + GUTHTHILA_SPACE, + GUTHTHILA_START_ELEMENT, + GUTHTHILA_EMPTY_ELEMENT +}; + +typedef struct guththila_s +{ + guththila_tok_list_t tokens; /* Token cache */ + + guththila_buffer_t buffer; /* Holding incoming xml string */ + + guththila_reader_t *reader; /* Reading the data */ + + guththila_token_t *prefix; /* Prefix of the xml element */ + + guththila_token_t *name; /* xml element local name */ + + guththila_token_t *value; /* text of a xml element */ + + guththila_stack_t elem; /* elements are put in a stack */ + + guththila_stack_t attrib; /* Attributes are put in a stack */ + + guththila_stack_t namesp; /* namespaces are put in a stack */ + + int status; + + int guththila_event; /* Current event */ + + size_t next; /* Keep track of the position in the xml string */ + + int last_start; /* Keep track of the starting position of the last token */ + + guththila_token_t *temp_prefix; /* Temporery location for prefixes */ + + guththila_token_t *temp_name; /* Temporery location for names */ + + guththila_token_t *temp_tok; /* We don't know this until we close it */ +} guththila_t; + +/* + * An element will contain one of these things if it has namespaces + * */ +typedef struct guththila_elem_namesp_s +{ + guththila_namespace_t *namesp; /* Array of namespaces */ + int no; /*Number of namespace in the element */ + int size; /* Allocated size */ +} guththila_elem_namesp_t; + +/* + * Element. + */ +typedef struct guththila_element_s +{ + guththila_token_t *name; /* local name */ + + guththila_token_t *prefix; /* prefix */ + + int is_namesp; /* Positive if a namespace is present */ +} guththila_element_t; + +/* Initialize the parser */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_init(guththila_t * m, void *reader, + const axutil_env_t * env); + +/* Uninitialize the parser */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_un_init(guththila_t * m, const axutil_env_t * env); + +/* Still not used */ +typedef void(GUTHTHILA_CALL * guththila_error_func)(void *arg, + const guththila_char_t *msg, + guththila_error_level level, + void *locator); + +/* + * Parse the xml and return an event. If something went wrong it will return -1. + * The events are of the type guththila_event_types. According to the event + * user can get the required information using the appriate functions. + * @param g pointer to a guththila_t structure + * @param env the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_next(guththila_t * g, const axutil_env_t * env); + +/* + * Return the number of attributes in the current element. + * @param g pointer to a guththila_t structure + * @param env the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_get_attribute_count(guththila_t * g, const axutil_env_t * env); + +/* + * Return the attribute name. + * @param g pointer to a guththila_t structure + * @param att pointer to a attribute + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t * GUTHTHILA_CALL +guththila_get_attribute_name(guththila_t * g, guththila_attr_t * att, + const axutil_env_t * env); + +/* + * Return the attribute value. + * @param g pointer to a guththila_t structure + * @param att pointer to a attribute + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t * GUTHTHILA_CALL +guththila_get_attribute_value(guththila_t * g, + guththila_attr_t * att, + const axutil_env_t * env); + +/* + * Return the attribute prefix. + * @param g pointer to a guththila_t structure + * @param att pointer to a attribute + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_attribute_prefix(guththila_t * g, + guththila_attr_t * att, + const axutil_env_t * env); + +/* + * Return the attribute + * @param g pointer to a guththila_t structure + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_attr_t *GUTHTHILA_CALL +guththila_get_attribute(guththila_t * g, const axutil_env_t * env); + +/* + * Return the name of the attribute by the attribute bumber. + * First attribute will be 1. + * @param g pointer to a guththila_t structure + * @param index position of the attribute + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_attribute_name_by_number(guththila_t * g, int index, + const axutil_env_t *env); + +/* + * Return the attribute value by number. + * First attribute will be 1. + * @param g pointer to a guththila_t structure + * @param index position of the attribute + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_attribute_value_by_number(guththila_t * g, int index, + const axutil_env_t *env); + +/* + * Return the prefix of the attribute. + * First attribute will be 1. + * @param g pointer to a guththila_t structure + * @param index position of the attribute + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_attribute_prefix_by_number(guththila_t * g, int index, + const axutil_env_t *env); + +/* + * Return the name of the element. + * @param g pointer to a guththila_t structure + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_name(guththila_t * g, const axutil_env_t * env); + +/* + * Return the prefix of the element. + * @param g pointer to a guththila_t structure + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_prefix(guththila_t * g, const axutil_env_t * env); + +/* + * Return the text of the element. + * @param g pointer to a guththila_t structure + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_value(guththila_t * g, const axutil_env_t * env); + +/* + * Return the namespace of the element. + * @param g pointer to a guththila_t structure + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_namespace_t *GUTHTHILA_CALL +guththila_get_namespace(guththila_t * g, const axutil_env_t * env); + +/* + * Return the number of namespaces in the element. + * @param g pointer to a guththila_t structure + * @param env the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_get_namespace_count(guththila_t * g, const axutil_env_t * env); + +/* + * Return the namespace uri of the given namespace. + * @param g pointer to a guththila_t structure + * @param ns pointer to a namespace + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t * GUTHTHILA_CALL +guththila_get_namespace_uri(guththila_t * g, guththila_namespace_t * ns, + const axutil_env_t * env); + +/* + * Return the prefix of the namespace. + * @param g pointer to a guththila_t structure + * @param ns pointer to a namespace + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_namespace_prefix(guththila_t * p, guththila_namespace_t * ns, + const axutil_env_t * env); + +/* + * Return the prefix of the namespace at the given position. + * First namespace will have the value 1. + * @param g pointer to a guththila_t structure + * @param index position of the namespace + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_namespace_prefix_by_number(guththila_t * g, int index, + const axutil_env_t *env); + +/* + * Get the uri of the namespace at the given position. + * First namespace will have the value 1. + * @param g pointer to a guththila_t structure + * @param index position of the namespace + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_namespace_uri_by_number(guththila_t * g, int index, + const axutil_env_t *env); + +/* + * Get the attribute namespace of the attribute at the given position. + * @param g pointer to a guththila_t structure + * @param index position of the namespace + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_attribute_namespace_by_number(guththila_t *g, int index, + const axutil_env_t *env); + +/* + * Get the encoding. at the moment we don't support UNICODE + * @param g pointer to a guththila_t structure + * @param env the environment + */ +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_encoding(guththila_t * p, const axutil_env_t * env); + +/* + * To do. Implement a proper error handling mechanism. + * @param g pointer to a guththila_t structure + * @param env the environment + */ +GUTHTHILA_EXPORT void GUTHTHILA_CALL +guththila_set_error_handler(guththila_t * m, guththila_error_func, + const axutil_env_t * env); + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_current_buffer( + guththila_t * m, + const axutil_env_t * env); + +EXTERN_C_END() +#endif + diff --git a/guththila/include/guththila_attribute.h b/guththila/include/guththila_attribute.h new file mode 100644 index 0000000..8752283 --- /dev/null +++ b/guththila/include/guththila_attribute.h @@ -0,0 +1,127 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef GUTHTHILA_ATTRIBUTE_H +#define GUTHTHILA_ATTRIBUTE_H + +#include +#include +#include + +EXTERN_C_START() + +#ifndef GUTHTHILA_ATTR_DEF_SIZE +#define GUTHTHILA_ATTR_DEF_SIZE 16 +#endif + +/* Representation of an attribute */ +typedef struct guththila_attr_s +{ + guththila_token_t *pref; /* Prefix */ + guththila_token_t *name; /* Name */ + guththila_token_t *val; /* Value */ +} guththila_attr_t; + +typedef struct guththila_attr_list_s +{ + guththila_attr_t *list; + guththila_stack_t fr_stack; + int size; + int capacity; +} guththila_attr_list_t; + +/** +* Create function of guththila_attr_list_t type structure +* @param env environment, MUST NOT be NULL. +* return new pointer to structure guththila_attr_list_s with initializing stack +* fr_stack +*/ +guththila_attr_list_t * +GUTHTHILA_CALL guththila_attr_list_create(const axutil_env_t * env); + +/** + * Initializing function of guththila_attr_list_t type structure,same + * thing done by the create method + * @param at_list keeps the list of attributes in this structure using + * a guththila_stack_t variable + * @param env environment, MUST NOT be NULL. + * return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error + */ +int GUTHTHILA_CALL +guththila_attr_list_init( + guththila_attr_list_t * at_list, + const axutil_env_t * env); + +/** + * @param at_list keeps the list of attributes in this structure using + * a guththila_stack_t variable + * @param env environment, MUST NOT be NULL. + * return the top value of the stack which is inside guththila_attr_list_t + */ +guththila_attr_t * +GUTHTHILA_CALL guththila_attr_list_get(guththila_attr_list_t * at_list, + const axutil_env_t * env); + + +/** + * This method push the given attribute in to the stack which is a + * member of guththila_attr_list_t + * @param at_list keeps the list of attributes in this structure using + * a guththila_stack_t variable + * @param attr contains attribute with attribute name,value,and prefix + * @param env environment, MUST NOT be NULL. + * return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error + */ +int GUTHTHILA_CALL +guththila_attr_list_release( + guththila_attr_list_t * at_list, + guththila_attr_t * attr, + const axutil_env_t * env); + +/** + * Free method for the stack which is inside guththila_attr_list_s + * structure, free the stack and other members + * @param at_list keeps the list of attributes in this structure using + * a guththila_stack_t variable + * @param env environment, MUST NOT be NULL. + * return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error + */ +void GUTHTHILA_CALL +msuila_attr_list_free_data( + guththila_attr_list_t * at_list, + const axutil_env_t * env); + +/** + * Free method for guththila_attr_list_s structure,this free at_list too. + * @param at_list keeps the list of attributes in this structure using + * a guththila_stack_t variable + * @param attr contains attribute with attribute name,value,and prefix + * @param env environment, MUST NOT be NULL. + * return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error + */ +void GUTHTHILA_CALL +guththila_attr_list_free( + guththila_attr_list_t * at_list, + const axutil_env_t * env); + +EXTERN_C_END() +#endif /* */ + diff --git a/guththila/include/guththila_buffer.h b/guththila/include/guththila_buffer.h new file mode 100644 index 0000000..8f94fde --- /dev/null +++ b/guththila/include/guththila_buffer.h @@ -0,0 +1,152 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef GUTHTHILA_BUFFER_H +#define GUTHTHILA_BUFFER_H + +#include +#include + +EXTERN_C_START() + +typedef enum guththila_buffer_type +{ + GUTHTHILA_SINGLE_BUFFER = 0, /* One buffer */ + GUTHTHILA_MULTIPLE_BUFFER /* Mulitple buffers in a buff array */ +} guththila_buffer_type_t; + +typedef struct guththila_buffer_s +{ + /* Required to manupulate multiple buffers */ + size_t *data_size; /* Array containing filled sizes of buffers */ + size_t *buffs_size; /* Array containing actual sizes of buffers */ + guththila_char_t **buff; /* Array of buffers */ + int cur_buff; /* Current buffer */ + int cur_buff_pos; /* Position of the current buffer */ + size_t pre_tot_data; /* All the data in the previous buffers. Not include cur */ + unsigned int no_buffers; /* No of buffers */ + short type; /* Buffer type */ + guththila_char_t *xml; /* All the buffers serialized together */ +} guththila_buffer_t; + +#define GUTHTHILA_BUFFER_DEF_SIZE 16384 +#define GUTHTHILA_BUFFER_DEF_MIN_SIZE 512 +#define GUTHTHILA_BUFFER_NUMBER_OF_BUFFERS 16 + +#ifndef GUTHTHILA_BUFFER_SIZE +#define GUTHTHILA_BUFFER_SIZE(_buffer) (_buffer.size) +#endif + +#ifndef GUTHTHILA_BUFFER_CURRENT_BUFF +#define GUTHTHILA_BUFFER_CURRENT_BUFF(_buffer) ((_buffer).buff[(_buffer).cur_buff] + (_buffer).data_size[(_buffer).cur_buff]) +#endif + +#ifndef GUTHTHILA_BUFFER_CURRENT_BUFF_SIZE +#define GUTHTHILA_BUFFER_CURRENT_BUFF_SIZE(_buffer) ((_buffer).buffs_size[(_buffer).cur_buff] - (_buffer).data_size[(_buffer).cur_buff]) +#endif + +#ifndef GUTHTHILA_BUFFER_CURRENT_DATA_SIZE +#define GUTHTHILA_BUFFER_CURRENT_DATA_SIZE(_buffer) ((_buffer).data_size[(_buffer).cur_buff]) +#endif + +#ifndef GUTHTHILA_BUFFER_PRE_DATA_SIZE +#define GUTHTHILA_BUFFER_PRE_DATA_SIZE(_buffer) ((_buffer).pre_tot_data) +#endif + +/*We never consider tokens not in the current buffer*/ +#ifndef GUTHTHILA_BUF_POS +#define GUTHTHILA_BUF_POS(_buffer, _pos) ((_buffer).buff[(_buffer).cur_buff] + _pos - (_buffer).pre_tot_data) +#endif + +/** + * This method is the create method of guththila_buffer_s structure + * @param buffer structure which is going to create + * @param size size of the buffer which is going to create + * @param env environment, MUST NOT be NULL. + * return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error + */ +int GUTHTHILA_CALL +guththila_buffer_init(guththila_buffer_t * buffer, + int size, + const axutil_env_t * env); + +/** + * This is the free method of guththila_buffer_s structure + * @param buffer structure which is going to create + * @param env environment, MUST NOT be NULL. + * return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error + */ +int GUTHTHILA_CALL +guththila_buffer_un_init(guththila_buffer_t * buffer, + const axutil_env_t * env); + +/** + * This method creates a new buffer and copy the content of given + * data by buffer variable + * @param mu_buff structure which is going to create + * @param buffer data to copy in to new buffer + * @param size size of the buffer to create + * @param env environment, MUST NOT be NULL. + * return status of op AXIS2_SUCCESS on success, + * AXIS2_FAILURE on error + */ +int GUTHTHILA_CALL +guththila_buffer_init_for_buffer(guththila_buffer_t * mu_buff, + guththila_char_t *buffer, + int size, + const axutil_env_t * env); + +void *GUTHTHILA_CALL +guththila_get_position(guththila_buffer_t * buffer, + int pos, + const axutil_env_t * env); + +int GUTHTHILA_CALL +guththila_buffer_next(guththila_buffer_t * buffer, + const axutil_env_t * env); + + +/** + * This method create new xml element which is having the + * size of cur_buff + * data by buffer variable + * @param buffer + * @param env environment, MUST NOT be NULL. + * return xml element of guththila_buffer_s structure + */ +void *GUTHTHILA_CALL +guththila_buffer_get(guththila_buffer_t * buffer, + const axutil_env_t * env); + + +int GUTHTHILA_CALL +guththila_buffer_shift(guththila_buffer_t * buffer, + int no, const axutil_env_t * env); + +int GUTHTHILA_CALL +guththila_buffer_insert_data(guththila_buffer_t * buffer, + void *buff, size_t buff_len, + const axutil_env_t * env); + +EXTERN_C_END() +#endif + + + + diff --git a/guththila/include/guththila_defines.h b/guththila/include/guththila_defines.h new file mode 100644 index 0000000..d297f55 --- /dev/null +++ b/guththila/include/guththila_defines.h @@ -0,0 +1,73 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef GUTHTHILA_DEFINES_H +#define GUTHTHILA_DEFINES_H + +#if defined(_WIN32) +#define GUTHTHILA_EXPORT __declspec(dllexport) +#else +#define GUTHTHILA_EXPORT +#endif + +#if defined(__GNUC__) +#if defined(__i386) +#define GUTHTHILA_CALL __attribute__((cdecl)) +#else +#define GUTHTHILA_CALL +#endif +#else +#if defined(__unix) +#define GUTHTHILA_CALL +#else +#define GUTHTHILA_CALL __stdcall +#endif +#endif + +#ifndef guththila_char_t +#define guththila_char_t char +#endif + +#ifndef GUTHTHILA_SUCCESS +#define GUTHTHILA_SUCCESS 1 +#endif + +#ifndef GUTHTHILA_FAILURE +#define GUTHTHILA_FAILURE 0 +#endif + +#ifdef __cplusplus +#define EXTERN_C_START() extern "C" { +#define EXTERN_C_END() } +#else +#define EXTERN_C_START() +#define EXTERN_C_END() +#endif + +#ifndef GUTHTHILA_EOF +#define GUTHTHILA_EOF (-1) +#endif + +#ifndef GUTHTHILA_FALSE +#define GUTHTHILA_FALSE 0 +#endif + +#ifndef GUTHTHILA_TRUE +#define GUTHTHILA_TRUE 1 +#endif + +#endif diff --git a/guththila/include/guththila_error.h b/guththila/include/guththila_error.h new file mode 100644 index 0000000..834e954 --- /dev/null +++ b/guththila/include/guththila_error.h @@ -0,0 +1,96 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include + +#ifndef GUTHTHILA_ERROR_H +#define GUTHTHILA_ERROR_H +EXTERN_C_START() typedef enum guththila_error_l +{ + GUTHTHILA_VALIDITY_ERROR, + GUTHTHILA_VALIDITY_WARNING, + GUTHTHILA_PARSER_ERROR, + GUTHTHILA_PARSER_WARNING +} guththila_error_level; +enum guththila_error_codes +{ + GUTHTHILA_ERROR_NONE = + 0, GUTHTHILA_ERROR_NO_MEMORY, + GUTHTHILA_ERROR_INVALID_NULL_PARAMETER, + GUTHTHILA_ERROR_INVALID_ITERATOR_STATE, + GUTHTHILA_ERROR_INVALID_NODE_TYPE, + GUTHTHILA_STREAM_WRITER_ERROR_NOT_IN_GUTHTHILA_START_ELEMENT, + GUTHTHILA_STREAM_WRITER_ERROR_WRITING_TO_STREAM, + GUTHTHILA_STREAM_WRITER_ERROR_STREAM_STRUCT_NULL, + GUTHTHILA_STREAM_WRITER_ERROR_LOCAL_NAME_NULL, + GUTHTHILA_STREAM_WRITER_ERROR_GUTHTHILA_namespace_t_NULL, + GUTHTHILA_STREAM_WRITER_ERROR_PREFIX_NULL, + GUTHTHILA_STREAM_WRITER_ERROR_GUTHTHILA_namespace_t_NOT_DECLARED, + GUTHTHILA_STREAM_WRITER_ERROR_GUTHTHILA_element_t_GUTHTHILA_stack_t_EMPTY, + GUTHTHILA_STREAM_WRITER_ERROR_ILLEGAL_STATE, + GUTHTHILA_STREAM_WRITER_ERROR_GUTHTHILA_COMMENT_NULL, + GUTHTHILA_STREAM_WRITER_ERROR_ILLEGAL_GUTHTHILA_COMMENT, + GUTHTHILA_STREAM_WRITER_ERROR_PROCESSING_INSTRUCTION_TARGET_NULL, + GUTHTHILA_STREAM_WRITER_ERROR_CDATA_NULL, + GUTHTHILA_STREAM_WRITER_ERROR_ILLEGAL_CDATA, + GUTHTHILA_STREAM_WRITER_ERROR_DTD_NULL, + GUTHTHILA_STREAM_WRITER_ERROR_ENTITY_REF_NULL, + GUTHTHILA_STREAM_WRITER_ERROR_ILLEGAL_XML_VERSION, + GUTHTHILA_STREAM_WRITER_ERROR_TEXT_NULL, + GUTHTHILA_STREAM_WRITER_ERROR_ILLEGAL_PREFIX, + GUTHTHILA_STREAM_WRITER_ERROR_OUT_OF_MEMORY, + GUTHTHILA_STREAM_WRITER_ERROR_FILE_NOT_FOUND, + GUTHTHILA_STREAM_READER_ERROR_OUT_OF_MEMORY, + GUTHTHILA_ERROR_INVALID_ENCODING_DECLARATION, + GUTHTHILA_ERROR_UNEXPECTED_UTF16_EOF, + GUTHTHILA_ERROR_UNEXPECTED_EOF, + GUTHTHILA_ERROR_PROCESS_EQUAL, + GUTHTHILA_ERROR_INCORRECT_VERSION_INFO, + GUTHTHILA_ERROR_INCORRECT_XML_DECLARATION, + GUTHTHILA_ERROR_VERSION_INFO_NOT_FOUND, + GUTHTHILA_ERROR_ENCODING_DECLARATION_ERROR, + GUTHTHILA_ERROR_STANDALONE_ERROR_IN_YES, + GUTHTHILA_ERROR_STANDALONE_ERROR_IN_NO, + GUTHTHILA_ERROR_STANDALONE_ERROR_YES_OR_NO_NOT_AVAILABLE, + GUTHTHILA_ERROR_MISSING_GREATER_SIGN_IN_XML_DECLARATION, + GUTHTHILA_ERROR_INVALID_NAME_STARTING_CHARACTER, + GUTHTHILA_ERROR_QUOTES_NOT_FOUND_BEFORE_ATTRIBUTE_VALUE, + GUTHTHILA_ERROR_EMPTY_ELEMENT_NOT_CLOSED, + GUTHTHILA_ERROR_END_TAG_NOT_CLOSED, + GUTHTHILA_ERROR_MORE_HYPENS_OCCURED_IN_COMMENT, + GUTHTHILA_ERROR_TOKENIZE_ERROR, + GUTHTHILA_ERROR_INVALID_TOKEN_TYPE, + GUTHTHILA_ERROR_NULL_ATTRIBUTE_NAME, + GUTHTHILA_ERROR_NULL_ATTRIBUTE_VALUE, + GUTHTHILA_ERROR_NULL_ATTRIBUTE_PREFIX, + GUTHTHILA_ERROR_REQUESTED_NUMBER_GREATER_THAN_STACK_SIZE, + GUTHTHILA_WRITER_ERROR_EMPTY_ARGUMENTS, + GUTHTHILA_WRITER_ERROR_NON_EXSISTING_PREFIX, + GUTHTHILA_WRITER_ERROR_EMPTY_WRITER, + GUTHTHILA_WRITER_ERROR_NON_MATCHING_ELEMENTS, + GUTHTHILA_WRITER_ERROR_INVALID_BUFFER, + GUTHTHILA_WRITER_ERROR_INVALID_CHAR_IN_NAME, + GUTHTHILA_WRITER_ERROR_XML_STRING_IN_NAME, + GUTHTHILA_WRITER_ERROR_EXCESS_HYPENS_IN_COMMENT, + GUTHTHILA_WRITER_ERROR_INVALID_CHAR_IN_ATTRIBUTE, + GUTHTHILA_WRITER_ERROR_NON_EXSISTING_URI, + GUTHTHILA_WRITER_ERROR_SAME_ATTRIBUTE_REPEAT, + GUTHTHILA_ERROR_ATTRIBUTE_FREE +}; +EXTERN_C_END() +#endif /* */ + diff --git a/guththila/include/guththila_namespace.h b/guththila/include/guththila_namespace.h new file mode 100644 index 0000000..a845665 --- /dev/null +++ b/guththila/include/guththila_namespace.h @@ -0,0 +1,76 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef GUTHTHILA_NAMESPACE_H +#define GUTHTHILA_NAMESPACE_H + +#include +#include +#include +EXTERN_C_START() + +#ifndef GUTHTHILA_NAMESPACE_DEF_SIZE +#define GUTHTHILA_NAMESPACE_DEF_SIZE 4 +#endif + +typedef struct guththila_namespace_s +{ + guththila_token_t *name; /* Name */ + guththila_token_t *uri; /* URI */ +} guththila_namespace_t; + +typedef struct guththila_namespace_list_s +{ + guththila_namespace_t *list; + guththila_stack_t fr_stack; + int size; + int capacity; +} guththila_namespace_list_t; + +guththila_namespace_list_t *GUTHTHILA_CALL +guththila_namespace_list_create( + const axutil_env_t * env); + +int GUTHTHILA_CALL +guththila_namespace_list_init( + guththila_namespace_list_t * at_list, + const axutil_env_t * env); + +guththila_namespace_t * GUTHTHILA_CALL +guththila_namespace_list_get( + guththila_namespace_list_t *at_list, + const axutil_env_t * env); + +int GUTHTHILA_CALL +guththila_namespace_list_release( + guththila_namespace_list_t * at_list, + guththila_namespace_t * namesp, + const axutil_env_t * env); + +void GUTHTHILA_CALL +msuila_namespace_list_free_data( + guththila_namespace_list_t * at_list, + const axutil_env_t * env); + +void GUTHTHILA_CALL +guththila_namespace_list_free( + guththila_namespace_list_t * at_list, + const axutil_env_t * env); + +EXTERN_C_END() +#endif + diff --git a/guththila/include/guththila_reader.h b/guththila/include/guththila_reader.h new file mode 100644 index 0000000..cad53a1 --- /dev/null +++ b/guththila/include/guththila_reader.h @@ -0,0 +1,115 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef GUTHTHILA_READER_H +#define GUTHTHILA_READER_H + +#include +#include +#include + +EXTERN_C_START() + +typedef int(GUTHTHILA_CALL * GUTHTHILA_READ_INPUT_CALLBACK)( + guththila_char_t *buffer, + int size, + void *ctx); + +enum guththila_reader_type +{ + GUTHTHILA_FILE_READER = 1, + GUTHTHILA_IO_READER, + GUTHTHILA_MEMORY_READER +}; + +typedef struct guththila_reader_s +{ + int type; /* Type of reader */ + FILE *fp; /* File pointer */ + guththila_char_t *buff; /* Buffer */ + int buff_size; /* Buff size */ + GUTHTHILA_READ_INPUT_CALLBACK input_read_callback; /* Call back */ + void *context; /* Context */ +} guththila_reader_t; + +#ifndef GUTHTHILA_READER_SET_LAST_START +#define GUTHTHILA_READER_SET_LAST_START(_reader, _start) ((_reader)->start = _start) +#endif + +#ifndef GUTHTHILA_READER_STEP_BACK +#define GUTHTHILA_READER_STEP_BACK(_reader) ((_reader->next--)) +#endif + +/* + * Reading a file. + * @param filename name of the file + * @param env environment + */ +GUTHTHILA_EXPORT guththila_reader_t * GUTHTHILA_CALL +guththila_reader_create_for_file(guththila_char_t *filename, + const axutil_env_t * env); + +/* + * Reading from a call back function. + * @param input_read_callback function pointer to read data + * @param ctx context + * @param env environment + */ +GUTHTHILA_EXPORT guththila_reader_t * GUTHTHILA_CALL +guththila_reader_create_for_io(GUTHTHILA_READ_INPUT_CALLBACK + input_read_callback, void *ctx, + const axutil_env_t * env); + +/* + * Reading from memory buffer. + * @param buffer buffer + * @param size size of the buffer + * @param env environment + */ +GUTHTHILA_EXPORT guththila_reader_t * GUTHTHILA_CALL +guththila_reader_create_for_memory(void *buffer, + int size, + const axutil_env_t * env); + +/* + * Read the specified number of character to the given buffer. + * @param r reader + * @param buffer buffer to place the read data + * @param offset position to place the data on the given buffer + * @param length number of bytes to read + * @param env environment + * @return number of bytes put in to the buffer. -1 if end of the read. + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_reader_read( + guththila_reader_t * r, + guththila_char_t * buffer, + int offset, + int length, + const axutil_env_t * env); + +/* + * Free the reader. + * @param r reader + * @param env environment + */ +GUTHTHILA_EXPORT void GUTHTHILA_CALL guththila_reader_free( + guththila_reader_t * r, + const axutil_env_t * env); + +EXTERN_C_END() +#endif /* */ + diff --git a/guththila/include/guththila_stack.h b/guththila/include/guththila_stack.h new file mode 100644 index 0000000..3520d73 --- /dev/null +++ b/guththila/include/guththila_stack.h @@ -0,0 +1,96 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef GUTHTHILA_STACK_H +#define GUTHTHILA_STACK_H + +#include +#include + +#include +#include +#define GUTHTHILA_STACK_DEFAULT 16 + +EXTERN_C_START() + +typedef struct guththila_stack_s +{ + /* Number of Items in the stack */ + int top; + /* Max number of Items that can be hold in data */ + int max; + void ** data; +} guththila_stack_t; + +#ifndef GUTHTHILA_STACK_SIZE +#define GUTHTHILA_STACK_SIZE(_stack) ((_stack).top) +#endif + +#ifndef GUTHTHILA_STACK_TOP_INDEX +#define GUTHTHILA_STACK_TOP_INDEX(_stack) (((_stack).top - 1)) +#endif + +int GUTHTHILA_CALL +guththila_stack_init( + guththila_stack_t * stack, + const axutil_env_t * env); + +void GUTHTHILA_CALL +guththila_stack_free( + guththila_stack_t * stack, + const axutil_env_t * env); + +void GUTHTHILA_CALL +guththila_stack_un_init( + guththila_stack_t * stack, + const axutil_env_t * env); + +void * GUTHTHILA_CALL +guththila_stack_pop( + guththila_stack_t * stack, + const axutil_env_t * env); + +int GUTHTHILA_CALL +guththila_stack_push( + guththila_stack_t * stack, + void *data, + const axutil_env_t * env); + +void * GUTHTHILA_CALL +guththila_stack_peek( + guththila_stack_t * stack, + const axutil_env_t * env); + +void * GUTHTHILA_CALL +guththila_stack_get_by_index( + guththila_stack_t * stack, + int index, + const axutil_env_t * env); + +int GUTHTHILA_CALL +guththila_stack_del_top( + guththila_stack_t * stack, + const axutil_env_t * env); + +int GUTHTHILA_CALL +guththila_stack_is_empty( + guththila_stack_t * stack, + const axutil_env_t * env); + +EXTERN_C_END() +#endif + diff --git a/guththila/include/guththila_token.h b/guththila/include/guththila_token.h new file mode 100644 index 0000000..ae8719c --- /dev/null +++ b/guththila/include/guththila_token.h @@ -0,0 +1,174 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef GUTHTHILA_TOKEN_H +#define GUTHTHILA_TOKEN_H + +#include +#include + +EXTERN_C_START() + +typedef struct guththila_token_s +{ + short type; + guththila_char_t *start; + int _start; + size_t size; + int last; + int ref; +} guththila_token_t; + +enum guththila_token_type +{ + _Unknown = 1, + _name, + _attribute_name, + _attribute_value, + _prefix, + _char_data, + _text_data +}; + +typedef struct guththila_tok_list_s +{ + guththila_stack_t fr_stack; + guththila_token_t **list; + int no_list; + int cur_list; + int *capacity; +} guththila_tok_list_t; + +#ifndef GUTHTHILA_TOK_DEF_SIZE +#define GUTHTHILA_TOK_DEF_SIZE 16 +#endif + +#ifndef GUTHTHILA_TOK_DEF_LIST_SIZE +#define GUTHTHILA_TOK_DEF_LIST_SIZE 16 +#endif + +#ifndef GUTHTHILA_TOKEN_LEN +#define GUTHTHILA_TOKEN_LEN(tok) (tok->size) +#endif + +#ifndef GUTHTHILA_TOKEN_TO_STRING +#define GUTHTHILA_TOKEN_TO_STRING(tok, string, _env) \ + { \ + string = (guththila_char_t *) AXIS2_MALLOC(_env->allocator, (GUTHTHILA_TOKEN_LEN(tok) + 1) * sizeof(guththila_char_t)); \ + memcpy(string, (tok)->start, GUTHTHILA_TOKEN_LEN(tok)); \ + string[GUTHTHILA_TOKEN_LEN(tok)] = 0; \ + } +#endif + +/* + * Initialize token list. + */ +int GUTHTHILA_CALL +guththila_tok_list_init( + guththila_tok_list_t * tok_list, + const axutil_env_t * env); + +/* + * Free the token list. Allocated tokens are not free. + */ +void GUTHTHILA_CALL +guththila_tok_list_free( + guththila_tok_list_t * tok_list, + const axutil_env_t * env); + +/* + * Get a token from the list. + */ +guththila_token_t * +GUTHTHILA_CALL guththila_tok_list_get_token( + guththila_tok_list_t * tok_list, + const axutil_env_t * env); + +/* + * Release a token to the token list. + */ +int GUTHTHILA_CALL +guththila_tok_list_release_token( + guththila_tok_list_t * tok_list, + guththila_token_t * token, + const axutil_env_t * env); + +/* + * Free the tokens in the token list. + */ +void GUTHTHILA_CALL +guththila_tok_list_free_data( + guththila_tok_list_t * tok_list, + const axutil_env_t * env); + +/* + * Grow the token list. + */ +int GUTHTHILA_CALL +guththila_tok_list_grow( + guththila_tok_list_t * tok_list, + const axutil_env_t * env); + +/* + * Compare a token with a string. + * Return 0 if match. + */ +int GUTHTHILA_CALL +guththila_tok_str_cmp( + guththila_token_t * tok, + guththila_char_t *str, + size_t str_len, + const axutil_env_t * env); + +/* + * Compare two tokens for string equalance + * Return 0 if match. + */ +int GUTHTHILA_CALL +guththila_tok_tok_cmp( + guththila_token_t * tok1, + guththila_token_t * tok2, + const axutil_env_t * env); + +void GUTHTHILA_CALL +guththila_set_token( + guththila_token_t* tok, + guththila_char_t* start, + short type, + int size, + int _start, + int last, + int ref, + const axutil_env_t* env); + +EXTERN_C_END() +#endif + + + + + + + + + + + + + + + diff --git a/guththila/include/guththila_xml_writer.h b/guththila/include/guththila_xml_writer.h new file mode 100644 index 0000000..afc5a26 --- /dev/null +++ b/guththila/include/guththila_xml_writer.h @@ -0,0 +1,507 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef GUTHTHILA_XML_WRITER_H +#define GUTHTHILA_XML_WRITER_H + +#include +#include +#include +#include +#include + +EXTERN_C_START() +#define GUTHTHILA_XML_WRITER_TOKEN + +/* +Design notes:- +namesp member of guththila_xml_writer_s is populated with malloc created objects. +Providing a list for this seems expensive because most of the times only few +namespaces are present in a XML document. + +element member of guththila_xml_writer_s must be povided the list capablity. This +is particularly important in very deep XML documents. +*/ +typedef enum guththila_writer_type_s +{ + GUTHTHILA_WRITER_FILE = 1, + GUTHTHILA_WRITER_MEMORY +} guththila_writer_type_t; + +typedef struct guththila_writer_s +{ + short type; + FILE *out_stream; + guththila_buffer_t *buffer; + int next; +} +guththila_writer_t; + +typedef enum guththila_writer_status_s +{ + /*Started writing a non empty element */ + START = 1, + /*Started writing a empty element */ + START_EMPTY, + /*We are in a position to begin wrting an element */ + BEGINING +} guththila_writer_status_t; + +/*Main structure which provides the writer capability*/ +typedef struct guththila_xml_writer_s +{ + guththila_stack_t element; + guththila_stack_t namesp; + guththila_writer_t *writer; +#ifdef GUTHTHILA_XML_WRITER_TOKEN + guththila_tok_list_t tok_list; +#endif + /* Type of this writer. Can be file writer or memory writer */ + guththila_writer_type_t type; + + FILE *out_stream; + guththila_buffer_t buffer; + guththila_writer_status_t status; + int next; +} guththila_xml_writer_t; + +/*TODO: we need to came up with common implementation of followng two structures in writer and reader*/ + +/* +This is a private structure for keeping track of the elements. When we start to write an element this structure will be pop +*/ +typedef struct guththila_xml_writer_element_s +{ +#ifdef GUTHTHILA_XML_WRITER_TOKEN + guththila_token_t *prefix; + guththila_token_t *name; +#else + guththila_char_t *prefix; + guththila_char_t *name; +#endif + /* contains the number of the stack which holds the namespaces + for this element. When we close this element all the namespaces + that are below this should also must be closed */ + int name_sp_stack_no; +} +guththila_xml_writer_element_t; + +typedef struct guththila_xml_writer_namesp_s +{ + /* These are double pointers because a single element may contain multple + namespace declarations */ +#ifdef GUTHTHILA_XML_WRITER_TOKEN + guththila_token_t **name; + guththila_token_t **uri; +#else + guththila_char_t **name; + guththila_char_t **uri; +#endif + int no; /*number of namespaces */ + int size; +} +guththila_xml_writer_namesp_t; + +#define GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE 4 + +/*Writer functions*/ + +/* + * Create a writer which writes to a file. + * @param file_name name of the file + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT guththila_xml_writer_t *GUTHTHILA_CALL +guththila_create_xml_stream_writer( + char *file_name, + const axutil_env_t * env); + +/* + * Create a writer which writes to a memory buffer. + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT guththila_xml_writer_t *GUTHTHILA_CALL +guththila_create_xml_stream_writer_for_memory( + const axutil_env_t * env); + +/* + * Jus write what ever the content in the buffer. If the writer was in + * a start of a element it will close it. + * @param wr pointer to the writer + * @param buff buffer containing the data + * @param size size of the buffer + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_to_buffer( + guththila_xml_writer_t * wr, + char *buff, + int size, + const axutil_env_t * env); + +/* + * Write the name space with the given prifix and namespace. + * @param wr pointer to the writer + * @param prefix prefix of the namespace + * @param uri uri of the namespace + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_namespace( + guththila_xml_writer_t * wr, + char *prefix, + char *uri, + const axutil_env_t * env); + +/* + * Write the name space with the given prifix and namespace. + * @param wr pointer to the writer + * @param prefix prefix of the namespace + * @param uri uri of the namespace + * @param local_name name of the attribute + * @param value value of the attribute + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_do_write_attribute_with_prefix_and_namespace( + guththila_xml_writer_t * wr, + char *prefix, + char *uri, + char *local_name, + char *value, + const axutil_env_t * env); + + +/* + * Write the start document element with the xml version and encoding. + * @param wr pointer to the writer + * @param env pointer to the environment + * @param encoding encoding of the XML. + * @param version xml version + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_start_document( + guththila_xml_writer_t * wr, + const axutil_env_t * env, + char *encoding, + char *version); + +/* + * Write the start element. + * @param wr pointer to the writer + * @param name name of the element + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_start_element( + guththila_xml_writer_t * wr, + char *name, + const axutil_env_t * env); + +/* + * Write the end element. + * @param wr pointer to the writer + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_end_element( + guththila_xml_writer_t * wr, + const axutil_env_t * env); + +/* + * Not implemented. + * @param wr pointer to the writer + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_close( + guththila_xml_writer_t * wr, + const axutil_env_t * env); + +/* + * Write the text content of a element. + * @param wr pointer to the writer + * @param buff character string + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_characters( + guththila_xml_writer_t * wr, + char *buff, + const axutil_env_t * env); + +/* + * Write comment with the given text data. + * @param wr pointer to the writer + * @param buff character string + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_comment( + guththila_xml_writer_t * wr, + char *buff, + const axutil_env_t * env); + +/* + * Write scape character. + * @param wr pointer to the writer + * @param buff character string + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_escape_character( + guththila_xml_writer_t * wr, + char *buff, + const axutil_env_t * env); + +/* + * Start to write an empty element with the given name. + * @param wr pointer to the writer + * @param name name of the element + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_empty_element( + guththila_xml_writer_t * wr, + char *name, + const axutil_env_t * env); + +/* + * Write a defualt namespace. + * @param wr pointer to the writer + * @param uri uri of the namespace + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_default_namespace( + guththila_xml_writer_t * wr, + char *uri, + const axutil_env_t * env); + +/* + * Write a attribute with the given name and value. + * @param wr pointer to the writer + * @param localname name of the attribute + * @param value value of the attribute + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_attribute( + guththila_xml_writer_t * wr, + char *localname, + char *value, + const axutil_env_t * env); + +/* + * Write a attribute with the given name and value and namespace. + * @param wr pointer to the writer + * @param prefix prefix of the attribute + * @param namespace_uri uri of the namespace + * @param localname name of the attribute + * @param value value of the attribute + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_attribute_with_prefix_and_namespace( + guththila_xml_writer_t * wr, + char *prefix, + char *namespace_uri, + char *localname, + char *value, + const axutil_env_t * env); + +/* + * Write a attribute with the given name, value and prefix. If the prefix + * is not defined previously as a namespace this method will fail. + * @param wr pointer to the writer + * @param prefix prefix of the attribute + * @param localname name of the attribute + * @param value value of the attribute + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_attribute_with_prefix( + guththila_xml_writer_t * wr, + char *prefix, + char *localname, + char *value, + const axutil_env_t * env); + +/* + * Write a attribute with the given name, value and namespace uri. + * If the namespace is not defined previously as a namespace this + * method will fail. The prefix corresponding to the namespace uri + * will be used. + * @param wr pointer to the writer + * @param namesp namespace uri + * @param localname name of the attribute + * @param value value of the attribute + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_attribute_with_namespace( + guththila_xml_writer_t * wr, + char *namesp, + char *localname, + char *value, + const axutil_env_t * env); + +/* + * Write a start element with prefix and namespace. If the namespace is not + * defined previoully new namespace will be written. + * @param wr pointer to the writer + * @param prefix prefix of the attribute + * @param namespace_uri uri + * @param localname name of the attribute + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_start_element_with_prefix_and_namespace( + guththila_xml_writer_t * wr, + char *prefix, + char *namespace_uri, + char *local_name, + const axutil_env_t * env); + +/* + * Write a start element with the namespace. If the namespace is not + * defined previously method will fail. + * @param wr pointer to the writer + * @param namespace_uri uri + * @param localname name of the attribute + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_start_element_with_namespace( + guththila_xml_writer_t * wr, + char *namespace_uri, + char *local_name, + const axutil_env_t * env); + +/* + * Write a start element with the prefix. If the prefix is not + * defined previously method will fail. + * @param wr pointer to the writer + * @param namespace_uri uri + * @param localname name of the attribute + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_start_element_with_prefix( + guththila_xml_writer_t * wr, + char *prefix, + char *local_name, + const axutil_env_t * env); + +/* + * Write a empty element with prefix and namespace. If the namespace is not + * defined previoully new namespace will be written. + * @param wr pointer to the writer + * @param prefix prefix of the attribute + * @param namespace_uri uri + * @param localname name of the attribute + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_empty_element_with_prefix_and_namespace( + guththila_xml_writer_t * wr, + char *prefix, + char *namespace_uri, + char *local_name, + const axutil_env_t * env); + +/* + * Write a empty element with the namespace. If the namespace is not + * defined previously method will fail. + * @param wr pointer to the writer + * @param namespace_uri uri + * @param localname name of the attribute + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_empty_element_with_namespace( + guththila_xml_writer_t * wr, + char *namespace_uri, + char *local_name, + const axutil_env_t * env); + +/* + * Write a empty element with the prefix. If the prefix is not + * defined previously method will fail. + * @param wr pointer to the writer + * @param namespace_uri uri + * @param localname name of the attribute + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_empty_element_with_prefix( + guththila_xml_writer_t * wr, + char *prefix, + char *local_name, + const axutil_env_t * env); + +/* + * Close all the elements that were started by writing the end elements. + * @param wr pointer to the writer + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_end_document( + guththila_xml_writer_t * wr, + const axutil_env_t * env); +/* + * Write a new element with the name, then write the characters as text, + * then close the element and write a new line. + * @param wr pointer to the writer + * @element_name name of the element + * @characters text of the new element + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_line( + guththila_xml_writer_t * wr, + char *element_name, + char *characters, + const axutil_env_t * env); + +/* + * Get the memory buffer that is written. + * @param wr pointer to the writer + * @param env pointer to the environment + * @return memory buffer + */ +GUTHTHILA_EXPORT char *GUTHTHILA_CALL guththila_get_memory_buffer( + guththila_xml_writer_t * wr, + const axutil_env_t * env); + +/* + * Get the size of the memory buffer. + * @param wr pointer to the writer + * @param env pointer to the environment + * @return size of the buffer + */ +GUTHTHILA_EXPORT unsigned int GUTHTHILA_CALL +guththila_get_memory_buffer_size( + guththila_xml_writer_t * wr, + const axutil_env_t * env); + +/* + * Free the writer. + * @param wr pointer to the writer + * @param env pointer to the environment + */ +GUTHTHILA_EXPORT void GUTHTHILA_CALL guththila_xml_writer_free( + guththila_xml_writer_t * wr, + const axutil_env_t * env); +/* + * Get the prefix for the namespace. + * @param wr pointer to the writer + * @namespace namespace uri + * @param env pointer to the environment + * @return prefix for the namspace uri + */ +GUTHTHILA_EXPORT char *GUTHTHILA_CALL guththila_get_prefix_for_namespace( + guththila_xml_writer_t * wr, + char *namespace, + const axutil_env_t * env); + +EXTERN_C_END() +#endif diff --git a/guththila/samples/guththila_main.c b/guththila/samples/guththila_main.c new file mode 100644 index 0000000..687e490 --- /dev/null +++ b/guththila/samples/guththila_main.c @@ -0,0 +1,186 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "guththila.h" +#include "guththila_defines.h" + +int +main( + int argc, + char *argv[]) +{ + int c; + axutil_allocator_t *allocator; + guththila_reader_t *red; + axutil_env_t *environment; + guththila_t *parser; + char *xml_buffer; + allocator = axutil_allocator_init(NULL); + xml_buffer + = "addddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd123"; + environment = axutil_env_create(allocator); + + if(argc > 1) + red = guththila_reader_create_for_file(environment, argv[1]); + else + { + if(xml_buffer) + { + int size = 0; + size = strlen(xml_buffer); + red = guththila_reader_create_for_memory(environment, (void *)xml_buffer, size, NULL); + } + } + + parser = guththila_create(environment, red); + guththila_read(environment, parser); + + while((c = guththila_next(environment, parser)) != -1) + { + switch(c) + { + case GUTHTHILA_START_DOCUMENT: + { + int ix; + printf(" 0; ix--) + { + guththila_attribute_t *a; + char *p; + a = guththila_get_attribute(environment, parser); + p = guththila_get_attribute_name(environment, parser, a); + printf("%s=\"", p); + AXIS2_FREE(allocator, p); + p = guththila_get_attribute_value(environment, parser, a); + printf("%s\" ", p); + AXIS2_FREE(allocator, p); + guththila_attribute_free(environment, a); + } + printf("?>\n"); + } + break; + case GUTHTHILA_START_ELEMENT: + case GUTHTHILA_EMPTY_ELEMENT: + { + int ia; + int d; + char *p; + guththila_depth_t *depth; + + printf("<"); + p = guththila_get_prefix(environment, parser); + if(p) + { + printf("%s:", p); + AXIS2_FREE(allocator, p); + } + p = guththila_get_name(environment, parser); + printf("%s", p); + AXIS2_FREE(allocator, p); + + ia = guththila_get_attribute_count(environment, parser); + for(; ia > 0; ia--) + { + /* p = guththila_get_attribute_prefix_by_number + (parser, ia); */ + p = guththila_get_attribute_prefix_by_number(environment, parser, ia); + if(p) + { + printf(" %s:", p); + AXIS2_FREE(allocator, p); + p = guththila_get_attribute_name_by_number(environment, parser, ia); + printf("%s=\"", p); + AXIS2_FREE(allocator, p); + p = guththila_get_attribute_value_by_number(environment, parser, ia); + printf("%s\"", p); + AXIS2_FREE(allocator, p); + } + else + { + p = guththila_get_attribute_name_by_number(environment, parser, ia); + printf(" %s=\"", p); + AXIS2_FREE(allocator, p); + p = guththila_get_attribute_value_by_number(environment, parser, ia); + printf("%s\"", p); + AXIS2_FREE(allocator, p); + } + } + depth = (guththila_depth_t *)axutil_stack_get(parser->dep, environment); + d = depth->count; + for(; d > 0; d--) + { + p = guththila_get_namespace_prefix_by_number(environment, parser, d); + if(strncmp(p, "xmlns", 5)) + { + printf(" xmlns:"); + printf("%s=\"", p); + } + else + printf(" xmlns=\""); + AXIS2_FREE(allocator, p); + p = guththila_get_namespace_uri_by_number(environment, parser, d); + printf("%s\"", p); + AXIS2_FREE(allocator, p); + } + if(parser->guththila_event == GUTHTHILA_START_ELEMENT) + printf(">"); + else if(parser->guththila_event == GUTHTHILA_EMPTY_ELEMENT) + printf("/>"); + else + printf("error \n"); + + } + break; + case GUTHTHILA_END_ELEMENT: + { + char *p; + printf(""); + } + break; + case GUTHTHILA_CHARACTER: + { + char *p = NULL; + p = guththila_get_value(environment, parser); + /* if (!parser->is_whitespace) */ + /* { */ + /* printf(p); */ + /* } */ + printf("%s", p); + AXIS2_FREE(allocator, p); + } + break; + case GUTHTHILA_COMMENT: + break; + }; + } + guththila_reader_free(environment, red); + guththila_free(environment, parser); + axutil_env_free(environment); + return 0; +} diff --git a/guththila/samples/guththila_writer_main.c b/guththila/samples/guththila_writer_main.c new file mode 100644 index 0000000..9dc1218 --- /dev/null +++ b/guththila/samples/guththila_writer_main.c @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#define MAXA 100000 +int +main( + int argc, + char *argv[]) +{ + char *t; + axutil_allocator_t *allocator; + axutil_env_t *env; + guththila_t *parser; + char *xml = NULL; + FILE *file = NULL; + allocator = axutil_allocator_init(NULL); + env = axutil_env_create(allocator); + parser = guththila_create(env, NULL); + guththila_create_xml_stream_writer_for_memory(env, parser); + guththila_write_start_element(env, parser, "two"); + guththila_write_default_namespace(env, parser, "http://another.host.com"); + guththila_write_start_element_with_prefix_and_namespace(env, parser, "ws", + "http://www.wso2.org", "wso2"); + guththila_write_start_element_with_prefix(env, parser, "ws", "stacks"); + guththila_write_attribute_with_prefix(env, parser, "ws", "stack", "axis2"); + guththila_write_characters(env, parser, + "testadfjaldjf;ajf;lkajdfa;lkjfd;ajdf11111111111122334455"); + guththila_write_end_document(env, parser); + + xml = (char *)AXIS2_MALLOC(env->allocator, MAXA + 1); + memset(xml, 0, MAXA + 1); + if(!argv[1]) + { + file = fopen("/home/dinesh/tmp/mbox_backup/mbox.archived", "r"); + } + else + file = fopen(argv[1], "r"); + + if(file) + fread(xml, 1, MAXA, file); + + guththila_write_to_buffer(env, parser, xml); + t = guththila_writer_get_buffer(env, parser->xsw->writer); + printf("%s \n", t); + free(xml); + fclose(file); + guththila_xml_writer_free(env, parser); + guththila_free(env, parser); + axutil_env_free(env); + return 0; +} diff --git a/guththila/src/Makefile.am b/guththila/src/Makefile.am new file mode 100644 index 0000000..f738e48 --- /dev/null +++ b/guththila/src/Makefile.am @@ -0,0 +1,18 @@ +lib_LTLIBRARIES = libguththila.la + +libguththila_la_LDFLAGS = -version-info $(VERSION_NO) + +libguththila_la_SOURCES = guththila_buffer.c \ + guththila_namespace.c \ + guththila_token.c \ + guththila_reader.c \ + guththila_attribute.c \ + guththila_xml_parser.c \ + guththila_stack.c \ + guththila_xml_writer.c + +libguththila_la_LIBADD = ../../util/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../util/include + diff --git a/guththila/src/guththila_attribute.c b/guththila/src/guththila_attribute.c new file mode 100644 index 0000000..f13ca34 --- /dev/null +++ b/guththila/src/guththila_attribute.c @@ -0,0 +1,144 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include +#include +#include + +int GUTHTHILA_CALL +guththila_attr_list_grow( + guththila_attr_list_t * at_list, + int addition, + const axutil_env_t * env) +{ + int i = 0; + + if(addition > 0 || (addition < 0 && at_list->capacity + addition > 0 && at_list->capacity + + addition >= at_list->size)) + { + at_list->list = (guththila_attr_t *)realloc(at_list->list, sizeof(guththila_attr_t) + * (at_list->capacity + addition)); + + if(at_list->list) + { + for(i = at_list->capacity; i < at_list->capacity + addition; i++) + { + guththila_stack_push(&at_list->fr_stack, at_list->list + i, env); + } + + at_list->capacity += addition; + } + else + { + return GUTHTHILA_FAILURE; + } + } + return 0; +} + +guththila_attr_list_t *GUTHTHILA_CALL +guththila_attr_list_create( + const axutil_env_t * env) +{ + int i = 0; + guththila_attr_list_t * at_list = (guththila_attr_list_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_attr_list_t)); + + if(!at_list) + return NULL; + + at_list->list = (guththila_attr_t *)AXIS2_MALLOC(env->allocator, sizeof(guththila_attr_t) + * GUTHTHILA_ATTR_DEF_SIZE); + + if(at_list->list && guththila_stack_init(&at_list->fr_stack, env)) + { + at_list->capacity = GUTHTHILA_ATTR_DEF_SIZE; + at_list->size = 0; + for(i = 0; i < GUTHTHILA_ATTR_DEF_SIZE; i++) + { + guththila_stack_push(&at_list->fr_stack, at_list->list + i, env); + } + return at_list; + } + return NULL; +} + +int GUTHTHILA_CALL +guththila_attr_list_init( + guththila_attr_list_t * at_list, + const axutil_env_t * env) +{ + int i = 0; + at_list->list = (guththila_attr_t *)AXIS2_MALLOC(env->allocator, sizeof(guththila_attr_t) + * GUTHTHILA_ATTR_DEF_SIZE); + + if(at_list->list && guththila_stack_init(&at_list->fr_stack, env)) + { + at_list->capacity = GUTHTHILA_ATTR_DEF_SIZE; + at_list->size = 0; + for(i = 0; i < GUTHTHILA_ATTR_DEF_SIZE; i++) + { + guththila_stack_push(&at_list->fr_stack, at_list->list + i, env); + } + return GUTHTHILA_SUCCESS; + } + return GUTHTHILA_FAILURE; +} + +guththila_attr_t *GUTHTHILA_CALL +guththila_attr_list_get( + guththila_attr_list_t * at_list, + const axutil_env_t * env) +{ + if(at_list->fr_stack.top > 0 || guththila_attr_list_grow(at_list, GUTHTHILA_ATTR_DEF_SIZE, env)) + { + return guththila_stack_pop(&at_list->fr_stack, env); + } + + return NULL; +} + +int GUTHTHILA_CALL +guththila_attr_list_release( + guththila_attr_list_t * at_list, + guththila_attr_t * attr, + const axutil_env_t * env) +{ + + return guththila_stack_push(&at_list->fr_stack, attr, env); + +} + +void GUTHTHILA_CALL +msuila_attr_list_free_data( + guththila_attr_list_t * at_list, + const axutil_env_t * env) +{ + AXIS2_FREE(env->allocator, at_list->list); + guththila_stack_un_init(&at_list->fr_stack, env); +} + +void GUTHTHILA_CALL +guththila_attr_list_free( + guththila_attr_list_t * at_list, + const axutil_env_t * env) +{ + AXIS2_FREE(env->allocator, at_list->list); + guththila_stack_un_init(&at_list->fr_stack, env); + AXIS2_FREE(env->allocator, at_list); +} diff --git a/guththila/src/guththila_buffer.c b/guththila/src/guththila_buffer.c new file mode 100644 index 0000000..77f97f4 --- /dev/null +++ b/guththila/src/guththila_buffer.c @@ -0,0 +1,134 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include +#include + +int GUTHTHILA_CALL +guththila_buffer_init( + guththila_buffer_t * buffer, + int size, + const axutil_env_t * env) +{ + + buffer->type = GUTHTHILA_MULTIPLE_BUFFER; + buffer->data_size = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) + * GUTHTHILA_BUFFER_NUMBER_OF_BUFFERS); + buffer->buffs_size = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) + * GUTHTHILA_BUFFER_NUMBER_OF_BUFFERS); + buffer->buff = (guththila_char_t **)AXIS2_MALLOC(env->allocator, sizeof(guththila_char_t *) + * GUTHTHILA_BUFFER_NUMBER_OF_BUFFERS); + buffer->cur_buff = -1; + buffer->pre_tot_data = 0; + buffer->no_buffers = GUTHTHILA_BUFFER_NUMBER_OF_BUFFERS; + buffer->xml = NULL; + if(size > 0) + { + buffer->buff[0] = (guththila_char_t *)AXIS2_MALLOC(env->allocator, sizeof(guththila_char_t) + * size); + buffer->data_size[0] = 0; + buffer->buffs_size[0] = size; + buffer->cur_buff = 0; + } + return GUTHTHILA_SUCCESS; +} + +int GUTHTHILA_CALL +guththila_buffer_un_init( + guththila_buffer_t * buffer, + const axutil_env_t * env) +{ + int i = 0; + + if(buffer->type == GUTHTHILA_SINGLE_BUFFER && buffer->buff && buffer->cur_buff == 0) + { + + if(buffer->buffs_size) + AXIS2_FREE(env->allocator, buffer->buffs_size); + if(buffer->data_size) + AXIS2_FREE(env->allocator, buffer->data_size); + if(buffer->xml) + AXIS2_FREE(env->allocator, buffer->xml); + + AXIS2_FREE(env->allocator, buffer->buff); + + } + else if(buffer->type == GUTHTHILA_MULTIPLE_BUFFER && buffer->buff) + { + for(i = 0; i <= buffer->cur_buff; i++) + { + AXIS2_FREE(env->allocator, buffer->buff[i]); + } + if(buffer->xml) + AXIS2_FREE(env->allocator, buffer->xml); + AXIS2_FREE(env->allocator, buffer->buff); + if(buffer->data_size) + AXIS2_FREE(env->allocator, buffer->data_size); + if(buffer->buffs_size) + AXIS2_FREE(env->allocator, buffer->buffs_size); + } + return GUTHTHILA_SUCCESS; +} + +int GUTHTHILA_CALL +guththila_buffer_init_for_buffer( + guththila_buffer_t * buffer, + char *buff, + int size, + const axutil_env_t * env) +{ + buffer->type = GUTHTHILA_SINGLE_BUFFER; + buffer->buff + = (char **)AXIS2_MALLOC(env->allocator, sizeof(char *) * GUTHTHILA_BUFFER_DEF_SIZE); + buffer->buff[0] = buff; + buffer->cur_buff = 0; + buffer->buffs_size = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) + * GUTHTHILA_BUFFER_DEF_SIZE); + buffer->buffs_size[0] = size; + buffer->pre_tot_data = 0; + buffer->data_size = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) + * GUTHTHILA_BUFFER_DEF_SIZE); + buffer->data_size[0] = size; + buffer->no_buffers = 1; + buffer->xml = NULL; + return GUTHTHILA_SUCCESS; +} + +void *GUTHTHILA_CALL +guththila_buffer_get( + guththila_buffer_t * buffer, + const axutil_env_t * env) +{ + size_t size = 0, current_size = 0; + int i = 0; + + for(i = 0; i <= buffer->cur_buff; i++) + { + size += buffer->data_size[i]; + } + buffer->xml = (char *)AXIS2_MALLOC(env->allocator, sizeof(char) * (size + 1)); + for(i = 0; i <= buffer->cur_buff; i++) + { + memcpy(buffer->xml + current_size, buffer->buff[i], buffer->data_size[i]); + current_size += buffer->data_size[i]; + } + + buffer->xml[current_size] = '\0'; + return buffer->xml; +} + diff --git a/guththila/src/guththila_namespace.c b/guththila/src/guththila_namespace.c new file mode 100644 index 0000000..7cd9a50 --- /dev/null +++ b/guththila/src/guththila_namespace.c @@ -0,0 +1,139 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include +#include +#include + +int GUTHTHILA_CALL +guththila_namespace_list_grow( + guththila_namespace_list_t * namesp_list, + int addition, + const axutil_env_t * env) +{ + int i = 0; + if(addition > 0 || (addition < 0 && namesp_list->capacity + addition > 0 + && namesp_list->capacity + addition >= namesp_list->size)) + { + namesp_list->list = (guththila_namespace_t *)realloc(namesp_list->list, + sizeof(guththila_namespace_t) * (namesp_list->capacity + addition)); + if(namesp_list->list) + { + for(i = namesp_list->capacity; i < namesp_list->capacity + addition; i++) + { + guththila_stack_push(&namesp_list->fr_stack, namesp_list->list + i, env); + } + namesp_list->capacity += addition; + } + else + { + return GUTHTHILA_FAILURE; + } + } + return 0; +} + +guththila_namespace_list_t *GUTHTHILA_CALL +guththila_namespace_list_create( + const axutil_env_t * env) +{ + int i = 0; + guththila_namespace_list_t * namesp_list = (guththila_namespace_list_t *)AXIS2_MALLOC( + env->allocator, sizeof(guththila_namespace_list_t)); + + if(!namesp_list) + return NULL; + + namesp_list->list = (guththila_namespace_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_namespace_t) * GUTHTHILA_NAMESPACE_DEF_SIZE); + + if(namesp_list->list && guththila_stack_init(&namesp_list->fr_stack, env)) + { + namesp_list->capacity = GUTHTHILA_NAMESPACE_DEF_SIZE; + namesp_list->size = 0; + for(i = 0; i < GUTHTHILA_NAMESPACE_DEF_SIZE; i++) + { + guththila_stack_push(&namesp_list->fr_stack, namesp_list->list + i, env); + } + return namesp_list; + } + return NULL; +} + +int GUTHTHILA_CALL +guththila_namespace_list_init( + guththila_namespace_list_t * namesp_list, + const axutil_env_t * env) +{ + int i = 0; + namesp_list->list = (guththila_namespace_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_namespace_t) * GUTHTHILA_NAMESPACE_DEF_SIZE); + if(namesp_list->list && guththila_stack_init(&namesp_list->fr_stack, env)) + { + namesp_list->capacity = GUTHTHILA_NAMESPACE_DEF_SIZE; + namesp_list->size = 0; + for(i = 0; i < GUTHTHILA_NAMESPACE_DEF_SIZE; i++) + { + guththila_stack_push(&namesp_list->fr_stack, namesp_list->list + i, env); + } + return GUTHTHILA_SUCCESS; + } + return GUTHTHILA_FAILURE; +} + +guththila_namespace_t *GUTHTHILA_CALL +guththila_namespace_list_get( + guththila_namespace_list_t *namesp_list, + const axutil_env_t * env) +{ + if(namesp_list->fr_stack.top > 0 || guththila_namespace_list_grow(namesp_list, + GUTHTHILA_NAMESPACE_DEF_SIZE, env)) + { + return guththila_stack_pop(&namesp_list->fr_stack, env); + } + return NULL; +} + +int GUTHTHILA_CALL +guththila_namespace_list_release( + guththila_namespace_list_t * namesp_list, + guththila_namespace_t * namespace, + const axutil_env_t * env) +{ + return guththila_stack_push(&namesp_list->fr_stack, namespace, env); +} + +void GUTHTHILA_CALL +msuila_namespace_list_free_data( + guththila_namespace_list_t * namesp_list, + const axutil_env_t * env) +{ + AXIS2_FREE(env->allocator, namesp_list->list); + guththila_stack_un_init(&namesp_list->fr_stack, env); +} + +void GUTHTHILA_CALL +guththila_namespace_list_free( + guththila_namespace_list_t * namesp_list, + const axutil_env_t * env) +{ + + guththila_stack_un_init(&namesp_list->fr_stack, env); + AXIS2_FREE(env->allocator, namesp_list->list); + AXIS2_FREE(env->allocator, namesp_list); +} diff --git a/guththila/src/guththila_reader.c b/guththila/src/guththila_reader.c new file mode 100644 index 0000000..bcb0efd --- /dev/null +++ b/guththila/src/guththila_reader.c @@ -0,0 +1,115 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include +GUTHTHILA_EXPORT guththila_reader_t * GUTHTHILA_CALL +guththila_reader_create_for_file( + guththila_char_t *file_name, + const axutil_env_t * env) +{ + guththila_reader_t * reader = NULL; + + FILE * f = NULL; + if(!file_name) + return NULL; + reader = (guththila_reader_t *)AXIS2_MALLOC(env->allocator, sizeof(guththila_reader_t)); + if(!reader) + return NULL; + f = fopen(file_name, "r"); + if(!f) + { + AXIS2_FREE(env->allocator, reader); + return NULL; + } + reader->fp = f; + reader->type = GUTHTHILA_FILE_READER; + return reader; +} + +GUTHTHILA_EXPORT guththila_reader_t * GUTHTHILA_CALL +guththila_reader_create_for_memory( + void *buffer, + int size, + const axutil_env_t * env) +{ + guththila_reader_t * reader = (guththila_reader_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_reader_t)); + if(reader) + { + reader->type = GUTHTHILA_MEMORY_READER; + reader->buff = buffer; + reader->buff_size = size; + reader->fp = NULL; + return reader; + } + return NULL; +} + +GUTHTHILA_EXPORT guththila_reader_t * GUTHTHILA_CALL +guththila_reader_create_for_io( + GUTHTHILA_READ_INPUT_CALLBACK input_read_callback, + void *ctx, + const axutil_env_t * env) +{ + guththila_reader_t * reader = (guththila_reader_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_reader_t)); + if(reader) + { + reader->input_read_callback = input_read_callback; + reader->context = ctx; + reader->type = GUTHTHILA_IO_READER; + return reader; + } + return NULL; +} +GUTHTHILA_EXPORT void GUTHTHILA_CALL +guththila_reader_free( + guththila_reader_t * r, + const axutil_env_t * env) +{ + if(r->type == GUTHTHILA_FILE_READER && r->fp) + { + fclose(r->fp); + } + if(r->type == GUTHTHILA_IO_READER && r->context) + { + AXIS2_FREE(env->allocator, r->context); + } + AXIS2_FREE(env->allocator, r); + +} +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_reader_read( + guththila_reader_t * r, + guththila_char_t * buffer, + int offset, + int length, + const axutil_env_t * env) +{ + int rt = r->type; + switch(rt) + { + case GUTHTHILA_FILE_READER: + return (int)fread(buffer + offset, 1, length, r->fp); + case GUTHTHILA_IO_READER: + return r->input_read_callback((buffer + offset), length, r->context); + default: + return 0; + } +} + diff --git a/guththila/src/guththila_stack.c b/guththila/src/guththila_stack.c new file mode 100644 index 0000000..fd629c1 --- /dev/null +++ b/guththila/src/guththila_stack.c @@ -0,0 +1,135 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include + +int GUTHTHILA_CALL +guththila_stack_init( + guththila_stack_t * stack, + const axutil_env_t * env) +{ + stack->top = 0; + stack->data = (void **)AXIS2_MALLOC(env->allocator, sizeof(void **) * GUTHTHILA_STACK_DEFAULT); + if(!stack->data) + { + return GUTHTHILA_FAILURE; + } + else + { + stack->max = GUTHTHILA_STACK_DEFAULT; + return GUTHTHILA_SUCCESS; + } +} + +void GUTHTHILA_CALL +guththila_stack_free( + guththila_stack_t * stack, + const axutil_env_t * env) +{ + if(stack->data) + AXIS2_FREE(env->allocator, stack->data); + AXIS2_FREE(env->allocator, stack); +} + +void GUTHTHILA_CALL +guththila_stack_un_init( + guththila_stack_t * stack, + const axutil_env_t * env) +{ + if(stack->data) + AXIS2_FREE(env->allocator, stack->data); +} + +void *GUTHTHILA_CALL +guththila_stack_pop( + guththila_stack_t * stack, + const axutil_env_t * env) +{ + if(stack->top > 0) + { + return stack->data[--(stack->top)]; + } + return NULL; +} + +int GUTHTHILA_CALL +guththila_stack_push( + guththila_stack_t * stack, + void *data, + const axutil_env_t * env) +{ + int top = stack->top++; + if(top >= stack->max) + { + void **temp = NULL; + int i = 0; + temp = (void **)AXIS2_MALLOC(env->allocator, sizeof(void **) * (stack->max *= 2)); + for(i = 0; i < top; ++i) + { + temp[i] = stack->data[i]; + } + AXIS2_FREE(env->allocator, stack->data); + stack->data = temp; + } + stack->data[top] = data; + return top; +} + +void *GUTHTHILA_CALL +guththila_stack_peek( + guththila_stack_t * stack, + const axutil_env_t * env) +{ + if(stack->top > 0) + { + return stack->data[stack->top - 1]; + } + else + { + return NULL; + } +} + +int GUTHTHILA_CALL +guththila_stack_del_top( + guththila_stack_t * stack, + const axutil_env_t * env) +{ + if(stack->top > 0) + { + AXIS2_FREE(env->allocator, stack->data[stack->top]); + return GUTHTHILA_SUCCESS; + } + return GUTHTHILA_FAILURE; +} + +int GUTHTHILA_CALL +guththila_stack_is_empty( + guththila_stack_t * stack, + const axutil_env_t * env) +{ + return stack->top == 0 ? 1 : 0; +} + +void *GUTHTHILA_CALL +guththila_stack_get_by_index( + guththila_stack_t * stack, + int index, + const axutil_env_t * env) +{ + return index < stack->top ? stack->data[index] : NULL; +} + diff --git a/guththila/src/guththila_token.c b/guththila/src/guththila_token.c new file mode 100644 index 0000000..6272850 --- /dev/null +++ b/guththila/src/guththila_token.c @@ -0,0 +1,221 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#define TOK_LIST_FREE(tok_list) \ + (if (tok_list) { AXIS2_FREE(tok_list)} ) + +#define TOK_LIST_SIZE(tok_list) (tok_list->size) + +int GUTHTHILA_CALL +guththila_tok_list_grow( + guththila_tok_list_t * tok_list, + const axutil_env_t * env) +{ + int i = 0; + + if(tok_list->cur_list < tok_list->no_list - 1) + { + int cur = ++tok_list->cur_list; + int cur_cap = tok_list->capacity[cur - 1] * 2; + guththila_token_t *list = (guththila_token_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_token_t) * cur_cap); + for(i = 0; i < cur_cap; ++i) + { + guththila_stack_push(&tok_list->fr_stack, &list[i], env); + } + tok_list->capacity[cur] = cur_cap; + tok_list->list[cur] = list; + return GUTHTHILA_SUCCESS; + } + else + { + guththila_token_t ** list = NULL; + int *capacity = NULL; + list = (guththila_token_t **)AXIS2_MALLOC(env->allocator, sizeof(guththila_token_t *) + * tok_list->no_list * 2); + capacity = (int *)AXIS2_MALLOC(env->allocator, sizeof(int) * tok_list->no_list * 2); + if(list) + { + int cur_list = tok_list->cur_list; + for(i = 0; i <= cur_list; ++i) + { + list[i] = tok_list->list[i]; + capacity[i] = tok_list->capacity[i]; + } + tok_list->no_list = tok_list->no_list * 2; + AXIS2_FREE(env->allocator, tok_list->list); + tok_list->list = list; + AXIS2_FREE(env->allocator, tok_list->capacity); + tok_list->capacity = capacity; + guththila_tok_list_grow(tok_list, env); + } + } + return GUTHTHILA_FAILURE; +} + +int GUTHTHILA_CALL +guththila_tok_list_init( + guththila_tok_list_t * tok_list, + const axutil_env_t * env) +{ + int i = 0; + tok_list->list = (guththila_token_t **)AXIS2_MALLOC(env->allocator, sizeof(guththila_token_t *) + * GUTHTHILA_TOK_DEF_LIST_SIZE); + if(tok_list->list && guththila_stack_init(&tok_list->fr_stack, env)) + { + tok_list->capacity = (int *)AXIS2_MALLOC(env->allocator, sizeof(int) + * GUTHTHILA_TOK_DEF_LIST_SIZE); + if(tok_list->capacity) + { + tok_list->no_list = GUTHTHILA_TOK_DEF_LIST_SIZE; + tok_list->list[0] = (guththila_token_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_token_t) * GUTHTHILA_TOK_DEF_SIZE); + for(i = 0; i < GUTHTHILA_TOK_DEF_SIZE; i++) + { + guththila_stack_push(&tok_list->fr_stack, &tok_list->list[0][i], env); + } + tok_list->capacity[0] = GUTHTHILA_TOK_DEF_SIZE; + tok_list->cur_list = 0; + tok_list->no_list = GUTHTHILA_TOK_DEF_LIST_SIZE; + return GUTHTHILA_SUCCESS; + } + } + return GUTHTHILA_FAILURE; +} + +void GUTHTHILA_CALL +guththila_tok_list_free( + guththila_tok_list_t * tok_list, + const axutil_env_t * env) +{ + int i = 0; + guththila_stack_un_init(&tok_list->fr_stack, env); + for(; i <= tok_list->cur_list; i++) + { + AXIS2_FREE(env->allocator, tok_list->list[i]); + } + AXIS2_FREE(env->allocator, tok_list->list); + AXIS2_FREE(env->allocator, tok_list->capacity); + AXIS2_FREE(env->allocator, tok_list); +} + +void GUTHTHILA_CALL +guththila_tok_list_free_data( + guththila_tok_list_t * tok_list, + const axutil_env_t * env) +{ + int i = 0; + guththila_stack_un_init(&tok_list->fr_stack, env); + for(; i <= tok_list->cur_list; i++) + { + AXIS2_FREE(env->allocator, tok_list->list[i]); + } + AXIS2_FREE(env->allocator, tok_list->capacity); + AXIS2_FREE(env->allocator, tok_list->list); +} + +guththila_token_t *GUTHTHILA_CALL +guththila_tok_list_get_token( + guththila_tok_list_t * tok_list, + const axutil_env_t * env) +{ + if(tok_list->fr_stack.top > 0 || guththila_tok_list_grow(tok_list, env)) + { + return guththila_stack_pop(&tok_list->fr_stack, env); + } + return NULL; +} + +int GUTHTHILA_CALL +guththila_tok_list_release_token( + guththila_tok_list_t * tok_list, + guththila_token_t * token, + const axutil_env_t * env) +{ + return guththila_stack_push(&tok_list->fr_stack, token, env); +} + +int GUTHTHILA_CALL +guththila_tok_str_cmp( + guththila_token_t * tok, + guththila_char_t *str, + size_t str_len, + const axutil_env_t * env) +{ + unsigned int i = 0; + if(tok->size != str_len) + return -1; + for(; i < tok->size; i++) + { + if(tok->start[i] != str[i]) + { + return -1; + } + } + return 0; +} + +int GUTHTHILA_CALL +guththila_tok_tok_cmp( + guththila_token_t * tok1, + guththila_token_t * tok2, + const axutil_env_t * env) +{ + unsigned int i = 0; + + if(tok1 && tok2) + { + if(tok1->size != tok2->size) + return -1; + for(; i < tok1->size; i++) + { + if(tok1->start[i] != tok2->start[i]) + { + return -1; + } + } + return 0; + } + return -1; +} + +void GUTHTHILA_CALL +guththila_set_token( + guththila_token_t* tok, + guththila_char_t* start, + short type, + int size, + int _start, + int last, + int ref, + const axutil_env_t* env) +{ + if(start) + { + tok->start = start; + tok->type = type; + tok->_start = _start; + tok->size = size; + tok->last = last; + tok->ref = ref; + } +} diff --git a/guththila/src/guththila_xml_parser.c b/guththila/src/guththila_xml_parser.c new file mode 100644 index 0000000..7c636a5 --- /dev/null +++ b/guththila/src/guththila_xml_parser.c @@ -0,0 +1,1792 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include +#include +#include + +#define GUTHTHILA_VALIDATION_PARSER + +/* + * Read the next char from the reader and return it. + */ +static int +guththila_next_char( + guththila_t * m, + const axutil_env_t * env); + +/* part of guththila_next_char method. this was included as macro for performance. 99% of the time + * following will be called, so having it as next_char method is very expensive (method calling + * overhead is higher) so, common case is checked as part of the macro and if not satisfied, method + * is called + */ +#define GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c)\ +{\ + int result_found = 0;\ + if(!buffer)\ + {\ + if(m->reader->type == GUTHTHILA_MEMORY_READER)\ + {\ + buffer = m->buffer.buff[0];\ + data_size = m->buffer.data_size[0];\ + previous_size = 0;\ + }\ + else\ + {\ + if(m->buffer.cur_buff != -1)\ + {\ + buffer = m->buffer.buff[m->buffer.cur_buff];\ + data_size = GUTHTHILA_BUFFER_CURRENT_DATA_SIZE(m->buffer);\ + previous_size = GUTHTHILA_BUFFER_PRE_DATA_SIZE(m->buffer);\ + }\ + else\ + {\ + c = guththila_next_char(m, env);\ + if(c < 0)\ + return -1;\ + result_found = 1;\ + }\ + }\ + }\ +\ + if(!result_found)\ + {\ + size_t index = m->next++ - previous_size;\ + if(index < data_size)\ + {\ + c = buffer[index];\ + }\ + else\ + {\ + buffer = NULL;\ + data_size = -1;\ + --(m->next);\ + if(m->reader->type == GUTHTHILA_MEMORY_READER)\ + {\ + return -1;\ + }\ + else\ + {\ + c = guththila_next_char(m, env);\ + if(c < 0)\ + return -1;\ + }\ + }\ + }\ +} + +/* + * Read the specified number of characters at once. + */ +static int +guththila_next_no_char( + guththila_t * m, + int eof, + guththila_char_t *bytes, + size_t no, + const axutil_env_t * env); + +/* + * Close a token that is opened previously. + */ +static void +guththila_token_close( + guththila_t * m, + guththila_token_t * tok, + int tok_type, + int referer, + const axutil_env_t * env); + +/* + * Process the XMl declaration part of a XML document. + */ +static int +guththila_process_xml_dec( + guththila_t * m, + const axutil_env_t * env); + +/* + * Return non zero value if the given argument is a space. (c < 0x21) is added to improve the + * performance. common case is printable characters. and if given character is printable, we can + * return false immediately. + */ +#define GUTHTHILA_IS_SPACE(c) ((c < 0x21) && (c == 0x20 || c == 0xD || c == 0xA || c == 0x9)) + +/* + * Read characters until all the white spaces are read. + */ +#define GUTHTHILA_SKIP_SPACES(m, c, buffer, data_size, previous_size, _env)while(GUTHTHILA_IS_SPACE(c)){GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, _env, c);} + + +#define GUTHTHILA_XML_NAME "xml" + +#define GUTHTHILA_XML_URI "http://www.w3.org/XML/1998/namespace" + +/* + * Open a token. When we open a token we don't know it's type. We only + * set the starting values. + */ +#define GUTHTHILA_TOKEN_OPEN(m, tok, _env) \ + m->temp_tok = guththila_tok_list_get_token(&m->tokens, _env); \ + m->temp_tok->type = _Unknown; \ + m->temp_tok->_start = (int)m->next; \ + m->last_start = (int)m->next - 1; +/* We are sure that the difference lies within the int range */ + +/* + * Read until we met a = character. + */ +#define GUTHTHILA_PROCESS_EQU(m, c, ic, buffer, data_size, previous_size, _env)\ +{\ + GUTHTHILA_SKIP_SPACES(m, c, buffer, data_size, previous_size, _env); \ + if (c == '=')\ + { \ + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, _env, ic); \ + GUTHTHILA_SKIP_SPACES(m, ic, buffer, data_size, previous_size, _env); \ + }\ +} + +/* + * Initialize a attribute to the values given. + */ +#define GUTHTHILA_ATTRIBUTE_INITIALIZE(_attr, _pref, _name, _val) \ + (_attr->pref = (_pref)); \ + (_attr->name = (_name)); \ + (_attr->val = (_val)); + +/* + * Initialize namespace to the values given. + */ +#define GUTHTHILA_NAMESPACE_INITIALIZE(_namesp, _name, _uri) \ + (_namesp->name = _name); \ + (_namesp->uri = _uri); + +/* + * Determine weahter a given character is a valid starting char for a xml name. + */ +#define GUTHTHILA_IS_VALID_STARTING_CHAR(c) (isalpha(c) || '_' == c || ':' == c) + +/* + * Initialize the variables in the guththila_t structure. + */ +#define GUTHTHILA_VARIABLE_INITIALZE(m) \ + m->temp_prefix = NULL; \ + m->temp_name = NULL; \ + m->temp_tok = NULL; \ + if (m->value) guththila_tok_list_release_token(&m->tokens, m->value, env); \ + m->name = NULL; \ + m->prefix = NULL; \ + m->value = NULL; + +/* + * Initialize the guththila_t structure with the reader. + * All the values will be set to default values. + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_init( + guththila_t * m, + void *reader, + const axutil_env_t * env) +{ + guththila_token_t* temp_name = NULL; + guththila_token_t* temp_tok = NULL; + guththila_elem_namesp_t* e_namesp = NULL; + + if(!((guththila_reader_t *)reader)) + return GUTHTHILA_FAILURE; + m->reader = (guththila_reader_t *)reader; + if(!guththila_tok_list_init(&m->tokens, env)) + { + return GUTHTHILA_FAILURE; + } + if(m->reader->type == GUTHTHILA_MEMORY_READER) + { + guththila_buffer_init_for_buffer(&m->buffer, m->reader->buff, m->reader->buff_size, env); + } + else if(m->reader->type == GUTHTHILA_FILE_READER || m->reader->type == GUTHTHILA_IO_READER) + { + guththila_buffer_init(&m->buffer, 0, env); + } + guththila_stack_init(&m->elem, env); + guththila_stack_init(&m->attrib, env); + guththila_stack_init(&m->namesp, env); + temp_name = guththila_tok_list_get_token(&m->tokens, env); + temp_tok = guththila_tok_list_get_token(&m->tokens, env); + if(temp_tok && temp_name) + { + guththila_set_token(temp_name, GUTHTHILA_XML_NAME, 0, (int)strlen(GUTHTHILA_XML_NAME), 1, + 0, 0, env); + + guththila_set_token(temp_tok, GUTHTHILA_XML_URI, 0, (int)strlen(GUTHTHILA_XML_URI), 1, 0, + 0, env); + + } + + e_namesp = (guththila_elem_namesp_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_elem_namesp_t)); + if(e_namesp && temp_tok && temp_name) + { + e_namesp->namesp = (guththila_namespace_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_namespace_t) * GUTHTHILA_NAMESPACE_DEF_SIZE); + } + if(e_namesp->namesp) + { + e_namesp->no = 1; + e_namesp->size = GUTHTHILA_NAMESPACE_DEF_SIZE; + e_namesp->namesp[0].name = temp_name; + e_namesp->namesp[0].uri = temp_tok; + guththila_stack_push(&m->namesp, e_namesp, env); + } + else + { + if(temp_name) + { + AXIS2_FREE(env->allocator, temp_name); + temp_name = NULL; + } + if(temp_tok) + { + AXIS2_FREE(env->allocator, temp_tok); + temp_tok = NULL; + } + if(e_namesp) + { + AXIS2_FREE(env->allocator, e_namesp); + e_namesp = NULL; + } + return GUTHTHILA_FAILURE; + } + m->name = NULL; + m->prefix = NULL; + m->value = NULL; + m->status = S_1; + m->guththila_event = -1; + m->next = 0; + m->last_start = -1; + m->temp_name = NULL; + m->temp_prefix = NULL; + m->temp_tok = NULL; + return GUTHTHILA_SUCCESS; +} + +/* + * Uninitialize a guththila_t structure. This method deallocates all the + * resources that are held in the guththila_t structure. + */ +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_un_init( + guththila_t * m, + const axutil_env_t * env) +{ + int size = 0, i = 0, j = 0; + guththila_attr_t * attr = NULL; + guththila_element_t* elem = NULL; + guththila_elem_namesp_t * e_namesp = NULL; + + if(m->prefix) + { + guththila_tok_list_release_token(&m->tokens, m->prefix, env); + } + if(m->name) + { + guththila_tok_list_release_token(&m->tokens, m->name, env); + } + if(m->value) + { + guththila_tok_list_release_token(&m->tokens, m->value, env); + } + if(m->temp_tok) + { + guththila_tok_list_release_token(&m->tokens, m->temp_tok, env); + } + if(m->temp_name) + { + guththila_tok_list_release_token(&m->tokens, m->temp_name, env); + } + if(m->temp_prefix) + { + guththila_tok_list_release_token(&m->tokens, m->temp_prefix, env); + } + size = GUTHTHILA_STACK_SIZE(m->attrib); + for(i = 0; i < size; i++) + { + attr = (guththila_attr_t *)guththila_stack_pop(&m->attrib, env); + if(attr) + { + if(attr->name) + guththila_tok_list_release_token(&m->tokens, attr->name, env); + if(attr->pref) + guththila_tok_list_release_token(&m->tokens, attr->pref, env); + AXIS2_FREE(env->allocator, attr); + } + } + guththila_stack_un_init(&m->attrib, env); + +#ifndef GUTHTHILA_VALIDATION_PARSER + guththila_namespace_t * namesp = NULL; + + size = GUTHTHILA_STACK_SIZE(m->namesp); + for (i = 0; i < size; i++) + { + namesp = + (guththila_namespace_t *) guththila_stack_pop(&m->namesp, env); + if (namesp) + { + if (namesp->name) + guththila_tok_list_release_token(&m->tokens, namesp->name, env); + if (namesp->uri) + guththila_tok_list_release_token(&m->tokens, namesp->uri, env); + AXIS2_FREE(env->allocator, namesp); + } + } +#else + + size = GUTHTHILA_STACK_SIZE(m->namesp); + for(i = 0; i < size; i++) + { + e_namesp = (guththila_elem_namesp_t *)guththila_stack_pop(&m->namesp, env); + if(e_namesp) + { + for(j = 0; j < e_namesp->no; j++) + { + if(e_namesp->namesp[j].name) + { + guththila_tok_list_release_token(&m->tokens, e_namesp->namesp[j].name, env); + } + if(e_namesp->namesp[j].uri) + { + guththila_tok_list_release_token(&m->tokens, e_namesp->namesp[j].uri, env); + } + } + AXIS2_FREE(env->allocator, e_namesp->namesp); + AXIS2_FREE(env->allocator, e_namesp); + } + } +#endif + + size = GUTHTHILA_STACK_SIZE(m->elem); + for(i = 0; i < size; i++) + { + elem = (guththila_element_t *)guththila_stack_pop(&m->elem, env); + if(elem) + { + if(elem->name) + guththila_tok_list_release_token(&m->tokens, elem->name, env); + if(elem->prefix) + guththila_tok_list_release_token(&m->tokens, elem->prefix, env); + AXIS2_FREE(env->allocator, elem); + } + } + guththila_stack_un_init(&m->elem, env); + guththila_stack_un_init(&m->namesp, env); + guththila_tok_list_free_data(&m->tokens, env); + guththila_buffer_un_init(&m->buffer, env); + AXIS2_FREE(env->allocator, m); + return GUTHTHILA_SUCCESS; +} + +/* + * Replace the references with the corresponding actual values. + */ +static void +guththila_token_evaluate_references( + guththila_token_t * tok) +{ + size_t size = tok->size; + guththila_char_t *start = tok->start; + guththila_char_t *pos = NULL; + size_t i, j; + + pos = (guththila_char_t *)memchr(start, '&', size); + if(pos) + { + i = pos - start; + } + else + { + i = size; + } + /*for(i = 0; (i < size) && (start[i] != '&'); i++) + ;*/ + if(i < size) + { + j = i; + while(i < size) + { + if(((i + 3) < size) && (start[i + 1] == 'g') && (start[i + 2] == 't') && (start[i + 3] + == ';')) + { + /* replace first char of sequence with > */ + start[j++] = '>'; + /* skip remainder of sequence */ + i += 4; + } + else if(((i + 3) < size) && (start[i + 1] == 'l') && (start[i + 2] == 't') && (start[i + + 3] == ';')) + { + /* replace first char of sequence with < */ + start[j++] = '<'; + /* skip remainder of sequence */ + i += 4; + } + else if(((i + 4) < size) && (start[i + 1] == 'a') && (start[i + 2] == 'm') && (start[i + + 3] == 'p') && (start[i + 4] == ';')) + { + /* replace first char of sequence with & */ + start[j++] = '&'; + /* skip remainder of sequence */ + i += 5; + } + else if(((i + 5) < size) && (start[i + 1] == 'a') && (start[i + 2] == 'p') && (start[i + + 3] == 'o') && (start[i + 4] == 's') && (start[i + 5] == ';')) + { + /* replace first char of sequence with ' */ + start[j++] = '\''; + /* skip remainder of sequence */ + i += 6; + } + else if(((i + 5) < size) && (start[i + 1] == 'q') && (start[i + 2] == 'u') && (start[i + + 3] == 'o') && (start[i + 4] == 't') && (start[i + 5] == ';')) + { + /* replace first char of sequence with " */ + start[j++] = '\"'; + /* skip remainder of sequence */ + i += 6; + } + else + { + /* ampersand does not start a sequence; + skip it and continue scanning */ + /* could insert character reference decoding here */ + start[j++] = start[i++]; + } + /* copy characters downward until the next ampersand */ + for(; (i < size) && ('&' != (start[j] = start[i])); i++, j++) + ; + } + tok->size = j; + } +} + +/* + * Close a token. This method accepts the type of the token as a parameter. + */ +static void +guththila_token_close( + guththila_t * m, + guththila_token_t * tok, + int tok_type, + int referer, + const axutil_env_t * env) +{ + guththila_attr_t * attr = NULL; + guththila_element_t * elem = NULL; + guththila_elem_namesp_t * e_namesp = NULL; + guththila_namespace_t * namesp; + int i = 0; + /* We are sure that the difference lies within the short range */ + m->temp_tok->type = (short)tok_type; + m->temp_tok->size = m->next - m->temp_tok->_start; + m->temp_tok->start = GUTHTHILA_BUF_POS(m->buffer, m->next - 1) - m->temp_tok->size; + m->temp_tok->ref = referer; + m->last_start = -1; + switch(tok_type) + { + case _attribute_name: + m->temp_name = m->temp_tok; + m->temp_tok = NULL; + break; + case _char_data: + m->value = m->temp_tok; + m->temp_tok = NULL; + break; + case _text_data: + guththila_token_evaluate_references(m->temp_tok); + m->value = m->temp_tok; + m->temp_tok = NULL; + break; + case _attribute_value: + guththila_token_evaluate_references(m->temp_tok); + /* Chech weather we are at a xml namespace declaration */ + if((m->temp_prefix && (guththila_tok_str_cmp(m->temp_prefix, "xmlns", 5u, env) == 0)) + || (guththila_tok_str_cmp(m->temp_name, "xmlns", 5u, env) == 0)) + /*checks inside the m->temp_name to parse the default namespace*/ + /*checks inside the m->temp_prefix to parse namespace with prefix*/ + { +#ifndef GUTHTHILA_VALIDATION_PARSER + namesp = + (guththila_namespace_t *) + AXIS2_MALLOC(sizeof(guththila_namespace_t)); + GUTHTHILA_NAMESPACE_INITIALIZE(namesp, m->temp_name, m->temp_tok); + guththila_stack_push(&m->namesp, namesp); +#else + elem = (guththila_element_t *)guththila_stack_peek(&m->elem, env); + /* This is the first namespace */ + if(elem && !elem->is_namesp) + { + e_namesp = (guththila_elem_namesp_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_elem_namesp_t)); + if(e_namesp) + { + e_namesp->namesp = (guththila_namespace_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_namespace_t) * GUTHTHILA_NAMESPACE_DEF_SIZE); + if(e_namesp->namesp) + { + e_namesp->no = 1; + e_namesp->size = GUTHTHILA_NAMESPACE_DEF_SIZE; + e_namesp->namesp[0].name = m->temp_name; + e_namesp->namesp[0].uri = m->temp_tok; + guththila_stack_push(&m->namesp, e_namesp, env); + elem->is_namesp = 1; + } + else + { + AXIS2_FREE(env->allocator, e_namesp); + e_namesp = NULL; + } + } + } + /* Already there is a namespace */ + else if(elem && elem->is_namesp) + { + e_namesp = (guththila_elem_namesp_t *)guththila_stack_peek(&m->namesp, env); + /* if we have enough space allocated */ + if(e_namesp->no < e_namesp->size) + { + e_namesp->namesp[e_namesp->no].name = m->temp_name; + e_namesp->namesp[e_namesp->no].uri = m->temp_tok; + e_namesp->no++; + } + else + { + namesp = (guththila_namespace_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_namespace_t) * e_namesp->size * 2); + if(namesp) + { + for(i = 0; i < e_namesp->no; i++) + { + namesp[i].name = e_namesp->namesp[i].name; + namesp[i].uri = e_namesp->namesp[i].uri; + } + AXIS2_FREE(env->allocator, e_namesp->namesp); + e_namesp->namesp = namesp; + e_namesp->size *= 2; + + e_namesp->namesp[e_namesp->no].name = m->temp_name; + e_namesp->namesp[e_namesp->no].uri = m->temp_tok; + e_namesp->no++; + } + } + } +#endif + } + else + { + /* It is just a attribute */ + attr = (guththila_attr_t *)AXIS2_MALLOC(env->allocator, sizeof(guththila_attr_t)); + + GUTHTHILA_ATTRIBUTE_INITIALIZE(attr, + m->temp_prefix, + m->temp_name, + m->temp_tok); + guththila_stack_push(&m->attrib, attr, env); + } + m->temp_prefix = NULL; + m->temp_name = NULL; + m->temp_tok = NULL; + break; + case _prefix: + m->temp_prefix = m->temp_tok; + m->temp_tok = NULL; + break; + default: + m->prefix = m->temp_prefix; + m->name = m->temp_tok; + m->temp_tok = NULL; + m->temp_prefix = NULL; + break; + } +} + +int GUTHTHILA_CALL +guththila_validate_namespaces( + guththila_t *m, + const axutil_env_t *env) +{ + int size = 0, i = 0, nmsp_no = 0, j = 0, k = 0; + int namesp_found = GUTHTHILA_FALSE; + guththila_elem_namesp_t *e_namesp = NULL; + + size = GUTHTHILA_STACK_SIZE(m->attrib); + /* Loop through all the attributes */ + for(i = 0; i < size; i++) + { + guththila_attr_t *attr = (guththila_attr_t *)guththila_stack_get_by_index(&m->attrib, i, + env); + if(attr && attr->pref) + { + /* We have a attribute prefix. Need to validate the prefix */ + nmsp_no = GUTHTHILA_STACK_SIZE(m->namesp); + for(j = nmsp_no - 1; j >= 0; j--) + { + e_namesp = (guththila_elem_namesp_t *)guththila_stack_get_by_index(&m->namesp, j, + env); + for(k = 0; k < e_namesp->no; k++) + { + if(!guththila_tok_tok_cmp(e_namesp->namesp[k].name, attr->pref, env)) + { + namesp_found = GUTHTHILA_TRUE; + j = -1; /* force exit from second for loop */ + break; + } + } + } + if(!namesp_found) + return GUTHTHILA_FAILURE; + } + } + /* If the element has a prefix. Need to validate the prefix*/ + if(m->prefix) + { + namesp_found = AXIS2_FALSE; + nmsp_no = GUTHTHILA_STACK_SIZE(m->namesp); + for(j = nmsp_no - 1; j >= 0; j--) + { + e_namesp = (guththila_elem_namesp_t *)guththila_stack_get_by_index(&m->namesp, j, env); + for(k = 0; k < e_namesp->no; k++) + { + if(!guththila_tok_tok_cmp(e_namesp->namesp[k].name, m->prefix, env)) + { + namesp_found = GUTHTHILA_TRUE; + j = -1; /* force exit from outer loop */ + break; + } + } + } + if(!namesp_found) + return AXIS2_FAILURE; + } + return GUTHTHILA_SUCCESS; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_next( + guththila_t * m, + const axutil_env_t * env) +{ + guththila_element_t * elem = NULL; + guththila_elem_namesp_t * nmsp = NULL; + guththila_token_t * tok = NULL; + int quote = 0, ref = 0; + int c = -1; + guththila_attr_t * attr = NULL; + int size = 0, i = 0, nmsp_counter, loop = 0, white_space = 0; + size_t data_size = -1; + size_t previous_size = -1; + guththila_char_t *buffer = NULL; + + /* Need to release the resources for attributes */ + size = GUTHTHILA_STACK_SIZE(m->attrib); + for(i = 0; i < size; i++) + { + attr = (guththila_attr_t *)guththila_stack_pop(&m->attrib, env); + if(attr) + { + if(attr->name) + guththila_tok_list_release_token(&m->tokens, attr->name, env); + if(attr->pref) + guththila_tok_list_release_token(&m->tokens, attr->pref, env); + AXIS2_FREE(env->allocator, attr); + } + } + +#ifdef GUTHTHILA_VALIDATION_PARSER + if(m->guththila_event == GUTHTHILA_END_ELEMENT && m->name) + { + guththila_tok_list_release_token(&m->tokens, m->name, env); + if(m->prefix) + { + guththila_tok_list_release_token(&m->tokens, m->prefix, env); + } + } + /* If the previous event was a empty element we need to do some clean up */ + else if(m->guththila_event == GUTHTHILA_EMPTY_ELEMENT) + { + elem = (guththila_element_t *)guththila_stack_pop(&m->elem, env); + if(elem->is_namesp) + { + nmsp = (guththila_elem_namesp_t *)guththila_stack_pop(&m->namesp, env); + for(nmsp_counter = 0; nmsp_counter < nmsp->no; nmsp_counter++) + { + if(nmsp->namesp[nmsp_counter].name) + guththila_tok_list_release_token(&m->tokens, nmsp->namesp[nmsp_counter]. name, + env); + if(nmsp->namesp[nmsp_counter].uri) + guththila_tok_list_release_token(&m->tokens, nmsp->namesp[nmsp_counter]. uri, + env); + } + AXIS2_FREE(env->allocator, nmsp->namesp); + AXIS2_FREE(env->allocator, nmsp); + } + if(elem->name) + guththila_tok_list_release_token(&m->tokens, elem->name, env); + if(elem->prefix) + guththila_tok_list_release_token(&m->tokens, elem->prefix, env); + AXIS2_FREE(env->allocator, elem); + } + GUTHTHILA_VARIABLE_INITIALZE(m); +#endif + /* Actual XML parsing logic */ + do + { + loop = 0; + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + if(m->status == S_1) + { + while(isspace(c)) + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + } + if('<' == c) + { + m->status = S_2; + } + else + { + return -1; + } + } + if(m->status != S_2) + { + return -1; + } + if(c == '<') + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + if(c != '?' && c != '!' && c != '/') + { + /* We are at the beginning of a xml element */ + if(GUTHTHILA_IS_VALID_STARTING_CHAR(c)) + { + GUTHTHILA_TOKEN_OPEN(m, tok, env); + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + while(!GUTHTHILA_IS_SPACE(c) && c != '>' && c != '/') + { + if(c != ':') + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + } + else + { + /* We know for sure that this is a prefix */ + guththila_token_close(m, tok, _prefix, 0, env); + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + GUTHTHILA_TOKEN_OPEN(m, tok, env); + } + } + /* XML element name */ + guththila_token_close(m, tok, _name, 0, env); +#ifdef GUTHTHILA_VALIDATION_PARSER + elem = (guththila_element_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_element_t)); + elem->name = m->name; + elem->prefix = m->prefix; + elem->is_namesp = 0; + guththila_stack_push(&m->elem, elem, env); +#endif + } + GUTHTHILA_SKIP_SPACES(m, c, buffer, data_size, previous_size, env); + /* Process the attributes */ + for(;;) + { + /* Empty element */ + if(c == '/') + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + if(c == '>') + { + m->guththila_event = GUTHTHILA_EMPTY_ELEMENT; + if(!guththila_validate_namespaces(m, env)) + return -1; + else + return GUTHTHILA_EMPTY_ELEMENT; + } + else + { + return -1; + } + } + /* Normal element */ + else if(c == '>') + { + m->guththila_event = GUTHTHILA_START_ELEMENT; + if(!guththila_validate_namespaces(m, env)) + return -1; + else + return GUTHTHILA_START_ELEMENT; + } + /* We are in the middle of a element */ + else + { + /* Process the attributes */ + if(GUTHTHILA_IS_VALID_STARTING_CHAR(c)) + { + GUTHTHILA_TOKEN_OPEN(m, tok, env); + + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + while(!GUTHTHILA_IS_SPACE(c) && c != '=') + { + if(c != ':') + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + } + else if(c == ':') + { + /* Prefix */ + guththila_token_close(m, tok, _prefix, 0, env); + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + GUTHTHILA_TOKEN_OPEN(m, tok, env); + } + } + /* Attribute name*/ + guththila_token_close(m, tok, _attribute_name, 0, env); + } + else + { + return -1; + } + /* Attribute Value */ + GUTHTHILA_PROCESS_EQU(m, c, quote, buffer, data_size, previous_size, env); + if(quote == '\'' || quote == '\"') + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + GUTHTHILA_TOKEN_OPEN(m, tok, env); + while(c != quote) + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + } + guththila_token_close(m, tok, _attribute_value, 0, env); + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + GUTHTHILA_SKIP_SPACES(m, c, buffer, data_size, previous_size, env); + } + else + { + return -1; + } + } + } /* for(;;) */ + } + else if(c == '/') + { + /* End Element */ + m->guththila_event = GUTHTHILA_END_ELEMENT; + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + if(GUTHTHILA_IS_VALID_STARTING_CHAR(c)) + { + GUTHTHILA_TOKEN_OPEN(m, tok, env); + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + while(!GUTHTHILA_IS_SPACE(c) && c != '>') + { + if(c != ':') + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + } + else + { + /* Prefix */ + guththila_token_close(m, tok, _prefix, 0, env); + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + GUTHTHILA_TOKEN_OPEN(m, tok, env); + } + } + /* name */ + guththila_token_close(m, tok, _name, 0, env); + +#ifdef GUTHTHILA_VALIDATION_PARSER + elem = (guththila_element_t *)guththila_stack_pop(&m->elem, env); + if(!elem || (!elem->prefix && m->prefix) || (elem->prefix && !m->prefix)) + return -1; + if(guththila_tok_tok_cmp(m->name, elem->name, env)) + { + return -1; + } + if(elem->prefix && m->prefix && guththila_tok_tok_cmp(m->prefix, elem->prefix, + env)) + { + return -1; + } + /* Releasing the namespace related resources */ + if(elem->is_namesp) + { + nmsp = (guththila_elem_namesp_t *)guththila_stack_pop(&m->namesp, env); + for(nmsp_counter = 0; nmsp_counter < nmsp->no; nmsp_counter++) + { + if(nmsp->namesp[nmsp_counter].name) + guththila_tok_list_release_token(&m->tokens, + nmsp-> namesp[nmsp_counter]. name, env); + if(nmsp->namesp[nmsp_counter].uri) + guththila_tok_list_release_token(&m->tokens, + nmsp-> namesp[nmsp_counter]. uri, env); + } + AXIS2_FREE(env->allocator, nmsp->namesp); + AXIS2_FREE(env->allocator, nmsp); + } + /* Release the tokens */ + if(elem->name) + guththila_tok_list_release_token(&m->tokens, elem->name, env); + if(elem->prefix) + guththila_tok_list_release_token(&m->tokens, elem->prefix, env); + AXIS2_FREE(env->allocator, elem); +#endif + GUTHTHILA_SKIP_SPACES(m, c, buffer, data_size, previous_size, env); + if(c != '>') + return -1; + return GUTHTHILA_END_ELEMENT; + } + return -1; + } + else if(c == '!') + { + /* Comment */ + guththila_char_t c_arra[16] = { 0 }; + if(2 == guththila_next_no_char(m, 0, c_arra, 2, env) && '-' == c_arra[0] && '-' + == c_arra[1]) + { + int loop_state = 1; + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + GUTHTHILA_TOKEN_OPEN(m, tok, env); + while(loop_state) + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + if('-' == c) + { + if(2 == guththila_next_no_char(m, 0, c_arra, 2, env) && '-' + == c_arra[0]) + { + if('>' == c_arra[1]) + { + m->guththila_event = GUTHTHILA_COMMENT; + /* position after first hyphen, as if we just scanned it */ + m->next = m->next - 2; + guththila_token_close(m, tok, _char_data, 0, env); + m->next = m->next + 2; + return GUTHTHILA_COMMENT; + } + else + { + return -1; + } + } + } + } + } + else + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + while('<' != c) + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + } + } + } + else if(c == '?') + { + /* XML declaration */ + c = guththila_process_xml_dec(m, env); + if(c != -1) + return GUTHTHILA_START_DOCUMENT; + else + return -1; + } + } + else + { + /* Text */ + m->guththila_event = GUTHTHILA_CHARACTER; + if(!GUTHTHILA_IS_SPACE(c)) + white_space = 0; + else + white_space = 1; + GUTHTHILA_TOKEN_OPEN(m, tok, env); + + /* code given below is having two do-while loop wrapped by another do-while loop. + * This is done to improve the performance for big messages. Most of the cases, the + * content will be not whitespace, so checking for whitespace even if we already found + * that we have some valid characters is big overhead. Hence better to do the looping + * separately to find white_space = false and normal case + */ + do + { + if(white_space) + { + do + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + if(!GUTHTHILA_IS_SPACE(c) && c != '<') + { + white_space = 0; + break; + } + } + while(c != '<'); + } + else + { + do + { + if(buffer) + { + guththila_char_t *pos = NULL; + size_t index = m->next - previous_size; + pos = (guththila_char_t*)memchr(buffer + index, '<', data_size - index); + if(pos) + { + m->next += pos - (buffer + index); + } + else + { + m->next = previous_size + data_size; + } + + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + } + else + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + } + }while(c != '<'); + } + } + while(c != '<'); + guththila_token_close(m, tok, _text_data, ref, env); + m->next--; + if(white_space) + { +#ifndef GUTHTHILA_IGNORE_SPACES + m->guththila_event = GUTHTHILA_SPACE; + return GUTHTHILA_SPACE; +#else + loop = 1; + if (m->value) + { + guththila_tok_list_release_token(&m->tokens, m->value, + env); + m->value = NULL; + } +#endif + } + + else + return GUTHTHILA_CHARACTER; + } + } + while(loop); + return c; +} + +/* Process the XML declaration */ +static int +guththila_process_xml_dec( + guththila_t * m, + const axutil_env_t * env) +{ + guththila_token_t * tok = NULL; + guththila_char_t c_arra[16] = { 0 }; + int c = -1; + int quote = -1; + int nc = -1; + size_t data_size = -1; + size_t previous_size = -1; + guththila_char_t *buffer = NULL; + if(3 == guththila_next_no_char(m, GUTHTHILA_EOF, c_arra, 3, env) && 'x' == c_arra[0] && 'm' + == c_arra[1] && 'l' == c_arra[2]) + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + GUTHTHILA_SKIP_SPACES(m, c, buffer, data_size, previous_size, env); + if(c == 'v') + { + GUTHTHILA_TOKEN_OPEN(m, tok, env); + if(6 == guththila_next_no_char(m, 0, c_arra, 6, env) && 'e' == c_arra[0] && 'r' + == c_arra[1] && 's' == c_arra[2] && 'i' == c_arra[3] && 'o' == c_arra[4] && 'n' + == c_arra[5]) + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + guththila_token_close(m, tok, _attribute_name, 0, env); + GUTHTHILA_PROCESS_EQU(m, c, quote, buffer, data_size, previous_size, env); + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, nc); + GUTHTHILA_TOKEN_OPEN(m, tok, env); + while(nc != quote) + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, nc); + } + guththila_token_close(m, tok, _attribute_value, 0, env); + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + GUTHTHILA_SKIP_SPACES(m, c, buffer, data_size, previous_size, env); + } + else + { + return -1; + } + } + if(c == 'e') + { + GUTHTHILA_TOKEN_OPEN(m, tok, env); + if(7 == guththila_next_no_char(m, 0, c_arra, 7, env) && 'n' == c_arra[0] && 'c' + == c_arra[1] && 'o' == c_arra[2] && 'd' == c_arra[3] && 'i' == c_arra[4] && 'n' + == c_arra[5] && 'g' == c_arra[6]) + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + guththila_token_close(m, tok, _attribute_name, 0, env); + GUTHTHILA_PROCESS_EQU(m, c, quote, buffer, data_size, previous_size, env); + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, nc); + GUTHTHILA_TOKEN_OPEN(m, tok, env); + while(nc != quote) + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, nc); + } + guththila_token_close(m, tok, _attribute_value, 0, env); + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + GUTHTHILA_SKIP_SPACES(m, c, buffer, data_size, previous_size, env); + } + } + if(c == 's') + { + GUTHTHILA_TOKEN_OPEN(m, tok, env); + if(9 == guththila_next_no_char(m, 0, c_arra, 9, env) && 't' == c_arra[0] && 'a' + == c_arra[1] && 'n' == c_arra[2] && 'd' == c_arra[3] && 'a' == c_arra[4] && 'l' + == c_arra[5] && 'o' == c_arra[6] && 'n' == c_arra[7] && 'e' == c_arra[8]) + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + guththila_token_close(m, tok, _attribute_name, 0, env); + GUTHTHILA_PROCESS_EQU(m, c, quote, buffer, data_size, previous_size, env); + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, nc); + GUTHTHILA_TOKEN_OPEN(m, tok, env); + while(nc != quote) + { + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, nc); + } + guththila_token_close(m, tok, _attribute_value, 0, env); + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, c); + GUTHTHILA_SKIP_SPACES(m, c, buffer, data_size, previous_size, env); + } + } + if(c == '?') + { + int nc; + GUTHTHILA_NEXT_CHAR(m, buffer, data_size, previous_size, env, nc); + if('>' == nc) + { + m->guththila_event = GUTHTHILA_START_DOCUMENT; + } + else + { + return -1; + } + } + } + return c; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_get_attribute_count( + guththila_t * m, + const axutil_env_t * env) +{ + return GUTHTHILA_STACK_SIZE(m->attrib); +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_attribute_name( + guththila_t * m, + guththila_attr_t * att, + const axutil_env_t * env) +{ + guththila_char_t *str = NULL; + if(att->name) + { + GUTHTHILA_TOKEN_TO_STRING(att->name, str, env); + return str; + } + return NULL; +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_attribute_value( + guththila_t * m, + guththila_attr_t * att, + const axutil_env_t * env) +{ + guththila_char_t *str = NULL; + if(att->val) + { + GUTHTHILA_TOKEN_TO_STRING(att->val, str, env); + return str; + } + return NULL; +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_attribute_prefix( + guththila_t * m, + guththila_attr_t * att, + const axutil_env_t * env) +{ + guththila_char_t *str = NULL; + if(att->pref) + { + GUTHTHILA_TOKEN_TO_STRING(att->pref, str, env); + return str; + } + return NULL; +} + +GUTHTHILA_EXPORT guththila_attr_t *GUTHTHILA_CALL +guththila_get_attribute( + guththila_t * m, + const axutil_env_t * env) +{ + return (guththila_attr_t *)guththila_stack_pop(&m->attrib, env); +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_attribute_name_by_number( + guththila_t * m, + int i, + const axutil_env_t *env) +{ + guththila_char_t *str = NULL; + guththila_attr_t * attr = (guththila_attr_t *)guththila_stack_get_by_index(&m->attrib, i - 1, + env); + if(attr->name) + { + GUTHTHILA_TOKEN_TO_STRING(attr->name, str, env); + return str; + } + return NULL; +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_attribute_value_by_number( + guththila_t * m, + int i, + const axutil_env_t *env) +{ + guththila_char_t *str = NULL; + guththila_attr_t * attr = (guththila_attr_t *)guththila_stack_get_by_index(&m->attrib, i - 1, + env); + if(attr->val) + { + GUTHTHILA_TOKEN_TO_STRING(attr->val, str, env); + return str; + } + return NULL; +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_attribute_prefix_by_number( + guththila_t * m, + int i, + const axutil_env_t *env) +{ + guththila_char_t *str = NULL; + guththila_attr_t * attr = (guththila_attr_t *)guththila_stack_get_by_index(&m->attrib, i - 1, + env); + if(attr && attr->pref) + { + GUTHTHILA_TOKEN_TO_STRING(attr->pref, str, env); + return str; + } + return NULL; +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_name( + guththila_t * m, + const axutil_env_t * env) +{ + guththila_char_t *str = NULL; + if(m->name) + { + GUTHTHILA_TOKEN_TO_STRING(m->name, str, env); + return str; + } + return NULL; +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_prefix( + guththila_t * m, + const axutil_env_t * env) +{ + guththila_char_t *str = NULL; + if(m->prefix) + { + GUTHTHILA_TOKEN_TO_STRING(m->prefix, str, env); + return str; + } + return NULL; +} + +GUTHTHILA_EXPORT guththila_char_t * GUTHTHILA_CALL +guththila_get_value( + guththila_t * m, + const axutil_env_t * env) +{ + guththila_char_t *str = NULL; + if(m->value) + { + GUTHTHILA_TOKEN_TO_STRING(m->value, str, env); + return str; + } + return NULL; +} + +GUTHTHILA_EXPORT guththila_namespace_t *GUTHTHILA_CALL +guththila_get_namespace( + guththila_t * m, + const axutil_env_t * env) +{ + +#ifndef GUTHTHILA_VALIDATION_PARSER + return (guththila_namespace_t *) guththila_stack_pop(&m->namesp, env); +#else + return NULL; +#endif +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_get_namespace_count( + guththila_t * m, + const axutil_env_t * env) +{ + +#ifndef GUTHTHILA_VALIDATION_PARSER + return GUTHTHILA_STACK_SIZE(m->namesp); +#else + guththila_elem_namesp_t * nmsp = NULL; + if(((guththila_element_t *)guththila_stack_peek(&m->elem, env))->is_namesp) + { + nmsp = (guththila_elem_namesp_t *)guththila_stack_peek(&m->namesp, env); + return nmsp->no; + } + return 0; + +#endif +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_namespace_uri( + guththila_t * m, + guththila_namespace_t * ns, + const axutil_env_t * env) +{ + guththila_char_t *str = NULL; + if(ns->uri) + { + GUTHTHILA_TOKEN_TO_STRING(ns->uri, str, env); + return str; + } + return NULL; +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_namespace_prefix( + guththila_t * m, + guththila_namespace_t * ns, + const axutil_env_t * env) +{ + guththila_char_t *str = NULL; + if(ns->name) + { + GUTHTHILA_TOKEN_TO_STRING(ns->name, str, env); + return str; + } + return NULL; +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_namespace_prefix_by_number( + guththila_t * m, + int i, + const axutil_env_t *env) +{ + guththila_char_t *str = NULL; + +#ifndef GUTHTHILA_VALIDATION_PARSER + if (GUTHTHILA_STACK_SIZE(m->namesp) >= i) + { + namesp = guththila_stack_get_by_index(&m->namesp, i - 1, env); + if (namesp && namesp->name) + { + GUTHTHILA_TOKEN_TO_STRING(namesp->name, str, env); + return str; + } + } + +#else + guththila_elem_namesp_t * nmsp = NULL; + if(((guththila_element_t *)guththila_stack_peek(&m->elem, env))->is_namesp) + { + nmsp = (guththila_elem_namesp_t *)guththila_stack_peek(&m->namesp, env); + if(nmsp && nmsp->no >= i) + { + GUTHTHILA_TOKEN_TO_STRING(nmsp->namesp[i - 1].name, str, env); + return str; + } + } +#endif /* */ + return NULL; +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_namespace_uri_by_number( + guththila_t * m, + int i, + const axutil_env_t *env) +{ + guththila_char_t *str = NULL; +#ifndef GUTHTHILA_VALIDATION_PARSER + if (GUTHTHILA_STACK_SIZE(m->namesp) >= i) + { + namesp = guththila_stack_get_by_index(&m->namesp, i - 1, env); + if (namesp && namesp->uri) + { + GUTHTHILA_TOKEN_TO_STRING(namesp->uri, str, env); + return str; + } + } +#else + guththila_elem_namesp_t * nmsp = NULL; + if(((guththila_element_t *)guththila_stack_peek(&m->elem, env))->is_namesp) + { + nmsp = (guththila_elem_namesp_t *)guththila_stack_peek(&m->namesp, env); + if(nmsp && nmsp->no >= i) + { + GUTHTHILA_TOKEN_TO_STRING(nmsp->namesp[i - 1].uri, str, env); + return str; + } + } +#endif + return NULL; +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_attribute_namespace_by_number( + guththila_t * m, + int i, + const axutil_env_t *env) +{ + +#ifndef GUTHTHILA_VALIDATION_PARSER + return NULL; + +#else + guththila_attr_t * attr = NULL; + guththila_char_t* str = NULL; + int j = 0, k = 0, count = 0; + guththila_elem_namesp_t * nmsp = NULL; + if(i <= GUTHTHILA_STACK_SIZE(m->attrib)) + { + attr = (guththila_attr_t *)guththila_stack_get_by_index(&m->attrib, i - 1, env); + if(attr && attr->pref) + { + count = GUTHTHILA_STACK_SIZE(m->namesp); + for(j = count - 1; j >= 0; j--) + { + nmsp = (guththila_elem_namesp_t *)guththila_stack_get_by_index(&m->namesp, j, env); + for(k = 0; k < nmsp->no; k++) + { + if(!guththila_tok_tok_cmp(nmsp->namesp[k].name, attr->pref, env)) + { + GUTHTHILA_TOKEN_TO_STRING(nmsp->namesp[k].uri, str, env); + return str; + } + } + } + } + } + return NULL; + +#endif +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_encoding( + guththila_t * m, + const axutil_env_t * env) +{ + return "UTF-8"; +} + +/* Return the next character */ +static int +guththila_next_char( + guththila_t * m, + const axutil_env_t * env) +{ + int c; + size_t data_move, i; + int temp; + guththila_char_t **temp1; + size_t * temp2, *temp3; + + /* we have a buffered reader. Easiest case just fetch the character from + * the buffer. Here we have a single buffer. + * */ + if(m->reader->type == GUTHTHILA_MEMORY_READER) + { + size_t index = m->next++; + if(index < m->buffer.data_size[0]) + { + return m->buffer.buff[0][index]; + } + } + else + { + /* comlex stuff. We have a array of buffers */ + if(m->buffer.cur_buff != -1 && m->next < GUTHTHILA_BUFFER_PRE_DATA_SIZE(m->buffer) + + GUTHTHILA_BUFFER_CURRENT_DATA_SIZE(m->buffer)) + { + /* What we are looking for is already in the buffer */ + c = m->buffer.buff[m->buffer.cur_buff][m->next++ - GUTHTHILA_BUFFER_PRE_DATA_SIZE( + m->buffer)]; + return c; + } + else if(m->buffer.cur_buff != -1 && m->next >= GUTHTHILA_BUFFER_PRE_DATA_SIZE(m->buffer) + + GUTHTHILA_BUFFER_CURRENT_DATA_SIZE(m->buffer)) + { + /* if we have don't have enough space in current buffer, have to create new buffer */ + if(m->buffer.buffs_size[m->buffer.cur_buff] < + GUTHTHILA_BUFFER_CURRENT_DATA_SIZE(m->buffer) + GUTHTHILA_BUFFER_DEF_MIN_SIZE) + { + if(m->buffer.cur_buff == (int)m->buffer.no_buffers - 1) + { + /* we are out of allocated buffers. Need to allocate more buffers */ + temp = m->buffer.no_buffers * 2; + temp1 = (guththila_char_t **)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t *) * temp); + temp2 = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) * temp); + temp3 = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) * temp); + if(!temp1 || !temp2 || !temp3) + return (-1); + for(i = 0; i < m->buffer.no_buffers; i++) + { + temp1[i] = m->buffer.buff[i]; + temp2[i] = m->buffer.buffs_size[i]; + temp3[i] = m->buffer.data_size[i]; + } + AXIS2_FREE(env->allocator, m->buffer.buff); + AXIS2_FREE(env->allocator, m->buffer.data_size); + AXIS2_FREE(env->allocator, m->buffer.buffs_size); + m->buffer.buff = temp1; + m->buffer.buffs_size = temp2; + m->buffer.data_size = temp3; + m->buffer.no_buffers *= 2; + } + m->buffer.buff[m->buffer.cur_buff + 1] = (guththila_char_t *)AXIS2_MALLOC( + env->allocator, + sizeof(guththila_char_t) * m->buffer.buffs_size[m->buffer.cur_buff] * 2); + if(!m->buffer.buff[m->buffer.cur_buff + 1]) + return -1; + m->buffer.cur_buff++; + m->buffer.buffs_size[m->buffer.cur_buff] = + m->buffer.buffs_size[m->buffer.cur_buff - 1] * 2; + m->buffer.data_size[m->buffer.cur_buff] = 0; + /* We need to have the content for one token in a single buffer. + * So if the space is not sufficient we have to move first part + * of the token to the next buffer */ + if(m->last_start != -1) + { + data_move = m->buffer.data_size[m->buffer.cur_buff - 1] - + (m->last_start - m->buffer.pre_tot_data); + memcpy(m->buffer.buff[m->buffer.cur_buff], m->buffer.buff[m->buffer.cur_buff - 1] + + m->buffer.data_size[m->buffer.cur_buff - 1] - data_move, data_move); + m->buffer.data_size[m->buffer.cur_buff - 1] -= data_move; + m->buffer.data_size[m->buffer.cur_buff] += data_move; + } + m->buffer.pre_tot_data += m->buffer.data_size[m->buffer.cur_buff - 1]; + } + temp = guththila_reader_read(m->reader, GUTHTHILA_BUFFER_CURRENT_BUFF(m->buffer), 0, + (int)GUTHTHILA_BUFFER_CURRENT_BUFF_SIZE(m->buffer), env); + if(temp > 0) + { + m->buffer.data_size[m->buffer.cur_buff] += temp; + } + else + { + return -1; + } + c = m->buffer.buff[m->buffer.cur_buff][m->next++ - GUTHTHILA_BUFFER_PRE_DATA_SIZE( + m->buffer)]; + return c; + } + /* Initial stage. We dont' have the array of buffers allocated*/ + else if(m->buffer.cur_buff == -1) + { + m->buffer.buff[0] = (guththila_char_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t) * GUTHTHILA_BUFFER_DEF_SIZE); + m->buffer.buffs_size[0] = GUTHTHILA_BUFFER_DEF_SIZE; + m->buffer.cur_buff = 0; + temp = guththila_reader_read(m->reader, m->buffer.buff[0], 0, + GUTHTHILA_BUFFER_DEF_SIZE, env); + m->buffer.data_size[0] = temp; + c = m->buffer.buff[0][m->next++]; + return c; + } + } + return -1; +} + +/* Same functionality as the guththila_next_char. But insted of reading + * one character this function reads several characters at once + * */ +static int +guththila_next_no_char( + guththila_t * m, + int eof, + guththila_char_t *bytes, + size_t no, + const axutil_env_t * env) +{ + int temp, data_move; + size_t i; + guththila_char_t **temp1; + size_t * temp2, *temp3; + if(m->reader->type == GUTHTHILA_MEMORY_READER && m->next + no - 1 + < GUTHTHILA_BUFFER_CURRENT_DATA_SIZE(m->buffer) && m->buffer.cur_buff != -1) + { + for(i = 0; i < no; i++) + { + bytes[i] = m->buffer.buff[0][m->next++]; + } + return (int)no; + /* We are sure that the difference lies within the int range */ + } + else if(m->reader->type == GUTHTHILA_IO_READER || m->reader->type == GUTHTHILA_FILE_READER) + { + if(m->next < GUTHTHILA_BUFFER_PRE_DATA_SIZE(m->buffer) + + GUTHTHILA_BUFFER_CURRENT_DATA_SIZE(m->buffer) + no && m->buffer.cur_buff != -1) + { + for(i = 0; i < no; i++) + { + bytes[i] = m->buffer.buff[m->buffer.cur_buff][m->next++ + - GUTHTHILA_BUFFER_PRE_DATA_SIZE(m->buffer)]; + } + return (int)no; + /* We are sure that the difference lies within the int range */ + } + else if(m->next >= GUTHTHILA_BUFFER_PRE_DATA_SIZE(m->buffer) + + GUTHTHILA_BUFFER_CURRENT_DATA_SIZE(m->buffer) + no && m->buffer.cur_buff != -1) + { + /* We are sure that the difference lies within the int range */ + if(m->buffer.cur_buff == (int)m->buffer.no_buffers - 1) + { + temp = m->buffer.no_buffers * 2; + temp1 = (guththila_char_t **)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t *) * temp); + temp2 = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) * temp); + temp3 = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) * temp); + if(!temp1 || !temp2 || !temp3) + return (-1); + for(i = 0; i < m->buffer.no_buffers; i++) + { + temp1[i] = m->buffer.buff[i]; + temp2[i] = m->buffer.buffs_size[i]; + temp3[i] = m->buffer.data_size[i]; + } + AXIS2_FREE(env->allocator, m->buffer.buff); + AXIS2_FREE(env->allocator, m->buffer.data_size); + AXIS2_FREE(env->allocator, m->buffer.buffs_size); + m->buffer.buff = temp1; + m->buffer.buffs_size = temp2; + m->buffer.data_size = temp3; + m->buffer.no_buffers *= 2; + } + m->buffer.buff[m->buffer.cur_buff + 1] = (guththila_char_t *)AXIS2_MALLOC( + env->allocator, sizeof(guththila_char_t) * m->buffer.data_size[m->buffer.cur_buff] + * 2); + if(!m->buffer.buff[m->buffer.cur_buff + 1]) + return -1; + m->buffer.cur_buff++; + m->buffer.buffs_size[m->buffer.cur_buff] = m->buffer.buffs_size[m->buffer.cur_buff - 1] + * 2; + m->buffer.data_size[m->buffer.cur_buff] = 0; + data_move = (int)m->next; + /* We are sure that the difference lies within the int range */ + if((m->last_start != -1) && (m->last_start < data_move)) + data_move = m->last_start; + data_move = (int)m->buffer.data_size[m->buffer.cur_buff - 1] - (data_move + - (int)m->buffer.pre_tot_data); + /* We are sure that the difference lies within the int range */ + if(data_move) + { + memcpy(m->buffer.buff[m->buffer.cur_buff], m->buffer.buff[m->buffer.cur_buff - 1] + + m->buffer.data_size[m->buffer.cur_buff - 1] - data_move, data_move); + m->buffer.data_size[m->buffer.cur_buff - 1] -= data_move; + m->buffer.data_size[m->buffer.cur_buff] += data_move; + } + m->buffer.pre_tot_data += m->buffer.data_size[m->buffer.cur_buff - 1]; + temp = guththila_reader_read(m->reader, GUTHTHILA_BUFFER_CURRENT_BUFF(m->buffer), 0, + (int)GUTHTHILA_BUFFER_CURRENT_BUFF_SIZE(m-> buffer), env); + /* We are sure that the difference lies within the int range */ + if(temp > 0) + { + m->buffer.data_size[m->buffer.cur_buff] += temp; + } + else + { + return -1; + } + for(i = 0; i < no; i++) + { + bytes[i] = m->buffer.buff[m->buffer.cur_buff][m->next++ + - GUTHTHILA_BUFFER_PRE_DATA_SIZE(m->buffer)]; + } + return (int)no; + /* We are sure that the difference lies within the int range */ + } + else if(m->buffer.cur_buff == -1) + { + m->buffer.buff[0] = (guththila_char_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t) * GUTHTHILA_BUFFER_DEF_SIZE); + m->buffer.buffs_size[0] = GUTHTHILA_BUFFER_DEF_SIZE; + m->buffer.cur_buff = 0; + temp = guththila_reader_read(m->reader, m->buffer.buff[0], 0, + GUTHTHILA_BUFFER_DEF_SIZE, env); + m->buffer.data_size[0] = temp; + for(i = 0; i < no; i++) + { + bytes[i] = m->buffer.buff[m->buffer.cur_buff][m->next++ + - GUTHTHILA_BUFFER_PRE_DATA_SIZE(m->buffer)]; + } + return (int)no; + /* We are sure that the difference lies within the int range */ + } + } + return -1; +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_current_buffer( + guththila_t * m, + const axutil_env_t * env) +{ + return guththila_buffer_get(&m->buffer, env); +} + diff --git a/guththila/src/guththila_xml_writer.c b/guththila/src/guththila_xml_writer.c new file mode 100644 index 0000000..adc2389 --- /dev/null +++ b/guththila/src/guththila_xml_writer.c @@ -0,0 +1,2082 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#define GUTHTHILA_WRITER_SD_DECLARATION "" + +#ifndef GUTHTHILA_XML_WRITER_TOKEN +#ifndef GUTHTHILA_WRITER_ELEM_FREE +#define GUTHTHILA_WRITER_ELEM_FREE(wr, elem, _env) \ + if ((elem)->prefix) AXIS2_FREE(env->allocator, (elem)->prefix); \ + if ((elem)->name) AXIS2_FREE(env->allocator, (elem)->name); \ + AXIS2_FREE(env->allocator, elem); +#endif +#else +#ifndef GUTHTHILA_WRITER_ELEM_FREE +#define GUTHTHILA_WRITER_ELEM_FREE(wr, elem, _env) \ + if ((elem)->prefix) guththila_tok_list_release_token(&wr->tok_list, (elem)->prefix, _env); \ + if ((elem)->name) guththila_tok_list_release_token(&wr->tok_list, (elem)->name, _env); \ + AXIS2_FREE(env->allocator, elem); +#endif +#endif + +#ifndef GUTHTHILA_XML_WRITER_TOKEN +#ifndef GUTHTHILA_WRITER_CLEAR_NAMESP +#define GUTHTHILA_WRITER_CLEAR_NAMESP(wr, stack_namesp, _no, counter, _namesp, j, _env) \ + for (counter = GUTHTHILA_STACK_TOP_INDEX(*stack_namesp); counter >= _no; counter--) {\ + _namesp = (guththila_xml_writer_namesp_t *) guththila_stack_pop(stack_namesp, _env); \ + if (_namesp) { \ + for (j = 0; j < _namesp->no - 1; j++) { \ + if (_namesp->name[j]) AXIS2_FREE(env->allocator, _namesp->name[j]); \ + if (_namesp->uri[j]) AXIS2_FREE(env->allocator, _namesp->uri[j]); \ + } \ + AXIS2_FREE(env->allocator, _namesp->name); \ + AXIS2_FREE(env->allocator, _namesp->uri); \ + AXIS2_FREE(env->allocator, _namesp); \ + } \ + _namesp = NULL; \ +} +#endif +#else +#ifndef GUTHTHILA_WRITER_CLEAR_NAMESP +#define GUTHTHILA_WRITER_CLEAR_NAMESP(wr, stack_namesp, _no, counter, _namesp, j, _env) \ + for (counter = GUTHTHILA_STACK_TOP_INDEX(*stack_namesp); counter >= _no; counter--) { \ + _namesp = (guththila_xml_writer_namesp_t *) guththila_stack_pop(stack_namesp, _env); \ + if (_namesp) { \ + for (j = 0; j < _namesp->no - 1; j++) { \ + guththila_tok_list_release_token(&wr->tok_list, _namesp->name[j], _env); \ + guththila_tok_list_release_token(&wr->tok_list, _namesp->uri[j], _env); \ + } \ + AXIS2_FREE(env->allocator, _namesp->name); \ + AXIS2_FREE(env->allocator, _namesp->uri); \ + AXIS2_FREE(env->allocator, _namesp); \ + } \ + _namesp = NULL; \ +} +#endif +#endif + +#ifndef GUTHTHILA_WRITER_INIT_ELEMENT +#define GUTHTHILA_WRITER_INIT_ELEMENT_WITH_PREFIX(wr, _elem, _name_start, _name_size, _pref_start, _pref_size) \ + _elem->name = guththila_tok_list_get_token(&wr->tok_list); \ + _elem->prefix = = guththila_tok_list_get_token(&wr->tok_list); \ + _elem->name->start = _name_start; \ + _elem->name->size = _name_size; \ + _elem->prefix->start = _pref_start; \ + _elem->prrefix->size = pref_size; +#endif + +#ifndef GUTHTHILA_WRITER_INIT_ELEMENT +#define GUTHTHILA_WRITER_INIT_ELEMENT_WITHOUT_PREFIX(wr, _elem, _name_start, _name_size) \ + _elem->name = guththila_tok_list_get_token(&(wr)->tok_list); \ + _elem->name->start = _name_start; \ + _elem->name->size = _name_size; \ + _elem->prefix->NULL; +#endif + +/* + #ifndef guththila_write(_wr, _buff, _buff_size) + #define guththila_write(_wr, _buff, _buff_size) \ + if (_wr->type == GUTHTHILA_WRITER_MEMORY){ \ + if (_wr->buffer.size > _wr->buffer.next + _buff_size) {\ + memcpy (_wr->buffer.buff + _wr->buffer.next, _buff, _buff_size);\ + _wr->buffer.next += (int)_buff_size; \ + } else {\ + _wr->buffer.buff = realloc(_wr->buffer.buff, _wr->buffer.size * 2);\ + _wr->buffer.size = _wr->buffer.size * 2; \ + memcpy (_wr->buffer.buff + _wr->buffer.next, _buff, _buff_size);\ + _wr->buffer.next += (int)_buff_size; \ + }\ + } + #endif*/ + +/* + * Write the contents of the buff in to the guththila_xml_writer buffer. + * len indicates the number of items in the buff. + */ +int GUTHTHILA_CALL guththila_write( + guththila_xml_writer_t * wr, + char *buff, + size_t buff_size, + const axutil_env_t * env); + +/* + * Same functionality as the guththila_write only difference is here we are given + * a token to write, not a buffer. + */ +int GUTHTHILA_CALL guththila_write_token( + guththila_xml_writer_t * wr, + guththila_token_t * tok, + const axutil_env_t * env); + +int GUTHTHILA_CALL guththila_write_xtoken( + guththila_xml_writer_t * wr, + char *buff, + size_t buff_len, + const axutil_env_t * env); + +/* + * Private function for free the contents of a empty element. + */ +int GUTHTHILA_CALL guththila_free_empty_element( + guththila_xml_writer_t *wr, + const axutil_env_t *env); + +GUTHTHILA_EXPORT guththila_xml_writer_t * GUTHTHILA_CALL +guththila_create_xml_stream_writer( + guththila_char_t *file_name, + const axutil_env_t * env) +{ + guththila_xml_writer_t * wr = AXIS2_MALLOC(env->allocator, sizeof(guththila_xml_writer_t)); + if(!wr) + return NULL; + wr->out_stream = fopen(file_name, "w"); + if(!wr->out_stream) + { + AXIS2_FREE(env->allocator, wr); + return NULL; + } + if(!guththila_stack_init(&wr->element, env)) + { + fclose(wr->out_stream); + AXIS2_FREE(env->allocator, wr); + return NULL; + } + if(!guththila_stack_init(&wr->namesp, env)) + { + guththila_stack_un_init(&wr->element, env); + fclose(wr->out_stream); + AXIS2_FREE(env->allocator, wr); + return NULL; + } + wr->type = GUTHTHILA_WRITER_FILE; + wr->status = BEGINING; + wr->next = 0; + return wr; +} + +GUTHTHILA_EXPORT guththila_xml_writer_t * GUTHTHILA_CALL +guththila_create_xml_stream_writer_for_memory( + const axutil_env_t * env) +{ + guththila_xml_writer_t * wr = AXIS2_MALLOC(env->allocator, sizeof(guththila_xml_writer_t)); + if(!wr) + return NULL; + if(!guththila_buffer_init(&wr->buffer, GUTHTHILA_BUFFER_DEF_SIZE, env)) + { + AXIS2_FREE(env->allocator, wr); + return NULL; + } + if(!guththila_stack_init(&wr->element, env)) + { + guththila_buffer_un_init(&wr->buffer, env); + AXIS2_FREE(env->allocator, wr); + return NULL; + } + if(!guththila_stack_init(&wr->namesp, env)) + { + guththila_buffer_un_init(&wr->buffer, env); + guththila_stack_un_init(&wr->element, env); + AXIS2_FREE(env->allocator, wr); + return NULL; + } + +#ifdef GUTHTHILA_XML_WRITER_TOKEN + if (!guththila_tok_list_init(&wr->tok_list, env)) + { + guththila_buffer_un_init(&wr->buffer, env); + guththila_stack_un_init(&wr->element, env); + guththila_stack_un_init(&wr->namesp, env); + AXIS2_FREE(env->allocator, wr); + return NULL; + } +#endif + wr->type = GUTHTHILA_WRITER_MEMORY; + wr->status = BEGINING; + wr->next = 0; + return wr; +} + +GUTHTHILA_EXPORT void GUTHTHILA_CALL +guththila_xml_writer_free( + guththila_xml_writer_t * wr, + const axutil_env_t * env) +{ + if(wr->type == GUTHTHILA_WRITER_MEMORY) + { + guththila_buffer_un_init(&wr->buffer, env); + } + else if(wr->type == GUTHTHILA_WRITER_FILE) + { + fclose(wr->out_stream); + } + +#ifdef GUTHTHILA_XML_WRITER_TOKEN + guththila_tok_list_free_data(&wr->tok_list, env); +#endif + guththila_stack_un_init(&wr->element, env); + guththila_stack_un_init(&wr->namesp, env); + AXIS2_FREE(env->allocator, wr); +} + +int GUTHTHILA_CALL +guththila_write( + guththila_xml_writer_t * wr, + guththila_char_t *buff, + size_t buff_len, + const axutil_env_t * env) +{ + size_t remain_len = 0; + size_t temp = 0; + size_t * temp1 = NULL, *temp2 = NULL; + guththila_char_t **temp3 = NULL; + int i = 0; + if(wr->type == GUTHTHILA_WRITER_MEMORY) + { + remain_len = wr->buffer.buffs_size[wr->buffer.cur_buff] + - wr->buffer.data_size[wr->buffer.cur_buff]; + /* We have space */ + if(buff_len < remain_len) + { + memcpy( + wr->buffer.buff[wr->buffer.cur_buff] + wr->buffer.data_size[wr->buffer.cur_buff], + buff, buff_len); + wr->buffer.data_size[wr->buffer.cur_buff] += buff_len; + wr->next += (int)buff_len; + /* We are sure that the difference lies within the int range */ + return (int)buff_len; + } + else + { + if(remain_len != 0) + { + memcpy(wr->buffer.buff[wr->buffer.cur_buff] + + wr->buffer.data_size[wr->buffer.cur_buff], buff, remain_len); + wr->buffer.data_size[wr->buffer.cur_buff] += remain_len; + } + /* We are sure that the difference lies within the int range */ + if(((int)wr->buffer.no_buffers - 1) == wr->buffer.cur_buff) + { + /* Out of allocated array buffers. Need to allocate*/ + wr->buffer.no_buffers = wr->buffer.no_buffers * 2; + temp3 = (guththila_char_t **)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t *) * wr->buffer.no_buffers); + temp1 = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) + * wr->buffer.no_buffers); + temp2 = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) + * wr->buffer.no_buffers); + for(i = 0; i <= wr->buffer.cur_buff; i++) + { + temp3[i] = wr->buffer.buff[i]; + temp1[i] = wr->buffer.data_size[i]; + temp2[i] = wr->buffer.buffs_size[i]; + } + AXIS2_FREE(env->allocator, wr->buffer.data_size); + AXIS2_FREE(env->allocator, wr->buffer.buffs_size); + AXIS2_FREE(env->allocator, wr->buffer.buff); + wr->buffer.buff = temp3; + wr->buffer.buffs_size = temp2; + wr->buffer.data_size = temp1; + } + wr->buffer.cur_buff++; + temp = wr->buffer.buffs_size[wr->buffer.cur_buff - 1] * 2; + while(temp < (buff_len - remain_len)) + { + temp = temp * 2; + } + /* Create a be buffer */ + wr->buffer.buff[wr->buffer.cur_buff] = (guththila_char_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t) * temp); + wr->buffer.buffs_size[wr->buffer.cur_buff] = temp; + memcpy(wr->buffer.buff[wr->buffer.cur_buff], buff + remain_len, buff_len - remain_len); + wr->buffer.data_size[wr->buffer.cur_buff] = buff_len - remain_len; + wr->buffer.pre_tot_data += wr->buffer.data_size[wr->buffer.cur_buff - 1]; + wr->next += (int)buff_len; + /* We are sure that the difference lies within the int range */ + return (int)buff_len; + } + } + else if(wr->type == GUTHTHILA_WRITER_FILE) + { + return (int)fwrite(buff, 1, buff_len, wr->out_stream); + } + return GUTHTHILA_FAILURE; +} + +int GUTHTHILA_CALL +guththila_write_token( + guththila_xml_writer_t * wr, + guththila_token_t * tok, + const axutil_env_t * env) +{ + int i; + size_t remain_len = 0; + size_t temp = 0; + size_t * temp1 = NULL, *temp2 = NULL; + guththila_char_t **temp3 = NULL; + if(wr->type == GUTHTHILA_WRITER_MEMORY) + { + remain_len = wr->buffer.buffs_size[wr->buffer.cur_buff] + - wr->buffer.data_size[wr->buffer.cur_buff]; + if(tok->size < remain_len) + { + memcpy( + wr->buffer.buff[wr->buffer.cur_buff] + wr->buffer.data_size[wr->buffer.cur_buff], + tok->start, tok->size); + + wr->buffer.data_size[wr->buffer.cur_buff] += tok->size; + wr->next += (int)tok->size; + /* We are sure that the difference lies within the int range */ + return (int)tok->size; + } + else + { + if(remain_len != 0) + { + memcpy(wr->buffer.buff[wr->buffer.cur_buff] + + wr->buffer.data_size[wr->buffer.cur_buff], tok->start, remain_len); + + wr->buffer.data_size[wr->buffer.cur_buff] += remain_len; + } + /* We are sure that the difference lies within the int range */ + if(((int)wr->buffer.no_buffers - 1) == wr->buffer.cur_buff) + { + wr->buffer.no_buffers = wr->buffer.no_buffers * 2; + temp3 = (guththila_char_t **)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t *) * wr->buffer.no_buffers); + temp1 = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) + * wr->buffer.no_buffers); + temp2 = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) + * wr->buffer.no_buffers); + for(i = 0; i <= wr->buffer.cur_buff; i++) + { + temp3[i] = wr->buffer.buff[i]; + temp1[i] = wr->buffer.data_size[i]; + temp2[i] = wr->buffer.buffs_size[i]; + } + AXIS2_FREE(env->allocator, wr->buffer.data_size); + AXIS2_FREE(env->allocator, wr->buffer.buffs_size); + AXIS2_FREE(env->allocator, wr->buffer.buff); + wr->buffer.buff = temp3; + wr->buffer.buffs_size = temp2; + wr->buffer.data_size = temp1; + } + wr->buffer.cur_buff++; + temp = wr->buffer.buffs_size[wr->buffer.cur_buff - 1] * 2; + while(temp < (tok->size - remain_len)) + { + temp = temp * 2; + } + wr->buffer.buff[wr->buffer.cur_buff] = (guththila_char_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t) * temp); + + wr->buffer.buffs_size[wr->buffer.cur_buff] = temp; + memcpy(wr->buffer.buff[wr->buffer.cur_buff], tok->start + remain_len, tok->size + - remain_len); + wr->buffer.data_size[wr->buffer.cur_buff] = tok->size - remain_len; + wr->buffer.pre_tot_data += wr->buffer.data_size[wr->buffer.cur_buff - 1]; + wr->next += (int)tok->size; + /* We are sure that the difference lies within the int range */ + return (int)tok->size; + } + } + else if(wr->type == GUTHTHILA_WRITER_FILE) + { + return (int)fwrite(tok->start, 1, tok->size, wr->out_stream); + } + return GUTHTHILA_FAILURE; +} + +int GUTHTHILA_CALL +guththila_write_xtoken( + guththila_xml_writer_t * wr, + guththila_char_t *buff, + size_t buff_len, + const axutil_env_t * env) +{ + int i; + size_t temp = 0; + size_t remain_len = 0; + size_t * temp1 = NULL, *temp2 = NULL; + guththila_char_t **temp3 = NULL; + if(wr->type == GUTHTHILA_WRITER_MEMORY) + { + remain_len = wr->buffer.buffs_size[wr->buffer.cur_buff] + - wr->buffer.data_size[wr->buffer.cur_buff]; + if(buff_len < remain_len) + { + memcpy( + wr->buffer.buff[wr->buffer.cur_buff] + wr->buffer.data_size[wr->buffer.cur_buff], + buff, buff_len); + wr->buffer.data_size[wr->buffer.cur_buff] += buff_len; + wr->next += (int)buff_len; + /* We are sure that the difference lies within the int range */ + return (int)buff_len; + } + else + { + /* We are sure that the difference lies within the int range */ + if(((int)wr->buffer.no_buffers - 1) == wr->buffer.cur_buff) + { + wr->buffer.no_buffers = wr->buffer.no_buffers * 2; + temp3 = (guththila_char_t **)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t *) * wr->buffer.no_buffers); + temp1 = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) + * wr->buffer.no_buffers); + temp2 = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) + * wr->buffer.no_buffers); + for(i = 0; i <= wr->buffer.cur_buff; i++) + { + temp3[i] = wr->buffer.buff[i]; + temp1[i] = wr->buffer.data_size[i]; + temp2[i] = wr->buffer.buffs_size[i]; + } + AXIS2_FREE(env->allocator, wr->buffer.data_size); + AXIS2_FREE(env->allocator, wr->buffer.buffs_size); + AXIS2_FREE(env->allocator, wr->buffer.buff); + wr->buffer.buff = temp3; + wr->buffer.buffs_size = temp2; + wr->buffer.data_size = temp1; + } + temp = wr->buffer.buffs_size[wr->buffer.cur_buff] * 2; + while(temp < (buff_len)) + { + temp = temp * 2; + } + wr->buffer.cur_buff++; + wr->buffer.buff[wr->buffer.cur_buff] = (guththila_char_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t) * temp); + + wr->buffer.buffs_size[wr->buffer.cur_buff] = temp; + memcpy(wr->buffer.buff[wr->buffer.cur_buff], buff, buff_len); + wr->buffer.data_size[wr->buffer.cur_buff] = buff_len; + wr->buffer.pre_tot_data += wr->buffer.data_size[wr->buffer.cur_buff - 1]; + wr->next += (int)buff_len; + /* We are sure that the difference lies within the int range */ + return (int)buff_len; + } + } + else if(wr->type == GUTHTHILA_WRITER_FILE) + { + return (int)fwrite(buff, 1, buff_len, wr->out_stream); + } + return GUTHTHILA_FAILURE; +} + +int GUTHTHILA_CALL +guththila_free_empty_element( + guththila_xml_writer_t *wr, + const axutil_env_t *env) +{ + guththila_xml_writer_element_t * elem = NULL; + guththila_xml_writer_namesp_t * namesp = NULL; + int i = 0, j = 0; + elem = (guththila_xml_writer_element_t *)guththila_stack_pop(&wr->element, env); + if(elem) + { + wr->status = BEGINING; + if(elem->name_sp_stack_no != -1) + { + GUTHTHILA_WRITER_CLEAR_NAMESP(wr, &wr->namesp, + elem->name_sp_stack_no, i, + namesp, j, env); + } + GUTHTHILA_WRITER_ELEM_FREE(wr, elem, env); + return GUTHTHILA_SUCCESS; + } + else + { + return GUTHTHILA_FAILURE; + } +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_start_document( + guththila_xml_writer_t * wr, + const axutil_env_t * env, + char *encoding, + char *version) +{ + char *tmp1 = NULL; + char *tmp2 = GUTHTHILA_WRITER_SD_DECLARATION; + + tmp1 = strchr(tmp2, '\"'); + tmp1++; + guththila_write(wr, tmp2, (int)(tmp1 - tmp2), env); + tmp2 = strchr(tmp1, '\"'); + if(version) + { + guththila_write(wr, version, (int)strlen(version), env); + } + else + { + guththila_write(wr, tmp1, (int)(tmp2 - tmp1), env); + } + tmp2++; + tmp1 = strchr(tmp2, '\"'); + tmp2--; + tmp1++; + guththila_write(wr, tmp2, (int)(tmp1 - tmp2), env); + tmp2 = strchr(tmp1, '\"'); + if(encoding) + { + guththila_write(wr, encoding, (int)strlen(encoding), env); + } + else + { + guththila_write(wr, tmp1, (int)(tmp2 - tmp1), env); + } + guththila_write(wr, tmp2, (int)strlen(tmp2), env); + + return GUTHTHILA_SUCCESS; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_start_element( + guththila_xml_writer_t * wr, + guththila_char_t *start_element, + const axutil_env_t * env) +{ + int cur_pos = 0; + size_t len = 0; + guththila_xml_writer_element_t * element = (guththila_xml_writer_element_t *)AXIS2_MALLOC( + env->allocator, sizeof(guththila_xml_writer_element_t)); + len = strlen(start_element); + if(wr->status == START) + { + /* If we are in a start we need to close and start */ + guththila_write(wr, "><", 2u, env); + cur_pos = wr->next; + guththila_write_xtoken(wr, start_element, len, env); + } + else if(wr->status == START_EMPTY) + { + /* We need to close and start */ + guththila_free_empty_element(wr, env); + guththila_write(wr, "/><", 3u, env); + cur_pos = wr->next; + guththila_write_xtoken(wr, start_element, len, env); + } + else if(wr->status == BEGINING) + { + /* We can start rightaway*/ + guththila_write(wr, "<", 1u, env); + cur_pos = wr->next; + guththila_write_xtoken(wr, start_element, len, env); + } + else + { + return GUTHTHILA_FAILURE; + } + wr->status = START; + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + element->name = strdup(start_element); + element->prefix = NULL; +#else + element->name = guththila_tok_list_get_token(&wr->tok_list, env); + element->name->start = GUTHTHILA_BUF_POS(wr->buffer, cur_pos); + element->name->size = len; + element->prefix = NULL; + +#endif + element->name_sp_stack_no = -1; + return guththila_stack_push(&wr->element, element, env); +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_end_element( + guththila_xml_writer_t * wr, + const axutil_env_t * env) +{ + guththila_xml_writer_element_t * elem = NULL; + guththila_xml_writer_namesp_t * namesp = NULL; + int i = 0, j = 0; + if(wr->status == START) + { + guththila_write(wr, ">element, env); + if(elem) + { + if(elem->prefix) + { + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + guththila_write(wr, elem->prefix, strlen(elem->prefix), env); +#else + guththila_write_token(wr, elem->prefix, env); +#endif + guththila_write(wr, ":", 1u, env); + } + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + guththila_write(wr, elem->name, strlen(elem->name), env); +#else + guththila_write_token(wr, elem->name, env); +#endif + guththila_write(wr, ">", 1u, env); + wr->status = BEGINING; + if(elem->name_sp_stack_no != -1) + { + GUTHTHILA_WRITER_CLEAR_NAMESP(wr, &wr->namesp, + elem->name_sp_stack_no, i, + namesp, j, env); + } + GUTHTHILA_WRITER_ELEM_FREE(wr, elem, env); + return GUTHTHILA_SUCCESS; + } + else + { + return GUTHTHILA_FAILURE; + } + } + else if(wr->status == START_EMPTY) + { + guththila_write(wr, "/>", 2u, env); + elem = (guththila_xml_writer_element_t *)guththila_stack_pop(&wr->element, env); + if(elem) + { + wr->status = BEGINING; + if(elem->name_sp_stack_no != -1) + { + GUTHTHILA_WRITER_CLEAR_NAMESP(wr, &wr->namesp, + elem->name_sp_stack_no, i, + namesp, j, env); + } + GUTHTHILA_WRITER_ELEM_FREE(wr, elem, env); + return GUTHTHILA_SUCCESS; + } + else + { + return GUTHTHILA_FAILURE; + } + } + else if(wr->status == BEGINING) + { + guththila_write(wr, "element, env); + if(elem) + { + if(elem->prefix) + { + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + guththila_write(wr, elem->prefix, strlen(elem->prefix), env); +#else + guththila_write_token(wr, elem->prefix, env); +#endif + guththila_write(wr, ":", 1u, env); + } + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + guththila_write(wr, elem->name, strlen(elem->name), env); +#else + guththila_write_token(wr, elem->name, env); +#endif + guththila_write(wr, ">", 1u, env); + wr->status = BEGINING; + if(elem->name_sp_stack_no != -1) + { + GUTHTHILA_WRITER_CLEAR_NAMESP(wr, &wr->namesp, + elem->name_sp_stack_no, i, + namesp, j, env); + } + GUTHTHILA_WRITER_ELEM_FREE(wr, elem, env); + return GUTHTHILA_SUCCESS; + } + else + { + return GUTHTHILA_FAILURE; + } + } + return GUTHTHILA_FAILURE; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_close( + guththila_xml_writer_t * wr, + const axutil_env_t * env) +{ + return GUTHTHILA_FAILURE; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_characters( + guththila_xml_writer_t * wr, + guththila_char_t *buff, + const axutil_env_t * env) +{ + size_t len = strlen(buff); + if(wr->status == START) + { + wr->status = BEGINING; + guththila_write(wr, ">", 1u, env); + } + else if(wr->status == START_EMPTY) + { + guththila_free_empty_element(wr, env); + wr->status = BEGINING; + guththila_write(wr, "/>", 2u, env); + } + else if(wr->status != BEGINING) + { + return GUTHTHILA_FAILURE; + } + while(len > 0) + { + size_t i = 0; + /* scan buffer until the next special character (&, <, >, ', ") these need to be escaped, + * otherwise XML will not be valid*/ + guththila_char_t *pos = (guththila_char_t*)strpbrk(buff, "&<>'\""); + if(pos) + { + i = pos - buff; + } + else + { + i = len; + } + + /* write everything until the special character */ + if(i > 0) + { + guththila_write(wr, buff, i, env); + buff += i; + len -= i; + } + /* replace the character with the appropriate sequence */ + if(len > 0) + { + if(AXIS2_SUCCESS != guththila_write_escape_character(wr, buff, env)) + return GUTHTHILA_FAILURE; + /* skip the character */ + buff++; + len--; + } + } + return GUTHTHILA_SUCCESS; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_comment( + guththila_xml_writer_t * wr, + guththila_char_t *buff, + const axutil_env_t * env) +{ + if(wr->status == START) + { + wr->status = BEGINING; + guththila_write(wr, ">", 3u, env); + return GUTHTHILA_SUCCESS; + } + else if(wr->status == START_EMPTY) + { + guththila_free_empty_element(wr, env); + wr->status = BEGINING; + guththila_write(wr, "/>", 3u, env); + return GUTHTHILA_SUCCESS; + } + else if(wr->status == BEGINING) + { + guththila_write(wr, "", 3u, env); + return GUTHTHILA_SUCCESS; + } + return GUTHTHILA_FAILURE; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_escape_character( + guththila_xml_writer_t * wr, + guththila_char_t *buff, + const axutil_env_t * env) +{ + if(buff) + { + switch(buff[0]) + { + case '>': + guththila_write(wr, ">", 4u, env); + break; + case '<': + guththila_write(wr, "<", 4u, env); + break; + case '\'': + guththila_write(wr, "'", 6u, env); + break; + case '"': + guththila_write(wr, """, 6u, env); + break; + case '&': + guththila_write(wr, "&", 5u, env); + break; + default: + return GUTHTHILA_FAILURE; + }; + } + return GUTHTHILA_SUCCESS; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_empty_element( + guththila_xml_writer_t * wr, + guththila_char_t *start_element, + const axutil_env_t * env) +{ + int cur_pos = 0; + size_t len = 0; + guththila_xml_writer_element_t * element = (guththila_xml_writer_element_t *)AXIS2_MALLOC( + env->allocator, sizeof(guththila_xml_writer_element_t)); + len = strlen(start_element); + if(wr->status == START) + { + guththila_write(wr, "><", 2u, env); + cur_pos = wr->next; + guththila_write_xtoken(wr, start_element, len, env); + } + else if(wr->status == START_EMPTY) + { + guththila_free_empty_element(wr, env); + wr->status = BEGINING; + guththila_write(wr, "/><", 3u, env); + cur_pos = wr->next; + guththila_write_xtoken(wr, start_element, len, env); + } + else if(wr->status == BEGINING) + { + guththila_write(wr, "<", 1u, env); + cur_pos = wr->next; + guththila_write_xtoken(wr, start_element, len, env); + } + else + { + return GUTHTHILA_FAILURE; + } + wr->status = START_EMPTY; + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + element->name = strdup(start_element); + element->prefix = NULL; +#else + element->name = guththila_tok_list_get_token(&wr->tok_list, env); + element->name->start = GUTHTHILA_BUF_POS(wr->buffer, cur_pos); + element->name->size = len; + element->prefix = NULL; + +#endif + element->name_sp_stack_no = -1; + return guththila_stack_push(&wr->element, element, env); +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_default_namespace( + guththila_xml_writer_t * wr, + guththila_char_t *namespace_uri, + const axutil_env_t * env) +{ + if(wr->status == START || wr->status == START_EMPTY) + { + guththila_write(wr, " xmlns=\"", 8u, env); + guththila_write(wr, namespace_uri, strlen(namespace_uri), env); + guththila_write(wr, "\"", 1u, env); + return GUTHTHILA_SUCCESS; + } + return GUTHTHILA_FAILURE; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_namespace( + guththila_xml_writer_t * wr, + guththila_char_t *prefix, + guththila_char_t *uri, + const axutil_env_t * env) +{ + int i, j, temp, nmsp_found = GUTHTHILA_FALSE, stack_size; + guththila_xml_writer_namesp_t * namesp = NULL; + guththila_xml_writer_element_t * elem = NULL; + int pref_start = 0, uri_start = 0; + guththila_char_t *pref_start_p = NULL, *uri_start_p = NULL; + guththila_xml_writer_namesp_t * writer_namesp = NULL; + guththila_token_t ** tok_name = NULL, **tok_uri = NULL; + size_t pref_len = strlen(prefix), uri_len = strlen(uri); + stack_size = GUTHTHILA_STACK_SIZE(wr->namesp); + /* Check weather we have met the namespace before */ + for(i = stack_size - 1; i >= 0; i--) + { + writer_namesp = (guththila_xml_writer_namesp_t *)guththila_stack_get_by_index(&wr->namesp, + i, env); + temp = writer_namesp->no; + for(j = 0; j < temp; j++) + { + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + if(!strcmp(prefix, writer_namesp->name[j])) + { + +#else + if (!guththila_tok_str_cmp(writer_namesp->name[j], prefix, pref_len, env)) + { +#endif + nmsp_found = GUTHTHILA_TRUE; + } + } + } + /* Proceed if we didn't find the namespace */ + if(!nmsp_found && (wr->status == START || wr->status == START_EMPTY)) + { + guththila_write(wr, " xmlns:", 7u, env); + pref_start = wr->next; + guththila_write_xtoken(wr, prefix, pref_len, env); + pref_start_p = GUTHTHILA_BUF_POS(wr->buffer, pref_start); + guththila_write(wr, "=\"", 2u, env); + uri_start = wr->next; + guththila_write_xtoken(wr, uri, uri_len, env); + uri_start_p = GUTHTHILA_BUF_POS(wr->buffer, uri_start); + guththila_write(wr, "\"", 1u, env); + elem = guththila_stack_peek(&wr->element, env); + if(elem && elem->name_sp_stack_no == -1) + { + namesp = (guththila_xml_writer_namesp_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_xml_writer_namesp_t)); + if(namesp) + { + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + namesp->name = (guththila_char_t **)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t *) * GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE); + namesp->uri = (guththila_char_t **)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t *) * GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE); + namesp->name[0] = strdup(prefix); + namesp->uri[0] = strdup(uri); + +#else + namesp->name = + (guththila_token_t **) AXIS2_MALLOC(env->allocator, + sizeof(guththila_token_t + *) * + GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE); + namesp->uri = + (guththila_token_t **) AXIS2_MALLOC(env->allocator, + sizeof(guththila_token_t + *) * + GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE); + namesp->name[0] = guththila_tok_list_get_token(&wr->tok_list, env); + namesp->name[0]->start = pref_start_p ; + namesp->name[0]->size = pref_len; + namesp->uri[0] = guththila_tok_list_get_token(&wr->tok_list, env); + namesp->uri[0]->start = uri_start_p ; + namesp->uri[0]->size = uri_len; + +#endif + namesp->no = 1; + namesp->size = GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE; + guththila_stack_push(&wr->namesp, namesp, env); + elem->name_sp_stack_no = GUTHTHILA_STACK_TOP_INDEX(wr->namesp); + } + else + { + return GUTHTHILA_FAILURE; + } + } + else if(elem) + { + namesp = guththila_stack_peek(&wr->namesp, env); + if(namesp->no < namesp->size) + { + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + namesp->name[++(namesp->no) - 1] = strdup(prefix); + namesp->uri[namesp->no - 1] = strdup(uri); + +#else + namesp->name[++(namesp->no) - 1] = guththila_tok_list_get_token(&wr->tok_list, env); + namesp->uri[namesp->no - 1] = guththila_tok_list_get_token(&wr->tok_list, env); + namesp->name[namesp->no - 1]->start = pref_start_p; + namesp->name[namesp->no - 1]->size = pref_len; + namesp->uri[namesp->no - 1]->start = uri_start_p; + namesp->uri[namesp->no - 1]->size = uri_len; + +#endif + } + else + { + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + namesp->name = (guththila_char_t **)realloc(namesp->name, + sizeof(guththila_char_t *) * (GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE + + namesp->size)); + namesp->uri = (guththila_char_t **)realloc(namesp->name, sizeof(guththila_char_t *) + * (GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE + namesp->size)); + namesp->size = GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE + namesp->size; + namesp->name[++(namesp->no) - 1] = strdup(prefix); + namesp->uri[namesp->no - 1] = strdup(uri); + +#else + tok_name = + (guththila_token_t **) AXIS2_MALLOC(env->allocator, + sizeof(guththila_token_t *) * + (GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE + + namesp->size)); + tok_uri = + (guththila_token_t **) AXIS2_MALLOC(env->allocator, + sizeof(guththila_token_t *) * + (GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE + + namesp->size)); + for (i = 0; i < namesp->no; i++) + { + tok_name[i] = namesp->name[i]; + tok_uri[i] = namesp->uri[i]; + } + AXIS2_FREE(env->allocator, namesp->name); + AXIS2_FREE(env->allocator, namesp->uri); + namesp->name = tok_name; + namesp->uri = tok_uri; + namesp->size = GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE + namesp->size; + + namesp->name[namesp->no] = guththila_tok_list_get_token(&wr->tok_list, env); + namesp->uri[namesp->no] = guththila_tok_list_get_token(&wr->tok_list, env); + + namesp->name[namesp->no ]->start = pref_start_p; + namesp->name[namesp->no ]->size = pref_len; + namesp->uri[namesp->no ]->start = uri_start_p; + namesp->uri[namesp->no ]->size = uri_len; + namesp->no ++; +#endif + } + } + return GUTHTHILA_SUCCESS; + } + if(nmsp_found) + return GUTHTHILA_SUCCESS; + return GUTHTHILA_FAILURE; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_attribute( + guththila_xml_writer_t * wr, + guththila_char_t *localname, + guththila_char_t *value, + const axutil_env_t * env) +{ + if(wr->status == START || wr->status == START_EMPTY) + { + guththila_write(wr, " ", 1u, env); + guththila_write(wr, localname, strlen(localname), env); + guththila_write(wr, "=\"", 2u, env); + guththila_write(wr, value, strlen(value), env); + guththila_write(wr, "\"", 1u, env); + return GUTHTHILA_SUCCESS; + } + return GUTHTHILA_FAILURE; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_attribute_with_prefix_and_namespace( + guththila_xml_writer_t * wr, + guththila_char_t *prefix, + guththila_char_t *namespace_uri, + guththila_char_t *localname, + guththila_char_t *value, + const axutil_env_t * env) +{ + return guththila_write_namespace(wr, prefix, namespace_uri, env) + && guththila_write_attribute_with_prefix(wr, prefix, localname, value, env); +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_attribute_with_prefix( + guththila_xml_writer_t * wr, + guththila_char_t *prefix, + guththila_char_t *localname, + guththila_char_t *value, + const axutil_env_t * env) +{ + int i, j; + int stack_size = GUTHTHILA_STACK_SIZE(wr->namesp); + int temp; + size_t pref_len = strlen(prefix); + guththila_xml_writer_namesp_t * writer_namesp = NULL; + if(wr->status == START || wr->status == START_EMPTY) + { + /* We need to make sure that there is a namespace defined with the + * given prefix as the name */ + for(i = stack_size - 1; i >= 0; i--) + { + writer_namesp = (guththila_xml_writer_namesp_t *)guththila_stack_get_by_index( + &wr->namesp, i, env); + temp = writer_namesp->no; + for(j = 0; j < temp; j++) + { + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + if(!strcmp(prefix, writer_namesp->name[j])) + { + +#else + if (!guththila_tok_str_cmp + (writer_namesp->name[j], prefix, pref_len, env)) + { + +#endif + guththila_write(wr, " ", 1u, env); + guththila_write(wr, prefix, pref_len, env); + guththila_write(wr, ":", 1u, env); + guththila_write(wr, localname, strlen(localname), env); + guththila_write(wr, "=\"", 2u, env); + guththila_write(wr, value, strlen(value), env); + guththila_write(wr, "\"", 1u, env); + return GUTHTHILA_SUCCESS; + } + } + } + } + return GUTHTHILA_FAILURE; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_attribute_with_namespace( + guththila_xml_writer_t * wr, + guththila_char_t *namesp, + guththila_char_t *loc_name, + guththila_char_t *value, + const axutil_env_t * env) +{ + int i, j; + int stack_size = GUTHTHILA_STACK_SIZE(wr->namesp); + int temp; + guththila_xml_writer_namesp_t * writer_namesp = NULL; + if(wr->status == START || wr->status == START_EMPTY) + { + /* We need to make sure that the namespace is previously declared */ + for(i = stack_size - 1; i >= 0; i--) + { + writer_namesp = (guththila_xml_writer_namesp_t *)guththila_stack_get_by_index( + &wr->namesp, i, env); + temp = writer_namesp->no; + for(j = 0; j < temp; j++) + { +#ifndef GUTHTHILA_XML_WRITER_TOKEN + if(!strcmp(namesp, writer_namesp->uri[j])) + { + guththila_write(wr, " ", 1, env); + guththila_write(wr, writer_namesp->name[j], strlen(writer_namesp->name[j]), env); +#else + if (!guththila_tok_str_cmp + (writer_namesp->uri[j], namesp, strlen(namesp), env)) + { + guththila_write(wr, " ", 1u, env); + guththila_write_token(wr, writer_namesp->name[j], env); +#endif + guththila_write(wr, ":", 1u, env); + guththila_write(wr, loc_name, strlen(loc_name), env); + guththila_write(wr, "=\"", 2u, env); + guththila_write(wr, value, strlen(value), env); + guththila_write(wr, "\"", 1u, env); + return GUTHTHILA_SUCCESS; + } + } + } + } + return GUTHTHILA_FAILURE; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_start_element_with_prefix_and_namespace( + guththila_xml_writer_t * wr, + guththila_char_t *prefix, + guththila_char_t *namespace_uri, + guththila_char_t *local_name, + const axutil_env_t * env) +{ + int i, j, temp, stack_size, nmsp_found = GUTHTHILA_FALSE; + guththila_xml_writer_namesp_t * namesp = NULL; + guththila_xml_writer_element_t * elem = NULL; + int uri_start = 0, pref_start = 0, elem_start = 0, elem_pref_start = 0; + guththila_char_t *uri_start_p = NULL, *pref_start_p = NULL; + guththila_char_t *elem_start_p = NULL, *elem_pref_start_p = NULL ; + size_t uri_len = 0; + size_t pref_len = 0; + size_t elem_len = 0; + guththila_xml_writer_namesp_t * writer_namesp = NULL; + + elem = (guththila_xml_writer_element_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_xml_writer_element_t)); + uri_len = strlen(namespace_uri); + pref_len = strlen(prefix); + elem_len = strlen(local_name); + stack_size = GUTHTHILA_STACK_SIZE(wr->namesp); + /* We have to determine weather we have seen the namespace before */ + for(i = stack_size - 1; i >= 0; i--) + { + writer_namesp = (guththila_xml_writer_namesp_t *)guththila_stack_get_by_index(&wr->namesp, + i, env); + temp = writer_namesp->no; + for(j = 0; j < temp; j++) + { +#ifndef GUTHTHILA_XML_WRITER_TOKEN + if(!strcmp(uri, writer_namesp->uri[j])) + { + +#else + if (!guththila_tok_str_cmp + (writer_namesp->name[j], prefix, pref_len, env)) + { + +#endif + nmsp_found = GUTHTHILA_TRUE; + } + } + } + if(elem) + { + elem->name_sp_stack_no = -1; + if(wr->status == START) + { + guththila_write(wr, "><", 2u, env); + elem_pref_start = wr->next; + guththila_write_xtoken(wr, prefix, pref_len, env); + elem_pref_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_pref_start); + guththila_write(wr, ":", 1u, env); + elem_start = wr->next; + guththila_write_xtoken(wr, local_name, elem_len, env); + elem_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_start); + if(!nmsp_found) + { + guththila_write(wr, " ", 1u, env); + guththila_write(wr, "xmlns:", 6u, env); + pref_start = wr->next; + guththila_write_xtoken(wr, prefix, pref_len, env); + pref_start_p = GUTHTHILA_BUF_POS(wr->buffer, pref_start); + guththila_write(wr, "=\"", 2u, env); + uri_start = wr->next; + guththila_write_xtoken(wr, namespace_uri, uri_len, env); + uri_start_p = GUTHTHILA_BUF_POS(wr->buffer, uri_start); + guththila_write(wr, "\"", 1u, env); + } + } + else if(wr->status == START_EMPTY) + { + guththila_free_empty_element(wr, env); + guththila_write(wr, "/><", 2u, env); + elem_pref_start = wr->next; + guththila_write_xtoken(wr, prefix, pref_len, env); + elem_pref_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_pref_start); + guththila_write(wr, ":", 1u, env); + elem_start = wr->next; + guththila_write_xtoken(wr, local_name, elem_len, env); + elem_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_start); + if(!nmsp_found) + { + guththila_write(wr, " ", 1u, env); + guththila_write(wr, "xmlns:", 6u, env); + pref_start = wr->next; + guththila_write_xtoken(wr, prefix, pref_len, env); + pref_start_p = GUTHTHILA_BUF_POS(wr->buffer, pref_start); + guththila_write(wr, "=\"", 2u, env); + uri_start = wr->next; + guththila_write_xtoken(wr, namespace_uri, uri_len, env); + uri_start_p = GUTHTHILA_BUF_POS(wr->buffer, uri_start); + guththila_write(wr, "\"", 1u, env); + } + wr->status = START; + } + else if(wr->status == BEGINING) + { + guththila_write(wr, "<", 1u, env); + elem_pref_start = wr->next; + guththila_write_xtoken(wr, prefix, pref_len, env); + elem_pref_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_pref_start); + guththila_write(wr, ":", 1u, env); + elem_start = wr->next; + guththila_write_xtoken(wr, local_name, elem_len, env); + elem_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_start); + if(!nmsp_found) + { + guththila_write(wr, " ", 1u, env); + guththila_write(wr, "xmlns:", 6u, env); + pref_start = wr->next; + guththila_write_xtoken(wr, prefix, pref_len, env); + pref_start_p = GUTHTHILA_BUF_POS(wr->buffer, pref_start); + guththila_write(wr, "=\"", 2u, env); + uri_start = wr->next; + guththila_write_xtoken(wr, namespace_uri, uri_len, env); + uri_start_p = GUTHTHILA_BUF_POS(wr->buffer, uri_start); + guththila_write(wr, "\"", 1u, env); + } + wr->status = START; + } + else + { + return GUTHTHILA_FAILURE; + } + if(!nmsp_found) + { + /* If this namespace not defined previously we need to add it */ + namesp = (guththila_xml_writer_namesp_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_xml_writer_namesp_t)); + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + namesp->name = (guththila_char_t **)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t *) * GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE); + namesp->uri = (guththila_char_t **)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t *) * GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE); + namesp->name[0] = strdup(prefix); + namesp->uri[0] = strdup(namespace_uri); + +#else + namesp->name = + (guththila_token_t **) AXIS2_MALLOC(env->allocator, + sizeof(guththila_token_t *) + * + GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE); + namesp->uri = + (guththila_token_t **) AXIS2_MALLOC(env->allocator, + sizeof(guththila_token_t *) + * + GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE); + namesp->name[0] = guththila_tok_list_get_token(&wr->tok_list, env); + namesp->name[0]->start = pref_start_p; + namesp->name[0]->size = pref_len; + namesp->uri[0] = guththila_tok_list_get_token(&wr->tok_list, env); + namesp->uri[0]->start = uri_start_p; + namesp->uri[0]->size = uri_len; +#endif + namesp->no = 1; + namesp->size = GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE; + guththila_stack_push(&wr->namesp, namesp, env); + elem->name_sp_stack_no = GUTHTHILA_STACK_TOP_INDEX(wr->namesp); + } + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + elem->name = strdup(local_name); + elem->prefix = strdup(prefix); +#else + elem->name = guththila_tok_list_get_token(&wr->tok_list, env); + elem->prefix = guththila_tok_list_get_token(&wr->tok_list, env); + elem->name->start = elem_start_p; + elem->name->size = elem_len; + elem->prefix->start = elem_pref_start_p; + elem->prefix->size = pref_len; +#endif + guththila_stack_push(&wr->element, elem, env); + } + else + { + return GUTHTHILA_FAILURE; + } + return GUTHTHILA_SUCCESS; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_start_element_with_namespace( + guththila_xml_writer_t * wr, + guththila_char_t *namespace_uri, + guththila_char_t *local_name, + const axutil_env_t * env) +{ + int i = 0, j = 0; + int stack_size = GUTHTHILA_STACK_SIZE(wr->namesp); + int temp = 0; + int elem_start = 0; + guththila_char_t *elem_start_p = NULL; + size_t elem_len = 0; + guththila_xml_writer_namesp_t * writer_namesp = NULL; + guththila_xml_writer_element_t * element; + + elem_len = strlen(local_name); + element = (guththila_xml_writer_element_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_xml_writer_element_t)); + if(!element) + return GUTHTHILA_FAILURE; + + for(i = stack_size - 1; i >= 0; i--) + { + writer_namesp = (guththila_xml_writer_namesp_t *)guththila_stack_get_by_index(&wr->namesp, + i, env); + temp = writer_namesp->no; + for(j = 0; j < temp; j++) + { +#ifndef GUTHTHILA_XML_WRITER_TOKEN + if(!strcmp(namespace_uri, writer_namesp->uri[j])) +#else + if (!guththila_tok_str_cmp + (writer_namesp->uri[j], namespace_uri, + strlen(namespace_uri), env)) +#endif + { + i = 0; /* force exit from outer loop as well */ + break; + } + } + } + + /* Close off any preceding element and start a new element */ + if(wr->status == START) + { + guththila_write(wr, "><", 2u, env); + } + else if(wr->status == START_EMPTY) + { + guththila_free_empty_element(wr, env); + guththila_write(wr, "/><", 2u, env); + } + else if(wr->status == BEGINING) + { + guththila_write(wr, "<", 1u, env); + } + else + { + return GUTHTHILA_FAILURE; + } + /* If there is a prefix, include it. */ + if(writer_namesp && (j < writer_namesp->no)) + { +#ifndef GUTHTHILA_XML_WRITER_TOKEN + guththila_write(wr, writer_namesp->name[j], strlen(writer_namesp->name[j]), env); +#else + guththila_write_token(wr, writer_namesp->name[j], env); +#endif + guththila_write(wr, ":", 1u, env); + } + elem_start = wr->next; + guththila_write_xtoken(wr, local_name, elem_len, env); + elem_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_start); + + /* Remember this element's name and prefix, so the closing tag can be written later. */ +#ifndef GUTHTHILA_XML_WRITER_TOKEN + element->name = strdup(local_name); + if(writer_namesp && (j < writer_namesp->no)) + { + element->prefix = strdup(writer_namesp->name[j]); + } + else + { + element->prefix = NULL; + } + +#else + element->name = + guththila_tok_list_get_token(&wr->tok_list, env); + element->name->size = elem_len; + element->name->start = elem_start_p; + if (writer_namesp && (j < writer_namesp->no)) + { + element->prefix = + guththila_tok_list_get_token(&wr->tok_list, env); + element->prefix->size = writer_namesp->name[j]->size; + element->prefix->start = writer_namesp->name[j]->start; + } + else + { + element->prefix = NULL; + } +#endif + + element->name_sp_stack_no = -1; + wr->status = START; + return guththila_stack_push(&wr->element, element, env); +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_start_element_with_prefix( + guththila_xml_writer_t * wr, + guththila_char_t *prefix, + guththila_char_t *local_name, + const axutil_env_t * env) +{ + int i, j; + int stack_size = GUTHTHILA_STACK_SIZE(wr->namesp); + int temp; + int elem_start = 0; + guththila_char_t *elem_start_p = NULL; + size_t elem_len = 0, pref_len = 0; + guththila_xml_writer_namesp_t * writer_namesp = NULL; + elem_len = strlen(local_name); + pref_len = strlen(prefix); + for(i = stack_size - 1; i >= 0; i--) + { + writer_namesp = (guththila_xml_writer_namesp_t *)guththila_stack_get_by_index(&wr-> namesp, + i, env); + temp = writer_namesp->no; + for(j = 0; j < temp; j++) + { + /* if we found a namespace with the given prefix we can proceed */ +#ifndef GUTHTHILA_XML_WRITER_TOKEN + if(!strcmp(prefix, writer_namesp->name[j])) + { +#else + if (!guththila_tok_str_cmp(writer_namesp->name[j], + prefix, pref_len, env)) + { +#endif + guththila_xml_writer_element_t * element = + (guththila_xml_writer_element_t *)AXIS2_MALLOC(env-> allocator, + sizeof(guththila_xml_writer_element_t)); + if(wr->status == START) + { + guththila_write(wr, "><", 2u, env); + guththila_write_xtoken(wr, prefix, pref_len, env); + guththila_write(wr, ":", 1u, env); + elem_start = wr->next; + guththila_write_xtoken(wr, local_name, strlen(local_name), env); + elem_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_start); + } + else if(wr->status == START_EMPTY) + { + guththila_free_empty_element(wr, env); + guththila_write(wr, "/><", 3u, env); + guththila_write_xtoken(wr, prefix, pref_len, env); + guththila_write(wr, ":", 1u, env); + elem_start = wr->next; + guththila_write_xtoken(wr, local_name, strlen(local_name), env); + elem_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_start); + } + else if(wr->status == BEGINING) + { + guththila_write(wr, "<", 1u, env); + guththila_write_xtoken(wr, prefix, pref_len, env); + guththila_write(wr, ":", 1u, env); + elem_start = wr->next; + guththila_write_xtoken(wr, local_name, strlen(local_name), env); + elem_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_start); + } + else + { + return GUTHTHILA_FAILURE; + } + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + element->name = strdup(local_name); + element->prefix = strdup(prefix); +#else + element->name = + guththila_tok_list_get_token(&wr->tok_list, env); + element->name->size = elem_len; + element->name->start = elem_start_p; + element->prefix = guththila_tok_list_get_token(&wr->tok_list, env); + element->prefix->size = writer_namesp->name[j]->size; + element->prefix->start = writer_namesp->name[j]->start; +#endif + wr->status = START; + element->name_sp_stack_no = -1; + return guththila_stack_push(&wr->element, element, env); + } + } + } + return GUTHTHILA_FAILURE; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_empty_element_with_prefix_and_namespace( + guththila_xml_writer_t * wr, + guththila_char_t *prefix, + guththila_char_t *namespace_uri, + guththila_char_t *local_name, + const axutil_env_t * env) +{ + int i, j, temp, stack_size, nmsp_found = GUTHTHILA_FALSE; + guththila_xml_writer_namesp_t * namesp = NULL; + guththila_xml_writer_element_t * elem = NULL; + int uri_start = 0, pref_start = 0, elem_start = 0, elem_pref_start = 0; + guththila_char_t *uri_start_p = NULL, *pref_start_p = NULL; + guththila_char_t *elem_start_p = NULL, *elem_pref_start_p = NULL ; + size_t uri_len = 0; + size_t pref_len = 0; + size_t elem_len = 0; + guththila_xml_writer_namesp_t * writer_namesp = NULL; + + namesp = (guththila_xml_writer_namesp_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_xml_writer_namesp_t)); + elem = (guththila_xml_writer_element_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_xml_writer_element_t)); + uri_len = strlen(namespace_uri); + pref_len = strlen(prefix); + elem_len = strlen(local_name); + stack_size = GUTHTHILA_STACK_SIZE(wr->namesp); + /* Chech weather we have defined this namespace before */ + for(i = stack_size - 1; i >= 0; i--) + { + writer_namesp = (guththila_xml_writer_namesp_t *)guththila_stack_get_by_index(&wr->namesp, + i, env); + temp = writer_namesp->no; + for(j = 0; j < temp; j++) + { +#ifndef GUTHTHILA_XML_WRITER_TOKEN + if(!strcmp(uri, writer_namesp->uri[j])) + { + +#else + if (!guththila_tok_str_cmp + (writer_namesp->name[j], prefix, pref_len, env)) + { + +#endif + nmsp_found = GUTHTHILA_TRUE; + } + } + } + if(namesp && elem) + { + elem->name_sp_stack_no = -1; + if(wr->status == START) + { + guththila_write(wr, "><", 2u, env); + elem_pref_start = wr->next; + guththila_write_xtoken(wr, prefix, pref_len, env); + elem_pref_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_pref_start); + guththila_write(wr, ":", 1u, env); + elem_start = wr->next; + guththila_write_xtoken(wr, local_name, elem_len, env); + elem_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_start); + if(!nmsp_found) + { + guththila_write(wr, " ", 1u, env); + guththila_write(wr, "xmlns:", 6u, env); + pref_start = wr->next; + guththila_write_xtoken(wr, prefix, pref_len, env); + pref_start_p = GUTHTHILA_BUF_POS(wr->buffer, pref_start); + guththila_write(wr, "=\"", 2u, env); + uri_start = wr->next; + guththila_write_xtoken(wr, namespace_uri, uri_len, env); + uri_start_p = GUTHTHILA_BUF_POS(wr->buffer, uri_start); + guththila_write(wr, "\"", 1u, env); + } + wr->status = START_EMPTY; + } + else if(wr->status == START_EMPTY) + { + guththila_free_empty_element(wr, env); + guththila_write(wr, "/><", 2u, env); + elem_pref_start = wr->next; + guththila_write_xtoken(wr, prefix, pref_len, env); + elem_pref_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_pref_start); + guththila_write(wr, ":", 1u, env); + elem_start = wr->next; + guththila_write_xtoken(wr, local_name, elem_len, env); + elem_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_start); + if(!nmsp_found) + { + guththila_write(wr, " ", 1u, env); + guththila_write(wr, "xmlns:", 6u, env); + pref_start = wr->next; + guththila_write_xtoken(wr, prefix, pref_len, env); + pref_start_p = GUTHTHILA_BUF_POS(wr->buffer, pref_start); + guththila_write(wr, "=\"", 2u, env); + uri_start = wr->next; + guththila_write_xtoken(wr, namespace_uri, uri_len, env); + uri_start_p = GUTHTHILA_BUF_POS(wr->buffer, uri_start); + guththila_write(wr, "\"", 1u, env); + } + } + else if(wr->status == BEGINING) + { + guththila_write(wr, "<", 1u, env); + elem_pref_start = wr->next; + guththila_write_xtoken(wr, prefix, pref_len, env); + elem_pref_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_pref_start); + guththila_write(wr, ":", 1u, env); + elem_start = wr->next; + guththila_write_xtoken(wr, local_name, elem_len, env); + elem_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_start); + if(!nmsp_found) + { + guththila_write(wr, " ", 1u, env); + guththila_write(wr, "xmlns:", 6u, env); + pref_start = wr->next; + guththila_write_xtoken(wr, prefix, pref_len, env); + pref_start_p = GUTHTHILA_BUF_POS(wr->buffer, pref_start); + guththila_write(wr, "=\"", 2u, env); + uri_start = wr->next; + guththila_write_xtoken(wr, namespace_uri, uri_len, env); + uri_start_p = GUTHTHILA_BUF_POS(wr->buffer, uri_start); + guththila_write(wr, "\"", 1u, env); + } + wr->status = START_EMPTY; + } + else + { + return GUTHTHILA_FAILURE; + } + if(!nmsp_found) + { + /* If the namespace is not defined we need to remember it for later*/ +#ifndef GUTHTHILA_XML_WRITER_TOKEN + namesp->name = (guththila_char_t **)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t *) * GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE); + namesp->uri = (guththila_char_t **)AXIS2_MALLOC(env->allocator, + sizeof(guththila_char_t *) * GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE); + namesp->name[0] = strdup(prefix); + namesp->uri[0] = strdup(namespace_uri); + +#else + namesp->name = + (guththila_token_t **) AXIS2_MALLOC(env->allocator, + sizeof(guththila_token_t *) + * + GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE); + namesp->uri = + (guththila_token_t **) AXIS2_MALLOC(env->allocator, + sizeof(guththila_token_t *) + * + GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE); + namesp->name[0] = guththila_tok_list_get_token(&wr->tok_list, env); + namesp->name[0]->start = pref_start_p; + namesp->name[0]->size = pref_len; + namesp->uri[0] = guththila_tok_list_get_token(&wr->tok_list, env); + namesp->uri[0]->start = uri_start_p; + namesp->uri[0]->size = uri_len; +#endif + namesp->no = 1; + namesp->size = GUTHTHILA_XML_WRITER_NAMESP_DEF_SIZE; + guththila_stack_push(&wr->namesp, namesp, env); + elem->name_sp_stack_no = GUTHTHILA_STACK_TOP_INDEX(wr->namesp); + } + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + elem->name = strdup(local_name); + elem->prefix = strdup(prefix); +#else + elem->name = guththila_tok_list_get_token(&wr->tok_list, env); + elem->prefix = guththila_tok_list_get_token(&wr->tok_list, env); + elem->name->start = elem_start_p; + elem->name->size = elem_len; + elem->prefix->start = elem_pref_start_p; + elem->prefix->size = pref_len; +#endif + guththila_stack_push(&wr->element, elem, env); + } + return GUTHTHILA_SUCCESS; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_empty_element_with_namespace( + guththila_xml_writer_t * wr, + guththila_char_t *namespace_uri, + guththila_char_t *local_name, + const axutil_env_t * env) +{ + int i = 0, j = 0; + int stack_size = GUTHTHILA_STACK_SIZE(wr->namesp); + int temp = 0; + int elem_start = 0; + guththila_char_t *elem_start_p = NULL; + size_t elem_len = 0; + guththila_xml_writer_namesp_t * writer_namesp = NULL; + guththila_xml_writer_element_t * element; + + elem_len = strlen(local_name); + element = (guththila_xml_writer_element_t *)AXIS2_MALLOC(env->allocator, + sizeof(guththila_xml_writer_element_t)); + if(!element) + return GUTHTHILA_FAILURE; + + for(i = stack_size - 1; i >= 0; i--) + { + writer_namesp = (guththila_xml_writer_namesp_t *)guththila_stack_get_by_index(&wr->namesp, + i, env); + temp = writer_namesp->no; + for(j = 0; j < temp; j++) + { +#ifndef GUTHTHILA_XML_WRITER_TOKEN + if(!strcmp(namespace_uri, writer_namesp->uri[j])) +#else + if (!guththila_tok_str_cmp + (writer_namesp->uri[j], namespace_uri, + strlen(namespace_uri), env)) +#endif + { + i = 0; /* force exit from outer loop as well */ + break; + } + } + } + + /* Close off any preceding element and start a new element */ + if(wr->status == START) + { + guththila_write(wr, "><", 2u, env); + } + else if(wr->status == START_EMPTY) + { + guththila_free_empty_element(wr, env); + guththila_write(wr, "/><", 2u, env); + } + else if(wr->status == BEGINING) + { + guththila_write(wr, "<", 1u, env); + } + else + { + return GUTHTHILA_FAILURE; + } + /* If there is a prefix, include it. */ + if(writer_namesp && (j < writer_namesp->no)) + { +#ifndef GUTHTHILA_XML_WRITER_TOKEN + guththila_write(wr, writer_namesp->name[j], strlen(writer_namesp->name[j]), env); +#else + guththila_write_token(wr, writer_namesp->name[j], env); +#endif + guththila_write(wr, ":", 1u, env); + } + elem_start = wr->next; + guththila_write_xtoken(wr, local_name, elem_len, env); + elem_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_start); + + /* Remember this element's name and prefix, so the closing tag can be written later. */ +#ifndef GUTHTHILA_XML_WRITER_TOKEN + element->name = strdup(local_name); + if(writer_namesp && (j < writer_namesp->no)) + { + element->prefix = strdup(writer_namesp->name[j]); + } + else + { + element->prefix = NULL; + } + +#else + element->name = + guththila_tok_list_get_token(&wr->tok_list, env); + element->name->size = elem_len; + element->name->start = elem_start_p; + if (writer_namesp && (j < writer_namesp->no)) + { + element->prefix = + guththila_tok_list_get_token(&wr->tok_list, env); + element->prefix->size = writer_namesp->name[j]->size; + element->prefix->start = writer_namesp->name[j]->start; + } + else + { + element->prefix = NULL; + } +#endif + + element->name_sp_stack_no = -1; + wr->status = START_EMPTY; + return guththila_stack_push(&wr->element, element, env); +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_empty_element_with_prefix( + guththila_xml_writer_t * wr, + guththila_char_t *prefix, + guththila_char_t *local_name, + const axutil_env_t * env) +{ + int i, j; + int stack_size = GUTHTHILA_STACK_SIZE(wr->namesp); + int temp; + int elem_start = 0; + guththila_char_t *elem_start_p = NULL ; + size_t elem_len = 0, pref_len = 0; + guththila_xml_writer_namesp_t * writer_namesp = NULL; + elem_len = strlen(local_name); + pref_len = strlen(prefix); + for(i = stack_size - 1; i >= 0; i--) + { + writer_namesp = (guththila_xml_writer_namesp_t *)guththila_stack_get_by_index(&wr-> namesp, + i, env); + temp = writer_namesp->no; + for(j = 0; j < temp; j++) + { + /* Proceed if we found the namespace */ +#ifndef GUTHTHILA_XML_WRITER_TOKEN + if(!strcmp(prefix, writer_namesp->name[j])) + { +#else + if (!guththila_tok_str_cmp(writer_namesp->name[j], + prefix, pref_len, env)) + { +#endif + guththila_xml_writer_element_t * element = + (guththila_xml_writer_element_t *)AXIS2_MALLOC(env-> allocator, + sizeof(guththila_xml_writer_element_t)); + if(wr->status == START) + { + guththila_write(wr, "><", 2u, env); + guththila_write_xtoken(wr, prefix, pref_len, env); + guththila_write(wr, ":", 1u, env); + elem_start = wr->next; + guththila_write_xtoken(wr, local_name, strlen(local_name), env); + elem_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_start); + } + else if(wr->status == START_EMPTY) + { + guththila_free_empty_element(wr, env); + guththila_write(wr, "/><", 3u, env); + guththila_write_xtoken(wr, prefix, pref_len, env); + guththila_write(wr, ":", 1u, env); + elem_start = wr->next; + guththila_write_xtoken(wr, local_name, strlen(local_name), env); + elem_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_start); + } + else if(wr->status == BEGINING) + { + guththila_write(wr, "<", 1u, env); + guththila_write_xtoken(wr, prefix, pref_len, env); + guththila_write(wr, ":", 1u, env); + elem_start = wr->next; + guththila_write_xtoken(wr, local_name, strlen(local_name), env); + elem_start_p = GUTHTHILA_BUF_POS(wr->buffer, elem_start); + } + else + { + return GUTHTHILA_FAILURE; + } + +#ifndef GUTHTHILA_XML_WRITER_TOKEN + element->name = strdup(local_name); + element->prefix = strdup(prefix); +#else + element->name = + guththila_tok_list_get_token(&wr->tok_list, env); + element->name->size = elem_len; + element->name->start = elem_start_p; + element->prefix = + guththila_tok_list_get_token(&wr->tok_list, env); + element->prefix->size = writer_namesp->name[j]->size; + element->prefix->start = writer_namesp->name[j]->start; +#endif + wr->status = START_EMPTY; + element->name_sp_stack_no = -1; + /* remember the element */ + return guththila_stack_push(&wr->element, element, env); + } + } + } + return GUTHTHILA_FAILURE; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_end_document( + guththila_xml_writer_t * wr, + const axutil_env_t * env) +{ + int i = 0; + int size = GUTHTHILA_STACK_SIZE(wr->element); + if(wr->status == START_EMPTY) + guththila_write_end_element(wr, env); + /* For all the open elements in the element stack close them */ + for(i = 0; i < size; i++) + { + if(!guththila_write_end_element(wr, env)) + { + return GUTHTHILA_FAILURE; + } + } + return GUTHTHILA_SUCCESS; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_line( + guththila_xml_writer_t * wr, + guththila_char_t *element_name, + guththila_char_t *characters, + const axutil_env_t * env) +{ + guththila_write_start_element(wr, element_name, env); + guththila_write_characters(wr, characters, env); + guththila_write_end_element(wr, env); + guththila_write_characters(wr, "\n", env); + return GUTHTHILA_FAILURE; +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_memory_buffer( + guththila_xml_writer_t * wr, + const axutil_env_t * env) +{ + if(wr->type == GUTHTHILA_WRITER_MEMORY) + { + return (guththila_char_t *)guththila_buffer_get(&wr->buffer, env); + } + return NULL; +} + +GUTHTHILA_EXPORT unsigned int GUTHTHILA_CALL +guththila_get_memory_buffer_size( + guththila_xml_writer_t * wr, + const axutil_env_t * env) +{ + if(wr->type == GUTHTHILA_WRITER_MEMORY) + { + return (unsigned int)(wr->buffer.pre_tot_data + wr->buffer.data_size[wr->buffer.cur_buff]); + } + return 0; +} + +GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL +guththila_get_prefix_for_namespace( + guththila_xml_writer_t * wr, + guththila_char_t *nmsp, + const axutil_env_t * env) +{ + int i, j; + int stack_size = GUTHTHILA_STACK_SIZE(wr->namesp); + int temp; + guththila_char_t *str = NULL; + guththila_xml_writer_namesp_t * writer_namesp = NULL; + for(i = stack_size - 1; i >= 0; i--) + { + writer_namesp = (guththila_xml_writer_namesp_t *)guththila_stack_get_by_index(&wr-> namesp, + i, env); + temp = writer_namesp->no; + for(j = 0; j < temp; j++) + { + if(!guththila_tok_str_cmp(writer_namesp->uri[j], nmsp, strlen(nmsp), env)) + { + GUTHTHILA_TOKEN_TO_STRING(writer_namesp->uri[j], str, env); + return str; + } + } + } + return NULL; +} + +GUTHTHILA_EXPORT int GUTHTHILA_CALL +guththila_write_to_buffer( + guththila_xml_writer_t * wr, + guththila_char_t *buff, + int size, + const axutil_env_t * env) +{ + /* Just write what ever given. But need to close things before */ + if(wr->status == START) + { + guththila_write(wr, ">", 1u, env); + } + if(wr->status == START_EMPTY) + { + guththila_write(wr, "/>", 2u, env); + } + guththila_write(wr, buff, size, env); + wr->status = BEGINING; + return GUTHTHILA_SUCCESS; +} + diff --git a/guththila/tests/resources/om b/guththila/tests/resources/om new file mode 120000 index 0000000..3bd0c61 --- /dev/null +++ b/guththila/tests/resources/om @@ -0,0 +1 @@ +../../../axiom/test/resources/xml/om/ \ No newline at end of file diff --git a/guththila/tests/resources/soap b/guththila/tests/resources/soap new file mode 120000 index 0000000..9674db5 --- /dev/null +++ b/guththila/tests/resources/soap @@ -0,0 +1 @@ +../../../axiom/test/resources/xml/soap \ No newline at end of file diff --git a/guththila/tests/s b/guththila/tests/s new file mode 100755 index 0000000..7e9f4f8 --- /dev/null +++ b/guththila/tests/s @@ -0,0 +1,13 @@ +#!/usr/bin/perl -w +use strict; + +if ($ARGV[0] == 1) +{ + print "compiling writer\n"; + system "gcc -Wall -g3 -O0 -o writer guththila_writer_main.c -L\$AXIS2C_HOME/lib -I\$AXIS2C_HOME/include -lguththila -laxis2_util"; +} +else +{ + print "compiling reader tests \n"; + system "gcc -Wall -g3 -O0 -o reader *.c \-L\$AXIS2C_HOME/lib \-I\$AXIS2C_HOME/include -lcheck -lguththila \-laxis2_util"; +} diff --git a/guththila/tests/test.c b/guththila/tests/test.c new file mode 100644 index 0000000..cebbe02 --- /dev/null +++ b/guththila/tests/test.c @@ -0,0 +1,200 @@ +#include +#include +#include "guththila_defines.h" +#include "test.h" + +void +setup( + void) +{ + allocator = axutil_allocator_init(NULL); + env = axutil_env_create(allocator); +} + +void +teardown( + void) +{ + guththila_reader_free(env, red); + guththila_free(env, parser); + axutil_env_free(env); +} + +START_TEST(test_guththila) +{ + red = guththila_reader_create_for_file(env, "resources/om/axis.xml"); + parser = guththila_create(env, red); + fail_if(red == NULL, "guththila reader failed"); + fail_if(parser == NULL, "guththila parser failed"); +} + +END_TEST +START_TEST( + test_guththila_start_element) +{ + int c = 0; + char *p; + red = guththila_reader_create_for_file(env, "resources/om/axis.xml"); + parser = guththila_create(env, red); + guththila_read(env, parser); + c = guththila_next(env, parser); + + while((c != GUTHTHILA_START_ELEMENT)) + c = guththila_next(env, parser); + p = guththila_get_name(env, parser); + fail_unless((c == GUTHTHILA_START_ELEMENT), "no start element found"); + fail_if((p == NULL), "no name found"); + fail_unless(!strcmp(p, "root"), "root element differed"); + c = 0; + + while((c != GUTHTHILA_START_ELEMENT)) + c = guththila_next(env, parser); + p = guththila_get_name(env, parser); + fail_unless((c == GUTHTHILA_START_ELEMENT), "no start element found"); + fail_if((p == NULL), "no name found"); + fail_unless(!strcmp(p, "a"), "a element differed"); + + c = 0; + while((c != GUTHTHILA_START_ELEMENT)) + c = guththila_next(env, parser); + p = guththila_get_name(env, parser); + fail_unless(!strcmp(p, "b"), "b element differed"); +} + +END_TEST +START_TEST( + test_guththila_empty_element) +{ + int c = 0; + char *p; + red = guththila_reader_create_for_file(env, "resources/om/axis.xml"); + parser = guththila_create(env, red); + guththila_read(env, parser); + c = guththila_next(env, parser); + + while((c != GUTHTHILA_EMPTY_ELEMENT)) + c = guththila_next(env, parser); + p = guththila_get_name(env, parser); + fail_unless((c == GUTHTHILA_EMPTY_ELEMENT), "no empty element found"); + fail_if((p == NULL), "no name found"); + fail_unless(!strcmp(p, "a.1"), "a.1 element differed"); + + c = 0; + + while((c != GUTHTHILA_EMPTY_ELEMENT)) + c = guththila_next(env, parser); + p = guththila_get_name(env, parser); + fail_unless((c == GUTHTHILA_EMPTY_ELEMENT), "no empty element found"); + fail_if((p == NULL), "no name found"); + fail_unless(!strcmp(p, "a.2"), "a.2 element differed"); + + c = 0; + while((c != GUTHTHILA_START_ELEMENT)) + c = guththila_next(env, parser); + + c = 0; + while((c != GUTHTHILA_EMPTY_ELEMENT)) + c = guththila_next(env, parser); + p = guththila_get_name(env, parser); + fail_unless((c == GUTHTHILA_EMPTY_ELEMENT), "no empty element found"); + fail_if((p == NULL), "no name found"); + fail_unless(!strcmp(p, "b.1"), "b.1 element differed"); +} + +END_TEST +START_TEST( + test_guththila_end_element) +{ + int c = 0; + char *p; + red = guththila_reader_create_for_file(env, "resources/om/axis.xml"); + parser = guththila_create(env, red); + guththila_read(env, parser); + c = guththila_next(env, parser); + + while((c != GUTHTHILA_END_ELEMENT)) + c = guththila_next(env, parser); + p = guththila_get_name(env, parser); + fail_unless((c == GUTHTHILA_END_ELEMENT), "no end element found"); + fail_if((p == NULL), "no name found"); + fail_unless(!strcmp(p, "a"), "a element differed"); + + c = 0; + while((c != GUTHTHILA_END_ELEMENT)) + c = guththila_next(env, parser); + p = guththila_get_name(env, parser); + fail_unless((c == GUTHTHILA_END_ELEMENT), "no endelement found"); + fail_if((p == NULL), "no name found"); + fail_unless(!strcmp(p, "b"), "b element differed"); + + c = 0; + while((c != GUTHTHILA_END_ELEMENT)) + c = guththila_next(env, parser); + p = guththila_get_name(env, parser); + fail_unless((c == GUTHTHILA_END_ELEMENT), "no empty element found"); + fail_if((p == NULL), "no name found"); + fail_unless(!strcmp(p, "root"), "root element differed"); +} + +END_TEST +START_TEST( + test_guththila_character) +{ + int c = 0; + int i = 0; + char *p; + red = guththila_reader_create_for_file(env, "resources/om/numbers.xml"); + parser = guththila_create(env, red); + guththila_read(env, parser); + c = guththila_next(env, parser); + while(i < 3) + { + if(c == GUTHTHILA_START_ELEMENT) + i++; + c = guththila_next(env, parser); + } + + if(c == GUTHTHILA_CHARACTER) + p = guththila_get_value(env, parser); + fail_unless(!strcmp(p, "3"), "3 not found"); + + c = 0; + while((c != GUTHTHILA_CHARACTER) || (parser->is_whitespace)) + c = guththila_next(env, parser); + p = guththila_get_value(env, parser); + fail_unless(!strcmp(p, "24"), "24 not found"); + +} +END_TEST Suite * +guththila_suite( + void) +{ + Suite *s = suite_create("Guththila"); + + /* Core test case */ + TCase *tc_core = tcase_create("Core"); + tcase_add_checked_fixture(tc_core, setup, teardown); + tcase_add_test(tc_core, test_guththila); + tcase_add_test(tc_core, test_guththila_start_element); + tcase_add_test(tc_core, test_guththila_empty_element); + tcase_add_test(tc_core, test_guththila_end_element); + tcase_add_test(tc_core, test_guththila_character); + suite_add_tcase(s, tc_core); + return s; +} + +int +main( + void) +{ + int number_failed; + Suite *s = guththila_suite(); + Suite *att = guththila_attribute_suite(); + SRunner *sr = srunner_create(s); + srunner_add_suite(sr, att); + srunner_set_log(sr, "guththila.log"); + srunner_run_all(sr, CK_NORMAL); + number_failed = srunner_ntests_failed(sr); + srunner_free(sr); + return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/guththila/tests/test.h b/guththila/tests/test.h new file mode 100644 index 0000000..93bebff --- /dev/null +++ b/guththila/tests/test.h @@ -0,0 +1,23 @@ +#ifndef _GUTHTHILA_TESTS_ +#define _GUTHTHILA_TESTS_ +#include +#include +#include "guththila_defines.h" + +axutil_allocator_t *allocator; +guththila_reader_t *red; +axutil_env_t *env; +guththila_t *parser; + +void setup( + void); +void teardown( + void); + +Suite *guththila_suite( + void); + +Suite *guththila_attribute_suite( + void); + +#endif diff --git a/guththila/tests/test_attribute.c b/guththila/tests/test_attribute.c new file mode 100644 index 0000000..bd6c4b5 --- /dev/null +++ b/guththila/tests/test_attribute.c @@ -0,0 +1,84 @@ +#include +#include +#include "test.h" + +START_TEST(test_attribute) +{ + int count = 0;; + int c = 0; + guththila_attribute_t *att; + red = guththila_reader_create_for_file(env, "resources/om/evaluate.xml"); + parser = guththila_create(env, red); + guththila_read(env, parser); + c = guththila_next(env, parser); + while (!count) + { + c = guththila_next(env, parser); + count = guththila_get_attribute_count(env, parser); + if (count) + att = guththila_get_attribute(env, parser); + } + fail_if(count == 0, "guththila attribute count failed"); + fail_unless(!strcmp + (guththila_get_attribute_name(env, parser, att), "color"), + "guththila attribute name failed"); + fail_unless(!strcmp + (guththila_get_attribute_value(env, parser, att), "brown"), + "guththila attribute value failed"); +} + +END_TEST +START_TEST( + test_attribute_prefix) +{ + int count = 0; + ; + int c = 0; + guththila_attribute_t *att; + red = guththila_reader_create_for_file(env, "resources/soap/soapmessage.xml"); + parser = guththila_create(env, red); + guththila_read(env, parser); + c = guththila_next(env, parser); + while(!count) + { + c = guththila_next(env, parser); + count = guththila_get_attribute_count(env, parser); + if(count) + att = guththila_get_attribute(env, parser); + } + fail_if(count == 0, "guththila attribute count failed"); + fail_unless(!strcmp(guththila_get_attribute_prefix(env, parser, att), "soapenv"), + "guththila attribute count failed"); + fail_unless(!strcmp(guththila_get_attribute_name(env, parser, att), "mustUnderstand"), + "guththila attribute count failed"); + fail_unless(!strcmp(guththila_get_attribute_value(env, parser, att), "0"), + "guththila attribute count failed"); + count = 0; + while(!count) + { + c = guththila_next(env, parser); + count = guththila_get_attribute_count(env, parser); + if(count) + att = guththila_get_attribute(env, parser); + } + fail_unless(!strcmp(guththila_get_attribute_prefix(env, parser, att), "soapenv"), + "guththila attribute count failed"); + fail_unless(!strcmp(guththila_get_attribute_name(env, parser, att), "mustUnderstand"), + "guththila attribute count failed"); + fail_if(!strcmp(guththila_get_attribute_value(env, parser, att), "1"), + "guththila attribute count failed"); +} +END_TEST Suite * +guththila_attribute_suite( + void) +{ + Suite *s = suite_create("Guththila_attribute"); + + /* Core test case */ + TCase *tc_core = tcase_create("attribute"); + tcase_add_checked_fixture(tc_core, setup, teardown); + tcase_add_test(tc_core, test_attribute); + tcase_add_test(tc_core, test_attribute_prefix); + suite_add_tcase(s, tc_core); + return s; +} diff --git a/ides/Makefile.am b/ides/Makefile.am new file mode 100644 index 0000000..5f488ab --- /dev/null +++ b/ides/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = +EXTRA_DIST = README vc vc6 diff --git a/ides/README b/ides/README new file mode 100644 index 0000000..e3f7c90 --- /dev/null +++ b/ides/README @@ -0,0 +1 @@ +This folder contains folders for diffrent IDEs containing project files for respective IDEs. diff --git a/ides/vc/axis2c/axiom/axiom.vcproj b/ides/vc/axis2c/axiom/axiom.vcproj new file mode 100644 index 0000000..ecebcf1 --- /dev/null +++ b/ides/vc/axis2c/axiom/axiom.vcproj @@ -0,0 +1,623 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/axis2_engine/axis2_engine.vcproj b/ides/vc/axis2c/axis2_engine/axis2_engine.vcproj new file mode 100644 index 0000000..f86d30b --- /dev/null +++ b/ides/vc/axis2c/axis2_engine/axis2_engine.vcproj @@ -0,0 +1,950 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/axis2_http_receiver/axis2_http_receiver.vcproj b/ides/vc/axis2c/axis2_http_receiver/axis2_http_receiver.vcproj new file mode 100644 index 0000000..033564b --- /dev/null +++ b/ides/vc/axis2c/axis2_http_receiver/axis2_http_receiver.vcproj @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/axis2_http_sender/axis2_http_sender.vcproj b/ides/vc/axis2c/axis2_http_sender/axis2_http_sender.vcproj new file mode 100644 index 0000000..6a65408 --- /dev/null +++ b/ides/vc/axis2c/axis2_http_sender/axis2_http_sender.vcproj @@ -0,0 +1,279 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/axis2_http_server/axis2_http_server.vcproj b/ides/vc/axis2c/axis2_http_server/axis2_http_server.vcproj new file mode 100644 index 0000000..d9236e8 --- /dev/null +++ b/ides/vc/axis2c/axis2_http_server/axis2_http_server.vcproj @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/axis2_mod_addr/axis2_mod_addr.vcproj b/ides/vc/axis2c/axis2_mod_addr/axis2_mod_addr.vcproj new file mode 100644 index 0000000..029d8fa --- /dev/null +++ b/ides/vc/axis2c/axis2_mod_addr/axis2_mod_addr.vcproj @@ -0,0 +1,240 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/axis2_mod_log/axis2_mod_log.vcproj b/ides/vc/axis2c/axis2_mod_log/axis2_mod_log.vcproj new file mode 100644 index 0000000..b62c4c7 --- /dev/null +++ b/ides/vc/axis2c/axis2_mod_log/axis2_mod_log.vcproj @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/axis2_parser/axis2_parser.vcproj b/ides/vc/axis2c/axis2_parser/axis2_parser.vcproj new file mode 100644 index 0000000..39e11e7 --- /dev/null +++ b/ides/vc/axis2c/axis2_parser/axis2_parser.vcproj @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/axis2_parser_guththila/axis2_parser_guththila.vcproj b/ides/vc/axis2c/axis2_parser_guththila/axis2_parser_guththila.vcproj new file mode 100644 index 0000000..3e4016d --- /dev/null +++ b/ides/vc/axis2c/axis2_parser_guththila/axis2_parser_guththila.vcproj @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/axis2_tcp_receiver/axis2_tcp_receiver.vcproj b/ides/vc/axis2c/axis2_tcp_receiver/axis2_tcp_receiver.vcproj new file mode 100644 index 0000000..66ddfce --- /dev/null +++ b/ides/vc/axis2c/axis2_tcp_receiver/axis2_tcp_receiver.vcproj @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/axis2_tcp_sender/axis2_tcp_sender.vcproj b/ides/vc/axis2c/axis2_tcp_sender/axis2_tcp_sender.vcproj new file mode 100644 index 0000000..9818fd7 --- /dev/null +++ b/ides/vc/axis2c/axis2_tcp_sender/axis2_tcp_sender.vcproj @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/axis2_tcp_server/axis2_tcp_server.vcproj b/ides/vc/axis2c/axis2_tcp_server/axis2_tcp_server.vcproj new file mode 100644 index 0000000..6e8a781 --- /dev/null +++ b/ides/vc/axis2c/axis2_tcp_server/axis2_tcp_server.vcproj @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/axis2_xpath/axis2_xpath.vcproj b/ides/vc/axis2c/axis2_xpath/axis2_xpath.vcproj new file mode 100644 index 0000000..8b3d97b --- /dev/null +++ b/ides/vc/axis2c/axis2_xpath/axis2_xpath.vcproj @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/axis2c.sln b/ides/vc/axis2c/axis2c.sln new file mode 100644 index 0000000..ed76d90 --- /dev/null +++ b/ides/vc/axis2c/axis2c.sln @@ -0,0 +1,343 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_parser", "axis2_parser\axis2_parser.vcproj", "{D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axiom", "axiom\axiom.vcproj", "{7C816A64-FA96-4C6C-8DB0-5256441F54BC}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_engine", "axis2_engine\axis2_engine.vcproj", "{9524B8C5-79D9-4470-9A47-8BD163ABBB15}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {20643536-7BF0-4201-9EA6-039E6CF19ADB} = {20643536-7BF0-4201-9EA6-039E6CF19ADB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_http_server", "axis2_http_server\axis2_http_server.vcproj", "{D2975362-DEAA-41BF-AE5E-E6FCDB526726}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {9524B8C5-79D9-4470-9A47-8BD163ABBB15} = {9524B8C5-79D9-4470-9A47-8BD163ABBB15} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {9441F689-6ED3-4FF8-9B13-2E80E391DF39} = {9441F689-6ED3-4FF8-9B13-2E80E391DF39} + {0DEEAA74-F06D-4C60-B408-1B875B4FB338} = {0DEEAA74-F06D-4C60-B408-1B875B4FB338} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {20643536-7BF0-4201-9EA6-039E6CF19ADB} = {20643536-7BF0-4201-9EA6-039E6CF19ADB} + {7332F525-8C77-4FB3-A0C0-FCEB2382F03C} = {7332F525-8C77-4FB3-A0C0-FCEB2382F03C} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_mod_addr", "axis2_mod_addr\axis2_mod_addr.vcproj", "{0DEEAA74-F06D-4C60-B408-1B875B4FB338}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {9524B8C5-79D9-4470-9A47-8BD163ABBB15} = {9524B8C5-79D9-4470-9A47-8BD163ABBB15} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {20643536-7BF0-4201-9EA6-039E6CF19ADB} = {20643536-7BF0-4201-9EA6-039E6CF19ADB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_http_sender", "axis2_http_sender\axis2_http_sender.vcproj", "{7332F525-8C77-4FB3-A0C0-FCEB2382F03C}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {9524B8C5-79D9-4470-9A47-8BD163ABBB15} = {9524B8C5-79D9-4470-9A47-8BD163ABBB15} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {20643536-7BF0-4201-9EA6-039E6CF19ADB} = {20643536-7BF0-4201-9EA6-039E6CF19ADB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_http_receiver", "axis2_http_receiver\axis2_http_receiver.vcproj", "{9441F689-6ED3-4FF8-9B13-2E80E391DF39}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {9524B8C5-79D9-4470-9A47-8BD163ABBB15} = {9524B8C5-79D9-4470-9A47-8BD163ABBB15} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axutil", "axutil\axutil.vcproj", "{3887B3E3-1A45-40E5-BC95-9C51000C86DB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{52AB54B9-4457-4E03-B892-75CC56F22B32}" + ProjectSection(SolutionItems) = preProject + ..\..\..\build\win32\makefile = ..\..\..\build\win32\makefile + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "neethi", "neethi\neethi.vcproj", "{20643536-7BF0-4201-9EA6-039E6CF19ADB}" + ProjectSection(ProjectDependencies) = postProject + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {CAF3AED6-3900-4E8B-B21E-68022B955260} = {CAF3AED6-3900-4E8B-B21E-68022B955260} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_tcp_sender", "axis2_tcp_sender\axis2_tcp_sender.vcproj", "{830B97B8-D216-45B9-A0CC-6D5828AFD634}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {9524B8C5-79D9-4470-9A47-8BD163ABBB15} = {9524B8C5-79D9-4470-9A47-8BD163ABBB15} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {20643536-7BF0-4201-9EA6-039E6CF19ADB} = {20643536-7BF0-4201-9EA6-039E6CF19ADB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_tcp_receiver", "axis2_tcp_receiver\axis2_tcp_receiver.vcproj", "{8C8F2D61-0C61-4E90-9CA2-E0C795725DF7}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {9524B8C5-79D9-4470-9A47-8BD163ABBB15} = {9524B8C5-79D9-4470-9A47-8BD163ABBB15} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {20643536-7BF0-4201-9EA6-039E6CF19ADB} = {20643536-7BF0-4201-9EA6-039E6CF19ADB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_tcp_server", "axis2_tcp_server\axis2_tcp_server.vcproj", "{32ECB83C-42CA-4F36-B15B-B3DCD08F041F}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {9524B8C5-79D9-4470-9A47-8BD163ABBB15} = {9524B8C5-79D9-4470-9A47-8BD163ABBB15} + {830B97B8-D216-45B9-A0CC-6D5828AFD634} = {830B97B8-D216-45B9-A0CC-6D5828AFD634} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {9441F689-6ED3-4FF8-9B13-2E80E391DF39} = {9441F689-6ED3-4FF8-9B13-2E80E391DF39} + {0DEEAA74-F06D-4C60-B408-1B875B4FB338} = {0DEEAA74-F06D-4C60-B408-1B875B4FB338} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {D2975362-DEAA-41BF-AE5E-E6FCDB526726} = {D2975362-DEAA-41BF-AE5E-E6FCDB526726} + {8C8F2D61-0C61-4E90-9CA2-E0C795725DF7} = {8C8F2D61-0C61-4E90-9CA2-E0C795725DF7} + {20643536-7BF0-4201-9EA6-039E6CF19ADB} = {20643536-7BF0-4201-9EA6-039E6CF19ADB} + {7332F525-8C77-4FB3-A0C0-FCEB2382F03C} = {7332F525-8C77-4FB3-A0C0-FCEB2382F03C} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_axis2", "mod_axis2\mod_axis2.vcproj", "{9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_axis2_IIS", "mod_axis2_IIS\mod_axis2_IIS.vcproj", "{1D949369-9C4B-4C59-9F2A-278FD8CE0D41}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tcpmon", "tcpmon\tcpmon.vcproj", "{56180647-96CF-4415-B3FB-34E41CEAD595}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guththila", "guththila\guththila.vcproj", "{81FDD803-8611-4EB4-AB0E-85F498061A2D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_parser_guththila", "axis2_parser_guththila\axis2_parser_guththila.vcproj", "{DC69D297-3B3B-4FA2-A799-51F040708857}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_mod_log", "axis2_mod_log\axis2_mod_log.vcproj", "{423F7156-84C4-43C1-855A-D0FEE24DB0A0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "clients", "clients", "{37581370-F613-4C0E-BEF1-3BB7540DFFD1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{75835D86-0BB4-4DEC-AB3B-62329D7DF3CE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo", "services\echo\echo.vcproj", "{0469C145-5B1A-4677-B0C2-0981EB6C0567}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Calculator", "services\Calculator\Calculator.vcproj", "{1917F167-8C7F-4920-934D-BDAA2E6DC024}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "math", "services\math\math.vcproj", "{8209506A-634F-4239-82D0-3EC9105FEBA4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mtom", "services\mtom\mtom.vcproj", "{C8BDF683-7F8E-4526-9193-836DD90714CC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "notify", "services\notify\notify.vcproj", "{23D5F8E4-F554-451F-B97D-F0CD82272229}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking", "clients\echo_blocking\echo_blocking.vcproj", "{76F139F5-913A-4328-8504-B1E9B7F1BA97}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_addr", "clients\echo_blocking_addr\echo_blocking_addr.vcproj", "{DDBF66ED-91FA-48ED-B23D-437473C52C0A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_auth", "clients\echo_blocking_auth\echo_blocking_auth.vcproj", "{0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_dual", "clients\echo_blocking_dual\echo_blocking_dual.vcproj", "{584804F3-344F-4850-899C-85E1998694F8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_non_blocking", "clients\echo_non_blocking\echo_non_blocking.vcproj", "{62DB83C4-A2FA-45AF-B2F2-A737443AD473}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_non_blocking_dual", "clients\echo_non_blocking_dual\echo_non_blocking_dual.vcproj", "{9C1140F6-1846-4335-B571-83E2C9FF6E02}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_rest", "clients\echo_rest\echo_rest.vcproj", "{84518230-9F6F-4B1E-B4B4-9F78D27355AC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "google", "clients\google\google.vcproj", "{607FAED5-B750-44D2-A817-0FDF4F77744C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "math", "clients\math\math.vcproj", "{9121BA33-CE71-4775-AD78-1114696BFEC8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mtom", "clients\mtom\mtom.vcproj", "{9EA3CB05-003C-410C-A4F2-B0DB7F01645D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "notify", "clients\notify\notify.vcproj", "{1EFD2CA7-86AF-4F66-9930-978D5A881949}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yahoo", "clients\yahoo\yahoo.vcproj", "{9B7A5827-9F06-4B7F-B8E3-233E9350C258}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo", "clients\echo\echo.vcproj", "{57414A3E-782C-4472-9EEE-981EF0649258}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_xpath", "axis2_xpath\axis2_xpath.vcproj", "{CAF3AED6-3900-4E8B-B21E-68022B955260}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8}.Debug|Win32.ActiveCfg = Debug|Win32 + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8}.Release|Win32.ActiveCfg = Release|Win32 + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8}.Release|Win32.Build.0 = Release|Win32 + {7C816A64-FA96-4C6C-8DB0-5256441F54BC}.Debug|Win32.ActiveCfg = Debug|Win32 + {7C816A64-FA96-4C6C-8DB0-5256441F54BC}.Debug|Win32.Build.0 = Debug|Win32 + {7C816A64-FA96-4C6C-8DB0-5256441F54BC}.Release|Win32.ActiveCfg = Release|Win32 + {7C816A64-FA96-4C6C-8DB0-5256441F54BC}.Release|Win32.Build.0 = Release|Win32 + {9524B8C5-79D9-4470-9A47-8BD163ABBB15}.Debug|Win32.ActiveCfg = Debug|Win32 + {9524B8C5-79D9-4470-9A47-8BD163ABBB15}.Debug|Win32.Build.0 = Debug|Win32 + {9524B8C5-79D9-4470-9A47-8BD163ABBB15}.Release|Win32.ActiveCfg = Release|Win32 + {9524B8C5-79D9-4470-9A47-8BD163ABBB15}.Release|Win32.Build.0 = Release|Win32 + {D2975362-DEAA-41BF-AE5E-E6FCDB526726}.Debug|Win32.ActiveCfg = Debug|Win32 + {D2975362-DEAA-41BF-AE5E-E6FCDB526726}.Debug|Win32.Build.0 = Debug|Win32 + {D2975362-DEAA-41BF-AE5E-E6FCDB526726}.Release|Win32.ActiveCfg = Release|Win32 + {D2975362-DEAA-41BF-AE5E-E6FCDB526726}.Release|Win32.Build.0 = Release|Win32 + {0DEEAA74-F06D-4C60-B408-1B875B4FB338}.Debug|Win32.ActiveCfg = Debug|Win32 + {0DEEAA74-F06D-4C60-B408-1B875B4FB338}.Debug|Win32.Build.0 = Debug|Win32 + {0DEEAA74-F06D-4C60-B408-1B875B4FB338}.Release|Win32.ActiveCfg = Release|Win32 + {0DEEAA74-F06D-4C60-B408-1B875B4FB338}.Release|Win32.Build.0 = Release|Win32 + {7332F525-8C77-4FB3-A0C0-FCEB2382F03C}.Debug|Win32.ActiveCfg = Debug|Win32 + {7332F525-8C77-4FB3-A0C0-FCEB2382F03C}.Debug|Win32.Build.0 = Debug|Win32 + {7332F525-8C77-4FB3-A0C0-FCEB2382F03C}.Release|Win32.ActiveCfg = Release|Win32 + {7332F525-8C77-4FB3-A0C0-FCEB2382F03C}.Release|Win32.Build.0 = Release|Win32 + {9441F689-6ED3-4FF8-9B13-2E80E391DF39}.Debug|Win32.ActiveCfg = Debug|Win32 + {9441F689-6ED3-4FF8-9B13-2E80E391DF39}.Debug|Win32.Build.0 = Debug|Win32 + {9441F689-6ED3-4FF8-9B13-2E80E391DF39}.Release|Win32.ActiveCfg = Release|Win32 + {9441F689-6ED3-4FF8-9B13-2E80E391DF39}.Release|Win32.Build.0 = Release|Win32 + {3887B3E3-1A45-40E5-BC95-9C51000C86DB}.Debug|Win32.ActiveCfg = Debug|Win32 + {3887B3E3-1A45-40E5-BC95-9C51000C86DB}.Debug|Win32.Build.0 = Debug|Win32 + {3887B3E3-1A45-40E5-BC95-9C51000C86DB}.Release|Win32.ActiveCfg = Release|Win32 + {3887B3E3-1A45-40E5-BC95-9C51000C86DB}.Release|Win32.Build.0 = Release|Win32 + {20643536-7BF0-4201-9EA6-039E6CF19ADB}.Debug|Win32.ActiveCfg = Debug|Win32 + {20643536-7BF0-4201-9EA6-039E6CF19ADB}.Debug|Win32.Build.0 = Debug|Win32 + {20643536-7BF0-4201-9EA6-039E6CF19ADB}.Release|Win32.ActiveCfg = Release|Win32 + {20643536-7BF0-4201-9EA6-039E6CF19ADB}.Release|Win32.Build.0 = Release|Win32 + {830B97B8-D216-45B9-A0CC-6D5828AFD634}.Debug|Win32.ActiveCfg = Debug|Win32 + {830B97B8-D216-45B9-A0CC-6D5828AFD634}.Debug|Win32.Build.0 = Debug|Win32 + {830B97B8-D216-45B9-A0CC-6D5828AFD634}.Release|Win32.ActiveCfg = Release|Win32 + {830B97B8-D216-45B9-A0CC-6D5828AFD634}.Release|Win32.Build.0 = Release|Win32 + {8C8F2D61-0C61-4E90-9CA2-E0C795725DF7}.Debug|Win32.ActiveCfg = Debug|Win32 + {8C8F2D61-0C61-4E90-9CA2-E0C795725DF7}.Debug|Win32.Build.0 = Debug|Win32 + {8C8F2D61-0C61-4E90-9CA2-E0C795725DF7}.Release|Win32.ActiveCfg = Release|Win32 + {8C8F2D61-0C61-4E90-9CA2-E0C795725DF7}.Release|Win32.Build.0 = Release|Win32 + {32ECB83C-42CA-4F36-B15B-B3DCD08F041F}.Debug|Win32.ActiveCfg = Debug|Win32 + {32ECB83C-42CA-4F36-B15B-B3DCD08F041F}.Debug|Win32.Build.0 = Debug|Win32 + {32ECB83C-42CA-4F36-B15B-B3DCD08F041F}.Release|Win32.ActiveCfg = Release|Win32 + {32ECB83C-42CA-4F36-B15B-B3DCD08F041F}.Release|Win32.Build.0 = Release|Win32 + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Debug|Win32.ActiveCfg = Debug|Win32 + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Debug|Win32.Build.0 = Debug|Win32 + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Release|Win32.ActiveCfg = Release|Win32 + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Release|Win32.Build.0 = Release|Win32 + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Debug|Win32.ActiveCfg = Debug|Win32 + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Debug|Win32.Build.0 = Debug|Win32 + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Release|Win32.ActiveCfg = Release|Win32 + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Release|Win32.Build.0 = Release|Win32 + {56180647-96CF-4415-B3FB-34E41CEAD595}.Debug|Win32.ActiveCfg = Debug|Win32 + {56180647-96CF-4415-B3FB-34E41CEAD595}.Debug|Win32.Build.0 = Debug|Win32 + {56180647-96CF-4415-B3FB-34E41CEAD595}.Release|Win32.ActiveCfg = Release|Win32 + {56180647-96CF-4415-B3FB-34E41CEAD595}.Release|Win32.Build.0 = Release|Win32 + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Debug|Win32.ActiveCfg = Debug|Win32 + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Debug|Win32.Build.0 = Debug|Win32 + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Release|Win32.ActiveCfg = Release|Win32 + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Release|Win32.Build.0 = Release|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Debug|Win32.ActiveCfg = Debug|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Debug|Win32.Build.0 = Debug|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Release|Win32.ActiveCfg = Release|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Release|Win32.Build.0 = Release|Win32 + {423F7156-84C4-43C1-855A-D0FEE24DB0A0}.Debug|Win32.ActiveCfg = Debug|Win32 + {423F7156-84C4-43C1-855A-D0FEE24DB0A0}.Debug|Win32.Build.0 = Debug|Win32 + {423F7156-84C4-43C1-855A-D0FEE24DB0A0}.Release|Win32.ActiveCfg = Release|Win32 + {423F7156-84C4-43C1-855A-D0FEE24DB0A0}.Release|Win32.Build.0 = Release|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Debug|Win32.ActiveCfg = Debug|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Debug|Win32.Build.0 = Debug|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Release|Win32.ActiveCfg = Release|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Release|Win32.Build.0 = Release|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Debug|Win32.ActiveCfg = Debug|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Debug|Win32.Build.0 = Debug|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Release|Win32.ActiveCfg = Release|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Release|Win32.Build.0 = Release|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Debug|Win32.ActiveCfg = Debug|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Debug|Win32.Build.0 = Debug|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Release|Win32.ActiveCfg = Release|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Release|Win32.Build.0 = Release|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Debug|Win32.Build.0 = Debug|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Release|Win32.ActiveCfg = Release|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Release|Win32.Build.0 = Release|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Debug|Win32.ActiveCfg = Debug|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Debug|Win32.Build.0 = Debug|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Release|Win32.ActiveCfg = Release|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Release|Win32.Build.0 = Release|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Debug|Win32.ActiveCfg = Debug|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Debug|Win32.Build.0 = Debug|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Release|Win32.ActiveCfg = Release|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Release|Win32.Build.0 = Release|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Debug|Win32.ActiveCfg = Debug|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Debug|Win32.Build.0 = Debug|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Release|Win32.ActiveCfg = Release|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Release|Win32.Build.0 = Release|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Debug|Win32.ActiveCfg = Debug|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Debug|Win32.Build.0 = Debug|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Release|Win32.ActiveCfg = Release|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Release|Win32.Build.0 = Release|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Debug|Win32.ActiveCfg = Debug|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Debug|Win32.Build.0 = Debug|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Release|Win32.ActiveCfg = Release|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Release|Win32.Build.0 = Release|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Debug|Win32.ActiveCfg = Debug|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Debug|Win32.Build.0 = Debug|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Release|Win32.ActiveCfg = Release|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Release|Win32.Build.0 = Release|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Debug|Win32.Build.0 = Debug|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Release|Win32.ActiveCfg = Release|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Release|Win32.Build.0 = Release|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Debug|Win32.ActiveCfg = Debug|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Debug|Win32.Build.0 = Debug|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Release|Win32.ActiveCfg = Release|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Release|Win32.Build.0 = Release|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Debug|Win32.ActiveCfg = Debug|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Debug|Win32.Build.0 = Debug|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Release|Win32.ActiveCfg = Release|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Release|Win32.Build.0 = Release|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Debug|Win32.ActiveCfg = Debug|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Debug|Win32.Build.0 = Debug|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Release|Win32.ActiveCfg = Release|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Release|Win32.Build.0 = Release|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Debug|Win32.ActiveCfg = Debug|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Debug|Win32.Build.0 = Debug|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Release|Win32.ActiveCfg = Release|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Release|Win32.Build.0 = Release|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Debug|Win32.ActiveCfg = Debug|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Debug|Win32.Build.0 = Debug|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Release|Win32.ActiveCfg = Release|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Release|Win32.Build.0 = Release|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Debug|Win32.ActiveCfg = Debug|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Debug|Win32.Build.0 = Debug|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Release|Win32.ActiveCfg = Release|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Release|Win32.Build.0 = Release|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Debug|Win32.ActiveCfg = Debug|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Debug|Win32.Build.0 = Debug|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Release|Win32.ActiveCfg = Release|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Release|Win32.Build.0 = Release|Win32 + {CAF3AED6-3900-4E8B-B21E-68022B955260}.Debug|Win32.ActiveCfg = Debug|Win32 + {CAF3AED6-3900-4E8B-B21E-68022B955260}.Debug|Win32.Build.0 = Debug|Win32 + {CAF3AED6-3900-4E8B-B21E-68022B955260}.Release|Win32.ActiveCfg = Release|Win32 + {CAF3AED6-3900-4E8B-B21E-68022B955260}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {76F139F5-913A-4328-8504-B1E9B7F1BA97} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {DDBF66ED-91FA-48ED-B23D-437473C52C0A} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {584804F3-344F-4850-899C-85E1998694F8} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {62DB83C4-A2FA-45AF-B2F2-A737443AD473} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {9C1140F6-1846-4335-B571-83E2C9FF6E02} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {84518230-9F6F-4B1E-B4B4-9F78D27355AC} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {607FAED5-B750-44D2-A817-0FDF4F77744C} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {9121BA33-CE71-4775-AD78-1114696BFEC8} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {1EFD2CA7-86AF-4F66-9930-978D5A881949} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {9B7A5827-9F06-4B7F-B8E3-233E9350C258} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {57414A3E-782C-4472-9EEE-981EF0649258} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {0469C145-5B1A-4677-B0C2-0981EB6C0567} = {75835D86-0BB4-4DEC-AB3B-62329D7DF3CE} + {1917F167-8C7F-4920-934D-BDAA2E6DC024} = {75835D86-0BB4-4DEC-AB3B-62329D7DF3CE} + {8209506A-634F-4239-82D0-3EC9105FEBA4} = {75835D86-0BB4-4DEC-AB3B-62329D7DF3CE} + {C8BDF683-7F8E-4526-9193-836DD90714CC} = {75835D86-0BB4-4DEC-AB3B-62329D7DF3CE} + {23D5F8E4-F554-451F-B97D-F0CD82272229} = {75835D86-0BB4-4DEC-AB3B-62329D7DF3CE} + EndGlobalSection +EndGlobal diff --git a/ides/vc/axis2c/axutil/axutil.vcproj b/ides/vc/axis2c/axutil/axutil.vcproj new file mode 100644 index 0000000..944a071 --- /dev/null +++ b/ides/vc/axis2c/axutil/axutil.vcproj @@ -0,0 +1,645 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/clients/clients.sln b/ides/vc/axis2c/clients/clients.sln new file mode 100644 index 0000000..9cdb95d --- /dev/null +++ b/ides/vc/axis2c/clients/clients.sln @@ -0,0 +1,92 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo", "echo\echo.vcproj", "{57414A3E-782C-4472-9EEE-981EF0649258}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mtom", "mtom\mtom.vcproj", "{9EA3CB05-003C-410C-A4F2-B0DB7F01645D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "math", "math\math.vcproj", "{9121BA33-CE71-4775-AD78-1114696BFEC8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "google", "google\google.vcproj", "{607FAED5-B750-44D2-A817-0FDF4F77744C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "notify", "notify\notify.vcproj", "{1EFD2CA7-86AF-4F66-9930-978D5A881949}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yahoo", "yahoo\yahoo.vcproj", "{9B7A5827-9F06-4B7F-B8E3-233E9350C258}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking", "echo_blocking\echo_blocking.vcproj", "{76F139F5-913A-4328-8504-B1E9B7F1BA97}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_addr", "echo_blocking_addr\echo_blocking_addr.vcproj", "{DDBF66ED-91FA-48ED-B23D-437473C52C0A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_dual", "echo_blocking_dual\echo_blocking_dual.vcproj", "{584804F3-344F-4850-899C-85E1998694F8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_non_blocking", "echo_non_blocking\echo_non_blocking.vcproj", "{62DB83C4-A2FA-45AF-B2F2-A737443AD473}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_non_blocking_dual", "echo_non_blocking_dual\echo_non_blocking_dual.vcproj", "{9C1140F6-1846-4335-B571-83E2C9FF6E02}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_rest", "echo_rest\echo_rest.vcproj", "{84518230-9F6F-4B1E-B4B4-9F78D27355AC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_auth", "echo_blocking_auth\echo_blocking_auth.vcproj", "{0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {57414A3E-782C-4472-9EEE-981EF0649258}.Debug|Win32.ActiveCfg = Debug|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Debug|Win32.Build.0 = Debug|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Release|Win32.ActiveCfg = Release|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Release|Win32.Build.0 = Release|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Debug|Win32.ActiveCfg = Debug|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Debug|Win32.Build.0 = Debug|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Release|Win32.ActiveCfg = Release|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Release|Win32.Build.0 = Release|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Debug|Win32.ActiveCfg = Debug|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Debug|Win32.Build.0 = Debug|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Release|Win32.ActiveCfg = Release|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Release|Win32.Build.0 = Release|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Debug|Win32.ActiveCfg = Debug|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Debug|Win32.Build.0 = Debug|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Release|Win32.ActiveCfg = Release|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Release|Win32.Build.0 = Release|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Debug|Win32.ActiveCfg = Debug|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Debug|Win32.Build.0 = Debug|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Release|Win32.ActiveCfg = Release|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Release|Win32.Build.0 = Release|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Debug|Win32.ActiveCfg = Debug|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Debug|Win32.Build.0 = Debug|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Release|Win32.ActiveCfg = Release|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Release|Win32.Build.0 = Release|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Debug|Win32.ActiveCfg = Debug|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Debug|Win32.Build.0 = Debug|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Release|Win32.ActiveCfg = Release|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Release|Win32.Build.0 = Release|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Debug|Win32.ActiveCfg = Debug|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Debug|Win32.Build.0 = Debug|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Release|Win32.ActiveCfg = Release|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Release|Win32.Build.0 = Release|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Debug|Win32.ActiveCfg = Debug|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Debug|Win32.Build.0 = Debug|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Release|Win32.ActiveCfg = Release|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Release|Win32.Build.0 = Release|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Debug|Win32.ActiveCfg = Debug|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Debug|Win32.Build.0 = Debug|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Release|Win32.ActiveCfg = Release|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Release|Win32.Build.0 = Release|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Debug|Win32.Build.0 = Debug|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Release|Win32.ActiveCfg = Release|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Release|Win32.Build.0 = Release|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Debug|Win32.ActiveCfg = Debug|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Debug|Win32.Build.0 = Debug|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Release|Win32.ActiveCfg = Release|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Release|Win32.Build.0 = Release|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Debug|Win32.ActiveCfg = Debug|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Debug|Win32.Build.0 = Debug|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Release|Win32.ActiveCfg = Release|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc/axis2c/clients/echo/echo.vcproj b/ides/vc/axis2c/clients/echo/echo.vcproj new file mode 100644 index 0000000..b06e9c5 --- /dev/null +++ b/ides/vc/axis2c/clients/echo/echo.vcproj @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/clients/echo_blocking/echo_blocking.vcproj b/ides/vc/axis2c/clients/echo_blocking/echo_blocking.vcproj new file mode 100644 index 0000000..0cb8647 --- /dev/null +++ b/ides/vc/axis2c/clients/echo_blocking/echo_blocking.vcproj @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/clients/echo_blocking_addr/echo_blocking_addr.vcproj b/ides/vc/axis2c/clients/echo_blocking_addr/echo_blocking_addr.vcproj new file mode 100644 index 0000000..8dfc92d --- /dev/null +++ b/ides/vc/axis2c/clients/echo_blocking_addr/echo_blocking_addr.vcproj @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/clients/echo_blocking_auth/echo_blocking_auth.vcproj b/ides/vc/axis2c/clients/echo_blocking_auth/echo_blocking_auth.vcproj new file mode 100644 index 0000000..5384487 --- /dev/null +++ b/ides/vc/axis2c/clients/echo_blocking_auth/echo_blocking_auth.vcproj @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/clients/echo_blocking_dual/echo_blocking_dual.vcproj b/ides/vc/axis2c/clients/echo_blocking_dual/echo_blocking_dual.vcproj new file mode 100644 index 0000000..fd54aed --- /dev/null +++ b/ides/vc/axis2c/clients/echo_blocking_dual/echo_blocking_dual.vcproj @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/clients/echo_non_blocking/echo_non_blocking.vcproj b/ides/vc/axis2c/clients/echo_non_blocking/echo_non_blocking.vcproj new file mode 100644 index 0000000..059a300 --- /dev/null +++ b/ides/vc/axis2c/clients/echo_non_blocking/echo_non_blocking.vcproj @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj b/ides/vc/axis2c/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj new file mode 100644 index 0000000..9b1d3bf --- /dev/null +++ b/ides/vc/axis2c/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/clients/echo_rest/echo_rest.vcproj b/ides/vc/axis2c/clients/echo_rest/echo_rest.vcproj new file mode 100644 index 0000000..04695f8 --- /dev/null +++ b/ides/vc/axis2c/clients/echo_rest/echo_rest.vcproj @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/clients/google/google.vcproj b/ides/vc/axis2c/clients/google/google.vcproj new file mode 100644 index 0000000..644a0d5 --- /dev/null +++ b/ides/vc/axis2c/clients/google/google.vcproj @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/clients/math/math.vcproj b/ides/vc/axis2c/clients/math/math.vcproj new file mode 100644 index 0000000..6cee8db --- /dev/null +++ b/ides/vc/axis2c/clients/math/math.vcproj @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/clients/mtom/mtom.vcproj b/ides/vc/axis2c/clients/mtom/mtom.vcproj new file mode 100644 index 0000000..d00b188 --- /dev/null +++ b/ides/vc/axis2c/clients/mtom/mtom.vcproj @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/clients/notify/notify.vcproj b/ides/vc/axis2c/clients/notify/notify.vcproj new file mode 100644 index 0000000..5bd343e --- /dev/null +++ b/ides/vc/axis2c/clients/notify/notify.vcproj @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/clients/yahoo/yahoo.vcproj b/ides/vc/axis2c/clients/yahoo/yahoo.vcproj new file mode 100644 index 0000000..cff61be --- /dev/null +++ b/ides/vc/axis2c/clients/yahoo/yahoo.vcproj @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/guththila/guththila.sln b/ides/vc/axis2c/guththila/guththila.sln new file mode 100644 index 0000000..3eea6e6 --- /dev/null +++ b/ides/vc/axis2c/guththila/guththila.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guththila", "guththila.vcproj", "{81FDD803-8611-4EB4-AB0E-85F498061A2D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_parser_guththila", "..\axis2_parser_guththila\axis2_parser_guththila.vcproj", "{DC69D297-3B3B-4FA2-A799-51F040708857}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Debug|Win32.ActiveCfg = Debug|Win32 + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Debug|Win32.Build.0 = Debug|Win32 + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Release|Win32.ActiveCfg = Release|Win32 + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Release|Win32.Build.0 = Release|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Debug|Win32.ActiveCfg = Debug|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Debug|Win32.Build.0 = Debug|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Release|Win32.ActiveCfg = Release|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc/axis2c/guththila/guththila.vcproj b/ides/vc/axis2c/guththila/guththila.vcproj new file mode 100644 index 0000000..8f64b34 --- /dev/null +++ b/ides/vc/axis2c/guththila/guththila.vcproj @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/mod_axis2/mod_axis2.sln b/ides/vc/axis2c/mod_axis2/mod_axis2.sln new file mode 100644 index 0000000..913e3c8 --- /dev/null +++ b/ides/vc/axis2c/mod_axis2/mod_axis2.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_axis2", "mod_axis2.vcproj", "{9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Debug|Win32.ActiveCfg = Debug|Win32 + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Debug|Win32.Build.0 = Debug|Win32 + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Release|Win32.ActiveCfg = Release|Win32 + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc/axis2c/mod_axis2/mod_axis2.vcproj b/ides/vc/axis2c/mod_axis2/mod_axis2.vcproj new file mode 100644 index 0000000..12d95a2 --- /dev/null +++ b/ides/vc/axis2c/mod_axis2/mod_axis2.vcproj @@ -0,0 +1,240 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/mod_axis2_IIS/mod_axis2_IIS.sln b/ides/vc/axis2c/mod_axis2_IIS/mod_axis2_IIS.sln new file mode 100644 index 0000000..95f65c4 --- /dev/null +++ b/ides/vc/axis2c/mod_axis2_IIS/mod_axis2_IIS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_axis2_IIS", "mod_axis2_IIS.vcproj", "{1D949369-9C4B-4C59-9F2A-278FD8CE0D41}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Debug|Win32.ActiveCfg = Debug|Win32 + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Debug|Win32.Build.0 = Debug|Win32 + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Release|Win32.ActiveCfg = Release|Win32 + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc/axis2c/mod_axis2_IIS/mod_axis2_IIS.vcproj b/ides/vc/axis2c/mod_axis2_IIS/mod_axis2_IIS.vcproj new file mode 100644 index 0000000..113d7ea --- /dev/null +++ b/ides/vc/axis2c/mod_axis2_IIS/mod_axis2_IIS.vcproj @@ -0,0 +1,270 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/neethi/neethi.vcproj b/ides/vc/axis2c/neethi/neethi.vcproj new file mode 100644 index 0000000..a60603b --- /dev/null +++ b/ides/vc/axis2c/neethi/neethi.vcproj @@ -0,0 +1,770 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/services/Calculator/Calculator.vcproj b/ides/vc/axis2c/services/Calculator/Calculator.vcproj new file mode 100644 index 0000000..3671406 --- /dev/null +++ b/ides/vc/axis2c/services/Calculator/Calculator.vcproj @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/services/echo/echo.vcproj b/ides/vc/axis2c/services/echo/echo.vcproj new file mode 100644 index 0000000..d712257 --- /dev/null +++ b/ides/vc/axis2c/services/echo/echo.vcproj @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/services/math/math.vcproj b/ides/vc/axis2c/services/math/math.vcproj new file mode 100644 index 0000000..c1210fe --- /dev/null +++ b/ides/vc/axis2c/services/math/math.vcproj @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/services/mtom/mtom.vcproj b/ides/vc/axis2c/services/mtom/mtom.vcproj new file mode 100644 index 0000000..54be81c --- /dev/null +++ b/ides/vc/axis2c/services/mtom/mtom.vcproj @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/services/notify/notify.vcproj b/ides/vc/axis2c/services/notify/notify.vcproj new file mode 100644 index 0000000..7062dd0 --- /dev/null +++ b/ides/vc/axis2c/services/notify/notify.vcproj @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/axis2c/services/services.sln b/ides/vc/axis2c/services/services.sln new file mode 100644 index 0000000..c9638a4 --- /dev/null +++ b/ides/vc/axis2c/services/services.sln @@ -0,0 +1,44 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Calculator", "Calculator\Calculator.vcproj", "{1917F167-8C7F-4920-934D-BDAA2E6DC024}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo", "echo\echo.vcproj", "{0469C145-5B1A-4677-B0C2-0981EB6C0567}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "math", "math\math.vcproj", "{8209506A-634F-4239-82D0-3EC9105FEBA4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mtom", "mtom\mtom.vcproj", "{C8BDF683-7F8E-4526-9193-836DD90714CC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "notify", "notify\notify.vcproj", "{23D5F8E4-F554-451F-B97D-F0CD82272229}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Debug|Win32.ActiveCfg = Debug|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Debug|Win32.Build.0 = Debug|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Release|Win32.ActiveCfg = Release|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Release|Win32.Build.0 = Release|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Debug|Win32.ActiveCfg = Debug|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Debug|Win32.Build.0 = Debug|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Release|Win32.ActiveCfg = Release|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Release|Win32.Build.0 = Release|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Debug|Win32.ActiveCfg = Debug|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Debug|Win32.Build.0 = Debug|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Release|Win32.ActiveCfg = Release|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Release|Win32.Build.0 = Release|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Debug|Win32.Build.0 = Debug|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Release|Win32.ActiveCfg = Release|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Release|Win32.Build.0 = Release|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Debug|Win32.ActiveCfg = Debug|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Debug|Win32.Build.0 = Debug|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Release|Win32.ActiveCfg = Release|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc/axis2c/tcpmon/tcpmon.sln b/ides/vc/axis2c/tcpmon/tcpmon.sln new file mode 100644 index 0000000..82175e6 --- /dev/null +++ b/ides/vc/axis2c/tcpmon/tcpmon.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tcpmon", "tcpmon.vcproj", "{56180647-96CF-4415-B3FB-34E41CEAD595}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {56180647-96CF-4415-B3FB-34E41CEAD595}.Debug|Win32.ActiveCfg = Debug|Win32 + {56180647-96CF-4415-B3FB-34E41CEAD595}.Debug|Win32.Build.0 = Debug|Win32 + {56180647-96CF-4415-B3FB-34E41CEAD595}.Release|Win32.ActiveCfg = Release|Win32 + {56180647-96CF-4415-B3FB-34E41CEAD595}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc/axis2c/tcpmon/tcpmon.vcproj b/ides/vc/axis2c/tcpmon/tcpmon.vcproj new file mode 100644 index 0000000..4141ab0 --- /dev/null +++ b/ides/vc/axis2c/tcpmon/tcpmon.vcproj @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/clients/clients.sln b/ides/vc/samples/clients/clients.sln new file mode 100644 index 0000000..fc5096c --- /dev/null +++ b/ides/vc/samples/clients/clients.sln @@ -0,0 +1,86 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo", "echo\echo.vcproj", "{57414A3E-782C-4472-9EEE-981EF0649258}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mtom", "mtom\mtom.vcproj", "{9EA3CB05-003C-410C-A4F2-B0DB7F01645D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "math", "math\math.vcproj", "{9121BA33-CE71-4775-AD78-1114696BFEC8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "google", "google\google.vcproj", "{607FAED5-B750-44D2-A817-0FDF4F77744C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "notify", "notify\notify.vcproj", "{1EFD2CA7-86AF-4F66-9930-978D5A881949}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yahoo", "yahoo\yahoo.vcproj", "{9B7A5827-9F06-4B7F-B8E3-233E9350C258}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking", "echo_blocking\echo_blocking.vcproj", "{76F139F5-913A-4328-8504-B1E9B7F1BA97}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_addr", "echo_blocking_addr\echo_blocking_addr.vcproj", "{DDBF66ED-91FA-48ED-B23D-437473C52C0A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_dual", "echo_blocking_dual\echo_blocking_dual.vcproj", "{584804F3-344F-4850-899C-85E1998694F8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_non_blocking", "echo_non_blocking\echo_non_blocking.vcproj", "{62DB83C4-A2FA-45AF-B2F2-A737443AD473}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_non_blocking_dual", "echo_non_blocking_dual\echo_non_blocking_dual.vcproj", "{9C1140F6-1846-4335-B571-83E2C9FF6E02}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_rest", "echo_rest\echo_rest.vcproj", "{84518230-9F6F-4B1E-B4B4-9F78D27355AC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {57414A3E-782C-4472-9EEE-981EF0649258}.Debug|Win32.ActiveCfg = Debug|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Debug|Win32.Build.0 = Debug|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Release|Win32.ActiveCfg = Release|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Release|Win32.Build.0 = Release|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Debug|Win32.ActiveCfg = Debug|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Debug|Win32.Build.0 = Debug|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Release|Win32.ActiveCfg = Release|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Release|Win32.Build.0 = Release|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Debug|Win32.ActiveCfg = Debug|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Debug|Win32.Build.0 = Debug|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Release|Win32.ActiveCfg = Release|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Release|Win32.Build.0 = Release|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Debug|Win32.ActiveCfg = Debug|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Debug|Win32.Build.0 = Debug|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Release|Win32.ActiveCfg = Release|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Release|Win32.Build.0 = Release|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Debug|Win32.ActiveCfg = Debug|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Debug|Win32.Build.0 = Debug|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Release|Win32.ActiveCfg = Release|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Release|Win32.Build.0 = Release|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Debug|Win32.ActiveCfg = Debug|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Debug|Win32.Build.0 = Debug|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Release|Win32.ActiveCfg = Release|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Release|Win32.Build.0 = Release|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Debug|Win32.ActiveCfg = Debug|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Debug|Win32.Build.0 = Debug|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Release|Win32.ActiveCfg = Release|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Release|Win32.Build.0 = Release|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Debug|Win32.ActiveCfg = Debug|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Debug|Win32.Build.0 = Debug|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Release|Win32.ActiveCfg = Release|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Release|Win32.Build.0 = Release|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Debug|Win32.ActiveCfg = Debug|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Debug|Win32.Build.0 = Debug|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Release|Win32.ActiveCfg = Release|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Release|Win32.Build.0 = Release|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Debug|Win32.ActiveCfg = Debug|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Debug|Win32.Build.0 = Debug|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Release|Win32.ActiveCfg = Release|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Release|Win32.Build.0 = Release|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Debug|Win32.Build.0 = Debug|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Release|Win32.ActiveCfg = Release|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Release|Win32.Build.0 = Release|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Debug|Win32.ActiveCfg = Debug|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Debug|Win32.Build.0 = Debug|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Release|Win32.ActiveCfg = Release|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc/samples/clients/echo/echo.vcproj b/ides/vc/samples/clients/echo/echo.vcproj new file mode 100644 index 0000000..26b475a --- /dev/null +++ b/ides/vc/samples/clients/echo/echo.vcproj @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/clients/echo_blocking/echo_blocking.vcproj b/ides/vc/samples/clients/echo_blocking/echo_blocking.vcproj new file mode 100644 index 0000000..52c38f2 --- /dev/null +++ b/ides/vc/samples/clients/echo_blocking/echo_blocking.vcproj @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/clients/echo_blocking_addr/echo_blocking_addr.vcproj b/ides/vc/samples/clients/echo_blocking_addr/echo_blocking_addr.vcproj new file mode 100644 index 0000000..f63d4aa --- /dev/null +++ b/ides/vc/samples/clients/echo_blocking_addr/echo_blocking_addr.vcproj @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/clients/echo_blocking_dual/echo_blocking_dual.vcproj b/ides/vc/samples/clients/echo_blocking_dual/echo_blocking_dual.vcproj new file mode 100644 index 0000000..43f9528 --- /dev/null +++ b/ides/vc/samples/clients/echo_blocking_dual/echo_blocking_dual.vcproj @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/clients/echo_non_blocking/echo_non_blocking.vcproj b/ides/vc/samples/clients/echo_non_blocking/echo_non_blocking.vcproj new file mode 100644 index 0000000..80b1c03 --- /dev/null +++ b/ides/vc/samples/clients/echo_non_blocking/echo_non_blocking.vcproj @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj b/ides/vc/samples/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj new file mode 100644 index 0000000..72032fd --- /dev/null +++ b/ides/vc/samples/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/clients/echo_rest/echo_rest.vcproj b/ides/vc/samples/clients/echo_rest/echo_rest.vcproj new file mode 100644 index 0000000..81ae89f --- /dev/null +++ b/ides/vc/samples/clients/echo_rest/echo_rest.vcproj @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/clients/google/google.vcproj b/ides/vc/samples/clients/google/google.vcproj new file mode 100644 index 0000000..ef3d04e --- /dev/null +++ b/ides/vc/samples/clients/google/google.vcproj @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/clients/math/math.vcproj b/ides/vc/samples/clients/math/math.vcproj new file mode 100644 index 0000000..ab16db5 --- /dev/null +++ b/ides/vc/samples/clients/math/math.vcproj @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/clients/mtom/mtom.vcproj b/ides/vc/samples/clients/mtom/mtom.vcproj new file mode 100644 index 0000000..6aa7b43 --- /dev/null +++ b/ides/vc/samples/clients/mtom/mtom.vcproj @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/clients/notify/notify.vcproj b/ides/vc/samples/clients/notify/notify.vcproj new file mode 100644 index 0000000..50a31b9 --- /dev/null +++ b/ides/vc/samples/clients/notify/notify.vcproj @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/clients/yahoo/yahoo.vcproj b/ides/vc/samples/clients/yahoo/yahoo.vcproj new file mode 100644 index 0000000..4649fd9 --- /dev/null +++ b/ides/vc/samples/clients/yahoo/yahoo.vcproj @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/services/Calculator/Calculator.vcproj b/ides/vc/samples/services/Calculator/Calculator.vcproj new file mode 100644 index 0000000..5467648 --- /dev/null +++ b/ides/vc/samples/services/Calculator/Calculator.vcproj @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/services/echo/echo.vcproj b/ides/vc/samples/services/echo/echo.vcproj new file mode 100644 index 0000000..1822428 --- /dev/null +++ b/ides/vc/samples/services/echo/echo.vcproj @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/services/math/math.vcproj b/ides/vc/samples/services/math/math.vcproj new file mode 100644 index 0000000..0b1d7a0 --- /dev/null +++ b/ides/vc/samples/services/math/math.vcproj @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/services/mtom/mtom.vcproj b/ides/vc/samples/services/mtom/mtom.vcproj new file mode 100644 index 0000000..45608d9 --- /dev/null +++ b/ides/vc/samples/services/mtom/mtom.vcproj @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/services/notify/notify.vcproj b/ides/vc/samples/services/notify/notify.vcproj new file mode 100644 index 0000000..6a742a7 --- /dev/null +++ b/ides/vc/samples/services/notify/notify.vcproj @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc/samples/services/services.sln b/ides/vc/samples/services/services.sln new file mode 100644 index 0000000..c9638a4 --- /dev/null +++ b/ides/vc/samples/services/services.sln @@ -0,0 +1,44 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Calculator", "Calculator\Calculator.vcproj", "{1917F167-8C7F-4920-934D-BDAA2E6DC024}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo", "echo\echo.vcproj", "{0469C145-5B1A-4677-B0C2-0981EB6C0567}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "math", "math\math.vcproj", "{8209506A-634F-4239-82D0-3EC9105FEBA4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mtom", "mtom\mtom.vcproj", "{C8BDF683-7F8E-4526-9193-836DD90714CC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "notify", "notify\notify.vcproj", "{23D5F8E4-F554-451F-B97D-F0CD82272229}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Debug|Win32.ActiveCfg = Debug|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Debug|Win32.Build.0 = Debug|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Release|Win32.ActiveCfg = Release|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Release|Win32.Build.0 = Release|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Debug|Win32.ActiveCfg = Debug|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Debug|Win32.Build.0 = Debug|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Release|Win32.ActiveCfg = Release|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Release|Win32.Build.0 = Release|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Debug|Win32.ActiveCfg = Debug|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Debug|Win32.Build.0 = Debug|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Release|Win32.ActiveCfg = Release|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Release|Win32.Build.0 = Release|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Debug|Win32.Build.0 = Debug|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Release|Win32.ActiveCfg = Release|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Release|Win32.Build.0 = Release|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Debug|Win32.ActiveCfg = Debug|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Debug|Win32.Build.0 = Debug|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Release|Win32.ActiveCfg = Release|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc6/axis2c/README.txt b/ides/vc6/axis2c/README.txt new file mode 100644 index 0000000..923d527 --- /dev/null +++ b/ides/vc6/axis2c/README.txt @@ -0,0 +1,37 @@ +DESCRIPTION: +a workspace and associated projects required to build the axis2_client.dll and immediate default dependencies. + +does not include project files for: +samples +guththila +clients +services +tcpmon + +requires: +1)libxml2-2.6.27.win32.zip +2)iconv-1.9.2.win32.zip +3)zlib-1.2.3.win32.zip + +4)a directory called 'axis2c_deps' into which are extracted these three zips. The projects reference these directories using a relative path so this axis2c_deps directory must be placed in the AXIS2C_HOME root. (sibling of ides directory) + +5)MS Platform SDK +6)axutil project has references to the platform SDK include and lib directories. due to NOTE below need to be verified for each installation. + +**NOTE old-style condensed paths are REQUIRED which on the workstation used to create the projects are +"c:/progra~1/micros~4/include" and "c:/progra~1/micros~4/lib". note that the ~4 is likely to be different depending on target workstation configuration. (use dir /x to see the workstation-specific condensed name) + + + +INSTALL: +extract to AXIS2C_HOME directory. the workspace will be extracted to /ides/vc/axis2c and the project files will be placed in the appropriate subdirectories. +create axis2c_deps in AXIS2C_HOME and extract dependency zips into it. +ensure path to MS platform SDK is correct in axutil project settings. + + +OUTPUT: +with axis2_engine selected as active project, "build all" creates target .dll and .lib files in the AXIS2C_HOME/lib directory. + + +KNOWN BUGS: +some warnings about platform-specific header files appear but compile, run and debug work correctly diff --git a/ides/vc6/axis2c/axiom/axiom.dsp b/ides/vc6/axis2c/axiom/axiom.dsp new file mode 100644 index 0000000..0c01ddb --- /dev/null +++ b/ides/vc6/axis2c/axiom/axiom.dsp @@ -0,0 +1,1715 @@ +# Microsoft Developer Studio Project File - Name="axiom" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=axiom - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "axiom.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "axiom.mak" CFG="axiom - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "axiom - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "axiom - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "axiom - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIOM_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIOM_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "axiom - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIOM_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\src\core\transport\tcp" /I "..\..\..\..\include" /I "..\..\..\..\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axutil.lib axis2_parser.lib /nologo /dll /incremental:no /pdb:"../../../../build/deploy/lib/axiom.pdb" /debug /machine:I386 /out:"../../../../build/deploy/lib/axiom.dll" /pdbtype:sept /libpath:"../../../../build/deploy/lib" +# SUBTRACT LINK32 /pdb:none +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=copy .\debug\*.lib .\..\..\..\..\build\deploy\lib +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "axiom - Win32 Release" +# Name "axiom - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\attachments\data_handler.c +DEP_CPP_DATA_=\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\http_chunked_stream.c +DEP_CPP_HTTP_=\ + "..\..\..\..\util\include\axutil_http_chunked_stream.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_stream.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\attachments\mime_body_part.c +DEP_CPP_MIME_=\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\src\attachments\axiom_mime_body_part.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\attachments\mime_output.c +DEP_CPP_MIME_O=\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_mime_const.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\attachments\axiom_mime_body_part.h"\ + "..\..\..\..\axiom\src\attachments\axiom_mime_output.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\attachments\mime_parser.c +DEP_CPP_MIME_P=\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_mime_const.h"\ + "..\..\..\..\axiom\include\axiom_mime_parser.h"\ + "..\..\..\..\util\include\axutil_http_chunked_stream.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_stream.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_attribute.c +DEP_CPP_OM_AT=\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_child_element_iterator.c +DEP_CPP_OM_CH=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_children_iterator.c +DEP_CPP_OM_CHI=\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_children_qname_iterator.c +DEP_CPP_OM_CHIL=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_children_with_specific_attribute_iterator.c +DEP_CPP_OM_CHILD=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_comment.c +DEP_CPP_OM_CO=\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\src\om\axiom_node_internal.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_data_source.c +DEP_CPP_OM_DA=\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\src\om\axiom_node_internal.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_stream.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_doctype.c +DEP_CPP_OM_DO=\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\src\om\axiom_node_internal.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_document.c +DEP_CPP_OM_DOC=\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_element.c +DEP_CPP_OM_EL=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\om\axiom_node_internal.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_namespace.c +DEP_CPP_OM_NA=\ + "..\..\..\..\axiom\src\om\axiom_namespace_internal.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_navigator.c +DEP_CPP_OM_NAV=\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_node.c +DEP_CPP_OM_NO=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\om\axiom_node_internal.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_stream.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_output.c +DEP_CPP_OM_OU=\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\attachments\axiom_mime_output.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_processing_instruction.c +DEP_CPP_OM_PR=\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\src\om\axiom_node_internal.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_stax_builder.c +DEP_CPP_OM_ST=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\om\axiom_node_internal.h"\ + "..\..\..\..\axiom\src\om\axiom_stax_builder_internal.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\om_text.c +DEP_CPP_OM_TE=\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\om\axiom_node_internal.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\util\om_util.c +DEP_CPP_OM_UT=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_util.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_stream.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap11_builder_helper.c +DEP_CPP_SOAP1=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\om\axiom_node_internal.h"\ + "..\..\..\..\axiom\src\om\axiom_stax_builder_internal.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_body.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\src\soap\axiom_soap11_builder_helper.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap12_builder_helper.c +DEP_CPP_SOAP12=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_body.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_envelope.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\src\soap\axiom_soap12_builder_helper.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap_body.c +DEP_CPP_SOAP_=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_body.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_envelope.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_value.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap_builder.c +DEP_CPP_SOAP_B=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\om\axiom_stax_builder_internal.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_body.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_envelope.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_header.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_header_block.h"\ + "..\..\..\..\axiom\src\soap\axiom_soap11_builder_helper.h"\ + "..\..\..\..\axiom\src\soap\axiom_soap12_builder_helper.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap_envelope.c +DEP_CPP_SOAP_E=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\om\axiom_namespace_internal.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_envelope.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap_fault.c +DEP_CPP_SOAP_F=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_body.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap_fault_code.c +DEP_CPP_SOAP_FA=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_code.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap_fault_detail.c +DEP_CPP_SOAP_FAU=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_detail.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap_fault_node.c +DEP_CPP_SOAP_FAUL=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_node.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap_fault_reason.c +DEP_CPP_SOAP_FAULT=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap_fault_role.c +DEP_CPP_SOAP_FAULT_=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap_fault_sub_code.c +DEP_CPP_SOAP_FAULT_S=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_code.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap_fault_text.c +DEP_CPP_SOAP_FAULT_T=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_text.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap_fault_value.c +DEP_CPP_SOAP_FAULT_V=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_fault_sub_code.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap_header.c +DEP_CPP_SOAP_H=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\om\axiom_node_internal.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_envelope.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_header.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\soap_header_block.c +DEP_CPP_SOAP_HE=\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_header.h"\ + "..\..\..\..\axiom\src\soap\_axiom_soap_header_block.h"\ + {$(INCLUDE)}"axiom_attribute.h"\ + {$(INCLUDE)}"axiom_namespace.h"\ + {$(INCLUDE)}"axiom_node.h"\ + {$(INCLUDE)}"axiom_output.h"\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\_axiom_soap_body.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\_axiom_soap_envelope.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\_axiom_soap_fault.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\_axiom_soap_fault_code.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\_axiom_soap_fault_detail.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\_axiom_soap_fault_node.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\_axiom_soap_fault_reason.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\_axiom_soap_fault_role.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\_axiom_soap_fault_sub_code.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\_axiom_soap_fault_text.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\_axiom_soap_fault_value.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\_axiom_soap_header.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\_axiom_soap_header_block.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_attribute.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_child_element_iterator.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_children_iterator.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_children_qname_iterator.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_comment.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_data_handler.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_data_source.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_doctype.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_document.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_element.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\attachments\axiom_mime_body_part.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_mime_const.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\attachments\axiom_mime_output.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_mime_parser.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_namespace.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\axiom_namespace_internal.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_navigator.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_node.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\axiom_node_internal.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_output.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_processing_instruction.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\axiom_soap11_builder_helper.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\soap\axiom_soap12_builder_helper.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_body.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_const.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_envelope.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_fault.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_fault_code.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_fault_detail.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_fault_node.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_fault_reason.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_fault_role.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_fault_text.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_fault_value.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_header.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_soap_header_block.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_stax_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\om\axiom_stax_builder_internal.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_text.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_util.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_xml_reader.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\include\axiom_xml_writer.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ides/vc6/axis2c/axis2_engine/axis2_engine.dsp b/ides/vc6/axis2c/axis2_engine/axis2_engine.dsp new file mode 100644 index 0000000..49439c0 --- /dev/null +++ b/ides/vc6/axis2c/axis2_engine/axis2_engine.dsp @@ -0,0 +1,6060 @@ +# Microsoft Developer Studio Project File - Name="axis2_engine" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=axis2_engine - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "axis2_engine.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "axis2_engine.mak" CFG="axis2_engine - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "axis2_engine - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "axis2_engine - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "axis2_engine - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_ENGINE_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_ENGINE_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "axis2_engine - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_ENGINE_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\src\core\transport\tcp" /I "..\..\..\..\include" /I "..\..\..\..\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axiom.lib axutil.lib axis2_parser.lib neethi.lib /nologo /dll /incremental:no /pdb:"../../../../build/deploy/lib/axis2_engine.pdb" /debug /machine:I386 /out:"../../../../build/deploy/lib/axis2_engine.dll" /pdbtype:sept /libpath:"../../../../build/deploy/lib" +# SUBTRACT LINK32 /pdb:none +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=copy .\..\..\..\..\samples\server\axis2.xml .\..\..\..\..\build\deploy\ copy .\debug\*.lib .\..\..\..\..\build\deploy\lib +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "axis2_engine - Win32 Release" +# Name "axis2_engine - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\src\core\engine\addr_disp.c +DEP_CPP_ADDR_=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_addr.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_disp.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\addr\any_content_type.c +DEP_CPP_ANY_C=\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\arch_file_data.c +DEP_CPP_ARCH_=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_file_data.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\arch_reader.c +DEP_CPP_ARCH_R=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_addr.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_file_data.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_reader.h"\ + "..\..\..\..\src\core\deployment\axis2_conf_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_dep_engine.h"\ + "..\..\..\..\src\core\deployment\axis2_deployment.h"\ + "..\..\..\..\src\core\deployment\axis2_desc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_module_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_repos_listener.h"\ + "..\..\..\..\src\core\deployment\axis2_svc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_svc_grp_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info_list.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\clientapi\async_result.c +DEP_CPP_ASYNC=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_async_result.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\clientapi\callback.c +DEP_CPP_CALLB=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_async_result.h"\ + "..\..\..\..\include\axis2_callback.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\clientapi\callback_recv.c +DEP_CPP_CALLBA=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_async_result.h"\ + "..\..\..\..\include\axis2_callback.h"\ + "..\..\..\..\include\axis2_callback_recv.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\engine\conf.c +DEP_CPP_CONF_=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_addr.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_core_utils.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_disp.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_file_data.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_reader.h"\ + "..\..\..\..\src\core\deployment\axis2_conf_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_dep_engine.h"\ + "..\..\..\..\src\core\deployment\axis2_deployment.h"\ + "..\..\..\..\src\core\deployment\axis2_desc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_repos_listener.h"\ + "..\..\..\..\src\core\deployment\axis2_svc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_svc_grp_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info_list.h"\ + "..\..\..\..\src\core\engine\axis2_disp_checker.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\conf_builder.c +DEP_CPP_CONF_B=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_disp.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_receiver.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_file_data.h"\ + "..\..\..\..\src\core\deployment\axis2_conf_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_dep_engine.h"\ + "..\..\..\..\src\core\deployment\axis2_deployment.h"\ + "..\..\..\..\src\core\deployment\axis2_desc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_repos_listener.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info_list.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\context\conf_ctx.c +DEP_CPP_CONF_C=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\conf_init.c +DEP_CPP_CONF_I=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_conf_init.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_receiver.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_file_data.h"\ + "..\..\..\..\src\core\deployment\axis2_conf_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_dep_engine.h"\ + "..\..\..\..\src\core\deployment\axis2_deployment.h"\ + "..\..\..\..\src\core\deployment\axis2_desc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_repos_listener.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info_list.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\util\core_utils.c +DEP_CPP_CORE_=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_addr.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_core_utils.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\context\ctx.c +DEP_CPP_CTX_C=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\engine\ctx_handler.c +DEP_CPP_CTX_H=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\dep_engine.c +DEP_CPP_DEP_E=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_addr.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_core_utils.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_file_data.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_reader.h"\ + "..\..\..\..\src\core\deployment\axis2_conf_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_dep_engine.h"\ + "..\..\..\..\src\core\deployment\axis2_deployment.h"\ + "..\..\..\..\src\core\deployment\axis2_desc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_module_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_repos_listener.h"\ + "..\..\..\..\src\core\deployment\axis2_svc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_svc_grp_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info_list.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\description\desc.c +DEP_CPP_DESC_=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\desc_builder.c +DEP_CPP_DESC_B=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_raw_xml_in_out_msg_recv.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_file_data.h"\ + "..\..\..\..\src\core\deployment\axis2_conf_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_dep_engine.h"\ + "..\..\..\..\src\core\deployment\axis2_deployment.h"\ + "..\..\..\..\src\core\deployment\axis2_desc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_repos_listener.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info_list.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_generic_obj.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\engine\disp.c +DEP_CPP_DISP_=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_disp.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\engine\disp_checker.c +DEP_CPP_DISP_C=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\src\core\engine\axis2_disp_checker.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\addr\endpoint_ref.c +DEP_CPP_ENDPO=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\engine\engine.c +DEP_CPP_ENGIN=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_addr.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_engine.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\description\flow.c +DEP_CPP_FLOW_=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\description\flow_container.c +DEP_CPP_FLOW_C=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\engine\handler.c +DEP_CPP_HANDL=\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\description\handler_desc.c +DEP_CPP_HANDLE=\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\http_chunked_stream.c +DEP_CPP_HTTP_=\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_http_chunked_stream.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\common\http_header.c +DEP_CPP_HTTP_H=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_http_header.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\common\http_out_transport_info.c +DEP_CPP_HTTP_O=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_http_header.h"\ + "..\..\..\..\include\axis2_http_out_transport_info.h"\ + "..\..\..\..\include\axis2_http_simple_response.h"\ + "..\..\..\..\include\axis2_http_status_line.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\common\http_request_line.c +DEP_CPP_HTTP_R=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_http_request_line.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\common\http_response_writer.c +DEP_CPP_HTTP_RE=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_http_response_writer.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\common\http_simple_request.c +DEP_CPP_HTTP_S=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_http_header.h"\ + "..\..\..\..\include\axis2_http_request_line.h"\ + "..\..\..\..\include\axis2_http_simple_request.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\common\http_simple_response.c +DEP_CPP_HTTP_SI=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_http_header.h"\ + "..\..\..\..\include\axis2_http_simple_response.h"\ + "..\..\..\..\include\axis2_http_status_line.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\common\http_status_line.c +DEP_CPP_HTTP_ST=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_http_status_line.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\util\http_transport_utils.c +DEP_CPP_HTTP_T=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_mime_const.h"\ + "..\..\..\..\axiom\include\axiom_mime_parser.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_disp.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_engine.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_http_header.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\include\axis2_http_transport_utils.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_http_chunked_stream.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\common\http_worker.c +DEP_CPP_HTTP_W=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_engine.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_http_header.h"\ + "..\..\..\..\include\axis2_http_out_transport_info.h"\ + "..\..\..\..\include\axis2_http_request_line.h"\ + "..\..\..\..\include\axis2_http_response_writer.h"\ + "..\..\..\..\include\axis2_http_simple_request.h"\ + "..\..\..\..\include\axis2_http_simple_response.h"\ + "..\..\..\..\include\axis2_http_status_line.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\include\axis2_http_transport_utils.h"\ + "..\..\..\..\include\axis2_http_worker.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_simple_http_svr_conn.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_http_chunked_stream.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\clientapi\listener_manager.c +DEP_CPP_LISTE=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_listener_manager.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_receiver.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\module_builder.c +DEP_CPP_MODUL=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_file_data.h"\ + "..\..\..\..\src\core\deployment\axis2_conf_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_dep_engine.h"\ + "..\..\..\..\src\core\deployment\axis2_deployment.h"\ + "..\..\..\..\src\core\deployment\axis2_desc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_module_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_repos_listener.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info_list.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\description\module_desc.c +DEP_CPP_MODULE=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\description\msg.c +DEP_CPP_MSG_C=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\context\msg_ctx.c +DEP_CPP_MSG_CT=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_http_header.h"\ + "..\..\..\..\include\axis2_http_out_transport_info.h"\ + "..\..\..\..\include\axis2_http_simple_response.h"\ + "..\..\..\..\include\axis2_http_status_line.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_options.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_receiver.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\addr\msg_info_headers.c +DEP_CPP_MSG_I=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\receivers\msg_recv.c +DEP_CPP_MSG_R=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_core_utils.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_engine.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\description\op.c +DEP_CPP_OP_C54=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\clientapi\op_client.c +DEP_CPP_OP_CL=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_async_result.h"\ + "..\..\..\..\include\axis2_callback.h"\ + "..\..\..\..\include\axis2_callback_recv.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_core_utils.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_engine.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_listener_manager.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_client.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_options.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_receiver.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\context\op_ctx.c +DEP_CPP_OP_CT=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\clientapi\options.c +DEP_CPP_OPTIO=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_options.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_receiver.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\engine\phase.c +DEP_CPP_PHASE=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\phaseresolver\phase_holder.c +DEP_CPP_PHASE_=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\phaseresolver\phase_resolver.c +DEP_CPP_PHASE_R=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_addr.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\description\phase_rule.c +DEP_CPP_PHASE_RU=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\phases_info.c +DEP_CPP_PHASES=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\description\policy_include.c +DEP_CPP_POLIC=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\receivers\raw_xml_in_out_msg_recv.c +DEP_CPP_RAW_X=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_raw_xml_in_out_msg_recv.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\addr\relates_to.c +DEP_CPP_RELAT=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\repos_listener.c +DEP_CPP_REPOS=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_file_data.h"\ + "..\..\..\..\src\core\deployment\axis2_conf_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_dep_engine.h"\ + "..\..\..\..\src\core\deployment\axis2_deployment.h"\ + "..\..\..\..\src\core\deployment\axis2_desc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_repos_listener.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info_list.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\engine\req_uri_disp.c +DEP_CPP_REQ_U=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_addr.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_disp.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\engine\rest_disp.c +DEP_CPP_REST_=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_addr.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_disp.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\common\simple_http_svr_conn.c +DEP_CPP_SIMPL=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_http_header.h"\ + "..\..\..\..\include\axis2_http_request_line.h"\ + "..\..\..\..\include\axis2_http_response_writer.h"\ + "..\..\..\..\include\axis2_http_simple_request.h"\ + "..\..\..\..\include\axis2_http_simple_response.h"\ + "..\..\..\..\include\axis2_http_status_line.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\include\axis2_simple_http_svr_conn.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_http_chunked_stream.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\engine\soap_action_disp.c +DEP_CPP_SOAP_=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_addr.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_disp.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\engine\soap_body_disp.c +DEP_CPP_SOAP_B=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_disp.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\clientapi\stub.c +DEP_CPP_STUB_=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_async_result.h"\ + "..\..\..\..\include\axis2_callback.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_client.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_options.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_stub.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_client.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_receiver.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\description\svc.c +DEP_CPP_SVC_C=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_addr.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_file_data.h"\ + "..\..\..\..\src\core\deployment\axis2_conf_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_dep_engine.h"\ + "..\..\..\..\src\core\deployment\axis2_deployment.h"\ + "..\..\..\..\src\core\deployment\axis2_desc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_repos_listener.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info_list.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\svc_builder.c +DEP_CPP_SVC_B=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_addr.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_file_data.h"\ + "..\..\..\..\src\core\deployment\axis2_conf_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_dep_engine.h"\ + "..\..\..\..\src\core\deployment\axis2_deployment.h"\ + "..\..\..\..\src\core\deployment\axis2_desc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_repos_listener.h"\ + "..\..\..\..\src\core\deployment\axis2_svc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info_list.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\clientapi\svc_client.c +DEP_CPP_SVC_CL=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_util.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_async_result.h"\ + "..\..\..\..\include\axis2_callback.h"\ + "..\..\..\..\include\axis2_callback_recv.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_conf_init.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\include\axis2_listener_manager.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_client.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_options.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_client.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_receiver.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\neethi_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_generic_obj.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\context\svc_ctx.c +DEP_CPP_SVC_CT=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\description\svc_grp.c +DEP_CPP_SVC_G=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\svc_grp_builder.c +DEP_CPP_SVC_GR=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_addr.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_file_data.h"\ + "..\..\..\..\src\core\deployment\axis2_conf_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_dep_engine.h"\ + "..\..\..\..\src\core\deployment\axis2_deployment.h"\ + "..\..\..\..\src\core\deployment\axis2_desc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_repos_listener.h"\ + "..\..\..\..\src\core\deployment\axis2_svc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_svc_grp_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info_list.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\context\svc_grp_ctx.c +DEP_CPP_SVC_GRP=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\addr\svc_name.c +DEP_CPP_SVC_N=\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\receivers\svr_callback.c +DEP_CPP_SVR_C=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_engine.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\description\transport_in_desc.c +DEP_CPP_TRANS=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_receiver.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\description\transport_out_desc.c +DEP_CPP_TRANSP=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\transport_receiver.c +DEP_CPP_TRANSPO=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_receiver.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\ws_info.c +DEP_CPP_WS_IN=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\ws_info_list.c +DEP_CPP_WS_INF=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_core_dll_desc.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_policy_include.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\src\core\deployment\axis2_arch_file_data.h"\ + "..\..\..\..\src\core\deployment\axis2_conf_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_dep_engine.h"\ + "..\..\..\..\src\core\deployment\axis2_deployment.h"\ + "..\..\..\..\src\core\deployment\axis2_desc_builder.h"\ + "..\..\..\..\src\core\deployment\axis2_repos_listener.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info.h"\ + "..\..\..\..\src\core\deployment\axis2_ws_info_list.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_addr.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_addr_mod.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_any_content_type.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\axis2_arch_file_data.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\axis2_arch_reader.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_async_result.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_callback.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_callback_recv.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_client.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_conf.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\axis2_conf_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_conf_ctx.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_conf_init.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_const.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_core_utils.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_ctx.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_defines.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\axis2_dep_engine.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\axis2_deployment.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_desc.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\axis2_desc_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_description.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_disp.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\engine\axis2_disp_checker.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_endpoint_ref.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_engine.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_flow.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_flow_container.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_handler.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_handler_desc.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_chunked_stream.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_client.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_header.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_out_transport_info.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_request_line.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_response_writer.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_sender.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_server.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_simple_request.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_simple_response.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_status_line.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_svr_thread.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_transport.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_transport_sender.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_transport_utils.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_worker.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_listener_manager.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_module.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\axis2_module_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_module_desc.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_msg.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_msg_ctx.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_msg_info_headers.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_msg_recv.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_op.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_op_client.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_op_ctx.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_options.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_phase.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_phase_holder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_phase_meta.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_phase_resolver.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_phase_rule.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_phases_info.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_policy_include.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_raw_xml_in_out_msg_recv.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_relates_to.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\axis2_repos_listener.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_simple_http_svr_conn.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_stub.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_svc.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\axis2_svc_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_svc_client.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_svc_ctx.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_svc_grp.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\axis2_svc_grp_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_svc_grp_ctx.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_svc_name.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_svc_skeleton.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_svr_callback.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_thread_mutex.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_transport_in_desc.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_transport_out_desc.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_transport_receiver.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_transport_sender.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_util.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\axis2_ws_info.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\deployment\axis2_ws_info_list.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ides/vc6/axis2c/axis2_http_receiver/axis2_http_receiver.dsp b/ides/vc6/axis2c/axis2_http_receiver/axis2_http_receiver.dsp new file mode 100644 index 0000000..29a5f76 --- /dev/null +++ b/ides/vc6/axis2c/axis2_http_receiver/axis2_http_receiver.dsp @@ -0,0 +1,115 @@ +# Microsoft Developer Studio Project File - Name="axis2_http_receiver" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=axis2_http_receiver - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "axis2_http_receiver.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "axis2_http_receiver.mak" CFG="axis2_http_receiver - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "axis2_http_receiver - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "axis2_http_receiver - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "axis2_http_receiver - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_HTTP_RECEIVER_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_HTTP_RECEIVER_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "axis2_http_receiver - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_HTTP_RECEIVER_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\src\core\transport\tcp" /I "..\..\..\..\include" /I "..\..\..\..\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axutil.lib axis2_parser.lib axis2_engine.lib /nologo /dll /incremental:no /pdb:"../../../../build/deploy/lib/axis2_http_receiver.pdb" /debug /machine:I386 /out:"../../../../build/deploy/lib/axis2_http_receiver.dll" /pdbtype:sept /libpath:"../../../../build/deploy/lib" +# SUBTRACT LINK32 /pdb:none +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=copy .\debug\*.lib ..\..\..\..\build\deploy\lib +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "axis2_http_receiver - Win32 Release" +# Name "axis2_http_receiver - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\receiver\http_receiver.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\receiver\http_svr_thread.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ides/vc6/axis2c/axis2_http_sender/axis2_http_sender.dsp b/ides/vc6/axis2c/axis2_http_sender/axis2_http_sender.dsp new file mode 100644 index 0000000..ac83359 --- /dev/null +++ b/ides/vc6/axis2c/axis2_http_sender/axis2_http_sender.dsp @@ -0,0 +1,123 @@ +# Microsoft Developer Studio Project File - Name="axis2_http_sender" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=axis2_http_sender - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "axis2_http_sender.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "axis2_http_sender.mak" CFG="axis2_http_sender - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "axis2_http_sender - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "axis2_http_sender - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "axis2_http_sender - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_HTTP_SENDER_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_HTTP_SENDER_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "axis2_http_sender - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_HTTP_SENDER_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\src\core\transport\tcp" /I "..\..\..\..\include" /I "..\..\..\..\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axutil.lib axis2_parser.lib axis2_engine.lib axiom.lib /nologo /dll /incremental:no /pdb:"../../../../build/deploy/lib/axis2_http_sender.pdb" /debug /machine:I386 /out:"../../../../build/deploy/lib/axis2_http_sender.dll" /pdbtype:sept /libpath:"../../../../build/deploy/lib" +# SUBTRACT LINK32 /pdb:none +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=copy .\debug\*.lib .\..\..\..\..\build\deploy\lib +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "axis2_http_sender - Win32 Release" +# Name "axis2_http_sender - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\sender\http_client.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\sender\http_sender.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\sender\http_transport_sender.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\..\..\include\axis2_http_sender.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ides/vc6/axis2c/axis2_http_server/axis2_http_server.dsp b/ides/vc6/axis2c/axis2_http_server/axis2_http_server.dsp new file mode 100644 index 0000000..8fa45f0 --- /dev/null +++ b/ides/vc6/axis2c/axis2_http_server/axis2_http_server.dsp @@ -0,0 +1,188 @@ +# Microsoft Developer Studio Project File - Name="axis2_http_server" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=axis2_http_server - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "axis2_http_server.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "axis2_http_server.mak" CFG="axis2_http_server - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "axis2_http_server - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "axis2_http_server - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "axis2_http_server - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "axis2_http_server - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\src\core\transport\tcp" /I "..\..\..\..\include" /I "..\..\..\..\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /D "_CONSOLE" /FR /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axutil.lib axis2_engine.lib axis2_parser.lib axis2_http_receiver.lib /nologo /subsystem:console /incremental:no /pdb:"../../../../build/deploy/lib/axis2_http_server.pdb" /debug /machine:I386 /out:"../../../../build/deploy/bin/axis2_http_server.exe" /pdbtype:sept /libpath:"../../../../build/deploy/lib" +# SUBTRACT LINK32 /pdb:none +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=if not exist .\..\..\..\..\build\deploy\logs mkdir .\..\..\..\..\build\deploy\logs copy .\debug\axis2_http_server.exe .\..\..\..\..\build\deploy\lib +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "axis2_http_server - Win32 Release" +# Name "axis2_http_server - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\simple_axis2_server\http_server_main.c +DEP_CPP_HTTP_=\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_any_content_type.h"\ + "..\..\..\..\include\axis2_conf.h"\ + "..\..\..\..\include\axis2_conf_ctx.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_ctx.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_desc.h"\ + "..\..\..\..\include\axis2_description.h"\ + "..\..\..\..\include\axis2_endpoint_ref.h"\ + "..\..\..\..\include\axis2_flow.h"\ + "..\..\..\..\include\axis2_flow_container.h"\ + "..\..\..\..\include\axis2_handler.h"\ + "..\..\..\..\include\axis2_handler_desc.h"\ + "..\..\..\..\include\axis2_http_server.h"\ + "..\..\..\..\include\axis2_http_transport.h"\ + "..\..\..\..\include\axis2_module_desc.h"\ + "..\..\..\..\include\axis2_msg_ctx.h"\ + "..\..\..\..\include\axis2_msg_info_headers.h"\ + "..\..\..\..\include\axis2_msg_recv.h"\ + "..\..\..\..\include\axis2_op.h"\ + "..\..\..\..\include\axis2_op_ctx.h"\ + "..\..\..\..\include\axis2_phase.h"\ + "..\..\..\..\include\axis2_phase_holder.h"\ + "..\..\..\..\include\axis2_phase_meta.h"\ + "..\..\..\..\include\axis2_phase_resolver.h"\ + "..\..\..\..\include\axis2_phase_rule.h"\ + "..\..\..\..\include\axis2_phases_info.h"\ + "..\..\..\..\include\axis2_relates_to.h"\ + "..\..\..\..\include\axis2_svc.h"\ + "..\..\..\..\include\axis2_svc_ctx.h"\ + "..\..\..\..\include\axis2_svc_grp.h"\ + "..\..\..\..\include\axis2_svc_grp_ctx.h"\ + "..\..\..\..\include\axis2_svc_name.h"\ + "..\..\..\..\include\axis2_svc_skeleton.h"\ + "..\..\..\..\include\axis2_svr_callback.h"\ + "..\..\..\..\include\axis2_transport_in_desc.h"\ + "..\..\..\..\include\axis2_transport_out_desc.h"\ + "..\..\..\..\include\axis2_transport_receiver.h"\ + "..\..\..\..\include\axis2_transport_sender.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_version.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ides/vc6/axis2c/axis2_mod_addr/axis2_mod_addr.dsp b/ides/vc6/axis2c/axis2_mod_addr/axis2_mod_addr.dsp new file mode 100644 index 0000000..71b8ead --- /dev/null +++ b/ides/vc6/axis2c/axis2_mod_addr/axis2_mod_addr.dsp @@ -0,0 +1,119 @@ +# Microsoft Developer Studio Project File - Name="axis2_mod_addr" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=axis2_mod_addr - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "axis2_mod_addr.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "axis2_mod_addr.mak" CFG="axis2_mod_addr - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "axis2_mod_addr - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "axis2_mod_addr - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "axis2_mod_addr - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_MOD_ADDR_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_MOD_ADDR_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "axis2_mod_addr - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_MOD_ADDR_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\axis2c\src\core\transport\tcp" /I "..\..\..\..\axis2c\include" /I "..\..\..\..\axis2c\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axutil.lib axiom.lib axis2_parser.lib axis2_engine.lib /nologo /dll /incremental:no /pdb:"../../../../build/deploy/lib/axis2_mod_addr.pdb" /debug /machine:I386 /out:"../../../../build/deploy/modules/addressing/axis2_mod_addr.dll" /pdbtype:sept /libpath:"../../../../build/deploy/lib" +# SUBTRACT LINK32 /pdb:none +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=copy .\..\..\..\..\src\modules\mod_addr\module.xml .\..\..\..\..\build\deploy\modules\addressing +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "axis2_mod_addr - Win32 Release" +# Name "axis2_mod_addr - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\src\modules\mod_addr\addr_in_handler.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\modules\mod_addr\addr_out_handler.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\modules\mod_addr\mod_addr.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ides/vc6/axis2c/axis2_mod_log/axis2_mod_log.dsp b/ides/vc6/axis2c/axis2_mod_log/axis2_mod_log.dsp new file mode 100644 index 0000000..2da09da --- /dev/null +++ b/ides/vc6/axis2c/axis2_mod_log/axis2_mod_log.dsp @@ -0,0 +1,123 @@ +# Microsoft Developer Studio Project File - Name="axis2_mod_log" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=axis2_mod_log - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "axis2_mod_log.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "axis2_mod_log.mak" CFG="axis2_mod_log - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "axis2_mod_log - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "axis2_mod_log - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "axis2_mod_log - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_MOD_LOG_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_MOD_LOG_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "axis2_mod_log - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_MOD_LOG_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\src\core\transport\tcp" /I "..\..\..\..\include" /I "..\..\..\..\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axis2_engine.lib axutil.lib axiom.lib /nologo /dll /incremental:no /pdb:"../../../../build/deploy/lib/axis2_mod_log.pdb" /debug /machine:I386 /out:"../../../../build/deploy/modules/logging/axis2_mod_log.dll" /pdbtype:sept /libpath:"../../../../build/deploy/lib" +# SUBTRACT LINK32 /pdb:none +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=copy .\..\..\..\..\modules\mod_log\module.xml .\..\..\..\..\build\deploy\modules\logging +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "axis2_mod_log - Win32 Release" +# Name "axis2_mod_log - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\src\modules\mod_log\log_in_handler.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\modules\mod_log\log_out_handler.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\modules\mod_log\mod_log.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\..\..\src\modules\mod_log\mod_log.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ides/vc6/axis2c/axis2_parser/axis2_parser.dsp b/ides/vc6/axis2c/axis2_parser/axis2_parser.dsp new file mode 100644 index 0000000..b583db0 --- /dev/null +++ b/ides/vc6/axis2c/axis2_parser/axis2_parser.dsp @@ -0,0 +1,180 @@ +# Microsoft Developer Studio Project File - Name="axis2_parser" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=axis2_parser - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "axis2_parser.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "axis2_parser.mak" CFG="axis2_parser - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "axis2_parser - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "axis2_parser - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "axis2_parser - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_PARSER_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_PARSER_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "axis2_parser - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_PARSER_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\src\core\transport\tcp" /I "..\..\..\..\include" /I "..\..\..\..\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axutil.lib libxml2.lib /nologo /dll /incremental:no /pdb:"../../../../build/deploy/lib/axis2_parser.pdb" /debug /machine:I386 /out:"../../../../build/deploy/lib/axis2_parser.dll" /pdbtype:sept /libpath:"../../../../build/deploy/lib" /libpath:"..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\lib" +# SUBTRACT LINK32 /pdb:none +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=copy .\debug\*.lib .\..\..\..\..\build\deploy\lib +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "axis2_parser - Win32 Release" +# Name "axis2_parser - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\parser\libxml2\libxml2_reader_wrapper.c +DEP_CPP_LIBXM=\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\parser\libxml2\libxml2_writer_wrapper.c +DEP_CPP_LIBXML=\ + "..\..\..\..\util\include\axutil_stack.h"\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\parser\xml_reader.c +DEP_CPP_XML_R=\ + {$(INCLUDE)}"axiom_xml_reader.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\axiom\src\parser\xml_writer.c +DEP_CPP_XML_W=\ + {$(INCLUDE)}"axiom_xml_writer.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ides/vc6/axis2c/axis2_tcp_receiver/axis2_tcp_receiver.dsp b/ides/vc6/axis2c/axis2_tcp_receiver/axis2_tcp_receiver.dsp new file mode 100644 index 0000000..933718c --- /dev/null +++ b/ides/vc6/axis2c/axis2_tcp_receiver/axis2_tcp_receiver.dsp @@ -0,0 +1,119 @@ +# Microsoft Developer Studio Project File - Name="axis2_tcp_receiver" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=axis2_tcp_receiver - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "axis2_tcp_receiver.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "axis2_tcp_receiver.mak" CFG="axis2_tcp_receiver - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "axis2_tcp_receiver - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "axis2_tcp_receiver - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "axis2_tcp_receiver - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_TCP_RECEIVER_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_TCP_RECEIVER_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "axis2_tcp_receiver - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_TCP_RECEIVER_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\src\core\transport\tcp" /I "..\..\..\..\include" /I "..\..\..\..\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axutil.lib axis2_engine.lib axiom.lib axis2_parser.lib /nologo /dll /incremental:no /pdb:"../../../../build/deploy/lib/axis2_tcp_receiver.pdb" /debug /machine:I386 /out:"../../../../build/deploy/lib/axis2_tcp_receiver.dll" /pdbtype:sept /libpath:"../../../../build/deploy/lib" +# SUBTRACT LINK32 /pdb:none +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=copy .\debug\*.lib ..\..\..\..\build\deploy\lib +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "axis2_tcp_receiver - Win32 Release" +# Name "axis2_tcp_receiver - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\tcp\receiver\simple_tcp_svr_conn.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\tcp\receiver\tcp_svr_thread.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\tcp\receiver\tcp_worker.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ides/vc6/axis2c/axis2_tcp_sender/axis2_tcp_sender.dsp b/ides/vc6/axis2c/axis2_tcp_sender/axis2_tcp_sender.dsp new file mode 100644 index 0000000..b19e142 --- /dev/null +++ b/ides/vc6/axis2c/axis2_tcp_sender/axis2_tcp_sender.dsp @@ -0,0 +1,131 @@ +# Microsoft Developer Studio Project File - Name="axis2_tcp_sender" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=axis2_tcp_sender - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "axis2_tcp_sender.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "axis2_tcp_sender.mak" CFG="axis2_tcp_sender - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "axis2_tcp_sender - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "axis2_tcp_sender - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "axis2_tcp_sender - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_TCP_SENDER_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_TCP_SENDER_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "axis2_tcp_sender - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXIS2_TCP_SENDER_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\src\core\transport\tcp" /I "..\..\..\..\include" /I "..\..\..\..\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axutil.lib axis2_engine.lib axiom.lib axis2_parser.lib /nologo /dll /incremental:no /pdb:"../../../../build/deploy/lib/axis2_tcp_sender.pdb" /debug /machine:I386 /out:"../../../../build/deploy/lib/axis2_tcp_sender.dll" /pdbtype:sept /libpath:"../../../../build/deploy/lib" +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "axis2_tcp_sender - Win32 Release" +# Name "axis2_tcp_sender - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\tcp\sender\tcp_transport_sender.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\tcp\axis2_simple_tcp_svr_conn.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\tcp\axis2_tcp_server.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\tcp\axis2_tcp_svr_thread.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\tcp\axis2_tcp_transport.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\tcp\axis2_tcp_transport_sender.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\tcp\axis2_tcp_worker.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ides/vc6/axis2c/axis2_tcp_server/axis2_tcp_server.dsp b/ides/vc6/axis2c/axis2_tcp_server/axis2_tcp_server.dsp new file mode 100644 index 0000000..bc9003a --- /dev/null +++ b/ides/vc6/axis2c/axis2_tcp_server/axis2_tcp_server.dsp @@ -0,0 +1,106 @@ +# Microsoft Developer Studio Project File - Name="axis2_tcp_server" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=axis2_tcp_server - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "axis2_tcp_server.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "axis2_tcp_server.mak" CFG="axis2_tcp_server - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "axis2_tcp_server - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "axis2_tcp_server - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "axis2_tcp_server - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "axis2_tcp_server - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\src\core\transport\tcp" /I "..\..\..\..\include" /I "..\..\..\..\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /D "_CONSOLE" /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axutil.lib axis2_engine.lib axiom.lib axis2_tcp_receiver.lib axis2_parser.lib /nologo /subsystem:console /incremental:no /pdb:"../../../../build/deploy/lib/axis2_tcp_server.pdb" /debug /machine:I386 /out:"../../../../build/deploy/bin/axis2_tcp_server.exe" /pdbtype:sept /libpath:"../../../../build/deploy/lib" +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "axis2_tcp_server - Win32 Release" +# Name "axis2_tcp_server - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\tcp\server\simple_tcp_server\tcp_receiver.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\tcp\server\simple_tcp_server\tcp_server_main.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ides/vc6/axis2c/axis2c.dsw b/ides/vc6/axis2c/axis2c.dsw new file mode 100644 index 0000000..9d75834 --- /dev/null +++ b/ides/vc6/axis2c/axis2c.dsw @@ -0,0 +1,218 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "axiom"=.\axiom\axiom.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "axis2_engine"=.\axis2_engine\axis2_engine.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name neethi + End Project Dependency +}}} + +############################################################################### + +Project: "axis2_http_receiver"=.\axis2_http_receiver\axis2_http_receiver.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "axis2_http_sender"=.\axis2_http_sender\axis2_http_sender.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "axis2_http_server"=.\axis2_http_server\axis2_http_server.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name axis2_http_receiver + End Project Dependency +}}} + +############################################################################### + +Project: "axis2_mod_addr"=.\axis2_mod_addr\axis2_mod_addr.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "axis2_mod_log"=.\axis2_mod_log\axis2_mod_log.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "axis2_parser"=.\axis2_parser\axis2_parser.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name axutil + End Project Dependency +}}} + +############################################################################### + +Project: "axis2_tcp_receiver"=.\axis2_tcp_receiver\axis2_tcp_receiver.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "axis2_tcp_sender"=.\axis2_tcp_sender\axis2_tcp_sender.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "axis2_tcp_server"=.\axis2_tcp_server\axis2_tcp_server.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name axis2_tcp_receiver + End Project Dependency +}}} + +############################################################################### + +Project: "axutil"=.\axutil\axutil.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "mod_axis2"=.\mod_axis2\mod_axis2.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "mod_axis2_IIS"=.\mod_axis2_IIS\mod_axis2_IIS.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name axis2_http_sender + End Project Dependency +}}} + +############################################################################### + +Project: "neethi"=.\neethi\neethi.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name axis2_parser + End Project Dependency + Begin Project Dependency + Project_Dep_Name axiom + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/ides/vc6/axis2c/axutil/axutil.dsp b/ides/vc6/axis2c/axutil/axutil.dsp new file mode 100644 index 0000000..a8c00e6 --- /dev/null +++ b/ides/vc6/axis2c/axutil/axutil.dsp @@ -0,0 +1,1287 @@ +# Microsoft Developer Studio Project File - Name="axutil" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=axutil - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "axutil.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "axutil.mak" CFG="axutil - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "axutil - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "axutil - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "axutil - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXUTIL_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXUTIL_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "axutil - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXUTIL_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "c:\progra~1\micros~4\include" /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\src\core\transport\tcp" /I "..\..\..\..\include" /I "..\..\..\..\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Rpcrt4.lib Ws2_32.lib zdll.lib /nologo /dll /incremental:no /pdb:"../../../../build/deploy/lib/axutil.pdb" /debug /machine:I386 /out:"../../../../build/deploy/lib/axutil.dll" /pdbtype:sept /libpath:"../../../../build/deploy/lib" /libpath:"c:/progra~1/micros~4/lib" /libpath:"..\..\..\..\axis2c_deps\zlib-1.2.3.win32\lib" +# SUBTRACT LINK32 /pdb:none +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=copy .\debug\*.lib .\..\..\..\..\build\deploy\lib +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "axutil - Win32 Release" +# Name "axutil - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\util\src\allocator.c +DEP_CPP_ALLOC=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\minizip\archive_extract.c +DEP_CPP_ARCHI=\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\src\minizip\axis2_crypt.h"\ + "..\..\..\..\util\src\minizip\axis2_ioapi.h"\ + "..\..\..\..\util\src\minizip\axis2_iowin32.h"\ + "..\..\..\..\util\src\minizip\axis2_unzip.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +NODEP_CPP_ARCHI=\ + "..\..\..\..\util\src\minizip\zlib.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\array_list.c +DEP_CPP_ARRAY=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\platforms\windows\axutil_windows.c +DEP_CPP_AXUTI=\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\base64.c +DEP_CPP_BASE6=\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\base64_binary.c +DEP_CPP_BASE64=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\class_loader.c +DEP_CPP_CLASS=\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_param.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\minizip\crypt.c +DEP_CPP_CRYPT=\ + "..\..\..\..\util\src\minizip\axis2_crypt.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\date_time.c +DEP_CPP_DATE_=\ + "..\..\..\..\util\include\axutil_date_time_util.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\date_time_util.c +DEP_CPP_DATE_T=\ + "..\..\..\..\util\include\axutil_date_time_util.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\platforms\windows\date_time_util_windows.c +DEP_CPP_DATE_TI=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\digest_calc.c +DEP_CPP_DIGES=\ + "..\..\..\..\util\include\axutil_digest_calc.h"\ + "..\..\..\..\util\include\axutil_md5.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\dir_handler.c +DEP_CPP_DIR_H=\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\src\minizip\axis2_archive_extract.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\platforms\windows\dir_windows.c +DEP_CPP_DIR_W=\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\dll_desc.c +DEP_CPP_DLL_D=\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_param.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\duration.c +DEP_CPP_DURAT=\ + "..\..\..\..\util\include\axutil_duration.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\env.c +DEP_CPP_ENV_C=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_error_default.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_log_default.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\error.c +DEP_CPP_ERROR=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_error_default.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\file.c +DEP_CPP_FILE_=\ + "..\..\..\..\util\include\axutil_file.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\file_handler.c +DEP_CPP_FILE_H=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_file_handler.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\generic_obj.c +DEP_CPP_GENER=\ + "..\..\..\..\util\include\axutil_generic_obj.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\platforms\windows\getopt_windows.c +DEP_CPP_GETOP=\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\hash.c +DEP_CPP_HASH_=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\http_chunked_stream.c +DEP_CPP_HTTP_=\ + "..\..\..\..\util\include\axutil_http_chunked_stream.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_stream.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\minizip\ioapi.c +DEP_CPP_IOAPI=\ + "..\..\..\..\util\src\minizip\axis2_ioapi.h"\ + +NODEP_CPP_IOAPI=\ + "..\..\..\..\util\src\minizip\zlib.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\minizip\iowin32.c +DEP_CPP_IOWIN=\ + "..\..\..\..\util\src\minizip\axis2_ioapi.h"\ + "..\..\..\..\util\src\minizip\axis2_iowin32.h"\ + +NODEP_CPP_IOWIN=\ + "..\..\..\..\util\src\minizip\zlib.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\linked_list.c +DEP_CPP_LINKE=\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\log.c +DEP_CPP_LOG_C=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_file_handler.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_log_default.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\md5.c +DEP_CPP_MD5_C=\ + "..\..\..\..\util\include\axutil_md5.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_error_default.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\network_handler.c +DEP_CPP_NETWO=\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\param.c +DEP_CPP_PARAM=\ + "..\..\..\..\util\include\axutil_generic_obj.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_param.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\param_container.c +DEP_CPP_PARAM_=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_param.h"\ + {$(INCLUDE)}"axutil_param_container.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\properties.c +DEP_CPP_PROPE=\ + "..\..\..\..\util\include\axutil_properties.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_hash.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\property.c +DEP_CPP_PROPER=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_property.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\qname.c +DEP_CPP_QNAME=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_qname.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\rand.c +DEP_CPP_RAND_=\ + "..\..\..\..\util\include\axutil_rand.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\stack.c +DEP_CPP_STACK=\ + "..\..\..\..\util\include\axutil_stack.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\stream.c +DEP_CPP_STREA=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_stream.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\string.c +DEP_CPP_STRIN=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\string_util.c +DEP_CPP_STRING=\ + "..\..\..\..\util\include\axutil_string_util.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_array_list.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\platforms\windows\thread_mutex_windows.c +DEP_CPP_THREA=\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_mutex_windows.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\thread_pool.c +DEP_CPP_THREAD=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_error_default.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\platforms\windows\thread_windows.c +DEP_CPP_THREAD_=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\types.c +DEP_CPP_TYPES=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_types.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\minizip\unzip.c +DEP_CPP_UNZIP=\ + "..\..\..\..\util\src\minizip\axis2_crypt.h"\ + "..\..\..\..\util\src\minizip\axis2_ioapi.h"\ + "..\..\..\..\util\src\minizip\axis2_unzip.h"\ + +NODEP_CPP_UNZIP=\ + "..\..\..\..\util\src\minizip\zlib.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\uri.c +DEP_CPP_URI_C=\ + "..\..\..\..\util\include\axutil_uri.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\url.c +DEP_CPP_URL_C=\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_file_handler.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_types.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\utils.c +DEP_CPP_UTILS=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_string.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\uuid_gen.c +DEP_CPP_UUID_=\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_base64.h"\ + {$(INCLUDE)}"axutil_base64_binary.h"\ + {$(INCLUDE)}"axutil_date_time.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\axutil_platform_auto_sense.h"\ + {$(INCLUDE)}"platforms\windows\axutil_date_time_util_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_dir_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_getopt_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_thread_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + {$(INCLUDE)}"platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\platforms\windows\uuid_gen_windows.c +DEP_CPP_UUID_G=\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"platforms\windows\axutil_uuid_gen_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\version.c +DEP_CPP_VERSI=\ + {$(INCLUDE)}"axutil_allocator.h"\ + {$(INCLUDE)}"axutil_env.h"\ + {$(INCLUDE)}"axutil_error.h"\ + {$(INCLUDE)}"axutil_log.h"\ + {$(INCLUDE)}"axutil_thread.h"\ + {$(INCLUDE)}"axutil_thread_pool.h"\ + {$(INCLUDE)}"axutil_utils_defines.h"\ + {$(INCLUDE)}"axutil_version.h"\ + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\..\..\util\src\minizip\axis2_archive_extract.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\minizip\axis2_crypt.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\minizip\axis2_ioapi.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\minizip\axis2_iowin32.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\src\minizip\axis2_unzip.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_allocator.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_array_list.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_base64.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_base64_binary.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_class_loader.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_config.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_date_time.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_date_time_util.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_dir_handler.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_dll_desc.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_duration.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_env.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_error.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_error_default.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_file.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_file_handler.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_generic_obj.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_hash.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_linked_list.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_log.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_log_default.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_network_handler.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_param.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_param_container.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_properties.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_property.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_qname.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_rand.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_stack.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_stomp.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_stomp_frame.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_stream.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_string.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_string_util.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_thread.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\platforms\windows\axutil_thread_mutex_windows.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_thread_pool.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_types.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_uri.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_url.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_utils.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_utils_defines.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_uuid_gen.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\axutil_version.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\util\include\platforms\windows\axutil_windows.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ides/vc6/axis2c/mod_axis2/mod_axis2.dsp b/ides/vc6/axis2c/mod_axis2/mod_axis2.dsp new file mode 100644 index 0000000..c32ef42 --- /dev/null +++ b/ides/vc6/axis2c/mod_axis2/mod_axis2.dsp @@ -0,0 +1,131 @@ +# Microsoft Developer Studio Project File - Name="mod_axis2" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=mod_axis2 - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mod_axis2.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mod_axis2.mak" CFG="mod_axis2 - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mod_axis2 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "mod_axis2 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mod_axis2 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MOD_AXIS2_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MOD_AXIS2_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "mod_axis2 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MOD_AXIS2_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\src\core\transport\tcp" /I "..\..\..\..\include" /I "..\..\..\..\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libapr-1.lib apr-1.lib libhttpd.lib axutil.lib axis2_engine.lib axiom.lib axis2_parser.lib /nologo /dll /incremental:no /pdb:"../../../../build/deploy/lib/mod_axis2.pdb" /debug /machine:I386 /out:"../../../../build/deploy/lib/mod_axis2.dll" /pdbtype:sept /libpath:"../../../../build/deploy/lib" +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "mod_axis2 - Win32 Release" +# Name "mod_axis2 - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\apache2\apache2_out_transport_info.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\apache2\apache2_stream.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\apache2\apache2_worker.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\apache2\mod_axis2.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\apache2\apache2_stream.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\apache2\axis2_apache2_out_transport_info.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\apache2\axis2_apache2_worker.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ides/vc6/axis2c/mod_axis2_IIS/mod_axis2_IIS.dsp b/ides/vc6/axis2c/mod_axis2_IIS/mod_axis2_IIS.dsp new file mode 100644 index 0000000..e0a2881 --- /dev/null +++ b/ides/vc6/axis2c/mod_axis2_IIS/mod_axis2_IIS.dsp @@ -0,0 +1,147 @@ +# Microsoft Developer Studio Project File - Name="mod_axis2_IIS" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=mod_axis2_IIS - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mod_axis2_IIS.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mod_axis2_IIS.mak" CFG="mod_axis2_IIS - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mod_axis2_IIS - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "mod_axis2_IIS - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mod_axis2_IIS - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MOD_AXIS2_IIS_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MOD_AXIS2_IIS_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "mod_axis2_IIS - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MOD_AXIS2_IIS_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\src\core\transport\tcp" /I "..\..\..\..\include" /I "..\..\..\..\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axiom.lib axis2_parser.lib axutil.lib axis2_engine.lib axis2_http_receiver.lib axis2_http_sender.lib /nologo /dll /incremental:no /pdb:"../../../../build/deploy/lib/mod_axis2_IIS.pdb" /debug /machine:I386 /out:"../../../../build/deploy/lib/mod_axis2_IIS.dll" /pdbtype:sept /libpath:"../../../../build/deploy/lib" +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "mod_axis2_IIS - Win32 Release" +# Name "mod_axis2_IIS - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\IIS\axis2_iis_out_transport_info.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\IIS\axis2_iis_stream.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\IIS\axis2_iis_worker.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\IIS\iis_iaspi_plugin_51\axis2_isapi_51.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\IIS\axis2_isapi_plugin.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\IIS\axis2_iis_constants.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\IIS\axis2_iis_out_transport_info.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\IIS\axis2_iis_stream.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\IIS\axis2_iis_worker.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\IIS\axis2_isapi_plugin.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=..\..\..\..\src\core\transport\http\server\IIS\mod_axis2.def +# End Source File +# End Group +# End Target +# End Project diff --git a/ides/vc6/axis2c/neethi/neethi.dsp b/ides/vc6/axis2c/neethi/neethi.dsp new file mode 100644 index 0000000..2016f48 --- /dev/null +++ b/ides/vc6/axis2c/neethi/neethi.dsp @@ -0,0 +1,7057 @@ +# Microsoft Developer Studio Project File - Name="neethi" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=neethi - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "neethi.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "neethi.mak" CFG="neethi - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "neethi - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "neethi - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "neethi - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NEETHI_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NEETHI_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "NDEBUG" +# ADD RSC /l 0xc0c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "neethi - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NEETHI_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /w /W0 /Z7 /Od /I "..\..\..\..\util\include" /I "..\..\..\..\util\src\\" /I "..\..\..\..\util\src\minizip\\" /I "..\..\..\..\axiom\include" /I "..\..\..\..\axiom\src\om" /I "..\..\..\..\axiom\src\soap" /I "..\..\..\..\util\include\platforms" /I "..\..\..\..\neethi\include" /I "..\..\..\..\neethi\src" /I "..\..\..\..\neethi\src\secpolicy\builder" /I "..\..\..\..\neethi\src\secpolicy\model" /I "..\..\..\..\src\core\clientapi" /I "..\..\..\..\src\core\deployment" /I "..\..\..\..\src\core\description" /I "..\..\..\..\src\core\transport" /I "..\..\..\..\src\core\transport\tcp" /I "..\..\..\..\include" /I "..\..\..\..\src\core\engine" /I "..\..\..\..\src\core\context" /I "..\..\..\..\src\core\util" /I "..\..\..\..\src\core\transport\http\server\apache2" /I "..\..\..\..\axiom\src\attachments" /I "..\..\..\..\tools\tcpmon\include" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_DEBUG" /D "AXIS2_DECLARE_EXPORT" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_WARNINGS" /D "AXIS2_SVR_MULTI_THREADED" /I..\..\..\..\axis2c_deps\libxml2-2.6.27.win32\include /I..\..\..\..\axis2c_deps\iconv-1.9.2.win32\include /I..\..\..\..\axis2c_deps\zlib-1.2.3.win32\include /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0xc0c /d "_DEBUG" +# ADD RSC /l 0xc0c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axiom.lib axutil.lib /nologo /dll /incremental:no /pdb:"../../../../build/deploy/lib/neethi.pdb" /debug /machine:I386 /out:"../../../../build/deploy/lib/neethi.dll" /pdbtype:sept /libpath:"../../../../build/deploy/lib" +# SUBTRACT LINK32 /pdb:none +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=copy .\debug\*.lib .\..\..\..\..\build\deploy\lib +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "neethi - Win32 Release" +# Name "neethi - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\algorithmsuite.c +DEP_CPP_ALGOR=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\algorithmsuite_builder.c +DEP_CPP_ALGORI=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite_builder.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\all.c +DEP_CPP_ALL_C=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\assertion.c +DEP_CPP_ASSER=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_asymmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_rampart_config.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_symmetric_asymmetric_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_symmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_transport_binding.h"\ + "..\..\..\..\neethi\include\rp_trust10.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_wss10.h"\ + "..\..\..\..\neethi\include\rp_wss11.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\assertion_builder.c +DEP_CPP_ASSERT=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_assertion_builder.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite_builder.h"\ + "..\..\..\..\neethi\include\rp_asymmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_asymmetric_binding_builder.h"\ + "..\..\..\..\neethi\include\rp_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_bootstrap_policy_builder.h"\ + "..\..\..\..\neethi\include\rp_builders.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_encryption_token_builder.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_https_token_builder.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_initiator_token_builder.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_issued_token_builder.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_layout_builder.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_protection_token_builder.h"\ + "..\..\..\..\neethi\include\rp_qname_matcher.h"\ + "..\..\..\..\neethi\include\rp_rampart_config.h"\ + "..\..\..\..\neethi\include\rp_rampart_config_builder.h"\ + "..\..\..\..\neethi\include\rp_recipient_token_builder.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_saml_token_builder.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token_builder.h"\ + "..\..\..\..\neethi\include\rp_signature_token_builder.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts_builder.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens_builder.h"\ + "..\..\..\..\neethi\include\rp_symmetric_asymmetric_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_symmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_symmetric_binding_builder.h"\ + "..\..\..\..\neethi\include\rp_token_identifier.h"\ + "..\..\..\..\neethi\include\rp_transport_binding.h"\ + "..\..\..\..\neethi\include\rp_transport_binding_builder.h"\ + "..\..\..\..\neethi\include\rp_transport_token_builder.h"\ + "..\..\..\..\neethi\include\rp_trust10.h"\ + "..\..\..\..\neethi\include\rp_trust10_builder.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_username_token_builder.h"\ + "..\..\..\..\neethi\include\rp_wss10.h"\ + "..\..\..\..\neethi\include\rp_wss10_builder.h"\ + "..\..\..\..\neethi\include\rp_wss11.h"\ + "..\..\..\..\neethi\include\rp_wss11_builder.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token_builder.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\asymmetric_binding.c +DEP_CPP_ASYMM=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_asymmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_symmetric_asymmetric_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\asymmetric_binding_builder.c +DEP_CPP_ASYMME=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_asymmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_asymmetric_binding_builder.h"\ + "..\..\..\..\neethi\include\rp_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_symmetric_asymmetric_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\binding_commons.c +DEP_CPP_BINDI=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\bootstrap_policy_builder.c +DEP_CPP_BOOTS=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_bootstrap_policy_builder.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\element.c +DEP_CPP_ELEME=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_element.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\encryption_token_builder.c +DEP_CPP_ENCRY=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_encryption_token_builder.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\engine.c +DEP_CPP_ENGIN=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_assertion_builder.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite_builder.h"\ + "..\..\..\..\neethi\include\rp_asymmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_asymmetric_binding_builder.h"\ + "..\..\..\..\neethi\include\rp_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_bootstrap_policy_builder.h"\ + "..\..\..\..\neethi\include\rp_builders.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_encryption_token_builder.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_https_token_builder.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_initiator_token_builder.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_issued_token_builder.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_layout_builder.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_protection_token_builder.h"\ + "..\..\..\..\neethi\include\rp_qname_matcher.h"\ + "..\..\..\..\neethi\include\rp_rampart_config.h"\ + "..\..\..\..\neethi\include\rp_rampart_config_builder.h"\ + "..\..\..\..\neethi\include\rp_recipient_token_builder.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_saml_token_builder.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token_builder.h"\ + "..\..\..\..\neethi\include\rp_signature_token_builder.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts_builder.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens_builder.h"\ + "..\..\..\..\neethi\include\rp_symmetric_asymmetric_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_symmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_symmetric_binding_builder.h"\ + "..\..\..\..\neethi\include\rp_token_identifier.h"\ + "..\..\..\..\neethi\include\rp_transport_binding.h"\ + "..\..\..\..\neethi\include\rp_transport_binding_builder.h"\ + "..\..\..\..\neethi\include\rp_transport_token_builder.h"\ + "..\..\..\..\neethi\include\rp_trust10.h"\ + "..\..\..\..\neethi\include\rp_trust10_builder.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_username_token_builder.h"\ + "..\..\..\..\neethi\include\rp_wss10.h"\ + "..\..\..\..\neethi\include\rp_wss10_builder.h"\ + "..\..\..\..\neethi\include\rp_wss11.h"\ + "..\..\..\..\neethi\include\rp_wss11_builder.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token_builder.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\exactlyone.c +DEP_CPP_EXACT=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\header.c +DEP_CPP_HEADE=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\https_token.c +DEP_CPP_HTTPS=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\https_token_builder.c +DEP_CPP_HTTPS_=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_https_token_builder.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\initiator_token_builder.c +DEP_CPP_INITI=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_initiator_token_builder.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\issued_token.c +DEP_CPP_ISSUE=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\issued_token_builder.c +DEP_CPP_ISSUED=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_issued_token_builder.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\layout.c +DEP_CPP_LAYOU=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\layout_builder.c +DEP_CPP_LAYOUT=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_layout_builder.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\operator.c +DEP_CPP_OPERA=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\policy.c +DEP_CPP_POLIC=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\property.c +DEP_CPP_PROPE=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_asymmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_symmetric_asymmetric_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_symmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_transport_binding.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_wss10.h"\ + "..\..\..\..\neethi\include\rp_wss11.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\protection_token_builder.c +DEP_CPP_PROTE=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_protection_token_builder.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\qname_matcher.c +DEP_CPP_QNAME=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_qname_matcher.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\rampart_config.c +DEP_CPP_RAMPA=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_rampart_config.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\rampart_config_builder.c +DEP_CPP_RAMPAR=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_qname_matcher.h"\ + "..\..\..\..\neethi\include\rp_rampart_config.h"\ + "..\..\..\..\neethi\include\rp_rampart_config_builder.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\recipient_token_builder.c +DEP_CPP_RECIP=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_recipient_token_builder.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\reference.c +DEP_CPP_REFER=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\registry.c +DEP_CPP_REGIS=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\saml_token.c +DEP_CPP_SAML_=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\saml_token_builder.c +DEP_CPP_SAML_T=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_saml_token_builder.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\secpolicy.c +DEP_CPP_SECPO=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_asymmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_element.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_rampart_config.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_secpolicy.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_items.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_symmetric_asymmetric_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_symmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_transport_binding.h"\ + "..\..\..\..\neethi\include\rp_trust10.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_wss10.h"\ + "..\..\..\..\neethi\include\rp_wss11.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\secpolicy_builder.c +DEP_CPP_SECPOL=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_asymmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_element.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_rampart_config.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_secpolicy.h"\ + "..\..\..\..\neethi\include\rp_secpolicy_builder.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_items.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_symmetric_asymmetric_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_symmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_transport_binding.h"\ + "..\..\..\..\neethi\include\rp_trust10.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_wss10.h"\ + "..\..\..\..\neethi\include\rp_wss11.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\security_context_token.c +DEP_CPP_SECUR=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\security_context_token_builder.c +DEP_CPP_SECURI=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_qname_matcher.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token_builder.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\signature_token_builder.c +DEP_CPP_SIGNA=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signature_token_builder.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\signed_encrypted_elements.c +DEP_CPP_SIGNE=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\signed_encrypted_items.c +DEP_CPP_SIGNED=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_element.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_items.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\signed_encrypted_parts.c +DEP_CPP_SIGNED_=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\signed_encrypted_parts_builder.c +DEP_CPP_SIGNED_E=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_qname_matcher.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts_builder.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\supporting_tokens.c +DEP_CPP_SUPPO=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\supporting_tokens_builder.c +DEP_CPP_SUPPOR=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens_builder.h"\ + "..\..\..\..\neethi\include\rp_token_identifier.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\symmetric_asymmetric_binding_commons.c +DEP_CPP_SYMME=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_symmetric_asymmetric_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\symmetric_binding.c +DEP_CPP_SYMMET=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_symmetric_asymmetric_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_symmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\symmetric_binding_builder.c +DEP_CPP_SYMMETR=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_symmetric_asymmetric_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_symmetric_binding.h"\ + "..\..\..\..\neethi\include\rp_symmetric_binding_builder.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\token_identifier.c +DEP_CPP_TOKEN=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_token_identifier.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\transport_binding.c +DEP_CPP_TRANS=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_transport_binding.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\transport_binding_builder.c +DEP_CPP_TRANSP=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_algorithmsuite.h"\ + "..\..\..\..\neethi\include\rp_binding_commons.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_header.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_layout.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_elements.h"\ + "..\..\..\..\neethi\include\rp_signed_encrypted_parts.h"\ + "..\..\..\..\neethi\include\rp_supporting_tokens.h"\ + "..\..\..\..\neethi\include\rp_transport_binding.h"\ + "..\..\..\..\neethi\include\rp_transport_binding_builder.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\transport_token_builder.c +DEP_CPP_TRANSPO=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_transport_token_builder.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\trust10.c +DEP_CPP_TRUST=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_trust10.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\trust10_builder.c +DEP_CPP_TRUST1=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_trust10.h"\ + "..\..\..\..\neethi\include\rp_trust10_builder.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\username_token_builder.c +DEP_CPP_USERN=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_username_token_builder.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\ut.c +DEP_CPP_UT_C6c=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\util.c +DEP_CPP_UTIL_=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\neethi_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\wss10.c +DEP_CPP_WSS10=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_wss10.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\wss10_builder.c +DEP_CPP_WSS10_=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_wss10.h"\ + "..\..\..\..\neethi\include\rp_wss10_builder.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\wss11.c +DEP_CPP_WSS11=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_wss11.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\wss11_builder.c +DEP_CPP_WSS11_=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_wss11.h"\ + "..\..\..\..\neethi\include\rp_wss11_builder.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\model\x509_token.c +DEP_CPP_X509_=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\src\secpolicy\builder\x509_token_builder.c +DEP_CPP_X509_T=\ + "..\..\..\..\axiom\include\axiom.h"\ + "..\..\..\..\axiom\include\axiom_attribute.h"\ + "..\..\..\..\axiom\include\axiom_child_element_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_qname_iterator.h"\ + "..\..\..\..\axiom\include\axiom_children_with_specific_attribute_iterator.h"\ + "..\..\..\..\axiom\include\axiom_comment.h"\ + "..\..\..\..\axiom\include\axiom_data_handler.h"\ + "..\..\..\..\axiom\include\axiom_data_source.h"\ + "..\..\..\..\axiom\include\axiom_doctype.h"\ + "..\..\..\..\axiom\include\axiom_document.h"\ + "..\..\..\..\axiom\include\axiom_element.h"\ + "..\..\..\..\axiom\include\axiom_namespace.h"\ + "..\..\..\..\axiom\include\axiom_navigator.h"\ + "..\..\..\..\axiom\include\axiom_node.h"\ + "..\..\..\..\axiom\include\axiom_output.h"\ + "..\..\..\..\axiom\include\axiom_processing_instruction.h"\ + "..\..\..\..\axiom\include\axiom_soap.h"\ + "..\..\..\..\axiom\include\axiom_soap_body.h"\ + "..\..\..\..\axiom\include\axiom_soap_builder.h"\ + "..\..\..\..\axiom\include\axiom_soap_const.h"\ + "..\..\..\..\axiom\include\axiom_soap_envelope.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_detail.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_node.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_reason.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_role.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_sub_code.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_text.h"\ + "..\..\..\..\axiom\include\axiom_soap_fault_value.h"\ + "..\..\..\..\axiom\include\axiom_soap_header.h"\ + "..\..\..\..\axiom\include\axiom_soap_header_block.h"\ + "..\..\..\..\axiom\include\axiom_stax_builder.h"\ + "..\..\..\..\axiom\include\axiom_text.h"\ + "..\..\..\..\axiom\include\axiom_xml_reader.h"\ + "..\..\..\..\axiom\include\axiom_xml_writer.h"\ + "..\..\..\..\include\axis2_const.h"\ + "..\..\..\..\include\axis2_defines.h"\ + "..\..\..\..\include\axis2_util.h"\ + "..\..\..\..\neethi\include\neethi_all.h"\ + "..\..\..\..\neethi\include\neethi_assertion.h"\ + "..\..\..\..\neethi\include\neethi_constants.h"\ + "..\..\..\..\neethi\include\neethi_engine.h"\ + "..\..\..\..\neethi\include\neethi_exactlyone.h"\ + "..\..\..\..\neethi\include\neethi_includes.h"\ + "..\..\..\..\neethi\include\neethi_operator.h"\ + "..\..\..\..\neethi\include\neethi_policy.h"\ + "..\..\..\..\neethi\include\neethi_reference.h"\ + "..\..\..\..\neethi\include\neethi_registry.h"\ + "..\..\..\..\neethi\include\rp_defines.h"\ + "..\..\..\..\neethi\include\rp_https_token.h"\ + "..\..\..\..\neethi\include\rp_includes.h"\ + "..\..\..\..\neethi\include\rp_issued_token.h"\ + "..\..\..\..\neethi\include\rp_property.h"\ + "..\..\..\..\neethi\include\rp_saml_token.h"\ + "..\..\..\..\neethi\include\rp_security_context_token.h"\ + "..\..\..\..\neethi\include\rp_username_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token.h"\ + "..\..\..\..\neethi\include\rp_x509_token_builder.h"\ + "..\..\..\..\util\include\axutil_allocator.h"\ + "..\..\..\..\util\include\axutil_array_list.h"\ + "..\..\..\..\util\include\axutil_base64.h"\ + "..\..\..\..\util\include\axutil_base64_binary.h"\ + "..\..\..\..\util\include\axutil_class_loader.h"\ + "..\..\..\..\util\include\axutil_config.h"\ + "..\..\..\..\util\include\axutil_date_time.h"\ + "..\..\..\..\util\include\axutil_dir_handler.h"\ + "..\..\..\..\util\include\axutil_dll_desc.h"\ + "..\..\..\..\util\include\axutil_env.h"\ + "..\..\..\..\util\include\axutil_error.h"\ + "..\..\..\..\util\include\axutil_error_default.h"\ + "..\..\..\..\util\include\axutil_file.h"\ + "..\..\..\..\util\include\axutil_file_handler.h"\ + "..\..\..\..\util\include\axutil_hash.h"\ + "..\..\..\..\util\include\axutil_linked_list.h"\ + "..\..\..\..\util\include\axutil_log.h"\ + "..\..\..\..\util\include\axutil_log_default.h"\ + "..\..\..\..\util\include\axutil_network_handler.h"\ + "..\..\..\..\util\include\axutil_param.h"\ + "..\..\..\..\util\include\axutil_param_container.h"\ + "..\..\..\..\util\include\axutil_property.h"\ + "..\..\..\..\util\include\axutil_qname.h"\ + "..\..\..\..\util\include\axutil_stack.h"\ + "..\..\..\..\util\include\axutil_stream.h"\ + "..\..\..\..\util\include\axutil_string.h"\ + "..\..\..\..\util\include\axutil_string_util.h"\ + "..\..\..\..\util\include\axutil_thread.h"\ + "..\..\..\..\util\include\axutil_thread_pool.h"\ + "..\..\..\..\util\include\axutil_types.h"\ + "..\..\..\..\util\include\axutil_uri.h"\ + "..\..\..\..\util\include\axutil_url.h"\ + "..\..\..\..\util\include\axutil_utils.h"\ + "..\..\..\..\util\include\axutil_utils_defines.h"\ + "..\..\..\..\util\include\axutil_uuid_gen.h"\ + "..\..\..\..\util\include\platforms\axutil_platform_auto_sense.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_date_time_util_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_unix.h"\ + "..\..\..\..\util\include\platforms\unix\axutil_uuid_gen_unix.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_date_time_util_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_dir_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_getopt_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_thread_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_uuid_gen_windows.h"\ + "..\..\..\..\util\include\platforms\windows\axutil_windows.h"\ + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\neethi_all.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\neethi_assertion.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\neethi_assertion_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\neethi_constants.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\neethi_engine.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\neethi_exactlyone.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\neethi_includes.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\neethi_operator.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\neethi_policy.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\neethi_reference.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\neethi_registry.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\neethi_util.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_algorithmsuite.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_algorithmsuite_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_asymmetric_binding.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_asymmetric_binding_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_binding_commons.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_builders.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_defines.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_element.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_encryption_token_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_header.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_https_token.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_https_token_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_includes.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_initiator_token_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_layout.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_layout_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_policy_creator.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_property.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_protection_token_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_qname_matcher.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_rampart_config.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_rampart_config_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_recipient_token_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_secpolicy.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_secpolicy_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_security_context_token.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_signature_token_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_signed_encrypted_elements.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_signed_encrypted_items.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_signed_encrypted_parts.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_signed_encrypted_parts_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_supporting_tokens.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_supporting_tokens_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_symmetric_asymmetric_binding_commons.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_symmetric_binding.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_symmetric_binding_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_token_identifier.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_transport_binding.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_transport_binding_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_transport_token_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_trust10.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_trust10_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_username_token.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_username_token_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_wss10.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_wss10_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_wss11.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_wss11_builder.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_x509_token.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\neethi\include\rp_x509_token_builder.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ides/vc9/axis2c/axiom/axiom.vcproj b/ides/vc9/axis2c/axiom/axiom.vcproj new file mode 100644 index 0000000..71cbcb8 --- /dev/null +++ b/ides/vc9/axis2c/axiom/axiom.vcproj @@ -0,0 +1,620 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/axis2_engine/axis2_engine.vcproj b/ides/vc9/axis2c/axis2_engine/axis2_engine.vcproj new file mode 100644 index 0000000..a2a9d7d --- /dev/null +++ b/ides/vc9/axis2c/axis2_engine/axis2_engine.vcproj @@ -0,0 +1,946 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/axis2_http_receiver/axis2_http_receiver.vcproj b/ides/vc9/axis2c/axis2_http_receiver/axis2_http_receiver.vcproj new file mode 100644 index 0000000..6a74e52 --- /dev/null +++ b/ides/vc9/axis2c/axis2_http_receiver/axis2_http_receiver.vcproj @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/axis2_http_sender/axis2_http_sender.vcproj b/ides/vc9/axis2c/axis2_http_sender/axis2_http_sender.vcproj new file mode 100644 index 0000000..dd549c3 --- /dev/null +++ b/ides/vc9/axis2c/axis2_http_sender/axis2_http_sender.vcproj @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/axis2_http_server/axis2_http_server.vcproj b/ides/vc9/axis2c/axis2_http_server/axis2_http_server.vcproj new file mode 100644 index 0000000..95d79ba --- /dev/null +++ b/ides/vc9/axis2c/axis2_http_server/axis2_http_server.vcproj @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/axis2_mod_addr/axis2_mod_addr.vcproj b/ides/vc9/axis2c/axis2_mod_addr/axis2_mod_addr.vcproj new file mode 100644 index 0000000..a1a8d9c --- /dev/null +++ b/ides/vc9/axis2c/axis2_mod_addr/axis2_mod_addr.vcproj @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/axis2_mod_log/axis2_mod_log.vcproj b/ides/vc9/axis2c/axis2_mod_log/axis2_mod_log.vcproj new file mode 100644 index 0000000..f646e54 --- /dev/null +++ b/ides/vc9/axis2c/axis2_mod_log/axis2_mod_log.vcproj @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/axis2_parser/axis2_parser.vcproj b/ides/vc9/axis2c/axis2_parser/axis2_parser.vcproj new file mode 100644 index 0000000..1ae3ed5 --- /dev/null +++ b/ides/vc9/axis2c/axis2_parser/axis2_parser.vcproj @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/axis2_parser_guththila/axis2_parser_guththila.vcproj b/ides/vc9/axis2c/axis2_parser_guththila/axis2_parser_guththila.vcproj new file mode 100644 index 0000000..06ba732 --- /dev/null +++ b/ides/vc9/axis2c/axis2_parser_guththila/axis2_parser_guththila.vcproj @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/axis2_tcp_receiver/axis2_tcp_receiver.vcproj b/ides/vc9/axis2c/axis2_tcp_receiver/axis2_tcp_receiver.vcproj new file mode 100644 index 0000000..bc91609 --- /dev/null +++ b/ides/vc9/axis2c/axis2_tcp_receiver/axis2_tcp_receiver.vcproj @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/axis2_tcp_sender/axis2_tcp_sender.vcproj b/ides/vc9/axis2c/axis2_tcp_sender/axis2_tcp_sender.vcproj new file mode 100644 index 0000000..b6411e4 --- /dev/null +++ b/ides/vc9/axis2c/axis2_tcp_sender/axis2_tcp_sender.vcproj @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/axis2_tcp_server/axis2_tcp_server.vcproj b/ides/vc9/axis2c/axis2_tcp_server/axis2_tcp_server.vcproj new file mode 100644 index 0000000..6782e5b --- /dev/null +++ b/ides/vc9/axis2c/axis2_tcp_server/axis2_tcp_server.vcproj @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/axis2_xpath/axis2_xpath.vcproj b/ides/vc9/axis2c/axis2_xpath/axis2_xpath.vcproj new file mode 100644 index 0000000..83e6e8f --- /dev/null +++ b/ides/vc9/axis2c/axis2_xpath/axis2_xpath.vcproj @@ -0,0 +1,252 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/axis2c.sln b/ides/vc9/axis2c/axis2c.sln new file mode 100644 index 0000000..727eb38 --- /dev/null +++ b/ides/vc9/axis2c/axis2c.sln @@ -0,0 +1,343 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{52AB54B9-4457-4E03-B892-75CC56F22B32}" + ProjectSection(SolutionItems) = preProject + ..\..\..\build\win32\makefile = ..\..\..\build\win32\makefile + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "clients", "clients", "{37581370-F613-4C0E-BEF1-3BB7540DFFD1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{75835D86-0BB4-4DEC-AB3B-62329D7DF3CE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_parser", "axis2_parser\axis2_parser.vcproj", "{D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axiom", "axiom\axiom.vcproj", "{7C816A64-FA96-4C6C-8DB0-5256441F54BC}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_engine", "axis2_engine\axis2_engine.vcproj", "{9524B8C5-79D9-4470-9A47-8BD163ABBB15}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {20643536-7BF0-4201-9EA6-039E6CF19ADB} = {20643536-7BF0-4201-9EA6-039E6CF19ADB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_http_server", "axis2_http_server\axis2_http_server.vcproj", "{D2975362-DEAA-41BF-AE5E-E6FCDB526726}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {9524B8C5-79D9-4470-9A47-8BD163ABBB15} = {9524B8C5-79D9-4470-9A47-8BD163ABBB15} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {9441F689-6ED3-4FF8-9B13-2E80E391DF39} = {9441F689-6ED3-4FF8-9B13-2E80E391DF39} + {0DEEAA74-F06D-4C60-B408-1B875B4FB338} = {0DEEAA74-F06D-4C60-B408-1B875B4FB338} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {20643536-7BF0-4201-9EA6-039E6CF19ADB} = {20643536-7BF0-4201-9EA6-039E6CF19ADB} + {7332F525-8C77-4FB3-A0C0-FCEB2382F03C} = {7332F525-8C77-4FB3-A0C0-FCEB2382F03C} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_mod_addr", "axis2_mod_addr\axis2_mod_addr.vcproj", "{0DEEAA74-F06D-4C60-B408-1B875B4FB338}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {9524B8C5-79D9-4470-9A47-8BD163ABBB15} = {9524B8C5-79D9-4470-9A47-8BD163ABBB15} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {20643536-7BF0-4201-9EA6-039E6CF19ADB} = {20643536-7BF0-4201-9EA6-039E6CF19ADB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_http_sender", "axis2_http_sender\axis2_http_sender.vcproj", "{7332F525-8C77-4FB3-A0C0-FCEB2382F03C}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {9524B8C5-79D9-4470-9A47-8BD163ABBB15} = {9524B8C5-79D9-4470-9A47-8BD163ABBB15} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {20643536-7BF0-4201-9EA6-039E6CF19ADB} = {20643536-7BF0-4201-9EA6-039E6CF19ADB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_http_receiver", "axis2_http_receiver\axis2_http_receiver.vcproj", "{9441F689-6ED3-4FF8-9B13-2E80E391DF39}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {9524B8C5-79D9-4470-9A47-8BD163ABBB15} = {9524B8C5-79D9-4470-9A47-8BD163ABBB15} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axutil", "axutil\axutil.vcproj", "{3887B3E3-1A45-40E5-BC95-9C51000C86DB}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "neethi", "neethi\neethi.vcproj", "{20643536-7BF0-4201-9EA6-039E6CF19ADB}" + ProjectSection(ProjectDependencies) = postProject + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {CAF3AED6-3900-4E8B-B21E-68022B955260} = {CAF3AED6-3900-4E8B-B21E-68022B955260} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_tcp_sender", "axis2_tcp_sender\axis2_tcp_sender.vcproj", "{830B97B8-D216-45B9-A0CC-6D5828AFD634}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {9524B8C5-79D9-4470-9A47-8BD163ABBB15} = {9524B8C5-79D9-4470-9A47-8BD163ABBB15} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {20643536-7BF0-4201-9EA6-039E6CF19ADB} = {20643536-7BF0-4201-9EA6-039E6CF19ADB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_tcp_receiver", "axis2_tcp_receiver\axis2_tcp_receiver.vcproj", "{8C8F2D61-0C61-4E90-9CA2-E0C795725DF7}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {9524B8C5-79D9-4470-9A47-8BD163ABBB15} = {9524B8C5-79D9-4470-9A47-8BD163ABBB15} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {20643536-7BF0-4201-9EA6-039E6CF19ADB} = {20643536-7BF0-4201-9EA6-039E6CF19ADB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_tcp_server", "axis2_tcp_server\axis2_tcp_server.vcproj", "{32ECB83C-42CA-4F36-B15B-B3DCD08F041F}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {9524B8C5-79D9-4470-9A47-8BD163ABBB15} = {9524B8C5-79D9-4470-9A47-8BD163ABBB15} + {830B97B8-D216-45B9-A0CC-6D5828AFD634} = {830B97B8-D216-45B9-A0CC-6D5828AFD634} + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} = {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8} + {9441F689-6ED3-4FF8-9B13-2E80E391DF39} = {9441F689-6ED3-4FF8-9B13-2E80E391DF39} + {0DEEAA74-F06D-4C60-B408-1B875B4FB338} = {0DEEAA74-F06D-4C60-B408-1B875B4FB338} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + {D2975362-DEAA-41BF-AE5E-E6FCDB526726} = {D2975362-DEAA-41BF-AE5E-E6FCDB526726} + {8C8F2D61-0C61-4E90-9CA2-E0C795725DF7} = {8C8F2D61-0C61-4E90-9CA2-E0C795725DF7} + {20643536-7BF0-4201-9EA6-039E6CF19ADB} = {20643536-7BF0-4201-9EA6-039E6CF19ADB} + {7332F525-8C77-4FB3-A0C0-FCEB2382F03C} = {7332F525-8C77-4FB3-A0C0-FCEB2382F03C} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_axis2", "mod_axis2\mod_axis2.vcproj", "{9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_axis2_IIS", "mod_axis2_IIS\mod_axis2_IIS.vcproj", "{1D949369-9C4B-4C59-9F2A-278FD8CE0D41}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tcpmon", "tcpmon\tcpmon.vcproj", "{56180647-96CF-4415-B3FB-34E41CEAD595}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guththila", "guththila\guththila.vcproj", "{81FDD803-8611-4EB4-AB0E-85F498061A2D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_parser_guththila", "axis2_parser_guththila\axis2_parser_guththila.vcproj", "{DC69D297-3B3B-4FA2-A799-51F040708857}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_mod_log", "axis2_mod_log\axis2_mod_log.vcproj", "{423F7156-84C4-43C1-855A-D0FEE24DB0A0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo", "services\echo\echo.vcproj", "{0469C145-5B1A-4677-B0C2-0981EB6C0567}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Calculator", "services\Calculator\Calculator.vcproj", "{1917F167-8C7F-4920-934D-BDAA2E6DC024}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "math", "services\math\math.vcproj", "{8209506A-634F-4239-82D0-3EC9105FEBA4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mtom", "services\mtom\mtom.vcproj", "{C8BDF683-7F8E-4526-9193-836DD90714CC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "notify", "services\notify\notify.vcproj", "{23D5F8E4-F554-451F-B97D-F0CD82272229}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking", "clients\echo_blocking\echo_blocking.vcproj", "{76F139F5-913A-4328-8504-B1E9B7F1BA97}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_addr", "clients\echo_blocking_addr\echo_blocking_addr.vcproj", "{DDBF66ED-91FA-48ED-B23D-437473C52C0A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_auth", "clients\echo_blocking_auth\echo_blocking_auth.vcproj", "{0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_dual", "clients\echo_blocking_dual\echo_blocking_dual.vcproj", "{584804F3-344F-4850-899C-85E1998694F8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_non_blocking", "clients\echo_non_blocking\echo_non_blocking.vcproj", "{62DB83C4-A2FA-45AF-B2F2-A737443AD473}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_non_blocking_dual", "clients\echo_non_blocking_dual\echo_non_blocking_dual.vcproj", "{9C1140F6-1846-4335-B571-83E2C9FF6E02}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_rest", "clients\echo_rest\echo_rest.vcproj", "{84518230-9F6F-4B1E-B4B4-9F78D27355AC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "google", "clients\google\google.vcproj", "{607FAED5-B750-44D2-A817-0FDF4F77744C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "math", "clients\math\math.vcproj", "{9121BA33-CE71-4775-AD78-1114696BFEC8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mtom", "clients\mtom\mtom.vcproj", "{9EA3CB05-003C-410C-A4F2-B0DB7F01645D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "notify", "clients\notify\notify.vcproj", "{1EFD2CA7-86AF-4F66-9930-978D5A881949}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yahoo", "clients\yahoo\yahoo.vcproj", "{9B7A5827-9F06-4B7F-B8E3-233E9350C258}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo", "clients\echo\echo.vcproj", "{57414A3E-782C-4472-9EEE-981EF0649258}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_xpath", "axis2_xpath\axis2_xpath.vcproj", "{CAF3AED6-3900-4E8B-B21E-68022B955260}" + ProjectSection(ProjectDependencies) = postProject + {3887B3E3-1A45-40E5-BC95-9C51000C86DB} = {3887B3E3-1A45-40E5-BC95-9C51000C86DB} + {7C816A64-FA96-4C6C-8DB0-5256441F54BC} = {7C816A64-FA96-4C6C-8DB0-5256441F54BC} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8}.Debug|Win32.ActiveCfg = Debug|Win32 + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8}.Release|Win32.ActiveCfg = Release|Win32 + {D7D7FBA1-5E43-4586-8F69-D4ED2628D2D8}.Release|Win32.Build.0 = Release|Win32 + {7C816A64-FA96-4C6C-8DB0-5256441F54BC}.Debug|Win32.ActiveCfg = Debug|Win32 + {7C816A64-FA96-4C6C-8DB0-5256441F54BC}.Debug|Win32.Build.0 = Debug|Win32 + {7C816A64-FA96-4C6C-8DB0-5256441F54BC}.Release|Win32.ActiveCfg = Release|Win32 + {7C816A64-FA96-4C6C-8DB0-5256441F54BC}.Release|Win32.Build.0 = Release|Win32 + {9524B8C5-79D9-4470-9A47-8BD163ABBB15}.Debug|Win32.ActiveCfg = Debug|Win32 + {9524B8C5-79D9-4470-9A47-8BD163ABBB15}.Debug|Win32.Build.0 = Debug|Win32 + {9524B8C5-79D9-4470-9A47-8BD163ABBB15}.Release|Win32.ActiveCfg = Release|Win32 + {9524B8C5-79D9-4470-9A47-8BD163ABBB15}.Release|Win32.Build.0 = Release|Win32 + {D2975362-DEAA-41BF-AE5E-E6FCDB526726}.Debug|Win32.ActiveCfg = Debug|Win32 + {D2975362-DEAA-41BF-AE5E-E6FCDB526726}.Debug|Win32.Build.0 = Debug|Win32 + {D2975362-DEAA-41BF-AE5E-E6FCDB526726}.Release|Win32.ActiveCfg = Release|Win32 + {D2975362-DEAA-41BF-AE5E-E6FCDB526726}.Release|Win32.Build.0 = Release|Win32 + {0DEEAA74-F06D-4C60-B408-1B875B4FB338}.Debug|Win32.ActiveCfg = Debug|Win32 + {0DEEAA74-F06D-4C60-B408-1B875B4FB338}.Debug|Win32.Build.0 = Debug|Win32 + {0DEEAA74-F06D-4C60-B408-1B875B4FB338}.Release|Win32.ActiveCfg = Release|Win32 + {0DEEAA74-F06D-4C60-B408-1B875B4FB338}.Release|Win32.Build.0 = Release|Win32 + {7332F525-8C77-4FB3-A0C0-FCEB2382F03C}.Debug|Win32.ActiveCfg = Debug|Win32 + {7332F525-8C77-4FB3-A0C0-FCEB2382F03C}.Debug|Win32.Build.0 = Debug|Win32 + {7332F525-8C77-4FB3-A0C0-FCEB2382F03C}.Release|Win32.ActiveCfg = Release|Win32 + {7332F525-8C77-4FB3-A0C0-FCEB2382F03C}.Release|Win32.Build.0 = Release|Win32 + {9441F689-6ED3-4FF8-9B13-2E80E391DF39}.Debug|Win32.ActiveCfg = Debug|Win32 + {9441F689-6ED3-4FF8-9B13-2E80E391DF39}.Debug|Win32.Build.0 = Debug|Win32 + {9441F689-6ED3-4FF8-9B13-2E80E391DF39}.Release|Win32.ActiveCfg = Release|Win32 + {9441F689-6ED3-4FF8-9B13-2E80E391DF39}.Release|Win32.Build.0 = Release|Win32 + {3887B3E3-1A45-40E5-BC95-9C51000C86DB}.Debug|Win32.ActiveCfg = Debug|Win32 + {3887B3E3-1A45-40E5-BC95-9C51000C86DB}.Debug|Win32.Build.0 = Debug|Win32 + {3887B3E3-1A45-40E5-BC95-9C51000C86DB}.Release|Win32.ActiveCfg = Release|Win32 + {3887B3E3-1A45-40E5-BC95-9C51000C86DB}.Release|Win32.Build.0 = Release|Win32 + {20643536-7BF0-4201-9EA6-039E6CF19ADB}.Debug|Win32.ActiveCfg = Debug|Win32 + {20643536-7BF0-4201-9EA6-039E6CF19ADB}.Debug|Win32.Build.0 = Debug|Win32 + {20643536-7BF0-4201-9EA6-039E6CF19ADB}.Release|Win32.ActiveCfg = Release|Win32 + {20643536-7BF0-4201-9EA6-039E6CF19ADB}.Release|Win32.Build.0 = Release|Win32 + {830B97B8-D216-45B9-A0CC-6D5828AFD634}.Debug|Win32.ActiveCfg = Debug|Win32 + {830B97B8-D216-45B9-A0CC-6D5828AFD634}.Debug|Win32.Build.0 = Debug|Win32 + {830B97B8-D216-45B9-A0CC-6D5828AFD634}.Release|Win32.ActiveCfg = Release|Win32 + {830B97B8-D216-45B9-A0CC-6D5828AFD634}.Release|Win32.Build.0 = Release|Win32 + {8C8F2D61-0C61-4E90-9CA2-E0C795725DF7}.Debug|Win32.ActiveCfg = Debug|Win32 + {8C8F2D61-0C61-4E90-9CA2-E0C795725DF7}.Debug|Win32.Build.0 = Debug|Win32 + {8C8F2D61-0C61-4E90-9CA2-E0C795725DF7}.Release|Win32.ActiveCfg = Release|Win32 + {8C8F2D61-0C61-4E90-9CA2-E0C795725DF7}.Release|Win32.Build.0 = Release|Win32 + {32ECB83C-42CA-4F36-B15B-B3DCD08F041F}.Debug|Win32.ActiveCfg = Debug|Win32 + {32ECB83C-42CA-4F36-B15B-B3DCD08F041F}.Debug|Win32.Build.0 = Debug|Win32 + {32ECB83C-42CA-4F36-B15B-B3DCD08F041F}.Release|Win32.ActiveCfg = Release|Win32 + {32ECB83C-42CA-4F36-B15B-B3DCD08F041F}.Release|Win32.Build.0 = Release|Win32 + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Debug|Win32.ActiveCfg = Debug|Win32 + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Debug|Win32.Build.0 = Debug|Win32 + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Release|Win32.ActiveCfg = Release|Win32 + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Release|Win32.Build.0 = Release|Win32 + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Debug|Win32.ActiveCfg = Debug|Win32 + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Debug|Win32.Build.0 = Debug|Win32 + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Release|Win32.ActiveCfg = Release|Win32 + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Release|Win32.Build.0 = Release|Win32 + {56180647-96CF-4415-B3FB-34E41CEAD595}.Debug|Win32.ActiveCfg = Debug|Win32 + {56180647-96CF-4415-B3FB-34E41CEAD595}.Debug|Win32.Build.0 = Debug|Win32 + {56180647-96CF-4415-B3FB-34E41CEAD595}.Release|Win32.ActiveCfg = Release|Win32 + {56180647-96CF-4415-B3FB-34E41CEAD595}.Release|Win32.Build.0 = Release|Win32 + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Debug|Win32.ActiveCfg = Debug|Win32 + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Debug|Win32.Build.0 = Debug|Win32 + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Release|Win32.ActiveCfg = Release|Win32 + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Release|Win32.Build.0 = Release|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Debug|Win32.ActiveCfg = Debug|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Debug|Win32.Build.0 = Debug|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Release|Win32.ActiveCfg = Release|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Release|Win32.Build.0 = Release|Win32 + {423F7156-84C4-43C1-855A-D0FEE24DB0A0}.Debug|Win32.ActiveCfg = Debug|Win32 + {423F7156-84C4-43C1-855A-D0FEE24DB0A0}.Debug|Win32.Build.0 = Debug|Win32 + {423F7156-84C4-43C1-855A-D0FEE24DB0A0}.Release|Win32.ActiveCfg = Release|Win32 + {423F7156-84C4-43C1-855A-D0FEE24DB0A0}.Release|Win32.Build.0 = Release|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Debug|Win32.ActiveCfg = Debug|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Debug|Win32.Build.0 = Debug|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Release|Win32.ActiveCfg = Release|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Release|Win32.Build.0 = Release|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Debug|Win32.ActiveCfg = Debug|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Debug|Win32.Build.0 = Debug|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Release|Win32.ActiveCfg = Release|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Release|Win32.Build.0 = Release|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Debug|Win32.ActiveCfg = Debug|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Debug|Win32.Build.0 = Debug|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Release|Win32.ActiveCfg = Release|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Release|Win32.Build.0 = Release|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Debug|Win32.Build.0 = Debug|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Release|Win32.ActiveCfg = Release|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Release|Win32.Build.0 = Release|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Debug|Win32.ActiveCfg = Debug|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Debug|Win32.Build.0 = Debug|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Release|Win32.ActiveCfg = Release|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Release|Win32.Build.0 = Release|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Debug|Win32.ActiveCfg = Debug|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Debug|Win32.Build.0 = Debug|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Release|Win32.ActiveCfg = Release|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Release|Win32.Build.0 = Release|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Debug|Win32.ActiveCfg = Debug|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Debug|Win32.Build.0 = Debug|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Release|Win32.ActiveCfg = Release|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Release|Win32.Build.0 = Release|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Debug|Win32.ActiveCfg = Debug|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Debug|Win32.Build.0 = Debug|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Release|Win32.ActiveCfg = Release|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Release|Win32.Build.0 = Release|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Debug|Win32.ActiveCfg = Debug|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Debug|Win32.Build.0 = Debug|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Release|Win32.ActiveCfg = Release|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Release|Win32.Build.0 = Release|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Debug|Win32.ActiveCfg = Debug|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Debug|Win32.Build.0 = Debug|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Release|Win32.ActiveCfg = Release|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Release|Win32.Build.0 = Release|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Debug|Win32.Build.0 = Debug|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Release|Win32.ActiveCfg = Release|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Release|Win32.Build.0 = Release|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Debug|Win32.ActiveCfg = Debug|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Debug|Win32.Build.0 = Debug|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Release|Win32.ActiveCfg = Release|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Release|Win32.Build.0 = Release|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Debug|Win32.ActiveCfg = Debug|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Debug|Win32.Build.0 = Debug|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Release|Win32.ActiveCfg = Release|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Release|Win32.Build.0 = Release|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Debug|Win32.ActiveCfg = Debug|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Debug|Win32.Build.0 = Debug|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Release|Win32.ActiveCfg = Release|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Release|Win32.Build.0 = Release|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Debug|Win32.ActiveCfg = Debug|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Debug|Win32.Build.0 = Debug|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Release|Win32.ActiveCfg = Release|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Release|Win32.Build.0 = Release|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Debug|Win32.ActiveCfg = Debug|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Debug|Win32.Build.0 = Debug|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Release|Win32.ActiveCfg = Release|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Release|Win32.Build.0 = Release|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Debug|Win32.ActiveCfg = Debug|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Debug|Win32.Build.0 = Debug|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Release|Win32.ActiveCfg = Release|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Release|Win32.Build.0 = Release|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Debug|Win32.ActiveCfg = Debug|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Debug|Win32.Build.0 = Debug|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Release|Win32.ActiveCfg = Release|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Release|Win32.Build.0 = Release|Win32 + {CAF3AED6-3900-4E8B-B21E-68022B955260}.Debug|Win32.ActiveCfg = Debug|Win32 + {CAF3AED6-3900-4E8B-B21E-68022B955260}.Debug|Win32.Build.0 = Debug|Win32 + {CAF3AED6-3900-4E8B-B21E-68022B955260}.Release|Win32.ActiveCfg = Release|Win32 + {CAF3AED6-3900-4E8B-B21E-68022B955260}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {76F139F5-913A-4328-8504-B1E9B7F1BA97} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {DDBF66ED-91FA-48ED-B23D-437473C52C0A} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {584804F3-344F-4850-899C-85E1998694F8} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {62DB83C4-A2FA-45AF-B2F2-A737443AD473} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {9C1140F6-1846-4335-B571-83E2C9FF6E02} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {84518230-9F6F-4B1E-B4B4-9F78D27355AC} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {607FAED5-B750-44D2-A817-0FDF4F77744C} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {9121BA33-CE71-4775-AD78-1114696BFEC8} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {1EFD2CA7-86AF-4F66-9930-978D5A881949} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {9B7A5827-9F06-4B7F-B8E3-233E9350C258} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {57414A3E-782C-4472-9EEE-981EF0649258} = {37581370-F613-4C0E-BEF1-3BB7540DFFD1} + {0469C145-5B1A-4677-B0C2-0981EB6C0567} = {75835D86-0BB4-4DEC-AB3B-62329D7DF3CE} + {1917F167-8C7F-4920-934D-BDAA2E6DC024} = {75835D86-0BB4-4DEC-AB3B-62329D7DF3CE} + {8209506A-634F-4239-82D0-3EC9105FEBA4} = {75835D86-0BB4-4DEC-AB3B-62329D7DF3CE} + {C8BDF683-7F8E-4526-9193-836DD90714CC} = {75835D86-0BB4-4DEC-AB3B-62329D7DF3CE} + {23D5F8E4-F554-451F-B97D-F0CD82272229} = {75835D86-0BB4-4DEC-AB3B-62329D7DF3CE} + EndGlobalSection +EndGlobal diff --git a/ides/vc9/axis2c/axutil/axutil.vcproj b/ides/vc9/axis2c/axutil/axutil.vcproj new file mode 100644 index 0000000..42166f3 --- /dev/null +++ b/ides/vc9/axis2c/axutil/axutil.vcproj @@ -0,0 +1,644 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/clients/clients.sln b/ides/vc9/axis2c/clients/clients.sln new file mode 100644 index 0000000..9cdb95d --- /dev/null +++ b/ides/vc9/axis2c/clients/clients.sln @@ -0,0 +1,92 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo", "echo\echo.vcproj", "{57414A3E-782C-4472-9EEE-981EF0649258}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mtom", "mtom\mtom.vcproj", "{9EA3CB05-003C-410C-A4F2-B0DB7F01645D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "math", "math\math.vcproj", "{9121BA33-CE71-4775-AD78-1114696BFEC8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "google", "google\google.vcproj", "{607FAED5-B750-44D2-A817-0FDF4F77744C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "notify", "notify\notify.vcproj", "{1EFD2CA7-86AF-4F66-9930-978D5A881949}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yahoo", "yahoo\yahoo.vcproj", "{9B7A5827-9F06-4B7F-B8E3-233E9350C258}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking", "echo_blocking\echo_blocking.vcproj", "{76F139F5-913A-4328-8504-B1E9B7F1BA97}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_addr", "echo_blocking_addr\echo_blocking_addr.vcproj", "{DDBF66ED-91FA-48ED-B23D-437473C52C0A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_dual", "echo_blocking_dual\echo_blocking_dual.vcproj", "{584804F3-344F-4850-899C-85E1998694F8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_non_blocking", "echo_non_blocking\echo_non_blocking.vcproj", "{62DB83C4-A2FA-45AF-B2F2-A737443AD473}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_non_blocking_dual", "echo_non_blocking_dual\echo_non_blocking_dual.vcproj", "{9C1140F6-1846-4335-B571-83E2C9FF6E02}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_rest", "echo_rest\echo_rest.vcproj", "{84518230-9F6F-4B1E-B4B4-9F78D27355AC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_auth", "echo_blocking_auth\echo_blocking_auth.vcproj", "{0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {57414A3E-782C-4472-9EEE-981EF0649258}.Debug|Win32.ActiveCfg = Debug|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Debug|Win32.Build.0 = Debug|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Release|Win32.ActiveCfg = Release|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Release|Win32.Build.0 = Release|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Debug|Win32.ActiveCfg = Debug|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Debug|Win32.Build.0 = Debug|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Release|Win32.ActiveCfg = Release|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Release|Win32.Build.0 = Release|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Debug|Win32.ActiveCfg = Debug|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Debug|Win32.Build.0 = Debug|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Release|Win32.ActiveCfg = Release|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Release|Win32.Build.0 = Release|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Debug|Win32.ActiveCfg = Debug|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Debug|Win32.Build.0 = Debug|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Release|Win32.ActiveCfg = Release|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Release|Win32.Build.0 = Release|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Debug|Win32.ActiveCfg = Debug|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Debug|Win32.Build.0 = Debug|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Release|Win32.ActiveCfg = Release|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Release|Win32.Build.0 = Release|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Debug|Win32.ActiveCfg = Debug|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Debug|Win32.Build.0 = Debug|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Release|Win32.ActiveCfg = Release|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Release|Win32.Build.0 = Release|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Debug|Win32.ActiveCfg = Debug|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Debug|Win32.Build.0 = Debug|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Release|Win32.ActiveCfg = Release|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Release|Win32.Build.0 = Release|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Debug|Win32.ActiveCfg = Debug|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Debug|Win32.Build.0 = Debug|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Release|Win32.ActiveCfg = Release|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Release|Win32.Build.0 = Release|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Debug|Win32.ActiveCfg = Debug|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Debug|Win32.Build.0 = Debug|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Release|Win32.ActiveCfg = Release|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Release|Win32.Build.0 = Release|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Debug|Win32.ActiveCfg = Debug|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Debug|Win32.Build.0 = Debug|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Release|Win32.ActiveCfg = Release|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Release|Win32.Build.0 = Release|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Debug|Win32.Build.0 = Debug|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Release|Win32.ActiveCfg = Release|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Release|Win32.Build.0 = Release|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Debug|Win32.ActiveCfg = Debug|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Debug|Win32.Build.0 = Debug|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Release|Win32.ActiveCfg = Release|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Release|Win32.Build.0 = Release|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Debug|Win32.ActiveCfg = Debug|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Debug|Win32.Build.0 = Debug|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Release|Win32.ActiveCfg = Release|Win32 + {0CCC1F34-5CD7-47EB-8DE7-50F59BD6182B}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc9/axis2c/clients/echo/echo.vcproj b/ides/vc9/axis2c/clients/echo/echo.vcproj new file mode 100644 index 0000000..fcfafbe --- /dev/null +++ b/ides/vc9/axis2c/clients/echo/echo.vcproj @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/clients/echo_blocking/echo_blocking.vcproj b/ides/vc9/axis2c/clients/echo_blocking/echo_blocking.vcproj new file mode 100644 index 0000000..b22d821 --- /dev/null +++ b/ides/vc9/axis2c/clients/echo_blocking/echo_blocking.vcproj @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/clients/echo_blocking_addr/echo_blocking_addr.vcproj b/ides/vc9/axis2c/clients/echo_blocking_addr/echo_blocking_addr.vcproj new file mode 100644 index 0000000..d6165d4 --- /dev/null +++ b/ides/vc9/axis2c/clients/echo_blocking_addr/echo_blocking_addr.vcproj @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/clients/echo_blocking_auth/echo_blocking_auth.vcproj b/ides/vc9/axis2c/clients/echo_blocking_auth/echo_blocking_auth.vcproj new file mode 100644 index 0000000..c1c5b0a --- /dev/null +++ b/ides/vc9/axis2c/clients/echo_blocking_auth/echo_blocking_auth.vcproj @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/clients/echo_blocking_dual/echo_blocking_dual.vcproj b/ides/vc9/axis2c/clients/echo_blocking_dual/echo_blocking_dual.vcproj new file mode 100644 index 0000000..1e119e0 --- /dev/null +++ b/ides/vc9/axis2c/clients/echo_blocking_dual/echo_blocking_dual.vcproj @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/clients/echo_non_blocking/echo_non_blocking.vcproj b/ides/vc9/axis2c/clients/echo_non_blocking/echo_non_blocking.vcproj new file mode 100644 index 0000000..77e0ce0 --- /dev/null +++ b/ides/vc9/axis2c/clients/echo_non_blocking/echo_non_blocking.vcproj @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj b/ides/vc9/axis2c/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj new file mode 100644 index 0000000..5c46ac3 --- /dev/null +++ b/ides/vc9/axis2c/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/clients/echo_rest/echo_rest.vcproj b/ides/vc9/axis2c/clients/echo_rest/echo_rest.vcproj new file mode 100644 index 0000000..8e92f84 --- /dev/null +++ b/ides/vc9/axis2c/clients/echo_rest/echo_rest.vcproj @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/clients/google/google.vcproj b/ides/vc9/axis2c/clients/google/google.vcproj new file mode 100644 index 0000000..96f299f --- /dev/null +++ b/ides/vc9/axis2c/clients/google/google.vcproj @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/clients/math/math.vcproj b/ides/vc9/axis2c/clients/math/math.vcproj new file mode 100644 index 0000000..9415744 --- /dev/null +++ b/ides/vc9/axis2c/clients/math/math.vcproj @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/clients/mtom/mtom.vcproj b/ides/vc9/axis2c/clients/mtom/mtom.vcproj new file mode 100644 index 0000000..0d91e49 --- /dev/null +++ b/ides/vc9/axis2c/clients/mtom/mtom.vcproj @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/clients/notify/notify.vcproj b/ides/vc9/axis2c/clients/notify/notify.vcproj new file mode 100644 index 0000000..e361ac8 --- /dev/null +++ b/ides/vc9/axis2c/clients/notify/notify.vcproj @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/clients/yahoo/yahoo.vcproj b/ides/vc9/axis2c/clients/yahoo/yahoo.vcproj new file mode 100644 index 0000000..2e7b384 --- /dev/null +++ b/ides/vc9/axis2c/clients/yahoo/yahoo.vcproj @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/guththila/guththila.sln b/ides/vc9/axis2c/guththila/guththila.sln new file mode 100644 index 0000000..3eea6e6 --- /dev/null +++ b/ides/vc9/axis2c/guththila/guththila.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guththila", "guththila.vcproj", "{81FDD803-8611-4EB4-AB0E-85F498061A2D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "axis2_parser_guththila", "..\axis2_parser_guththila\axis2_parser_guththila.vcproj", "{DC69D297-3B3B-4FA2-A799-51F040708857}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Debug|Win32.ActiveCfg = Debug|Win32 + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Debug|Win32.Build.0 = Debug|Win32 + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Release|Win32.ActiveCfg = Release|Win32 + {81FDD803-8611-4EB4-AB0E-85F498061A2D}.Release|Win32.Build.0 = Release|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Debug|Win32.ActiveCfg = Debug|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Debug|Win32.Build.0 = Debug|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Release|Win32.ActiveCfg = Release|Win32 + {DC69D297-3B3B-4FA2-A799-51F040708857}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc9/axis2c/guththila/guththila.vcproj b/ides/vc9/axis2c/guththila/guththila.vcproj new file mode 100644 index 0000000..cced663 --- /dev/null +++ b/ides/vc9/axis2c/guththila/guththila.vcproj @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/mod_axis2/mod_axis2.sln b/ides/vc9/axis2c/mod_axis2/mod_axis2.sln new file mode 100644 index 0000000..913e3c8 --- /dev/null +++ b/ides/vc9/axis2c/mod_axis2/mod_axis2.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_axis2", "mod_axis2.vcproj", "{9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Debug|Win32.ActiveCfg = Debug|Win32 + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Debug|Win32.Build.0 = Debug|Win32 + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Release|Win32.ActiveCfg = Release|Win32 + {9CA2AEC7-8781-4B5E-B2A2-C143ABF5E818}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc9/axis2c/mod_axis2/mod_axis2.vcproj b/ides/vc9/axis2c/mod_axis2/mod_axis2.vcproj new file mode 100644 index 0000000..d926db0 --- /dev/null +++ b/ides/vc9/axis2c/mod_axis2/mod_axis2.vcproj @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/mod_axis2_IIS/mod_axis2_IIS.sln b/ides/vc9/axis2c/mod_axis2_IIS/mod_axis2_IIS.sln new file mode 100644 index 0000000..95f65c4 --- /dev/null +++ b/ides/vc9/axis2c/mod_axis2_IIS/mod_axis2_IIS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_axis2_IIS", "mod_axis2_IIS.vcproj", "{1D949369-9C4B-4C59-9F2A-278FD8CE0D41}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Debug|Win32.ActiveCfg = Debug|Win32 + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Debug|Win32.Build.0 = Debug|Win32 + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Release|Win32.ActiveCfg = Release|Win32 + {1D949369-9C4B-4C59-9F2A-278FD8CE0D41}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc9/axis2c/mod_axis2_IIS/mod_axis2_IIS.vcproj b/ides/vc9/axis2c/mod_axis2_IIS/mod_axis2_IIS.vcproj new file mode 100644 index 0000000..643e6fd --- /dev/null +++ b/ides/vc9/axis2c/mod_axis2_IIS/mod_axis2_IIS.vcproj @@ -0,0 +1,264 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/neethi/neethi.vcproj b/ides/vc9/axis2c/neethi/neethi.vcproj new file mode 100644 index 0000000..9f962df --- /dev/null +++ b/ides/vc9/axis2c/neethi/neethi.vcproj @@ -0,0 +1,767 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/services/Calculator/Calculator.vcproj b/ides/vc9/axis2c/services/Calculator/Calculator.vcproj new file mode 100644 index 0000000..9042f81 --- /dev/null +++ b/ides/vc9/axis2c/services/Calculator/Calculator.vcproj @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/services/echo/echo.vcproj b/ides/vc9/axis2c/services/echo/echo.vcproj new file mode 100644 index 0000000..1a4ad89 --- /dev/null +++ b/ides/vc9/axis2c/services/echo/echo.vcproj @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/services/math/math.vcproj b/ides/vc9/axis2c/services/math/math.vcproj new file mode 100644 index 0000000..f3b1b84 --- /dev/null +++ b/ides/vc9/axis2c/services/math/math.vcproj @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/services/mtom/mtom.vcproj b/ides/vc9/axis2c/services/mtom/mtom.vcproj new file mode 100644 index 0000000..2730fdf --- /dev/null +++ b/ides/vc9/axis2c/services/mtom/mtom.vcproj @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/services/notify/notify.vcproj b/ides/vc9/axis2c/services/notify/notify.vcproj new file mode 100644 index 0000000..cf34f0a --- /dev/null +++ b/ides/vc9/axis2c/services/notify/notify.vcproj @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/axis2c/services/services.sln b/ides/vc9/axis2c/services/services.sln new file mode 100644 index 0000000..c9638a4 --- /dev/null +++ b/ides/vc9/axis2c/services/services.sln @@ -0,0 +1,44 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Calculator", "Calculator\Calculator.vcproj", "{1917F167-8C7F-4920-934D-BDAA2E6DC024}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo", "echo\echo.vcproj", "{0469C145-5B1A-4677-B0C2-0981EB6C0567}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "math", "math\math.vcproj", "{8209506A-634F-4239-82D0-3EC9105FEBA4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mtom", "mtom\mtom.vcproj", "{C8BDF683-7F8E-4526-9193-836DD90714CC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "notify", "notify\notify.vcproj", "{23D5F8E4-F554-451F-B97D-F0CD82272229}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Debug|Win32.ActiveCfg = Debug|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Debug|Win32.Build.0 = Debug|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Release|Win32.ActiveCfg = Release|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Release|Win32.Build.0 = Release|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Debug|Win32.ActiveCfg = Debug|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Debug|Win32.Build.0 = Debug|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Release|Win32.ActiveCfg = Release|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Release|Win32.Build.0 = Release|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Debug|Win32.ActiveCfg = Debug|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Debug|Win32.Build.0 = Debug|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Release|Win32.ActiveCfg = Release|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Release|Win32.Build.0 = Release|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Debug|Win32.Build.0 = Debug|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Release|Win32.ActiveCfg = Release|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Release|Win32.Build.0 = Release|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Debug|Win32.ActiveCfg = Debug|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Debug|Win32.Build.0 = Debug|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Release|Win32.ActiveCfg = Release|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc9/axis2c/tcpmon/tcpmon.sln b/ides/vc9/axis2c/tcpmon/tcpmon.sln new file mode 100644 index 0000000..82175e6 --- /dev/null +++ b/ides/vc9/axis2c/tcpmon/tcpmon.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tcpmon", "tcpmon.vcproj", "{56180647-96CF-4415-B3FB-34E41CEAD595}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {56180647-96CF-4415-B3FB-34E41CEAD595}.Debug|Win32.ActiveCfg = Debug|Win32 + {56180647-96CF-4415-B3FB-34E41CEAD595}.Debug|Win32.Build.0 = Debug|Win32 + {56180647-96CF-4415-B3FB-34E41CEAD595}.Release|Win32.ActiveCfg = Release|Win32 + {56180647-96CF-4415-B3FB-34E41CEAD595}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc9/axis2c/tcpmon/tcpmon.vcproj b/ides/vc9/axis2c/tcpmon/tcpmon.vcproj new file mode 100644 index 0000000..788963a --- /dev/null +++ b/ides/vc9/axis2c/tcpmon/tcpmon.vcproj @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/clients/clients.sln b/ides/vc9/samples/clients/clients.sln new file mode 100644 index 0000000..fc5096c --- /dev/null +++ b/ides/vc9/samples/clients/clients.sln @@ -0,0 +1,86 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo", "echo\echo.vcproj", "{57414A3E-782C-4472-9EEE-981EF0649258}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mtom", "mtom\mtom.vcproj", "{9EA3CB05-003C-410C-A4F2-B0DB7F01645D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "math", "math\math.vcproj", "{9121BA33-CE71-4775-AD78-1114696BFEC8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "google", "google\google.vcproj", "{607FAED5-B750-44D2-A817-0FDF4F77744C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "notify", "notify\notify.vcproj", "{1EFD2CA7-86AF-4F66-9930-978D5A881949}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yahoo", "yahoo\yahoo.vcproj", "{9B7A5827-9F06-4B7F-B8E3-233E9350C258}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking", "echo_blocking\echo_blocking.vcproj", "{76F139F5-913A-4328-8504-B1E9B7F1BA97}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_addr", "echo_blocking_addr\echo_blocking_addr.vcproj", "{DDBF66ED-91FA-48ED-B23D-437473C52C0A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_blocking_dual", "echo_blocking_dual\echo_blocking_dual.vcproj", "{584804F3-344F-4850-899C-85E1998694F8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_non_blocking", "echo_non_blocking\echo_non_blocking.vcproj", "{62DB83C4-A2FA-45AF-B2F2-A737443AD473}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_non_blocking_dual", "echo_non_blocking_dual\echo_non_blocking_dual.vcproj", "{9C1140F6-1846-4335-B571-83E2C9FF6E02}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo_rest", "echo_rest\echo_rest.vcproj", "{84518230-9F6F-4B1E-B4B4-9F78D27355AC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {57414A3E-782C-4472-9EEE-981EF0649258}.Debug|Win32.ActiveCfg = Debug|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Debug|Win32.Build.0 = Debug|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Release|Win32.ActiveCfg = Release|Win32 + {57414A3E-782C-4472-9EEE-981EF0649258}.Release|Win32.Build.0 = Release|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Debug|Win32.ActiveCfg = Debug|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Debug|Win32.Build.0 = Debug|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Release|Win32.ActiveCfg = Release|Win32 + {9EA3CB05-003C-410C-A4F2-B0DB7F01645D}.Release|Win32.Build.0 = Release|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Debug|Win32.ActiveCfg = Debug|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Debug|Win32.Build.0 = Debug|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Release|Win32.ActiveCfg = Release|Win32 + {9121BA33-CE71-4775-AD78-1114696BFEC8}.Release|Win32.Build.0 = Release|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Debug|Win32.ActiveCfg = Debug|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Debug|Win32.Build.0 = Debug|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Release|Win32.ActiveCfg = Release|Win32 + {607FAED5-B750-44D2-A817-0FDF4F77744C}.Release|Win32.Build.0 = Release|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Debug|Win32.ActiveCfg = Debug|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Debug|Win32.Build.0 = Debug|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Release|Win32.ActiveCfg = Release|Win32 + {1EFD2CA7-86AF-4F66-9930-978D5A881949}.Release|Win32.Build.0 = Release|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Debug|Win32.ActiveCfg = Debug|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Debug|Win32.Build.0 = Debug|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Release|Win32.ActiveCfg = Release|Win32 + {9B7A5827-9F06-4B7F-B8E3-233E9350C258}.Release|Win32.Build.0 = Release|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Debug|Win32.ActiveCfg = Debug|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Debug|Win32.Build.0 = Debug|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Release|Win32.ActiveCfg = Release|Win32 + {76F139F5-913A-4328-8504-B1E9B7F1BA97}.Release|Win32.Build.0 = Release|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Debug|Win32.ActiveCfg = Debug|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Debug|Win32.Build.0 = Debug|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Release|Win32.ActiveCfg = Release|Win32 + {DDBF66ED-91FA-48ED-B23D-437473C52C0A}.Release|Win32.Build.0 = Release|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Debug|Win32.ActiveCfg = Debug|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Debug|Win32.Build.0 = Debug|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Release|Win32.ActiveCfg = Release|Win32 + {584804F3-344F-4850-899C-85E1998694F8}.Release|Win32.Build.0 = Release|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Debug|Win32.ActiveCfg = Debug|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Debug|Win32.Build.0 = Debug|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Release|Win32.ActiveCfg = Release|Win32 + {62DB83C4-A2FA-45AF-B2F2-A737443AD473}.Release|Win32.Build.0 = Release|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Debug|Win32.Build.0 = Debug|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Release|Win32.ActiveCfg = Release|Win32 + {9C1140F6-1846-4335-B571-83E2C9FF6E02}.Release|Win32.Build.0 = Release|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Debug|Win32.ActiveCfg = Debug|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Debug|Win32.Build.0 = Debug|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Release|Win32.ActiveCfg = Release|Win32 + {84518230-9F6F-4B1E-B4B4-9F78D27355AC}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ides/vc9/samples/clients/echo/echo.vcproj b/ides/vc9/samples/clients/echo/echo.vcproj new file mode 100644 index 0000000..26b475a --- /dev/null +++ b/ides/vc9/samples/clients/echo/echo.vcproj @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/clients/echo_blocking/echo_blocking.vcproj b/ides/vc9/samples/clients/echo_blocking/echo_blocking.vcproj new file mode 100644 index 0000000..52c38f2 --- /dev/null +++ b/ides/vc9/samples/clients/echo_blocking/echo_blocking.vcproj @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/clients/echo_blocking_addr/echo_blocking_addr.vcproj b/ides/vc9/samples/clients/echo_blocking_addr/echo_blocking_addr.vcproj new file mode 100644 index 0000000..f63d4aa --- /dev/null +++ b/ides/vc9/samples/clients/echo_blocking_addr/echo_blocking_addr.vcproj @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/clients/echo_blocking_dual/echo_blocking_dual.vcproj b/ides/vc9/samples/clients/echo_blocking_dual/echo_blocking_dual.vcproj new file mode 100644 index 0000000..43f9528 --- /dev/null +++ b/ides/vc9/samples/clients/echo_blocking_dual/echo_blocking_dual.vcproj @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/clients/echo_non_blocking/echo_non_blocking.vcproj b/ides/vc9/samples/clients/echo_non_blocking/echo_non_blocking.vcproj new file mode 100644 index 0000000..80b1c03 --- /dev/null +++ b/ides/vc9/samples/clients/echo_non_blocking/echo_non_blocking.vcproj @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj b/ides/vc9/samples/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj new file mode 100644 index 0000000..72032fd --- /dev/null +++ b/ides/vc9/samples/clients/echo_non_blocking_dual/echo_non_blocking_dual.vcproj @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/clients/echo_rest/echo_rest.vcproj b/ides/vc9/samples/clients/echo_rest/echo_rest.vcproj new file mode 100644 index 0000000..81ae89f --- /dev/null +++ b/ides/vc9/samples/clients/echo_rest/echo_rest.vcproj @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/clients/google/google.vcproj b/ides/vc9/samples/clients/google/google.vcproj new file mode 100644 index 0000000..ef3d04e --- /dev/null +++ b/ides/vc9/samples/clients/google/google.vcproj @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/clients/math/math.vcproj b/ides/vc9/samples/clients/math/math.vcproj new file mode 100644 index 0000000..ab16db5 --- /dev/null +++ b/ides/vc9/samples/clients/math/math.vcproj @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/clients/mtom/mtom.vcproj b/ides/vc9/samples/clients/mtom/mtom.vcproj new file mode 100644 index 0000000..6aa7b43 --- /dev/null +++ b/ides/vc9/samples/clients/mtom/mtom.vcproj @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/clients/notify/notify.vcproj b/ides/vc9/samples/clients/notify/notify.vcproj new file mode 100644 index 0000000..50a31b9 --- /dev/null +++ b/ides/vc9/samples/clients/notify/notify.vcproj @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/clients/yahoo/yahoo.vcproj b/ides/vc9/samples/clients/yahoo/yahoo.vcproj new file mode 100644 index 0000000..4649fd9 --- /dev/null +++ b/ides/vc9/samples/clients/yahoo/yahoo.vcproj @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/services/Calculator/Calculator.vcproj b/ides/vc9/samples/services/Calculator/Calculator.vcproj new file mode 100644 index 0000000..5467648 --- /dev/null +++ b/ides/vc9/samples/services/Calculator/Calculator.vcproj @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/services/echo/echo.vcproj b/ides/vc9/samples/services/echo/echo.vcproj new file mode 100644 index 0000000..1822428 --- /dev/null +++ b/ides/vc9/samples/services/echo/echo.vcproj @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/services/math/math.vcproj b/ides/vc9/samples/services/math/math.vcproj new file mode 100644 index 0000000..0b1d7a0 --- /dev/null +++ b/ides/vc9/samples/services/math/math.vcproj @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/services/mtom/mtom.vcproj b/ides/vc9/samples/services/mtom/mtom.vcproj new file mode 100644 index 0000000..45608d9 --- /dev/null +++ b/ides/vc9/samples/services/mtom/mtom.vcproj @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/services/notify/notify.vcproj b/ides/vc9/samples/services/notify/notify.vcproj new file mode 100644 index 0000000..6a742a7 --- /dev/null +++ b/ides/vc9/samples/services/notify/notify.vcproj @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ides/vc9/samples/services/services.sln b/ides/vc9/samples/services/services.sln new file mode 100644 index 0000000..c9638a4 --- /dev/null +++ b/ides/vc9/samples/services/services.sln @@ -0,0 +1,44 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Calculator", "Calculator\Calculator.vcproj", "{1917F167-8C7F-4920-934D-BDAA2E6DC024}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echo", "echo\echo.vcproj", "{0469C145-5B1A-4677-B0C2-0981EB6C0567}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "math", "math\math.vcproj", "{8209506A-634F-4239-82D0-3EC9105FEBA4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mtom", "mtom\mtom.vcproj", "{C8BDF683-7F8E-4526-9193-836DD90714CC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "notify", "notify\notify.vcproj", "{23D5F8E4-F554-451F-B97D-F0CD82272229}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Debug|Win32.ActiveCfg = Debug|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Debug|Win32.Build.0 = Debug|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Release|Win32.ActiveCfg = Release|Win32 + {1917F167-8C7F-4920-934D-BDAA2E6DC024}.Release|Win32.Build.0 = Release|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Debug|Win32.ActiveCfg = Debug|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Debug|Win32.Build.0 = Debug|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Release|Win32.ActiveCfg = Release|Win32 + {0469C145-5B1A-4677-B0C2-0981EB6C0567}.Release|Win32.Build.0 = Release|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Debug|Win32.ActiveCfg = Debug|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Debug|Win32.Build.0 = Debug|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Release|Win32.ActiveCfg = Release|Win32 + {8209506A-634F-4239-82D0-3EC9105FEBA4}.Release|Win32.Build.0 = Release|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Debug|Win32.Build.0 = Debug|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Release|Win32.ActiveCfg = Release|Win32 + {C8BDF683-7F8E-4526-9193-836DD90714CC}.Release|Win32.Build.0 = Release|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Debug|Win32.ActiveCfg = Debug|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Debug|Win32.Build.0 = Debug|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Release|Win32.ActiveCfg = Release|Win32 + {23D5F8E4-F554-451F-B97D-F0CD82272229}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/include/Makefile.am b/include/Makefile.am new file mode 100644 index 0000000..e7c4de3 --- /dev/null +++ b/include/Makefile.am @@ -0,0 +1 @@ +TESTS= diff --git a/include/axis2_addr.h b/include/axis2_addr.h new file mode 100644 index 0000000..32521bd --- /dev/null +++ b/include/axis2_addr.h @@ -0,0 +1,173 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_ADDR_H +#define AXIS2_ADDR_H + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axis2_addr WS-Addressing + * @ingroup axis2 + * @{ + * @} + */ + + /** + * @defgroup axis2_addr_consts WS-Addressing related constants + * @ingroup axis2_addr + * @{ + */ + + /** @file axis2_addr.h */ + + /* ====================== Common Message Addressing Properties =========== */ + + /** WS-Addressing Message ID */ +#define AXIS2_WSA_MESSAGE_ID "MessageID" + + /** WS-Addressing Relates To */ +#define AXIS2_WSA_RELATES_TO "RelatesTo" + + /** WS-Addressing Relates To Relationship Type */ +#define AXIS2_WSA_RELATES_TO_RELATIONSHIP_TYPE "RelationshipType" + + /** WS-Addressing To */ +#define AXIS2_WSA_TO "To" + + /** WS-Addressing From */ +#define AXIS2_WSA_FROM "From" + + /** WS-Addressing Reply To */ +#define AXIS2_WSA_REPLY_TO "ReplyTo" + + /** WS-Addressing Fault To */ +#define AXIS2_WSA_FAULT_TO "FaultTo" + + /** WS-Addressing Action */ +#define AXIS2_WSA_ACTION "Action" + + /** WS-Addressing Mapping */ +#define AXIS2_WSA_MAPPING "wsamapping" + + /* ====================== Common EPR Elements ============================ */ + + /** End Pointer Reference Address */ +#define EPR_ADDRESS "Address" + + /** End Pointer Reference Reference Parameters */ +#define EPR_REFERENCE_PARAMETERS "ReferenceParameters" + + /** End Pointer Reference Service Name */ +#define EPR_SERVICE_NAME "ServiceName" + + /** End Pointer Reference Reference Properties */ +#define EPR_REFERENCE_PROPERTIES "ReferenceProperties" + + /** End Pointer Reference Port Type */ +#define EPR_PORT_TYPE "PortType" + + /** End Pointer Reference Port Name */ +#define EPR_SERVICE_NAME_PORT_NAME "PortName" + + /* ====================== Addressing Submission Version Constants ======== */ + + /** WS-Addressing Namespace for Submission Version */ +#define AXIS2_WSA_NAMESPACE_SUBMISSION "http://schemas.xmlsoap.org/ws/2004/08/addressing" + + /** WS-Addressing Relates To Relationship Type Default Value for Submission Version */ +#define AXIS2_WSA_RELATES_TO_RELATIONSHIP_TYPE_DEFAULT_VALUE_SUBMISSION "wsa:Reply" + + /** WS-Addressing Anonymous URL for Submission Version */ +#define AXIS2_WSA_ANONYMOUS_URL_SUBMISSION "http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous" + + /** WS-Addressing None URL for Submission Version */ +#define AXIS2_WSA_NONE_URL_SUBMISSION "http://schemas.xmlsoap.org/ws/2004/08/addressing/role/none" + + /* =====================Addressing 1.0 Final Version Constants =========== */ + + /** WS-Addressing Namespace for 1.0 Final Version */ +#define AXIS2_WSA_NAMESPACE "http://www.w3.org/2005/08/addressing" + + /** WS-Addressing Relates To Relationship Type Default Value for 1.0 Final Version */ +#define AXIS2_WSA_RELATES_TO_RELATIONSHIP_TYPE_DEFAULT_VALUE "http://www.w3.org/2005/08/addressing/reply" + + /** WS-Addressing Anonymous URL for 1.0 Final Version */ +#define AXIS2_WSA_ANONYMOUS_URL "http://www.w3.org/2005/08/addressing/anonymous" + + /** WS-Addressing None URL for 1.0 Final Version */ +#define AXIS2_WSA_NONE_URL "http://www.w3.org/2005/08/addressing/none" + + /* ======================================================================= */ + + /** WS-Addressing Is Reference Parameter Attribute */ +#define AXIS2_WSA_IS_REFERENCE_PARAMETER_ATTRIBUTE "IsReferenceParameter" + + /** WS-Addressing Type Attribute Value */ +#define AXIS2_WSA_TYPE_ATTRIBUTE_VALUE "true" + + /** WS-Addressing Interface Name */ +#define AXIS2_WSA_INTERFACE_NAME "InterfaceName" + + /** WS-Addressing Service/Endpoint Name */ +#define AXIS2_WSA_SERVICE_NAME_ENDPOINT_NAME "EndpointName" + + /** WS-Addressing Policies */ +#define AXIS2_WSA_POLICIES "Policies" + + /** WS-Addressing Metadata */ +#define AXIS2_WSA_METADATA "Metadata" + + /* ======================================================================= */ + + /** WS-Addressing Version */ +#define AXIS2_WSA_VERSION "WSAddressingVersion" + + /** WS-Addressing Default Prefix */ +#define AXIS2_WSA_DEFAULT_PREFIX "wsa" + + /** WS-Addressing Prefixes for faults*/ +#define AXIS2_WSA_PREFIX_FAULT_TO AXIS2_WSA_DEFAULT_PREFIX":"AXIS2_WSA_FAULT_TO + + /** WS-Addressing Prefixes for faults*/ +#define AXIS2_WSA_PREFIX_REPLY_TO AXIS2_WSA_DEFAULT_PREFIX":"AXIS2_WSA_REPLY_TO + + /** WS-Addressing Prefixes for faults*/ +#define AXIS2_WSA_PREFIX_TO AXIS2_WSA_DEFAULT_PREFIX":"AXIS2_WSA_TO + + /** WS-Addressing Prefixes for faults*/ +#define AXIS2_WSA_PREFIX_MESSAGE_ID AXIS2_WSA_DEFAULT_PREFIX":"AXIS2_WSA_MESSAGE_ID + + /** WS-Addressing Prefixes for faults*/ +#define AXIS2_WSA_PREFIX_ACTION AXIS2_WSA_DEFAULT_PREFIX":"AXIS2_WSA_ACTION + + /* ======================================================================= */ + + /** WS-Addressing Param Service Group Context ID */ +#define PARAM_SERVICE_GROUP_CONTEXT_ID "ServiceGroupContextIdFromAddressing" + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_ADDR_H */ diff --git a/include/axis2_addr_mod.h b/include/axis2_addr_mod.h new file mode 100644 index 0000000..be7ad00 --- /dev/null +++ b/include/axis2_addr_mod.h @@ -0,0 +1,77 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_ADDR_MOD_H +#define AXIS2_ADDR_MOD_H + + /** + * @defgroup axis2_mod_addr WS-Addressing Module + * @ingroup axis2 + * @{ + * @} + */ + + /** + * @defgroup axis2_addr_mod addressing module interface + * @ingroup axis2_mod_addr + * @{ + */ + + /** + * @file axis2_addr_mod.h + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define ADDR_IN_HANDLER "AddressingInHandler" +#define ADDR_OUT_HANDLER "AddressingOutHandler" + +/** + * Creates Addressing in handler + * @param env pointer to environment struct + * @param name name of handler + * @return returns reference to handler created + */ + AXIS2_EXTERN axis2_handler_t *AXIS2_CALL + axis2_addr_in_handler_create( + const axutil_env_t * env, + axutil_string_t * name); + + /** + * Creates Addressing out handler + * @param env pointer to environment struct + * @param name name of handler + * @return returns reference to handler created + */ + AXIS2_EXTERN axis2_handler_t *AXIS2_CALL + axis2_addr_out_handler_create( + const axutil_env_t * env, + axutil_string_t * name); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_ADDR_MOD_H */ diff --git a/include/axis2_any_content_type.h b/include/axis2_any_content_type.h new file mode 100644 index 0000000..eff890f --- /dev/null +++ b/include/axis2_any_content_type.h @@ -0,0 +1,117 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_ANY_CONTENT_TYPE_H +#define AXIS2_ANY_CONTENT_TYPE_H + +/** + * @defgroup axis2_any_content_type any content type + * @ingroup axis2_addr + * any content type acts as a container for any type reference parameters that + * could be associated with an endpoint reference. The values in the map are + * stored in string format, with QNames as key values. + * @{ + */ + +/** + * @file axis2_any_content_type.h + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for axis2_any_content_type */ + typedef struct axis2_any_content_type axis2_any_content_type_t; + + /** + * Creates an instance of any content type struct. + * @param env pointer to environment struct + * @return pointer to the newly created any content type instance + */ + AXIS2_EXTERN axis2_any_content_type_t *AXIS2_CALL + axis2_any_content_type_create( + const axutil_env_t * env); + + /** + * Adds given value to content value map with given QName. + * @param any_content_type pointer to any content type struct + * @param env pointer to environment struct + * @param qname pointer to QName to be used as key + * @param value value string to be added + * @return AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_any_content_type_add_value( + axis2_any_content_type_t * any_content_type, + const axutil_env_t * env, + const axutil_qname_t * qname, + const axis2_char_t * value); + + /** + * Gets the value corresponding to the given QName from the content + * value map. + * @param any_content_type pointer to any content type struct + * @param env pointer to environment struct + * @param qname pointer to QName of the corresponding value to be + * retrieved + * @return value string if present, else returns NULL + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_any_content_type_get_value( + const axis2_any_content_type_t * any_content_type, + const axutil_env_t * env, + const axutil_qname_t * qname); + + /** + * Gets the map of all values. + * @param any_content_type pointer to any content type struct + * @param env pointer to environment struct + * @return pointer to hash table containing all values, returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_any_content_type_get_value_map( + const axis2_any_content_type_t * any_content_type, + const axutil_env_t * env); + + /** + * Frees any content type struct. + * @param any_content_type pointer to any content type struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_any_content_type_free( + axis2_any_content_type_t * any_content_type, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_ANY_CONTENT_TYPE_H */ diff --git a/include/axis2_async_result.h b/include/axis2_async_result.h new file mode 100644 index 0000000..bd6e3d3 --- /dev/null +++ b/include/axis2_async_result.h @@ -0,0 +1,98 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_ASYNC_RESULT_H +#define AXIS2_ASYNC_RESULT_H + +/** + * @defgroup axis2_async_result async result + * @ingroup axis2_client_api + * async_result is used to capture the result of an asynchronous invocation. + * async_result stores the result in the form of a message context instance, + * the user can extract the resulting SOAP envelope from this message context. + * @{ + */ + +/** + * @file axis2_async_result.h + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_async_result */ + typedef struct axis2_async_result axis2_async_result_t; + + /** + * Gets the SOAP envelope stored inside the resulting message context. + * @param async_result pointer to async result struct + * @param env pointer to environment struct + * @return pointer to the result SOAP envelope in the message context. + */ + AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL + axis2_async_result_get_envelope( + axis2_async_result_t * async_result, + const axutil_env_t * env); + + /** + * Gets the result in the form of message context. + * @param async_result pointer to async result struct + * @param env pointer to environment struct + * @return pointer to result message context + */ + AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL + axis2_async_result_get_result( + axis2_async_result_t * async_result, + const axutil_env_t * env); + + /** + * Frees the async result. + * @param async_result pointer to async result struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_async_result_free( + axis2_async_result_t * async_result, + const axutil_env_t * env); + + /** Creates an async result struct to help deal with results of asynchronous + * invocations. + * @param env pointer to environment struct + * @param result pointer to result message context into which the resulting + * SOAP message is to be captured + * @return newly created async_result struct + */ + AXIS2_EXTERN axis2_async_result_t *AXIS2_CALL + axis2_async_result_create( + const axutil_env_t * env, + axis2_msg_ctx_t * result); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_ASYNC_RESULT_H */ diff --git a/include/axis2_callback.h b/include/axis2_callback.h new file mode 100644 index 0000000..84d0906 --- /dev/null +++ b/include/axis2_callback.h @@ -0,0 +1,263 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_CALLBACK_H +#define AXIS2_CALLBACK_H + +/** + * @defgroup axis2_callback callback + * @ingroup axis2_client_api + * callback represents the callback mechanisms to be used in case of asynchronous + * invocations. It holds the complete status of the invocation, the resulting + * SOAP envelope and also callback specific data. One can define a function + * to be called on complete of the callback as well as a function to be called + * on error. + * @{ + */ + +/** + * @file axis2_callback.h + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for axis2_callback */ + typedef struct axis2_callback axis2_callback_t; + + /** Type name for function pointer to be called on complete of callback */ + typedef axis2_status_t AXIS2_CALL + axis2_on_complete_func_ptr( + axis2_callback_t *, + const axutil_env_t *); + + /** Type name for function pointer to be called on error of callback */ + typedef axis2_status_t AXIS2_CALL + axis2_on_error_func_ptr( + axis2_callback_t *, + const axutil_env_t *, + int); + + /** + * This function is called once the asynchronous operation is successfully + * completed and the result is available. + * @param callback pointer to callback struct + * @param env pointer to environment struct + * @param result pointer to async result + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_callback_invoke_on_complete( + axis2_callback_t * callback, + const axutil_env_t * env, + axis2_async_result_t * result); + + /** + * This function is called once the asynchronous operation fails and + * the failure code returns. + * @param callback pointer to callback struct + * @param env pointer to environment struct + * @param exception error code representing the error + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_callback_report_error( + axis2_callback_t * callback, + const axutil_env_t * env, + const int exception); + + /** + * Gets the complete status for the callback. This method is useful + * for polling (busy waiting). + * e.g. + * + *
+     *          while(!axis2_callback_get_complete(callback, env)
+     *          {
+     *             sleep(10);
+     *          }
+     * do whatever you need here 
+     *      
+ *
+ * @param callback pointer to callback struct + * @param env pointer to environment struct + * @return AXIS2_TRUE if callback is complete, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_callback_get_complete( + const axis2_callback_t * callback, + const axutil_env_t * env); + + /** + * Sets the complete status. + * @param callback pointer to callback struct + * @param env pointer to environment struct + * @param complete bool value representing the status + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_callback_set_complete( + axis2_callback_t * callback, + const axutil_env_t * env, + const axis2_bool_t complete); + + /** + * Gets the resulting SOAP envelope. + * @param callback pointer to callback struct + * @param env pointer to environment struct + * @return result SOAP envelope if present, else NULL + */ + AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL + axis2_callback_get_envelope( + const axis2_callback_t * callback, + const axutil_env_t * env); + + /** + * Sets the SOAP envelope. + * @param callback pointer to callback struct + * @param env pointer to environment struct + * @param envelope pointer to SOAP envelope + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_callback_set_envelope( + axis2_callback_t * callback, + const axutil_env_t * env, + axiom_soap_envelope_t * envelope); + + /** + * Gets the resulting message context. + * @param callback pointer to callback struct + * @param env pointer to environment struct + * @return result message context if present, else NULL + */ + AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL + axis2_callback_get_msg_ctx( + const axis2_callback_t * callback, + const axutil_env_t * env); + + /** + * Sets the message context. + * @param callback pointer to callback struct + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_callback_set_msg_ctx( + axis2_callback_t * callback, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * Gets error code representing the error. + * @param callback pointer to callback struct + * @param env pointer to environment struct + * @return error code representing the error + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_callback_get_error( + const axis2_callback_t * callback, + const axutil_env_t * env); + + /** + * Sets the error code. + * @param callback pointer to callback struct + * @param env pointer to environment struct + * @param error error code representing the error + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_callback_set_error( + axis2_callback_t * callback, + const axutil_env_t * env, + const int error); + + /** + * Sets the callback data. + * @param callback pointer to callback struct + * @param data pointer to data + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_callback_set_data( + axis2_callback_t * callback, + void *data); + + /** + * Gets the callback data. + * @param callback pointer to callback struct + * @return pointer to callback data + */ + AXIS2_EXTERN void *AXIS2_CALL + axis2_callback_get_data( + const axis2_callback_t * callback); + + /** + * Sets the on complete callback function. + * @param callback pointer to callback struct + * @param f on complete callback function pointer + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_callback_set_on_complete( + axis2_callback_t * callback, + axis2_on_complete_func_ptr f); + + /** + * Sets the on error callback function. + * @param callback pointer to callback struct + * @param f on error callback function pointer + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_callback_set_on_error( + axis2_callback_t * callback, + axis2_on_error_func_ptr f); + + /** + * Frees callback struct. + * @param callback pointer to callback struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_callback_free( + axis2_callback_t * callback, + const axutil_env_t * env); + + /** + * Creates a callback struct. + * @param env pointer to environment struct + * @return pointer to newly created callback struct + */ + AXIS2_EXTERN axis2_callback_t *AXIS2_CALL + axis2_callback_create( + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_CALL_BACK_H */ diff --git a/include/axis2_callback_recv.h b/include/axis2_callback_recv.h new file mode 100644 index 0000000..0192c63 --- /dev/null +++ b/include/axis2_callback_recv.h @@ -0,0 +1,117 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_CALLBACK_RECV_H +#define AXIS2_CALLBACK_RECV_H + +/** + * @defgroup axis2_callback_recv callback message receiver. This can be considered as a + * message receiver implementation for application client side which is similar to + * server side message receivers like raw_xml_in_out_msg_recv. Messages received by + * listener manager will finally end up here. + * + * @ingroup axis2_client_api + * callback message receiver, that is used as the message receiver in the + * operation in case of asynchronous invocation for receiving the result. + */ + +/** + * @file axis2_axis2_callback_recv.h + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_callback_recv */ + typedef struct axis2_callback_recv axis2_callback_recv_t; + + /** + * Gets the base struct which is of type message receiver. + * @param callback_recv pointer to callback receiver struct + * @param env pointer to environment struct + * @return pointer to base message receiver struct + */ + AXIS2_EXTERN axis2_msg_recv_t *AXIS2_CALL + axis2_callback_recv_get_base( + axis2_callback_recv_t * callback_recv, + const axutil_env_t * env); + + /** + * Frees the callback receiver struct. + * @param callback_recv pointer to callback receiver struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_callback_recv_free( + axis2_callback_recv_t * callback_recv, + const axutil_env_t * env); + + /** + * Adds a callback corresponding to given WSA message ID to message + * receiver. + * @param callback_recv pointer to callback receiver struct + * @param env pointer to environment struct + * @param msg_id message ID indicating which message the callback is + * supposed to deal with + * @param callback callback to be added. callback receiver assumes + * ownership of the callback + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_callback_recv_add_callback( + struct axis2_callback_recv *callback_recv, + const axutil_env_t * env, + const axis2_char_t * msg_id, + axis2_callback_t * callback); + + /** + * Creates a callback receiver struct. + * @param env pointer to environment struct + * @return a pointer to newly created callback receiver struct, + * or NULL on error with error code set in environment's error + */ + AXIS2_EXTERN axis2_callback_recv_t *AXIS2_CALL + axis2_callback_recv_create( + const axutil_env_t * env); + + /** Gets the base message receiver. */ +#define AXIS2_CALLBACK_RECV_GET_BASE(callback_recv, env) \ + axis2_callback_recv_get_base(callback_recv, env) + + /** Frees callback message receiver. */ +#define AXIS2_CALLBACK_RECV_FREE(callback_recv, env) \ + axis2_callback_recv_free(callback_recv, env) + + /** Adds callback to callback message receiver. */ +#define AXIS2_CALLBACK_RECV_ADD_CALLBACK(callback_recv, env, msg_id, callback)\ + axis2_callback_recv_add_callback(callback_recv, env, msg_id, callback) + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_CALLBACK_RECV_H */ diff --git a/include/axis2_client.h b/include/axis2_client.h new file mode 100644 index 0000000..d31ab74 --- /dev/null +++ b/include/axis2_client.h @@ -0,0 +1,44 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_CLIENT_H +#define AXIS2_CLIENT_H + +/** + * @file axis2_clinet.h + * @brief + */ + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_CLIENT_H */ diff --git a/include/axis2_conf.h b/include/axis2_conf.h new file mode 100644 index 0000000..f525603 --- /dev/null +++ b/include/axis2_conf.h @@ -0,0 +1,822 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_CONFIG_H +#define AXIS2_CONFIG_H + +/** + * @defgroup axis2_engine engine + * @ingroup axis2 + * @{ + * @} + */ + +/** + * @defgroup axis2_config configuration + * @ingroup axis2_engine + * Axis2 configuration captures all configuration information. Configuration + * information includes user preferences along with module and + * service information that is either statically configured using axis2.xml + * file, service.xml files and module.xml files or dynamically using the + * functions defined in the ops struct related to this conf struct. + * @{ + */ + +/** + * @file axis2_config.h + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_conf */ + typedef struct axis2_conf axis2_conf_t; + + struct axis2_msg_recv; + struct axis2_phases_info; + struct axis2_svc_grp; + struct axis2_svc; + struct axis2_op; + struct axis2_dep_engine; + struct axis2_desp; + + /** + * Frees conf struct. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_conf_free( + axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Adds a service group to the configuration. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param svc_grp pointer to service group, conf takes over the + * ownership of the service group + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_add_svc_grp( + axis2_conf_t * conf, + const axutil_env_t * env, + struct axis2_svc_grp *svc_grp); + + /** + * Gets a named service group. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param svc_grp_name name of the service group to be accessed + * @return pointer to service group with the given name if exists, + * else NULL. Returns a reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_svc_grp *AXIS2_CALL + axis2_conf_get_svc_grp( + const axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * svc_grp_name); + + /** + * Gets all service group added to conf. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return pointer to hash table containing the service groups, returns + * a reference, not a cloned copy + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_conf_get_all_svc_grps( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Adds a service to configuration. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param svc pointer to service, conf takes over the ownership of the + * service + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_add_svc( + axis2_conf_t * conf, + const axutil_env_t * env, + struct axis2_svc *svc); + + /** + * Gets a service with given name. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param svc_name service name string + * @return pointer to service with the given name if exists, else NULL. + * Returns a reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_svc *AXIS2_CALL + axis2_conf_get_svc( + const axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * svc_name); + + /** + * Removes the named service from configuration. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param name name of service to be removed + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_remove_svc( + axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * name); + + /** + * Adds a parameter to configuration. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param param pointer to parameter struct to be added + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_add_param( + axis2_conf_t * conf, + const axutil_env_t * env, + axutil_param_t * param); + + /** + * Gets a parameter with the given name. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param name name of the parameter to be accessed + * @return pointer to parameter with the given name if exists, else NULL. + * Returns a reference, not a cloned copy + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + axis2_conf_get_param( + const axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * name); + + /** + * Gets all the parameters added to the configuration. + * @param conf pointer to conf struct + * @param env pointer to environment + * @return pointer to array list containing parameters if exists, + * else NULL. Returns a reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_conf_get_all_params( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Checks if the named parameter is locked. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param param_name name of the parameter + * @return AXIS2_TRUE if parameter is locked, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_conf_is_param_locked( + const axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * param_name); + + /** + * Gets in transport corresponding to the given transport QName. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param qname QName of transport + * @return pointer to transport in description if exists, + * else NULL. Returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_transport_in_desc_t *AXIS2_CALL + + axis2_conf_get_transport_in( + const axis2_conf_t * conf, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS trans_enum); + + /** + * Adds a transport in description. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param transport pointer to transport in description. conf assumes + * ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_add_transport_in( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_transport_in_desc_t * transport, + const AXIS2_TRANSPORT_ENUMS trans_enum); + + /** + * Gets out transport corresponding to the given transport QName. + * @param conf pointer to conf struct + * @param env pointer to environment strcut + * @param qname pointer to transport qname + * @return pointer to transport out description if exists, + * else NULL. Returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_transport_out_desc_t *AXIS2_CALL + + axis2_conf_get_transport_out( + const axis2_conf_t * conf, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS trans_enum); + + /** + * Adds a transport out description. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param transport pointer to transport out description. conf assumes + * ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_add_transport_out( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_transport_out_desc_t * transport, + const AXIS2_TRANSPORT_ENUMS trans_enum); + + /** + * Gets all in transports. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return hash table containing all transport in descriptions. + * Returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_transport_in_desc_t **AXIS2_CALL + + axis2_conf_get_all_in_transports( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Gets all out transports. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return hash table containing all transport out descriptions. + * Returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_transport_out_desc_t **AXIS2_CALL + + axis2_conf_get_all_out_transports( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Gets a module with given QName. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param qname pointer to qname + * @return module description corresponding to the given qname + */ + AXIS2_EXTERN struct axis2_module_desc *AXIS2_CALL + axis2_conf_get_module( + const axis2_conf_t * conf, + const axutil_env_t * env, + const axutil_qname_t * qname); + + /** + * Gets the list of engaged modules. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return a pointer to the array list of engaged modules. Returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_conf_get_all_engaged_modules( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Gets the in phases up to and including port dispatch phase. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return a pointer to the array list of in phases up to post dispatch + * inclusive. Returns a reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_conf_get_in_phases_upto_and_including_post_dispatch( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Gets the out flow. Out flow is a list of phases invoked in the out + * path of execution of the engine. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return a pointer to the array list of out flow phases. Returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_conf_get_out_flow( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Gets the in fault flow. In fault flow is a list of phases invoked in + * the in path of execution, if some fault happens. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return a pointer to the array list of in fault flow phases. Returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_conf_get_in_fault_flow( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Gets the out fault flow. Out fault flow is a list of phases invoked in + * the out path of execution, if some fault happens. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return a pointer to the array list of out fault flow phases. Returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_conf_get_out_fault_flow( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Gets faulty services. A faulty service is a service that does not + * meet the service configuration criteria or a service with errors in + * the service dynamic link library. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return a pointer to the hash table of faulty services. Returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_conf_get_all_faulty_svcs( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Gets faulty modules. A faulty module is a module that does not + * meet the module configuration criteria or a module with errors in + * the service dynamic link library. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return a pointer to the hash table of faulty modules. Returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_conf_get_all_faulty_modules( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Gets all the list of services loaded into configuration. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return a pointer to the hash table of services. Returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_conf_get_all_svcs( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Gets all the list of services that need to be loaded into configuration + * at the start up of the axis2 engine. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return a pointer to the hash table of services. Returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_conf_get_all_svcs_to_load( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Checks is the named module is engaged. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param module_name pointer to QName representing the module name + * @return AXIS2_TRUE if named module is engaged, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_conf_is_engaged( + axis2_conf_t * conf, + const axutil_env_t * env, + const axutil_qname_t * module_name); + + /** + * Gets phases information struct. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return a pointer to the struct containing phases information. + * Returns a reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_phases_info *AXIS2_CALL + + axis2_conf_get_phases_info( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Sets phases information struct. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param phases_info pointer to phases_info struct. conf assumes + * ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_set_phases_info( + axis2_conf_t * conf, + const axutil_env_t * env, + struct axis2_phases_info *phases_info); + + /** + * Adds message receiver with the given key. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param key key string with which the message receive is to be added + * @param msg_recv pointer to message receiver + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_add_msg_recv( + axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * key, + struct axis2_msg_recv *msg_recv); + + /** + * Gets message receiver with the given key. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param key key string corresponding to the message receiver to + * be retrieved + * @return pointer to the message receiver with the given key if it + * exists, else null. Returns a reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_msg_recv *AXIS2_CALL + axis2_conf_get_msg_recv( + const axis2_conf_t * conf, + const axutil_env_t * env, + axis2_char_t * key); + + /** + * Sets the list of out phases. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param out_phases pointer to array list of the phases. conf assumes + * ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_set_out_phases( + axis2_conf_t * conf, + const axutil_env_t * env, + axutil_array_list_t * out_phases); + + /** + * Gets the list of out phases. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return pointer to array list of out phases. Returns a reference, + * not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_conf_get_out_phases( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Sets fault phases for in path. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param list pointer to array list of phases + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_set_in_fault_phases( + axis2_conf_t * conf, + const axutil_env_t * env, + axutil_array_list_t * list); + + /** + * Sets fault phases for out path. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param list pointer to array list of phases + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_set_out_fault_phases( + axis2_conf_t * conf, + const axutil_env_t * env, + axutil_array_list_t * list); + + /** + * Gets all modules configured, + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return a pointer to hash table containing the list of modules. + * Returns a reference, not a cloned copy + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_conf_get_all_modules( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Adds a module. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param module pointer to module struct to be added + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_add_module( + axis2_conf_t * conf, + const axutil_env_t * env, + struct axis2_module_desc *module); + + /** + * Sets the default dispatchers. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_conf_set_default_dispatchers( + axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Sets a custom dispatching phase. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param dispatch pointer to phase to be dispatched + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_set_dispatch_phase( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_phase_t * dispatch); + + /** + * Gets the repository location. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return returns repository location as a string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_conf_get_repo( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Sets the repository location. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param axis2_repo repository location as a string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_set_repo( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_char_t * axis2_repo); + + + /** + * Gets the axis2.xml location. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @return returns repository location as a string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_conf_get_axis2_xml( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Sets the axis2.xml location. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param axis2_xml repository location as a string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_set_axis2_xml( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_char_t * axis2_xml); + + /** + * Engages the named module. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param module_ref pointer to the QName of the module to be engaged + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_engage_module( + axis2_conf_t * conf, + const axutil_env_t * env, + const axutil_qname_t * module_ref); + + /** + * Sets the deployment engine. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param dep_engine pointer to dep_engine struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_set_dep_engine( + axis2_conf_t * conf, + const axutil_env_t * env, + struct axis2_dep_engine *dep_engine); + + /** + * Gets the default module version for the named module. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param module_name module name string + * @return default module version as a string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + + axis2_conf_get_default_module_version( + const axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * module_name); + + /** + * Gets the default module reference for the named module. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param module_name module name string + * @return pointer to the module description struct corresponding to + * the given name + */ + AXIS2_EXTERN struct axis2_module_desc *AXIS2_CALL + + axis2_conf_get_default_module( + const axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * module_name); + + /** + * Adds a default module version for the named module. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param module_name name of the module + * @param module_version default version for the module + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_conf_add_default_module_version( + axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * module_name, + const axis2_char_t * module_version); + + /** + * Engages the module with the given version. + * @param conf pointer to conf struct + * @param env pointer to environment struct + * @param module_name name of the module to be engaged + * @param version_id version of the module to be engaged + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_conf_engage_module_with_version( + axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * module_name, + const axis2_char_t * version_id); + + /** + * Creates configuration struct. + * @param env pointer to environment struct + * @return pointer to newly created configuration + */ + AXIS2_EXTERN axis2_conf_t *AXIS2_CALL + axis2_conf_create( + const axutil_env_t * env); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_conf_get_enable_mtom( + axis2_conf_t * conf, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_set_enable_mtom( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_bool_t enable_mtom); + + /** + * set a flag to mark conf created by axis2.xml + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_conf_get_axis2_flag( + axis2_conf_t * conf, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_set_axis2_flag( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_bool_t axis2_flag); + + /*The following two methods are used in Rampart to + *check whether security is engaed. */ + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_conf_get_enable_security( + axis2_conf_t * conf, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_set_enable_security( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_bool_t enable_security); + + AXIS2_EXTERN void *AXIS2_CALL + axis2_conf_get_security_context( + axis2_conf_t * conf, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_set_security_context( + axis2_conf_t * conf, + const axutil_env_t * env, + void *security_context); + + AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL + + axis2_conf_get_param_container( + const axis2_conf_t * conf, + const axutil_env_t * env); + + /** + * Gets base description. + * @param conf pointer to message + * @param env pointer to environment struct + * @return pointer to base description struct + */ + AXIS2_EXTERN axis2_desc_t *AXIS2_CALL + axis2_conf_get_base( + const axis2_conf_t * conf, + const axutil_env_t * env); + + AXIS2_EXTERN axutil_array_list_t * AXIS2_CALL + axis2_conf_get_handlers(const axis2_conf_t * conf, + const axutil_env_t * env); +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_CONFIG_H */ diff --git a/include/axis2_conf_ctx.h b/include/axis2_conf_ctx.h new file mode 100644 index 0000000..408e6a3 --- /dev/null +++ b/include/axis2_conf_ctx.h @@ -0,0 +1,327 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_CONF_CTX_H +#define AXIS2_CONF_CTX_H + +/** + * @defgroup axis2_conf_ctx configuration context + * @ingroup axis2_context + * configuration context is the holder for all the state information + * related to configuration. It holds all the service group context, service + * context and operation context that exists within an engine instance. + * An engine instance has only one configuration context associated with it + * (Singleton pattern). + * @{ + */ + +/** + * @file axis2_conf_ctx.h + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_conf_ctx */ + typedef struct axis2_conf_ctx axis2_conf_ctx_t; + + struct axis2_conf; + + /** + * Creates a configuration context struct instance. + * @param env pointer to environment struct + * @param conf pointer to configuration, configuration context assumes + * ownership of the configuration + * @return pointer to newly created configuration context + */ + AXIS2_EXTERN axis2_conf_ctx_t *AXIS2_CALL + axis2_conf_ctx_create( + const axutil_env_t * env, + struct axis2_conf *conf); + + /** + * Sets the configuration associated with the engine instance. + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @param conf pointer to configuration + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_ctx_set_conf( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + struct axis2_conf *conf); + + /** + * Gets the base struct, which is of type context + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @return pointer to context struct, returns a reference not a cloned + * copy + */ + AXIS2_EXTERN axis2_ctx_t *AXIS2_CALL + axis2_conf_ctx_get_base( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env); + + /** + * Gets the configuration of the engine. + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @return pointer to configuration struct, returns a reference not a + * cloned copy + */ + AXIS2_EXTERN axis2_conf_t *AXIS2_CALL + axis2_conf_ctx_get_conf( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env); + + /** + * Gets the hash map of operation context instances. + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @return pointer to hash map containing all operation contexts + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_conf_ctx_get_op_ctx_map( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env); + + /** + * Gets the hash map of service context instances. + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @return pointer to hash map containing all service contexts + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_conf_ctx_get_svc_ctx_map( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env); + + /** + * Gets the hash map of service group context instances. + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @return pointer to hash map containing all service group contexts + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_conf_ctx_get_svc_grp_ctx_map( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env); + + /** + * Registers an operation context with the given message ID. + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @param message_id message id related to the operation context + * @param op_ctx pointer to operation context, conf context assumes + * ownership of the operation context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_ctx_register_op_ctx( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * message_id, + axis2_op_ctx_t * op_ctx); + + /** + * Gets operation context corresponding to the given message ID. + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @param message_id message ID related to the operation to be retrieved + * @return pointer to operation context related to the given message ID + */ + AXIS2_EXTERN axis2_op_ctx_t *AXIS2_CALL + axis2_conf_ctx_get_op_ctx( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * message_id); + + /** + * Registers a service context with the given service ID. + * @param conf_ctx pointer t configuration context + * @param env pointer to environment struct + * @param svc_id ID of the service to be added + * @param svc_ctx pointer to service context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_ctx_register_svc_ctx( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * svc_id, + axis2_svc_ctx_t * svc_ctx); + + /** + * Gets service context with the given service ID + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @param svc_id service ID + * @return pointer to service context with the given service ID + */ + AXIS2_EXTERN struct axis2_svc_ctx *AXIS2_CALL + axis2_conf_ctx_get_svc_ctx( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * svc_id); + + /** + * Registers a service group context with the given service group ID. + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @param svc_grp_id service group id + * @param svc_grp_ctx pointer to service group context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_ctx_register_svc_grp_ctx( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * svc_grp_id, + axis2_svc_grp_ctx_t * svc_grp_ctx); + + /** + * Gets service group with the given service group ID. + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @param svc_grp_id service group id + * @return pointer to service group context with the given ID + */ + AXIS2_EXTERN axis2_svc_grp_ctx_t *AXIS2_CALL + axis2_conf_ctx_get_svc_grp_ctx( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * svc_grp_id); + + /** + * Gets the root working directory. It is in this directory that the + * axis2.xml configuration file is located. The services and modules + * sub folders too are located in this directory. + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @return pointer to string containing the root folder name + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_conf_ctx_get_root_dir( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env); + + /** + * Sets the root working directory. It is in this directory that the + * axis2.xml configuration file is located. The services and modules + * sub folders too are located in this directory. + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @param path string containing the path of root directory + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_ctx_set_root_dir( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * path); + + /** + * Initializes the configuration context. Within this function, it would + * initialize all the service group context, service context and + * operation context instances stored within configuration context. + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @param conf pointer to configuration struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_ctx_init( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + axis2_conf_t * conf); + + /** + * Frees configuration context struct. + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_conf_ctx_free( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env); + + /** + * This method fills the context hierarchy (service group, service and + * operation contexts that is) for the service and operation found in + * the given message context. If the context hierarchy is not already + * built it will create the contexts and build the context hierarchy. + * @param conf_ctx pointer to configuration context + * @param env pointer to environment struct + * @param msg_ctx pointer to message context with service and operation + * for which the context hierarchy is to be built set + * @return pointer to the service group context, which is the root of + * the context hierarchy for given service and operation + */ + AXIS2_EXTERN axis2_svc_grp_ctx_t *AXIS2_CALL + axis2_conf_ctx_fill_ctxs( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * Sets a property with the given key. + * @param ctx pointer to context struct + * @param env pointer to environment struct + * @param key key string to store the property with + * @param value pointer to property to be stored, context assumes the + * ownership of the property + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_ctx_set_property( + axis2_conf_ctx_t *conf_ctx, + const axutil_env_t * env, + const axis2_char_t * key, + axutil_property_t * value); + + /** + * Gets the property with the given key. + * @param ctx pointer to context struct + * @param env pointer to environment struct + * @param key key string + * @return pointer to property struct corresponding to the given key + */ + AXIS2_EXTERN axutil_property_t *AXIS2_CALL + axis2_conf_ctx_get_property( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * key); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_CONF_CTX_H */ diff --git a/include/axis2_conf_init.h b/include/axis2_conf_init.h new file mode 100644 index 0000000..8884987 --- /dev/null +++ b/include/axis2_conf_init.h @@ -0,0 +1,74 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_CONF_INIT_H +#define AXIS2_CONF_INIT_H + +/** @defgroup axis2_conf_init configuration initilizing functions + * @ingroup axis2_deployment + * @{ + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * Builds the configuration for the Server + * @param env Pointer to environment struct. MUST NOT be NULL + * @param repo_name repository name + * @return pointer to an instance of configuration context properly initialized + */ + AXIS2_EXTERN axis2_conf_ctx_t *AXIS2_CALL + axis2_build_conf_ctx( + const axutil_env_t * env, + const axis2_char_t * repo_name); + + /** + * Builds the configuration for the Server using axis2.xml file. + * @param env Pointer to environment struct. MUST NOT be NULL + * @param file path of the axis2.xml file + * @return pointer to an instance of configuration context properly initialized + */ + AXIS2_EXTERN axis2_conf_ctx_t *AXIS2_CALL + axis2_build_conf_ctx_with_file( + const axutil_env_t * env, + const axis2_char_t * file); + + /** + * Builds the Configuration for the Client + * @param env Pointer to environment struct. MUST NOT be NULL + * @param axis2_home axis2 home for client. + * @return pointer to an instance of configuration context properly initialized + */ + AXIS2_EXTERN axis2_conf_ctx_t *AXIS2_CALL + axis2_build_client_conf_ctx( + const axutil_env_t * env, + const axis2_char_t * axis2_home); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_CONF_INIT_H */ diff --git a/include/axis2_const.h b/include/axis2_const.h new file mode 100644 index 0000000..1923bab --- /dev/null +++ b/include/axis2_const.h @@ -0,0 +1,445 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_CONST_H +#define AXIS2_CONST_H + +/** + * @file axis2.h + * @brief Axis2c specific global declarations + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @defgroup axis2 Axis2/C project + * @{ + * @} + */ + + /** \mainpage Axis2/C API Documentation + * + * \section intro_sec Introduction + * + * This is the API documetation of Axis2/C, a SOAP engine written in C. + * This implementation is based on the popular Axis2 architecture. + *

We welcome your feedback on this implementation and documentation. + * Please send your feedback to + * axis-c-user@ws.apache.org and please remember to prefix the subject + * of the mail with [Axis2]. + * + */ + + /******************************************************************************/ + + /********************Axis2 specific constants**********************************/ + + /******************************************************************************/ + + /** + * Field SOAP_STYLE_RPC_ENCODED + */ +#define AXIOM_SOAP_STYLE_RPC_ENCODED 1000 + + /** + * Field SOAP_STYLE_RPC_LITERAL + */ + + /*#define AXIOM_SOAP_STYLE_RPC_LITERAL 1001 */ + + /** + * Field SOAP_STYLE_DOC_LITERAL_WRAPPED + */ +#define AXIOM_SOAP_STYLE_DOC_LITERAL_WRAPPED 1002 + +#define AXIS2_SCOPE "scope" + + /** + * Field APPLICATION_SCOPE + */ +#define AXIS2_APPLICATION_SCOPE "application" + + /** + * Field SESSION_SCOPE + */ +#define AXIS2_SESSION_SCOPE "session" + + /** + * Field GLOBAL_SCOPE + */ +#define AXIS2_MESSAGE_SCOPE "message" + + /** + * Field PHASE_SERVICE + */ +#define AXIS2_PHASE_SERVICE "service" + + /** + * Field PHASE_TRANSPORT + */ +#define AXIS2_PHASE_TRANSPORT "transport" + + /** + * Field PHASE_GLOBAL + */ +#define AXIS2_PHASE_GLOBAL "global" + + /** + * Field SESSION_CONTEXT_PROPERTY + */ +#define AXIS2_SESSION_CONTEXT_PROPERTY "SessionContext" + + /** + * TRANSPORT constants + */ +#define AXIS2_TRANSPORT_HTTP "http" +#define AXIS2_TRANSPORT_SMTP "smtp" +#define AXIS2_TRANSPORT_TCP "tcp" +#define AXIS2_TRANSPORT_XMPP "xmpp" +#define AXIS2_TRANSPORT_HTTPS "https" +#define AXIS2_TRANSPORT_AMQP "amqp" +#define AXIS2_TRANSPORT_UDP "soap.udp" + typedef enum + { + AXIS2_TRANSPORT_ENUM_HTTP = 0, + AXIS2_TRANSPORT_ENUM_SMTP, + AXIS2_TRANSPORT_ENUM_TCP, + AXIS2_TRANSPORT_ENUM_XMPP, + AXIS2_TRANSPORT_ENUM_HTTPS, + AXIS2_TRANSPORT_ENUM_AMQP, + AXIS2_TRANSPORT_ENUM_UDP, + AXIS2_TRANSPORT_ENUM_MAX + } AXIS2_TRANSPORT_ENUMS; + + /** Service URL prefix */ +#ifndef AXIS2_REQUEST_URL_PREFIX +#define AXIS2_REQUEST_URL_PREFIX "/services" +#endif + +#define AXIS2_LISTSERVICES "listServices" + +#define AXIS2_LIST_SERVICE_FOR_MODULE_ENGAMNET "listop" + + /** + * List service for admin page + */ +#define AXIS2_ADMIN_LISTSERVICES "listService" + +#define AXIS2_LIST_MODULES "listModules" + +#define AXIS2_LIST_GLOABLLY_ENGAGED_MODULES "globalModules" + +#define AXIS2_LIST_PHASES "listPhases" + +#define AXIS2_ENGAGE_GLOBAL_MODULE "engagingglobally" +#define AXIS2_ENGAGE_MODULE_TO_SERVICE "engageToService" + +#define AXIS2_ENGAGE_MODULE_TO_SERVICE_GROUP "engageToServiceGroup" + +#define AXIS2_ADMIN_LOGIN "adminlogin" + +#define AXIS2_LIST_CONTEXTS "listContexts" +#define AXIS2_LOGOUT "logout" + +#define AXIS2_VIEW_GLOBAL_HANDLERS "viewGlobalHandlers" +#define AXIS2_SELECT_SERVICE "selectService" +#define AXIS2_EDIR_SERVICE_PARA "editServicepara" +#define AXIS2_SELECT_SERVICE_FOR_PARA_EDIT "selectServiceParaEdit" +#define AXIS2_VIEW_SERVICE_HANDLERS "viewServiceHandlers" +#define AXIS2_LIST_SERVIC_GROUPS "listServciceGroups" + + /** + * Field SERVICE_MAP + */ +#define AXIS2_SERVICE_MAP "servicemap" +#define AXIS2_SERVICE_GROUP_MAP "serviceGroupmap" + +#define AXIS2_CONFIG_CONTEXT "config_context" +#define AXIS2_ACTION_MAPPING "actionMapping" +#define AXIS2_OUTPUT_ACTION_MAPPING "outputActionMapping" +#define AXI2_FAULT_ACTION_MAPPING "faultActionMapping" + +#define AXIS2_SERVICE "service" + +#define AXIS2_OPEARTION_MAP "opmap" + + /** + * Field Available modules + */ +#define AXIS2_MODULE_MAP "modulemap" + +#define AXIS2_SELECT_SERVICE_TYPE "SELECT_SERVICE_TYPE" + +#define AXIS2_GLOBAL_HANDLERS "axisconfig" +#define AXIS2_SERVICE_HANDLERS "serviceHandlers" + +#define AXIS2_PHASE_LIST "phaseList" + +#define AXIS2_LIST_OPS_FOR_THE_SERVICE "listOperations" + +#define AXIS2_REMOVE_SERVICE "removeService" + +#define AXIS2_ENGAGE_STATUS "engagestatus" + + /** + * Errorness servcie + */ +#define AXIS2_ERROR_SERVICE_MAP "errprservicemap" +#define AXIS2_ERROR_MODULE_MAP "errormodulesmap" + +#define AXIS2_IS_FAULTY "Fault" + +#define AXIS2_MODULE_ADDRESSING "addressing" + +#define AXIS2_USE_SEPARATE_LISTENER "use_listener" + +#define AXIS2_USER_NAME "userName" +#define AXIS2_PASSWORD "password" + + /** + * Field SINGLE_SERVICE + */ +#define AXIS2_SINGLE_SERVICE "singleservice" +#define AXIS2_WSDL_CONTENT "wsdl" +#define AXIS2_REQUEST_WSDL "?wsdl" + +#define AXIS2_STYLE_RPC "rpc" +#define AXIS2_STYLE_DOC "doc" +#define AXIS2_STYLE_MSG "msg" + + typedef enum axis2_wsdl_msg_labels + { + AXIS2_WSDL_MESSAGE_LABEL_IN = 0, + AXIS2_WSDL_MESSAGE_LABEL_OUT, + AXIS2_WSDL_MESSAGE_LABEL_MAX + } axis2_wsdl_msg_labels_t; + + /*********************Message Exchange Pattern Constants***********************/ + + /** + * Field MEP_URI_IN_ONLY + */ +#define AXIS2_MEP_URI_IN_ONLY "http://www.w3.org/2004/08/wsdl/in-only" + +#define AXIS2_MEP_URI_IN_ONLY_WSDL2 "http://www.w3.org/ns/wsdl/in-only" + +#define AXIS2_MEP_CONSTANT_IN_ONLY 10 + + /** + * Field MEP_URI_ROBUST_IN_ONLY + */ +#define AXIS2_MEP_URI_ROBUST_IN_ONLY "http://www.w3.org/2004/08/wsdl/robust-in-only" +#define AXIS2_MEP_URI_ROBUST_IN_ONLY_WSDL2 "http://www.w3.org/wsdl/robust-in-only" + + +#define AXIS2_MEP_CONSTANT_ROBUST_IN_ONLY 11 + + /** + * Field MEP_URI_IN_OUT + */ +#define AXIS2_MEP_URI_IN_OUT "http://www.w3.org/2004/08/wsdl/in-out" + +#define AXIS2_MEP_URI_IN_OUT_WSDL2 "http://www.w3.org/ns/wsdl/in-out" + +#define AXIS2_MEP_CONSTANT_IN_OUT 12 + + /** + * Field MEP_URI_IN_OPTIONAL_OUT + */ +#define AXIS2_MEP_URI_IN_OPTIONAL_OUT "http://www.w3.org/2004/08/wsdl/in-opt-out" + +#define AXIS2_MEP_URI_IN_OPTIONAL_OUT_WSDL2 "http://www.w3.org/wsdl/in-opt-out" + +#define AXIS2_MEP_CONSTANT_IN_OPTIONAL_OUT 13 + + /** + * Field MEP_URI_OUT_ONLY + */ +#define AXIS2_MEP_URI_OUT_ONLY "http://www.w3.org/2004/08/wsdl/out-only" + +#define AXIS2_MEP_URI_OUT_ONLY_WSDL2 "http://www.w3.org/wsdl/out-only" + +#define AXIS2_MEP_CONSTANT_OUT_ONLY 14 + + /** + * Field MEP_URI_ROBUST_OUT_ONLY + */ +#define AXIS2_MEP_URI_ROBUST_OUT_ONLY "http://www.w3.org/2004/08/wsdl/robust-out-only" + +#define AXIS2_MEP_URI_ROBUST_OUT_ONLY_WSDL2 "http://www.w3.org/wsdl/robust-out-only" + +#define AXIS2_MEP_CONSTANT_ROBUST_OUT_ONLY 15 + + /** + * Field MEP_URI_OUT_IN + */ +#define AXIS2_MEP_URI_OUT_IN "http://www.w3.org/2004/08/wsdl/out-in" + +#define AXIS2_MEP_URI_OUT_IN_WSDL2 "http://www.w3.org/wsdl/out-in" + +#define AXIS2_MEP_CONSTANT_OUT_IN 16 + + /** + * Field MEP_URI_OUT_OPTIONL_IN + */ +#define AXIS2_MEP_URI_OUT_OPTIONAL_IN "http://www.w3.org/2004/08/wsdl/out-opt-in" + +#define AXIS2_MEP_URI_OUT_OPTIONAL_IN_WSDL2 "http://www.w3.org/wsdl/out-opt-in" + +#define AXIS2_MEP_CONSTANT_OUT_OPTIONAL_IN 17 + +#define AXIS2_MEP_CONSTANT_INVALID -1 + + /** + * Field WSDL_MESSAGE_DIRECTION_IN + */ +#define AXIS2_WSDL_MESSAGE_DIRECTION_IN "in" + + /** + * Field WSDL_MESSAGE_DIRECTION_OUT + */ +#define AXIS2_WSDL_MESSAGE_DIRECTION_OUT "out" + + /** + * Field AXIS2_REST_HTTP_LOCATION + */ +#define AXIS2_REST_HTTP_LOCATION "RESTLocation" + + /** + * Field AXIS2_REST_HTTP_METHOD + */ +#define AXIS2_REST_HTTP_METHOD "RESTMethod" + + /** + * Field AXIS2_DEFAULT_REST_HTTP_METHOD + */ +#define AXIS2_DEFAULT_REST_HTTP_METHOD "defaultRESTMethod" + + /** + * Field METHOD_NAME_ESCAPE_CHARACTOR + */ + + /* static const char METHOD_NAME_ESCAPE_CHARACTOR '?' */ + +#define AXIS2_LOGGED "Logged" + + /* static const char SERVICE_NAME_SPLIT_CHAR':' */ + + /*********************Configuration *******************************************/ + +#define AXIS2_ENABLE_REST "enableREST" +#define AXIS2_ENABLE_REST_THROUGH_GET "restThroughGet" + +#define AXIS2_FORCE_PROXY_AUTH "forceProxyAuth" +#define AXIS2_FORCE_HTTP_AUTH "forceHTTPAuth" + +#define AXIS2_PROXY_AUTH_TYPE "proxyAuthType" +#define AXIS2_HTTP_AUTH_TYPE "HTTPAuthType" + + /** + * Constant for Testing Proxy Authentication + */ +#define AXIS2_TEST_PROXY_AUTH "testProxyAuth" + + /** + * Constant for Testing HTTP Authentication + */ +#define AXIS2_TEST_HTTP_AUTH "testHTTPAuth" + + /* add xml declaration */ +#define AXIS2_XML_DECLARATION "xml-declaration" +#define AXIS2_ADD_XML_DECLARATION "insert" + + /* globally enable MTOM */ +#define AXIS2_ENABLE_MTOM "enableMTOM" +#define AXIS2_ATTACHMENT_DIR "attachmentDIR" +#define AXIS2_MTOM_BUFFER_SIZE "MTOMBufferSize" +#define AXIS2_MTOM_MAX_BUFFERS "MTOMMaxBuffers" +#define AXIS2_MTOM_CACHING_CALLBACK "MTOMCachingCallback" +#define AXIS2_MTOM_SENDING_CALLBACK "MTOMSendingCallback" +#define AXIS2_ENABLE_MTOM_SERVICE_CALLBACK "EnableMTOMServiceCallback" + + /* op_ctx persistance */ +#define AXIS2_PERSIST_OP_CTX "persistOperationContext" + +#define AXIS2_EXPOSE_HEADERS "exposeHeaders" + + /******************************************************************************/ + +#define AXIS2_VALUE_TRUE "true" +#define AXIS2_VALUE_FALSE "false" +#define AXIS2_CONTAINER_MANAGED "ContainerManaged" +#define AXIS2_RESPONSE_WRITTEN "CONTENT_WRITTEN" + +#define AXIS2_TESTING_PATH "target/test-resources/" + +#define AXIS2_TESTING_REPOSITORY "target/test-resources/samples" + + /* Indicate whether the axis2 service should be loaded at start up */ +#define AXIS2_LOAD_SVC_STARTUP "loadServiceAtStartup" + + /*************************** REST_WITH_GET ************************************/ + +#define AXIS2_GET_PARAMETER_OP "op" +#define AXIS2_GET_PARAMETER_URL "http://ws.apache.org/goGetWithREST" + + /******************************************************************************/ + +#define AXIS2_NAMESPACE_PREFIX "axis2" +#define AXIS2_NAMESPACE_URI "http://ws.apache.org/namespaces/axis2" + +#define AXIS2_SVC_GRP_ID "ServiceGroupId" + +#define AXIS2_RESPONSE_SOAP_ENVELOPE "Axis2ResponseEnvelope" +#define AXIS2_HANDLER_ALREADY_VISITED "handler_already_visited" +#define AXIS2_IS_SVR_SIDE "axis2_is_svr_side" + +#define AXIS2_SERVICE_DIR "servicesDir" +#define AXIS2_MODULE_DIR "moduleDir" + +#define AXIS2_MESSAGE_ID_PREFIX "urn:uuid:" + +/** Name of anonymous service */ +#define AXIS2_ANON_SERVICE "__ANONYMOUS_SERVICE__" + +/** out-only MEP operation name */ +#define AXIS2_ANON_OUT_ONLY_OP "__OPERATION_OUT_ONLY__" + +/** out-only robust MEP operation name */ +#define AXIS2_ANON_ROBUST_OUT_ONLY_OP "__OPERATION_ROBUST_OUT_ONLY__" + +/** out-in MEP operation name */ +#define AXIS2_ANON_OUT_IN_OP "__OPERATION_OUT_IN__" + +/** wsdl location in repo*/ +#define AXIS2_WSDL_LOCATION_IN_REPO "woden" + +#define AXIS2_SVC_CLIENT_CLOSED "closed" + +#define AXIS2_STATISTICS_COUNT_ARG "stat_count_arg" + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_CONST_H */ diff --git a/include/axis2_core_dll_desc.h b/include/axis2_core_dll_desc.h new file mode 100644 index 0000000..e87f8ec --- /dev/null +++ b/include/axis2_core_dll_desc.h @@ -0,0 +1,68 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_CORE_DLL_DESC_H +#define AXIS2_CORE_DLL_DESC_H + +/** + * @file axis2_core_dll_desc.h + * @brief Axis2 Core dll_desc interface + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axis2_core_dll_desc Core DLL description + * @ingroup axis2_core_utils + * @{ + */ + + /* + * For DLL Types, starting index is 10000, and ending + * index is 10999, this is for unique indexing purposes. + * Indexes 10000-10099 are reserved for Axis2 Core. + */ + + /* service dll */ + #define AXIS2_SVC_DLL 10000 + + /* handler dll */ + #define AXIS2_HANDLER_DLL 10001 + + /* message receiver dll */ + #define AXIS2_MSG_RECV_DLL 10002 + + /* module dll */ + #define AXIS2_MODULE_DLL 10003 + + /* transport receiver dll */ + #define AXIS2_TRANSPORT_RECV_DLL 10004 + + /* transport sender dll */ + #define AXIS2_TRANSPORT_SENDER_DLL 10005 + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_CORE_DLL_DESC_H */ diff --git a/include/axis2_core_utils.h b/include/axis2_core_utils.h new file mode 100644 index 0000000..6071771 --- /dev/null +++ b/include/axis2_core_utils.h @@ -0,0 +1,113 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_CORE_UTILS_H +#define AXIS2_CORE_UTILS_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + struct axis2_conf; + + /** + * @defgroup axis2_core_utils Core Utils + * @ingroup axis2_core_utils + * @{ + */ + AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL + + axis2_core_utils_create_out_msg_ctx( + const axutil_env_t * env, + axis2_msg_ctx_t * in_msg_ctx); + + AXIS2_EXTERN void AXIS2_CALL + axis2_core_utils_reset_out_msg_ctx( + const axutil_env_t * env, + axis2_msg_ctx_t * out_msg_ctx); + + AXIS2_EXTERN axutil_qname_t *AXIS2_CALL + + axis2_core_utils_get_module_qname( + const axutil_env_t * env, + const axis2_char_t * name, + const axis2_char_t * version); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_core_utils_calculate_default_module_version( + const axutil_env_t * env, + axutil_hash_t * modules_map, + struct axis2_conf *axis_conf); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_core_utils_get_module_name( + const axutil_env_t * env, + axis2_char_t * module_name); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_core_utils_get_module_version( + const axutil_env_t * env, + axis2_char_t * module_name); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_core_utils_is_latest_mod_ver( + const axutil_env_t * env, + axis2_char_t * module_ver, + axis2_char_t * current_def_ver); + + AXIS2_EXTERN axis2_op_t *AXIS2_CALL + axis2_core_utils_get_rest_op_with_method_and_location(axis2_svc_t *svc, + const axutil_env_t *env, + const axis2_char_t *method, + const axis2_char_t *location, + axutil_array_list_t *param_keys, + axutil_array_list_t *param_values); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_core_utils_prepare_rest_mapping ( + const axutil_env_t * env, + axis2_char_t * url, + axutil_hash_t *rest_map, + axis2_op_t *op_desc); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_core_utils_free_rest_map ( + const axutil_env_t * env, + axutil_hash_t *rest_map); + + + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_CORE_UTILS_H */ diff --git a/include/axis2_ctx.h b/include/axis2_ctx.h new file mode 100644 index 0000000..0165ae3 --- /dev/null +++ b/include/axis2_ctx.h @@ -0,0 +1,147 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_CTX_H +#define AXIS2_CTX_H + +/** + * @defgroup axis2_context Context Hierarchy + * @ingroup axis2 + * @{ + * @} + */ + +/** + * @defgroup axis2_ctx context + * @ingroup axis2_context + * context is the base struct of all the context related structs. This struct + * encapsulates the common operations and data for all context types. All the + * context types, configuration, service group, service and operation has the + * base of type context. + * @{ + */ + +/** + * @file axis2_ctx.h + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_ctx */ + typedef struct axis2_ctx axis2_ctx_t; + + /** + * Creates a context struct. + * @param env pointer to environment struct + * @return pointer to newly created context + */ + AXIS2_EXTERN axis2_ctx_t *AXIS2_CALL + axis2_ctx_create( + const axutil_env_t * env); + + /** + * Sets a property with the given key. + * @param ctx pointer to context struct + * @param env pointer to environment struct + * @param key key string to store the property with + * @param value pointer to property to be stored, context assumes the + * ownership of the property + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_ctx_set_property( + struct axis2_ctx *ctx, + const axutil_env_t * env, + const axis2_char_t * key, + axutil_property_t * value); + + /** + * Gets the property with the given key. + * @param ctx pointer to context struct + * @param env pointer to environment struct + * @param key key string + * @return pointer to property struct corresponding to the given key + */ + AXIS2_EXTERN axutil_property_t *AXIS2_CALL + axis2_ctx_get_property( + const axis2_ctx_t * ctx, + const axutil_env_t * env, + const axis2_char_t * key); + + /** + * Gets the non-persistent map of properties. + * @param ctx pointer to context struct + * @param env pointer to environment struct + * @return pointer to the hash map which stores the non-persistent + * properties + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_ctx_get_property_map( + const axis2_ctx_t * ctx, + const axutil_env_t * env); + + /** + * Gets all properties stored within context. + * @param ctx pointer to context struct + * @param env pointer to environment struct + * @return pointer to hash table containing all properties + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_ctx_get_all_properties( + const axis2_ctx_t * ctx, + const axutil_env_t * env); + + /** + * Frees context struct. + * @param ctx pointer to context struct + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_ctx_free( + axis2_ctx_t * ctx, + const axutil_env_t * env); + + /** + * Sets non-persistent map of properties. + * @param ctx pointer to context struct + * @param env pointer to environment struct + * @param map pointer to hash map, context assumes ownership of the map + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_ctx_set_property_map( + struct axis2_ctx *ctx, + const axutil_env_t * env, + axutil_hash_t * map); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_CTX_H */ diff --git a/include/axis2_defines.h b/include/axis2_defines.h new file mode 100644 index 0000000..aa3e203 --- /dev/null +++ b/include/axis2_defines.h @@ -0,0 +1,51 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_DEFINES_H +#define AXIS2_DEFINES_H + +/** + * @file axis2_defines.h + * @brief Useful definitions, which may have platform concerns + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Axis2 in flow */ +#define AXIS2_IN_FLOW 1 + + /** Axis2 out flow */ +#define AXIS2_OUT_FLOW 2 + + /** Axis2 fault in flow */ +#define AXIS2_FAULT_IN_FLOW 3 + + /** Axis2 fault out flow */ +#define AXIS2_FAULT_OUT_FLOW 4 + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_DEFINES_H */ diff --git a/include/axis2_desc.h b/include/axis2_desc.h new file mode 100644 index 0000000..fe2e9db --- /dev/null +++ b/include/axis2_desc.h @@ -0,0 +1,228 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_DESC_H +#define AXIS2_DESC_H + +/** + * @defgroup axis2_description description + * @ingroup axis2_desc + * Base struct of description hierarchy. Encapsulates common data and functions + * of the description hierarchy. + * @{ + */ + +/** + * @file axis2_desc.h + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name of struct axis2_desc */ + typedef struct axis2_desc axis2_desc_t; + + struct axis2_policy_include; + struct axis2_msg; + + /** + * Creates a description struct instance. + * @param env pointer to environment struct + * @return pointer to newly created description + */ + AXIS2_EXTERN axis2_desc_t *AXIS2_CALL + axis2_desc_create( + const axutil_env_t * env); + + /** + * Frees description struct. + * @param desc pointer to description + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_desc_free( + axis2_desc_t * desc, + const axutil_env_t * env); + + /** + * Adds given parameter to the list of parameters. + * @param desc pointer to description + * @param env pointer to environment struct + * @param param pointer to parameter + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_desc_add_param( + axis2_desc_t * desc, + const axutil_env_t * env, + axutil_param_t * param); + + /** + * Gets named parameter. + * @param desc pointer to description + * @param env pointer to environment struct + * @param param_name parameter name string + * @return pointer to named parameter, NULL if it does not exist + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + axis2_desc_get_param( + const axis2_desc_t * desc, + const axutil_env_t * env, + const axis2_char_t * param_name); + + /** + * Gets all parameters stored in description. + * @param desc pointer to description + * @param env pointer to environment struct + * @return pointer to array list containing the list of parameters + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_desc_get_all_params( + const axis2_desc_t * desc, + const axutil_env_t * env); + + /** + * Checks if a named parameter is locked. + * @param desc pointer to description + * @param env pointer to environment struct + * @param param_name parameter name string + * @return AXIS2_TRUE if parameter is locked, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_desc_is_param_locked( + const axis2_desc_t * desc, + const axutil_env_t * env, + const axis2_char_t * param_name); + + /** + * Adds child to the description. The type of children is based on the + * level of the description hierarchy. As an example, service has + * children of type operation, service group has children of type + * service + * @param desc pointer to description + * @param env pointer to environment struct + * @param key key with which the child is to be added + * @param child child to be added + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_desc_add_child( + const axis2_desc_t * desc, + const axutil_env_t * env, + const axis2_char_t * key, + const struct axis2_msg *child); + + /** + * Gets all children. + * @param desc pointer to description + * @param env pointer to environment struct + * @return pointer to hash map containing children + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_desc_get_all_children( + const axis2_desc_t * desc, + const axutil_env_t * env); + + /** + * Gets child with given key. + * @param desc pointer to description + * @param env pointer to environment struct + * @param key key with which the child is stored + * @return pointer to child, returned as a void* value, need to cast to + * correct type + */ + AXIS2_EXTERN void *AXIS2_CALL + axis2_desc_get_child( + const axis2_desc_t * desc, + const axutil_env_t * env, + const axis2_char_t * key); + + /** + * Removes the named child. + * @param desc pointer to description + * @param env pointer to environment struct + * @param key key that represents the child to be removed + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_desc_remove_child( + const axis2_desc_t * desc, + const axutil_env_t * env, + const axis2_char_t * key); + + /** + * Sets parent description. + * @param desc pointer to description + * @param env pointer to environment struct + * @param parent pointer to parent description + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_desc_set_parent( + axis2_desc_t * desc, + const axutil_env_t * env, + axis2_desc_t * parent); + + /** + * Gets parent description. + * @param desc pointer to description + * @param env pointer to environment struct + * @return parent pointer to parent description + */ + AXIS2_EXTERN axis2_desc_t *AXIS2_CALL + axis2_desc_get_parent( + const axis2_desc_t * desc, + const axutil_env_t * env); + + /** + * Sets policy include + * @param desc pointer to description + * @param env pointer to environment struct + * @param policy_include policy include to be added to description + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_desc_set_policy_include( + axis2_desc_t * desc, + const axutil_env_t * env, + struct axis2_policy_include *policy_include); + + /** + * Gets policy include + * @param desc pointer to description + * @param env pointer to environment struct + * @return returns policy include that was added to description + * @sa axis2_policy_include + */ + AXIS2_EXTERN struct axis2_policy_include *AXIS2_CALL + axis2_desc_get_policy_include( + axis2_desc_t * desc, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_DESC_H */ diff --git a/include/axis2_description.h b/include/axis2_description.h new file mode 100644 index 0000000..3186a8c --- /dev/null +++ b/include/axis2_description.h @@ -0,0 +1,148 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_DESCRIPTION_H +#define AXIS2_DESCRIPTION_H + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axis2_desc description + * @ingroup axis2 + * @{ + * @} + */ + + /** + * @defgroup axis2_desc_constants description related constants + * @ingroup axis2_desc + * @{ + */ + + /** + * @file axis2_description.h + */ + + + /*********************************** Constansts *******************************/ + + /** + * Field EXECUTION_CHAIN_KEY + */ +#define AXIS2_EXECUTION_CHAIN_KEY "EXECUTION_CHAIN_KEY" + + /** + * Field EXECUTION_OUT_CHAIN_KEY + */ +#define AXIS2_EXECUTION_OUT_CHAIN_KEY "EXECUTION_OUT_CHAIN_KEY" + + /** + * Field EXECUTION_FAULT_CHAIN_KEY + */ +#define AXIS2_EXECUTION_FAULT_CHAIN_KEY "EXECUTION_FAULT_CHAIN_KEY" + + /** + * Field MODULEREF_KEY + */ +#define AXIS2_MODULEREF_KEY "MODULEREF_KEY" + + /** + * Field OP_KEY + */ +#define AXIS2_OP_KEY "OP_KEY" + + /** + * Field CLASSLOADER_KEY + */ +#define AXIS2_CLASSLOADER_KEY "CLASSLOADER_KEY" + + /** + * Field CONTEXTPATH_KEY + */ +#define AXIS2_CONTEXTPATH_KEY "CONTEXTPATH_KEY" + + /** + * Field PROVIDER_KEY + */ +#define AXIS2_MESSAGE_RECEIVER_KEY "PROVIDER_KEY" + + /** + * Field STYLE_KEY + */ +#define AXIS2_STYLE_KEY "STYLE_KEY" + + /** + * Field PARAMETER_KEY + */ +#define AXIS2_PARAMETER_KEY "PARAMETER_KEY" + + /** + * Field IN_FLOW_KEY + */ +#define AXIS2_IN_FLOW_KEY "IN_FLOW_KEY" + + /** + * Field OUT_FLOW_KEY + */ +#define AXIS2_OUT_FLOW_KEY "OUT_FLOW_KEY" + + /** + * Field IN_FAULTFLOW_KEY + */ +#define AXIS2_IN_FAULTFLOW_KEY "IN_FAULTFLOW_KEY" + + /** + * Field OUT_FAULTFLOW_KEY + */ +#define AXIS2_OUT_FAULTFLOW_KEY "OUT_FAULTFLOW_KEY" + + /** + * Field PHASES_KEY + */ +#define AXIS2_PHASES_KEY "PHASES_KEY" + + /** + * Field SERVICE_CLASS + */ +#define AXIS2_SERVICE_CLASS "ServiceClass" + + /** + * Field SERVICE_CLASS_NAME + */ +#define AXIS2_SERVICE_CLASS_NAME "SERVICE_CLASS_NAME" + + /******************************************************************************/ + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_DESCRIPTION_H */ diff --git a/include/axis2_disp.h b/include/axis2_disp.h new file mode 100644 index 0000000..2f801b8 --- /dev/null +++ b/include/axis2_disp.h @@ -0,0 +1,174 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_DISP_H +#define AXIS2_DISP_H + +/** + * @defgroup axis2_disp dispatcher + * @ingroup axis2_engine + * dispatcher is responsible for finding the service and operation for a given + * invocation. A Web service request would contain information that help + * locate the service and the operation serving the request. This information + * could be in various formats, and hence the mechanism to find the requested + * service and operation based on the available information could too vary. + * Hence there can be various types on dispatches involved in a dispatching + * phase of the engine, that implements the API given in this header. + * @{ + */ + +/** + * @file axis2_disp.h + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define AXIS2_DISP_NAMESPACE "http://axis.ws.apache.org" + + /** Type name for struct axis2_disp */ + typedef struct axis2_disp axis2_disp_t; + + /** + * Gets the base struct which is of type handler. + * @param disp pointer to dispatcher + * @param env pointer to environment struct + * @return pointer to base handler struct. Returns a reference, not a + * cloned copy + */ + AXIS2_EXTERN axis2_handler_t *AXIS2_CALL + axis2_disp_get_base( + const axis2_disp_t * disp, + const axutil_env_t * env); + + /** + * Gets the name of the dispatcher. + * @param disp pointer to dispatcher + * @param env pointer to environment struct + * @return pointer to name. Returns a reference, not a + * cloned copy + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + axis2_disp_get_name( + const axis2_disp_t * disp, + const axutil_env_t * env); + + /** + * Sets the name of the dispatcher. + * @param disp pointer to dispatcher + * @param env pointer to environment struct + * @param name pointer to name, dispatcher assumes ownership of the + * name struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_disp_set_name( + axis2_disp_t * disp, + const axutil_env_t * env, + axutil_string_t * name); + + /** + * Frees dispatcher struct. + * @param disp pointer to dispatcher + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_disp_free( + axis2_disp_t * disp, + const axutil_env_t * env); + + /** + * Creates a dispatcher struct instance. + * @param env pointer to environment struct + * @param name pointer to QName. QName is cloned by create method. + * @return pointer to newly created dispatcher + */ + AXIS2_EXTERN axis2_disp_t *AXIS2_CALL + axis2_disp_create( + const axutil_env_t * env, + const axutil_string_t * name); + + axis2_status_t AXIS2_CALL + axis2_disp_find_svc_and_op( + struct axis2_handler *handler, + const axutil_env_t * env, + struct axis2_msg_ctx *msg_ctx); + + /** + * Creates a WS-Addressing based dispatcher. + * @param env pointer to environment struct + * @return pointer to the newly created dispatcher with find_svc and find_op + * methods implemented based on WS-Addressing + */ + AXIS2_EXTERN axis2_disp_t *AXIS2_CALL + axis2_addr_disp_create( + const axutil_env_t * env); + + /** + * Creates a request URI based dispatcher. + * @param env pointer to environment struct + * @return pointer to the newly created dispatcher with find_svc and find_op + * methods implemented based on request URI processing. + */ + AXIS2_EXTERN axis2_disp_t *AXIS2_CALL + axis2_req_uri_disp_create( + const axutil_env_t * env); + + /** + * Creates a REST based dispatcher. + * @param env pointer to environment struct + * @return pointer to the newly created dispatcher with find_svc and find_op + * methods implemented based on REST processing. + */ + AXIS2_EXTERN axis2_disp_t *AXIS2_CALL + axis2_rest_disp_create( + const axutil_env_t * env); + + /** + * Creates a SOAP body based dispatcher. + * @param env pointer to environment struct + * @return pointer to the newly created dispatcher with find_svc and find_op + * methods implemented based on SOAP body processing. + */ + AXIS2_EXTERN axis2_disp_t *AXIS2_CALL + axis2_soap_body_disp_create( + const axutil_env_t * env); + + /** + * Creates a SOAP action based dispatcher. + * @param env pointer to environment struct + * @return pointer to the newly created dispatcher with find_svc and find_op + * methods implemented based on SOAP action processing + */ + AXIS2_EXTERN axis2_disp_t *AXIS2_CALL + axis2_soap_action_disp_create( + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_DISP_H */ diff --git a/include/axis2_endpoint_ref.h b/include/axis2_endpoint_ref.h new file mode 100644 index 0000000..cb9dfe0 --- /dev/null +++ b/include/axis2_endpoint_ref.h @@ -0,0 +1,319 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_ENDPOINT_REF_H +#define AXIS2_ENDPOINT_REF_H + +/** + * @defgroup axis2_endpoint_ref endpoint reference + * @ingroup axis2_addr + * endpoint reference represent an endpoint address in WS-Addressing. + * In addition to the endpoint address, it also encapsulates meta data, + * reference attributes and the service hosted at the given endpoint. + * In addition to the addressing related implementation, the endpoint reference + * struct is used across core code-base to represent endpoints. + * @{ + */ + +/** + * @file axis2_endpoint_ref.h + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_endpoint_ref */ + typedef struct axis2_endpoint_ref axis2_endpoint_ref_t; + + /** + * Creates endpoint reference struct. + * @param env pointer to environment struct + * @param address endpoint address string + * @return pointer to newly created endpoint reference + */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_endpoint_ref_create( + const axutil_env_t * env, + const axis2_char_t * address); + + /** + * Frees the endpoint_ref given as a void pointer. This method would cast the + * void parameter to an endpoint_ref pointer and then call free method. + * @param endpoint_ref pointer to endpoint_ref as a void pointer + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + void AXIS2_CALL + axis2_endpoint_ref_free_void_arg( + void *endpoint_ref, + const axutil_env_t * env); + + /** + * Gets endpoint address. Address URI identifies the endpoint. + * This may be a network address or a logical address. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @return endpoint address string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_endpoint_ref_get_address( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env); + + /** + * Sets endpoint address. Address URI identifies the endpoint. + * This may be a network address or a logical address. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @param address address string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_endpoint_ref_set_address( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + const axis2_char_t * address); + + /** + * Gets interface QName. QName represents the primary portType of + * the endpoint being conveyed. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @return pointer to interface QName, returns a reference, not a cloned + * copy + */ + AXIS2_EXTERN const axutil_qname_t *AXIS2_CALL + axis2_endpoint_ref_get_interface_qname( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env); + + /** + * Sets interface QName. QName represents the primary portType of + * the endpoint being conveyed. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @param interface_qname pointer to interface QName, this method creates + * a clone of the QName + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_endpoint_ref_set_interface_qname( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + const axutil_qname_t * interface_qname); + + /** + * Gets reference parameter list. A reference may contain a number + * of individual parameters which are associated with the endpoint + * to facilitate a particular interaction. Reference parameters + * are element information items that are named by QName and are + * required to properly interact with the endpoint. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @return pointer to array list containing all reference parameters, + * returns a reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_endpoint_ref_get_ref_param_list( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env); + + /** + * Gets the list of metadata. An endpoint can have different associated + * metadata such as WSDL, XML Schema, and WS-Policy policies. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @return pointer to array list containing metadata, returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_endpoint_ref_get_metadata_list( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env); + + /** + * Gets the list of reference attributes. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @return pointer to array list containing reference attributes, + * returns a reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_endpoint_ref_get_ref_attribute_list( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env); + + /** + * Gets the list of metadata attributes. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @return pointer to array list containing metadata attributes, + * returns a reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_endpoint_ref_get_metadata_attribute_list( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env); + + /** + * Gets the list of extensions. Extensions are a mechanism to allow + * additional elements to be specified in association with the endpoint. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @return pointer to array list containing extensions, + * returns a reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_endpoint_ref_get_extension_list( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env); + + /** + * Adds a reference parameter in the form of an AXIOM node. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @param ref_param_node pointer to AXIOM node representing reference + * parameter, endpoint reference does not assume the ownership of + * the node + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_endpoint_ref_add_ref_param( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + axiom_node_t * ref_param_node); + + /** + * Adds metadata in the form of an AXIOM node. An endpoint can have + * different associated metadata such as WSDL, XML Schema and + * WS-Policy policies. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @param metadata_node AXIOM node representing metadata, + * endpoint reference does not assume the ownership of the node + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_endpoint_ref_add_metadata( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + axiom_node_t * metadata_node); + + /** + * Adds a reference attribute in the form of an AXIOM attribute. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @param attr AXIOM attribute representing reference attribute, + * endpoint reference does not assume the ownership of the attribute + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_endpoint_ref_add_ref_attribute( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + axiom_attribute_t * attr); + + /** + * Adds a meta attribute in the form of an AXIOM attribute. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @param attr AXIOM attribute representing meta attribute, + * endpoint reference does not assume the ownership of the attribute + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_endpoint_ref_add_metadata_attribute( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + axiom_attribute_t * attr); + + /** + * Adds an extension in the form of an AXIOM node. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @param extension_node pointer to AXIOM node representing extension, + * endpoint reference does not assume the ownership of the node + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_endpoint_ref_add_extension( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + axiom_node_t * extension_node); + + /** + * Gets service name. An endpoint in WS-Addressing has a QName + * identifying the WSDL service element that contains the definition + * of the endpoint being conveyed. The service name provides a link + * to a full description of the service endpoint. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @return pointer to service name struct, returns a reference, not + * a cloned copy + */ + AXIS2_EXTERN axis2_svc_name_t *AXIS2_CALL + axis2_endpoint_ref_get_svc_name( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env); + + /** + * Sets service name. An endpoint in WS-Addressing has a QName + * identifying the WSDL service element that contains the definition + * of the endpoint being conveyed. The service name provides a link + * to a full description of the service endpoint. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @param svc_name pointer to service name struct, endpoint assumes + * ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_endpoint_ref_set_svc_name( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + axis2_svc_name_t * svc_name); + + /** + * Frees endpoint reference struct. + * @param endpoint_ref pointer to endpoint reference struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_endpoint_ref_free( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_ENDPOINT_REF_H */ diff --git a/include/axis2_engine.h b/include/axis2_engine.h new file mode 100644 index 0000000..9433d48 --- /dev/null +++ b/include/axis2_engine.h @@ -0,0 +1,264 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_ENGINE_H +#define AXIS2_ENGINE_H + +/** + * @defgroup axis2_engine engine + * @ingroup axis2_engine + * engine has the send and receive functions that is the heart when providing + * and consuming services. In Axis2 SOAP engine architecture, all the others + * parts are build around the concept of the engine. There is only one engine + * for both the server side and the client side, and the engine is not aware of + * if it is invoked as an client or a service. engine supports both synchronous + * and asynchronous messaging modes based on send and receive functions. + * @{ + */ + +/** + * @file axis2_engine.h + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_engine */ + typedef struct axis2_engine axis2_engine_t; + + struct axiom_soap_fault; + + /** + * This methods represents the out flow of the Axis engine both at the + * server side as well as the client side. In this function, the + * execution chain is created using the phases of the out flow. + * All handlers at each out flow phase, which are ordered in the + * deployment time are invoked in sequence here. + * @param engine pointer to engine + * @param env pointer to environment struct + * @param msg_ctx pointer to message context representing current state + * that is used when sending message + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_engine_send( + axis2_engine_t * engine, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * This methods represents the in flow of the Axis engine, both at the + * server side as well as the client side. In this function, the + * execution chain is created using the phases of the in flow. + * All handlers at each in flow phase, which are ordered in the + * deployment time are invoked in sequence here. + * @param engine pointer to engine + * @param env pointer to environment struct + * @param msg_ctx pointer to message context representing current state + * that is used in receiving message + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_engine_receive( + axis2_engine_t * engine, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * Sends a SOAP fault. + * @param engine pointer to engine + * @param env pointer to environment struct + * @param msg_ctx pointer to message context that contains details of + * fault state + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_engine_send_fault( + axis2_engine_t * engine, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * This is invoked when a SOAP fault is received. + * @param engine pointer to engine + * @param env pointer to environment struct + * @param msg_ctx pointer to message context representing that contains + * the details of receive state + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_engine_receive_fault( + axis2_engine_t * engine, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * Creates a message context that represents the fault state based on + * current processing state. + * @param engine pointer to engine + * @param env pointer to environment struct + * @param processing_context pointer to message context representing + * current processing context + * @param code_value pointer to a string containing fault code + * @param reason_text pointer to a string containing reason of the fault + * @return pointer to message context representing the fault state + */ + AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL + + axis2_engine_create_fault_msg_ctx( + axis2_engine_t * engine, + const axutil_env_t * env, + axis2_msg_ctx_t * processing_context, + const axis2_char_t * code_value, + const axis2_char_t * reason_text); + + /** + * Invokes the phases in the given array list of phases. The list of + * phases could be representing one of the flows. The two possible + * flows are in flow and out flow. Both of those flows can also have + * fault related representations, in fault flow and out fault flow. + * Invoking a phase triggers the invocation of handlers the phase + * contain. + * @param engine pointer to engine + * @param env pointer to environment struct + * @param phases pointer to phases + * @param msg_ctx pointer to message context containing current state + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_engine_invoke_phases( + axis2_engine_t * engine, + const axutil_env_t * env, + axutil_array_list_t * phases, + axis2_msg_ctx_t * msg_ctx); + + /** + * Resumes phase invocation. While invoking the phases, one of the + * handlers in any phase could determine to pause the invocation. + * Often pausing happens to wait till some state is reached or some + * task is complete. Once paused, the invocation has to be resumed + * using this function, which will resume the invocation from the paused + * handler in the paused phase and will continue till it is paused + * again or it completes invoking all the remaining handlers in the + * remaining phases. + * @param engine pointer to engine + * @param env pointer to environment struct + * @param phases pointer to phases + * @param msg_ctx pointer to message context containing current paused + * state + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_engine_resume_invocation_phases( + axis2_engine_t * engine, + const axutil_env_t * env, + axutil_array_list_t * phases, + axis2_msg_ctx_t * msg_ctx); + + /** + * Gets sender's SOAP fault code. + * @param engine pointer to engine + * @param env pointer to environment struct + * @param soap_namespace pointer to SOAP namespace + * @return pointer to SOAP fault code string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + + axis2_engine_get_sender_fault_code( + const axis2_engine_t * engine, + const axutil_env_t * env, + const axis2_char_t * soap_namespace); + + /** + * Gets receiver's SOAP fault code. + * @param engine pointer to engine + * @param env pointer to environment struct + * @param soap_namespace pointer to soap namespace + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + + axis2_engine_get_receiver_fault_code( + const axis2_engine_t * engine, + const axutil_env_t * env, + const axis2_char_t * soap_namespace); + + /** + * Frees engine struct. + * @param engine pointer to engine + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_engine_free( + axis2_engine_t * engine, + const axutil_env_t * env); + + /** + * Resumes receive operation. It could be the case that receive was + * paused by one of the in flow handlers. In such a situation, this + * method could be used to resume the receive operation. + * @param engine pointer to engine + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_engine_resume_receive( + axis2_engine_t * engine, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * Resumes send operation. It could be the case that send was + * paused by one of the out flow handlers. In such a situation, this + * method could be used to resume the send operation. + * @param engine pointer to engine + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_engine_resume_send( + axis2_engine_t * engine, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * Creates en engine struct instance. + * @param env pointer to environment struct + * @param conf_ctx pointer to configuration context struct + * @return pointer to newly created engine struct + */ + AXIS2_EXTERN axis2_engine_t *AXIS2_CALL + axis2_engine_create( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_ENGINE_H */ diff --git a/include/axis2_flow.h b/include/axis2_flow.h new file mode 100644 index 0000000..3bb2bde --- /dev/null +++ b/include/axis2_flow.h @@ -0,0 +1,125 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_FLOW_H +#define AXIS2_FLOW_H + +/** + * @defgroup axis2_flow flow + * @ingroup axis2_desc + * flow is a collection of handlers. This struct encapsulates the concept + * of an execution flow in the engine. + * @{ + */ + +/** + * @file axis2_flow.h + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_flow */ + typedef struct axis2_flow axis2_flow_t; + + /** + * Creates flow struct. + * @param env pointer to environment struct + * @return pointer to newly created flow + */ + AXIS2_EXTERN axis2_flow_t *AXIS2_CALL + axis2_flow_create( + const axutil_env_t * env); + + /** + * Frees flow struct. + * @param flow pointer to flow + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_flow_free( + axis2_flow_t * flow, + const axutil_env_t * env); + + /** + * Adds a handler description to flow. + * @param flow pointer to flow + * @param env pointer to environment struct + * @param handler pointer to handler description + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_flow_add_handler( + axis2_flow_t * flow, + const axutil_env_t * env, + axis2_handler_desc_t * handler); + + /** + * Gets handler description at given index. + * @param flow pointer to flow + * @param env pointer to environment struct + * @param index index of the handler + * @return pointer to handler description + */ + AXIS2_EXTERN axis2_handler_desc_t *AXIS2_CALL + axis2_flow_get_handler( + const axis2_flow_t * flow, + const axutil_env_t * env, + const int index); + + /** + * Gets handler count. + * @param flow pointer to flow + * @param env pointer to environment struct + * @return handler count + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_flow_get_handler_count( + const axis2_flow_t * flow, + const axutil_env_t * env); + + /** + * Frees flow passed as void pointer. This method would cast the void + * pointer to appropriate type and then call free method. + * @param flow pointer to flow + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_flow_free_void_arg( + void *flow, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_FLOW_H */ diff --git a/include/axis2_flow_container.h b/include/axis2_flow_container.h new file mode 100644 index 0000000..ecc5fb6 --- /dev/null +++ b/include/axis2_flow_container.h @@ -0,0 +1,176 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_FLOW_CONTAINER_H +#define AXIS2_FLOW_CONTAINER_H + +/** + * @defgroup axis2_flow_container flow container + * @ingroup axis2_desc + * Flow container is the encapsulating struct for all the four flows. The four flows + * possible are in flow, out flow, in fault flow and out fault flow. + * @{ + */ + +/** + * @file axis2_flow_container.h + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_flow_container */ + typedef struct axis2_flow_container axis2_flow_container_t; + + /** + * Frees flow container. + * @param flow_container pointer to flow container + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_flow_container_free( + axis2_flow_container_t * flow_container, + const axutil_env_t * env); + + /** + * Gets in flow. + * @param flow_container pointer to flow container + * @param env pointer to environment struct + * @return pointer to in flow, returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_flow_t *AXIS2_CALL + axis2_flow_container_get_in_flow( + const axis2_flow_container_t * flow_container, + const axutil_env_t * env); + + /** + * Sets in flow. + * @param flow_container pointer to flow container + * @param env pointer to environment struct + * @param in_flow pointer to in flow struct, flow container assumes + * ownership of struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_flow_container_set_in_flow( + axis2_flow_container_t * flow_container, + const axutil_env_t * env, + axis2_flow_t * in_flow); + + /** + * Gets out flow. + * @param flow_container pointer to flow container + * @param env pointer to environment struct + * @return out flow, returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_flow_t *AXIS2_CALL + axis2_flow_container_get_out_flow( + const axis2_flow_container_t * flow_container, + const axutil_env_t * env); + + /** + * Sets out flow. + * @param flow_container pointer to flow container + * @param env pointer to environment struct + * @param out_flow pointer to out flow, flow container assumes + * ownership of struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_flow_container_set_out_flow( + axis2_flow_container_t * flow_container, + const axutil_env_t * env, + axis2_flow_t * out_flow); + + /** + * Gets fault in flow. + * @param flow_container pointer to flow container + * @param env pointer to environment struct + * @return fault in flow, returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_flow_t *AXIS2_CALL + axis2_flow_container_get_fault_in_flow( + const axis2_flow_container_t * flow_container, + const axutil_env_t * env); + + /** + * Sets fault in flow. + * @param flow_container pointer to flow container + * @param env pointer to environment struct + * @param falut_in_flow pointer to falut in flow, flow container assumes + * ownership of struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_flow_container_set_fault_in_flow( + axis2_flow_container_t * flow_container, + const axutil_env_t * env, + axis2_flow_t * falut_in_flow); + + /** + * Gets fault out flow. + * @param flow_container pointer to flow container + * @param env pointer to environment struct + * @return fault out flow, returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_flow_t *AXIS2_CALL + axis2_flow_container_get_fault_out_flow( + const axis2_flow_container_t * flow_container, + const axutil_env_t * env); + + /** + * Sets fault out flow. + * @param flow_container pointer to flow container + * @param env pointer to environment struct + * @param fault_out_flow pointer to fault out flow, flow container assumes + * ownership of struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_flow_container_set_fault_out_flow( + axis2_flow_container_t * flow_container, + const axutil_env_t * env, + axis2_flow_t * fault_out_flow); + + /** + * Creates flow container struct. + * @param env pointer to environment struct + * @return pointer to newly created flow container + */ + AXIS2_EXTERN axis2_flow_container_t *AXIS2_CALL + axis2_flow_container_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_FLOW_CONTAINER_H */ diff --git a/include/axis2_handler.h b/include/axis2_handler.h new file mode 100644 index 0000000..49cf9d0 --- /dev/null +++ b/include/axis2_handler.h @@ -0,0 +1,184 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_HANDLER_H +#define AXIS2_HANDLER_H + +/** + * @defgroup axis2_handler handler + * @ingroup axis2_handler + * handler is the smallest unit of execution in the Axis2 engine's execution flow. + * The engine could have two flows, the in-flow and out-flow. A flow is a + * collection of phases and a phase in turn is a collection of handlers. + * handlers are configured in relation to modules. A module is a point of + * extension in the Axis2 engine and a module would have one or more handlers + * defined in its configuration. The module configuration defines the phases + * each handler is attached to. A handler is invoked when the phase within which + * it lives is invoked. handler is stateless and it is using the message context + * that the state information is captures across invocations. + * @{ + */ + +/** + * @file axis2_handler.h + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_handler */ + typedef struct axis2_handler axis2_handler_t; + + struct axis2_handler_desc; + struct axis2_msg_ctx; + + typedef axis2_status_t( + AXIS2_CALL + * AXIS2_HANDLER_INVOKE) ( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx); + + /** + * Free handler struct. + * @param handler pointer to handler + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_handler_free( + axis2_handler_t * handler, + const axutil_env_t * env); + + /** + * Initializes the handler with the information form handler description. + * @param handler pointer to handler + * @param env pointer to environment struct + * @param handler_desc pointer to handler description related to the handler + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_handler_init( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_handler_desc *handler_desc); + + /** + * Invoke is called to do the actual work assigned to the handler. + * The phase that owns the handler is responsible for calling invoke + * on top of the handler. Those structs that implement the interface + * of the handler should implement the logic for invoke and assign the + * respective function pointer to invoke operation of the ops struct. + * @param handler pointer to handler + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_handler_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx *msg_ctx); + + /** + * Gets QName. + * @param handler pointer to handler + * @param env pointer to environment struct + * @return pointer to QName of the handler + */ + AXIS2_EXTERN const axutil_string_t *AXIS2_CALL + axis2_handler_get_name( + const axis2_handler_t * handler, + const axutil_env_t * env); + + /** + * Gets the named parameter. + * @param handler pointer to handler + * @param env pointer to environment struct + * @param name name of the parameter to be accessed + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + axis2_handler_get_param( + const axis2_handler_t * handler, + const axutil_env_t * env, + const axis2_char_t * name); + + /** + * Gets the handler description related to the handler. + * @param handler pointer to handler + * @param env pointer to environment struct + * @return pointer to handler description struct related to handler + */ + AXIS2_EXTERN struct axis2_handler_desc *AXIS2_CALL + + axis2_handler_get_handler_desc( + const axis2_handler_t * handler, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_handler_set_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + AXIS2_HANDLER_INVOKE func); + + /** + * Function pointer defining the creates syntax for a handler struct instance. + * @param env pointer to environment struct + * @param pointer to qname + * @return pointer to newly created handler struct + */ + typedef axis2_handler_t *( + AXIS2_CALL + * AXIS2_HANDLER_CREATE_FUNC)( + const axutil_env_t * env, + const axutil_string_t * name); + + /** + * Creates handler struct instance. + * @param env pointer to environment struct + * @return pointer to newly created handler struct + */ + AXIS2_EXTERN axis2_handler_t *AXIS2_CALL + axis2_handler_create( + const axutil_env_t * env); + + /** + * Creates a handler with invoke method implemented to fill in the service + * and operation context information. + * @param env pointer to environment struct + * @param qname pointer to qname, this is cloned within create method + * @return pointer to newly created handler struct + */ + AXIS2_EXTERN axis2_handler_t *AXIS2_CALL + axis2_ctx_handler_create( + const axutil_env_t * env, + const axutil_string_t * qname); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_HANDLER_H */ diff --git a/include/axis2_handler_desc.h b/include/axis2_handler_desc.h new file mode 100644 index 0000000..b807508 --- /dev/null +++ b/include/axis2_handler_desc.h @@ -0,0 +1,274 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_HANDLER_DESC_H +#define AXIS2_HANDLER_DESC_H + +/** + * @defgroup axis2_handler_desc handler description + * @ingroup axis2_desc + * handler description captures information on a handler. Each handler in the + * system has an associated handler description. Deployment engine would create + * handler descriptions based on configuration information. When handlers are + * loaded from shared libraries, the information captured in handler description + * would be used. + * @{ + */ + +/** + * @file axis2_handler_desc.h + */ + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_handler_desc */ + typedef struct axis2_handler_desc axis2_handler_desc_t; + + /** + * Gets QName. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @return pointer to QName, returns a reference, not a cloned copy + */ + AXIS2_EXTERN const axutil_string_t *AXIS2_CALL + axis2_handler_desc_get_name( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env); + + /** + * Sets QName. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @param name pointer to string representing handler name + * of QName + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_handler_desc_set_name( + axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + axutil_string_t * name); + + /** + * Gets phase rules. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @return pointer to phase rule struct containing phase rules + */ + AXIS2_EXTERN axis2_phase_rule_t *AXIS2_CALL + axis2_handler_desc_get_rules( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env); + + /** + * Sets phase rules. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @param phase_rule pointer to phase rule struct, handler description + * assumes ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_handler_desc_set_rules( + axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + axis2_phase_rule_t * phase_rule); + + /** + * Gets named parameter. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @param name parameter name string + * @return pointer to parameter if found, else NULL. Return a reference + * not a cloned copy + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + axis2_handler_desc_get_param( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + const axis2_char_t * name); + + /** + * Adds given parameter to the parameter list. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @param param pointer to param + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_handler_desc_add_param( + axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + axutil_param_t * param); + + /** + * Gets all parameters stored within handler description. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @return pointer to array list containing parameters, returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_handler_desc_get_all_params( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env); + + /** + * Checks if the named parameter is locked at any level + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @param param_name parameter name string + * @return AXIS2_TRUE if the parameter is locked, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_handler_desc_is_param_locked( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + const axis2_char_t * param_name); + + /** + * Gets the handler associated with the handler description. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @return pointer to handler, returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_handler_t *AXIS2_CALL + axis2_handler_desc_get_handler( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env); + + /** + * Sets the handler associated with the handler description. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @param handler pointer to handler, handler description assumes + * the ownership of the handler + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_handler_desc_set_handler( + axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + axis2_handler_t * handler); + + /** + * Gets the class name. Class name is the name of the shared library + * file that contains the implementation of the handler. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @return class name string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_handler_desc_get_class_name( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env); + + /** + * Sets the class name. Class name is the name of the shared library + * file that contains the implementation of the handler. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @param class_name class name string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_handler_desc_set_class_name( + axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + const axis2_char_t * class_name); + + /** + * Gets the parent. Parent of handler description is of type parameter + * container. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @return pointer to parent parameter container, returns a reference, + * not a cloned copy + */ + AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL + axis2_handler_desc_get_parent( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env); + + /** + * Gets the parent. Parent of handler description is of type parameter + * container. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @param parent pointer to parent parameter container struct, handler + * description assumes ownership of struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_handler_desc_set_parent( + axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + axutil_param_container_t * parent); + + /** + * Frees handler description. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_handler_desc_free( + axis2_handler_desc_t * handler_desc, + const axutil_env_t * env); + + /** + * Gets the param container. + * @param handler_desc pointer to handler description + * @param env pointer to environment struct + * @return pointer to parameter container, returns a reference, + * not a cloned copy + */ + AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL + axis2_handler_desc_get_param_container( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env); + + /** + * Creates handler description struct instance. + * @param env pointer to env pointer to environment struct + * @param name pointer to string representing handler name, can be NULL, create function + * clones this + * @return pointer to newly created handler description struct + */ + AXIS2_EXTERN axis2_handler_desc_t *AXIS2_CALL + axis2_handler_desc_create( + const axutil_env_t * env, + axutil_string_t * name); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_HANDLER_DESC_H */ diff --git a/include/axis2_http_accept_record.h b/include/axis2_http_accept_record.h new file mode 100644 index 0000000..3ddb068 --- /dev/null +++ b/include/axis2_http_accept_record.h @@ -0,0 +1,117 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_HTTP_ACCEPT_RECORD_H +#define AXIS2_HTTP_ACCEPT_RECORD_H + +/** + * @defgroup axis2_http_accept_record HTTP Accept record + * @ingroup axis2_core_trans_http + * @{ + */ + +/** + * @file axis2_http_accept_record.h + * @brief Axis2 HTTP Accept record + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_http_accept_record */ + typedef struct axis2_http_accept_record axis2_http_accept_record_t; + + /** + * Gets quality factor of accept record + * @param accept_record pointer to accept record + * @param env pointer to environment struct + * @return quality factor between 0 and 1 (1 meaning maximum + * and 0 meaning minimum) + */ + AXIS2_EXTERN float AXIS2_CALL + axis2_http_accept_record_get_quality_factor( + const axis2_http_accept_record_t * accept_record, + const axutil_env_t * env); + + /** + * Gets name of accept record + * @param accept_record pointer to accept record + * @param env pointer to environment struct + * @return name of accept record + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_accept_record_get_name( + const axis2_http_accept_record_t * accept_record, + const axutil_env_t * env); + + /** + * Gets level of accept record + * @param accept_record pointer to accept record + * @param env pointer to environment struct + * @return level of accept record (1 meaning highest). + * A return value of -1 indicates that no level is + * associated. + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_http_accept_record_get_level( + const axis2_http_accept_record_t * accept_record, + const axutil_env_t * env); + + /** + * Gets string representation of accept record + * @param accept_record pointer to accept record + * @param env pointer to environment struct + * @return created accept record string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_accept_record_to_string( + axis2_http_accept_record_t * accept_record, + const axutil_env_t * env); + + /** + * Frees accept record + * @param accept_record pointer to accept record + * @param env pointer to environment struct + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_accept_record_free( + axis2_http_accept_record_t * accept_record, + const axutil_env_t * env); + + /** + * Creates accept record + * @param env pointer to environment struct + * @param str pointer to str + * @return created accept record + */ + AXIS2_EXTERN axis2_http_accept_record_t *AXIS2_CALL + axis2_http_accept_record_create( + const axutil_env_t * env, + const axis2_char_t * str); + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_HTTP_ACCEPT_RECORD_H */ diff --git a/include/axis2_http_client.h b/include/axis2_http_client.h new file mode 100644 index 0000000..fbad8d4 --- /dev/null +++ b/include/axis2_http_client.h @@ -0,0 +1,270 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_HTTP_CLIENT_H +#define AXIS2_HTTP_CLIENT_H + +/** + * @defgroup axis2_http_client http client + * @ingroup axis2_core_trans_http + * Description + * @{ + */ + +/** + * @file axis2_http_client.h + * @brief axis2 HTTP Header name:value pair implementation + */ + +#include +#include +#include +#include +#include +#include + + + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_http_client */ + typedef struct axis2_http_client axis2_http_client_t; + + /** + * @param client pointer to client + * @param env pointer to environment struct + * @param request pointer to request + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_client_send( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_http_simple_request_t * request, + axis2_char_t * ssl_pp); + + /** + * @param client pointer to client + * @param env pointer to environment struct + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_http_client_recieve_header( + axis2_http_client_t * client, + const axutil_env_t * env); + + /** + * @param client pointer to client + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_http_simple_response_t *AXIS2_CALL + + axis2_http_client_get_response( + const axis2_http_client_t * client, + const axutil_env_t * env); + + /** + * @param client pointer to client + * @param env pointer to environment struct + * @param url pointer to url + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_client_set_url( + axis2_http_client_t * client, + const axutil_env_t * env, + axutil_url_t * url); + + /** + * @param client pointer to client + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_url_t *AXIS2_CALL + axis2_http_client_get_url( + const axis2_http_client_t * client, + const axutil_env_t * env); + + /** + * @param client pointer to client + * @param env pointer to environment struct + * @param timeout_ms + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_client_set_timeout( + axis2_http_client_t * client, + const axutil_env_t * env, + int timeout_ms); + + /** + * @param client pointer to client + * @param env pointer to environment struct + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_http_client_get_timeout( + const axis2_http_client_t * client, + const axutil_env_t * env); + + /** + * @param client pointer to client + * @param env pointer to environment struct + * @param proxy_host pointer to proxy host + * @param proxy_port + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_client_set_proxy( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_char_t * proxy_host, + int proxy_port); + + /** + * @param client pointer to client + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_client_get_proxy( + const axis2_http_client_t * client, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_client_connect_ssl_host( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_char_t * host, + int port); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_client_set_dump_input_msg( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_bool_t dump_input_msg); + + /** + * @param client pointer to client + * @param env pointer to environment struct + * @param server_cert server certificate + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_client_set_server_cert( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_char_t * server_cert); + + /** + * @param client pointer to client + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_client_get_server_cert( + const axis2_http_client_t * client, + const axutil_env_t * env); + + /** + * @param client pointer to client + * @param env pointer to environment struct + * @param key_file chain file containing + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_client_set_key_file( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_char_t * key_file); + + /** + * @param client pointer to client + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_client_get_key_file( + const axis2_http_client_t * client, + const axutil_env_t * env); + + /** + * @param client pointer to client + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_client_free( + axis2_http_client_t * client, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @param url pointer to url + */ + AXIS2_EXTERN axis2_http_client_t *AXIS2_CALL + axis2_http_client_create( + const axutil_env_t * env, + axutil_url_t * url); + + /** + * Free http_client passed as void pointer. This will be + * cast into appropriate type and then pass the cast object + * into the http_client structure's free method + * @param client + * @param env pointer to environment struct + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_client_free_void_arg( + void *client, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_client_set_mime_parts( + axis2_http_client_t * client, + const axutil_env_t * env, + axutil_array_list_t *mime_parts); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_http_client_get_mime_parts( + const axis2_http_client_t * client, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_client_set_doing_mtom( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_bool_t doing_mtom); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_http_client_get_doing_mtom( + const axis2_http_client_t * client, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_client_set_mtom_sending_callback_name( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_char_t *callback_name); + + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_HTTP_CLIENT_H */ diff --git a/include/axis2_http_header.h b/include/axis2_http_header.h new file mode 100644 index 0000000..c79ab50 --- /dev/null +++ b/include/axis2_http_header.h @@ -0,0 +1,110 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_HTTP_HEADER_H +#define AXIS2_HTTP_HEADER_H + +/** + * @defgroup axis2_http_header http header + * @ingroup axis2_core_trans_http + * Description + * @{ + */ + +/** + * @file axis2_http_header.h + * @brief axis2 HTTP Header name:value pair implementation + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_http_header */ + typedef struct axis2_http_header axis2_http_header_t; + + /** + * @param header pointer to header + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_header_to_external_form( + axis2_http_header_t * header, + const axutil_env_t * env); + + /** + * @param header pointer to header + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_header_get_name( + const axis2_http_header_t * header, + const axutil_env_t * env); + + /** + * @param header pointer to header + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_header_get_value( + const axis2_http_header_t * header, + const axutil_env_t * env); + + /** + * @param header pointer to header + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_header_free( + axis2_http_header_t * header, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @param name pointer to name + * @param value pointer to value + */ + AXIS2_EXTERN axis2_http_header_t *AXIS2_CALL + axis2_http_header_create( + const axutil_env_t * env, + const axis2_char_t * name, + const axis2_char_t * value); + + /** + * Creates http header object from a string having format "header_name: header_value" + * (e.g. "SOAPAction: urn:hello") + * @param env pointer to environment struct + * @param str pointer to str + */ + AXIS2_EXTERN axis2_http_header_t *AXIS2_CALL + axis2_http_header_create_by_str( + const axutil_env_t * env, + const axis2_char_t * str); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_HTTP_HEADER_H */ diff --git a/include/axis2_http_out_transport_info.h b/include/axis2_http_out_transport_info.h new file mode 100644 index 0000000..7ba4b94 --- /dev/null +++ b/include/axis2_http_out_transport_info.h @@ -0,0 +1,250 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_HTTP_OUT_TRANSPORT_INFO_H +#define AXIS2_HTTP_OUT_TRANSPORT_INFO_H + +/** + * @defgroup axis2_http_out_transport_info http out transport info + * @ingroup axis2_core_trans_http + * Description + * @{ + */ + +/** + * @file axis2_http_out_transport_info.h + * @brief axis2 HTTP Out Transport Info + */ + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_http_out_transport_info */ + typedef struct axis2_http_out_transport_info + axis2_http_out_transport_info_t; + + struct axis2_http_out_transport_info + { + axis2_out_transport_info_t out_transport; + axis2_http_simple_response_t *response; + axis2_transport_receiver_t *server; + axis2_char_t *encoding; + + axis2_status_t( + AXIS2_CALL + * set_content_type)( + axis2_http_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * content_type); + + axis2_status_t( + AXIS2_CALL + * set_char_encoding)( + axis2_http_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * encoding); + + axis2_status_t( + AXIS2_CALL + * set_cookie_header)( + axis2_http_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * cookie_header); + + axis2_status_t( + AXIS2_CALL + * set_session)( + axis2_http_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * session_id, + const axis2_char_t * session_value); + + void( + AXIS2_CALL + * free_function)( + axis2_http_out_transport_info_t * info, + const axutil_env_t * env); + }; + + /** + * @param info pointer to info + * @param env pointer to environment struct + * @param content_type pointer to content type + */ + AXIS2_EXTERN int AXIS2_CALL + + axis2_http_out_transport_info_set_content_type( + axis2_http_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * content_type); + + /** + * @param info pointer to info + * @param env pointer to environment struct + * @param encoding pointer to encoding + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_out_transport_info_set_char_encoding( + axis2_http_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * encoding); + + /** + * @param info pointer to info + * @param env pointer to environment struct + * @param cookie_header pointer to cookie_header + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_out_transport_info_set_cookie_header( + axis2_http_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * cookie_header); + + /** @param info pointer to info + * @param env pointer to environment struct + * @param session_str pointer to session string + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_out_transport_info_set_session( + axis2_http_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * session_id, + const axis2_char_t * session_value); + + + /** + * @param out_transport_info pointer to out transport info + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_out_transport_info_free( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @param response pointer to response + */ + AXIS2_EXTERN axis2_http_out_transport_info_t *AXIS2_CALL + + axis2_http_out_transport_info_create( + const axutil_env_t * env, + axis2_http_simple_response_t * response); + + /** + * Free http_out_transport_info passed as void pointer. This will be + * cast into appropriate type and then pass the cast object + * into the http_out_transport_info structure's free method + * @param transport_info pointer to transport info + * @param env pointer to environment struct + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_out_transport_info_free_void_arg( + void *transport_info, + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + + axis2_http_out_transport_info_set_char_encoding_func( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + axis2_status_t(AXIS2_CALL + * set_encoding) + (axis2_http_out_transport_info_t *, + const axutil_env_t *, + const axis2_char_t *)); + + AXIS2_EXTERN void AXIS2_CALL + + axis2_http_out_transport_info_set_content_type_func( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + axis2_status_t(AXIS2_CALL + * + set_content_type)(axis2_http_out_transport_info_t *, + const axutil_env_t *, + const axis2_char_t *)); + + AXIS2_EXTERN void AXIS2_CALL + axis2_http_out_transport_info_set_cookie_header_func( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + axis2_status_t(AXIS2_CALL + * + set_cookie_header)(axis2_http_out_transport_info_t *, + const axutil_env_t *, + const axis2_char_t *)); + + AXIS2_EXTERN void AXIS2_CALL + axis2_http_out_transport_info_set_session_func( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + axis2_status_t(AXIS2_CALL + * + set_session)(axis2_http_out_transport_info_t *, + const axutil_env_t *, + const axis2_char_t *, + const axis2_char_t *)); + + AXIS2_EXTERN void AXIS2_CALL + axis2_http_out_transport_info_set_free_func( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + void(AXIS2_CALL + * free_function)(axis2_http_out_transport_info_t *, + const axutil_env_t *)); + + /** Set content type. */ +#define AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_CONTENT_TYPE(out_transport_info, \ + env, content_type) axis2_http_out_transport_info_set_content_type (out_transport_info, env, content_type) + + /** Set char encoding. */ +#define AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_CHAR_ENCODING(out_transport_info,\ + env, encoding) axis2_http_out_transport_info_set_char_encoding(out_transport_info, env, encoding) + + /** Set cookie_header. */ +#define AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_COOKIE_HEADER(out_transport_info, \ + env, cookie_header) axis2_http_out_transport_info_set_cookie_header (out_transport_info, env, cookie_header) + + /** Set session. */ +#define AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_SESSION(out_transport_info, \ + env, session_id, session_value) axis2_http_out_transport_info_set_session (out_transport_info, env, session_id, session_value) + + /** Free. */ +#define AXIS2_HTTP_OUT_TRANSPORT_INFO_FREE(out_transport_info, env)\ + axis2_http_out_transport_info_free(out_transport_info, env) + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_HTTP_OUT_TRANSPORT_INFO_H */ diff --git a/include/axis2_http_request_line.h b/include/axis2_http_request_line.h new file mode 100644 index 0000000..4d1ef00 --- /dev/null +++ b/include/axis2_http_request_line.h @@ -0,0 +1,122 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_HTTP_REQUEST_LINE_H +#define AXIS2_HTTP_REQUEST_LINE_H + +/** + * @defgroup axis2_http_request_line http request line + * @ingroup axis2_core_trans_http + * @{ + */ + +/** + * @file axis2_http_request_line.h + * @brief axis2 HTTP Request Line + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_http_request_line */ + typedef struct axis2_http_request_line axis2_http_request_line_t; + + /** + * @param request_line pointer to request line + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_request_line_get_method( + const axis2_http_request_line_t * request_line, + const axutil_env_t * env); + + /** + * @param request_line pointer to request line + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_http_request_line_get_http_version( + const axis2_http_request_line_t * request_line, + const axutil_env_t * env); + + /** + * @param request_line pointer to request line + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_request_line_get_uri( + const axis2_http_request_line_t * request_line, + const axutil_env_t * env); + + /** + * @param request_line pointer to request line + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_request_line_to_string( + axis2_http_request_line_t * request_line, + const axutil_env_t * env); + + /** + * @param request_line pointer to request line + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_request_line_free( + axis2_http_request_line_t * request_line, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @param method pointer to method + * @param uri pointer to uri + * @param http_version pointer to http version + */ + AXIS2_EXTERN axis2_http_request_line_t *AXIS2_CALL + + axis2_http_request_line_create( + const axutil_env_t * env, + const axis2_char_t * method, + const axis2_char_t * uri, + const axis2_char_t * http_version); + + /** + * Parses a line " CRLF" and creates http_request_line + * object. E.g "POST /axis2/services/echo HTTP/1.1\r\n" + * @param env pointer to environment struct + * @param str pointer to the line to be parsed + * @return created object if success. NULL otherwise + */ + AXIS2_EXTERN axis2_http_request_line_t *AXIS2_CALL + axis2_http_request_line_parse_line( + const axutil_env_t * env, + const axis2_char_t * str); + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_HTTP_REQUEST_LINE_H */ diff --git a/include/axis2_http_response_writer.h b/include/axis2_http_response_writer.h new file mode 100644 index 0000000..08c5c6c --- /dev/null +++ b/include/axis2_http_response_writer.h @@ -0,0 +1,193 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_HTTP_RESPONSE_WRITER_H +#define AXIS2_HTTP_RESPONSE_WRITER_H + +/** + * @defgroup axis2_http_response_writer http response writer + * @ingroup axis2_core_trans_http + * @{ + */ + +/** + * @file axis2_http_response_writer.h + * @brief axis2 Response Writer + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_http_response_writer */ + typedef struct axis2_http_response_writer axis2_http_response_writer_t; + + /** + * @param response_writer pointer to response writer + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_http_response_writer_get_encoding( + const axis2_http_response_writer_t * response_writer, + const axutil_env_t * env); + + /** + * @param response_writer pointer to response writer + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_response_writer_close( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env); + + /** + * @param response_writer pointer to response writer + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_response_writer_flush( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env); + + /** + * @param response_writer pointer to response writer + * @param env pointer to environment struct + * @param c + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_response_writer_write_char( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env, + char c); + + /** + * @param response_writer pointer to response writer + * @param env pointer to environment struct + * @param buf pointer to buf + * @param offset + * @param len + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_response_writer_write_buf( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env, + char *buf, + int offset, + axis2_ssize_t len); + + /** + * @param response_writer pointer to response writer + * @param env pointer to environment struct + * @param str pointer to str + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_response_writer_print_str( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env, + const char *str); + + /** + * @param response_writer pointer to response writer + * @param env pointer to environment struct + * @param i + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_response_writer_print_int( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env, + int i); + + /** + * @param response_writer pointer to response writer + * @param env pointer to environment struct + * @param str pointer to str + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_response_writer_println_str( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env, + const char *str); + + /** + * @param response_writer pointer to response writer + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_response_writer_println( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env); + + /** + * @param response_writer pointer to response writer + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_response_writer_free( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @param stream pointer to stream + */ + AXIS2_EXTERN axis2_http_response_writer_t *AXIS2_CALL + + axis2_http_response_writer_create( + const axutil_env_t * env, + axutil_stream_t * stream); + + /** + * @param env pointer to environment struct + * @param stream pointer to stream + * @param encoding pointer to encoding + */ + AXIS2_EXTERN axis2_http_response_writer_t *AXIS2_CALL + + axis2_http_response_writer_create_with_encoding( + const axutil_env_t * env, + axutil_stream_t * stream, + const axis2_char_t * encoding); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_HTTP_RESPONSE_WRITER_H */ diff --git a/include/axis2_http_sender.h b/include/axis2_http_sender.h new file mode 100644 index 0000000..d2ee5e7 --- /dev/null +++ b/include/axis2_http_sender.h @@ -0,0 +1,226 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_HTTP_SENDER_H +#define AXIS2_HTTP_SENDER_H + +/** + * @ingroup axis2_core_transport_http + * @{ + */ + +/** + * @file axis2_http_sender.h + * @brief axis2 SOAP over HTTP sender + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef AXIS2_LIBCURL_ENABLED +#include +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_http_sender_ */ + typedef struct axis2_http_sender axis2_http_sender_t; + + /** + * @param sender sender + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @param out out + * @param str_url str url + * @param soap_action pointer to soap action + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_sender_send( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axiom_soap_envelope_t * out, + const axis2_char_t * str_url, + const axis2_char_t * soap_action); + + void AXIS2_CALL + axis2_http_sender_util_add_header( + const axutil_env_t * env, + axis2_http_simple_request_t * request, + axis2_char_t * header_name, + const axis2_char_t * header_value); + +#ifdef AXIS2_LIBCURL_ENABLED + typedef struct axis2_libcurl axis2_libcurl_t; + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_libcurl_http_send( + axis2_libcurl_t * curl, + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axiom_soap_envelope_t * out, + const axis2_char_t * str_url, + const axis2_char_t * soap_action); +#endif + + /** + * @param sender sender + * @param env pointer to environment struct + * @param chunked chunked + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_sender_set_chunked( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_bool_t chunked); + + /** + * @param sender sender + * @param env pointer to environment struct + * @param om_output om output + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_sender_set_om_output( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axiom_output_t * om_output); + + /** + * @param sender sender + * @param env pointer to environment struct + * @param version pointer to version + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_sender_set_http_version( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_char_t * version); + + /** + * @param sender sender + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_sender_free( + axis2_http_sender_t * sender, + const axutil_env_t * env); + + /** + * @param sender soap over http sender + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @param response pointer to response + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_sender_get_header_info( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_response_t * response); + + /** + * @param sender soap over http sender + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @param response pointer to response + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_sender_process_response( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_response_t * response); + + /** + * @param sender soap over http sender + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_sender_get_timeout_values( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_sender_get_param_string( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + AXIS2_EXTERN void AXIS2_CALL + axis2_http_sender_set_keep_alive( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_bool_t keep_alive); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_http_sender_get_keep_alive( + axis2_http_sender_t * sender, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_http_sender_t *AXIS2_CALL + axis2_http_sender_create( + const axutil_env_t * env); + + /** Send. */ +#define AXIS2_HTTP_SENDER_SEND(sender, env, msg_ctx, output, url,soap_action)\ + axis2_http_sender_send(sender, env, msg_ctx,output, url, soap_action) + + /** Set chunked. */ +#define AXIS2_HTTP_SENDER_SET_CHUNKED(sender, env, chunked) \ + axis2_http_sender_set_chunked(sender, env, chunked) + + /** Set om output. */ +#define AXIS2_HTTP_SENDER_SET_OM_OUTPUT(sender, env, om_output) \ + axis2_http_sender_set_om_output (sender, env, om_output) + + /** Set http version. */ +#define AXIS2_HTTP_SENDER_SET_HTTP_VERSION(sender, env, version)\ + axis2_http_sender_set_http_version (sender, env, version) + + /** Frees the soap over http sender. */ +#define AXIS2_HTTP_SENDER_FREE(sender, env) \ + axis2_http_sender_free(sender, env) + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_HTTP_SENDER_H */ diff --git a/include/axis2_http_server.h b/include/axis2_http_server.h new file mode 100644 index 0000000..4e31344 --- /dev/null +++ b/include/axis2_http_server.h @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_HTTP_SERVER_H +#define AXIS2_HTTP_SERVER_H + +/** + * @defgroup axis2_http_server http server + * @ingroup axis2_core_trans_http + * @{ + */ + +/** + * @file axis2_http_server.h + * @brief axis2 HTTP Server implementation + */ + +#include +#include +#include +#include +#include + + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN axis2_transport_receiver_t *AXIS2_CALL + axis2_http_server_create( + const axutil_env_t * env, + const axis2_char_t * repo, + const int port); + + AXIS2_EXTERN axis2_transport_receiver_t *AXIS2_CALL + axis2_http_server_create_with_file( + const axutil_env_t * env, + const axis2_char_t * file, + const int port); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_server_stop( + axis2_transport_receiver_t * server, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_HTTP_SERVER_H */ diff --git a/include/axis2_http_simple_request.h b/include/axis2_http_simple_request.h new file mode 100644 index 0000000..cb2b8b5 --- /dev/null +++ b/include/axis2_http_simple_request.h @@ -0,0 +1,229 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_HTTP_SIMPLE_REQUEST_H +#define AXIS2_HTTP_SIMPLE_REQUEST_H + +/** + * @defgroup axis2_http_simple_request http simple request + * @ingroup axis2_core_trans_http + * @{ + */ + +/** + * @file axis2_http_simple_request.h + * @brief axis2 HTTP Simple Request + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_http_simple_request */ + typedef struct axis2_http_simple_request axis2_http_simple_request_t; + + /** + * @param simple_request pointer to simple request + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_http_request_line_t *AXIS2_CALL + + axis2_http_simple_request_get_request_line( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env); + + /** + * @param simple_request pointer to simple request + * @param env pointer to environment struct + * @param request_line pointer to request line + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_simple_request_set_request_line( + axis2_http_simple_request_t * simple_request, + const axutil_env_t * env, + axis2_http_request_line_t * request_line); + + /** + * @param simple_request pointer to simple request + * @param env pointer to environment struct + * @param name pointer to name + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axis2_http_simple_request_contains_header( + axis2_http_simple_request_t * simple_request, + const axutil_env_t * env, + const axis2_char_t * name); + + /** + * @param simple_request pointer to simple request + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_http_simple_request_get_headers( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env); + + /** + * @param simple_request pointer to simple request + * @param env pointer to environment struct + * @param str pointer to str + */ + AXIS2_EXTERN axis2_http_header_t *AXIS2_CALL + + axis2_http_simple_request_get_first_header( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env, + const axis2_char_t * str); + + /** + * @param simple_request pointer to simple request + * @param env pointer to environment struct + * @param str pointer to str + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_simple_request_remove_headers( + axis2_http_simple_request_t * simple_request, + const axutil_env_t * env, + const axis2_char_t * str); + + /** + * @param simple_request pointer to simple request + * @param env pointer to environment struct + * @param header pointer to header + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_simple_request_add_header( + axis2_http_simple_request_t * simple_request, + const axutil_env_t * env, + axis2_http_header_t * header); + + /** + * @param simple_request pointer to simple request + * @param env pointer to environment struct + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + + axis2_http_simple_request_get_content_type( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env); + + /** + * @param simple_request pointer to simple request + * @param env pointer to environment struct + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + + axis2_http_simple_request_get_charset( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env); + + /** + * @param simple_request pointer to simple request + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_ssize_t AXIS2_CALL + + axis2_http_simple_request_get_content_length( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env); + + /** + * @param simple_request pointer to simple request + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_stream_t *AXIS2_CALL + + axis2_http_simple_request_get_body( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env); + + /** + * @param simple_request pointer to simple request + * @param env pointer to environment struct + * @param buf double pointer to buf + */ + AXIS2_EXTERN axis2_ssize_t AXIS2_CALL + + axis2_http_simple_request_get_body_bytes( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env, + char **buf); + + /** + * @param simple_request pointer to simple request + * @param env pointer to environment struct + * @param str pointer to str + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_simple_request_set_body_string( + axis2_http_simple_request_t * simple_request, + const axutil_env_t * env, + void *str, + unsigned int str_len); + + /** + * @param simple_request pointer to simple request + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_simple_request_free( + axis2_http_simple_request_t * simple_request, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @param request_line pointer to request line + * @param http_headers double pointer to http headers + * @param http_hdr_count + * @param content pointer to content + */ + AXIS2_EXTERN axis2_http_simple_request_t *AXIS2_CALL + + axis2_http_simple_request_create( + const axutil_env_t * env, + axis2_http_request_line_t * request_line, + axis2_http_header_t ** http_headers, + axis2_ssize_t http_hdr_count, + axutil_stream_t * content); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_HTTP_SIMPLE_REQUEST_H */ diff --git a/include/axis2_http_simple_response.h b/include/axis2_http_simple_response.h new file mode 100644 index 0000000..052e9cd --- /dev/null +++ b/include/axis2_http_simple_response.h @@ -0,0 +1,337 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_HTTP_SIMPLE_RESPONSE_H +#define AXIS2_HTTP_SIMPLE_RESPONSE_H + +/** + * @defgroup axis2_http_simple_response http simple response + * @ingroup axis2_core_trans_http + * @{ + */ + +/** + * @file axis2_simple_http_response.h + * @brief axis2 HTTP Simple Response + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_http_simple_response */ + typedef struct axis2_http_simple_response axis2_http_simple_response_t; + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + * @param http_ver pointer to http_ver + * @param status_code pointer to status code + * @param phrase pointer to phrase + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_simple_response_set_status_line( + struct axis2_http_simple_response *simple_response, + const axutil_env_t * env, + const axis2_char_t * http_ver, + const int status_code, + const axis2_char_t * phrase); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_http_simple_response_get_phrase( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_http_simple_response_get_status_code( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_http_simple_response_get_http_version( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_http_simple_response_get_status_line( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + * @param name pointer to name + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axis2_http_simple_response_contains_header( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + const axis2_char_t * name); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_http_simple_response_get_headers( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_http_simple_response_extract_headers( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + * @param str pointer to str + */ + AXIS2_EXTERN axis2_http_header_t *AXIS2_CALL + + axis2_http_simple_response_get_first_header( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + const axis2_char_t * str); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + * @param str pointer to str + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_simple_response_remove_headers( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + const axis2_char_t * str); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + * @param header pointer to header + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_simple_response_set_header( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axis2_http_header_t * header); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + * @param headers double pointer to headers + * @param array_size + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_simple_response_set_headers( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axis2_http_header_t ** headers, + axis2_ssize_t array_size); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + + axis2_http_simple_response_get_charset( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_ssize_t AXIS2_CALL + + axis2_http_simple_response_get_content_length( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + + axis2_http_simple_response_get_content_type( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + * @param str pointer to str + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_simple_response_set_body_string( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axis2_char_t * str); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + * @param stream pointer to stream + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_http_simple_response_set_body_stream( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axutil_stream_t * stream); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_stream_t *AXIS2_CALL + + axis2_http_simple_response_get_body( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + * @param buf double pointer to buf + */ + AXIS2_EXTERN axis2_ssize_t AXIS2_CALL + + axis2_http_simple_response_get_body_bytes( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axis2_char_t ** buf); + + /** + * @param simple_response pointer to simple response struct + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_simple_response_free( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @param status_line pointer to status line + * @param http_headers double pointer to http_headers + * @param http_hdr_count + * @param content pointer to content + */ + AXIS2_EXTERN axis2_http_simple_response_t *AXIS2_CALL + + axis2_http_simple_response_create( + const axutil_env_t * env, + axis2_http_status_line_t * status_line, + const axis2_http_header_t ** http_headers, + const axis2_ssize_t http_hdr_count, + axutil_stream_t * content); + + /** + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_http_simple_response_t *AXIS2_CALL + + axis2_http_simple_response_create_default( + const axutil_env_t * env); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_http_simple_response_get_mime_parts( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + axis2_http_simple_response_set_mime_parts( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axutil_array_list_t *mime_parts); + + axis2_status_t AXIS2_CALL + axis2_http_simple_response_set_http_version( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axis2_char_t *http_version); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_simple_response_get_mtom_sending_callback_name( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env); + + void AXIS2_EXTERN AXIS2_CALL + axis2_http_simple_response_set_mtom_sending_callback_name( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axis2_char_t *mtom_sending_callback_name); + + + + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_HTTP_SIMPLE_RESPONSE_H */ diff --git a/include/axis2_http_status_line.h b/include/axis2_http_status_line.h new file mode 100644 index 0000000..4480bdf --- /dev/null +++ b/include/axis2_http_status_line.h @@ -0,0 +1,131 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_HTTP_STATUS_LINE_H +#define AXIS2_HTTP_STATUS_LINE_H + +/** + * @defgroup axis2_http_status_line http status line + * @ingroup axis2_core_trans_http + * @{ + */ + +/** + * @file axis2_http_status_line.h + * @brief axis2 HTTP Status Line + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_http_status_line */ + typedef struct axis2_http_status_line axis2_http_status_line_t; + + /** + * @param status_line pointer to status line + * @param env pointer to environment struct + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_http_status_line_get_status_code( + const axis2_http_status_line_t * status_line, + const axutil_env_t * env); + + /** + * @param status_line pointer to status line + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_http_status_line_get_http_version( + const axis2_http_status_line_t * status_line, + const axutil_env_t * env); + + /** + * @param status_line pointer to status line + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_http_status_line_get_reason_phrase( + const axis2_http_status_line_t * status_line, + const axutil_env_t * env); + + /** + * @param status_line pointer to status line + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axis2_http_status_line_starts_with_http( + axis2_http_status_line_t * status_line, + const axutil_env_t * env); + + /** + * @param status_line pointer to status line + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_status_line_to_string( + axis2_http_status_line_t * status_line, + const axutil_env_t * env); + + /** + * @param status_line pointer to status line + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_status_line_free( + axis2_http_status_line_t * status_line, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @param str pointer to str + */ + AXIS2_EXTERN axis2_http_status_line_t *AXIS2_CALL + axis2_http_status_line_create( + const axutil_env_t * env, + const axis2_char_t * str); + + AXIS2_EXTERN axis2_http_status_line_t *AXIS2_CALL + axis2_http_status_line_create_with_values( + const axutil_env_t * env, + const axis2_char_t * http_ver, + const int status_code, + const axis2_char_t * phrase); + + AXIS2_EXTERN void AXIS2_CALL + axis2_http_status_line_set_http_version( + axis2_http_status_line_t * status_line, + const axutil_env_t * env, + axis2_char_t *http_version); + + + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_HTTP_STATUS_LINE_H */ diff --git a/include/axis2_http_svr_thread.h b/include/axis2_http_svr_thread.h new file mode 100644 index 0000000..12fe115 --- /dev/null +++ b/include/axis2_http_svr_thread.h @@ -0,0 +1,121 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_HTTP_SVR_THREAD_H +#define AXIS2_HTTP_SVR_THREAD_H + +/** + * @defgroup axis2_http_svr_thread http server thread + * @ingroup axis2_core_trans_http + * @{ + */ + +/** + * @file axis2_http_svr_thread.h + * @brief axis2 HTTP server listening thread implementation + */ + +#include +#include +#include +#include + + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axist_http_svr_thread */ + typedef struct axis2_http_svr_thread axis2_http_svr_thread_t; + + /** + * @param svr_thread pointer to server thread + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_svr_thread_run( + axis2_http_svr_thread_t * svr_thread, + const axutil_env_t * env); + + /** + * @param svr_thread pointer to server thread + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_svr_thread_destroy( + axis2_http_svr_thread_t * svr_thread, + const axutil_env_t * env); + + /** + * @param svr_thread pointer to server thread + * @param env pointer to environment struct + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_http_svr_thread_get_local_port( + const axis2_http_svr_thread_t * svr_thread, + const axutil_env_t * env); + + /** + * @param svr_thread pointer to server thread + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_http_svr_thread_is_running( + axis2_http_svr_thread_t * svr_thread, + const axutil_env_t * env); + + /** + * @param svr_thread pointer to server thread + * @param env pointer to environment struct + * @param worker pointer to worker + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_svr_thread_set_worker( + axis2_http_svr_thread_t * svr_thread, + const axutil_env_t * env, + axis2_http_worker_t * worker); + + /** + * @param svr_thread pointer to server thread + * @param env pointer to environment struct + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_svr_thread_free( + axis2_http_svr_thread_t * svr_thread, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @param port + */ + AXIS2_EXTERN axis2_http_svr_thread_t *AXIS2_CALL + axis2_http_svr_thread_create( + const axutil_env_t * env, + int port); + + AXIS2_EXTERN int AXIS2_CALL + axis2_http_svr_thread_get_listen_socket( + axis2_http_svr_thread_t *svr_thread, + const axutil_env_t *env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_HTTP_SVR_THREAD_H */ diff --git a/include/axis2_http_transport.h b/include/axis2_http_transport.h new file mode 100644 index 0000000..25f6e97 --- /dev/null +++ b/include/axis2_http_transport.h @@ -0,0 +1,1164 @@ + +/* +* Copyright 2004,2005 The Apache Software Foundation. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain count copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_HTTP_TRANSPORT_H +#define AXIS2_HTTP_TRANSPORT_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @defgroup axis2_core_trans_http http transport + * @ingroup axis2_transport + * Description. + * @{ + */ + + /** + * @defgroup axis2_core_transport_http core http transport + * @ingroup axis2_core_trans_http + * @{ + */ + + /** + * @brief HTTP protocol and message context constants. + * + */ + #define AXIS2_HTTP_OUT_TRANSPORT_INFO "HTTPOutTransportInfo" + + /** + * CARRIAGE RETURN AND LINE FEED + */ + #define AXIS2_HTTP_CRLF AXIS2_CRLF + + /** + * PROTOCOL_VERSION + */ + #define AXIS2_HTTP_PROTOCOL_VERSION "PROTOCOL" + + /** + * REQUEST_URI + */ + #define AXIS2_HTTP_REQUEST_URI "REQUEST_URI" + + /** + * RESPONSE_CODE + */ + #define AXIS2_HTTP_RESPONSE_CODE "RESPONSE_CODE" + + /** + * RESPONSE_WORD + */ + #define AXIS2_HTTP_RESPONSE_WORD "RESPONSE_WORD" + + /* + * RESPONSE_CONTINUE_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_CONTINUE_CODE_VAL 100 + + /* + * RESPONSE_OK_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_OK_CODE_VAL 200 + + /* + * RESPONSE_CREATED_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_CREATED_CODE_VAL 201 + + /** + * RESPONSE_ACK_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_ACK_CODE_VAL 202 + + /** + * RESPONSE_NON_AUTHORITATIVE_INFO_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_NON_AUTHORITATIVE_INFO_CODE_VAL 203 + + /** + * RESPONSE_NO_CONTENT_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_NO_CONTENT_CODE_VAL 204 + + /** + * RESPONSE_RESET_CONTENT_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_RESET_CONTENT_CODE_VAL 205 + + /** + * RESPONSE_MULTIPLE_CHOICES_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_MULTIPLE_CHOICES_CODE_VAL 300 + + /** + * RESPONSE_MOVED_PERMANENTLY_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_MOVED_PERMANENTLY_CODE_VAL 301 + + /** + * RESPONSE_SEE_OTHER_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_SEE_OTHER_CODE_VAL 303 + + /** + * RESPONSE_NOT_MODIFIED_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_VAL 304 + + /** + * RESPONSE_TEMPORARY_REDIRECT_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_TEMPORARY_REDIRECT_CODE_VAL 307 + + /** + * RESPONSE_BAD_REQUEST_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL 400 + + /** + * RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL 401 + + /** + * RESPONSE_HTTP_FORBIDDEN_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_FORBIDDEN_CODE_VAL 403 + + + /** + * RESPONSE_NOT_FOUND_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_NOT_FOUND_CODE_VAL 404 + + /** + * RESPONSE_METHOD_NOT_ALLOWED_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_METHOD_NOT_ALLOWED_CODE_VAL 405 + + /** + * RESPONSE_NOT_ACCEPTABLE_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_NOT_ACCEPTABLE_CODE_VAL 406 + + /** + * RESPONSE_PROXY_AUTHENTICATION_REQUIRED_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_PROXY_AUTHENTICATION_REQUIRED_CODE_VAL 407 + + /** + * RESPONSE_REQUEST_TIMEOUT_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL 408 + + /** + * RESPONSE_CONFLICT_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL 409 + + /** + * RESPONSE_GONE_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_GONE_CODE_VAL 410 + + /** + * RESPONSE_LENGTH_REQUIRED_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_LENGTH_REQUIRED_CODE_VAL 411 + + /** + * RESPONSE_PRECONDITION_FAILED_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL 412 + + /** + * RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL 413 + + /** + * RESPONSE_INTERNAL_SERVER_ERROR_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_VAL 500 + + /** + * RESPONSE_NOT_IMPLEMENTED_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_NOT_IMPLEMENTED_CODE_VAL 501 + + /** + * RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL + */ + #define AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL 503 + + /** + * RESPONSE_CONTINUE_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_CONTINUE_CODE_NAME "Continue" + + /** + * RESPONSE_OK_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_OK_CODE_NAME "OK" + + /* + * RESPONSE_CREATED_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_CREATED_CODE_NAME "Created" + + /** + * RESPONSE_ACK_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_ACK_CODE_NAME "Accepted" + + /** + * RESPONSE_NO_CONTENT_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_NO_CONTENT_CODE_NAME "No Content" + + /** + * RESPONSE_NON_AUTHORITATIVE_INFO_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_NON_AUTHORITATIVE_INFO_CODE_NAME "Non-Authoritative Information" + + /** + * RESPONSE_RESET_CONTENT_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_RESET_CONTENT_CODE_NAME "Reset Content" + + /** + * RESPONSE_MULTIPLE_CHOICES_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_MULTIPLE_CHOICES_CODE_NAME "Multiple Choices" + + /** + * RESPONSE_MOVED_PERMANENTLY_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_MOVED_PERMANENTLY_CODE_NAME "Moved Permanently" + + /** + * RESPONSE_SEE_OTHER_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_SEE_OTHER_CODE_NAME "See Other" + + /** + * RESPONSE_NOT_MODIFIED_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_NAME "Not Modified" + + /** + * RESPONSE_TEMPORARY_REDIRECT_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_TEMPORARY_REDIRECT_CODE_NAME "Temporary Redirect" + + /** + * RESPONSE_BAD_REQUEST_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_NAME "Bad Request" + + /** + * RESPONSE_HTTP_UNAUTHORIZED_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_NAME "Unauthorized" + + + /** + * RESPONSE_HTTP_FORBIDDEN_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_HTTP_FORBIDDEN_CODE_NAME "Forbidden" + + /** + * RESPONSE_NOT_FOUND_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_NOT_FOUND_CODE_NAME "Not Found" + + /** + * RESPONSE_METHOD_NOT_ALLOWED_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_METHOD_NOT_ALLOWED_CODE_NAME "Method Not Allowed" + + /** + * RESPONSE_NOT_ACCEPTABLE_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_NOT_ACCEPTABLE_CODE_NAME "Not Acceptable" + + /** + * RESPONSE_PROXY_AUTHENTICATION_REQUIRED_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_PROXY_AUTHENTICATION_REQUIRED_CODE_NAME "Proxy Authentication Required" + + /** + * RESPONSE_REQUEST_TIMEOUT_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_NAME "Request Timeout" + + /** + * RESPONSE_CONFLICT_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_CONFLICT_CODE_NAME "Conflict" + + /** + * RESPONSE_GONE_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_GONE_CODE_NAME "Gone" + + /** + * RESPONSE_LENGTH_REQUIRED_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_LENGTH_REQUIRED_CODE_NAME "Length Required" + + /** + * RESPONSE_PRECONDITION_FAILED_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_NAME "Precondition Failed" + + /** + * RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_NAME "Request Entity Too Large" + + /** + * RESPONSE_INTERNAL_SERVER_ERROR_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_NAME "Internal Server Error" + + /** + * RESPONSE_NOT_IMPLEMENTED_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_NOT_IMPLEMENTED_CODE_NAME "Not Implemented" + + /** + * RESPONSE_SERVICE_UNAVAILABLE_CODE_NAME + */ + #define AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_NAME "Service Unavailable" + + /** + * SOCKET + */ + #define AXIS2_SOCKET "SOCKET" + + /** + * HEADER_PROTOCOL_10 + */ + #define AXIS2_HTTP_HEADER_PROTOCOL_10 "HTTP/1.0" + + /** + * HEADER_PROTOCOL_11 + */ + #define AXIS2_HTTP_HEADER_PROTOCOL_11 "HTTP/1.1" + + /** + * CHAR_SET_ENCODING + */ + #define AXIS2_HTTP_CHAR_SET_ENCODING "charset" + + /** + * HEADER_POST + */ + #define AXIS2_HTTP_POST "POST" + + /** + * HEADER_GET + */ + #define AXIS2_HTTP_GET "GET" + + /** + * HEADER_HEAD + */ + #define AXIS2_HTTP_HEAD "HEAD" + + /** + * HEADER_PUT + */ + #define AXIS2_HTTP_PUT "PUT" + + /** + * HEADER_DELETE + */ + #define AXIS2_HTTP_DELETE "DELETE" + + /** + * HEADER_HOST + */ + #define AXIS2_HTTP_HEADER_HOST "Host" + + /** + * HEADER_CONTENT_DESCRIPTION + */ + #define AXIS2_HTP_HEADER_CONTENT_DESCRIPTION "Content-Description" + + /** + * HEADER_CONTENT_TYPE + */ + #define AXIS2_HTTP_HEADER_CONTENT_TYPE "Content-Type" + #define AXIS2_HTTP_HEADER_CONTENT_TYPE_ "Content-Type: " + + /** + *USER DEFINED HEADER CONTENT TYPE + */ + + #define AXIS2_USER_DEFINED_HTTP_HEADER_CONTENT_TYPE "User_Content_Type" + + /** + * HEADER_CONTENT_TYPE + */ + #define AXIS2_HTTP_HEADER_CONTENT_TYPE_MIME_BOUNDARY "boundary" + + /** + * HEADER_CONTENT_TRANSFER_ENCODING + */ + #define AXIS2_HTTP_HEADER_CONTENT_TRANSFER_ENCODING \ + "Content-Transfer-Encoding" + + /** + * HEADER_CONTENT_LENGTH + */ + #define AXIS2_HTTP_HEADER_CONTENT_LENGTH "Content-Length" + + /** + * HEADER_CONTENT_LANGUAGE + */ + #define AXIS2_HTTP_HEADER_CONTENT_LANGUAGE "Content-Language" + + #define AXIS2_HTTP_HEADER_CONTENT_LENGTH_ "Content-Length: " + + /** + * HEADER_CONTENT_LOCATION + */ + #define AXIS2_HTTP_HEADER_CONTENT_LOCATION "Content-Location" + + /** + * HEADER_CONTENT_ID + */ + #define AXIS2_HTTP_HEADER_CONTENT_ID "Content-Id" + + /** + * HEADER_SOAP_ACTION + */ + #define AXIS2_HTTP_HEADER_SOAP_ACTION "SOAPAction" + #define AXIS2_HTTP_HEADER_SOAP_ACTION_ "SOAPAction: " + + /** + * HEADER_AUTHORIZATION + */ + #define AXIS2_HTTP_HEADER_AUTHORIZATION "Authorization" + + /** + * HEADER_WWW_AUTHENTICATE + */ + #define AXIS2_HTTP_HEADER_WWW_AUTHENTICATE "WWW-Authenticate" + + /** + * HEADER_PROXY_AUTHENTICATE + */ + #define AXIS2_HTTP_HEADER_PROXY_AUTHENTICATE "Proxy-Authenticate" + + /** + * HEADER_PROXY_AUTHORIZATION + */ + #define AXIS2_HTTP_HEADER_PROXY_AUTHORIZATION "Proxy-Authorization" + + /** + * AUTHORIZATION_REQUEST_PARAM_REALM + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_REALM "realm" + + /** + * AUTHORIZATION_REQUEST_PARAM_DOMAIN + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_DOMAIN "domain" + + /** + * AUTHORIZATION_REQUEST_PARAM_NONCE + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE "nonce" + + /** + * AUTHORIZATION_REQUEST_PARAM_OPAQUE + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_OPAQUE "opaque" + + /** + * AUTHORIZATION_REQUEST_PARAM_STALE + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_STALE "stale" + + /** + * AUTHORIZATION_REQUEST_PARAM_ALGORITHM + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_ALGORITHM "algorithm" + + /** + * AUTHORIZATION_REQUEST_PARAM_QOP + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_QOP "qop" + + /** + * AUTHORIZATION_REQUEST_PARAM_USERNAME + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_USERNAME "username" + + /** + * AUTHORIZATION_REQUEST_PARAM_URI + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_URI "uri" + + /** + * AUTHORIZATION_REQUEST_PARAM_RESPONSE + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_RESPONSE "response" + + /** + * AUTHORIZATION_REQUEST_PARAM_NONCE_COUNT + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE_COUNT "nc" + + /** + * AUTHORIZATION_REQUEST_PARAM_CLIENT_NONCE + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_CLIENT_NONCE "cnonce" + + /** + * AUTHORIZATION_REQUEST_DEFAULT_CLIENT_NONCE + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_DEFAULT_CLIENT_NONCE "00000001" + + /** + * AUTHORIZATION_REQUEST_QOP_OPTION_AUTH + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_QOP_OPTION_AUTH "auth" + + /** + * AUTHORIZATION_REQUEST_QOP_OPTION_AUTH_INT + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_QOP_OPTION_AUTH_INT "auth-int" + + /** + * AUTHORIZATION_REQUEST_STALE_STATE_TRUE + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_STALE_STATE_TRUE "true" + + /** + * AUTHORIZATION_REQUEST_STALE_STATE_FALSE + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_STALE_STATE_FALSE "false" + + /** + * AUTHORIZATION_REQUEST_ALGORITHM_MD5 + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_ALGORITHM_MD5 "MD5" + + /** + * AUTHORIZATION_REQUEST_ALGORITHM_MD5_SESS + */ + #define AXIS2_HTTP_AUTHORIZATION_REQUEST_ALGORITHM_MD5_SESS "MD5-sess" + + /** + * HEADER_EXPECT + */ + #define AXIS2_HTTP_HEADER_EXPECT "Expect" + + /** + * HEADER_EXPECT_100_Continue + */ + #define AXIS2_HTTP_HEADER_EXPECT_100_CONTINUE "100-continue" + + /** + * HEADER_USER_AGENT + */ + #define AXIS2_HTTP_HEADER_USER_AGENT "User-Agent" + + /** + * HEADER_USER_AGENT_AXIS2C + */ + #define AXIS2_HTTP_HEADER_USER_AGENT_AXIS2C "User-Agent: Axis2C/" AXIS2_VERSION_STRING + + /** + * HEADER_SERVER + */ + #define AXIS2_HTTP_HEADER_SERVER "Server" + + /** + * HEADER_DATE + */ + #define AXIS2_HTTP_HEADER_DATE "Date" + + /** + * HEADER_SERVER_AXIS2C + */ + #define AXIS2_HTTP_HEADER_SERVER_AXIS2C "Axis2C/" AXIS2_VERSION_STRING + + #define AXIS2_HTTP_HEADER_ACCEPT_ "Accept: " + + #define AXIS2_HTTP_HEADER_EXPECT_ "Expect: " + + /** + * HEADER_CACHE_CONTROL + */ + #define AXIS2_HTTP_HEADER_CACHE_CONTROL "Cache-Control" + + /** + * HEADER_CACHE_CONTROL_NOCACHE + */ + #define AXIS2_HTTP_HEADER_CACHE_CONTROL_NOCACHE "no-cache" + + /** + * HEADER_PRAGMA + */ + #define AXIS2_HTTP_HEADER_PRAGMA "Pragma" + + /** + * HEADER_LOCATION + */ + #define AXIS2_HTTP_HEADER_LOCATION "Location" + + /** + * REQUEST_HEADERS + */ + #define AXIS2_HTTP_REQUEST_HEADERS "HTTP-Request-Headers" + + /** + * RESPONSE_HEADERS + */ + #define AXIS2_HTTP_RESPONSE_HEADERS "HTTP-Response-Headers" + + /* http 1.1 */ + + /** + * HEADER_TRANSFER_ENCODING + */ + #define AXIS2_HTTP_HEADER_TRANSFER_ENCODING "Transfer-Encoding" + + /** + * HEADER_TRANSFER_ENCODING_CHUNKED + */ + #define AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED "chunked" + + /** + * HEADER_CONNECTION + */ + #define AXIS2_HTTP_HEADER_CONNECTION "Connection" + +#define AXIS2_HTTP_CONNECTION_MAP "connection_map" + + /** + * HEADER_CONNECTION_CLOSE + */ + #define AXIS2_HTTP_HEADER_CONNECTION_CLOSE "close" + + /** + * HEADER_CONNECTION_KEEPALIVE + */ + #define AXIS2_HTTP_HEADER_CONNECTION_KEEPALIVE "Keep-Alive" + + #define AXIS2_TRANPORT_IS_APPLICATION_CLIENT_SIDE "is_app_client_side" + /** + * HEADER_ACCEPT + */ + #define AXIS2_HTTP_HEADER_ACCEPT "Accept" + + /** + * HEADER_ACCEPT_CHARSET + */ + #define AXIS2_HTTP_HEADER_ACCEPT_CHARSET "Accept-Charset" + + /** + * AXIS2_HTTP_HEADER_ACCEPT_LANGUAGE + */ + #define AXIS2_HTTP_HEADER_ACCEPT_LANGUAGE "Accept-Language" + + /** + * HEADER_ALLOW + */ + #define AXIS2_HTTP_HEADER_ALLOW "Allow" + + /** + * HEADER_ACCEPT_ALL + */ + #define AXIS2_HTTP_HEADER_ACCEPT_ALL "*/*" + + /** + * HEADER_ACCEPT_TEXT_ALL + */ + #define AXIS2_HTTP_HEADER_ACCEPT_TEXT_ALL "text/*" + + /** + * HEADER_ACCEPT_TEXT_PLAIN + */ + #define AXIS2_HTTP_HEADER_ACCEPT_TEXT_PLAIN "text/plain" + + /** + * HEADER_ACCEPT_TEXT_HTML + */ + #define AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML "text/html" + + /** + * HEADER APPLICATION_XML + */ + #define AXIS2_HTTP_HEADER_ACCEPT_APPLICATION_XML "application/xml" + + /** + * HEADER_ACCEPT_TEXT_XML + */ + #define AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML "text/xml" + + /** + * HEADER_ACCEPT_APPL_SOAP + */ + #define AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP "application/soap+xml" + + /** + * HEADER_ACCEPT_X_WWW_FORM_URLENCODED + */ + #define AXIS2_HTTP_HEADER_ACCEPT_X_WWW_FORM_URLENCODED "application/x-www-form-urlencoded" + + /** + * HEADER XOP XML + */ + #define AXIS2_HTTP_HEADER_ACCEPT_XOP_XML AXIOM_MIME_TYPE_XOP_XML + + /** + * HEADER_ACCEPT_MULTIPART_RELATED + */ + #define AXIS2_HTTP_HEADER_ACCEPT_MULTIPART_RELATED AXIOM_MIME_TYPE_MULTIPART_RELATED + + /** + * HEADER_ACCEPT_APPLICATION_DIME + */ + #define AXIS2_HTTP_HEADER_ACCEPT_APPLICATION_DIME "application/dime" + + /** + * Cookie headers + */ + #define AXIS2_HTTP_HEADER_COOKIE "Cookie" + + /** + * HEADER_COOKIE2 + */ + #define AXIS2_HTTP_HEADER_COOKIE2 "Cookie2" + + /** + * HEADER_SET_COOKIE + */ + #define AXIS2_HTTP_HEADER_SET_COOKIE "Set-Cookie" + + /** + * HEADER_SET_COOKIE2 + */ + #define AXIS2_HTTP_HEADER_SET_COOKIE2 "Set-Cookie2" + + /** + * HTTP header field values + */ + #define AXIS2_HTTP_HEADER_DEFAULT_CHAR_ENCODING "iso-8859-1" + + /** + * REPONSE_HTTP_OK + */ + #define AXIS2_HTTP_RESPONSE_OK "200 OK" + + /** + * RESPONSE_HTTP_NOCONTENT + */ + #define AXIS2_HTTP_RESPONSE_NOCONTENT "202 OK"; + + /** + * RESPONSE_HTTP_UNAUTHORIZED + */ + #define AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED "401 Unauthorized" + + + /** + * RESPONSE_HTTP_FORBIDDEN + */ + #define AXIS2_HTTP_RESPONSE_HTTP_FORBIDDEN "403 Forbidden" + + /** + * RESPONSE_PROXY_AUTHENTICATION_REQUIRED + */ + #define AXIS2_HTTP_RESPONSE_PROXY_AUTHENTICATION_REQUIRED "407 Proxy Authentication Required" + + /** + * RESPONSE_BAD_REQUEST + */ + #define AXIS2_HTTP_RESPONSE_BAD_REQUEST "400 Bad Request" + + /** + * RESPONSE_HTTP_INTERNAL_SERVER_ERROR + */ + #define AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR "500 Internal Server Error" + + /** + * HTTP_REQ_TYPE + */ + #define AXIS2_HTTP_REQ_TYPE "HTTP_REQ_TYPE" + + /** + * SO_TIMEOUT + */ + #define AXIS2_HTTP_SO_TIMEOUT "SO_TIMEOUT" + + /** + * CONNECTION_TIMEOUT + */ + #define AXIS2_HTTP_CONNECTION_TIMEOUT "CONNECTION_TIMEOUT" + + /** + * DEFAULT_SO_TIMEOUT + */ + #define AXIS2_HTTP_DEFAULT_SO_TIMEOUT 60000 + + /** + * DEFAULT_CONNECTION_TIMEOUT + */ + #define AXIS2_HTTP_DEFAULT_CONNECTION_TIMEOUT 60000 + + #define AXIS2_HTTP_PROXY "PROXY" + + /** + * ISO-8859-1 encoding + */ + #define AXIS2_HTTP_ISO_8859_1 "ISO-8859-1" + + /** + * Default charset in content + */ + #define AXIS2_HTTP_DEFAULT_CONTENT_CHARSET "ISO-8859-1" + + /** + * Field TRANSPORT_HTTP + */ + #define AXIS2_TRANSPORT_HTTP "http" + + /** + * Msg context response written key + */ + #define AXIS2_RESPONSE_WRITTEN "CONTENT_WRITTEN" + + /** + * Content type for MTOM + */ + #define MTOM_RECIVED_CONTENT_TYPE "MTOM_RECEIVED" + + /** + * Constant for HTTP authentication + */ + #define AXIS2_HTTP_AUTHENTICATION "HTTP-Authentication" + + /** + * Constant for HTTP authentication username + */ + #define AXIS2_HTTP_AUTHENTICATION_USERNAME "username" + + /** + * Constant for HTTP authentication password + */ + #define AXIS2_HTTP_AUTHENTICATION_PASSWORD "password" + + /** + * Constant for HTTP proxy + */ + #define AXIS2_HTTP_PROXY "PROXY" + + /** + * Constant for HTTP proxy host + */ + #define AXIS2_HTTP_PROXY_HOST "proxy_host" + + /** + * Constant for HTTP proxy port + */ + #define AXIS2_HTTP_PROXY_PORT "proxy_port" + + /** + * Constant for HTTP proxy username + */ + #define AXIS2_HTTP_PROXY_USERNAME "proxy_username" + + /** + * Constant for HTTP proxy password + */ + #define AXIS2_HTTP_PROXY_PASSWORD "proxy_password" + + + #define AXIS2_HTTP_PROXY_API "PROXY_API" + + /** + * Constant for HTTP method + */ + #define AXIS2_HTTP_METHOD "HTTP_METHOD" + + /** + * Constant for SSL Server Certificate + */ + #define AXIS2_SSL_SERVER_CERT "SERVER_CERT" + + /** + * Constant for SSL Key File + */ + #define AXIS2_SSL_KEY_FILE "KEY_FILE" + + /** + * Constant for SSL Passphrase + */ + #define AXIS2_SSL_PASSPHRASE "SSL_PASSPHRASE" + + /** + * Constant for SSL verify server host property name + * + * 2 - certificate name must match intended host name + * 1 - certificate must have any Common Name + * 0 - do not check certificate name + * + * Only used with libcurl. + */ + #define AXIS2_SSL_VERIFY_HOST "SSL_VERIFY_HOST" + + /** + * Constant for SSL verify server certificate property name + * + * AXIS2_TRUE - verify certificate is authentic + * AXIS2_FALSE - do not check certificate + * + * Only used with libcurl. + */ + #define AXIS2_SSL_VERIFY_PEER "SSL_VERIFY_PEER" + + + /** + * HTTP authentication username property name + */ + #define AXIS2_HTTP_AUTH_UNAME "HTTP_AUTH_USERNAME" + + /** + * HTTP authentication password property name + */ + #define AXIS2_HTTP_AUTH_PASSWD "HTTP_AUTH_PASSWD" + + /** + * Proxy authentication username property name + */ + #define AXIS2_PROXY_AUTH_UNAME "PROXY_AUTH_USERNAME" + + /** + * Proxy authentication password property name + */ + #define AXIS2_PROXY_AUTH_PASSWD "PROXY_AUTH_PASSWD" + + + /* #define AXIS2_HTTP_AUTH_TYPE "HTTP_AUTH_TYPE"*/ + + /** + * HTTP "Basic" authentication + */ + #define AXIS2_HTTP_AUTH_TYPE_BASIC "Basic" + + /** + * HTTP "Digest" authentication + */ + #define AXIS2_HTTP_AUTH_TYPE_DIGEST "Digest" + + /** + * Proxy "Basic" authentication + */ + #define AXIS2_PROXY_AUTH_TYPE_BASIC "Basic" + + /** + * Proxy "Digest" authentication + */ + #define AXIS2_PROXY_AUTH_TYPE_DIGEST "Digest" + + + /** + *HTTP Transport Level Error + */ + #define AXIS2_HTTP_TRANSPORT_ERROR "http_transport_error" + + /** + *415 Unsupported media Type + */ + #define AXIS2_HTTP_UNSUPPORTED_MEDIA_TYPE "415 Unsupported Media Type\r\n" + + /** + *Constant for HTTP headers that user specify, Those headers will + *provided as property to the message context. + */ + #define AXIS2_TRANSPORT_HEADER_PROPERTY "HTTP_HEADER_PROPERTY" + + /** + * Default session duration + */ +#define AXIS2_TRANSPORT_SESSION_EXPIRE_DURATION 60 /* seconds */ + /** + * When a service need session it need to set a hash table into message context. + */ +#define AXIS2_TRANSPORT_SESSION_TABLE "session-table" + +#define AXIS2_TRANSPORT_SESSION_ID "session_id" +#define AXIS2_TRANSPORT_SESSION_MAP "session_map" + +#define AXIS2_TRANSPORT_URL_HTTPS "HTTPS" + + #define AXIS2_Q_MARK_STR "?" + + #define AXIS2_Q_MARK '?' + + #define AXIS2_H_MARK '#' + + #define AXIS2_ALL "ALL" + + #define AXIS2_USER_AGENT "Axis2C/" AXIS2_VERSION_STRING + + #define AXIS2_AND_SIGN "&" + + #define AXIS2_ESC_DOUBLE_QUOTE '\"' + + #define AXIS2_ESC_DOUBLE_QUOTE_STR "\"" + + #define AXIS2_ESC_SINGLE_QUOTE '\'' + + #define AXIS2_DOUBLE_QUOTE '"' + + #define AXIS2_ESC_NULL '\0' + + #define AXIS2_SEMI_COLON_STR ";" + + #define AXIS2_SEMI_COLON ';' + + #define AXIS2_COLON ':' + + #define AXIS2_COLON_STR ":" + + #define AXIS2_CONTENT_TYPE_ACTION ";action=\"" + + #define AXIS2_CONTENT_TYPE_CHARSET ";charset=" + + #define AXIS2_CHARSET "charset" + + #define AXIS2_PORT_STRING "port" + + #define AXIS2_DEFAULT_HOST_ADDRESS "127.0.0.1" + + #define AXIS2_DEFAULT_SVC_PATH "/axis2/services/" + + #define AXIS2_HTTP_PROTOCOL "http" + + #define AXIS2_HTTP "HTTP" + + #define AXIS2_SPACE_COMMA " ," + + #define AXIS2_COMMA ',' + + #define AXIS2_Q 'q' + + #define AXIS2_EQ_N_SEMICOLON " =;" + + #define AXIS2_LEVEL "level" + + #define AXIS2_SPACE_SEMICOLON " ;" + + #define AXIS2_SPACE ' ' + + #define AXIS2_RETURN '\r' + + #define AXIS2_NEW_LINE '\n' + + #define AXIS2_F_SLASH '/' + + #define AXIS2_B_SLASH '\\' + + #define AXIS2_EQ '=' + + #define AXIS2_AND '&' + + #define AXIS2_PERCENT '%' + + #define AXIS2_HTTP_SERVER " (Simple Axis2 HTTP Server)" + + #define AXIS2_COMMA_SPACE_STR ", " + + #define AXIS2_SPACE_TAB_EQ " \t=" + + #define AXIS2_ACTION "action" + + /* Error Messages */ + + #define AXIS2_HTTP_NOT_FOUND "404 Not Found\ +

Not Found

The requested URL was not found on this server.\ +

" + + + #define AXIS2_HTTP_NOT_IMPLEMENTED "501 Not Implemented\ +

Not Implemented

The requested Method is not\ +implemented on this server.

" + + + #define AXIS2_HTTP_INTERNAL_SERVER_ERROR "500 Internal Server\ + Error

Internal Server Error

The server \ +encountered an unexpected condition which prevented it from fulfilling the \ +request.

" + + + #define AXIS2_HTTP_METHOD_NOT_ALLOWED "405 Method Not Allowed\ +

Method Not Allowed

The requested method is not\ +allowed for this URL.

" + + #define AXIS2_HTTP_NOT_ACCEPTABLE "406 Not Acceptable\ +

Not Acceptable

An appropriate representation of \ +the requested resource could not be found on this server.

" + + #define AXIS2_HTTP_BAD_REQUEST "400 Bad Request\ +

Bad Request

Your client sent a request that this server\ + could not understand.

" + + #define AXIS2_HTTP_REQUEST_TIMEOUT "408 Request Timeout\ +

Request Timeout

Cannot wait any longer for \ +the HTTP request from the client.

" + + #define AXIS2_HTTP_CONFLICT "409 Conflict\ +

Conflict

The client attempted to put the server\'s resources\ + into an invalid state.

" + + #define AXIS2_HTTP_GONE "410 Gone\ +

Gone

The requested resource is no longer available on this server.\ +

" + + #define AXIS2_HTTP_PRECONDITION_FAILED "412 Precondition \ +Failed

Precondition Failed

A precondition for\ + the requested URL failed.

" + + #define AXIS2_HTTP_TOO_LARGE "413 Request Entity Too Large\ +

Request Entity Too Large

The data provided in\ + the request is too large or the requested resource does not allow request \ +data.

" + + #define AXIS2_HTTP_SERVICE_UNAVILABLE "503 Service \ +Unavailable

Service Unavailable

The service\ + is temporarily unable to serve your request.

" + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_HTTP_TRANSPORT_H */ diff --git a/include/axis2_http_transport_sender.h b/include/axis2_http_transport_sender.h new file mode 100644 index 0000000..4c8dab8 --- /dev/null +++ b/include/axis2_http_transport_sender.h @@ -0,0 +1,59 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_HTTP_TRANSPORT_SENDER_H +#define AXIS2_HTTP_TRANSPORT_SENDER_H + +/** + * @defgroup axis2_http_transport_sender http transport sender + * @ingroup axis2_core_trans_http + * @{ + */ + +/** + * @file axis2_http_transport_sender.h + * @brief axis2 HTTP Transport Sender (Handler) implementation + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_transport_sender_t *AXIS2_CALL + + axis2_http_transport_sender_create( + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_HTTP_TRANSPORT_SENDER_H */ diff --git a/include/axis2_http_transport_utils.h b/include/axis2_http_transport_utils.h new file mode 100644 index 0000000..9cf7563 --- /dev/null +++ b/include/axis2_http_transport_utils.h @@ -0,0 +1,487 @@ +/* + * Licensedo to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_HTTP_TRANSPORT_UTILS_H +#define AXIS2_HTTP_TRANSPORT_UTILS_H + +#define AXIS2_MTOM_OUTPUT_BUFFER_SIZE 1024 + +/** + * @ingroup axis2_core_transport_http + * @{ + */ + +/** + * @file axis2_http_transport_utils.h + * @brief axis2 HTTP Transport Utility functions + * This file includes functions that handles soap and rest request + * that comes to the engine via HTTP protocol. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef enum axis2_http_method_types + { + AXIS2_HTTP_METHOD_GET = 0, + AXIS2_HTTP_METHOD_POST, + AXIS2_HTTP_METHOD_HEAD, + AXIS2_HTTP_METHOD_PUT, + AXIS2_HTTP_METHOD_DELETE + }axis2_http_method_types_t; + + + typedef struct axis2_http_transport_in + { + /** HTTP Content type */ + axis2_char_t *content_type; + /** HTTP Content length */ + int content_length; + /** Input message context */ + axis2_msg_ctx_t *msg_ctx; + + /** soap action */ + axis2_char_t *soap_action; + + /** complete request uri */ + axis2_char_t *request_uri; + + /** Input stream */ + axutil_stream_t *in_stream; + + /** remote request ip corresponds to CGI header REMOTE_ADDR */ + axis2_char_t *remote_ip; + + /** server port */ + axis2_char_t *svr_port; + + /** HTTP transfer encoding header value */ + axis2_char_t *transfer_encoding; + + /** HTTP Accept header */ + axis2_char_t *accept_header; + + /** HTTP Accept language header */ + axis2_char_t *accept_language_header; + + /** HTTP accept charset header */ + axis2_char_t *accept_charset_header; + /** H&TTP METHOD Should be one of AXIS2_HTTP_METHOD_GET | AXIS2_HTTP_METHOD_POST |" + AXIS2_HTTP_METHOD_HEAD | AXIS2_HTTP_METHOD_PUT | AXIS2_HTTP_METHOD_DELETE" */ + int request_method; + /** out transport */ + axis2_http_out_transport_info_t *out_transport_info; + /** this is for serving services html */ + axis2_char_t *request_url_prefix; + + }axis2_http_transport_in_t; + + typedef struct axis2_http_transport_out + { + /** HTTP Status code string */ + axis2_char_t *http_status_code_name; + /** HTTP Status code value */ + int http_status_code; + /** Out message context */ + axis2_msg_ctx_t *msg_ctx; + /** Response data */ + void *response_data; + /** HTTP content type */ + axis2_char_t *content_type; + /** Response data length */ + int response_data_length; + /** content language */ + axis2_char_t *content_language; + /** output headers list */ + axutil_array_list_t *output_headers; + + }axis2_http_transport_out_t; + + /** + * size of the key stored in the session file + */ + #define AXIS2_TRANSPORT_SESSION_KEY_SIZE 64 + /** + * size of the value stored in the session file + */ + #define AXIS2_TRANSPORT_SESSION_VALUE_SIZE 256 + typedef struct axis2_session_file_record + { + axis2_char_t key[AXIS2_TRANSPORT_SESSION_KEY_SIZE]; + axis2_char_t value[AXIS2_TRANSPORT_SESSION_VALUE_SIZE]; + } axis2_session_file_record_t; + + /** + * This will retrieve the session table, set by a service or a module and store it in a session + * file named with the unique session id, generated here in. Then it return the Set-Cookie http + * header with value containing session id and session expire time. + * @param env, environments + * @param msg_ctx + * @return cookie_header + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_session( + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx); + + /** + * When the transport receive a Cookie header it calls this function. This will retrieve the + * stored session info from the file related to the id value of the cookie. It also check + * whether the session has timeout by comparing the session expire time contained in the cookie + * value with the expire time contained in the file. If session expired then it return nothing. + * If session is still valid it put the values in a hash table and set it into message context. + * @param env, environments + * @param id + * @param msg_ctx + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_transport_utils_set_session( + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx, + axis2_char_t *session_str); + + /** + * After receiving Set-Cookie header in client side store it + * @param env, environments + * @param msg_ctx + * @param cookie + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_transport_utils_store_cookie( + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx, + axis2_char_t *cookie); + + /** + * Read from cookie store before sending from client side + * @param env, environments + * @param msg_ctx + * @return cookie string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_read_from_cookie_store( + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx); + + /** + * Initialize the axis2_http_tranport_in_t. Before using this structure users should + * initialize it using this method. + * @param in a pointer to a axis2_http_tranport_in_t + * @param env, environments + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_transport_in_init(axis2_http_transport_in_t *in, + const axutil_env_t *env); + + /** + * Uninitialize the axis2_http_tranport_in_t. Before using this structure users should + * initialize it using this method. + * @param in a pointer to a axis2_http_tranport_in_t + * @param env, environments + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_transport_in_uninit(axis2_http_transport_in_t *request, + const axutil_env_t *env); + + /** + * Initialize the axis2_http_tranport_out_t. Before using this structure users should + * initialize it using this method. + * @param out a pointer to a axis2_http_tranport_out_t + * @param env, environments + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_transport_out_init(axis2_http_transport_out_t *out, + const axutil_env_t *env); + + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_transport_out_uninit(axis2_http_transport_out_t *response, + const axutil_env_t *env); + /** + * This methods provides the HTTP request handling functionality using axis2 for server side + * HTTP modules. + * @param env, environments + * @param conf_ctx, Instance of axis2_conf_ctx_t + * @param request, populated instance of axis2_http_transport_in_t struct + * @param response, an instance of axis2_http_transport_out_t struct + * @returns AXIS2_SUCCESS on success, AXIS2_FAILURE Otherwise + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_process_request( + const axutil_env_t *env, + axis2_conf_ctx_t *conf_ctx, + axis2_http_transport_in_t *request, + axis2_http_transport_out_t *response); + + + + /** + * This function handles the HTTP POST request that comes to the axis2 engine. + * The request can be either a SOAP request OR a REST request. + * @param env, axutil_env_t instance + * @param msg_ctx, Input message context. (an instance of axis2_msg_ctx_t struct.) + * @param in_stream, This is the input message content represented as an axutil_stream instance. + * A callback function will be used to read as required from the stream with in the engine. + * @param out_stream, This is the output stream. The outgoing message contents is represented as + * an instance of axutil_stream + * @param content_type, HTTP content type. This value should not be null. + * @param content_length, HTTP Content length value. + * @param soap_action_header, SOAPAction header value. This is only required in case of SOAP 1.1. + * For SOAP 1.2 , the action header will be within the ContentType header and + * this method is able to obtain the extract the action header value from content type. + * @param request_uri, This is the HTTP request uri. Should not be null. + * @returns AXIS2_SUCCESS on success, AXIS2_FAILURE Otherwise + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_process_http_post_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + const int content_length, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri); + + + /** + * This method handles the HTTP put request. Parameters are similar to that of post_request + * method. + * @param env, environment + * @param msg_ctx, in message context. + * @param in_stream, input stream + * @param out_stream, output stream. + * @param content_type, HTTP ContentType header value + * @param content_length, HTTP Content length value + * @param soap_action_header, SOAP Action header value + * @param request_uri, request uri + * @returns AXIS2_SUCCESS on success, AXIS2_FAILURE Otherwise + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_process_http_put_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + const int content_length, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_http_transport_utils_process_http_get_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri, + axis2_conf_ctx_t * conf_ctx, + axutil_hash_t * request_params); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axis2_http_transport_utils_process_http_head_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri, + axis2_conf_ctx_t * conf_ctx, + axutil_hash_t * request_params); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axis2_http_transport_utils_process_http_delete_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri, + axis2_conf_ctx_t * conf_ctx, + axutil_hash_t * request_params); + + AXIS2_EXTERN axiom_stax_builder_t *AXIS2_CALL + + axis2_http_transport_utils_select_builder_for_mime( + const axutil_env_t * env, + axis2_char_t * request_uri, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axis2_char_t * content_type); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axis2_http_transport_utils_do_write_mtom( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + + axis2_http_transport_utils_get_request_params( + const axutil_env_t * env, + axis2_char_t * request_uri); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_not_found( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_not_implemented( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_method_not_allowed( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_not_acceptable( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_bad_request( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_request_timeout( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_conflict( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_gone( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_precondition_failed( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_request_entity_too_large( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_service_unavailable( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_internal_server_error( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_http_transport_utils_get_services_html( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_http_transport_utils_get_services_static_wsdl( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_char_t * request_url); + + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + + axis2_http_transport_utils_get_request_params( + const axutil_env_t * env, + axis2_char_t * request_uri); + + AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL + + axis2_http_transport_utils_create_soap_msg( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + const axis2_char_t * soap_ns_uri); + + AXIS2_EXTERN axutil_array_list_t* AXIS2_CALL + axis2_http_transport_utils_process_accept_headers( + const axutil_env_t *env, + axis2_char_t *accept_value); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_send_mtom_message( + axutil_http_chunked_stream_t * chunked_stream, + const axutil_env_t * env, + axutil_array_list_t *mime_parts, + axis2_char_t *sending_callback_name); + + AXIS2_EXTERN void AXIS2_CALL + axis2_http_transport_utils_destroy_mime_parts( + axutil_array_list_t *mime_parts, + const axutil_env_t *env); + + AXIS2_EXTERN void *AXIS2_CALL + axis2_http_transport_utils_initiate_callback( + const axutil_env_t *env, + axis2_char_t *callback_name, + void *user_param, + axiom_mtom_sending_callback_t **callback); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL axis2_http_transport_utils_is_callback_required( + const axutil_env_t *env, + axutil_array_list_t *mime_parts); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_session_id_from_cookie( + const axutil_env_t *env, + axis2_char_t *cookie); + + + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_HTTP_TRANSPORT_UTILS_H */ diff --git a/include/axis2_http_worker.h b/include/axis2_http_worker.h new file mode 100644 index 0000000..84bcc4b --- /dev/null +++ b/include/axis2_http_worker.h @@ -0,0 +1,115 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_HTTP_WORKER_H +#define AXIS2_HTTP_WORKER_H + +/** + * @defgroup axis2_http_worker http worker + * @ingroup axis2_core_trans_http + * @{ + */ + +/** + * @file axis2_http_worker.h + * @brief axis2 HTTP Worker + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_http_worker */ + typedef struct axis2_http_worker axis2_http_worker_t; + + /** + * @param http_worker pointer to http worker + * @param env pointer to environment struct + * @param svr_conn pointer to svr conn + * @param simple_request pointer to simple request + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_http_worker_process_request( + axis2_http_worker_t * http_worker, + const axutil_env_t * env, + axis2_simple_http_svr_conn_t * svr_conn, + axis2_http_simple_request_t * simple_request); + + /** + * @param http_worker pointer to http worker + * @param env pointer to environment struct + * @param port + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_worker_set_svr_port( + axis2_http_worker_t * http_worker, + const axutil_env_t * env, + int port); + + AXIS2_EXTERN void AXIS2_CALL + axis2_http_worker_set_is_application_client_side( + axis2_http_worker_t *http_worker, + const axutil_env_t *env, + axis2_bool_t application_client_side); + + /** + * @param http_worker pointer to http worker + * @param env pointer to environment strut + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_worker_free( + axis2_http_worker_t * http_worker, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @param conf_ctx pointer to configuration context + */ + AXIS2_EXTERN axis2_http_worker_t *AXIS2_CALL + axis2_http_worker_create( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + /*#define AXIS2_HTTP_WORKER_PROCESS_REQUEST(http_worker, env, svr_conn,\ + simple_request) axis2_http_worker_process_request(\ + http_worker, env, svr_conn, simple_request) + + #define AXIS2_HTTP_WORKER_SET_SVR_PORT(http_worker, env, port) \ + axis2_http_worker_set_svr_port(http_worker, env, port) + + #define AXIS2_HTTP_WORKER_FREE(http_worker, env) \ + axis2_http_worker_free(http_worker, env) + */ + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_HTTP_WORKER_H */ diff --git a/include/axis2_listener_manager.h b/include/axis2_listener_manager.h new file mode 100644 index 0000000..c16f5be --- /dev/null +++ b/include/axis2_listener_manager.h @@ -0,0 +1,136 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_LISTENER_MANAGER_H +#define AXIS2_LISTENER_MANAGER_H + +/** + * @defgroup axis2_listener_manager listener manager + * @ingroup axis2_core_context + * listener manager manages the listeners in case of dual channel invocations. + * In case of a dual channel invocation, request is sent along one channel + * and the response is received on another channel. When the response is + * expected to be received along another transport channel, it has to be + * made sure that the listener socket is up in anticipation of the response + * and also that listener must be closed once the response is received. + * listener manager is responsible for dealing with these tasks. + * @{ + */ + +/** + * @file axis2_listener_manager.h + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_listener_manager */ + typedef struct axis2_listener_manager axis2_listener_manager_t; + + /** + * Ensures that the named transport's listener is started. Starts a listener + * if it is not already started. Only one listener would be started for a given + * transport. + * @param listener_manager pointer to listener manager struct + * @param env pointer to environment struct + * @param transport name of the transport + * @param conf_ctx configuration context to pick transport info for the + * named transport + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_listener_manager_make_sure_started( + axis2_listener_manager_t * listener_manager, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS transport, + axis2_conf_ctx_t * conf_ctx); + + /** + * Stops the named listener transport. + * @param listener_manager pointer to listener manager struct + * @param env pointer to environment struct + * @param transport name of the transport whose listener is to be stopped + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_listener_manager_stop( + axis2_listener_manager_t * listener_manager, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS transport); + + /** + * Gets reply to end point reference. The engine will direct the + * response for the message to this reply to address. + * @param listener_manager pointer to listener manager struct + * @param env pointer to environment struct + * @param svc_name name of the service for which the epr is to be returned + * @param transport name of the transport corresponding to the endpoint + * @return a pointer to endpoint reference struct representing the reply + * endpoint + */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_listener_manager_get_reply_to_epr( + const axis2_listener_manager_t * listener_manager, + const axutil_env_t * env, + const axis2_char_t * svc_name, + const AXIS2_TRANSPORT_ENUMS transport); + + /** + * Gets the configuration context that holds information on the transports + * managed by the listener manager. + * @param listener_manager pointer to listener manager struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_conf_ctx_t *AXIS2_CALL + axis2_listener_manager_get_conf_ctx( + const axis2_listener_manager_t * listener_manager, + const axutil_env_t * env); + + /** + * Frees listener manager struct. + * @param listener_manager pointer to listener manager struct + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_listener_manager_free( + axis2_listener_manager_t * listener_manager, + const axutil_env_t * env); + + /** + * Creates a listener manager struct instance. + * @param env pointer to environment struct + * @return a pointer to newly created listener manager struct, + * or NULL on error with error code set in environment's error + */ + AXIS2_EXTERN axis2_listener_manager_t *AXIS2_CALL + axis2_listener_manager_create( + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_LISTENER_MANAGER_H */ diff --git a/include/axis2_module.h b/include/axis2_module.h new file mode 100644 index 0000000..625c9ea --- /dev/null +++ b/include/axis2_module.h @@ -0,0 +1,161 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +#ifndef AXIS2_MODULE_H +#define AXIS2_MODULE_H + +/** + * @defgroup axis2_module module + * @ingroup axis2_desc + * Every module provides an implementation of struct interface. Modules are in + * one of two states: "available" or "initialized". All modules that the run-time + * detects (from the repository modules directory) are said to be in the + * "available" state. If some service indicates a dependency on this + * module then the module is initialized (once for the life time of the system) + * and the state changes to "initialized". + * Any module which is in the "initialized" state can be engaged as needed + * by the engine to respond to a message. Module engagement is done by + * deployment engine using module.xml. + * @{ + */ + +/** + * @file axis2_module.h + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for axis2_module_ops */ + typedef struct axis2_module_ops axis2_module_ops_t; + + /** Type name for axis2_module_ops */ + typedef struct axis2_module axis2_module_t; + + struct axis2_conf; + + /** + * Struct containing operations available on a module. + * \n + * 1. init + * \n + * 2. shutdown + * \n + * 3. fill_handler_create_func_map + * \n + * are the three operations presently available. + */ + struct axis2_module_ops + { + + /** + * Initializes module. + * @param module pointer to module struct + * @param env pointer to environment struct + * @param conf_ctx pointer to configuration context + * @param module_desc module description + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + axis2_status_t( + AXIS2_CALL + * init)( + axis2_module_t * module, + const axutil_env_t * env, + struct axis2_conf_ctx * conf_ctx, + axis2_module_desc_t * module_desc); + + /** + * Shutdowns module. + * @param module pointer to module struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + axis2_status_t( + AXIS2_CALL + * shutdown)( + axis2_module_t * module, + const axutil_env_t * env); + + /** + * Fills the hash map of handler create functions for the module. + * @param module pointer to module struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + axis2_status_t( + AXIS2_CALL + * fill_handler_create_func_map)( + axis2_module_t * module, + const axutil_env_t * env); + + }; + + /** + * Struct representing a module. + */ + struct axis2_module + { + + /** operations of module */ + const axis2_module_ops_t *ops; + + /** hash map of handler create functions */ + axutil_hash_t *handler_create_func_map; + }; + + /** + * Creates module struct. + * @param env pointer to environment struct + * @return pointer to newly created module + */ + AXIS2_EXTERN axis2_module_t *AXIS2_CALL + axis2_module_create( + const axutil_env_t * env); + + /** Initializes module. + @sa axis2_module_ops#init */ +#define axis2_module_init(module, env, conf_ctx, module_desc) \ + ((module)->ops->init (module, env, conf_ctx, module_desc)) + + /** Shutdowns module. + @sa axis2_module_ops#shutdown */ +#define axis2_module_shutdown(module, env) \ + ((module)->ops->shutdown (module, env)) + + /** Fills handler create function map. + @sa axis2_module_ops#fill_handler_create_func_map */ +#define axis2_module_fill_handler_create_func_map(module, env) \ + ((module)->ops->fill_handler_create_func_map (module, env)) + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_MODULE_H */ diff --git a/include/axis2_module_desc.h b/include/axis2_module_desc.h new file mode 100644 index 0000000..611fd92 --- /dev/null +++ b/include/axis2_module_desc.h @@ -0,0 +1,386 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_MODULE_DESC_H +#define AXIS2_MODULE_DESC_H + +/** + * @defgroup axis2_module_desc module description + * @ingroup axis2_desc + * module holds information about a module. This information includes module + * parameters and handler information. + * Modules are available to all services if axis2.xml has a module reference + * entry. Alternatively, a module could be made available to selected services + * by including a module reference entry in services.xml. + * @{ + */ + +/** + * @file axis2_module_desc.h + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_module_desc */ + typedef struct axis2_module_desc axis2_module_desc_t; + + struct axis2_op; + struct axis2_conf; + + /** + * Frees module description. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_module_desc_free( + axis2_module_desc_t * module_desc, + const axutil_env_t * env); + + /** + * Gets flow representing in flow. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @return pointer to flow that represents in flow, returns a reference + * not a cloned copy + */ + AXIS2_EXTERN axis2_flow_t *AXIS2_CALL + axis2_module_desc_get_in_flow( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env); + + /** + * Sets flow representing in flow. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @param in_flow pointer to flow representing in flow, module assumes + * ownership of flow + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_module_desc_set_in_flow( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + axis2_flow_t * in_flow); + + /** + * Gets flow representing out flow. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @return pointer to flow that represents out flow, returns a reference + * not a cloned copy + */ + AXIS2_EXTERN axis2_flow_t *AXIS2_CALL + axis2_module_desc_get_out_flow( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env); + + /** + * Sets flow representing out flow. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @param out_flow pointer to flow representing out flow, module assumes + * ownership of flow + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_module_desc_set_out_flow( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + axis2_flow_t * out_flow); + + /** + * Gets flow representing fault in flow. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @return pointer to flow that represents fault in flow, returns a reference + * not a cloned copy + */ + AXIS2_EXTERN axis2_flow_t *AXIS2_CALL + axis2_module_desc_get_fault_in_flow( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env); + + /** + * Sets flow representing fault in flow. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @param falut_in_flow pointer to flow representing fault in flow, + * module assumes ownership of flow + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_module_desc_set_fault_in_flow( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + axis2_flow_t * falut_in_flow); + + /** + * Gets flow representing fault out flow. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @return pointer to flow that represents fault out flow, returns a + * reference not a cloned copy + */ + AXIS2_EXTERN axis2_flow_t *AXIS2_CALL + axis2_module_desc_get_fault_out_flow( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env); + + /** + * Sets flow representing fault out flow. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @param fault_out_flow pointer to flow representing fault out flow, + * module assumes ownership of flow + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_module_desc_set_fault_out_flow( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + axis2_flow_t * fault_out_flow); + + /** + * Gets module QName. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @return pointer to QName + */ + AXIS2_EXTERN const axutil_qname_t *AXIS2_CALL + axis2_module_desc_get_qname( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env); + + /** + * Sets module QName. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @param qname pointer to qname + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_module_desc_set_qname( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + const axutil_qname_t * qname); + + /** + * Adds given operation to module. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @param op pointer to operation, module assumes ownership of operation + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_module_desc_add_op( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + struct axis2_op *op); + + /** + * Gets all operations associated with module. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @return pointer to hash map containing the operations + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_module_desc_get_all_ops( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env); + + /** + * Gets parent which is of type configuration. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @return pointer to configuration, returns a reference not a + * cloned copy + */ + AXIS2_EXTERN struct axis2_conf *AXIS2_CALL + axis2_module_desc_get_parent( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env); + + /** + * Sets parent which is of type configuration. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @param parent pointer to parent configuration, module does not assume + * the ownership of configuration + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_module_desc_set_parent( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + struct axis2_conf *parent); + + /** + * Adds parameter to module description. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @param param pointer to parameter struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_module_desc_add_param( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + axutil_param_t * param); + + /** + * Gets parameter with given name. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @param name parameter name string + * @return pointer to parameter corresponding to given name + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + axis2_module_desc_get_param( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env, + const axis2_char_t * name); + + /** + * Gets all parameters associated with module. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @return pointer to array list containing all parameters + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_module_desc_get_all_params( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env); + + /** + * Checks if a given parameter is locked. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @param param_name parameter name string + * @return AXIS2_TRUE if named parameter is locked, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_module_desc_is_param_locked( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env, + const axis2_char_t * param_name); + + /** + * Gets module associated with module description. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @return pointer to module + */ + AXIS2_EXTERN struct axis2_module *AXIS2_CALL + axis2_module_desc_get_module( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env); + + /** + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @param module pointer to module, module description assumes ownership + * of module + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_module_desc_set_module( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + struct axis2_module *module); + + /** + * Gets the container having all params. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @return pointer to param container + * @sa axutil_param_container + */ + AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL + axis2_module_desc_get_param_container( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env); + + /** + * Gets the container having all flows. + * @param module_desc pointer to module description + * @param env pointer to environment struct + * @return pointer to param container + * @sa axis2_flow_container + */ + AXIS2_EXTERN axis2_flow_container_t *AXIS2_CALL + axis2_module_desc_get_flow_container( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env); + + /** + * Creates module description struct instance. + * @param env pointer to environment struct + * @return pointer to newly created module description + */ + AXIS2_EXTERN axis2_module_desc_t *AXIS2_CALL + axis2_module_desc_create( + const axutil_env_t * env); + + /** + * Creates module description struct instance with given QName. + * @param env pointer to environment struct + * @param qname pointer to QName + * @return pointer to newly created module description + */ + AXIS2_EXTERN axis2_module_desc_t *AXIS2_CALL + axis2_module_desc_create_with_qname( + const axutil_env_t * env, + const axutil_qname_t * qname); + + /** + * Frees module description passed as void pointer. This method will cast + * the void pointer parameter into appropriate type and then call module + * description free method on top of that pointer. + * @param module_desc pointer to module description as a void pointer + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_module_desc_free_void_arg( + void *module_desc, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_MODULE_DESC_H */ diff --git a/include/axis2_msg.h b/include/axis2_msg.h new file mode 100644 index 0000000..aace1ed --- /dev/null +++ b/include/axis2_msg.h @@ -0,0 +1,298 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_MSG_H +#define AXIS2_MSG_H + +/** + * @defgroup axis2_msg message + * @ingroup axis2_desc + * message represents a message in a WSDL. It captures SOAP headers related to + * a given message, the direction as well as the phases to be invoked along + * the flow. Based on the message direction, there could be only one flow + * associated with a message. + * @{ + */ + +/** + * @file axis2_msg.h + */ + +#include +#include +#include +#include +#include + + /** Message of IN flow */ +#define AXIS2_MSG_IN "in" + + /** Message of OUT flow */ +#define AXIS2_MSG_OUT "out" + + /** Message of IN FAULT flow */ +#define AXIS2_MSG_IN_FAULT "InFaultMessage" + + /** Message of OUT FAULT flow */ +#define AXIS2_MSG_OUT_FAULT "OutFaultMessage" + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_msg */ + typedef struct axis2_msg axis2_msg_t; + + /** + * Creates message struct instance. + * @param env pointer to environment struct + * @return pointer to newly created message + */ + AXIS2_EXTERN axis2_msg_t *AXIS2_CALL + axis2_msg_create( + const axutil_env_t * env); + + /** + * Frees message. + * @param msg pointer to message + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_msg_free( + axis2_msg_t * msg, + const axutil_env_t * env); + + /** + * Adds a parameter. + * @param msg pointer to message + * @param env pointer to environment struct + * @param param pointer to parameter, message assumes ownership of + * parameter + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_add_param( + axis2_msg_t * msg, + const axutil_env_t * env, + axutil_param_t * param); + + /** + * Gets the named parameter. + * @param msg pointer to message + * @param env pointer to environment struct + * @param name parameter name string + * @return pointer to parameter corresponding to the same name, returns + * a reference, not a cloned copy + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + axis2_msg_get_param( + const axis2_msg_t * msg, + const axutil_env_t * env, + const axis2_char_t * name); + + /** + * Gets all parameters stored in message. + * @param msg pointer to message + * @param env pointer to environment struct + * @return pointer to list of parameters, returns a reference, not a + * cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_msg_get_all_params( + const axis2_msg_t * msg, + const axutil_env_t * env); + + /** + * Checks if the named parameter is locked. + * @param msg pointer to message + * @param env pointer to environment struct + * @param param_name parameter name string + * @return AXIS2_TRUE if the parameter is locked, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_is_param_locked( + axis2_msg_t * msg, + const axutil_env_t * env, + const axis2_char_t * param_name); + + /** + * Sets parent. Parent of a message is of type operation. + * @param msg pointer to message + * @param env pointer to environment struct + * @param op pointer to parent operation, message does not assume + * ownership of parent + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_set_parent( + axis2_msg_t * msg, + const axutil_env_t * env, + axis2_op_t * op); + + /** + * Gets parent. Parent of a message is of type operation. + * @param msg pointer to message + * @param env pointer to environment struct + * @return pointer to parent operation, returns a reference, not a + * cloned copy + */ + AXIS2_EXTERN axis2_op_t *AXIS2_CALL + axis2_msg_get_parent( + const axis2_msg_t * msg, + const axutil_env_t * env); + + /** + * Gets flow of execution associated with the message. + * @param msg pointer to message + * @param env pointer to environment struct + * @return pointer to array list containing the list of phases + * representing the flow + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_msg_get_flow( + const axis2_msg_t * msg, + const axutil_env_t * env); + + /** + * Sets flow of execution associated with the message. + * @param msg pointer to message + * @param env pointer to environment struct + * @param flow pointer to array list of phases representing the flow, + * message assumes ownership of flow + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_set_flow( + axis2_msg_t * msg, + const axutil_env_t * env, + axutil_array_list_t * flow); + + /** + * Gets direction of message. + * @param msg pointer to message + * @param env pointer to environment struct + * @return direction string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_msg_get_direction( + const axis2_msg_t * msg, + const axutil_env_t * env); + + /** + * Sets direction of message. + * @param msg pointer to message + * @param env pointer to environment struct + * @param direction pointer to direction + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_set_direction( + axis2_msg_t * msg, + const axutil_env_t * env, + const axis2_char_t * direction); + + /** + * Gets QName representing message. + * @param msg pointer to message + * @param env pointer to environment struct + * @return pointer to QName, returns a reference, not a cloned copy + */ + AXIS2_EXTERN const axutil_qname_t *AXIS2_CALL + axis2_msg_get_element_qname( + const axis2_msg_t * msg, + const axutil_env_t * env); + + /** + * Sets QName representing message. + * @param msg pointer to message + * @param env pointer to environment struct + * @param element_qname pointer to QName representing message, this + * function creates a clone of QName + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_set_element_qname( + axis2_msg_t * msg, + const axutil_env_t * env, + const axutil_qname_t * element_qname); + + /** + * Gets message name. + * @param msg pointer to message + * @param env pointer to environment struct + * @return message name string. + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_msg_get_name( + const axis2_msg_t * msg, + const axutil_env_t * env); + + /** + * Sets message name. + * @param msg pointer to message + * @param env pointer to environment struct + * @param name message name string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_set_name( + axis2_msg_t * msg, + const axutil_env_t * env, + const axis2_char_t * name); + + /** + * Gets base description. + * @param msg pointer to message + * @param env pointer to environment struct + * @return pointer to base description struct + */ + AXIS2_EXTERN axis2_desc_t *AXIS2_CALL + axis2_msg_get_base( + const axis2_msg_t * msg, + const axutil_env_t * env); + + /** + * Gets container of parameters belonging to message. + * @param msg pointer to message + * @param env pointer to environment struct + * @return returns container of parameters + * @sa axutil_param_container + */ + AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL + axis2_msg_get_param_container( + const axis2_msg_t * msg, + const axutil_env_t * env); + + /** + * Increments the reference count to this oject + * @param msg pointer to message + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_increment_ref( + axis2_msg_t * msg, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_MSG_H */ diff --git a/include/axis2_msg_ctx.h b/include/axis2_msg_ctx.h new file mode 100644 index 0000000..b1d4d0f --- /dev/null +++ b/include/axis2_msg_ctx.h @@ -0,0 +1,2098 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_MSG_CTX_H +#define AXIS2_MSG_CTX_H + +/** + * @defgroup axis2_msg_ctx message context + * @ingroup axis2_context + * message context captures all state information related to a message + * invocation. It holds information on the service and operation to be invoked + * as well as context hierarchy information related to the service and operation. + * It also has information on transports, that are to be used in invocation. The + * phase information is kept, along with the phase at which message invocation was + * paused as well as the handler in the phase from which the invocation is to be + * resumed. message context would hold the request SOAP message along the out + * path and would capture response along the in path. + * message context also has information on various engine specific information, + * such as if it should be doing MTOM, REST. + * As message context is inherited form context, it has the capability of + * storing user defined properties. + * @{ + */ + +/** + * @file axis2_msg_ctx.h + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** transport headers */ +#define AXIS2_TRANSPORT_HEADERS "AXIS2_TRANSPORT_HEADERS" + + /** transport in */ +#define AXIS2_TRANSPORT_OUT "AXIS2_TRANSPORT_OUT" + + /** transport out */ +#define AXIS2_TRANSPORT_IN "AXIS2_TRANSPORT_IN" + + /** character set encoding */ +#define AXIS2_CHARACTER_SET_ENCODING "AXIS2_CHARACTER_SET_ENCODING" + + /** UTF_8; This is the 'utf-8' value for AXIS2_CHARACTER_SET_ENCODING property */ +#define AXIS2_UTF_8 "UTF-8" + + /** UTF_16; This is the 'utf-16' value for AXIS2_CHARACTER_SET_ENCODING property */ +#define AXIS2_UTF_16 "utf-16" + + /** default char set encoding; This is the default value for AXIS2_CHARACTER_SET_ENCODING property */ +#define AXIS2_DEFAULT_CHAR_SET_ENCODING "UTF-8" + + /** transport succeeded */ +#define AXIS2_TRANSPORT_SUCCEED "AXIS2_TRANSPORT_SUCCEED" + + /** HTTP Client */ +#define AXIS2_HTTP_CLIENT "AXIS2_HTTP_CLIENT" + + /** Transport URL */ +#define AXIS2_TRANSPORT_URL "TransportURL" + + /** PEER IP Address of Server */ +#define AXIS2_SVR_PEER_IP_ADDR "peer_ip_addr" + + /* Message flows */ + + /* In flow */ + + /*#define AXIS2_IN_FLOW 1*/ + + /* In fault flow */ + + /*#define AXIS2_IN_FAULT_FLOW 2*/ + + /* Out flow */ + + /*#define AXIS2_OUT_FLOW 3*/ + + /* Out fault flow */ + + /*#define AXIS2_OUT_FAULT_FLOW 4*/ + + /** Type name for struct axis2_msg_ctx */ + typedef struct axis2_msg_ctx axis2_msg_ctx_t; + + struct axis2_svc; + struct axis2_op; + + struct axis2_conf_ctx; + struct axis2_svc_grp_ctx; + struct axis2_svc_ctx; + struct axis2_op_ctx; + struct axis2_conf; + struct axiom_soap_envelope; + struct axis2_options; + struct axis2_transport_in_desc; + struct axis2_transport_out_desc; + struct axis2_out_transport_info; + + /** Type name for pointer to a function to find a service */ + typedef struct axis2_svc *( + AXIS2_CALL + * AXIS2_MSG_CTX_FIND_SVC) ( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** Type name for pointer to a function to find an operation in a service */ + typedef struct axis2_op *( + AXIS2_CALL + * AXIS2_MSG_CTX_FIND_OP) ( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_svc * svc); + + /** + * Creates a message context struct instance. + * @param env pointer to environment struct + * @param conf_ctx pointer to configuration context struct, message context + * does not assume the ownership of the struct + * @param transport_in_desc pointer to transport in description struct, + * message context does not assume the ownership of the struct + * @param transport_out_desc pointer to transport out description struct, + * message context does not assume the ownership of the struct + * @return pointer to newly created message context instance + */ + AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL + axis2_msg_ctx_create( + const axutil_env_t * env, + struct axis2_conf_ctx *conf_ctx, + struct axis2_transport_in_desc *transport_in_desc, + struct axis2_transport_out_desc *transport_out_desc); + + /** + * Gets the base, which is of type context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to base context struct + */ + AXIS2_EXTERN axis2_ctx_t *AXIS2_CALL + axis2_msg_ctx_get_base( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets parent. Parent of a message context is of type operation + * context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to operation context which is the parent + */ + AXIS2_EXTERN struct axis2_op_ctx *AXIS2_CALL + axis2_msg_ctx_get_parent( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets parent. Parent of a message context is of type operation + * context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param parent pointer to parent operation context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_parent( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_op_ctx *parent); + + /** + * Frees message context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_msg_ctx_free( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Initializes the message context. Based on the transport, service and + * operation qnames set on top of message context, correct instances of + * those struct instances would be extracted from configuration and + * set within message context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param conf pointer to configuration + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_init( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_conf *conf); + + /** + * Gets WS-Addressing fault to address. Fault to address tells where to + * send the fault in case there is an error. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to endpoint reference struct representing the fault + * to address, returns a reference not a cloned copy + */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_msg_ctx_get_fault_to( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets WS-Addressing from endpoint. From address tells where the + * request came from. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to endpoint reference struct representing the from + * address, returns a reference not a cloned copy + */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_msg_ctx_get_from( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Checks if there is a SOAP fault on in flow. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_TRUE if there is an in flow fault, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_get_in_fault_flow( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets the SOAP envelope. This SOAP envelope could be either request + * SOAP envelope or the response SOAP envelope, based on the state + * the message context is in. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to SOAP envelope stored within message context + */ + AXIS2_EXTERN struct axiom_soap_envelope *AXIS2_CALL + axis2_msg_ctx_get_soap_envelope( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets the SOAP envelope of the response. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to response SOAP envelope stored within message context + */ + AXIS2_EXTERN struct axiom_soap_envelope *AXIS2_CALL + axis2_msg_ctx_get_response_soap_envelope( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets fault SOAP envelope. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to fault SOAP envelope stored within message context + */ + AXIS2_EXTERN struct axiom_soap_envelope *AXIS2_CALL + axis2_msg_ctx_get_fault_soap_envelope( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets message ID. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param msg_id + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_msg_id( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_char_t * msg_id); + + /** + * Gets message ID. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return message ID string corresponding to the message the message + * context is related to + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_msg_ctx_get_msg_id( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets process fault status. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_TRUE if process fault is on, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_get_process_fault( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets relates to information for the message context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to relates to struct + */ + AXIS2_EXTERN axis2_relates_to_t *AXIS2_CALL + axis2_msg_ctx_get_relates_to( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets WS-Addressing reply to endpoint. Reply to address tells where + * the the response should be sent to. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to endpoint reference struct representing the reply + * to address, returns a reference not a cloned copy + */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_msg_ctx_get_reply_to( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Checks if it is on the server side that the message is being dealt + * with, or on the client side. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_TRUE if it is server side, AXIS2_FALSE if it is client + * side + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_get_server_side( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets WS-Addressing to endpoint. To address tells where message should + * be sent to. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to endpoint reference struct representing the + * to address, returns a reference not a cloned copy + */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_msg_ctx_get_to( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets WS-Addressing fault to endpoint. Fault to address tells where + * the fault message should be sent when there is an error. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param reference pointer to endpoint reference representing fault to + * address. message context assumes the ownership of endpoint struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_fault_to( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_endpoint_ref_t * reference); + + /** + * Sets WS-Addressing from endpoint. From address tells where + * the message came from. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param reference pointer to endpoint reference representing from + * address. message context assumes the ownership of endpoint struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_from( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_endpoint_ref_t * reference); + + /** + * Sets in fault flow status. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param in_fault_flow AXIS2_TRUE if there is a fault on in path, + * else AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_in_fault_flow( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t in_fault_flow); + + /** + * Sets SOAP envelope. The fact that if it is the request SOAP envelope + * or that of response depends on the current status represented by + * message context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param soap_envelope pointer to SOAP envelope, message context + * assumes ownership of SOAP envelope + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_soap_envelope( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axiom_soap_envelope *soap_envelope); + + /** + * Sets response SOAP envelope. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param soap_envelope pointer to SOAP envelope, message context + * assumes ownership of SOAP envelope + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_response_soap_envelope( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axiom_soap_envelope *soap_envelope); + + /** + * Sets fault SOAP envelope. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param soap_envelope pointer to SOAP envelope, message context + * assumes ownership of SOAP envelope + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_fault_soap_envelope( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axiom_soap_envelope *soap_envelope); + + /** + * Sets message ID. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param message_id message ID string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_message_id( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * message_id); + + /** + * Sets process fault bool value. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param process_fault AXIS2_TRUE if SOAP faults are to be processed, + * else AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_process_fault( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t process_fault); + + /** + * Sets relates to struct. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param reference pointer to relates to struct, message context + * assumes ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_relates_to( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_relates_to_t * reference); + + /** + * Sets WS-Addressing reply to address indicating the location to which + * the reply would be sent. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param reference pointer to endpoint reference representing reply to + * address + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_reply_to( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_endpoint_ref_t * reference); + + /** + * Sets the bool value indicating if it is the server side or the + * client side. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param server_side AXIS2_TRUE if it is server side, AXIS2_FALSE if it + * is client side + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_server_side( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t server_side); + + /** + * Sets WS-Addressing to address. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param reference pointer to endpoint reference struct representing + * the address where the request should be sent to. message context + * assumes ownership of endpoint struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_to( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_endpoint_ref_t * reference); + + /** + * Gets the bool value indicating if it is required to have a new thread + * for the invocation, or if the same thread of execution could be used. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_TRUE if new thread is required, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_get_new_thread_required( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the bool value indicating if it is required to have a new thread + * for the invocation, or if the same thread of execution could be used. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param new_thread_required AXIS2_TRUE if a new thread is required, + * else AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_new_thread_required( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t new_thread_required); + + /** + * Sets WS-Addressing action. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param action_uri WSA action URI string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_wsa_action( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * action_uri); + + /** + * Gets WS-Addressing action. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to WSA action URI string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_msg_ctx_get_wsa_action( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets WS-Addressing message ID. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param message_id pointer to message ID string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_wsa_message_id( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * message_id); + + /** + * Gets WS-Addressing message ID. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return WSA message ID string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_msg_ctx_get_wsa_message_id( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets WS-Addressing message information headers. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to message information headers struct with + * WS-Addressing information. Returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_msg_info_headers_t *AXIS2_CALL + axis2_msg_ctx_get_msg_info_headers( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets the bool value indicating the paused status. It is possible + * to pause the engine invocation by any handler. By calling this method + * one can find out if some handler has paused the invocation. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_TRUE if message context is paused, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_get_paused( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the bool value indicating the paused status of invocation. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param paused paused + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_paused( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t paused); + + /** + * Gets the bool value indicating the keep alive status. It is possible + * to keep alive the message context by any handler. By calling this method + * one can see whether it is possible to clean the message context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_TRUE if message context is keep alive, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_is_keep_alive( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the bool value indicating the keep alive status of invocation. + * By setting this one can indicate the engine not to clean the message + * context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param keep_alive keep alive + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_keep_alive( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t keep_alive); + + /** + * Gets transport in description. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to transport in description struct, returns a + * reference not a cloned copy + */ + AXIS2_EXTERN struct axis2_transport_in_desc *AXIS2_CALL + axis2_msg_ctx_get_transport_in_desc( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets transport out description. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to transport out description struct, returns a + * reference not a cloned copy + */ + AXIS2_EXTERN struct axis2_transport_out_desc *AXIS2_CALL + axis2_msg_ctx_get_transport_out_desc( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets transport in description. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param transport_in_desc pointer to transport in description struct, + * message context does not assume the ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_transport_in_desc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_transport_in_desc *transport_in_desc); + + /** + * Sets transport out description. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param transport_out_desc pointer to transport out description, + * message context does not assume the ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_transport_out_desc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_transport_out_desc *transport_out_desc); + + /** + * Gets operation context related to the operation that this message + * context is related to. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to operation context struct + */ + AXIS2_EXTERN struct axis2_op_ctx *AXIS2_CALL + axis2_msg_ctx_get_op_ctx( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets operation context related to the operation that this message + * context is related to. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param op_ctx pointer to operation context, message context does not + * assume the ownership of operation context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_op_ctx( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_op_ctx *op_ctx); + + /** + * Gets the bool value indicating the output written status. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_TRUE if output is written, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_get_output_written( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the bool value indicating the output written status. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param output_written AXIS2_TRUE if output is written, else AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_output_written( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t output_written); + + /** + * Gets the HTTP Method that relates to the service that is + * related to the message context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return HTTP Method string, returns a reference, + * not a cloned copy + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_msg_ctx_get_rest_http_method( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the HTTP Method that relates to the service that is + * related to the message context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param rest_http_method HTTP Method string, msg_ctx does not assume + * ownership of rest_http_method. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_rest_http_method( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * rest_http_method); + + /** + * Gets the ID of service context that relates to the service that is + * related to the message context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return service context ID string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_msg_ctx_get_svc_ctx_id( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the ID of service context that relates to the service that is + * related to the message context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param svc_ctx_id The service context ID string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_svc_ctx_id( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * svc_ctx_id); + + /** + * Gets configuration context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to configuration context + */ + AXIS2_EXTERN struct axis2_conf_ctx *AXIS2_CALL + axis2_msg_ctx_get_conf_ctx( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets service context that relates to the service that the message + * context is related to. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to message context struct + */ + AXIS2_EXTERN struct axis2_svc_ctx *AXIS2_CALL + axis2_msg_ctx_get_svc_ctx( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets configuration context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param conf_ctx pointer to configuration context struct, message + * context does not assume the ownership of struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_conf_ctx( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_conf_ctx *conf_ctx); + + /** + * Sets service context. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param svc_ctx pointer to service context struct, message + * context does not assume the ownership of struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_svc_ctx( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_svc_ctx *svc_ctx); + + /** + * Sets message information headers. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param msg_info_headers pointer to message information headers, + * message context assumes the ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_msg_info_headers( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_msg_info_headers_t * msg_info_headers); + + /** + * Gets configuration descriptor parameter with given key. This method + * recursively search the related description hierarchy for the parameter + * with given key until it is found or the parent of the description + * hierarchy is reached. The order of search is as follows: + * \n + * 1. search in operation description, if its there return + * \n + * 2. if the parameter is not found in operation or operation is NULL, + * search in service + * \n + * 3. if the parameter is not found in service or service is NULL search + * in configuration + * @param msg_ctx message context + * @param env pointer to environment struct + * @param key parameter key + * @return pointer to parameter struct corresponding to the given key + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + axis2_msg_ctx_get_parameter( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * key); + + /** + * Gets parameters related to a named module and a given handler + * description. The order of searching for parameter is as follows: + * \n + * 1. search in module configuration stored inside corresponding operation + * description if its there + * \n + * 2. search in corresponding operation if its there + * \n + * 3. search in module configurations stored inside corresponding + * service description if its there + * \n + * 4. search in corresponding service description if its there + * \n + * 5. search in module configurations stored inside configuration + * \n + * 6. search in configuration for parameters + * \n + * 7. get the corresponding module and search for the parameters + * \n + * 8. search in handler description for the parameter + * @param msg_ctx pointer to message context + * @param env pointer to environment struct + * @param key parameter key + * @param module_name name of the module + * @param handler_desc pointer to handler description + * @return pointer to parameter + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + axis2_msg_ctx_get_module_parameter( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * key, + const axis2_char_t * module_name, + axis2_handler_desc_t * handler_desc); + + /** + * Gets property corresponding to the given key. + * @param msg_ctx pointer to message context + * @param env pointer to environment struct + * @param key key string with which the property is stored + * @return pointer to property struct + */ + AXIS2_EXTERN axutil_property_t *AXIS2_CALL + axis2_msg_ctx_get_property( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * key); + + /** + * Gets property value corresponding to the property given key. + * @param msg_ctx pointer to message context + * @param env pointer to environment struct + * @param property_str key string with which the property is stored + * @return pointer to property struct + */ + AXIS2_EXTERN void *AXIS2_CALL + axis2_msg_ctx_get_property_value( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * property_str); + + /** + * Sets property with given key. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param key key string + * @param value property to be stored + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_property( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * key, + axutil_property_t * value); + + /** + * Gets the QName of the handler at which invocation was paused. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to QName of the paused handler + */ + AXIS2_EXTERN const axutil_string_t *AXIS2_CALL + axis2_msg_ctx_get_paused_handler_name( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets the name of the phase at which the invocation was paused. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return name string of the paused phase. + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_msg_ctx_get_paused_phase_name( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the name of the phase at which the invocation was paused. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param paused_phase_name paused phase name string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_paused_phase_name( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * paused_phase_name); + + /** + * Gets SOAP action. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return SOAP action string + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + axis2_msg_ctx_get_soap_action( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets SOAP action. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param soap_action SOAP action string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_soap_action( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_string_t * soap_action); + + /** + * Gets the boolean value indicating if MTOM is enabled or not. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_TRUE if MTOM is enabled, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_get_doing_mtom( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the boolean value indicating if MTOM is enabled or not. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param doing_mtom AXIS2_TRUE if MTOM is enabled, else AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_doing_mtom( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t doing_mtom); + + /** + * Gets the boolean value indicating if REST is enabled or not. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_TRUE if REST is enabled, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_get_doing_rest( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the boolean value indicating if REST is enabled or not. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param doing_rest AXIS2_TRUE if REST is enabled, else AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_doing_rest( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t doing_rest); + + /** + * Sets the boolean value indicating if REST should be done through + * HTTP POST or not. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param do_rest_through_post AXIS2_TRUE if REST is to be done with + * HTTP POST, else AXIS2_FALSE if REST is not to be done with HTTP POST + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_do_rest_through_post( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t do_rest_through_post); + + /** + * Sets the boolean value indicating if REST should be done through + * HTTP POST or not. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_TRUE if REST is to be done with HTTP POST, else + * AXIS2_FALSE if REST is not to be done with HTTP POST + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_get_do_rest_through_post( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets manage session bool value. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_TRUE if session is managed, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_get_manage_session( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets manage session bool value. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param manage_session manage session bool value + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_manage_session( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t manage_session); + + /** + * Gets the bool value indicating the SOAP version being used either + * SOAP 1.1 or SOAP 1.2 + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_TRUE if SOAP 1.1 is being used, else AXIS2_FALSE if + * SOAP 1.2 is being used + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_get_is_soap_11( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the bool value indicating the SOAP version being used either + * SOAP 1.1 or SOAP 1.2 + * @param msg_ctx message context + * @param env pointer to environment struct + * @param is_soap11 AXIS2_TRUE if SOAP 1.1 is being used, else + * AXIS2_FALSE if SOAP 1.2 is being used + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_is_soap_11( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t is_soap11); + + /** + * Gets service group context. The returned service group context + * relates to the service group to which the service, related to the + * message context, belongs. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to service group struct + */ + AXIS2_EXTERN struct axis2_svc_grp_ctx *AXIS2_CALL + axis2_msg_ctx_get_svc_grp_ctx( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets service group context. The returned service group context + * relates to the service group to which the service, related to the + * message context, belongs. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param svc_grp_ctx pointer to service group context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_svc_grp_ctx( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_svc_grp_ctx *svc_grp_ctx); + + /** + * Gets the operation that is to be invoked. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to operation, returns a reference not a cloned copy + */ + AXIS2_EXTERN struct axis2_op *AXIS2_CALL + axis2_msg_ctx_get_op( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the operation that is to be invoked. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param op pointer to operation, message context does not assume the + * ownership of operation + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_op *op); + + /** + * Gets the service to which the operation to be invoked belongs. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to service struct, returns a reference not a cloned copy + */ + AXIS2_EXTERN struct axis2_svc *AXIS2_CALL + axis2_msg_ctx_get_svc( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the service to which the operation to be invoked belongs. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param svc pointer to service struct, message context does not assume + * the ownership of struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_svc *svc); + + /** + * Gets the service group to which the service to be invoked belongs. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to service group struct, returns a reference not + * a cloned copy + */ + AXIS2_EXTERN struct axis2_svc_grp *AXIS2_CALL + axis2_msg_ctx_get_svc_grp( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the service group to which the service to be invoked belongs. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param svc_grp pointer to service group struct, message context does + * not assume the ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_svc_grp( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_svc_grp *svc_grp); + + /** + * Gets the service group context ID. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return service group context ID string + */ + AXIS2_EXTERN const axutil_string_t *AXIS2_CALL + axis2_msg_ctx_get_svc_grp_ctx_id( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the service group context ID. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param svc_grp_ctx_id service group context ID string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_svc_grp_ctx_id( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_string_t * svc_grp_ctx_id); + + /** + * Sets function to be used to find a service. This function is used by dispatchers + * to locate the service to be invoked. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param func function to be used to find an operation + * @return pointer to service to be invoked + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_find_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + AXIS2_MSG_CTX_FIND_SVC func); + + /** + * Sets function to be used to find an operation in the given service. + * This function is used by dispatchers to locate the operation to be invoked. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param func function to be used to find an operation + * @return pointer to the operation to be invoked + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_find_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + AXIS2_MSG_CTX_FIND_OP func); + + /** + * Finds the service to be invoked. This function is used by dispatchers + * to locate the service to be invoked. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to service to be invoked + */ + AXIS2_EXTERN struct axis2_svc *AXIS2_CALL + axis2_msg_ctx_find_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Finds the operation to be invoked in the given service. This function + * is used by dispatchers to locate the operation to be invoked. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param svc pointer to service to whom the operation belongs + * @return pointer to the operation to be invoked + */ + AXIS2_EXTERN struct axis2_op *AXIS2_CALL + axis2_msg_ctx_find_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_svc *svc); + + /** + * Gets the options to be used in invocation. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return options pointer to options struct, message context does not + * assume the ownership of the struct + */ + AXIS2_EXTERN struct axis2_options *AXIS2_CALL + axis2_msg_ctx_get_options( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets the bool value indicating the paused status. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_TRUE if invocation is paused, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_is_paused( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the options to be used in invocation. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param options pointer to options struct, message context does not + * assume the ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_options( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_options *options); + + /** + * Sets the flow to be invoked. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param flow int value indicating the flow + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_flow( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + int flow); + + /** + * Gets the flow to be invoked. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return int value indicating the flow + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_msg_ctx_get_flow( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the list of supported REST HTTP Methods + * @param msg_ctx message context + * @param env pointer to environment struct + * @param supported_rest_http_methods pointer array list containing + * the list of HTTP Methods supported. Message context does + * assumes the ownership of the array list. Anything added to this + * array list will be freed by the msg_ctx + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_supported_rest_http_methods( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_array_list_t * supported_rest_http_methods); + + /** + * Gets the list of supported REST HTTP Methods + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer array list containing + * the list of HTTP Methods supported. Message context does + * assumes the ownership of the array list + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_msg_ctx_get_supported_rest_http_methods( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the execution chain to be invoked. The execution chain is a + * list of phases containing the handlers to be invoked. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param execution_chain pointer array list containing the list of + * handlers that constitute the execution chain. Message context does + * not assume the ownership of the array list + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_execution_chain( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_array_list_t * execution_chain); + + /** + * Gets the execution chain to be invoked. The execution chain is a + * list of phases containing the handlers to be invoked. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer array list containing the list of handlers that + * constitute the execution chain. Message context does not assume + * the ownership of the array list + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_msg_ctx_get_execution_chain( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets current handler index, indicating which handler is currently + * being invoked in the execution chain + * @param msg_ctx message context + * @param env pointer to environment struct + * @param index index of currently executed handler + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_current_handler_index( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const int index); + + /** + * Gets current handler index, indicating which handler is currently + * being invoked in the execution chain + * @param msg_ctx message context + * @param env pointer to environment struct + * @return index of currently executed handler + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_msg_ctx_get_current_handler_index( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets paused handler index, indicating at which handler the execution + * chain was paused. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return index of handler at which invocation was paused + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_msg_ctx_get_paused_handler_index( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets index of the current phase being invoked. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param index index of current phase + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_current_phase_index( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const int index); + + /** + * Gets index of the current phase being invoked. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return index of current phase + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_msg_ctx_get_current_phase_index( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets the phase at which the invocation was paused. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return index of paused phase + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_msg_ctx_get_paused_phase_index( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets character set encoding to be used. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + axis2_msg_ctx_get_charset_encoding( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets character set encoding to be used. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param str pointer to string struct representing encoding + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_charset_encoding( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_string_t * str); + + /** + * Gets the integer value indicating http status_code. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return status value + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_msg_ctx_get_status_code( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the int value indicating http status code + * @param msg_ctx message context + * @param env pointer to environment struct + * @param status_code of the http response + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_status_code( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const int status_code); + + /** + * Gets the Transport Out Stream + * @param msg_ctx message context + * @param env pointer to environment struct + * @return reference to Transport Out Stream + */ + AXIS2_EXTERN axutil_stream_t *AXIS2_CALL + axis2_msg_ctx_get_transport_out_stream( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the Transport Out Stream + * @param msg_ctx message context + * @param env pointer to environment struct + * @param stream reference to Transport Out Stream + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_transport_out_stream( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_stream_t * stream); + + /** + * Resets Transport Out Stream + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_reset_transport_out_stream( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets the HTTP Out Transport Info associated + * @param msg_ctx message context + * @param env pointer to environment struct + * @return reference to HTTP Out Transport Info associated + */ + AXIS2_EXTERN struct axis2_out_transport_info *AXIS2_CALL + axis2_msg_ctx_get_out_transport_info( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the HTTP Out Transport Info associated + * @param msg_ctx message context + * @param env pointer to environment struct + * @param out_transport_info reference to HTTP Out + * Transport Info associated + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_out_transport_info( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_out_transport_info *out_transport_info); + + /** + * Resets the HTTP Out Transport Info associated + * @param msg_ctx message context + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_reset_out_transport_info( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Retrieves Transport Headers. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return Transport Headers associated. + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_msg_ctx_get_transport_headers( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Retrieves Transport Headers, and removes them + * from the message context + * @param msg_ctx message context + * @param env pointer to environment struct + * @return Transport Headers associated. + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_msg_ctx_extract_transport_headers( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the Transport Headers + * @param msg_ctx message context + * @param env pointer to environment struct + * @param transport_headers a Hash containing the + * Transport Headers + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_transport_headers( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_hash_t * transport_headers); + + /** + * Retrieves HTTP Accept-Charset records. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return HTTP Accept-Charset records associated. + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_msg_ctx_get_http_accept_charset_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Retrieves HTTP Accept-Charset records, and removes them + * from the message context + * @param msg_ctx message context + * @param env pointer to environment struct + * @return HTTP Accept-Charset records associated. + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_msg_ctx_extract_http_accept_charset_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the HTTP Accept-Charset records + * @param msg_ctx message context + * @param env pointer to environment struct + * @param accept_charset_record_list an Array List containing the + * HTTP Accept-Charset records + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_http_accept_charset_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_array_list_t * accept_charset_record_list); + + /** + * Retrieves HTTP Accept-Language records. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return HTTP Accept-Language records associated. + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_msg_ctx_get_http_accept_language_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Retrieves HTTP Accept-Language records, and removes them + * from the message context + * @param msg_ctx message context + * @param env pointer to environment struct + * @return HTTP Accept-Language records associated. + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_msg_ctx_extract_http_accept_language_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the HTTP Accept-Language records + * @param msg_ctx message context + * @param env pointer to environment struct + * @param accept_language_record_list an Array List containing the + * HTTP Accept-Language records + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_http_accept_language_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_array_list_t * accept_language_record_list); + + /** + * Gets the Content Language used + * @param msg_ctx message context + * @param env pointer to environment struct + * @return Content Language string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_msg_ctx_get_content_language( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the Content Language used + * @param msg_ctx message context + * @param env pointer to environment struct + * @param str Content Language string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_content_language( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_char_t * str); + + /** + * Retrieves HTTP Accept records. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return HTTP Accept records associated. + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_msg_ctx_get_http_accept_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Retrieves HTTP Accept records, and removes them + * from the message context + * @param msg_ctx message context + * @param env pointer to environment struct + * @return HTTP Accept records associated. + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_msg_ctx_extract_http_accept_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the HTTP Accept records + * @param msg_ctx message context + * @param env pointer to environment struct + * @param accept_record_list an Array List containing the + * HTTP Accept records + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_http_accept_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_array_list_t * accept_record_list); + + /** + * Gets the transfer encoding used + * @param msg_ctx message context + * @param env pointer to environment struct + * @return Transfer encoding string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_msg_ctx_get_transfer_encoding( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the transfer encoding used + * @param msg_ctx message context + * @param env pointer to environment struct + * @param str Transfer encoding string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_transfer_encoding( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_char_t * str); + + /** + * Gets the Transport URL + * @param msg_ctx message context + * @param env pointer to environment struct + * @return Transport URL string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_msg_ctx_get_transport_url( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the Transport URL + * @param msg_ctx message context + * @param env pointer to environment struct + * @param str Transport URL string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_transport_url( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_char_t * str); + + /** + * Gets whether there was no content in the response. + * This will cater for a situation where the invoke + * method in a service returns NULL when no fault has + * occured. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return returns AXIS2_TRUE if there was no content + * occured or AXIS2_FALSE otherwise + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_get_no_content( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets that there was no content in the response. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param no_content expects AXIS2_TRUE if there was no + * content in the response or AXIS2_FALSE otherwise + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_no_content( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t no_content); + + /** + * Gets whether an authentication failure occured + * @param msg_ctx message context + * @param env pointer to environment struct + * @return returns AXIS2_TRUE if an authentication failure + * occured or AXIS2_FALSE if not + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_get_auth_failed( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets whether an authentication failure occured + * @param msg_ctx message context + * @param env pointer to environment struct + * @param status expects AXIS2_TRUE if an authentication failure + * occured or AXIS2_FALSE if not + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_auth_failed( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t status); + + /** + * Gets whether HTTP Authentication is required or + * whether Proxy Authentication is required + * @param msg_ctx message context + * @param env pointer to environment struct + * @return returns AXIS2_TRUE for HTTP Authentication + * and AXIS2_FALSE for Proxy Authentication + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_ctx_get_required_auth_is_http( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets whether HTTP Authentication is required or + * whether Proxy Authentication is required + * @param msg_ctx message context + * @param env pointer to environment struct + * @param is_http use AXIS2_TRUE for HTTP Authentication + * and AXIS2_FALSE for Proxy Authentication + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_required_auth_is_http( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t is_http); + + /** + * Sets the authentication type + * @param msg_ctx message context + * @param env pointer to environment struct + * @param auth_type Authentication type string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_auth_type( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * auth_type); + + /** + * Gets the authentication type + * @param msg_ctx message context + * @param env pointer to environment struct + * @return Authentication type string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_msg_ctx_get_auth_type( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Gets the Output Header list + * @param msg_ctx message context + * @param env pointer to environment struct + * @return Output Header list + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_msg_ctx_get_http_output_headers( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Retrieves the Output Headers, and removes them + * from the message context + * @param msg_ctx message context + * @param env pointer to environment struct + * @return Output Header list + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_msg_ctx_extract_http_output_headers( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Sets the Output Header list + * @param msg_ctx message context + * @param env pointer to environment struct + * @param output_headers Output Header list + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_set_http_output_headers( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_array_list_t * output_headers); + + + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_msg_ctx_get_mime_parts( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + + AXIS2_EXTERN void AXIS2_CALL + axis2_msg_ctx_set_mime_parts( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_array_list_t *mime_parts); + + /** + * Incrementing the msg_ctx ref count. This is necessary when + * prevent freeing msg_ctx through op_client when it is in use + * as in sandesha2. + * @param msg_ctx pointer to message context + * @param env pointer to environment struct + * @return AXIS2_TRUE if still in use, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_ctx_increment_ref( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_MSG_CTX_H */ diff --git a/include/axis2_msg_info_headers.h b/include/axis2_msg_info_headers.h new file mode 100644 index 0000000..bd70bbe --- /dev/null +++ b/include/axis2_msg_info_headers.h @@ -0,0 +1,466 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_MSG_INFO_HEADERS_H +#define AXIS2_MSG_INFO_HEADERS_H + +/** + * @defgroup axis2_msg_info_headers message information headers + * @ingroup axis2_addr + * message information headers encapsulates properties that enable the + * identification and location of the endpoints involved in an interaction. + * The basic interaction pattern from which all others are composed is + * "one way". In this pattern a source sends a message to a destination + * without any further definition of the interaction. "Request Reply" is a + * common interaction pattern that consists of an initial message sent by + * a source endpoint (the request) and a subsequent message sent from the + * destination of the request back to the source (the reply). + * A reply can be either an application message, a fault, or any other message. + * message information headers capture addressing information related to these + * interaction patterns such as from, to, reply to and fault to addresses. + * @{ + */ + +/** + * @file axis2_msg_info_headers.h + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_msg_info_headers */ + typedef struct axis2_msg_info_headers axis2_msg_info_headers_t; + + /** + * Creates message information headers struct. + * @param env pointer to environment struct + * @param to pointer to endpoint reference representing to endpoint + * @param action WS-Addressing action string + * @return pointer to newly created message information headers struct + */ + AXIS2_EXTERN axis2_msg_info_headers_t *AXIS2_CALL + axis2_msg_info_headers_create( + const axutil_env_t * env, + axis2_endpoint_ref_t * to, + const axis2_char_t * action); + + /** + * Gets to endpoint. to endpoint represents the address of the + * intended receiver of this message. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @return pointer to endpoint reference representing to address, + * returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_msg_info_headers_get_to( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env); + + /** + * Sets to endpoint. to endpoint represents the address of the + * intended receiver of this message. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @param to pointer to endpoint reference representing to address, + * message information headers assumes ownership of the endpoint + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_info_headers_set_to( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env, + axis2_endpoint_ref_t * to); + + /** + * Gets from endpoint. from endpoint represents the address of the + * endpoint where the message originated from. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @return pointer to endpoint reference representing from address, + * returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_msg_info_headers_get_from( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env); + + /** + * Sets from endpoint. from endpoint represents the address of the + * endpoint where the message originated from. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @param from pointer to endpoint reference representing from address, + * message information headers assumes ownership of the endpoint + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_info_headers_set_from( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env, + axis2_endpoint_ref_t * from); + + /** + * Gets reply to endpoint. reply to endpoint identifies the intended + * receiver to which a message is replied. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @return pointer to endpoint reference representing reply to address, + * returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_msg_info_headers_get_reply_to( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env); + + /** + * Sets reply to endpoint. reply to endpoint identifies the intended + * receiver to which a message is replied. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @param reply_to pointer to endpoint reference representing reply to + * address, message information headers assumes ownership of the endpoint + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_info_headers_set_reply_to( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env, + axis2_endpoint_ref_t * reply_to); + + /** + * Sets the bool value indicating whether the reply to endpoint should + * be none. reply to endpoint identifies the intended receiver for + * replies to a message. The URI "http://www.w3.org/2005/08/addressing/none" + * in the reply to address indicates that no reply should be sent. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @param none AXIS2_TRUE if http://www.w3.org/2005/08/addressing/none + * is to be used as reply to URI, else AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_info_headers_set_reply_to_none( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env, + const axis2_bool_t none); + + /** + * Gets the bool value indicating whether the reply to endpoint should + * be none. reply to endpoint identifies the intended receiver for + * replies related to a message. The URI + * "http://www.w3.org/2005/08/addressing/none" + * in the reply to address indicates that no reply should be sent. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @return AXIS2_TRUE if http://www.w3.org/2005/08/addressing/none + * is to be used as reply to URI, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_info_headers_get_reply_to_none( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env); + + /** + * Sets the bool value indicating whether the reply to endpoint should + * be anonymous. reply to endpoint identifies the intended receiver for + * replies related to a message. The URI + * "http://www.w3.org/2005/08/addressing/anonymous" + * in the reply to address indicates that reply should be sent to + * from address. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @param anonymous AXIS2_TRUE if + * http://www.w3.org/2005/08/addressing/anonymous + * is to be used as reply to URI, else AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_info_headers_set_reply_to_anonymous( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env, + const axis2_bool_t anonymous); + + /** + * Gets the bool value indicating whether the reply to endpoint should + * be anonymous. reply to endpoint identifies the intended receiver for + * replies related to a message. The URI + * "http://www.w3.org/2005/08/addressing/anonymous" + * in the reply to address indicates that reply should be sent to + * from address. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @return AXIS2_TRUE if http://www.w3.org/2005/08/addressing/anonymous + * is to be used as reply to URI, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_info_headers_get_reply_to_anonymous( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env); + + /** + * Gets fault to endpoint. fault to endpoint identifies the intended + * receiver for faults related to a message. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @return pointer to endpoint reference representing fault to address, + * returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_msg_info_headers_get_fault_to( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env); + + /** + * Sets fault to endpoint. fault to endpoint identifies the intended + * receiver for faults related to a message. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @param fault_to pointer to endpoint reference representing fault to + * address, message information headers assumes ownership of the endpoint + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_info_headers_set_fault_to( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env, + axis2_endpoint_ref_t * fault_to); + + /** + * Sets the bool value indicating whether the fault to endpoint should + * be none. fault to endpoint identifies the intended receiver for + * faults related to a message. The URI + * "http://www.w3.org/2005/08/addressing/none" + * in the fault to address indicates that no fault should be sent back. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @param none AXIS2_TRUE if http://www.w3.org/2005/08/addressing/none + * is to be used as fault to URI, else AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_info_headers_set_fault_to_none( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env, + const axis2_bool_t none); + + /** + * Gets the bool value indicating whether the fault to endpoint should + * be none. fault to endpoint identifies the intended receiver for + * faults related to a message. The URI + * "http://www.w3.org/2005/08/addressing/none" + * in the fault to address indicates that no fault should be sent back. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @return AXIS2_TRUE if http://www.w3.org/2005/08/addressing/none + * is to be used as fault to URI, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_info_headers_get_fault_to_none( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env); + + /** + * Sets the bool value indicating whether the fault to endpoint should + * be anonymous. fault to endpoint identifies the intended receiver for + * faults related to a message. The URI + * "http://www.w3.org/2005/08/addressing/anonymous" + * in the fault to address indicates that fault should be sent to + * from address. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @param anonymous AXIS2_TRUE if + * http://www.w3.org/2005/08/addressing/anonymous + * is to be used as fault to URI, else AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_info_headers_set_fault_to_anonymous( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env, + const axis2_bool_t anonymous); + + /** + * Gets the bool value indicating whether the fault to endpoint should + * be anonymous. fault to endpoint identifies the intended receiver for + * faults related to a message. The URI + * "http://www.w3.org/2005/08/addressing/anonymous" + * in the fault to address indicates that fault should be sent to + * from address. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @return AXIS2_TRUE if http://www.w3.org/2005/08/addressing/anonymous + * is to be used as fault to URI, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_msg_info_headers_get_fault_to_anonymous( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env); + + /** + * Gets WS-Addressing action. action is an absolute IRI + * (Internationalized Resource Identifier) that uniquely identifies + * the semantics implied by this message. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @return WS-Addressing action string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_msg_info_headers_get_action( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env); + + /** + * Sets WS-Addressing action. action is an absolute IRI + * (Internationalized Resource Identifier) that uniquely identifies + * the semantics implied by this message. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @param action WS-Addressing action string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_info_headers_set_action( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env, + const axis2_char_t * action); + + /** + * Gets message ID. message ID is an absolute IRI that uniquely + * identifies the message. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @return message ID string. + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_msg_info_headers_get_message_id( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env); + + /** + * Sets message ID. message ID is an absolute URI that uniquely + * identifies the message. Message ID will be prefixed with "urn:uuid:" + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @param message_id message ID string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_info_headers_set_message_id( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env, + const axis2_char_t * message_id); + + /** + * Sets message ID. message ID is an absolute URI that uniquely + * identifies the message. Message ID Given will be used. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @param message_id message ID string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_info_headers_set_in_message_id( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env, + const axis2_char_t * message_id); + + /** + * Gets relates to information. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @return pointer to relates to struct, returns a reference, not a + * cloned copy + * @sa axis2_relates_to + */ + AXIS2_EXTERN axis2_relates_to_t *AXIS2_CALL + axis2_msg_info_headers_get_relates_to( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env); + + /** + * Sets relates to information. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @param relates_to pointer to relates to struct, message information + * headers assumes ownership of struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_info_headers_set_relates_to( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env, + axis2_relates_to_t * relates_to); + + /** + * Gets all reference parameters associated with message information + * headers. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @return pointer to array list containing all reference parameters + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_msg_info_headers_get_all_ref_params( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env); + + /** + * Adds a reference parameter in the form of an AXIOM node. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @param ref_param pointer to AXIOM node representing reference + * parameter, message information header does not assume ownership of + * node + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_info_headers_add_ref_param( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env, + axiom_node_t * ref_param); + + /** + * Frees message information header struct. + * @param msg_info_headers pointer to message information headers struct + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_msg_info_headers_free( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_MSG_INFO_HEADERS_H */ diff --git a/include/axis2_msg_recv.h b/include/axis2_msg_recv.h new file mode 100644 index 0000000..ecd9bce --- /dev/null +++ b/include/axis2_msg_recv.h @@ -0,0 +1,268 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_MSG_RECV_H +#define AXIS2_MSG_RECV_H + +/** + * @defgroup axis2_receivers receivers + * @ingroup axis2 + * @{ + * @} + */ + +/** @defgroup axis2_msg_recv message receiver + * @ingroup axis2_receivers + * Description. + * @{ + */ + +/** + * @file axis2_msg_recv.h + * @brief Axis Message Receiver interface. Message Receiver struct. + * This interface is extended by custom message receivers + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include +#include +#include +#include +#include + + struct axis2_msg_ctx; + + /** Type name for struct axis2_msg_recv*/ + typedef struct axis2_msg_recv axis2_msg_recv_t; + + typedef axis2_status_t( + AXIS2_CALL + * AXIS2_MSG_RECV_INVOKE_BUSINESS_LOGIC) ( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + struct axis2_msg_ctx * in_msg_ctx, + struct axis2_msg_ctx * out_msg_ctx); + + typedef axis2_status_t( + AXIS2_CALL + * AXIS2_MSG_RECV_RECEIVE) ( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + struct axis2_msg_ctx * in_msg_ctx, + void *callback_recv_param); + + typedef axis2_status_t( + AXIS2_CALL * AXIS2_MSG_RECV_LOAD_AND_INIT_SVC)( + axis2_msg_recv_t *msg_recv, + const axutil_env_t *env, + struct axis2_svc *svc); + + /** + * Deallocate memory + * @param msg_recv pinter to message receiver + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_msg_recv_free( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env); + + /** + * This method is called from axis2_engine_receive method. This method's + * actual implementation is decided from the create method of the + * extended message receiver object. There depending on the synchronous or + * asynchronous type, receive method is assigned with the synchronous or + * asynchronous implementation of receive. + * @see raw_xml_in_out_msg_recv_create method where receive is assigned + * to receive_sync + * @param msg_recv pointer to message receiver + * @param env pointer to environment struct + * @param in_msg_ctx pointer to in message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_recv_receive( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + struct axis2_msg_ctx *in_msg_ctx, + void *callback_recv_param); + + /** + * This contain in out synchronous business invoke logic + * @param msg_recv pointer to message receiver + * @param env pointer to environment struct + * @param in_msg_ctx pointer to in message context + * @param out_msg_ctx pointer to out message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_msg_recv_invoke_business_logic( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + struct axis2_msg_ctx *in_msg_ctx, + struct axis2_msg_ctx *out_msg_ctx); + + /** + * this will create a new service skeleton object + * @param msg_recv pointer to message receiver + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @return service skeleton object + */ + AXIS2_EXTERN axis2_svc_skeleton_t *AXIS2_CALL + + axis2_msg_recv_make_new_svc_obj( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + struct axis2_msg_ctx *msg_ctx); + + /** + * This will return the service skeleton object + * @param msg_recv pointer to message receiver + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @return service skeleton object + */ + /*AXIS2_EXTERN axis2_svc_skeleton_t *AXIS2_CALL + + axis2_msg_recv_get_impl_obj( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + struct axis2_msg_ctx *msg_ctx);*/ + + /** + * Set the application scope + * @param msg_recv pointer to message receiver + * @param env pointer to environment struct + * @param scope pointer to scope + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_recv_set_scope( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + const axis2_char_t * scope); + + /** + * Get the application scope + * @param msg_recv pointer to message receiver + * @env pointer to environment struct + * @return scope + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_msg_recv_get_scope( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env); + + /** + * Delete the service skeleton object created by make_new_svc_obj + * @param msg_recv pointer to message receiver + * @env pointer to environment struct + * @param msg_ctx pointer to message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_msg_recv_delete_svc_obj( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + AXIS2_EXPORT axis2_status_t AXIS2_CALL + + axis2_msg_recv_set_invoke_business_logic( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + AXIS2_MSG_RECV_INVOKE_BUSINESS_LOGIC func); + + AXIS2_EXPORT axis2_status_t AXIS2_CALL + axis2_msg_recv_set_derived( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + void *derived); + + AXIS2_EXPORT void *AXIS2_CALL + axis2_msg_recv_get_derived( + const axis2_msg_recv_t * msg_recv, + const axutil_env_t * env); + + AXIS2_EXPORT axis2_status_t AXIS2_CALL + axis2_msg_recv_set_receive( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + AXIS2_MSG_RECV_RECEIVE func); + + AXIS2_EXPORT axis2_status_t AXIS2_CALL + axis2_msg_recv_set_load_and_init_svc( + axis2_msg_recv_t *msg_recv, + const axutil_env_t *env, + AXIS2_MSG_RECV_LOAD_AND_INIT_SVC func); + + AXIS2_EXPORT axis2_status_t AXIS2_CALL + axis2_msg_recv_load_and_init_svc( + axis2_msg_recv_t *msg_recv, + const axutil_env_t *env, + struct axis2_svc *svc); + + /** + * Create new message receiver object. usually this will be called from the + * extended message receiver object. + * @see create method of raw_xml_in_out_msg_recv + * @param env pointer to environment struct + * @return newly created message receiver object + **/ + AXIS2_EXTERN axis2_msg_recv_t *AXIS2_CALL + axis2_msg_recv_create( + const axutil_env_t * env); + + /** + * Configuration context is attached to the message receiver so that conf_ctx can be assccessed in load_and_init + * method at service load time. + * @param msg_recv axis2_msg_recv instance + * @param env axutil environment + * @param axis2_conf_ctx Configuration context instance + */ + AXIS2_EXPORT void AXIS2_CALL + axis2_msg_recv_set_conf_ctx( + axis2_msg_recv_t *msg_recv, + const axutil_env_t *env, + struct axis2_conf_ctx *conf_ctx); + + /** + * Returns the Configuration context which is attached to the message receiver + * @param msg_recv axis2_msg_recv instance + * @param env axutil environment + * @returns configuration context + */ + AXIS2_EXPORT struct axis2_conf_ctx* AXIS2_CALL + axis2_msg_recv_get_conf_ctx( + axis2_msg_recv_t *msg_recv, + const axutil_env_t *env); + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_MSG_RECV_H */ diff --git a/include/axis2_op.h b/include/axis2_op.h new file mode 100644 index 0000000..27d3520 --- /dev/null +++ b/include/axis2_op.h @@ -0,0 +1,724 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_OP_H +#define AXIS2_OP_H + +/** + * @defgroup axis2_op operation + * @ingroup axis2_desc + * operation represents the static structure of an operation in a service. + * In Axis2 description hierarchy, an operation lives inside the service to + * which it belongs. + * operations are configured in services.xml files located in the respective + * service group folders of the services folder in the repository. + * In services.xml file, operations are declared in association with a given + * service. The deployment engine would create operation instances to represent + * those configured operations and would associate them with the respective + * service in the configuration. + * operation encapsulates data on message exchange pattern (MEP), the + * execution flows, engaged module information, and the message receiver + * associated with the operation. + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_op */ + typedef struct axis2_op axis2_op_t; + + struct axis2_svc; + struct axis2_msg_recv; + struct axutil_param_container; + struct axis2_module_desc; + struct axis2_op; + struct axis2_relates_to; + struct axis2_op_ctx; + struct axis2_svc_ctx; + struct axis2_msg_ctx; + struct axis2_msg; + struct axis2_conf; + + /** SOAP action string constant */ +#define AXIS2_SOAP_ACTION "soapAction" + + /** + * Creates operation struct. + * @param env pointer to environment struct + * @return pointer to newly created operation + */ + AXIS2_EXTERN axis2_op_t *AXIS2_CALL + axis2_op_create( + const axutil_env_t * env); + + /** + * Frees operation. + * @param op pointer to operation + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_op_free( + axis2_op_t * op, + const axutil_env_t * env); + + /** + * Frees operation given as a void pointer. + * @param op pointer to operation as a void pointer + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_op_free_void_arg( + void *op, + const axutil_env_t * env); + + /** + * Adds a parameter to method. + * @param op pointer to operation + * @param env pointer to environment struct + * @param param pointer parameter to be added, operation assumes + * ownership of parameter + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_add_param( + axis2_op_t * op, + const axutil_env_t * env, + axutil_param_t * param); + + /** + * Gets named parameter. + * @param op pointer to operation + * @param env pointer to environment struct + * @param name name of parameter to be retrieved as a string + * @return pointer to named parameter if exists, else NULL. Returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + axis2_op_get_param( + const axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * name); + /** + * Removes a parameter assiciated with the operation + * @param op pointer to operation + * @param env pointer to environment struct + * @param param_name parameter name to be removed + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_remove_param + (axis2_op_t *op, + const axutil_env_t *env, + const axis2_char_t *param_name); + + /** + * Gets all parameters. + * @param op pointer to operation + * @param env pointer to environment struct + * @return pointer to array list containing all parameters, returns + * a reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_op_get_all_params( + const axis2_op_t * op, + const axutil_env_t * env); + + /** + * Checks if the named parameter is locked. + * @param op pointer to operation + * @param env pointer to environment struct + * @param param_name name of the parameter to be checked + * @return AXIS2_TRUE if named parameter is locked, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_op_is_param_locked( + axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * param_name); + + /** + * Sets parent. Parent of an operation is of type service. + * @param op pointer to operation + * @param env pointer to environment struct + * @param svc pointer to parent service, operation does not assume + * ownership of service + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_set_parent( + axis2_op_t * op, + const axutil_env_t * env, + struct axis2_svc *svc); + + /** + * Gets parent. Parent of an operation is of type service. + * @param op pointer to operation + * @param env pointer to environment struct + * @return pointer to parent service, returns a reference, not a cloned + * copy + */ + AXIS2_EXTERN struct axis2_svc *AXIS2_CALL + axis2_op_get_parent( + const axis2_op_t * op, + const axutil_env_t * env); + + /** + * Sets HTTP Method for RESTful Services. + * @param op pointer to operation + * @param env pointer to environment struct + * @param rest_http_method HTTP Method string, operation does not assume + * ownership of rest_http_method. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_set_rest_http_method( + axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * rest_http_method); + + /** + * Gets HTTP Method for RESTful Services. + * @param op pointer to operation + * @param env pointer to environment struct + * @return HTTP Method string, returns a reference, + * not a cloned copy + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_op_get_rest_http_method( + const axis2_op_t * op, + const axutil_env_t * env); + + /** + * Sets HTTP Location for RESTful Services. + * @param op pointer to operation + * @param env pointer to environment struct + * @param rest_http_location HTTP Location string, operation does not assume + * ownership of rest_http_location. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_set_rest_http_location( + axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * rest_http_location); + + /** + * Gets HTTP Location for RESTful Services. + * @param op pointer to operation + * @param env pointer to environment struct + * @return HTTP Location string, returns a reference, + * not a cloned copy + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_op_get_rest_http_location( + const axis2_op_t * op, + const axutil_env_t * env); + + /** + * Sets operation QName. + * @param op pointer to operation as a void pointer. + * @param env pointer to environment struct + * @param qname pointer to QName, this method creates a clone of the + * QName + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_set_qname( + axis2_op_t * op, + const axutil_env_t * env, + const axutil_qname_t * qname); + + /** + * Gets operation QName. + * @param op pointer to operation + * @param env pointer to environment struct + * @return pointer to QName, returns a reference, not a cloned copy + */ + AXIS2_EXTERN const axutil_qname_t *AXIS2_CALL + axis2_op_get_qname( + void *op, + const axutil_env_t * env); + + /** + * Sets operation message exchange pattern (MEP). + * @param op pointer to operation + * @param env pointer to environment struct + * @param pattern message exchange pattern string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_set_msg_exchange_pattern( + axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * pattern); + + /** + * Gets operation message exchange pattern (MEP). + * @param op pointer to operation + * @param env pointer to environment struct + * @return MEP string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + + axis2_op_get_msg_exchange_pattern( + const axis2_op_t * op, + const axutil_env_t * env); + + /** + * Sets message receiver. message receiver is responsible for invoking + * the business logic associated with the operation. + * @param op pointer to operation + * @param env pointer to environment struct + * @param msg_recv pointer to message receiver, operation assumes + * ownership of message receiver + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_set_msg_recv( + axis2_op_t * op, + const axutil_env_t * env, + struct axis2_msg_recv *msg_recv); + + /** + * Gets message receiver. message receiver is responsible for invoking + * the business logic associated with the operation. + * @param op pointer to operation + * @param env pointer to environment struct + * @return pointer to message receiver, returns a reference, not a + * cloned copy + */ + AXIS2_EXTERN struct axis2_msg_recv *AXIS2_CALL + axis2_op_get_msg_recv( + const axis2_op_t * op, + const axutil_env_t * env); + + /** + * Gets style of operation. Style is that mentioned in WSDL, either + * RPC or document literal. + * @param op pointer to operation + * @param env pointer to environment struct + * @return string representing style + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_op_get_style( + const axis2_op_t * op, + const axutil_env_t * env); + + /** + * Sets style of operation. Style is that mentioned in WSDL, either + * RPC or document literal. + * @param op pointer to operation + * @param env pointer to environment struct + * @param style string representing style + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_set_style( + axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * style); + + /** + * Engages given module to operation. + * @param op pointer to operation + * @param env pointer to environment struct + * @param module_desc pointer to module description, operation does not + * assume ownership of struct + * @param conf pointer to configuration, operation does not assume + * ownership of configuration + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_engage_module( + axis2_op_t * op, + const axutil_env_t * env, + struct axis2_module_desc *module_desc, + struct axis2_conf *conf); + + /** + * Adds module description to engaged module list. + * @param op pointer to operation + * @param env pointer to environment struct + * @param module_dec pointer to module description, operation does not + * assume ownership of struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_op_add_to_engaged_module_list( + axis2_op_t * op, + const axutil_env_t * env, + struct axis2_module_desc *module_dec); + + /** + * Gets all modules associated to operation. + * @param op pointer to operation + * @param env pointer to environment struct + * @return pointer to array list containing module descriptions + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_op_get_all_modules( + const axis2_op_t * op, + const axutil_env_t * env); + + /** + * Gets Axis specific MEP constant. This method simply maps the string + * URI of the MEP to an integer. + * @param op pointer to operation + * @param env pointer to environment struct + * @return integer representing MEP + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_op_get_axis_specific_mep_const( + axis2_op_t * op, + const axutil_env_t * env); + + /** + * Gets fault in flow. Fault in flow is the list of phases invoked + * when a fault happens along in path. + * @param op pointer to operation + * @param env pointer to environment struct + * @return pointer to array list containing phases, returns a reference, + * not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_op_get_fault_in_flow( + const axis2_op_t * op, + const axutil_env_t * env); + + /** + * Gets fault out flow. Fault out flow is the list of phases invoked + * when a fault happens along out path. + * @param op pointer to operation + * @param env pointer to environment struct + * @return pointer to array list containing phases, returns a reference, + * not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_op_get_fault_out_flow( + const axis2_op_t * op, + const axutil_env_t * env); + + /** + * Gets out flow. Out flow is the list of phases invoked + * along out path. + * @param op pointer to operation + * @param env pointer to environment struct + * @return pointer to array list containing phases, returns a reference, + * not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_op_get_out_flow( + const axis2_op_t * op, + const axutil_env_t * env); + + /** + * Gets in flow. In flow is the list of phases + * invoked along in path. + * @param op pointer to operation + * @param env pointer to environment struct + * @return pointer to array list containing phases, returns a reference, + * not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_op_get_in_flow( + const axis2_op_t * op, + const axutil_env_t * env); + + /** + * Sets fault in flow. Fault in flow is the list of phases invoked + * when a fault happens along in path. + * @param op pointer to operation + * @param env pointer to environment struct + * @param list pointer to array list containing phases, operation takes + * over the ownership of list + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_set_fault_in_flow( + axis2_op_t * op, + const axutil_env_t * env, + axutil_array_list_t * list); + + /** + * Sets fault out flow. Fault out flow is the list of phases invoked + * when a fault happens along out path. + * @param op pointer to operation + * @param env pointer to environment struct + * @param list pointer to array list containing phases, operation takes + * over the ownership of list + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_set_fault_out_flow( + axis2_op_t * op, + const axutil_env_t * env, + axutil_array_list_t * list); + + /** + * Sets out flow. Out flow is the list of phases invoked + * along out path. + * @param op pointer to operation + * @param env pointer to environment struct + * @param list pointer to array list containing phases, operation takes + * over the ownership of list + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_set_out_flow( + axis2_op_t * op, + const axutil_env_t * env, + axutil_array_list_t * list); + + /** + * Sets in flow. In flow is the list of phases + * invoked along in path. + * @param op pointer to operation + * @param env pointer to environment struct + * @param list pointer to array list containing phases, operation takes + * over the ownership of list + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_set_in_flow( + axis2_op_t * op, + const axutil_env_t * env, + axutil_array_list_t * list); + + /** + * Adds given QName to module QName list. + * @param op pointer to operation + * @param env pointer to environment struct + * @param module_name pointer to module QName, QName would be cloned by + * this method + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_add_module_qname( + axis2_op_t * op, + const axutil_env_t * env, + const axutil_qname_t * module_qname); + + /** + * Gets all module QNames as a list. + * @param op pointer to operation + * @param env pointer to environment struct + * @return pointer to array list containing module QNames, + * returns a reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_op_get_all_module_qnames( + const axis2_op_t * op, + const axutil_env_t * env); + + /** + * Finds operation context related to this operation using given message + * context and service context. This method would create a new operation + * context related to the operation, if one could not be found. + * @param op pointer to operation + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @param svc_ctx pointer to service context + * @return pointer to operation context, returns + * a reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_op_ctx *AXIS2_CALL + axis2_op_find_op_ctx( + axis2_op_t * op, + const axutil_env_t * env, + struct axis2_msg_ctx *msg_ctx, + struct axis2_svc_ctx *svc_ctx); + + /** + * Finds operation context related to this operation using given message + * context. This method will not create a new operation context if + * an associated operation context could not be found. + * @param op pointer to operation + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @return pointer to operation context if found, else NULL. Returns + * a reference, not a cloned copy + + */ + AXIS2_EXTERN struct axis2_op_ctx *AXIS2_CALL + + axis2_op_find_existing_op_ctx( + axis2_op_t * op, + const axutil_env_t * env, + const struct axis2_msg_ctx *msg_ctx); + + /** + * Registers given operation context against this operation. Registration + * happens within the given message context, as it is the message context + * that captures the state information of a given invocation. + * @param op pointer to operation + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @param op_ctx pointer to operation context, operation does not assume + * ownership of operation context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_register_op_ctx( + axis2_op_t * op, + const axutil_env_t * env, + struct axis2_msg_ctx *msg_ctx, + struct axis2_op_ctx *op_ctx); + + /** + * Gets message with given label. + * @param op pointer to operation + * @param env pointer to environment struct + * @return pointer to message corresponding to given label, returns + * a reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_msg *AXIS2_CALL + axis2_op_get_msg( + const axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * label); + + /** + * Adds given message with the given label. + * @param op pointer to operation + * @param env pointer to environment struct + * @param label label string + * @param msg pointer to message + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_add_msg( + axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * label, + const struct axis2_msg *msg); + + /** + * Checks if the operation is from a module. + * @param op pointer to operation + * @param env pointer to environment struct + * AXIS2_TRUE if the operation is from a module, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_op_is_from_module( + const axis2_op_t * op, + const axutil_env_t * env); + + /** + * Set the wsamapping list. + * @param op pointer to operation + * @param env pointer to environment struct + * @param mapping_list list of action mappings + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_set_wsamapping_list( + axis2_op_t * op, + const axutil_env_t * env, + axutil_array_list_t * mapping_list); + + /** + * Get the wsamapping list. + * @param op pointer to operation + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_op_get_wsamapping_list( + axis2_op_t * op, + const axutil_env_t * env); + + AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL + + axis2_op_get_param_container( + const axis2_op_t * op, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_op_remove_from_engaged_module_list( + axis2_op_t * op, + const axutil_env_t * env, + struct axis2_module_desc *module_desc); + + /** + * Creates operation struct for an operation defined in a module. + * @param env pointer to environment struct + * @return pointer to newly created operation + */ + AXIS2_EXTERN axis2_op_t *AXIS2_CALL + axis2_op_create_from_module( + const axutil_env_t * env); + + /** + * Creates operation struct with given QName. + * @param env pointer to environment struct + * @param name pointer to QName + * @return pointer to newly created operation + */ + AXIS2_EXTERN axis2_op_t *AXIS2_CALL + axis2_op_create_with_qname( + const axutil_env_t * env, + const axutil_qname_t * name); + + /** + * Frees the operation given as a void pointer. This method would cast the + * void parameter to an operation pointer and then call free method. + * @param pointer to operation as a void pointer + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_op_free_void_arg( + void *op, + const axutil_env_t * env); + + /** + * Gets base description. + * @param op pointer to message + * @param env pointer to environment struct + * @return pointer to base description struct + */ + AXIS2_EXTERN axis2_desc_t *AXIS2_CALL + axis2_op_get_base( + const axis2_op_t * op, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_OP_H */ diff --git a/include/axis2_op_client.h b/include/axis2_op_client.h new file mode 100644 index 0000000..8ba764d --- /dev/null +++ b/include/axis2_op_client.h @@ -0,0 +1,445 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_OP_CLIENT_H +#define AXIS2_OP_CLIENT_H + +/** + * @defgroup axis2_client_api client API + * @ingroup axis2 + * @{ + * @} + */ + +/** + * @defgroup axis2_op_client operation client + * @ingroup axis2_client_api + * The operation client is meant to be used by advanced users to consume services. + * Operation client understands a specific Message Exchange Pattern (op) and + * hence the behavior is defined by the op. + * To consume services with an operation client, an operation (of type axis2_op_t) + * and a service context (of type axis2_svc_ctx_t) + * has to be provided along with options to be used. The execute() function + * can be used to send the request and get the response. + * The service client implementation uses the operation client and provides an + * easy to use API for consuming services. Hence the service client + * implementation is a very good example of how to use the operation client API. + * @sa axis2_svc_client + * @{ + */ + +/** + * @file axis2_op_client.h + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_op_client */ + typedef struct axis2_op_client axis2_op_client_t; + + struct axis2_callback_recv; + + /** + * Sets the options that is to be used by this operation client. + * @param op_client pointer to operation client struct + * @param env pointer to environment struct + * @param options pointer to options struct to be set + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_client_set_options( + axis2_op_client_t * op_client, + const axutil_env_t * env, + const axis2_options_t * options); + + /** + * Gets options used by operation client. + * @param op_client pointer to operation client struct + * @param env pointer to environment struct + * @return a pointer to the options struct if options set, else NULL. + * Returns a reference, not a cloned copy. + */ + AXIS2_EXTERN const axis2_options_t *AXIS2_CALL + axis2_op_client_get_options( + const axis2_op_client_t * op_client, + const axutil_env_t * env); + + /** + * Adds a message context to the client for processing. + * @param op_client pointer to operation client struct + * @param env pointer to environment struct + * @param msg_ctx message context to be added. operation client takes + * over the ownership of the message context struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_client_add_msg_ctx( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * Adds out message context to the client for processing. + * @param op_client pointer to operation client struct + * @param env pointer to environment struct + * @param msg_ctx message context to be added. operation client takes + * over the ownership of the message context struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_client_add_out_msg_ctx( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_client_add_in_msg_ctx( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * Gets a message corresponding to the given label. + * @param op_client pointer to operation client struct + * @param env pointer to environment struct + * @param message_label the message label of the desired message context + * @return the desired message context or NULL if its not available. + * Returns a reference, not a cloned copy. + */ + AXIS2_EXTERN const axis2_msg_ctx_t *AXIS2_CALL + axis2_op_client_get_msg_ctx( + const axis2_op_client_t * op_client, + const axutil_env_t * env, + const axis2_wsdl_msg_labels_t message_label); + + /** + * Sets the callback to be executed when a response message is received. + * @param op_client pointer to operation client struct + * @param env pointer to environment struct + * @param callback the callback to be used. operation client takes + * over the ownership of the message context struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_client_set_callback( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_callback_t * callback); + + /** + * Gets the callback. + * @param op_client pointer to operation client struct + * @param env pointer to environment struct + * @return callback + */ + AXIS2_EXTERN axis2_callback_t *AXIS2_CALL + axis2_op_client_get_callback( + axis2_op_client_t * op_client, + const axutil_env_t * env); + + /** + * Execute the op. What this does depends on the specific operation client. + * The basic idea is to have the operation client execute and do something + * with the messages that have been added to it so far. For example, if its + * an Out-In op, and if the Out message has been set, then executing the + * client asks it to send the out message and get the in message + * @param op_client pointer to operation client + * @param env pointer to environment struct + * @param block indicates whether execution should block or return ASAP + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_client_execute( + axis2_op_client_t * op_client, + const axutil_env_t * env, + const axis2_bool_t block); + + /** + * Resets the operation client to a clean status after the op has completed. + * This is how you can reuse an operation client. Note that this does not reset + * the options; only the internal state so the client can be used again. + * @param op_client pointer to operation client + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_client_reset( + axis2_op_client_t * op_client, + const axutil_env_t * env); + + /** + * Completes the execution by closing the transports if necessary. + * This method is useful when client uses two transports for sending and + * receiving. + * @param op_client pointer to operation client struct + * @param env pointer to environment struct + * @param msg_ctx message context which contains the transport information + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_client_complete( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * Gets the operation context of the operation client. + * @param op_client pointer to operation client struct + * @param env pointer to environment struct + * @return operation context related to operation client + */ + AXIS2_EXTERN axis2_op_ctx_t *AXIS2_CALL + axis2_op_client_get_operation_context( + const axis2_op_client_t * op_client, + const axutil_env_t * env); + + /** + * Sets callback receiver. + * @param op_client pointer to operation client struct + * @param env pointer to environment struct + * @param callback_recv pointer to callback receiver struct. + * operation client assumes ownership of the callback struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_client_set_callback_recv( + axis2_op_client_t * op_client, + const axutil_env_t * env, + struct axis2_callback_recv *callback_recv); + + /** + * Frees the operation client + * @param op_client pointer to operation client struct + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_op_client_free( + axis2_op_client_t * op_client, + const axutil_env_t * env); + + /** + * Creates an operation client struct for the specified operation, service + * context and given options. + * @param env pointer to environment struct + * @param op pointer to operation struct corresponding to the operation to + * to be executed. Newly created client assumes ownership of the operation. + * @param svc_ctx pointer to service context struct representing the service + * to be consumed. Newly created client assumes ownership of the service + * context. + * @param options options to be used by operation client. Newly created + * client assumes ownership of the options + * context. + * @return a pointer to newly created operation client struct, + * or NULL on error with error code set in environment's error + */ + AXIS2_EXTERN axis2_op_client_t *AXIS2_CALL + axis2_op_client_create( + const axutil_env_t * env, + axis2_op_t * op, + axis2_svc_ctx_t * svc_ctx, + axis2_options_t * options); + + /** + * Gets SOAP action. + * @param op_client pointer to op client struct + * @param env pointer to environment struct + * @return a pointer to SOAP action string + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + axis2_op_client_get_soap_action( + const axis2_op_client_t * op_client, + const axutil_env_t * env); + + /** + * Prepares the message context for invocation. Here the properties kept + * in the op_client are copied to the message context. + * @param op_client pointer to op client struct + * @param env pointer to environment struct + * @param op pointer operation to be invoked + * @param msg_ctx pointer to message context to be filled + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_client_prepare_invocation( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_op_t * op, + axis2_msg_ctx_t * msg_ctx); + + /** + * Prepares the SOAP envelope using the payload. + * @param op_client pointer to op client struct + * @param env pointer to environment struct + * @param to_send payload to be sent in AXIOM node format + * @return a pointer to message context struct filled with the SOAP + * envelope to be sent + */ + AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL + axis2_op_client_prepare_soap_envelope( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axiom_node_t * to_send); + + /** + * Tries to infer the transport looking at the URL, the URL can be http:// + * tcp:// mail:// local://. The method will look for the transport name as the + * protocol part of the transport. + * @param op_client pointer to op client struct + * @param env pointer to environment struct + * @param epr endpoint reference struct representing the endpoint URL + * @return pointer to the transport description with inferred information + */ + AXIS2_EXTERN axis2_transport_out_desc_t *AXIS2_CALL + axis2_op_client_infer_transport( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_endpoint_ref_t * epr); + + /** + * Creates default SOAP envelope. + * @param op_client pointer to op client struct + * @param env pointer to environment struct + * @return pointer to default SOAP envelope created + */ + AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL + axis2_op_client_create_default_soap_envelope( + axis2_op_client_t * op_client, + const axutil_env_t * env); + + /** + * Engage named module. The named module must have been configured in + * the Axis2 configuration. For a module to be detected by the + * deployment engine, the modules has to be placed in the + * AXIS2_REPOSITORY/modules directory. + * @param op_client pointer to op client struct + * @param env pointer to environment struct + * @param qname QName representing the module name + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_client_engage_module( + axis2_op_client_t * op_client, + const axutil_env_t * env, + const axutil_qname_t * qname); + + /** + * Sets SOAP version URI. + * @param op_client pointer to op client struct + * @param env pointer to environment struct + * @param soap_version_uri SOAP version URI + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_client_set_soap_version_uri( + axis2_op_client_t * op_client, + const axutil_env_t * env, + const axis2_char_t * soap_version_uri); + + /** + * Sets SOAP action. + * @param op_client pointer to op client struct + * @param env pointer to environment struct + * @param soap_action SOAP action + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_client_set_soap_action( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axutil_string_t * soap_action); + + /** + * Sets WSA action. + * @param op_client pointer to op client struct + * @param env pointer to environment struct + * @param wsa_action Web services Addressing action + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_client_set_wsa_action( + axis2_op_client_t * op_client, + const axutil_env_t * env, + const axis2_char_t * wsa_action); + + /** + * Gets service context. + * @param op_client pointer to op client struct + * @param env pointer to environment struct + * @return pointer to service context struct if set, else NULL + */ + AXIS2_EXTERN axis2_svc_ctx_t *AXIS2_CALL + axis2_op_client_get_svc_ctx( + const axis2_op_client_t * op_client, + const axutil_env_t * env); + + + /** + * Sets whether to reuse op client. + * @param op_client pointer to op client struct + * @param env pointer to environment struct + * @param reuse flag is a boolean value + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_op_client_set_reuse( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_bool_t reuse); + + /** + * Sends a message represented by the given message context and captures + * the response in return message context. + * @param env pointer to environment struct + * @param msg_ctx pointer to message context representing the message to + * be sent + * @return message context representing the received response + */ + AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL + axis2_op_client_two_way_send( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * Receives a message corresponding to a request depicted by given + * message context. + * @param env pointer to environment struct + * @param msg_ctx pointer to message context representing the response to + * be received + * @return message context representing the received response + */ + AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL + axis2_op_client_receive( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_OP_CLIENT_H */ diff --git a/include/axis2_op_ctx.h b/include/axis2_op_ctx.h new file mode 100644 index 0000000..f29ec60 --- /dev/null +++ b/include/axis2_op_ctx.h @@ -0,0 +1,307 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_OP_CTX_H +#define AXIS2_OP_CTX_H + +/** + * @defgroup axis2_op_ctx operation context + * @ingroup axis2_context + * operation context represents a running "instance" of an operation. + * operation context allows messages to be grouped into operations as in + * WSDL 2.0 specification. operations are essentially arbitrary message exchange + * patterns (MEP). So as messages are being exchanged, operation context remembers + * the state of message exchange pattern specifics. + * The implementation of operation context supports MEPs which have one input + * message and/or one output message. In order to support other MEPs one must + * extend this struct. + * @{ + */ + +/** + * @file axis2_op_ctx.h + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_op_ctx */ + typedef struct axis2_op_ctx axis2_op_ctx_t; + + struct axis2_svc_ctx; + + /** + * Creates an operation context struct instance. + * @param env pointer to environment struct + * @param op pointer to operation that is related to operation context. + * operation context does not assume the ownership of the struct + * @param svc_ctx pointer to parent service context + * @return pointer to newly created operation context + */ + AXIS2_EXTERN axis2_op_ctx_t *AXIS2_CALL + axis2_op_ctx_create( + const axutil_env_t * env, + struct axis2_op *op, + struct axis2_svc_ctx *svc_ctx); + + /** + * Gets base which is of context type. + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @return pointer to base context + */ + AXIS2_EXTERN axis2_ctx_t *AXIS2_CALL + axis2_op_ctx_get_base( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env); + + /** + * Frees operation context. + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_op_ctx_free( + struct axis2_op_ctx *op_ctx, + const axutil_env_t * env); + + /** + * Initializes operation context. This method traverses through all the + * message contexts stored within it and initialize them all. + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @param conf pointer to conf configuration + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_ctx_init( + struct axis2_op_ctx *op_ctx, + const axutil_env_t * env, + struct axis2_conf *conf); + + /** + * Gets operation the operation context is related to. + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @return pointer to operation + */ + AXIS2_EXTERN struct axis2_op *AXIS2_CALL + axis2_op_ctx_get_op( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env); + + /** + * Gets parent which is of service context type. + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @return pointer to service context within which this operation + * context lives + */ + AXIS2_EXTERN struct axis2_svc_ctx *AXIS2_CALL + axis2_op_ctx_get_parent( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env); + + /** + * Adds a message context. + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * does not assume the ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_ctx_add_msg_ctx( + struct axis2_op_ctx *op_ctx, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * Gets message context with the given message ID. + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @param message_id message label of type axis2_wsdl_msg_labels_t. + * This can be one of AXIS2_WSDL_MESSAGE_LABEL_IN or AXIS2_WSDL_MESSAGE_LABEL_OUT + * from the axis2_wsdl_msg_labels enum. + * @return pointer to message context with given ID + */ + AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL + axis2_op_ctx_get_msg_ctx( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env, + const axis2_wsdl_msg_labels_t message_id); + + /** + * Gets the bool value indicating if the MEP is complete. + * MEP is considered complete when all the messages that + * are associated with the MEP has arrived. + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @return AXIS2_TRUE if MEP invocation is complete, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_op_ctx_get_is_complete( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env); + + /** + * Sets the bool value indicating if the MEP is complete. + * MEP is considered complete when all the messages that + * are associated with the MEP has arrived. + * @param op_ctx pointer to operating context + * @param env pointer to environment struct + * @param is_complete AXIS2_TRUE if MEP invocation is complete, else + * AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_ctx_set_complete( + struct axis2_op_ctx *op_ctx, + const axutil_env_t * env, + axis2_bool_t is_complete); + + /** + * Cleans up the operation context. Clean up includes removing all + * message context references recorded in operation context. + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_ctx_cleanup( + struct axis2_op_ctx *op_ctx, + const axutil_env_t * env); + + /** + * Sets parent service context. + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @param svc_ctx pointer to service context, message context does not + * assume the ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_ctx_set_parent( + struct axis2_op_ctx *op_ctx, + const axutil_env_t * env, + struct axis2_svc_ctx *svc_ctx); + + /** + * Gets the message context map. + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @return pointer to hash table containing message contexts + */ + AXIS2_EXTERN axis2_msg_ctx_t **AXIS2_CALL + axis2_op_ctx_get_msg_ctx_map( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env); + + /** + * Sets the bool value indicating the status of response. + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @param response_written AXIS2_TRUE if response is written, else + * AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_ctx_set_response_written( + axis2_op_ctx_t * op_ctx, + const axutil_env_t * env, + const axis2_bool_t response_written); + + /** + * Checks the response status, whether it is written or not. + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @return AXIS2_TRUE if response is already written, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_op_ctx_get_response_written( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env); + + /** + * Destroys mutex used to synchronize the read/write operations + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @return returns void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_op_ctx_destroy_mutex( + struct axis2_op_ctx *op_ctx, + const axutil_env_t * env); + + /** + * Checks whether op_ctx is in use. This is necessary when destroying the + * thread mutex at the http_worker to check whether the operation context + * is still in use + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @return AXIS2_TRUE if still in use, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_op_ctx_is_in_use( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env); + + /** + * Set operation context's is_in_use attribute. This is necessary when + * destroying the thread mutex at the http_worker to check whether the + * operation context is still in use + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @param is_in_use AXIS2_TRUE if still in use, else AXIS2_FALSE + * @return AXIS2_TRUE if still in use, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_ctx_set_in_use( + struct axis2_op_ctx *op_ctx, + const axutil_env_t * env, + axis2_bool_t is_in_use); + + /** + * Incrementing the op_ctx ref count. This is necessary when + * prevent freeing op_ctx through op_client when it is in use + * as in sandesha where the msg_cts is stored. + * @param op_ctx pointer to operation context + * @param env pointer to environment struct + * @return AXIS2_TRUE if still in use, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_op_ctx_increment_ref( + axis2_op_ctx_t * op_ctx, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_OP_CTX_H */ diff --git a/include/axis2_options.h b/include/axis2_options.h new file mode 100644 index 0000000..4ed2185 --- /dev/null +++ b/include/axis2_options.h @@ -0,0 +1,848 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_OPTIONS_H +#define AXIS2_OPTIONS_H + +/** @defgroup axis2_options options + * @ingroup axis2_client_api + * The options struct holds user options to be used by client when invocation + * services. In addition to the end point reference information, options + * struct also hold addressing, transport and timeout related information. + * User specific properties could also set on top of options. + * @{ + */ + +/** + * @file axis2_options.h + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** Default timeout */ +#define AXIS2_DEFAULT_TIMEOUT_MILLISECONDS 30000 + +/** Timeout in seconds waiting for a response envelope */ +#define AXIS2_TIMEOUT_IN_SECONDS "time_out" + +/** Copy properties */ +#define AXIS2_COPY_PROPERTIES "copy_properties" + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_options */ + typedef struct axis2_options axis2_options_t; + + /** + * Gets Web Services Addressing (WSA) action. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return WSA action string if set, else NULL + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_options_get_action( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets WSA fault to address. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return pointer to endpoint reference struct representing fault to + * address if set, else NULL + */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_options_get_fault_to( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets WSA from address. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return pointer to endpoint reference struct representing from + * address if set, else NULL + */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_options_get_from( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets transport receiver. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return pointer to transport receiver struct if set, else NULL + */ + AXIS2_EXTERN axis2_transport_receiver_t *AXIS2_CALL + axis2_options_get_transport_receiver( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets transport in. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return pointer to transport in struct if set, else NULL + */ + AXIS2_EXTERN axis2_transport_in_desc_t *AXIS2_CALL + axis2_options_get_transport_in( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets transport in protocol. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return pointer to transport in protocol string if set, else NULL + */ + AXIS2_EXTERN AXIS2_TRANSPORT_ENUMS AXIS2_CALL + axis2_options_get_transport_in_protocol( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets message ID. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return pointer to message ID string if set, else NULL + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_options_get_message_id( + const axis2_options_t * options_t, + const axutil_env_t * env); + + /** + * Gets the properties hash map. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return pointer to properties hash map if set, else NULL + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_options_get_properties( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets a property corresponding to the given key. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param key key of the property to be returned + * @return value corresponding to the given key + */ + AXIS2_EXTERN void *AXIS2_CALL + axis2_options_get_property( + const axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * key); + + /** + * Gets relates to information. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return pointer to relates to struct if set, else NULL + */ + AXIS2_EXTERN axis2_relates_to_t *AXIS2_CALL + axis2_options_get_relates_to( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets WSA reply to address. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return pointer to endpoint reference struct representing reply to + * address if set, else NULL + */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_options_get_reply_to( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets transport out. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return pointer to transport out struct if set, else NULL + */ + AXIS2_EXTERN axis2_transport_out_desc_t *AXIS2_CALL + axis2_options_get_transport_out( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets transport out protocol. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return pointer to transport out protocol string if set, else NULL + */ + AXIS2_EXTERN AXIS2_TRANSPORT_ENUMS AXIS2_CALL + axis2_options_get_sender_transport_protocol( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets SOAP version URI. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return string representing SOAP version URI + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_options_get_soap_version_uri( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets the wait time after which a client times out in a blocking scenario. + * The default is AXIS2_DEFAULT_TIMEOUT_MILLISECONDS. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return timeout in milliseconds + */ + AXIS2_EXTERN long AXIS2_CALL + axis2_options_get_timeout_in_milli_seconds( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets WSA to address. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return pointer to endpoint reference struct representing to + * address if set, else NULL + */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_options_get_to( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets use separate listener status. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return AXIS2_TRUE if using separate listener, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_options_get_use_separate_listener( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets the parent options. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return pointer to the parent options struct if set, else NULL + */ + AXIS2_EXTERN axis2_options_t *AXIS2_CALL + axis2_options_get_parent( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Sets the parent options. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param parent pointer to parent options struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_parent( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_options_t * parent); + + /** + * Sets WSA action + * @param options pointer to options struct + * @param env pointer to environment struct + * @param action pointer to action string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_action( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * action); + + /** + * Sets fault to address. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param fault_to pointer to endpoint reference struct representing + * fault to address. options takes over the ownership of the struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_fault_to( + axis2_options_t * options, + const axutil_env_t * env, + axis2_endpoint_ref_t * fault_to); + + /** + * Sets from address. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param from pointer to endpoint reference struct representing + * from to address. options takes over the ownership of the struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_from( + axis2_options_t * options, + const axutil_env_t * env, + axis2_endpoint_ref_t * from); + + /** + * sets from address. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param to pointer to endpoint reference struct representing + * to address. Options takes over the ownership of the struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_to( + axis2_options_t * options, + const axutil_env_t * env, + axis2_endpoint_ref_t * to); + + /** + * Sets transport receiver. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param receiver pointer to transport receiver struct. options takes + * over the ownership of the struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_transport_receiver( + axis2_options_t * options, + const axutil_env_t * env, + axis2_transport_receiver_t * receiver); + + /** + * Sets transport in description. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param transport_in pointer to transport_in struct. options takes + * over the ownership of the struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_transport_in( + axis2_options_t * options, + const axutil_env_t * env, + axis2_transport_in_desc_t * transport_in); + + /** + * Sets transport in protocol. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param in_protocol pointer to in_protocol struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_transport_in_protocol( + axis2_options_t * options, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS transport_in_protocol); + + /** + * Sets message ID. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param message_id pointer to message_id struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_message_id( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * message_id); + + /** + * Sets the properties hash map. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param properties pointer to properties hash map. options takes + * over the ownership of the hash struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_properties( + axis2_options_t * options, + const axutil_env_t * env, + axutil_hash_t * properties); + + /** + * Sets a property with the given key value. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param property_key property key string + * @param property pointer to property to be set + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_property( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * property_key, + const void *property); + + /** + * Sets relates to. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param relates_to pointer to relates_to struct. options takes + * over the ownership of the struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_relates_to( + axis2_options_t * options, + const axutil_env_t * env, + axis2_relates_to_t * relates_to); + + /** + * Sets reply to address. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param reply_to pointer to endpoint reference struct representing + * reply to address. options takes over the ownership of the struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_reply_to( + axis2_options_t * options, + const axutil_env_t * env, + axis2_endpoint_ref_t * reply_to); + + /** + * Sets the transport out description. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param transport_out pointer to transport out description struct. + * options takes over the ownership of the struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_transport_out( + axis2_options_t * options, + const axutil_env_t * env, + axis2_transport_out_desc_t * transport_out); + + /** + * Sets the sender transport. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param sender_transport name of the sender transport to be set + * @param conf pointer to conf struct, it is from the conf that the + * transport is picked with the given name + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_sender_transport( + axis2_options_t * options, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS sender_transport, + axis2_conf_t * conf); + + /** + * Sets the SOAP version URI. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param soap_version_uri URI of the SOAP version to be set, can be + * either AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI or + * AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_soap_version_uri( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * soap_version_uri); + + /** + * Sets timeout in Milli seconds. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param timeout_in_milli_seconds timeout in milli seconds + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_timeout_in_milli_seconds( + axis2_options_t * options, + const axutil_env_t * env, + const long timeout_in_milli_seconds); + + /** + * Sets transport information. Transport information includes the name + * of the sender transport, name of the receiver transport and if a + * separate listener to be used to receive response. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param sender_transport name of sender transport to be used + * @param receiver_transport name of receiver transport to be used + * @param use_separate_listener bool value indicating whether to use + * a separate listener or not. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_transport_info( + axis2_options_t * options, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS sender_transport, + const AXIS2_TRANSPORT_ENUMS receiver_transport, + const axis2_bool_t use_separate_listener); + + /** + * Sets the bool value indicating whether to use a separate listener or not. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param use_separate_listener bool value indicating whether to use + * a separate listener or not. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_use_separate_listener( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_bool_t use_separate_listener); + + /** + * Adds a WSA reference parameter. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param reference_parameter pointer to reference parameter in the form + * of an AXIOM tree. options takes over the ownership of the struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_add_reference_parameter( + axis2_options_t * options, + const axutil_env_t * env, + axiom_node_t * reference_parameter); + + /** + * Gets manage session bool value. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return AXIS2_TRUE if session is managed, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_options_get_manage_session( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Sets manage session bool value. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param manage_session manage session bool value + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_manage_session( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_bool_t manage_session); + + /** + * Sets WSA message information headers. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param pointer to message information headers struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_msg_info_headers( + axis2_options_t * options, + const axutil_env_t * env, + axis2_msg_info_headers_t * msg_info_headers); + + /** + * Gets WSA message information headers. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return pointer to message information headers struct if set, + * else NULL + */ + AXIS2_EXTERN axis2_msg_info_headers_t *AXIS2_CALL + axis2_options_get_msg_info_headers( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets SOAP version. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return AXIOM_SOAP11 if SOAP version 1.1 is in use, else AXIOM_SOAP12 + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_options_get_soap_version( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Sets SOAP version. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param soap_version soap version, either AXIOM_SOAP11 or AXIOM_SOAP12 + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_soap_version( + axis2_options_t * options, + const axutil_env_t * env, + const int soap_version); + + /** + * Enable/disable MTOM handling. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param enable_mtom AXIS2_TRUE if MTOM is to be enabled, AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_enable_mtom( + axis2_options_t * options, + const axutil_env_t * env, + axis2_bool_t enable_mtom); + + /** + * Gets Enable/disable MTOM status. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return AXIS2_TRUE if MTOM enabled, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_options_get_enable_mtom( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Gets SOAP action. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return SOAP Action string if set, else NULL + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + axis2_options_get_soap_action( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Sets SOAP action + * @param options pointer to options struct + * @param env pointer to environment struct + * @param action pointer to SOAP action string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_soap_action( + axis2_options_t * options, + const axutil_env_t * env, + axutil_string_t * soap_action); + + /** + * Sets xml parser reset + * @param options pointer to options struct + * @param env pointer to environment struct + * @param reset flag is a boolean value + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_xml_parser_reset( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_bool_t paser_reset_flag); + + /** + * Gets xml parser reset value, + * @param options pointer to options struct + * @param env pointer to environment struct + * @return xml parser reset boolean value + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_options_get_xml_parser_reset( + const axis2_options_t * options, + const axutil_env_t * env); + + /** + * Frees options struct. + * @param options pointer to options struct + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_options_free( + axis2_options_t * options, + const axutil_env_t * env); + + /** + * Sets the bool value indicating whether to enable REST or not. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param enable_rest bool value indicating whether to enable REST + * or not, AXIS2_TRUE to enable, AXIS2_FALSE to disable + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_enable_rest( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_bool_t enable_rest); + + /** + * Sets the bool value indicating whether to test whether HTTP + * Authentication is required or not. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param test_http_auth bool value indicating whether to test + * or not, AXIS2_TRUE to enable, AXIS2_FALSE to disable + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_test_http_auth( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_bool_t test_http_auth); + + /** + * Sets the bool value indicating whether to test whether Proxy + * Authentication is required or not. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param test_proxy_auth bool value indicating whether to test + * or not, AXIS2_TRUE to enable, AXIS2_FALSE to disable + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_test_proxy_auth( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_bool_t test_proxy_auth); + + /** + * Sets the HTTP method to be used + * @param options pointer to options struct + * @param env pointer to environment struct + * @param http_method string representing HTTP method to use, + * can be either AXIS2_HTTP_GET or AXIS2_HTTP_POST + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_http_method( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * http_method); + + /** + * Sets the Additional HTTP Headers to be sent. + * @param options pointer to options struct + * @param env pointer to environment struct + * @param http_header_list array list containing + * HTTP Headers. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_http_headers( + axis2_options_t * options, + const axutil_env_t * env, + axutil_array_list_t * http_header_list); + + /** + * Creates the options struct. + * @param env pointer to environment struct + * @return a pointer to newly created options struct, or NULL on error + * with error code set in environment's error. + */ + AXIS2_EXTERN axis2_options_t *AXIS2_CALL + axis2_options_create( + const axutil_env_t * env); + + /** + * Creates the options struct with given parent. + * @param env pointer to environment struct + * @param parent pointer to parent struct + * @return a pointer to newly created options struct. Newly created options + * assumes ownership of the parent + * or NULL on error with error code set in environment's error. + */ + AXIS2_EXTERN axis2_options_t *AXIS2_CALL + axis2_options_create_with_parent( + const axutil_env_t * env, + axis2_options_t * parent); + + /** + * Sets HTTP authentication information. + * @param env pointer to environment struct + * @param parent pointer to parent struct + * @param username string representing username + * @param password string representing password + * @param auth_type use "Basic" to force basic authentication + * and "Digest" to force digest authentication or NULL for not + * forcing authentication + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_http_auth_info( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * username, + const axis2_char_t * password, + const axis2_char_t * auth_type); + + /** + * Sets proxy authentication information. + * @param env pointer to environment struct + * @param parent pointer to parent struct + * @param username string representing username + * @param password string representing password + * @param auth_type use "Basic" to force basic authentication + * and "Digest" to force digest authentication or NULL for not + * forcing authentication + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_options_set_proxy_auth_info( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * username, + const axis2_char_t * password, + const axis2_char_t * auth_type); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_OPTIONS_H */ diff --git a/include/axis2_out_transport_info.h b/include/axis2_out_transport_info.h new file mode 100644 index 0000000..1161062 --- /dev/null +++ b/include/axis2_out_transport_info.h @@ -0,0 +1,115 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_OUT_TRANSPORT_INFO_H +#define AXIS2_OUT_TRANSPORT_INFO_H + +/** + * @defgroup axis2_out_transport_info out transport info + * @ingroup axis2_core_trans + * Description + * @{ + */ + +/** + * @file axis2_out_transport_info.h + * @brief axis2 Out Transport Info + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_out_transport_info */ + typedef struct axis2_out_transport_info axis2_out_transport_info_t; + + typedef struct axis2_out_transport_info_ops axis2_out_transport_info_ops_t; + + struct axis2_out_transport_info_ops + { + axis2_status_t( + AXIS2_CALL + * set_content_type)( + axis2_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * content_type); + + axis2_status_t( + AXIS2_CALL + * set_char_encoding)( + axis2_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * encoding); + + axis2_status_t( + AXIS2_CALL + * set_cookie_header)( + axis2_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * cookie_header); + + axis2_status_t( + AXIS2_CALL + * set_session)( + axis2_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * session_id, + const axis2_char_t * session_value); + + void( + AXIS2_CALL + * free)( + axis2_out_transport_info_t * info, + const axutil_env_t * env); + }; + + struct axis2_out_transport_info + { + const axis2_out_transport_info_ops_t *ops; + }; + + /** Set content type. */ +#define AXIS2_OUT_TRANSPORT_INFO_SET_CONTENT_TYPE(out_transport_info, \ + env, content_type) ((out_transport_info->ops)->set_content_type(out_transport_info, env, content_type)) + + /** Set cahr encoding. */ +#define AXIS2_OUT_TRANSPORT_INFO_SET_CHAR_ENCODING(out_transport_info, \ + env, encoding) ((out_transport_info->ops)->set_char_encoding(out_transport_info, env, encoding)) + + /** Set cookie header. */ +#define AXIS2_OUT_TRANSPORT_INFO_SET_COOKIE_HEADER(out_transport_info, \ + env, cookie_header) ((out_transport_info->ops)->set_cookie_header(out_transport_info, env, cookie_header)) + + /** Set session. */ +#define AXIS2_OUT_TRANSPORT_INFO_SET_SESSION(out_transport_info, \ + env, session_id, session_value) ((out_transport_info->ops)->set_session(out_transport_info, env, session_id, session_value)) + + /** Free. */ +#define AXIS2_OUT_TRANSPORT_INFO_FREE(out_transport_info, env)\ + ((out_transport_info->ops)->free(out_transport_info, env)) + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_OUT_TRANSPORT_INFO_H */ diff --git a/include/axis2_phase.h b/include/axis2_phase.h new file mode 100644 index 0000000..e0231d8 --- /dev/null +++ b/include/axis2_phase.h @@ -0,0 +1,352 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_PHASE_H +#define AXIS2_PHASE_H + +/** + * @defgroup axis2_phase phases + * @ingroup axis2_engine + * phase is a logical unit of execution in the Axis2 engine's execution flows. + * A phase encapsulates one or more handlers in a given sequence to be invoked. + * The sequencing of handlers within a phase are often defined by module + * configuration which specifies where in the phase's handler chain a given + * handler should be placed. + * Calling invoke on phase triggers invoke on the handlers stored within the + * phase in the sequence they are ordered. + * @{ + */ + +/** + * @file axis2_phase.h + */ + +#include +#include +#include +#include +#include +#include + +/** + * A given handler's location within the list of handlers is before a particular + * handler and after another particular handler. + */ +#define AXIS2_PHASE_BOTH_BEFORE_AFTER 0 + +/** + * A given handler's location within the list of handlers is before another + * given handler. + */ +#define AXIS2_PHASE_BEFORE 1 + +/** + * A given handler's location within the list of handlers is after another + * given handler. + */ +#define AXIS2_PHASE_AFTER 2 + +/** + * A given handler's location within the list of handlers could be anywhere in + * the list. + */ +#define AXIS2_PHASE_ANYWHERE 3 + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for axis2_phase */ + typedef struct axis2_phase axis2_phase_t; + + struct axis2_msg_ctx; + + /** + * Adds given handler to the specified position in the handler array list. + * @param phase pointer to phase struct + * @param env pointer to environment struct + * @param index index + * @param handler pointer to handler, phase does not assume the + * ownership of the handler + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_add_handler_at( + axis2_phase_t * phase, + const axutil_env_t * env, + const int index, + axis2_handler_t * handler); + + /** + * Adds the given handler to the end of the handler list. + * @param phase pointer to phase + * @param env pointer to environment struct + * @param handler pointer to handler, phase does not assume the + * ownership of the handler + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_add_handler( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler); + + /** + * Remove the given handler from the handler list. + * @param phase pointer to phase + * @param env pointer to environment struct + * @param handler pointer to handler, phase does not assume the + * ownership of the handler + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_remove_handler( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler); + + /** + * Invokes the phase. This function will in turn call invoke method of + * each handler in the handler list, in sequence, starting from the + * beginning of the list to the end of the list. + * @param phase pointer to phase + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_invoke( + axis2_phase_t * phase, + const axutil_env_t * env, + struct axis2_msg_ctx *msg_ctx); + + /** + * Gets phase name. + * @param phase pointer to phase + * @param env pointer to environment struct + * @return returns name of phase + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_phase_get_name( + const axis2_phase_t * phase, + const axutil_env_t * env); + + /** + * Gets handler count in the handler list. + * @param phase pointer to phase + * @param env pointer to environment struct + * @return the number of handlers in the handler list + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_phase_get_handler_count( + const axis2_phase_t * phase, + const axutil_env_t * env); + + /** + * Sets the first handler in the handler list. + * @param phase pointer to phase + * @param env pointer to environment struct + * @param handler pointer to handler, phase does not assume the + * ownership of the handler + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_set_first_handler( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler); + + /** + * Sets the last handler in the handler list. + * @param phase pointer to phase + * @param env pointer to environment struct + * @param handler pointer to handler, phase does not assume the + * ownership of the handler + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_set_last_handler( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler); + + /** + * Adds handler within the handler description to the list of handlers + * in the phase. + * @param phase pointer to phase + * @param env pointer to environment struct + * @param handler_desc pointer to handler description, phase does not + * assume the ownership of neither the handler description not the handler + * within the handler description + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_add_handler_desc( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_desc_t * handler_desc); + + /** + * Remove handler within the handler description from the list of handlers + * in the phase. + * @param phase pointer to phase + * @param env pointer to environment struct + * @param handler_desc pointer to handler description, phase does not + * assume the ownership of neither the handler description not the handler + * within the handler description + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_remove_handler_desc( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_desc_t * handler_desc); + + /** + * Inserts the handler into handler list of the phase based on the phase + * rules associated with the handler. This function takes into account + * the before rules of the handler. Before rules specify the location + * of a current handler in the handler list, before which the given + * handler is to be placed. + * @param phase pointer to phase + * @param env pointer to environment struct + * @param handler pointer to handler, phase does not assume the + * ownership of the handler + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_insert_before( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler); + + /** + * Inserts the handler into handler list of the phase based on the phase + * rules associated with the handler. This function takes into account + * the after rules of the handler. After rules specify the location + * of a current handler in the handler list, after which the given + * handler is to be placed. + * @param phase pointer to phase + * @param env pointer to environment struct + * @param handler pointer to handler, phase does not assume the + * ownership of the handler + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_insert_after( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler); + + /** + * Inserts the handler into handler list of the phase based on both + * before and after phase rules associated with the handler. + * This method assume that both the before and after cannot be the same + * handler . That condition is not checked by this function. + * It should be checked before calling this function + * @param phase pointer to phase + * @param env pointer to environment struct + * @param handler pointer to handler, phase does not assume the + * ownership of the handler + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_phase_insert_before_and_after( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler); + + /** + * Inserts the handler to the correct location in the handler list of + * the phase. Location is evaluated based on the phase rules. + * @param phase pointer to phase + * @param env pointer to environment struct + * @param handler_desc pointer to handler description, phase does not + * assume the ownership of neither the handler description not the handler + * within the handler description + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_insert_handler_desc( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_desc_t * handler_desc); + + /** + * Gets all the handlers in the phase. + * @param phase pointer to phase + * @param env pointer to environment struct + * @return pointer to array list containing the list of handlers + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_phase_get_all_handlers( + const axis2_phase_t * phase, + const axutil_env_t * env); + + /** + * Invokes handlers starting from the given handler index. + * @param phase pointer to phase + * @param env pointer to environment struct + * @param paused_handler_index index of the handler to start the + * invocation from + * @param msg_ctx pointer to message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_phase_invoke_start_from_handler( + axis2_phase_t * phase, + const axutil_env_t * env, + const int paused_handler_index, + struct axis2_msg_ctx *msg_ctx); + + /** + * Frees phase struct. + * @param phase pointer to phase + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_phase_free( + axis2_phase_t * phase, + const axutil_env_t * env); + + /** + * creates phase struct instance. + * @param env pointer to environment struct + * @param phase_name name of the phase to be created + * @return pointer to newly created phase + */ + AXIS2_EXTERN axis2_phase_t *AXIS2_CALL + axis2_phase_create( + const axutil_env_t * env, + const axis2_char_t * phase_name); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_increment_ref( + axis2_phase_t * phase, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_PHASE_H */ diff --git a/include/axis2_phase_holder.h b/include/axis2_phase_holder.h new file mode 100644 index 0000000..d24efae --- /dev/null +++ b/include/axis2_phase_holder.h @@ -0,0 +1,170 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_PHASE_HOLDER_H +#define AXIS2_PHASE_HOLDER_H + +/** + * @defgroup axis2_phase_holder phase holder + * @ingroup axis2_phase_resolver + * phase holder is used by phase resolver to hold information related to + * phases and handlers within a phase. This struct hold the list of phases + * found in the services.xml and axis2.xml. + * @{ + */ + +/** + * @file axis2_phase_holder.h + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_phase_holder */ + typedef struct axis2_phase_holder axis2_phase_holder_t; + + struct axis2_phase; + struct axis2_handler_desc; + struct axis2_handler; + struct axis2_phase_rule; + + /** + * Frees phase holder. + * @param phase_holder pointer to phase holder + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_phase_holder_free( + axis2_phase_holder_t * phase_holder, + const axutil_env_t * env); + + /** + * Checks if the named phase exist. + * @param phase_holder pointer to phase holder + * @param env pointer to environment struct + * @param phase_name phase name string + * @return AXIS2_TRUE if the named phase exist, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_phase_holder_is_phase_exist( + axis2_phase_holder_t * phase_holder, + const axutil_env_t * env, + const axis2_char_t * phase_name); + + /** + * Adds given handler to phase holder. + * @param phase_holder pointer to phase holder + * @param env pointer to environment struct + * @para handler pointer to handler + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_holder_add_handler( + axis2_phase_holder_t * phase_holder, + const axutil_env_t * env, + struct axis2_handler_desc *handler); + + /** + * Removes given handler from phase holder. + * @param phase_holder pointer to phase holder + * @param env pointer to environment struct + * @para handler pointer to handler + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_holder_remove_handler( + axis2_phase_holder_t * phase_holder, + const axutil_env_t * env, + struct axis2_handler_desc *handler); + + /** + * Gets the named phase from phase array list. + * @param phase_holder pointer to phase holder + * @param env pointer to environment struct + * @param phase_name pointer to phase name + * @return pointer to named phase if it exists, else NULL. Returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_phase *AXIS2_CALL + axis2_phase_holder_get_phase( + const axis2_phase_holder_t * phase_holder, + const axutil_env_t * env, + const axis2_char_t * phase_name); + + /** + * Builds the transport phase. This method loads the corresponding handlers and added them into + * correct phase. This function is no longer used in Axis2/C and + * marked as deprecated. + * @deprecated + * @param phase_holder pointer to phase holder + * @param env pointer to environment struct + * @param phase pointer to phase, phase holder does not assume the + * ownership the phase + * @param handlers pointer to array list of handlers, phase holder does + * not assume the ownership of the list + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_holder_build_transport_handler_chain( + axis2_phase_holder_t * phase_holder, + const axutil_env_t * env, + struct axis2_phase *phase, + axutil_array_list_t * handlers); + + /** + * Creates phase holder struct. + * @param env pointer to environment struct + * @return pointer to newly created phase holder + */ + AXIS2_EXTERN axis2_phase_holder_t *AXIS2_CALL + axis2_phase_holder_create( + const axutil_env_t * env); + + /** + * Creates phase holder struct with given list of phases. + * @param env pointer to environment struct + * @param phases pointer to array list of phases + * @return pointer to newly created phase holder + */ + AXIS2_EXTERN axis2_phase_holder_t *AXIS2_CALL + + axis2_phase_holder_create_with_phases( + const axutil_env_t * env, + axutil_array_list_t * phases); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_PHASE_HOLDER_H */ diff --git a/include/axis2_phase_meta.h b/include/axis2_phase_meta.h new file mode 100644 index 0000000..10e5555 --- /dev/null +++ b/include/axis2_phase_meta.h @@ -0,0 +1,89 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_PHASE_META_H +#define AXIS2_PHASE_META_H + +/** + * @defgroup axis2_phase_meta phase meta data + * @ingroup axis2_engine + * @{ + */ + +/** + * @file axis2_conf.h + * @brief Axis2 configuration interface + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Axis2 in flow */ + + /*#define AXIS2_IN_FLOW 1*/ + + /** Axis2 out flow */ + + /*#define AXIS2_OUT_FLOW 2*/ + + /** Axis2 fault in flow */ + + /*#define AXIS2_FAULT_IN_FLOW 3*/ + + /** Axis2 fault out flow */ + + /*#define AXIS2_FAULT_OUT_FLOW 4*/ + + /** phase transport in */ +#define AXIS2_PHASE_TRANSPORT_IN "Transport" + + /** phase pre dispatch */ +#define AXIS2_PHASE_PRE_DISPATCH "PreDispatch" + + /** phase dispatch */ +#define AXIS2_PHASE_DISPATCH "Dispatch" + + /** phase post dispatch */ +#define AXIS2_PHASE_POST_DISPATCH "PostDispatch" + + /** phase policy determination */ +#define AXIS2_PHASE_POLICY_DETERMINATION "PolicyDetermination" + + /** phase message processing */ +#define AXIS2_PHASE_MESSAGE_PROCESSING "MessageProcessing" + + /** phase message out */ +#define AXIS2_PHASE_MESSAGE_OUT "MessageOut" + + /** + * All the handlers inside transport_sender and tranport_recievre in axis2.xml gose + * to this phase + */ +#define AXIS2_TRANSPORT_PHASE "TRANSPORT" + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_PHASE_META_H */ diff --git a/include/axis2_phase_resolver.h b/include/axis2_phase_resolver.h new file mode 100644 index 0000000..e3b1af1 --- /dev/null +++ b/include/axis2_phase_resolver.h @@ -0,0 +1,275 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_PHASE_RESOLVER_H +#define AXIS2_PHASE_RESOLVER_H + +/** + * @defgroup axis2_phase_resolver phase resolver + * @ingroup axis2_phase_resolver + * + * Engaging modules into axis2 configuration, services and operations are done here. + * This is accomplished mainly by following operations respectively. + * axis2_phase_resolver_engage_module_globally(). + * axis2_phase_resolver_engage_module_to_svc(). + * axis2_phase_resolver_engage_module_to_op(). + * The user normally engage a module programmatically or using configuration files. When an + * application client engage a module programmatically he can use axis2_op_client_engage_module() + * function, or axis2_svc_client_engage_module() function. Engaging using configuration files means + * adding a module_ref parameter into services.xml or axis2.xml. + * In whatever way engaging a module finally sums upto addding module handlers into each operations flows + * in the order defined in module.xml. Here flows in operations are actually array lists of user defined + * phases (See op.c). + * + * Above functions in phase resolver add module handlers into operation flows as mentioned above as well + * as add module handlers into system defined phases. User defined phases are added into each operation + * at deployment time before handlers are added into them by phase resolver. System define phases + * are added into axis2_conf_t structure and predefined handlers are added to them before module handlers + * are added to them by phase resolver. + * + * Modules defined in axis2.xml are engaged by call to axis2_conf_engage_module() function. Modules defined in + * services xml are engaged by call to axis2_svc_enage_module() or axis2_svc_grp_engage_module(). Modules + * define in operation tag under services.xml are engaged by call to axis2_op_engage_module() function. + * These function in tern call one of axis2_phase_resolver_engage_module_globally() or + * axis2_phase_resolver_engage_module_to_svc() or axis2_phase_resolver_engage_module_to_op. + * + * Also when you add a service programmaticaly into axis2_conf_t you need to build execution chains for that + * services operations. + * axis2_phase_resolver_build_execution_chains_for_svc() is the function to be called for that purpose. + * This will extract the already engaged modules for the configuration and service and add handlers from + * them into operation phases. + * + * @{ + */ + +/** + * @file axis2_phase_resolver.h + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for axis2_phase_resolver */ + typedef struct axis2_phase_resolver axis2_phase_resolver_t; + + struct axis2_phase; + struct axis2_handler_desc; + struct axis2_module_desc; + struct axis2_handler; + struct axis2_phase_rule; + struct axis2_svc; + struct axis2_conf; + struct axis2_op; + struct axis2_phase_holder; + + /** + * Frees phase resolver. + * @param phase_resolver pointer to phase resolver + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_phase_resolver_free( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env); + + /** + * Engages the given module globally. Engaging a module globally means + * that the given module would be engaged to all operations in all + * services. + * @param phase_resolver pointer to phase resolver + * @param env pointer to environment struct + * @param module pointer to module + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_phase_resolver_engage_module_globally( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + struct axis2_module_desc *module); + + /** + * Engages the given module to the given service. This means + * the given module would be engaged to all operations of the given + * service. + * @param phase_resolver pointer to phase resolver + * @param env pointer to environment struct + * @param svc pointer to service + * @param module_desc pointer to module description + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_phase_resolver_engage_module_to_svc( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + struct axis2_svc *svc, + struct axis2_module_desc *module_desc); + + /** + * Engages the given module to the given operation. + * @param phase_resolver pointer to phase resolver + * @param env pointer to environment struct + * @param axis_op pointer to axis operation + * @param pointer to module description + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_resolver_engage_module_to_op( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + struct axis2_op *axis_op, + struct axis2_module_desc *module_desc); + + /** + * Builds the execution chains for service. Execution chains are collection of phases that are + * invoked in the execution path. Execution chains for system defined phases are created when + * call to engage_module_globally() function. Here it is created for service operations. + * @param phase_resolver pointer to phase resolver + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_resolver_build_execution_chains_for_svc( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env); + + /** + * Builds execution chains for given module operation. + * @param phase_resolver pointer to phase resolver + * @param env pointer to environment struct + * @param op pointer to operation + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_phase_resolver_build_execution_chains_for_module_op( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + struct axis2_op *op); + + /** + * Disengages the given module from the given service. This means + * the given module would be disengaged from all operations of the given + * service. + * @param phase_resolver pointer to phase resolver + * @param env pointer to environment struct + * @param svc pointer to service + * @param module_desc pointer to module description + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_resolver_disengage_module_from_svc( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + struct axis2_svc *svc, + struct axis2_module_desc *module_desc); + + /** + * Disengages the given module from the given operation. + * @param phase_resolver pointer to phase resolver + * @param env pointer to environment struct + * @param axis_op pointer to axis operation + * @param pointer to module description + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_resolver_disengage_module_from_op( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + struct axis2_op *axis_op, + struct axis2_module_desc *module_desc); + + /** + * Builds transport chains. This function is no longer used in Axis2/C and hence + * marked as deprecated. + * @deprecated + * @param phase_resolver pointer to phase resolver + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_resolver_build_transport_chains( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env); + + /** + * Creates phase resolver struct. + * @param env pointer to environment struct + * @return pointer to newly created phase resolver + */ + AXIS2_EXTERN axis2_phase_resolver_t *AXIS2_CALL + + axis2_phase_resolver_create( + const axutil_env_t * env); + + /** + * Creates phase resolver struct with given configuration. + * @param env pointer to environment struct + * @param axis2_config pointer to aixs2 configuration, phase resolver + * created would not assume ownership of configuration + * @return pointer to newly created phase resolver + */ + AXIS2_EXTERN axis2_phase_resolver_t *AXIS2_CALL + + axis2_phase_resolver_create_with_config( + const axutil_env_t * env, + struct axis2_conf *axis2_config); + + /** + * Creates phase resolver struct with given configuration and service. + * @param env pointer to environment struct + * @param aixs2_config pointer to aixs2 configuration, phase resolver + * created would not assume ownership of configuration + * @param svc pointer to service, phase resolver + * created would not assume ownership of service + * @return pointer to newly created phase resolver + */ + AXIS2_EXTERN axis2_phase_resolver_t *AXIS2_CALL + + axis2_phase_resolver_create_with_config_and_svc( + const axutil_env_t * env, + struct axis2_conf *axis2_config, + struct axis2_svc *svc); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_PHASE_RESOLVER_H */ diff --git a/include/axis2_phase_rule.h b/include/axis2_phase_rule.h new file mode 100644 index 0000000..de5b645 --- /dev/null +++ b/include/axis2_phase_rule.h @@ -0,0 +1,216 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_PHASE_RULE_H +#define AXIS2_PHASE_RULE_H + +/** + * @defgroup axis2_phase_rule phase rule + * @ingroup axis2_desc + * phase rule encapsulates data and operations related to phase rules for a + * given handler. phase rule lives within a handler. + * phase rules of a handler specify the relative location of the + * handler within the phase to which it belongs, with respect to other handlers + * in the phase or first and last positions of the handler chain of the phase. + * @{ + */ + +/** + * @file axis2_phase_rule.h + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_phase_rule */ + typedef struct axis2_phase_rule axis2_phase_rule_t; + + /** + * Gets the name of the handler before which the handler associated with + * this rule should be placed. + * @param phase_rule pointer to phase rule + * @param env pointer to environment struct + * @return name of handler before which the handler should be placed + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_phase_rule_get_before( + const axis2_phase_rule_t * phase_rule, + const axutil_env_t * env); + + /** + * Sets the name of the handler before which the handler associated with + * this rule should be placed. + * @param phase_rule pointer to phase rule + * @param env pointer to environment struct + * @param before name of handler before which the handler should be placed + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_rule_set_before( + axis2_phase_rule_t * phase_rule, + const axutil_env_t * env, + const axis2_char_t * before); + + /** + * Gets the name of the handler after which the handler associated with + * this rule should be placed. + * @param phase_rule pointer to phase rule + * @param env pointer to environment struct + * @return name of handler after which the handler should be placed + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_phase_rule_get_after( + const axis2_phase_rule_t * phase_rule, + const axutil_env_t * env); + + /** + * Sets the name of the handler after which the handler associated with + * this rule should be placed. + * @param phase_rule pointer to phase rule + * @param env pointer to environment struct + * @param after name of handler after which the handler should be placed + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_rule_set_after( + axis2_phase_rule_t * phase_rule, + const axutil_env_t * env, + const axis2_char_t * after); + + /** + * Gets name. + * @param phase_rule pointer to phase rule + * @param env pointer to environment struct + * @return name string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_phase_rule_get_name( + const axis2_phase_rule_t * phase_rule, + const axutil_env_t * env); + + /** + * Sets name. + * @param phase_rule pointer to phase rule + * @param env pointer to environment struct + * @param name name string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_rule_set_name( + axis2_phase_rule_t * phase_rule, + const axutil_env_t * env, + const axis2_char_t * name); + + /** + * Checks if the handler is the first in phase. + * @param phase_rule pointer to phase rule + * @param env pointer to environment struct + * @return AXIS2_TRUE if the handler associated with this rule is the + * first in phase, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_phase_rule_is_first( + const axis2_phase_rule_t * phase_rule, + const axutil_env_t * env); + + /** + * Sets handler to be the first in phase. + * @param phase_rule pointer to phase rule + * @param env pointer to environment struct + * @param first AXIS2_TRUE if the handler associated with this rule is the + * first in phase, else AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_rule_set_first( + axis2_phase_rule_t * phase_rule, + const axutil_env_t * env, + axis2_bool_t first); + + /** + * Checks if the handler is the last in phase. + * @param phase_rule pointer to phase rule + * @param env pointer to environment struct + * @return AXIS2_TRUE if the handler associated with this rule is the + * last in phase, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_phase_rule_is_last( + const axis2_phase_rule_t * phase_rule, + const axutil_env_t * env); + + /** + * Sets handler to be the last in phase. + * @param phase_rule pointer to phase rule + * @param env pointer to environment struct + * @param last AXIS2_TRUE if the handler associated with this rule is the + * last in phase, else AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phase_rule_set_last( + axis2_phase_rule_t * phase_rule, + const axutil_env_t * env, + axis2_bool_t last); + + /** + * Frees phase rule. + * @param phase_rule pointer to phase rule + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_phase_rule_free( + axis2_phase_rule_t * phase_rule, + const axutil_env_t * env); + + /** + * Clones phase rule. + * @param phase_rule pointer to phase rule + * @param env pointer to environment struct + * @return pointer to newly cloned phase rule + */ + AXIS2_EXTERN axis2_phase_rule_t *AXIS2_CALL + axis2_phase_rule_clone( + axis2_phase_rule_t * phase_rule, + const axutil_env_t * env); + + /** + * Creates a phase rule struct instance. + * @param env pointer to environment struct + * @param phase_name name of the phase rule + * @return pointer to newly created phase rule + */ + AXIS2_EXTERN axis2_phase_rule_t *AXIS2_CALL + axis2_phase_rule_create( + const axutil_env_t * env, + const axis2_char_t * name); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_PHASE_RULE_H */ diff --git a/include/axis2_phases_info.h b/include/axis2_phases_info.h new file mode 100644 index 0000000..9c1a1f7 --- /dev/null +++ b/include/axis2_phases_info.h @@ -0,0 +1,238 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_PHASES_INFO_H +#define AXIS2_PHASES_INFO_H + +/** @defgroup axis2_phases_info phases information + * @ingroup axis2_deployment + * + * In deployment engine when configuration builder parse phase order elements in axis2.xml, for + * phases defined in a phase order it will create a phase name list and add it to the phases + * info. There are four phase orders. inflow, outflow, in faultflow and out faultflow. + * So configuration builder add array lists for each of this phase orders into the phases info. + * + * At the time of module engagement phase resolver call the functions here to retrieve phase + * lists for each flow for the purpose of adding handlers. When such a request come what each + * function do is, create phase instances list for corresponding phase names stored in the phase name + * list for that flow and return. + * + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_phases_info */ + typedef struct axis2_phases_info axis2_phases_info_t; + + /** Deallocate memory + * @param pahses_info pointer to phases info + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_phases_info_free( + axis2_phases_info_t * phases_info, + const axutil_env_t * env); + + /** + * Set the inflow phase names as an array list. These phases are defined in the inflow phase + * order element defined in axis2.xml. + * + * @param phases_info pointer to phases info + * @param env pointer to environment struct + * @param in_phases inter to in phases + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phases_info_set_in_phases( + axis2_phases_info_t * phases_info, + const axutil_env_t * env, + axutil_array_list_t * in_phases); + + /** + * Set the outflow phase names as an array list. These phases are defined in the outflow phase + * order element defined in axis2.xml. + * + * @param phases_info pointer to phases info + * @param env pointer to environment struct + * @param out_phases pointer to out phases + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phases_info_set_out_phases( + axis2_phases_info_t * phases_info, + const axutil_env_t * env, + axutil_array_list_t * out_phases); + + /** + * Set the INfaultflow phase names as an array list. These phases are defined in the INfaultflow + * phase order element defined in axis2.xml. + * + * @param phases_info pointer to phases info + * @param env pointer to environment struct + * @param in_faultphases pionter to in fault phases + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_phases_info_set_in_faultphases( + axis2_phases_info_t * phases_info, + const axutil_env_t * env, + axutil_array_list_t * in_faultphases); + + /** + * Set the Outfaultflow phase names as an array list. These phases are defined in the + * Outfaultflow phase order element defined in axis2.xml. + * + * @param phases_info pointer to phases info + * @param env pointer to env + * @param out_faultphases pointer to out fault phases + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_phases_info_set_out_faultphases( + axis2_phases_info_t * phases_info, + const axutil_env_t * env, + axutil_array_list_t * out_faultphases); + + /** + * @param phases_info pointer to phases info + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_phases_info_get_in_phases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env); + + /** + * @param phases_info pointer to phases info + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_phases_info_get_out_phases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env); + + /** + * @param phases_info pointer to phases info + * @parma env pointer to environment struct + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_phases_info_get_in_faultphases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env); + + /** + * @param phases_info pointer to phases info + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_phases_info_get_out_faultphases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env); + + /** + * @param phases_info pointer to phases info + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_phases_info_get_op_in_phases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env); + + /** + * @param phases_info pointer to phases info + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_phases_info_get_op_out_phases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env); + + /** + * @param phases_info pointer to phases info + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_phases_info_get_op_in_faultphases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env); + + /** + * @param phases_info pointer to phases info + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_phases_info_get_op_out_faultphases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env); + + /** + * @param phases_info pointer to phases info + * @param env pointer to environment struct + * @param axis2_opt pointer to axis2 opt + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_phases_info_set_op_phases( + axis2_phases_info_t * phases_info, + const axutil_env_t * env, + struct axis2_op *axis2_opt); + + /** create Phases Info struct + * @param env pointer to environment struct + * @return pointer to newly created phases info + */ + AXIS2_EXTERN axis2_phases_info_t *AXIS2_CALL + axis2_phases_info_create( + const axutil_env_t * env); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_phases_info_copy_flow( + const axutil_env_t * env, + const axutil_array_list_t * flow_to_copy); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /*AXIS2_PHASES_INFO_H */ diff --git a/include/axis2_policy_include.h b/include/axis2_policy_include.h new file mode 100644 index 0000000..c088aeb --- /dev/null +++ b/include/axis2_policy_include.h @@ -0,0 +1,215 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_POLICY_INCLUDE_H +#define AXIS2_POLICY_INCLUDE_H + +/** + * @defgroup axis2_policy_include policy include + * @ingroup axis2_desc + * @{ + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_policy_include */ + typedef struct axis2_policy_include axis2_policy_include_t; + + typedef enum axis2_policy_types + { + AXIS2_POLICY = 0, + AXIS2_MODULE_POLICY, + AXIS2_SERVICE_POLICY, + AXIS2_OPERATION_POLICY, + AXIS2_MESSAGE_POLICY, + AXIS2_PORT_POLICY, + AXIS2_PORT_TYPE_POLICY, + AXIS2_BINDING_POLICY, + AXIS2_BINDING_OPERATION_POLICY, + AXIS2_INPUT_POLICY, + AXIS2_OUTPUT_POLICY, + AXIS2_BINDING_INPUT_POLICY, + AXIS2_BINDING_OUTPUT_POLICY, + AXIS2_MODULE_OPERATION_POLICY, + AXIS2_POLICY_REF, + AXIS2_ANON_POLICY + } axis2_policy_types; + + /** + * Creates policy include struct. + * @param env pointer to environment struct + * @return pointer to newly created policy include + */ + AXIS2_EXTERN axis2_policy_include_t *AXIS2_CALL + + axis2_policy_include_create( + const axutil_env_t * env); + + AXIS2_EXTERN axis2_policy_include_t *AXIS2_CALL + + axis2_policy_include_create_with_desc( + const axutil_env_t * env, + axis2_desc_t * desc); + + /** + * Frees policy include. + * @param policy_include pointer to policy include + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_policy_include_free( + axis2_policy_include_t * policy_include, + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + axis2_policy_include_free( + axis2_policy_include_t * policy_include, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_policy_include_set_registry( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + neethi_registry_t * registry); + + AXIS2_EXTERN neethi_registry_t *AXIS2_CALL + + axis2_policy_include_get_registry( + axis2_policy_include_t * policy_include, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_policy_include_set_policy( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + neethi_policy_t * policy); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_policy_include_update_policy( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + neethi_policy_t * policy); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_policy_include_set_effective_policy( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + neethi_policy_t * effective_policy); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_policy_include_set_desc( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + axis2_desc_t * desc); + + AXIS2_EXTERN axis2_desc_t *AXIS2_CALL + axis2_policy_include_get_desc( + axis2_policy_include_t * policy_include, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_policy_include_t *AXIS2_CALL + + axis2_policy_include_get_parent( + axis2_policy_include_t * policy_include, + const axutil_env_t * env); + + AXIS2_EXTERN neethi_policy_t *AXIS2_CALL + axis2_policy_include_get_policy( + axis2_policy_include_t * policy_include, + const axutil_env_t * env); + + AXIS2_EXTERN neethi_policy_t *AXIS2_CALL + + axis2_policy_include_get_effective_policy( + axis2_policy_include_t * policy_include, + const axutil_env_t * env); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_policy_include_get_policy_elements( + axis2_policy_include_t * policy_include, + const axutil_env_t * env); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_policy_include_get_policy_elements_with_type( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + int type); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_policy_include_register_policy( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + axis2_char_t * key, + neethi_policy_t * effective_policy); + + AXIS2_EXTERN neethi_policy_t *AXIS2_CALL + + axis2_policy_include_get_policy_with_key( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + axis2_char_t * key); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_policy_include_add_policy_element( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + int type, + neethi_policy_t * policy); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_policy_include_add_policy_reference_element( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + int type, + neethi_reference_t * reference); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_policy_include_remove_policy_element( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + axis2_char_t * policy_uri); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_policy_include_remove_all_policy_element( + axis2_policy_include_t * policy_include, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_POLICY_INCLUDE_H */ diff --git a/include/axis2_raw_xml_in_out_msg_recv.h b/include/axis2_raw_xml_in_out_msg_recv.h new file mode 100644 index 0000000..8ffe9bb --- /dev/null +++ b/include/axis2_raw_xml_in_out_msg_recv.h @@ -0,0 +1,59 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_RAW_XML_IN_OUT_MSG_RECV_H +#define AXIS2_RAW_XML_IN_OUT_MSG_RECV_H + +/** @defgroup axis2_raw_xml_in_out_msg_recv raw XML in-out message receiver + * @ingroup axis2_receivers + * @{ + */ + +/** + * @file axis2_ws_info.h + * @brief Axis2 Raw Xml In Out Message Receiver interface + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * Creates raw xml in out message receiver struct + * @return pointer to newly created raw xml in out message receiver + */ + AXIS2_EXTERN axis2_msg_recv_t *AXIS2_CALL + + axis2_raw_xml_in_out_msg_recv_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_RAW_XML_IN_OUT_MSG_RECV_H */ diff --git a/include/axis2_relates_to.h b/include/axis2_relates_to.h new file mode 100644 index 0000000..5775545 --- /dev/null +++ b/include/axis2_relates_to.h @@ -0,0 +1,129 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_RELATES_TO_H +#define AXIS2_RELATES_TO_H + +/** + * @defgroup axis2_relates_to relates to + * @ingroup axis2_addr + * relates to encapsulates data that indicate how a message relates to + * another message. + * The related message is identified by a URI that corresponds to the + * related message's message ID. The type of the relationship is also captured + * by relates to. Basically relates to handles the following WS-Addressing + * header xs:anyURI + * @{ + */ + +/** + * @file axis2_relates_to.h + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_relates_to */ + typedef struct axis2_relates_to axis2_relates_to_t; + + /** + * creates relates to struct. + * @param env pointer to environment struct + * @param value value string + * @param relationship_type relationship type string + */ + AXIS2_EXTERN axis2_relates_to_t *AXIS2_CALL + axis2_relates_to_create( + const axutil_env_t * env, + const axis2_char_t * value, + const axis2_char_t * relationship_type); + + /** + * Gets value. The value field represents the URI that corresponds to the + * related message's message ID + * @param relates_to pointer to relates to struct + * @param env pointer to environment struct + * @return value string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_relates_to_get_value( + const axis2_relates_to_t * relates_to, + const axutil_env_t * env); + + /** + * Sets value. The value field represents the URI that corresponds to the + * related message's message ID + * @param relates_to pointer to relates to struct + * @param env pointer to environment struct + * @param value value string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_relates_to_set_value( + struct axis2_relates_to *relates_to, + const axutil_env_t * env, + const axis2_char_t * value); + + /** + * Gets relationship type. + * @param relates_to pointer to relates to struct + * @param env pointer to environment struct + * @return relationship type string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_relates_to_get_relationship_type( + const axis2_relates_to_t * relates_to, + const axutil_env_t * env); + + /** + * Sets relationship type. + * @param relates_to pointer to relates to struct + * @param env pointer to environment struct + * @param relationship_type relationship type string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_relates_to_set_relationship_type( + struct axis2_relates_to *relates_to, + const axutil_env_t * env, + const axis2_char_t * relationship_type); + + /** + * Frees relates to struct. + * @param relates_to pointer to relates to struct + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_relates_to_free( + struct axis2_relates_to *relates_to, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_RELATES_TO_H */ diff --git a/include/axis2_simple_http_svr_conn.h b/include/axis2_simple_http_svr_conn.h new file mode 100644 index 0000000..37b9979 --- /dev/null +++ b/include/axis2_simple_http_svr_conn.h @@ -0,0 +1,204 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_SIMPLE_HTTP_SVR_CONN_H +#define AXIS2_SIMPLE_HTTP_SVR_CONN_H + +/** + * @ingroup axis2_core_transport_http + * @{ + */ + +/** + * @file axis2_simple_http_svr_conn.h + * @brief Axis2 simple http server connection + */ + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axis2_simple_http_svr_conn axis2_simple_http_svr_conn_t; + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_simple_http_svr_conn_close( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_simple_http_svr_conn_is_open( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + * @param keep_alive + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_simple_http_svr_conn_set_keep_alive( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env, + axis2_bool_t keep_alive); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axis2_simple_http_svr_conn_is_keep_alive( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_stream_t *AXIS2_CALL + + axis2_simple_http_svr_conn_get_stream( + const axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_http_response_writer_t *AXIS2_CALL + + axis2_simple_http_svr_conn_get_writer( + const axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_http_simple_request_t *AXIS2_CALL + axis2_simple_http_svr_conn_read_request( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + * @param response response + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_simple_http_svr_conn_write_response( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env, + axis2_http_simple_response_t * response); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + * @param timeout timeout + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_simple_http_svr_conn_set_rcv_timeout( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env, + int timeout); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + * @param timeout timeout + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_simple_http_svr_conn_set_snd_timeout( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env, + int timeout); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_simple_http_svr_conn_get_svr_ip( + const axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_simple_http_svr_conn_get_peer_ip( + const axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env); + + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_simple_http_svr_conn_free( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * creates axis2_simple_http_svr_conn struct + * @param env pointer to environment struct + * @param sockfd sockfd + */ + AXIS2_EXTERN axis2_simple_http_svr_conn_t *AXIS2_CALL + + axis2_simple_http_svr_conn_create( + const axutil_env_t * env, + int sockfd); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_SIMPLE_HTTP_SVR_CONN_H */ diff --git a/include/axis2_stub.h b/include/axis2_stub.h new file mode 100644 index 0000000..0d502ca --- /dev/null +++ b/include/axis2_stub.h @@ -0,0 +1,200 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_STUB_H +#define AXIS2_STUB_H + +/** @defgroup axis2_stub stub + * @ingroup axis2_client_api + * stub is a wrapper API for service client that helps users to use client API + * easily. + * @sa axis2_svc_client + * @{ + */ + +/** + * @file axis2_stub.h + */ + +#include +#include +#include +#include +#include + +/** DEPRECATED: Please use AXIOM_SOAP11 instead. + Constant value representing SOAP version 1.1 */ +#define AXIOM_SOAP_11 1 + +/** DEPRECATED: Please use AXIOM_SOAP12 instead. + Constant value representing SOAP version 1.2 */ +#define AXIOM_SOAP_12 2 + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_stub */ + typedef struct axis2_stub axis2_stub_t; + + /** + * Frees stub struct. + * @param stub pointer to stub struct + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_stub_free( + axis2_stub_t * stub, + const axutil_env_t * env); + + /** + * Sets the endpoint reference. + * @param stub pointer to stub struct + * @param env pointer to environment struct + * @param endpoint_ref pointer to endpoint reference. stub assumes the + * ownership of the endpoint reference struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_stub_set_endpoint_ref( + axis2_stub_t * stub, + const axutil_env_t * env, + axis2_endpoint_ref_t * endpoint_ref); + + /** + * Sets the endpoint reference, represented by a string. + * @param stub pointer to stub struct + * @param env pointer to environment struct + * @param endpoint_uri pointer to endpoint uri string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_stub_set_endpoint_uri( + axis2_stub_t * stub, + const axutil_env_t * env, + const axis2_char_t * endpoint_uri); + + /** + * Sets the bool value specifying whether to use a separate listener + * for receive channel. + * @param stub pointer to stub struct + * @param env pointer to environment struct + * @param use_separate whether to use a separate listener + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_stub_set_use_separate_listener( + axis2_stub_t * stub, + const axutil_env_t * env, + const axis2_bool_t use_separate_listener); + + /** + * Sets the SOAP version. + * @param stub pointer to stub struct + * @param env pointer to environment struct + * @param soap_version int value representing the SOAP version + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_stub_set_soap_version( + axis2_stub_t * stub, + const axutil_env_t * env, + const int soap_version); + + /** + * Gets the service context ID. + * @param stub pointer to stub struct + * @param env pointer to environment struct + * @return service context ID if set, else NULL + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_stub_get_svc_ctx_id( + const axis2_stub_t * stub, + const axutil_env_t * env); + + /** + * Engages the named module. + * @param stub pointer to stub struct + * @param env pointer to environment struct + * @param module_name string representing the name of the module + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_stub_engage_module( + axis2_stub_t * stub, + const axutil_env_t * env, + const axis2_char_t * module_name); + + /** + * Gets the service client instance used by this stub. + * @param stub pointer to stub struct + * @param env pointer to environment struct + * @return pointer to service client struct used by the stub + */ + AXIS2_EXTERN axis2_svc_client_t *AXIS2_CALL + axis2_stub_get_svc_client( + const axis2_stub_t * stub, + const axutil_env_t * env); + + /** + * Gets the options used on top of the service client used by this stub. + * @param stub pointer to stub struct + * @param env pointer to environment struct + * @return pointer to options used by the service client of this stub + */ + AXIS2_EXTERN axis2_options_t *AXIS2_CALL + axis2_stub_get_options( + const axis2_stub_t * stub, + const axutil_env_t * env); + + /** + * Creates a stub instance. + * @param env pointer to environment struct + * @param endpoint_ref pointer to endpoint reference struct representing the + * stub endpoint. Newly created stub assumes ownership of the endpoint + * @param client_home name of the directory that contains the Axis2/C repository + * @return pointer to newly created axis2_stub struct + */ + AXIS2_EXTERN axis2_stub_t *AXIS2_CALL + axis2_stub_create_with_endpoint_ref_and_client_home( + const axutil_env_t * env, + axis2_endpoint_ref_t * endpoint_ref, + const axis2_char_t * client_home); + + /** + * Creates a stub instance. + * @param env pointer to environment struct + * @param endpoint_uri string representing the endpoint reference + * @param client_home name of the directory that contains the Axis2/C repository + * @return pointer to newly created axis2_stub struct + */ + AXIS2_EXTERN axis2_stub_t *AXIS2_CALL + axis2_stub_create_with_endpoint_uri_and_client_home( + const axutil_env_t * env, + const axis2_char_t * endpoint_uri, + const axis2_char_t * client_home); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_STUB_H */ diff --git a/include/axis2_svc.h b/include/axis2_svc.h new file mode 100644 index 0000000..c710587 --- /dev/null +++ b/include/axis2_svc.h @@ -0,0 +1,1236 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_SVC_H +#define AXIS2_SVC_H + +/** @defgroup axis2_svc service + * @ingroup axis2_desc + * service represents the static structure of a service in a service group. + * In Axis2 description hierarchy, a service lives inside the service group to + * which it belongs. + * services are configured in services.xml files located in the respective + * service group folders of the services folder in the repository. + * In services.xml file, services are declared in association with a given + * service group or at top level as a stand alone service. In cases where a + * service is configured without an associated service group, a service group + * with the same name as that of the service would be created by the deployment + * engine and the service would be associated with that newly created service + * group. The deployment engine would create service instances to represent + * those configured services in services.xml files and would associate them with + * the respective service group in the configuration. + * service encapsulates data on engaged module information, the XML schema + * defined in WSDL that is associated with the service and the operations of + * the service. + * @{ + */ + +/** + * @file axis2_svc.h + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_svc */ + typedef struct axis2_svc axis2_svc_t; + + struct axis2_svc_grp; + struct axis2_flow_container; + struct axutil_param_container; + struct axis2_module_desc; + struct axis2_conf; + + /** + * Frees service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_svc_free( + axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Adds operation. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param op pointer to operation struct, service assumes ownership of + * operation + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_add_op( + axis2_svc_t * svc, + const axutil_env_t * env, + struct axis2_op *op); + + /** + * Gets operation corresponding to the given QName. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param op_qname pointer to QName representing operation QName + * @return pointer to operation corresponding to given QName + */ + AXIS2_EXTERN struct axis2_op *AXIS2_CALL + axis2_svc_get_op_with_qname( + const axis2_svc_t * svc, + const axutil_env_t * env, + const axutil_qname_t * op_qname); + + /** + * Gets the RESTful operation list corresponding to the given method + * and first constant part of location. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param http_method HTTPMethod + * @param http_location HTTPLocation + * @return pointer to operation corresponding to given method and + * location + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_svc_get_rest_op_list_with_method_and_location( + const axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * http_method, + const axis2_char_t * http_location); + + + /** + * Gets the RESTful operation map for a given service + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to hash with the information + * (method, url)=> processing structure for each ops + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_svc_get_rest_map( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Gets operation corresponding to the name. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param op_name operation name string + * @return pointer to operation corresponding to given name + */ + AXIS2_EXTERN struct axis2_op *AXIS2_CALL + axis2_svc_get_op_with_name( + const axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * op_name); + + /** + * Gets all operations of service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to hash map containing all operations of the service + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_svc_get_all_ops( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Sets parent which is of type service group. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param svc_grp pointer to parent service group + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_set_parent( + axis2_svc_t * svc, + const axutil_env_t * env, + struct axis2_svc_grp *svc_grp); + + /** + * Gets parent which is of type service group. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to parent service group + */ + AXIS2_EXTERN struct axis2_svc_grp *AXIS2_CALL + axis2_svc_get_parent( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Sets QName. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param qname pointer to QName + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_set_qname( + axis2_svc_t * svc, + const axutil_env_t * env, + const axutil_qname_t * qname); + + /** + * Gets QName. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to QName + */ + AXIS2_EXTERN const axutil_qname_t *AXIS2_CALL + axis2_svc_get_qname( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Adds given parameter to operation. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param param pointer to parameter, service assumes ownership of + * parameter + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_add_param( + axis2_svc_t * svc, + const axutil_env_t * env, + axutil_param_t * param); + + /** + * Gets named parameter. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param name name string + * @return pointer to named parameter if exists, else NULL. Returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + axis2_svc_get_param( + const axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * name); + + /** + * Remove a parameter. + * @param svc pointer to service struct + * @param env pointer to the environment + * @Param param_name parameter name to be removed + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_remove_param( + const axis2_svc_t *svc, + const axutil_env_t *env, + const axis2_char_t *param_name); + + /** + * Gets all parameters stored within service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to array list of parameters, returns a reference, + * not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_svc_get_all_params( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Checks if the named parameter is locked. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param param_name parameter name + * @return AXIS2_TRUE if the named parameter is locked, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_svc_is_param_locked( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * param_name); + + /** + * Engages given module to service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param module_desc pointer to module description to be engaged, + * service does not assume the ownership of module + * @param conf pointer to configuration, it is configuration that holds + * module information + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_engage_module( + axis2_svc_t * svc, + const axutil_env_t * env, + struct axis2_module_desc *module_desc, + struct axis2_conf *conf); + + /** + * Disengages given module from service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param module_desc pointer to module description to be engaged, + * service does not assume the ownership of module + * @param conf pointer to configuration, it is configuration that holds + * module information + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_disengage_module( + axis2_svc_t * svc, + const axutil_env_t * env, + struct axis2_module_desc *module_desc, + struct axis2_conf *conf); + + /** + * Check whether a given module is engaged to the service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param module_qname pointer to module qname to be engaged, + * @return AXIS2_TRUE if module is engaged, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_svc_is_module_engaged( + axis2_svc_t * svc, + const axutil_env_t * env, + axutil_qname_t * module_qname); + + /** + * Return the engaged module list. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return engaged module list + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_svc_get_engaged_module_list( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Adds operations defined in a module to this service. It is possible + * to define operations that are associated to a module in a module.xml + * file. These operations in turn could be invoked in relation to a + * service. This method allows those module related operation to be + * added to a service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param module_desc pointer to module description containing module + * related operation information. service does not assume the ownership + * of module description + * @param conf pointer to configuration, it is configuration that stores + * the modules + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_add_module_ops( + axis2_svc_t * svc, + const axutil_env_t * env, + struct axis2_module_desc *module_desc, + struct axis2_conf *axis2_config); + + /** + * Adds given module description to engaged module list. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param module_desc pointer to module description, service does not + * assume the ownership of module description + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /*AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_add_to_engaged_module_list(axis2_svc_t *svc, + const axutil_env_t *env, + struct axis2_module_desc *module_desc); */ + + /** + * Gets all engaged modules. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to array list containing all engaged modules + */ + /*AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_svc_get_all_engaged_modules(const axis2_svc_t *svc, + const axutil_env_t *env); */ + + /** + * Sets style. Style can be either RPC or document literal. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param style style of service as defined in WSDL + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_set_style( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * style); + + /** + * Gets style. Style can be either RPC or document literal. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return string representing the style of service + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_svc_get_style( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Gets in flow. In flow is the list of phases invoked + * along in path. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to flow representing in flow + */ + /*AXIS2_EXTERN struct axis2_flow *AXIS2_CALL + + axis2_svc_get_in_flow(const axis2_svc_t *svc, + const axutil_env_t *env); */ + + /** + * Sets in flow. In flow is the list of phases invoked + * along in path. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param in_flow pointer to flow representing in flow + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /*AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_set_in_flow(axis2_svc_t *svc, + const axutil_env_t *env, + struct axis2_flow *in_flow); */ + + /** + * Gets out flow. Out flow is the list of phases invoked + * along out path. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to flow representing out flow + */ + /*AXIS2_EXTERN struct axis2_flow *AXIS2_CALL + + axis2_svc_get_out_flow( + const axis2_svc_t *svc, + const axutil_env_t *env); */ + + /** + * Sets out flow. Out flow is the list of phases invoked + * along out path. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return out_flow pointer to flow representing out flow + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /*AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_set_out_flow( + axis2_svc_t *svc, + const axutil_env_t *env, + struct axis2_flow *out_flow); */ + + /** + * Gets fault in flow. Fault in flow is the list of phases invoked + * along in path if a fault happens. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to flow representing fault in flow + */ + /*AXIS2_EXTERN struct axis2_flow *AXIS2_CALL + + axis2_svc_get_fault_in_flow( + const axis2_svc_t *svc, + const axutil_env_t *env); */ + + /** + * Sets fault in flow. Fault in flow is the list of phases invoked + * along in path if a fault happens. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param fault_flow pointer to flow representing fault in flow + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /*AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_set_fault_in_flow( + axis2_svc_t *svc, + const axutil_env_t *env, + struct axis2_flow *fault_flow); */ + + /** + * Gets fault out flow. Fault out flow is the list of phases invoked + * along out path if a fault happens. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to flow representing fault out flow + */ + /*AXIS2_EXTERN struct axis2_flow *AXIS2_CALL + + axis2_svc_get_fault_out_flow( + const axis2_svc_t *svc, + const axutil_env_t *env); */ + + /** + * Sets fault out flow. Fault out flow is the list of phases invoked + * along out path if a fault happens. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param fault_flow pointer to flow representing fault out flow + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /*AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_set_fault_out_flow( + axis2_svc_t *svc, + const axutil_env_t *env, + struct axis2_flow *fault_flow); */ + + /** + * Gets operation corresponding to given SOAP Action. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param soap_action SOAP action string + * @return pointer to operation corresponding to given SOAP action if + * one exists, else NULL. Returns a reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_op *AXIS2_CALL + axis2_svc_get_op_by_soap_action( + const axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * soap_action); + + /** + * Gets operation corresponding to given SOAP Action and endpoint QName. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param soap_action SOAP action string + * @param endpoint pointer QName representing endpoint URI + * @return pointer operation corresponding to given SOAP Action and + * endpoint QName. + */ + /*AXIS2_EXTERN struct axis2_op *AXIS2_CALL + + axis2_svc_get_op_by_soap_action_and_endpoint( + const axis2_svc_t *svc, + const axutil_env_t *env, + const axis2_char_t *soap_action, + const axutil_qname_t *endpoint); */ + + /** + * Gets service name. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return service name string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_svc_get_name( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Sets service name. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param svc_name service name string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_set_name( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * svc_name); + + /** + * Sets current time as last update time of the service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_set_last_update( + axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Gets last update time of the service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return last updated time in seconds + */ + AXIS2_EXTERN long AXIS2_CALL + axis2_svc_get_last_update( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Get the description of the services, which is in the + * service.xml, tag + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return services description string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_svc_get_svc_desc( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Set the description of the service which is in service.xml + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_set_svc_desc( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * svc_desc); + + /** + * Get the static wsdl file of the services, which is in the + * service.xml, wsdl_path parameter + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return static wsdl file location + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_svc_get_svc_wsdl_path( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Set the wsdl path of the service which is in service.xml + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_set_svc_wsdl_path( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * wsdl_path); + + /** + * Get the folder path on disk of the services, which is in the + * service.xml + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return folder path on disk + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_svc_get_svc_folder_path( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Set the folder path of the service which is in service.xml + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_set_svc_folder_path( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * folder_path); + + /** + * Gets the name of the file that holds the implementation of the + * service. service implementation is compiled into shared libraries + * and is placed in the respective sub folder in the services folder + * of Axis2 repository. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return file name string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_svc_get_file_name( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Sets the name of the file that holds the implementation of the + * service. service implementation is compiled into shared libraries + * and is placed in the respective sub folder in the services folder + * of Axis2 repository. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param file_name file name string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_set_file_name( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * file_name); + + /** + * Gets all endpoints associated with the service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to hash map containing all endpoints + */ + /*AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + + axis2_svc_get_all_endpoints( + const axis2_svc_t *svc, + const axutil_env_t *env); */ + + /** + * Sets the list of endpoints associated with the service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param endpoints pointer to hash map containing all endpoints + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /*AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_set_all_endpoints( + axis2_svc_t *svc, + const axutil_env_t *env, + axutil_hash_t *endpoints); */ + + /** + * Gets namespace. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return namespace URI string + */ + /*AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + + axis2_svc_get_namespace( + const axis2_svc_t *svc, + const axutil_env_t *env); + */ + + /** + * Adds WS-Addressing mapping for a given operation. The services.xml + * configuration file could specify a SOAP action that would map to + * one of the service operations. This method could be used to register + * that mapping against operations. WS-Addressing based dispatcher + * makes use of this mapping to identify the operation to be invoked, + * given WSA action. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param wsa_action WSA action string + * @param op pointer to operation that maps to the given WSA action + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_add_mapping( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * wsa_action, + struct axis2_op *axis2_op); + + /** + * Adds a REST mapping for a given RESTful operation. The services.xml + * configuration file could specify a HTTP Method and Location that would + * map to one of the service operations. This method could be used to register + * that mapping against operations. The REST based dispatcher makes use + * of this mapping to identify the operation to be invoked, given the URL. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param method REST HTTP Method + * @param location REST HTTP Location + * @param op pointer to operation that maps to the given WSA action + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_add_rest_mapping( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * method, + const axis2_char_t * location, + struct axis2_op *axis2_op); + + /** + * Adds a module qname to list of module QNames associated with service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param module_qname pointer to QName to be added, this method clones + * the QName + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_add_module_qname( + axis2_svc_t * svc, + const axutil_env_t * env, + const axutil_qname_t * module_qname); + + /** + * Gets all module QNames associated with the service as a list. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to array list containing QNames + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_svc_get_all_module_qnames( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Checks if the XML schema location is adjusted. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return AXIS2_TRUE if XML schema is adjusted, else AXIS2_FALSE + */ + /*AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axis2_svc_is_schema_location_adjusted( + axis2_svc_t *svc, + const axutil_env_t *env); + */ + + /** + * Sets the bool value indicating if the XML schema location is adjusted. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param adjusted AXIS2_TRUE if XML schema is adjusted, else AXIS2_FALSE + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /* + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_set_schema_location_adjusted( + axis2_svc_t *svc, + const axutil_env_t *env, + const axis2_bool_t adjusted); */ + + /** + * Gets XML schema mapping table for service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to hash map with XML schema mappings, returns a + * reference, not a cloned copy + */ + /* + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + + axis2_svc_axis2_svc_get_schema_mapping_table( + const axis2_svc_t *svc, + const axutil_env_t *env); */ + + /** + * Sets XML schema mapping table for service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param table pointer to hash map with XML schema mappings, service + * assumes ownership of the map + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /* + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_set_schema_mapping_table( + axis2_svc_t *svc, + const axutil_env_t *env, + axutil_hash_t *table); */ + + /** + * Gets custom schema prefix. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return custom schema prefix string + */ + /* + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + + axis2_svc_get_custom_schema_prefix( + const axis2_svc_t *svc, + const axutil_env_t *env); */ + + /** + * Sets custom schema prefix. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param prefix custom schema prefix string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /* + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_set_custom_schema_prefix( + axis2_svc_t *svc, + const axutil_env_t *env, + const axis2_char_t *prefix); */ + + /** + * Gets custom schema suffix. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return custom schema suffix string + */ + /* + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + + axis2_svc_get_custom_schema_suffix( + const axis2_svc_t *svc, + const axutil_env_t *env); */ + + /** + * Sets custom schema suffix. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param suffix custom schema suffix string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /* + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_set_custom_schema_suffix( + axis2_svc_t *svc, + const axutil_env_t *env, + const axis2_char_t *suffix); */ + + /** + * Prints the schema to given stream. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param out_stream stream to print to + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /* + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_print_schema( + axis2_svc_t *svc, + const axutil_env_t *env, + axutil_stream_t *out_stream); */ + + /** + * Gets the XML schema at the given index of XML schema array list. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param index index of the XML schema to be retrieved + * @return pointer to XML schema, returns a reference, not a cloned copy + */ + /*AXIS2_EXTERN xml_schema_t *AXIS2_CALL + + axis2_svc_get_schema( + const axis2_svc_t *svc, + const axutil_env_t *env, + const int index); */ + + /** + * Adds all namespaces in the namespace map to the XML schema at + * the given index of the XML schema array list. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param index index of the XML schema to be processed + * @return pointer to XML schema with namespaces added, + * returns a reference, not a cloned copy + */ + + /* AXIS2_EXTERN xml_schema_t *AXIS2_CALL + + axis2_svc_add_all_namespaces( + axis2_svc_t *svc, + const axutil_env_t *env, + int index);*/ + + /** + * Gets the list of XML schemas associated with service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to array list of XML schemas, returns a reference, + * not a cloned copy + */ + /* + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_svc_get_all_schemas( + const axis2_svc_t *svc, + const axutil_env_t *env); */ + + /** + * Adds the given XML schema to the list of XML schemas associated + * with the service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param schema pointer to XML schema struct, service assumes the + * ownership of struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /* + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_add_schema( + axis2_svc_t *svc, + const axutil_env_t *env, + xml_schema_t *schema); */ + + /** + * Adds the list of all XML schemas to service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param schemas pointer to array list containing XML schemas + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /* + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_add_all_schemas( + axis2_svc_t *svc, + const axutil_env_t *env, + axutil_array_list_t *schemas); */ + + /** + * Gets XML schema's target namespace. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return XML schema target namespace string + */ + /* + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + + axis2_svc_get_schema_target_ns( + const axis2_svc_t *svc, + const axutil_env_t *env); */ + + /** + * Sets XML schema's target namespace. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param ns namespace string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /* + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_set_schema_target_ns( + axis2_svc_t *svc, + const axutil_env_t *env, + const axis2_char_t *ns); */ + + /** + * Gets XML schema's target namespace prefix. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return XML schema target namespace prefix string + */ + /* + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + + axis2_svc_get_schema_target_ns_prefix( + const axis2_svc_t *svc, + const axutil_env_t *env); */ + + /** + * Sets XML schema's target namespace prefix. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param prefix namespace prefix string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /* + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_set_schema_target_ns_prefix( + axis2_svc_t *svc, + const axutil_env_t *env, + const axis2_char_t *prefix); */ + + /** + * Gets target namespace. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return target namespace as a string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_svc_get_target_ns( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Sets target namespace. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param ns target namespace as a string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + saxis2_svc_et_target_ns( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * ns); + + /** + * Gets target namespace prefix. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return target namespace prefix string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + + axis2_svc_get_target_ns_prefix( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Sets target namespace prefix. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param prefix target namespace prefix string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_set_target_ns_prefix( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * prefix); + + /** + * Gets XML schemas element corresponding to the given QName. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param qname QName of the XML schema element to be retrieved + * @return pointer to XML schema element, returns a reference, not a + * cloned copy + */ + /*AXIS2_EXTERN xml_schema_element_t *AXIS2_CALL + + axis2_svc_get_schema_element( + const axis2_svc_t *svc, + const axutil_env_t *env, + const axutil_qname_t *qname); */ + + /** + * Gets the namespace map with all namespaces related to service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return pointer to hash map containing all namespaces, returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + gaxis2_svc_et_ns_map( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Sets the namespace map with all namespaces related to service. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @param ns_map pointer to hash map containing all namespaces + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_set_ns_map( + axis2_svc_t * svc, + const axutil_env_t * env, + axutil_hash_t * ns_map); + + /** + * Populates the schema mappings. This method is used in code generation + * and WSDL generation (WSDL2C and C2WSDL). This method deals with the + * imported schemas that would be there in the WSDL. + * @param svc pointer to service struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + /*AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_populate_schema_mappings( + axis2_svc_t *svc, + const axutil_env_t *env); */ + + AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL + + axis2_svc_get_param_container( + const axis2_svc_t * svc, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_flow_container_t *AXIS2_CALL + + axis2_svc_get_flow_container( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /** + * Creates a service struct instance. + * @param env pointer to environment struct + * @return pointer to newly created service + */ + AXIS2_EXTERN axis2_svc_t *AXIS2_CALL + axis2_svc_create( + const axutil_env_t * env); + + /** + * Creates a service struct with given QName. + * @param env pointer to environment struct + * @param qname service QName + * @return pointer to newly created service + */ + AXIS2_EXTERN axis2_svc_t *AXIS2_CALL + axis2_svc_create_with_qname( + const axutil_env_t * env, + const axutil_qname_t * qname); + + AXIS2_EXTERN void *AXIS2_CALL + axis2_svc_get_impl_class( + const axis2_svc_t * svc, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_set_impl_class( + axis2_svc_t * svc, + const axutil_env_t * env, + void *impl_class); + + /** + * Gets base description. + * @param svc pointer to message + * @param env pointer to environment struct + * @return pointer to base description struct + */ + AXIS2_EXTERN axis2_desc_t *AXIS2_CALL + axis2_svc_get_base( + const axis2_svc_t * svc, + const axutil_env_t * env); + + /* Get the mutex associated with this service + * @param svc pointer to message + * @param env pointer to environment struct + * @return pointer to a axutil_thread_mutext_t + */ + AXIS2_EXTERN axutil_thread_mutex_t * AXIS2_CALL + axis2_svc_get_mutex( + const axis2_svc_t * svc, + const axutil_env_t * env); + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_SVC_H */ diff --git a/include/axis2_svc_client.h b/include/axis2_svc_client.h new file mode 100644 index 0000000..eb13c66 --- /dev/null +++ b/include/axis2_svc_client.h @@ -0,0 +1,642 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_SVC_CLIENT_H +#define AXIS2_SVC_CLIENT_H + +/** + * @defgroup axis2_svc_client service client + * @ingroup axis2_client_api + * The service client interface serves as the primary client + * interface for consuming services. You can set the options to be + * used by the service client and then invoke an operation on a given + * service. There are several ways of invoking a service operation, + * which are based on the concept of a message exchange pattern + * (MEP). The two basic MEPs supported by service client are out-only + * and out-in. Each MEP can be used in either blocking or + * non-blocking mode. The operation invocations using the service + * client API are based on the XML-in/XML-out principle: both the + * payload to be sent to the service and the result from the service + * are in XML, represented in AXIOM. + * @{ + */ + +/** + * @file axis2_svc_client.h + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_svc_client */ + typedef struct axis2_svc_client axis2_svc_client_t; + + /** + * Returns the axis2_svc_t this is a client for. This is primarily + * useful when the service is created anonymously or from WSDL. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @return a pointer to axis service struct, or NULL if no service + * is associated. Returns a reference, not a cloned copy. + */ + AXIS2_EXTERN axis2_svc_t *AXIS2_CALL + axis2_svc_client_get_svc( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Returns the axis2_conf_ctx_t. This is useful when creating service clients using + * the same configuration context as the original service client. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @return a pointer to axis configuration context struct, or NULL. + * Returns a reference, not a cloned copy. + */ + AXIS2_EXTERN axis2_conf_ctx_t *AXIS2_CALL + axis2_svc_client_get_conf_ctx( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Sets the options to be used by service client. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param options pointer to options struct to be set + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_set_options( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axis2_options_t * options); + + /** + * Gets options used by service client. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @return a pointer to the options struct if options set, else NULL. + * Returns a reference, not a cloned copy. + */ + AXIS2_EXTERN const axis2_options_t *AXIS2_CALL + axis2_svc_client_get_options( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Sets the overriding options. The overriding client options related + * to this service interaction override any options that the + * underlying operation client may have. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param options pointer to options struct to be set + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_set_override_options( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axis2_options_t * override_options); + + /** + * Gets the overriding options. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @return pointer to overriding options struct if options set, else NULL. + * Returns a reference, not a cloned copy. + */ + AXIS2_EXTERN const axis2_options_t *AXIS2_CALL + axis2_svc_client_get_override_options( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Engages the named module. The engaged modules extend the message + * processing when consuming services. Modules help to apply QoS + * norms in messaging. Once a module is engaged to a service client, + * the axis2_engine makes sure to invoke the module for all the + * interactions between the client and the service. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param module_name name of the module to be engaged + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_engage_module( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axis2_char_t * module_name); + + /** + * Dis-engages the named module. Dis-engaging a module on a service + * client ensures that the axis2_engine would not invoke the named + * module when sending and receiving messages. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param module_name name of the module to be dis-engaged + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_disengage_module( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axis2_char_t * module_name); + + /** + * Adds an XML element as a header to be sent to the server side. + * This allows users to go beyond the usual XML-in/XML-out pattern, + * and send custom SOAP headers. Once added, service client owns + * the header and will clean up when the service client is freed. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param header om node representing the SOAP header in XML + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_add_header( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + axiom_node_t * header); + + /** + * Removes all the headers added to service client. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_remove_all_headers( + axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * This method can be used to send an XML message. + * This is a simple method to invoke a service operation whose MEP is + * Robust Out-Only. If a fault triggers on server side, this method + * would report an error back to the caller. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param op_qname operation qname. NULL is equivalent to an + * operation name of "__OPERATION_ROBUST_OUT_ONLY__" + * @param payload pointer to OM node representing the XML payload to be sent. + * The caller has control over the payload until the service client frees it. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_send_robust_with_op_qname( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axutil_qname_t * op_qname, + const axiom_node_t * payload); + + /** + * This method can be used to send an XML message. + * This is a simple method to invoke a service operation whose MEP is + * Robust Out-Only. If a fault triggers on server side, this method + * would report an error back to the caller. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * operation name of "__OPERATION_ROBUST_OUT_ONLY__" + * @param payload pointer to OM node representing the XML payload to be sent. + * The caller has control over the payload until the service client frees it. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_send_robust( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axiom_node_t * payload); + + /** + * Sends a message and forget about it. This method is used to interact with + * a service operation whose MEP is In-Only. That is, there is no + * opportunity to get an error from the service via this method; one may still + * get client-side errors, such as host unknown etc. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param op_qname operation qname. NULL is equivalent to an + * operation name of "__OPERATION_OUT_ONLY__" + * @param payload pointer to OM node representing the XML payload to be sent. + * The caller has control over the payload until the service client frees it. + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_svc_client_fire_and_forget_with_op_qname( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axutil_qname_t * op_qname, + const axiom_node_t * payload); + + /** + * Sends a message and forget about it. This method is used to interact with + * a service operation whose MEP is In-Only. That is, there is no + * opportunity to get an error from the service via this method; one may still + * get client-side errors, such as host unknown etc. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param payload pointer to OM node representing the XML payload to be sent. + * The caller has control over the payload until the service client frees it. + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_svc_client_fire_and_forget( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axiom_node_t * payload); + + /** + * Sends XML request and receives XML response. + * This method is used to interact with a service operation whose MEP is In-Out. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param op_qname operation qname. NULL is equivalent to an + * operation name of "__OPERATION_OUT_IN__" + * @param payload pointer to OM node representing the XML payload to be sent. + * The caller has control over the payload until the service client frees it. + * @return pointer to OM node representing the XML response. The + * caller owns the returned node. + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axis2_svc_client_send_receive_with_op_qname( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axutil_qname_t * op_qname, + const axiom_node_t * payload); + + /** + * Sends XML request and receives XML response. + * This method is used to interact with a service operation whose MEP is In-Out. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param payload pointer to OM node representing the XML payload to be sent. + * The caller has control over the payload until the service client frees it. + * @return pointer to OM node representing the XML response. The + * caller owns the returned node. + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axis2_svc_client_send_receive( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axiom_node_t * payload); + + /** + * Sends XML request and receives XML response, but does not block for response. + * This method is used to interact in non-blocking mode with a service + * operation whose MEP is In-Out. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param op_qname operation qname. NULL is equivalent to an + * operation name of "__OPERATION_OUT_IN__" + * @param payload pointer to OM node representing the XML payload to be sent. + * The caller has control over the payload until the service client frees it. + * @callback pointer to callback struct used to capture response + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_svc_client_send_receive_non_blocking_with_op_qname( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axutil_qname_t * op_qname, + const axiom_node_t * payload, + axis2_callback_t * callback); + + /** + * Sends XML request and receives XML response, but does not block for response. + * This method is used to interact in non-blocking mode with a service + * operation whose MEP is In-Out. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param payload pointer to OM node representing the XML payload to be sent. + * The caller has control over the payload until the service client frees it. + * @callback pointer to callback struct used to capture response + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_svc_client_send_receive_non_blocking( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axiom_node_t * payload, + axis2_callback_t * callback); + + /** + * Creates an op_client for a specific operation. This is the way to + * create a full functional MEP client which can be used to exchange + * messages for this specific operation. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param op_qname axutil_qname_t of the operation + * @return pointer to newly created op_client configured for the given operation + */ + AXIS2_EXTERN axis2_op_client_t *AXIS2_CALL + axis2_svc_client_create_op_client( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axutil_qname_t * op_qname); + + /** + * Cleans up service client invocation. This will close the output + * stream and/or remove entry from waiting queue of the transport + * listener queue. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_finalize_invoke( + axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Gets the service client's own endpoint_ref, that is the + * endpoint the client will be sending from. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param transport name of the transport, e.g "http" + * @return pointer to the endpoint_ref struct. Returns a reference, + * not a cloned copy. + */ + AXIS2_EXTERN const axis2_endpoint_ref_t *AXIS2_CALL + axis2_svc_client_get_own_endpoint_ref( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axis2_char_t * transport); + + /** + * Gets the target endpoint ref. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @return pointer to the endpoint_ref struct. Returns a reference, + * not a cloned copy. + */ + AXIS2_EXTERN const axis2_endpoint_ref_t *AXIS2_CALL + axis2_svc_client_get_target_endpoint_ref( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Sets the target endpoint ref. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param target_epr pointer to the endpoint_ref struct to be set as + * target. service client takes over the ownership of the struct. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_set_target_endpoint_ref( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + axis2_endpoint_ref_t * target_epr); + + /** + * Sets the proxy with authentication support. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param proxy_host pointer to the proxy_host settings to be set + * @param proxy_port pointer to the proxy_port settings to be set + * @param username pointer to the username associated with proxy + * which is required for authentication + * @param password pointer to the password associated with proxy + * which is required for authentication + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_set_proxy_with_auth( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + axis2_char_t * proxy_host, + axis2_char_t * proxy_port, + axis2_char_t * username, + axis2_char_t * password); + + /** + * Sets the proxy. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @param proxy_host pointer to the proxy_host settings to be set + * @param proxy_port pointer to the proxy_port settings to be set + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_set_proxy( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + axis2_char_t * proxy_host, + axis2_char_t * proxy_port); + + /** + * Gets the service context. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @return pointer to service context struct. service client owns + * the returned pointer. + */ + AXIS2_EXTERN axis2_svc_ctx_t *AXIS2_CALL + axis2_svc_client_get_svc_ctx( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Frees the service client. + * @param svc_client pointer to service client struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_svc_client_free( + axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Gets the operation client + * @param svc_client pointer to service_client struct + * @param env env pointer to environment struct + * @return pointer to service context struct. service client owns + * the returned pointer + */ + AXIS2_EXTERN axis2_op_client_t *AXIS2_CALL + axis2_svc_client_get_op_client( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Creates a service client struct. + * @param env pointer to environment struct + * @param client_home name of the directory that contains the Axis2/C repository + * @return a pointer to newly created service client struct, + * or NULL on error with error code set in environment's error + */ + AXIS2_EXTERN axis2_svc_client_t *AXIS2_CALL + axis2_svc_client_create( + const axutil_env_t * env, + const axis2_char_t * client_home); + + /** + * Creates a service client struct for a specified service and configuration + * context. + * @param env pointer to environment struct + * @param conf_ctx pointer to configuration context. Newly created client + * assumes ownership of the conf_ctx + * @param svc pointer to service struct representing the service to be consumed. + * Newly created client assumes ownership of the service + * @param client_home name of the directory that contains the Axis2/C repository + * @return a pointer to newly created service client struct, + * or NULL on error with error code set in environment's error + */ + AXIS2_EXTERN axis2_svc_client_t *AXIS2_CALL + axis2_svc_client_create_with_conf_ctx_and_svc( + const axutil_env_t * env, + const axis2_char_t * client_home, + axis2_conf_ctx_t * conf_ctx, + axis2_svc_t * svc); + + /** + * Gets the last response SOAP envelope. + * @param svc_client pointer to service_client struct + * @param env env pointer to environment struct + * @return pointer to SOAP envelope that was returned as a result + * when send_receieve was called last time + */ + AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL + axis2_svc_client_get_last_response_soap_envelope( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Gets the boolean value indicating if the last response had a SOAP fault. + * @param svc_client pointer to service_client struct + * @param env env pointer to environment struct + * @return AXIS2_TRUE if there was a fault, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_svc_client_get_last_response_has_fault( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Gets the authentication type required. + * @param svc_client pointer to service_client struct + * @param env env pointer to environment struct + * @return AXIS2_TRUE if the operation succeeded, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_svc_client_get_auth_type( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Gets the boolean value indicating whether HTTP Authentication + * is required. + * @param svc_client pointer to service_client struct + * @param env env pointer to environment struct + * @return AXIS2_TRUE if Authentication is required, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_svc_client_get_http_auth_required( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Gets the boolean value indicating whether Proxy Authentication + * is required. + * @param svc_client pointer to service_client struct + * @param env env pointer to environment struct + * @return AXIS2_TRUE if Authentication is required, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_svc_client_get_proxy_auth_required( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Create a policy object and set it to the description hierarchy + * @param svc_client pointer to service_client struct + * @param env pointer to environment struct + * @param root_node pointer to a policy node + * @return AXIS2_FAILURE if there was a fault, else AXIS2_SUCCESS + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_set_policy_from_om( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + axiom_node_t * root_node); + + /** + * Set the given policy object to the description hierarchy + * @param svc_client pointer to service_client struct + * @param env pointer to environment struct + * @param policy neethi_policy_t to a policy struct + * @return AXIS2_FAILURE if there was a fault, else AXIS2_SUCCESS + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_set_policy( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + neethi_policy_t * policy); + + /** + * Gets the HTTP Headers of the last response. + * @param svc_client pointer to service_client struct + * @param env pointer to environment struct + * @return list of HTTP Response Headers + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axis2_svc_client_get_http_headers( + axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Gets the HTTP Status Code of the last response. + * @param svc_client pointer to service_client struct + * @param env pointer to environment struct + * @return HTTP Status Code + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_svc_client_get_http_status_code( + axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** + * Close the service client. + * @param svc_client pointer to service_client struct + * @param env pointer to environment struct + * @return AXIS2_FAILURE if there was a fault, else AXIS2_SUCCESS + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_client_close( + axis2_svc_client_t * svc_client, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_SVC_CLIENT_H */ diff --git a/include/axis2_svc_ctx.h b/include/axis2_svc_ctx.h new file mode 100644 index 0000000..c88d2f4 --- /dev/null +++ b/include/axis2_svc_ctx.h @@ -0,0 +1,196 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_SVC_CTX_H +#define AXIS2_SVC_CTX_H + +/** + * @defgroup axis2_svc_ctx service context + * @ingroup axis2_context + * service context represents a running "instance" of a service. + * service context allows instance of operations belonging to a service to be + * grouped. + * @{ + */ + +/** + * @file axis2_svc_ctx.h + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_svc_ctx */ + typedef struct axis2_svc_ctx axis2_svc_ctx_t; + + /** + * Creates a service context struct that corresponds to the given service + * and with the given parent service group context. + * @param env pointer to environment struct + * @param svc pointer to service that this service context represents, + * service context does not assume the ownership of service + * @param svc_grp_ctx pointer to service group context, the parent of the + * newly created service context. service context does not assume the + * ownership of parent + * @return pointer to newly created service context + */ + AXIS2_EXTERN axis2_svc_ctx_t *AXIS2_CALL + axis2_svc_ctx_create( + const axutil_env_t * env, + struct axis2_svc *svc, + struct axis2_svc_grp_ctx *svc_grp_ctx); + + /** + * Gets base which is of type context. + * @param svc_ctx pointer to service context + * @param env pointer to environment struct + * @return pointer to context, returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_ctx_t *AXIS2_CALL + axis2_svc_ctx_get_base( + const axis2_svc_ctx_t * svc_ctx, + const axutil_env_t * env); + + /** + * Gets parent which is of type service group context. + * @param svc_ctx pointer to service context + * @param env pointer to environment struct + * @return pointer to parent service group context + */ + AXIS2_EXTERN struct axis2_svc_grp_ctx *AXIS2_CALL + axis2_svc_ctx_get_parent( + const axis2_svc_ctx_t * svc_ctx, + const axutil_env_t * env); + + /** + * Sets parent which is of type service group context. + * @param svc_ctx pointer to service context + * @param env pointer to environment struct + * @param parent parent of service context which is of type + * service group context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_ctx_set_parent( + axis2_svc_ctx_t * svc_ctx, + const axutil_env_t * env, + struct axis2_svc_grp_ctx *parent); + + /** + * Frees service context instance. + * @param svc_ctx pointer to service context + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_svc_ctx_free( + struct axis2_svc_ctx *svc_ctx, + const axutil_env_t * env); + + /** + * Initializes service context. This method locates the corresponding + * service that is related to the service context from configuration + * using service qname and keeps a reference to it for future use. + * @param svc_ctx pointer to service context + * @param env pointer to environment struct + * @param conf pointer to configuration + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_ctx_init( + struct axis2_svc_ctx *svc_ctx, + const axutil_env_t * env, + struct axis2_conf *conf); + + /** + * Gets the ID of the service that this service context is an instance + * of. + * @param svc_ctx pointer to service context + * @param env pointer to environment struct + * @return service ID string. + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_svc_ctx_get_svc_id( + const axis2_svc_ctx_t * svc_ctx, + const axutil_env_t * env); + + /** + * Gets the service that this service context represents. + * @param svc_ctx pointer to service context + * @param env pointer to environment struct + * @return pointer to service, returns a reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_svc *AXIS2_CALL + axis2_svc_ctx_get_svc( + const axis2_svc_ctx_t * svc_ctx, + const axutil_env_t * env); + + /** + * Sets the service that this service context represents. + * @param svc_ctx pointer to service context + * @param env pointer to environment struct + * @param svc pointer to service struct, service context does not assume + * the ownership of the struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_ctx_set_svc( + axis2_svc_ctx_t * svc_ctx, + const axutil_env_t * env, + struct axis2_svc *svc); + + /** + * Gets configuration context which is the super root (super most parent) + * of the context hierarchy to which this service context belongs. + * @param svc_ctx pointer to service context + * @param env pointer to environment struct + * @return pointer to configuration context + */ + AXIS2_EXTERN struct axis2_conf_ctx *AXIS2_CALL + axis2_svc_ctx_get_conf_ctx( + const axis2_svc_ctx_t * svc_ctx, + const axutil_env_t * env); + + /** + * Creates an operation context for the named operation. The named + * operation should be one of the operations in the service related + * to this service context. + * @param svc_ctx pointer to service context + * @param env pointer to environment struct + * @param qname pointer to qname that represents the operation name. + * @return pointer to operation context + */ + AXIS2_EXTERN struct axis2_op_ctx *AXIS2_CALL + axis2_svc_ctx_create_op_ctx( + struct axis2_svc_ctx *svc_ctx, + const axutil_env_t * env, + const axutil_qname_t * qname); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_SVC_CTX_H */ diff --git a/include/axis2_svc_grp.h b/include/axis2_svc_grp.h new file mode 100644 index 0000000..4f05296 --- /dev/null +++ b/include/axis2_svc_grp.h @@ -0,0 +1,368 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_SVC_GRP_H +#define AXIS2_SVC_GRP_H + +/** + * @defgroup axis2_svc_grp service group + * @ingroup axis2_desc + * service group represents the static structure of a service group in + * the Axis2 configuration. + * In Axis2 description hierarchy, a service group lives inside the + * configuration. service groups are configured in services.xml files located + * in the respective service group folders of the services folder in the repository. + * In services.xml file, services groups are declared at top level. + * A service group can have one or more services associated with it. + * Sometimes services.xml would not have a service group defined, but only a + * service. In such cases a service group with the same name as that of the + * service mentioned in services.xml would be created by the deployment + * engine and the service would be associated with that newly created service + * group. The deployment engine would create service group instances to represent + * those configured service groups in services.xml files and would store + * them in the configuration. + * service group encapsulates data on engaged module information and the + * service associated with service group. + * @{ + */ + +/** + * @file axis2_svc_grp.h + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_svc_grp */ + typedef struct axis2_svc_grp axis2_svc_grp_t; + + struct axis2_svc; + struct axis2_svc_grp_ctx; + + /** + * Frees service group. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_svc_grp_free( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env); + + /** + * Sets service group name. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @param svc_grp_name service group name string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_grp_set_name( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axis2_char_t * svc_grp_name); + + /** + * Gets service group name. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @return service group name string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_svc_grp_get_name( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env); + + /** + * Adds given service to service group. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @param service service to be added, service group assumes ownership + * of service + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_grp_add_svc( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + struct axis2_svc *svc); + + /** + * Gets named service from service group. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @param svc_qname pointer to QName of the service + * @return pointer to service corresponding to given QName, returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_svc *AXIS2_CALL + axis2_svc_grp_get_svc( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axutil_qname_t * svc_qname); + + /** + * Gets all services associated with service group. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @return pointer to hash table containing all services, returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_svc_grp_get_all_svcs( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env); + + /** + * Removes named service from service group. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @param svc_name pointer to service QName + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_grp_remove_svc( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axutil_qname_t * svc_qname); + + /** + * Adds parameter. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @param param pointer to parameter, service group assumes ownership + * of parameter + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_grp_add_param( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + axutil_param_t * param); + + /** + * Gets named parameter. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @param name parameter name + * @return pointer to named parameter if exists, else NULL. Returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + axis2_svc_grp_get_param( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axis2_char_t * name); + + /** + * Remove a parameter. + * @param svc_grp pointer to service grp struct + * @param env pointer to the environment + * @Param param_name parameter name to be removed + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_grp_remove_param( + const axis2_svc_grp_t *svc_grp, + const axutil_env_t *env, + const axis2_char_t *param_name); + + /** + * Gets all parameters set on service group. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @return pointer to array list containing parameter, returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_svc_grp_get_all_params( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env); + + /** + * Checks if the named parameter is locked. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @param param_name pointer to param name + * @return AXIS2_TRUE if the named parameter is locked, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_svc_grp_is_param_locked( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axis2_char_t * param_name); + + /** + * Adds given module QName to list of module QNames. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @param module_name pointer to module QName + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_grp_add_module_qname( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axutil_qname_t * module_qname); + + /** + * Gets parent which is of type configuration. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @return pointer to parent configuration, returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_conf *AXIS2_CALL + axis2_svc_grp_get_parent( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env); + + /** + * Sets parent which is of type configuration. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @param parent parent configuration, service group does not assume + * the ownership of configuration + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_grp_set_parent( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + struct axis2_conf *parent); + + /** + * Engages named module to service group. Engaging a module to service + * group would ensure that the same module would be engaged to all + * services within the group. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @param module_name pointer to module QName + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_grp_engage_module( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axutil_qname_t * module_qname); + + /** + * Gets all module QNames associated with service group. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @return pointer to array list containing all QNames, returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_svc_grp_get_all_module_qnames( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env); + + /** + * Adds module reference. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @param moduleref pointer to module QName + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_grp_add_module_ref( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axutil_qname_t * moduleref); + + /** + * Gets all module references. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @return pointer to array list containing module reference, returns + * a reference, not a cloned copy + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_svc_grp_get_all_module_refs( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env); + + /** + * Gets service group context related to this service group. + * @param svc_grp pointer to service group struct + * @param env pointer to environment struct + * @param parent pointer to configuration context which is the parent of + * the context hierarchy + * @return pointer to service group context related to this service + * group, returns a reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_svc_grp_ctx *AXIS2_CALL + + axis2_svc_grp_get_svc_grp_ctx( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + struct axis2_conf_ctx *parent); + + AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL + + axis2_svc_grp_get_param_container( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env); + + /** + * Creates a service group struct instance. + * @param env pointer to environment struct + * @return pointer to newly created service group + */ + AXIS2_EXTERN axis2_svc_grp_t *AXIS2_CALL + axis2_svc_grp_create( + const axutil_env_t * env); + + /** + * Creates service group with given configuration as the parent. + * @param env pointer to environment struct + * @param conf pointer to configuration, service group created does not + * assume ownership of configuration + * @return pointer to newly created service group + */ + AXIS2_EXTERN axis2_svc_grp_t *AXIS2_CALL + axis2_svc_grp_create_with_conf( + const axutil_env_t * env, + struct axis2_conf *conf); + + /** + * Gets base description. + * @param svc_grp pointer to message + * @param env pointer to environment struct + * @return pointer to base description struct + */ + AXIS2_EXTERN axis2_desc_t *AXIS2_CALL + axis2_svc_grp_get_base( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_SVC_GRP_H */ diff --git a/include/axis2_svc_grp_ctx.h b/include/axis2_svc_grp_ctx.h new file mode 100644 index 0000000..0ae9c96 --- /dev/null +++ b/include/axis2_svc_grp_ctx.h @@ -0,0 +1,194 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_SVC_GRP_CTX_H +#define AXIS2_SVC_GRP_CTX_H + +/** + * @defgroup axis2_svc_grp_ctx service group context + * @ingroup axis2_context + * service group context represents a running "instance" of a service group. + * service group context allows instance of services belonging to a service + * group to be grouped. + * @{ + */ + +/** + * @file axis2_svc_grp_ctx.h + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + struct axis2_svc_grp; + + /** Type name for struct svc_grp_ctx */ + typedef struct axis2_svc_grp_ctx axis2_svc_grp_ctx_t; + + /** + * Creates a service group context struct. + * @param env pointer to environment struct + * @param svc_grp pointer to service group that this service context + * represents, service group context does not assume the ownership of the struct + * @param conf_ctx pointer to configuration context, the parent context + * of the newly created service group context, service group context does not + * assume the ownership of the struct + * @return pointer to newly created service group context + */ + AXIS2_EXTERN axis2_svc_grp_ctx_t *AXIS2_CALL + axis2_svc_grp_ctx_create( + const axutil_env_t * env, + struct axis2_svc_grp *svc_grp, + struct axis2_conf_ctx *conf_ctx); + + /** + * Gets base which is of type context. + * @param svc_grp_ctx pointer to service group context + * @param env pointer to environment + * @return pointer to base context struct, returns a reference not a + * cloned copy + */ + AXIS2_EXTERN axis2_ctx_t *AXIS2_CALL + axis2_svc_grp_ctx_get_base( + const axis2_svc_grp_ctx_t * svc_grp_ctx, + const axutil_env_t * env); + + /** + * Gets parent. configuration context is the parent of any service group + * context instance. + * @param svc_grp_ctx pointer to service group context + * @param env pointer to environment struct + * @return pointer to configuration context, parent of service group + */ + AXIS2_EXTERN struct axis2_conf_ctx *AXIS2_CALL + axis2_svc_grp_ctx_get_parent( + const axis2_svc_grp_ctx_t * svc_grp_ctx, + const axutil_env_t * env); + + /** + * Frees service group context. + * @param svc_grp_ctx pointer to service group context + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_svc_grp_ctx_free( + struct axis2_svc_grp_ctx *svc_grp_ctx, + const axutil_env_t * env); + + /** + * Initializes service group context. In this method, it pics the + * related service group from configuration and keeps a reference + * for future use. + * @param svc_grp_ctx pointer to service group context + * @param env pointer to environment struct + * @param conf pointer to configuration + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_grp_ctx_init( + struct axis2_svc_grp_ctx *svc_grp_ctx, + const axutil_env_t * env, + struct axis2_conf *conf); + + /** + * Gets service group context ID. + * @param svc_grp_ctx pointer to service group context + * @param env pointer to environment struct + * @return service group context ID string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_svc_grp_ctx_get_id( + const axis2_svc_grp_ctx_t * svc_grp_ctx, + const axutil_env_t * env); + + /** + * Sets service group context ID. + * @param svc_grp_ctx pointer to service group context + * @param env pointer to environment struct + * @param id service group context ID + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_grp_ctx_set_id( + struct axis2_svc_grp_ctx *svc_grp_ctx, + const axutil_env_t * env, + const axis2_char_t * id); + + /** + * Gets named service context. + * @param svc_grp_ctx pointer to service group context + * @param env pointer to environment struct + * @param svc_name name of service context to be retrieved + * @return pointer to named service context + */ + AXIS2_EXTERN struct axis2_svc_ctx *AXIS2_CALL + axis2_svc_grp_ctx_get_svc_ctx( + const axis2_svc_grp_ctx_t * svc_grp_ctx, + const axutil_env_t * env, + const axis2_char_t * svc_name); + + /** + * Fills service context map. This will create one service context per + * each service in the service group related to this service context. + * @param svc_grp_ctx pointer to service group context + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_grp_ctx_fill_svc_ctx_map( + struct axis2_svc_grp_ctx *svc_grp_ctx, + const axutil_env_t * env); + + /** + * Gets service group related to this service context. + * @param svc_grp_ctx pointer to service group context + * @param env pointer to environment struct + * @return pointer to service group that this service group context + * represents + */ + AXIS2_EXTERN struct axis2_svc_grp *AXIS2_CALL + axis2_svc_grp_ctx_get_svc_grp( + const axis2_svc_grp_ctx_t * svc_grp_ctx, + const axutil_env_t * env); + + /** + * Gets service context map containing all service contexts. + * @param svc_grp_ctx pointer to service group context + * @param env pointer to environment struct + * @return pointer to hash table containing the service context map + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_svc_grp_ctx_get_svc_ctx_map( + const axis2_svc_grp_ctx_t * svc_grp_ctx, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_SVC_GRP_CTX_H */ diff --git a/include/axis2_svc_name.h b/include/axis2_svc_name.h new file mode 100644 index 0000000..72422bb --- /dev/null +++ b/include/axis2_svc_name.h @@ -0,0 +1,135 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_SVC_NAME_H +#define AXIS2_SVC_NAME_H + +/** + * @defgroup axis2_svc_name service name + * @ingroup axis2_addr + * service name provides a full description of the service endpoint. service + * name contains a QName identifying the WSDL service element that contains + * the definition of the endpoint being conveyed. It also contains an optional + * non-qualified name that identifies the specific port in the service that + * corresponds to the endpoint. + * @{ + */ + +/** + * @file axis2_svc_name.h + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_svc_name */ + typedef struct axis2_svc_name axis2_svc_name_t; + + /** + * Creates a service name struct with given QName and endpoint name. + * @param env pointer to environment struct + * @param qname pointer to QName, this method creates a clone of QName + * @param endpoint_name endpoint name string + * @return pointer to newly create service name struct + */ + AXIS2_EXTERN axis2_svc_name_t *AXIS2_CALL + axis2_svc_name_create( + const axutil_env_t * env, + const axutil_qname_t * qname, + const axis2_char_t * endpoint_name); + + /** + * Gets QName. QName identifies the WSDL service element that contains + * the definition of the endpoint being conveyed. + * @param svc_name pointer to service name struct + * @param env pointer to environment struct + * @return pointer to QName struct, returns a reference, not a cloned + * copy + */ + AXIS2_EXTERN const axutil_qname_t *AXIS2_CALL + axis2_svc_name_get_qname( + const axis2_svc_name_t * svc_name, + const axutil_env_t * env); + + /** + * Sets QName. QName identifies the WSDL service element that contains + * the definition of the endpoint being conveyed. + * @param svc_name pointer to service name struct + * @param env pointer to environment struct + * @param qname pointer to QName, service name creates a clone of QName + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_name_set_qname( + struct axis2_svc_name *svc_name, + const axutil_env_t * env, + const axutil_qname_t * qname); + + /** + * Gets endpoint name. Endpoint name is a non-qualified name that + * identifies the specific port in the service that corresponds to + * the endpoint. + * @param svc_name pointer to service name struct + * @param env pointer to environment struct + * @return endpoint name string + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axis2_svc_name_get_endpoint_name( + const axis2_svc_name_t * svc_name, + const axutil_env_t * env); + + /** + * Sets endpoint name. Endpoint name is a non-qualified name that + * identifies the specific port in the service that corresponds to + * the endpoint. + * @param svc_name pointer to service name struct + * @param env pointer to environment struct + * @param endpoint_name endpoint name string + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_name_set_endpoint_name( + struct axis2_svc_name *svc_name, + const axutil_env_t * env, + const axis2_char_t * endpoint_name); + + /** + * Frees service name struct. + * @param svc_name pointer to service name struct + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_svc_name_free( + struct axis2_svc_name *svc_name, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_SVC_NAME_H */ diff --git a/include/axis2_svc_skeleton.h b/include/axis2_svc_skeleton.h new file mode 100644 index 0000000..27d08a9 --- /dev/null +++ b/include/axis2_svc_skeleton.h @@ -0,0 +1,182 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_SVC_SKELETON_H +#define AXIS2_SVC_SKELETON_H + +/** + * @defgroup axis2_soc_api service API + * @ingroup axis2 + * @{ + * @} + */ + +/** + * @defgroup axis2_svc_skeleton service skeleton + * @ingroup axis2_svc_api + * service skeleton API should be implemented by all services + * that are to be deployed with Axis2/C engine. + * @{ + */ + +/** + * @file axis2_svc_skeleton.h + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_svc_skeleton_ops */ + typedef struct axis2_svc_skeleton_ops axis2_svc_skeleton_ops_t; + + /** Type name for struct axis2_svc_skeleton */ + typedef struct axis2_svc_skeleton axis2_svc_skeleton_t; + + /** + * service skeleton ops struct. + * Encapsulator struct for operations of axis2_svc_skeleton. + */ + struct axis2_svc_skeleton_ops + { + + /** + * Initializes the service implementation. + * @param svc_skeleton pointer to svc_skeleton struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + int( + AXIS2_CALL + * init)( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + + /** + * Invokes the service. This function should be used to call up the + * functions implementing service operations. + * @param svc_skeli pointer to svc_skeli struct + * @param env pointer to environment struct + * @param node pointer to node struct + * @param msg_ctx pointer to message context struct + * @return pointer to AXIOM node resulting from the invocation. + * In case of one way operations, NULL would be returned with + * status in environment error set to AXIS2_SUCCESS. On error + * NULL would be returned with error status set to AXIS2_FAILURE + */ + axiom_node_t *( + AXIS2_CALL + * invoke)( + axis2_svc_skeleton_t * svc_skeli, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx); + + /** + * This method would be called if a fault is detected. + * @param svc_skeli pointer to svc_skeli struct + * @param env pointer to environment struct + * @param node pointer to node struct + * @return pointer to AXIOM node reflecting the fault, NULL on error + */ + axiom_node_t *( + AXIS2_CALL + * on_fault)( + axis2_svc_skeleton_t * svc_skeli, + const axutil_env_t * env, + axiom_node_t * node); + + /** + * Frees service implementation. + * @param svc_skeli pointer to svc_skeli struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + int( + AXIS2_CALL + * free)( + axis2_svc_skeleton_t * svc_skeli, + const axutil_env_t * env); + + /** + * Initializes the service implementation. + * @param svc_skeleton pointer to svc_skeleton struct + * @param env pointer to environment struct + * @param conf pointer to axis2c configuration struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + int( + AXIS2_CALL + * init_with_conf)( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + struct axis2_conf * conf); + }; + + /** + * service skeleton struct. + */ + struct axis2_svc_skeleton + { + + /** operations of service skeleton */ + const axis2_svc_skeleton_ops_t *ops; + + /** Array list of functions, implementing the service operations */ + axutil_array_list_t *func_array; + }; + + /*************************** Function macros **********************************/ + + /** Initialize the svc skeleton. + @sa axis2_svc_skeleton_ops#init */ +#define AXIS2_SVC_SKELETON_INIT(svc_skeleton, env) \ + ((svc_skeleton)->ops->init (svc_skeleton, env)) + + /** Initialize the svc skeleton with axis2c configuration struct. + @sa axis2_svc_skeleton_ops#init_with_conf */ +#define AXIS2_SVC_SKELETON_INIT_WITH_CONF(svc_skeleton, env, conf) \ + ((svc_skeleton)->ops->init_with_conf (svc_skeleton, env, conf)) + + /** Frees the svc skeleton. + @sa axis2_svc_skeleton_ops#free */ +#define AXIS2_SVC_SKELETON_FREE(svc_skeleton, env) \ + ((svc_skeleton)->ops->free (svc_skeleton, env)) + + /** Invokes axis2 service skeleton. + @sa axis2_svc_skeleton_ops#invoke */ +#define AXIS2_SVC_SKELETON_INVOKE(svc_skeleton, env, node, msg_ctx) \ + ((svc_skeleton)->ops->invoke (svc_skeleton, env, node, msg_ctx)) + + /** Called on fault. + @sa axis2_svc_skeleton_ops#on_fault */ +#define AXIS2_SVC_SKELETON_ON_FAULT(svc_skeleton, env, node) \ + ((svc_skeleton)->ops->on_fault (svc_skeleton, env, node)) + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_SVC_SKELETON_H */ diff --git a/include/axis2_svr_callback.h b/include/axis2_svr_callback.h new file mode 100644 index 0000000..47ba646 --- /dev/null +++ b/include/axis2_svr_callback.h @@ -0,0 +1,95 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_SVR_CALLBACK_H +#define AXIS2_SVR_CALLBACK_H + +/** @defgroup axis2_svr_callback server callback + * @ingroup axis2_svc_api + * @{ + */ + +/** + * @file axis2_svr_callback.h + * @brief axis Server Callback interface + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + /** Type name for struct axis2_svr_callback */ + typedef struct axis2_svr_callback axis2_svr_callback_t; + + /** + * Deallocate memory + * @param svr_callback pointer to server callback struct + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_svr_callback_free( + axis2_svr_callback_t * svr_callback, + const axutil_env_t * env); + + /** + * Handle result + * @param svr_callback pointer to server callback struct + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svr_callback_handle_result( + axis2_svr_callback_t * svr_callback, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * Handle fault + * @param svr_callback pointer to server callback struct + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svr_callback_handle_fault( + axis2_svr_callback_t * svr_callback, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + /** + * Create Server Callback struct + * @param env pointer to environment struct + * @return newly created server callback object + */ + AXIS2_EXTERN axis2_svr_callback_t *AXIS2_CALL + axis2_svr_callback_create( + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_SVR_CALLBACK_H */ diff --git a/include/axis2_thread_mutex.h b/include/axis2_thread_mutex.h new file mode 100644 index 0000000..6512812 --- /dev/null +++ b/include/axis2_thread_mutex.h @@ -0,0 +1,112 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_THREAD_MUTEX_H +#define AXIS2_THREAD_MUTEX_H + +/** + * @file axutil_thread_mutex.h + * @brief AXIS2 Thread Mutex Routines + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + /** + * @defgroup axis2_mutex thread mutex routines + * @ingroup axis2_util + * @{ + */ + + /** Opaque thread-local mutex structure */ + typedef struct axutil_thread_mutex_t axutil_thread_mutex_t; + +#define AXIS2_THREAD_MUTEX_DEFAULT 0x0 /**< platform-optimal lock behavior */ + +#define AXIS2_THREAD_MUTEX_NESTED 0x1 /**< enable nested (recursive) locks */ + +#define AXIS2_THREAD_MUTEX_UNNESTED 0x2 /**< disable nested locks */ + + /** + * Create and initialize a mutex that can be used to synchronize threads. + * + * @param flags Or'ed value of: + *
+     *           AXIS2_THREAD_MUTEX_DEFAULT   platform-optimal lock behavior.
+     *           AXIS2_THREAD_MUTEX_NESTED    enable nested (recursive) locks.
+     *           AXIS2_THREAD_MUTEX_UNNESTED  disable nested locks (non-recursive).
+     * 
+ * @param allocator the allocator from which to allocate the mutex. + * @return mutex the memory address where the newly created mutex will be + * stored. + * @warning Be cautious in using AXIS2_THREAD_MUTEX_DEFAULT. While this is the + * most optimial mutex based on a given platform's performance charateristics, + * it will behave as either a nested or an unnested lock. + */ + AXIS2_EXTERN axutil_thread_mutex_t *AXIS2_CALL + + axutil_thread_mutex_create( + axutil_allocator_t * allocator, + unsigned int flags); + + /** + * Acquire the lock for the given mutex. If the mutex is already locked, + * the current thread will be put to sleep until the lock becomes available. + * @param mutex the mutex on which to acquire the lock. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_mutex_lock( + axutil_thread_mutex_t * mutex); + + /** + * Attempt to acquire the lock for the given mutex. If the mutex has already + * been acquired, the call returns immediately + * @param mutex the mutex on which to attempt the lock acquiring. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_mutex_trylock( + axutil_thread_mutex_t * mutex); + + /** + * Release the lock for the given mutex. + * @param mutex the mutex from which to release the lock. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_mutex_unlock( + axutil_thread_mutex_t * mutex); + + /** + * Destroy the mutex and free the memory associated with the lock. + * @param mutex the mutex to destroy. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_mutex_destroy( + axutil_thread_mutex_t * mutex); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_THREAD_MUTEX_H */ diff --git a/include/axis2_transport_in_desc.h b/include/axis2_transport_in_desc.h new file mode 100644 index 0000000..bd96331 --- /dev/null +++ b/include/axis2_transport_in_desc.h @@ -0,0 +1,329 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_TRANSPORT_IN_DESC_H +#define AXIS2_TRANSPORT_IN_DESC_H + +/** + * @defgroup axis2_transport_in_desc transport in description + * @ingroup axis2_desc + * transport in description represents a transport receiver configured in + * Axis2 configuration. There can be multiple transport receivers configured + * in axis2.xml file and each of them will be represented with a transport + * in description instance. deployment engine takes care of creating and + * instantiating transport in descriptions. + * transport in description encapsulates flows related to the transport in + * and also holds a reference to related transport receiver. + * @{ + */ + +/** + * @file axis2_transport_in_desc.h + * @brief Axis2 description transport in interface + */ + +#include +#include +#include +#include +#include +#include + +/*#include */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_transport_in_desc */ + typedef struct axis2_transport_in_desc axis2_transport_in_desc_t; + + struct axis2_phase; + struct axis2_transport_receiver; + + /** + * Frees transport in description. + * @param transport_in_desc pointer to transport in description struct + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_transport_in_desc_free( + axis2_transport_in_desc_t * transport_in_desc, + const axutil_env_t * env); + + /** + * Frees transport in description given as a void parameter. + * @param transport_in pointer to transport in description as a void + * pointer + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_transport_in_desc_free_void_arg( + void *transport_in, + const axutil_env_t * env); + + /** + * Gets transport enum. + * @param transport_in pointer to transport in description struct + * @param env pointer to environment struct + * @return transport enum + */ + AXIS2_EXTERN AXIS2_TRANSPORT_ENUMS AXIS2_CALL + + axis2_transport_in_desc_get_enum( + const axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env); + + /** + * Sets transport enum. + * @param transport_in pointer to transport in description struct + * @param env pointer to environment struct + * @param trans_enum transport enum + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_transport_in_desc_set_enum( + struct axis2_transport_in_desc *transport_in, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS trans_enum); + + /** + * Gets in flow. In flow represents the list of phases invoked + * along the receive path. + * @param transport_in pointer to transport in description struct + * @param env pointer to environment struct + * @return pointer to flow representing in flow, returns a reference, + * not a cloned copy + */ + AXIS2_EXTERN struct axis2_flow *AXIS2_CALL + + axis2_transport_in_desc_get_in_flow( + const axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env); + + /** + * Sets in flow. In flow represents the list of phases invoked + * along the receive path. + * @param transport_in pointer to transport in description struct + * @param env pointer to environment struct + * @param in_flow pointer to in flow representing in flow, transport in + * description assumes ownership of the flow + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_transport_in_desc_set_in_flow( + struct axis2_transport_in_desc *transport_in, + const axutil_env_t * env, + struct axis2_flow *in_flow); + + /** + * Gets fault in flow. Fault in flow represents the list of phases + * invoked along the receive path if a fault happens. + * @param transport_in pointer to transport in description struct + * @param env pointer to environment struct + * @return pointer to flow representing fault in flow, returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_flow *AXIS2_CALL + + axis2_transport_in_desc_get_fault_in_flow( + const axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env); + + /** + * Sets fault in flow. Fault in flow represents the list of phases + * invoked along the receive path if a fault happens. + * @param transport_in pointer to transport in description struct + * @param env pointer to environment struct + * @param fault_in_flow pointer to flow representing fault in flow, + * transport in description assumes the ownership of the flow + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_transport_in_desc_set_fault_in_flow( + struct axis2_transport_in_desc *transport_in, + const axutil_env_t * env, + struct axis2_flow *fault_in_flow); + + /** + * Gets transport receiver associated with the transport in description. + * @param transport_in pointer to transport in description struct + * @param env pointer to environment struct + * @return pointer to transport receiver, returns a reference, not + * a cloned copy + */ + AXIS2_EXTERN struct axis2_transport_receiver *AXIS2_CALL + + axis2_transport_in_desc_get_recv( + const axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env); + + /** + * Sets transport receiver associated with the transport in description. + * @param transport_in pointer to transport in description struct + * @param env pointer to environment struct + * @param recv pointer to transport receiver, transport in + * description assumes ownership of the receiver + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_transport_in_desc_set_recv( + struct axis2_transport_in_desc *transport_in, + const axutil_env_t * env, + struct axis2_transport_receiver *recv); + + /** + * Gets the transport in phase associated with transport in description. + * @param transport_in pointer to transport in description struct + * @param env pointer to environment struct + * @return transport in phase, returns a reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_phase *AXIS2_CALL + + axis2_transport_in_desc_get_in_phase( + const axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env); + + /** + * Sets the transport in phase associated with transport in description. + * @param transport_in pointer to transport in description struct + * @param env pointer to environment struct + * @param in_phase pointer to phase representing transport in phase, + * transport in description assumes ownership of phase + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_transport_in_desc_set_in_phase( + struct axis2_transport_in_desc *transport_in, + const axutil_env_t * env, + struct axis2_phase *in_phase); + + /** + * Gets the transport fault phase associated with transport in description. + * @param transport_in pointer to transport in description struct + * @param env pointer to environment struct + * @return pointer to phase representing fault phase + */ + AXIS2_EXTERN struct axis2_phase *AXIS2_CALL + + axis2_transport_in_desc_get_fault_phase( + const axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env); + + /** + * Sets the transport fault phase associated with transport in description. + * @param transport_in pointer to transport in description struct + * @param env pointer to environment struct + * @param fault_phase pointer to fault phase + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_transport_in_desc_set_fault_phase( + struct axis2_transport_in_desc *transport_in, + const axutil_env_t * env, + struct axis2_phase *fault_phase); + + /** + * Adds given parameter. + * @param transport_in_desc pointer to transport in description struct + * @param env pointer to environment struct + * @param param pointer to parameter, transport in description assumes + * ownership of parameter + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_transport_in_desc_add_param( + axis2_transport_in_desc_t * transport_in_desc, + const axutil_env_t * env, + axutil_param_t * param); + + /** + * Gets named parameter. + * @param transport_in_desc pointer to transport in description struct + * @param env pointer to environment struct + * @param param_name parameter name string + * @return pointer to named parameter if it exists, else NULL. Returns + * a reference, not a cloned copy + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + + axis2_transport_in_desc_get_param( + const axis2_transport_in_desc_t * transport_in_desc, + const axutil_env_t * env, + const axis2_char_t * param_name); + + /** + * Checks if the named parameter is locked. + * @param transport_in_desc pointer to transport in description struct + * @param env pointer to environment struct + * @param param_name parameter name string + * @return AXIS2_TRUE if named parameter is locked, else AXIS2_FALSE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axis2_transport_in_desc_is_param_locked( + axis2_transport_in_desc_t * transport_in_desc, + const axutil_env_t * env, + const axis2_char_t * param_name); + + AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL + + axis2_transport_in_desc_param_container( + const axis2_transport_in_desc_t * transport_in_desc, + const axutil_env_t * env); + + /** + * Creates transport in description with given transport enum. + * @param env pointer to environment struct + * @param trans_enum transport enum + * @return pointer to newly created phase holder + */ + AXIS2_EXTERN axis2_transport_in_desc_t *AXIS2_CALL + + axis2_transport_in_desc_create( + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS trans_enum); + + /** + * Frees transport in description given as a void parameter. + * @param transport_in pointer to transport in description as a void + * pointer + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_transport_in_desc_free_void_arg( + void *transport_in, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_TRANSPORT_IN_DESC_H */ diff --git a/include/axis2_transport_out_desc.h b/include/axis2_transport_out_desc.h new file mode 100644 index 0000000..4dcc629 --- /dev/null +++ b/include/axis2_transport_out_desc.h @@ -0,0 +1,327 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_TRANSPORT_OUT_DESC_H +#define AXIS2_TRANSPORT_OUT_DESC_H + +/** + * @defgroup axis2_transport_out_desc transport out description + * @ingroup axis2_desc + * transport out description represents a transport sender configured in + * Axis2 configuration. There can be multiple transport senders configured + * in axis2.xml file and each of them will be represented with a transport + * out description instance. deployment engine takes care of creating and + * instantiating transport out descriptions. + * transport out description encapsulates flows related to the transport out + * and also holds a reference to related transport sender. + * @{ + */ + +/** + * @file axis2_transport_out_desc.h + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_transport_out_desc */ + typedef struct axis2_transport_out_desc axis2_transport_out_desc_t; + + struct axis2_phase; + struct axis2_transport_sender; + + /** + * Frees transport out description. + * @param transport_out_dec pointer to transport out description + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_transport_out_desc_free( + axis2_transport_out_desc_t * transport_out_desc, + const axutil_env_t * env); + + /** + * Frees transport out description given as a void pointer. + * @param transport_out_dec pointer to transport out description as a + * void pointer + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_transport_out_desc_free_void_arg( + void *transport_out, + const axutil_env_t * env); + + /** + * Gets transport enum. + * @param transport_out pointer to transport_out + * @param env pointer to environment struct + * @return transport enum + */ + AXIS2_EXTERN AXIS2_TRANSPORT_ENUMS AXIS2_CALL + + axis2_transport_out_desc_get_enum( + const axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env); + + /** + * Sets transport enum. + * @param transport_out pointer to transport_out + * @param env pointer to environment struct + * @param trans_enum transport enum + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_transport_out_desc_set_enum( + struct axis2_transport_out_desc *transport_out, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS trans_enum); + + /** + * Gets out flow. Out flow represents the list of phases invoked + * along the sender path. + * @param transport_out pointer to transport_out + * @param env pointer to environment struct + * @return pointer to flow representing out flow, returns a reference, + * not a cloned copy + */ + AXIS2_EXTERN struct axis2_flow *AXIS2_CALL + + axis2_transport_out_desc_get_out_flow( + const axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env); + + /** + * Sets out flow. Out flow represents the list of phases invoked + * along the sender path. + * @param transport_out pointer to transport_out + * @param env pointer to environment struct + * @param out_flow pointer to out flow, transport out description + * assumes ownership of flow + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_transport_out_desc_set_out_flow( + struct axis2_transport_out_desc *transport_out, + const axutil_env_t * env, + struct axis2_flow *out_flow); + + /** + * Gets fault out flow. Fault out flow represents the list of phases + * invoked along the sender path if a fault happens. + * @param transport_out pointer to transport_out + * @param env pointer to environment struct + * @return pointer to flow representing fault out flow + */ + AXIS2_EXTERN struct axis2_flow *AXIS2_CALL + + axis2_transport_out_desc_get_fault_out_flow( + const axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env); + + /** + * Sets fault out flow. Fault out flow represents the list of phases + * invoked along the sender path if a fault happens. + * @param transport_out pointer to transport_out + * @param env pointer to environment struct + * @param fault_out_flow pointer to fault_out_flow + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_transport_out_desc_set_fault_out_flow( + struct axis2_transport_out_desc *transport_out, + const axutil_env_t * env, + struct axis2_flow *fault_out_flow); + + /** + * Gets transport sender. + * @param transport_out pointer to transport_out + * @param env pointer to environment struct + * @return pointer to transport sender associated wit the transport out + * description, returns a reference, not a cloned copy + */ + AXIS2_EXTERN axis2_transport_sender_t *AXIS2_CALL + + axis2_transport_out_desc_get_sender( + const axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env); + + /** + * Sets transport sender. + * @param transport_out pointer to transport_out + * @param env pointer to environment struct + * @param sender pointer to transport sender, transport description + * assumes ownership of sender + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_transport_out_desc_set_sender( + struct axis2_transport_out_desc *transport_out, + const axutil_env_t * env, + axis2_transport_sender_t * sender); + + /** + * Gets transport out phase. + * @param transport_out pointer to transport_out + * @param env pointer to environment struct + * @return pointer to phase representing transport out phase, returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_phase *AXIS2_CALL + + axis2_transport_out_desc_get_out_phase( + const axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env); + + /** + * Sets transport out phase. + * @param transport_out pointer to transport_out + * @param env pointer to environment struct + * @param out_phase pointer to phase representing transport out phase, + * transport out description assumes ownership of phase + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_transport_out_desc_set_out_phase( + struct axis2_transport_out_desc *transport_out, + const axutil_env_t * env, + struct axis2_phase *out_phase); + + /** + * Gets fault phase. + * @param transport_out pointer to transport_out + * @param env pointer to environment struct + * @return pointer to phase representing fault phase, returns a + * reference, not a cloned copy + */ + AXIS2_EXTERN struct axis2_phase *AXIS2_CALL + + axis2_transport_out_desc_get_fault_phase( + const axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env); + + /** + * Sets fault phase. + * @param transport_out pointer to transport_out + * @param env pointer to environment struct + * @param fault_phase pointer to phase representing fault phase, + * transport description assumes ownership of phase + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_transport_out_desc_set_fault_phase( + struct axis2_transport_out_desc *transport_out, + const axutil_env_t * env, + struct axis2_phase *fault_phase); + + /** + * Adds parameter. + * @param transport_out_desc pointer to tarn sport out description + * @param env pointer to environment struct + * @param param pointer to parameter, transport out description assumes + * ownership of parameter + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_transport_out_desc_add_param( + axis2_transport_out_desc_t * transport_out_desc, + const axutil_env_t * env, + axutil_param_t * param); + + /** + * Gets named parameter. + * @param transport_out_desc pointer to transport out description + * @param env pointer to environment struct + * @param param_name parameter name string + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + + axis2_transport_out_desc_get_param( + const axis2_transport_out_desc_t * transport_out_desc, + const axutil_env_t * env, + const axis2_char_t * param_name); + + /** + * Checks if the named parameter is locked. + * @param transport_out_desc pointer to transport out description + * @param env pointer to environment struct + * @param param_name pointer to parameter name + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axis2_transport_out_desc_is_param_locked( + axis2_transport_out_desc_t * transport_out_desc, + const axutil_env_t * env, + const axis2_char_t * param_name); + + AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL + + axis2_transport_out_desc_param_container( + const axis2_transport_out_desc_t * transport_out_desc, + const axutil_env_t * env); + + /** + * Creates transport out description with given transport enum. + * @param env pointer to environment struct + * @param trans_enum pointer to transport enum + * @return pointer to newly created transport out + */ + AXIS2_EXTERN axis2_transport_out_desc_t *AXIS2_CALL + + axis2_transport_out_desc_create( + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS trans_enum); + + /** + * Frees transport out description given as a void pointer. + * @param transport_out_dec pointer to transport out description as a + * void pointer + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_transport_out_desc_free_void_arg( + void *transport_out, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_TRANSPORT_OUT_DESC_H */ diff --git a/include/axis2_transport_receiver.h b/include/axis2_transport_receiver.h new file mode 100644 index 0000000..7af1973 --- /dev/null +++ b/include/axis2_transport_receiver.h @@ -0,0 +1,256 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_TRANSPORT_RECEIVER_H +#define AXIS2_TRANSPORT_RECEIVER_H + +/** + * @defgroup axis2_transport transport + * @ingroup axis2 + * @{ + * @} + */ + +/** @defgroup axis2_transport_receiver transport receiver + * @ingroup axis2_transport + * Description. + * @{ + */ + +/** + * @file axis2_transport_receiver.h + * @brief Axis2 description transport receiver interface + */ + + #include + #include + #include + #include + #include + #include + #include + #include + + +#ifdef __cplusplus +extern "C" +{ +#endif + + struct axis2_conf_ctx; + struct axis2_transport_in_desc; + + /** Type name for axis2_transport_receiver */ + typedef struct axis2_transport_receiver axis2_transport_receiver_t; + + /** Type name for axis2_transport_receiver_ops */ + typedef struct axis2_transport_receiver_ops axis2_transport_receiver_ops_t; + + /** + * @brief Description Transport Receiver ops struct + * Encapsulator struct for ops of axis2_transport_receiver + */ + struct axis2_transport_receiver_ops + { + + /** + * @param transport_receiver pointer to transport receiver + * @param env pointer to environment struct + * @param conf_ctx pointer to configuration context + * @param intrasport_in pointer to transport_in + */ + axis2_status_t(AXIS2_CALL * init)( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env, + struct axis2_conf_ctx * conf_ctx, + struct axis2_transport_in_desc * transport_in); + + /** + * @param transport_receiver + * @param env pointer to environment struct + */ + axis2_status_t(AXIS2_CALL * start)( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env); + + /** + * @param tranport_receiver pointer to transport receiver + * @param env pointer to environment struct + * @param svc_name pointer to service name + */ + axis2_endpoint_ref_t *(AXIS2_CALL * get_reply_to_epr)( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env, + const axis2_char_t * svc_name); + + /** + * @param tranport_receiver pointer to transport receiver + * @param env pointer to environment struct + * @param svc_name pointer to service name + */ + axis2_endpoint_ref_t *(AXIS2_CALL * get_epr_for_service)( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env, + const axis2_char_t * svc_name); + + /** + * @param tranport_receiver pointer to transport receiver + * @param env pointer to environment struct + * @param svc_name pointer to service name + */ + axis2_char_t *(AXIS2_CALL * get_server_ip)( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env); + + /** + * @param tranport_receiver pointer to transport receiver + * @param env pointer to environment struct + * @param svc_name pointer to service name + */ + void (AXIS2_CALL * set_server_ip)( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env, + axis2_char_t * ip); + + /** + * @param server pointer to server + * @param env pointer to environment struct + */ + struct axis2_conf_ctx *(AXIS2_CALL * get_conf_ctx)( + axis2_transport_receiver_t * server, + const axutil_env_t * env); + + /** + * @param server pointer to server + * @param env pointer to environment struct + */ + axis2_bool_t(AXIS2_CALL * is_running)( + axis2_transport_receiver_t * server, + const axutil_env_t * env); + + void(AXIS2_CALL * set_is_application_client_side)( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + axis2_bool_t is_application_client_side); + + /** + * @param transport_receiver pointer to transport receiver + * @param env pointer to environment struct + */ + axis2_status_t(AXIS2_CALL * stop)( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env); + + /** + * De-allocate memory + * @param transport_receiver pointer to transport receiver + * @param env pointer to environment struct + */ + void(AXIS2_CALL * free)( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env); + + }; + + /** + * @brief Transport Receiver struct + */ + struct axis2_transport_receiver + { + const axis2_transport_receiver_ops_t *ops; + }; + + /** Frees the transport receiver. + @sa axis2_transport_receiver#free */ + AXIS2_EXTERN void AXIS2_CALL + axis2_transport_receiver_free( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env); + + /** Initialize the transport receiver. + @sa axis2_transport_receiver#init */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_transport_receiver_init( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env, + struct axis2_conf_ctx *conf_ctx, + struct axis2_transport_in_desc *transport_in); + + /** Start + @sa axis2_transport_receiver#start */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_transport_receiver_start( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env); + + /** Stop. + @sa axis2_transport_receiver#stop */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_transport_receiver_stop( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env); + + /** Get reply to epr. + @sa axis2_transport_receiver#get_reply_to_epr */ + AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL + axis2_transport_receiver_get_reply_to_epr( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env, + const axis2_char_t * svc_name); + + /** Get conf ctx. + @sa axis2_transport_receiver#get_conf_ctx */ + AXIS2_EXTERN struct axis2_conf_ctx *AXIS2_CALL + axis2_transport_receiver_get_conf_ctx( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env); + + /** Is running. + @sa axis2_transport_receiver#is_running */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_transport_receiver_is_running( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + axis2_transport_receiver_set_is_application_client_side( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env, + axis2_bool_t is_application_client_side); + + AXIS2_EXTERN axis2_endpoint_ref_t* AXIS2_CALL + axis2_transport_receiver_get_epr_for_service(axis2_transport_receiver_t *transport_receiver, + const axutil_env_t *env, + const axis2_char_t *svc_name); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_transport_receiver_get_server_ip( + axis2_transport_receiver_t *transport_receiver, + const axutil_env_t *env); + + AXIS2_EXTERN void AXIS2_CALL + axis2_transport_receiver_set_server_ip( + axis2_transport_receiver_t *transport_receiver, + const axutil_env_t *env, + axis2_char_t *serverip); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_TRANSPORT_RECEIVER_H */ diff --git a/include/axis2_transport_sender.h b/include/axis2_transport_sender.h new file mode 100644 index 0000000..70a8586 --- /dev/null +++ b/include/axis2_transport_sender.h @@ -0,0 +1,173 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_TRANSPORT_SENDER_H +#define AXIS2_TRANSPORT_SENDER_H + +/** @defgroup axis2_transport_sender transport sender + * @ingroup axis2_transport + * Description + * @{ + */ + +/** + * @file axis2_transport_sender.h + * @brief Axis2 description transport sender interface + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + struct axis2_transport_out_desc; + struct axis2_ctx; + struct axis2_msg_ctx; + struct axis2_handler; + + /** Type name for struct axis2_transport_sender */ + typedef struct axis2_transport_sender axis2_transport_sender_t; + + /** Type name for struct axis2_transport_sender_ops */ + typedef struct axis2_transport_sender_ops axis2_transport_sender_ops_t; + + /** + * @brief Description Transport Sender ops struct + * Encapsulator struct for ops of axis2_transport_sender + */ + struct axis2_transport_sender_ops + { + + /** + * Initialize + * @param transport_sender pointer to transport sender + * @param env pointer to environment + * @param conf_ctx pointer to configuration context + * @param transport_out pointer to transport_out + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + axis2_status_t( + AXIS2_CALL + * init)( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + struct axis2_conf_ctx * conf_ctx, + struct axis2_transport_out_desc * transport_out); + + /** + * Invoke + * @param transport_sender pointer to transport sender + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + axis2_status_t( + AXIS2_CALL + * invoke)( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx); + + /** + * Clean up + * @param transport_sender pointer to transport sender + * @param env pointer to environmnet struct + * @param msg_ctx pointer to message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + axis2_status_t( + AXIS2_CALL + * cleanup)( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx); + + /** De-allocate memory + * @param transport_sender pointer to transport sender + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + void( + AXIS2_CALL + * free)( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env); + + }; + + /** + * Transport Sender struct + * This send the SOAP Message to other SOAP nodes and this alone write the SOAP + * Message to the wire. Out flow must be end with one of this kind + */ + struct axis2_transport_sender + { + + /** operations of axis transport sender */ + const axis2_transport_sender_ops_t *ops; + }; + + /** + * Creates phase holder struct + * @param env pointer to environment struct + * @return pointer to newly created transport sender + */ + AXIS2_EXTERN axis2_transport_sender_t *AXIS2_CALL + + axis2_transport_sender_create( + const axutil_env_t * env); + + /*************************** Function macros **********************************/ + + /** Frees the axis2 transport sender. + @sa axis2_transport_sender_ops#free */ +#define AXIS2_TRANSPORT_SENDER_FREE(transport_sender, env) \ + ((transport_sender->ops)->free (transport_sender, env)) + + /** Initialize the axis2 transport sender. + @sa axis2_transport_sender_ops#init */ +#define AXIS2_TRANSPORT_SENDER_INIT(transport_sender, env, conf_context, transport_out) \ + ((transport_sender->ops)->init (transport_sender, env, conf_context, transport_out)) + + /** Invoke. + @sa axis2_transport_sender_ops#invoke */ +#define AXIS2_TRANSPORT_SENDER_INVOKE(transport_sender, env, msg_ctx) \ + ((transport_sender->ops)->invoke (transport_sender, env, msg_ctx)) + + /** Cleanup. + @sa axis2_transport_sender_ops#cleanup */ +#define AXIS2_TRANSPORT_SENDER_CLEANUP(transport_sender, env, msg_ctx) \ + ((transport_sender->ops)->cleanup (transport_sender, env, msg_ctx)) + + /*************************** End of function macros ***************************/ + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_TRANSPORT_SENDER_H */ diff --git a/include/axis2_util.h b/include/axis2_util.h new file mode 100644 index 0000000..b600efd --- /dev/null +++ b/include/axis2_util.h @@ -0,0 +1,61 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_UTIL_H +#define AXIS2_UTIL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_UTIL_H */ diff --git a/maven.xml b/maven.xml new file mode 100644 index 0000000..beb6754 --- /dev/null +++ b/maven.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + diff --git a/neethi/AUTHORS b/neethi/AUTHORS new file mode 100644 index 0000000..e69de29 diff --git a/neethi/COPYING b/neethi/COPYING new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/neethi/COPYING @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/neethi/ChangeLog b/neethi/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/neethi/INSTALL b/neethi/INSTALL new file mode 100644 index 0000000..e69de29 diff --git a/neethi/Makefile.am b/neethi/Makefile.am new file mode 100644 index 0000000..32865c7 --- /dev/null +++ b/neethi/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS = src test +includedir=$(prefix)/include/axis2-1.6.0 +include_HEADERS=$(top_builddir)/include/*.h diff --git a/neethi/NEWS b/neethi/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/neethi/README b/neethi/README new file mode 100644 index 0000000..e69de29 diff --git a/neethi/autogen.sh b/neethi/autogen.sh new file mode 100755 index 0000000..1800ea5 --- /dev/null +++ b/neethi/autogen.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +echo -n 'Running libtoolize...' +if [ `uname -s` = Darwin ] +then + LIBTOOLIZE=glibtoolize +else + LIBTOOLIZE=libtoolize +fi + +if $LIBTOOLIZE --force > /dev/null 2>&1; then + + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running aclocal...' +if aclocal > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoheader...' +if autoheader > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoconf...' +if autoconf > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running automake...' +if automake --add-missing > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo 'done' diff --git a/neethi/configure.ac b/neethi/configure.ac new file mode 100644 index 0000000..f3a317c --- /dev/null +++ b/neethi/configure.ac @@ -0,0 +1,73 @@ +dnl run autogen.sh to generate the configure script. + +AC_PREREQ(2.59) + +AC_INIT(neethi-src, 1.6.0) +AC_CANONICAL_SYSTEM +AM_CONFIG_HEADER(config.h) +dnl AM_INIT_AUTOMAKE([tar-ustar]) +AM_INIT_AUTOMAKE +m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])]) +AC_PREFIX_DEFAULT(/usr/local/neethi) + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_CPP +AC_PROG_LIBTOOL +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET + +dnl check for flavours of varargs macros (test from GLib) +AC_MSG_CHECKING(for ISO C99 varargs macros in C) +AC_TRY_COMPILE([],[ +int a(int p1, int p2, int p3); +#define call_a(...) a(1,__VA_ARGS__) +call_a(2,3); +],axis2c_have_iso_c_varargs=yes,axis2c_have_iso_c_varargs=no) +AC_MSG_RESULT($axis2c_have_iso_c_varargs) + +dnl Checks for libraries. +AC_CHECK_LIB(dl, dlopen) + +#CFLAGS="$CFLAGS -ansi -Wall -D_LARGEFILE64_SOURCE -Wno-implicit-function-declaration" +CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE" +if test "$GCC" = "yes"; then + CFLAGS="$CFLAGS -ansi -Wall -Werror -Wno-implicit-function-declaration " +fi + + +dnl Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([stdio.h stdlib.h string.h]) +AC_CHECK_HEADERS([sys/socket.h]) +dnl This is a check to see if we are running MacOS X +dnl It may be better to do a Darwin check +AC_CHECK_HEADER([sys/appleapiopts.h], + [AC_DEFINE([IS_MACOSX],[1],[Define to 1 if compiling on MacOS X])], + []) + +dnl Checks for typedefs, structures, and compiler characteristics. +dnl AC_C_CONST + +dnl Checks for library functions. +dnl AC_FUNC_MALLOC +dnl AC_FUNC_REALLOC +#AC_CHECK_FUNCS([memmove]) + +VERSION_NO="6:0:6" + +AC_SUBST(VERSION_NO) + + +AC_CONFIG_FILES([Makefile \ + src/Makefile \ + src/secpolicy/Makefile \ + src/secpolicy/model/Makefile \ + src/secpolicy/builder/Makefile \ + src/rmpolicy/Makefile \ + test/Makefile + ]) + +AC_OUTPUT diff --git a/neethi/include/axis2_rm_assertion.h b/neethi/include/axis2_rm_assertion.h new file mode 100644 index 0000000..81f612d --- /dev/null +++ b/neethi/include/axis2_rm_assertion.h @@ -0,0 +1,267 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef AXIS2_RM_ASSERTION_H +#define AXIS2_RM_ASSERTION_H + +/** @defgroup axis2_rm_assertion + * @ingroup axis2_rm_assertion + * @{ + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axis2_rm_assertion_t axis2_rm_assertion_t; + + + AXIS2_EXTERN axis2_rm_assertion_t *AXIS2_CALL + axis2_rm_assertion_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + axis2_rm_assertion_free( + axis2_rm_assertion_t * rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_rm_assertion_get_is_sequence_str( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_is_sequence_str( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_bool_t is_sequence_str); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_rm_assertion_get_is_sequence_transport_security( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_is_sequence_transport_security( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_bool_t is_sequence_transport_security); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_rm_assertion_get_is_exactly_once( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_is_exactly_once( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_bool_t is_exactly_once); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_rm_assertion_get_is_atleast_once( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_is_atleast_once( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_bool_t is_atleast_once); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_rm_assertion_get_is_atmost_once( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_is_atmost_once( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_bool_t is_atmost_once); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_rm_assertion_get_is_inorder( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_is_inorder( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_bool_t is_inorder); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_rm_assertion_get_inactivity_timeout( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_inactivity_timeout( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* inactivity_timeout); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_rm_assertion_get_retrans_interval( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_retrans_interval( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* retrans_interval); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_rm_assertion_get_ack_interval( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_ack_interval( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* ack_interval); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_rm_assertion_get_is_exp_backoff( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_is_exp_backoff( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_bool_t is_exp_backoff); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_rm_assertion_get_storage_mgr( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_storage_mgr( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* storage_mgr); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_rm_assertion_get_message_types_to_drop( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_message_types_to_drop( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* message_types_to_drop); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_rm_assertion_get_max_retrans_count( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_max_retrans_count( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* max_retrans_count); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_rm_assertion_get_sender_sleep_time( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_sender_sleep_time( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* sender_sleep_time); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_rm_assertion_get_invoker_sleep_time( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_invoker_sleep_time( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* invoker_sleep_time); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_rm_assertion_get_polling_wait_time( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_polling_wait_time( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* polling_wait_time); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_rm_assertion_get_terminate_delay( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_terminate_delay( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* terminate_delay); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_rm_assertion_get_sandesha2_db( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_sandesha2_db( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* sandesha2_db); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_rm_assertion_get_spec_version( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_rm_assertion_set_spec_version( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* spec_version); + + AXIS2_EXTERN axis2_rm_assertion_t* AXIS2_CALL + axis2_rm_assertion_get_from_policy( + const axutil_env_t *env, + neethi_policy_t *policy); + + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/axis2_rm_assertion_builder.h b/neethi/include/axis2_rm_assertion_builder.h new file mode 100644 index 0000000..276030b --- /dev/null +++ b/neethi/include/axis2_rm_assertion_builder.h @@ -0,0 +1,48 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_RM_ASSERTION_BUILDER_H +#define AXIS2_RM_ASSERTION_BUILDER_H + +/** @defgroup axis2_rm_assertion_builder + * @ingroup axis2_rm_assertion_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + #define RM_SPEC_VERSION_1_0 "Spec_2005_02" + #define RM_SPEC_VERSION_1_1 "Spec_2007_02" + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + axis2_rm_assertion_builder_build( + const axutil_env_t *env, + axiom_node_t *rm_assertion_node, + axiom_element_t *rm_assertion_ele); + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/neethi_all.h b/neethi/include/neethi_all.h new file mode 100644 index 0000000..83c518c --- /dev/null +++ b/neethi/include/neethi_all.h @@ -0,0 +1,81 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NEETHI_ALL_H +#define NEETHI_ALL_H + +/** + * @file neethi_all.h + * @struct for operator all + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct neethi_all_t neethi_all_t; + + AXIS2_EXTERN neethi_all_t *AXIS2_CALL + neethi_all_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + neethi_all_free( + neethi_all_t * neethi_all, + const axutil_env_t * env); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + neethi_all_get_policy_components( + neethi_all_t * neethi_all, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_all_add_policy_components( + neethi_all_t * all, + axutil_array_list_t * arraylist, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_all_add_operator( + neethi_all_t * neethi_all, + const axutil_env_t * env, + neethi_operator_t * op); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + neethi_all_is_empty( + neethi_all_t * all, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_all_serialize( + neethi_all_t * neethi_all, + axiom_node_t * parent, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* NEETHI_ALL_H */ diff --git a/neethi/include/neethi_assertion.h b/neethi/include/neethi_assertion.h new file mode 100644 index 0000000..5a4fa97 --- /dev/null +++ b/neethi/include/neethi_assertion.h @@ -0,0 +1,208 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NEETHI_ASSERTION_H +#define NEETHI_ASSERTION_H + +/** + * @file neethi_assertion.h + * @common struct for policy assertions. + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef enum + { + ASSERTION_TYPE_TRANSPORT_BINDING = 0, + ASSERTION_TYPE_TRANSPORT_TOKEN, + ASSERTION_TYPE_ALGORITHM_SUITE, + ASSERTION_TYPE_INCLUDE_TIMESTAMP, + ASSERTION_TYPE_LAYOUT, + ASSERTION_TYPE_SUPPORTING_TOKENS, + ASSERTION_TYPE_HTTPS_TOKEN, + ASSERTION_TYPE_WSS_USERNAME_TOKEN_10, + ASSERTION_TYPE_WSS_USERNAME_TOKEN_11, + ASSERTION_TYPE_USERNAME_TOKEN, + ASSERTION_TYPE_X509_TOKEN, + ASSERTION_TYPE_SAML_TOKEN, + ASSERTION_TYPE_ISSUED_TOKEN, + ASSERTION_TYPE_SECURITY_CONTEXT_TOKEN, + ASSERTION_TYPE_REQUIRE_EXTERNAL_URI, + ASSERTION_TYPE_SC10_SECURITY_CONTEXT_TOKEN, + ASSERTION_TYPE_SC13_SECURITY_CONTEXT_TOKEN, + ASSERTION_TYPE_ISSUER, + ASSERTION_TYPE_BOOTSTRAP_POLICY, + ASSERTION_TYPE_MUST_SUPPORT_REF_KEY_IDENTIFIER, + ASSERTION_TYPE_MUST_SUPPORT_REF_ISSUER_SERIAL, + ASSERTION_TYPE_MUST_SUPPORT_REF_EXTERNAL_URI, + ASSERTION_TYPE_MUST_SUPPORT_REF_EMBEDDED_TOKEN, + ASSERTION_TYPE_WSS10, + ASSERTION_TYPE_WSS11, + ASSERTION_TYPE_TRUST10, + ASSERTION_TYPE_RAMPART_CONFIG, + ASSERTION_TYPE_ASSYMMETRIC_BINDING, + ASSERTION_TYPE_SYMMETRIC_BINDING, + ASSERTION_TYPE_INITIATOR_TOKEN, + ASSERTION_TYPE_RECIPIENT_TOKEN, + ASSERTION_TYPE_PROTECTION_TOKEN, + ASSERTION_TYPE_ENCRYPTION_TOKEN, + ASSERTION_TYPE_SIGNATURE_TOKEN, + ASSERTION_TYPE_ENCRYPT_BEFORE_SIGNING, + ASSERTION_TYPE_SIGN_BEFORE_ENCRYPTING, + ASSERTION_TYPE_ENCRYPT_SIGNATURE, + ASSERTION_TYPE_PROTECT_TOKENS, + ASSERTION_TYPE_ONLY_SIGN_ENTIRE_HEADERS_AND_BODY, + ASSERTION_TYPE_REQUIRE_KEY_IDENTIFIRE_REFERENCE, + ASSERTION_TYPE_REQUIRE_ISSUER_SERIAL_REFERENCE, + ASSERTION_TYPE_REQUIRE_EMBEDDED_TOKEN_REFERENCE, + ASSERTION_TYPE_REQUIRE_THUMBPRINT_REFERENCE, + ASSERTION_TYPE_REQUIRE_EXTERNAL_REFERENCE, + ASSERTION_TYPE_REQUIRE_INTERNAL_REFERENCE, + ASSERTION_TYPE_MUST_SUPPORT_REF_THUMBPRINT, + ASSERTION_TYPE_MUST_SUPPORT_REF_ENCRYPTED_KEY, + ASSERTION_TYPE_REQUIRE_SIGNATURE_CONFIRMATION, + ASSERTION_TYPE_WSS_X509_V1_TOKEN_10, + ASSERTION_TYPE_WSS_X509_V3_TOKEN_10, + ASSERTION_TYPE_WSS_SAML_V10_TOKEN_V10, + ASSERTION_TYPE_WSS_SAML_V10_TOKEN_V11, + ASSERTION_TYPE_WSS_SAML_V11_TOKEN_V10, + ASSERTION_TYPE_WSS_SAML_V11_TOKEN_V11, + ASSERTION_TYPE_WSS_SAML_V20_TOKEN_V11, + ASSERTION_TYPE_SIGNED_ENCRYPTED_PARTS, + ASSERTION_TYPE_REQUIRE_DERIVED_KEYS_SC10, + ASSERTION_TYPE_REQUIRE_DERIVED_KEYS_SC13, + ASSERTION_TYPE_MUST_SUPPORT_CLIENT_CHALLENGE, + ASSERTION_TYPE_MUST_SUPPORT_SERVER_CHALLENGE, + ASSERTION_TYPE_REQUIRE_CLIENT_ENTROPY, + ASSERTION_TYPE_REQUIRE_SERVER_ENTROPHY, + ASSERTION_TYPE_MUST_SUPPORT_ISSUED_TOKENS, + ASSERTION_TYPE_OPTIMIZED_MIME_SERIALIZATION, + ASSERTION_TYPE_RM_ASSERTION, + ASSERTION_TYPE_UNKNOWN + } neethi_assertion_type_t; + + typedef struct neethi_assertion_t neethi_assertion_t; + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + neethi_assertion_create( + const axutil_env_t * env); + + neethi_assertion_t *AXIS2_CALL + neethi_assertion_create_with_args( + const axutil_env_t * env, + AXIS2_FREE_VOID_ARG free_func, + void *value, + neethi_assertion_type_t type); + + AXIS2_EXTERN void AXIS2_CALL + neethi_assertion_free( + neethi_assertion_t * neethi_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN neethi_assertion_type_t AXIS2_CALL + neethi_assertion_get_type( + neethi_assertion_t * neethi_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN void *AXIS2_CALL + neethi_assertion_get_value( + neethi_assertion_t * neethi_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_assertion_set_value( + neethi_assertion_t * neethi_assertion, + const axutil_env_t * env, + void *value, + neethi_assertion_type_t type); + + AXIS2_EXTERN axiom_element_t *AXIS2_CALL + neethi_assertion_get_element( + neethi_assertion_t * neethi_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_assertion_set_element( + neethi_assertion_t * neethi_assertion, + const axutil_env_t * env, + axiom_element_t * element); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + neethi_assertion_get_is_optional( + neethi_assertion_t * neethi_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_assertion_set_is_optional( + neethi_assertion_t * neethi_assertion, + const axutil_env_t * env, + axis2_bool_t is_optional); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + neethi_assertion_get_policy_components( + neethi_assertion_t * neethi_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_assertion_add_policy_components( + neethi_assertion_t * neethi_assertion, + axutil_array_list_t * arraylist, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_assertion_add_operator( + neethi_assertion_t * neethi_assertion, + const axutil_env_t * env, + neethi_operator_t * op); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + neethi_assertion_is_empty( + neethi_assertion_t * neethi_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + neethi_assertion_get_node( + neethi_assertion_t * neethi_assertion, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_assertion_set_node( + neethi_assertion_t * neethi_assertion, + const axutil_env_t * env, + axiom_node_t * node); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_assertion_serialize( + neethi_assertion_t * assertion, + axiom_node_t * parent, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* NEETHI_ASSERTION_H */ diff --git a/neethi/include/neethi_assertion_builder.h b/neethi/include/neethi_assertion_builder.h new file mode 100644 index 0000000..8014fcd --- /dev/null +++ b/neethi/include/neethi_assertion_builder.h @@ -0,0 +1,46 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NEETHI_ASSERTION_BUILDER_H +#define NEETHI_ASSERTION_BUILDER_H + +/** @defgroup neethi_assertion_builder + * @ingroup neethi_assertion_builder + * @{ + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + neethi_assertion_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/neethi_constants.h b/neethi/include/neethi_constants.h new file mode 100644 index 0000000..6351f00 --- /dev/null +++ b/neethi/include/neethi_constants.h @@ -0,0 +1,87 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NEETHI_CONSTANTS_H +#define NEETHI_CONSTANTS_H + +#define NEETHI_EXACTLYONE "ExactlyOne" +#define NEETHI_ALL "All" +#define NEETHI_POLICY "Policy" +#define NEETHI_REFERENCE "PolicyReference" +#define NEETHI_URI "URI" +#define NEETHI_NAMESPACE "http://schemas.xmlsoap.org/ws/2004/09/policy" +#define NEETHI_POLICY_15_NAMESPACE "http://www.w3.org/ns/ws-policy" +#define NEETHI_PREFIX "wsp" +#define NEETHI_WSU_NS "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" +#define NEETHI_ID "Id" +#define NEETHI_WSU_NS_PREFIX "wsu" +#define NEETHI_NAME "Name" +#define AXIS2_OPTIMIZED_MIME_SERIALIZATION "OptimizedMimeSerialization" +#define AXIS2_MTOM_POLICY_NS "http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization" +#define AXIS2_RM_POLICY_10_NS "http://schemas.xmlsoap.org/ws/2005/02/rm/policy" +#define AXIS2_RM_POLICY_11_NS "http://docs.oasis-open.org/ws-rx/wsrmp/200702" +#define AXIS2_SANDESHA2_NS "http://ws.apache.org/sandesha2/c/policy" + +/* Reliable messaging related constatnts */ + +/* RMPolicy 1.0 */ + +#define AXIS2_RM_RMASSERTION "RMAssertion" +#define AXIS2_RM_INACTIVITY_TIMEOUT "InactivityTimeout" +#define AXIS2_RM_BASE_RETRANSMISSION_INTERVAL "BaseRetransmissionInterval" +#define AXIS2_RM_EXPONENTIAL_BACK_OFF "ExponentialBackoff" +#define AXIS2_RM_ACKNOWLEDGEMENT_INTERVAL "AcknowledgementInterval" + +/* RM policy 1.1 */ + +#define AXIS2_RM_SEQUENCE_STR "SequenceSTR" +#define AXIS2_RM_SEQUENCE_TRANSPORT_SECURITY "SequenceTransportSecurity" +#define AXIS2_RM_DELIVERY_ASSURANCE "DeliveryAssurance" +#define AXIS2_RM_EXACTLY_ONCE "ExactlyOnce" +#define AXIS2_RM_AT_LEAST_ONCE "AtLeastOnce" +#define AXIS2_RM_AT_MOST_ONCE "AtMostOnce" +#define AXIS2_RM_IN_ORDER "InOrder" + +/* Sandesha2/C specific */ + +#define AXIS2_RM_SANDESHA2_DB "sandesha2_db" +#define AXIS2_RM_STORAGE_MANAGER "StorageManager" +#define AXIS2_RM_MESSAGE_TYPES_TO_DROP "MessageTypesToDrop" +#define AXIS2_RM_MAX_RETRANS_COUNT "MaxRetransCount" +#define AXIS2_RM_SENDER_SLEEP_TIME "SenderSleepTime" +#define AXIS2_RM_INVOKER_SLEEP_TIME "InvokerSleepTime" +#define AXIS2_RM_POLLING_WAIT_TIME "PollingWaitTime" +#define AXIS2_RM_TERMINATE_DELAY "TerminateDelay" + + +/** +* @file neethi_constants.h +* @brief includes all the string constants +*/ +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /*NEETHI_INCLUDES_H */ diff --git a/neethi/include/neethi_engine.h b/neethi/include/neethi_engine.h new file mode 100644 index 0000000..4ea34e3 --- /dev/null +++ b/neethi/include/neethi_engine.h @@ -0,0 +1,144 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NEETHI_ENGINE_H +#define NEETHI_ENGINE_H + +/*neethis_engine.c contains all the useful functions + * for dealing with a neethi_policy object + */ + + + +/** + * @file neethi_engine.h + * @contains neethi_policy creation logic. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * Given an axiom model this function will return + * a neethi_policy object. + * @param env pointer to environment struct + * @param node to an axiom_node + * @param node to an axiom_element + * @return pointer to a neethi_policy_t struct + */ + + AXIS2_EXTERN neethi_policy_t *AXIS2_CALL + neethi_engine_get_policy( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + + /** + * Given a neethi_policy object this will return the + * normalized policy object. + * @param env pointer to environment struct + * @param deep to specify whether assertion level normalization + needed. + * @param neethi_policy_t to the policy which is not + normalized. + * @return pointer to a normalized neethi_policy_t struct + */ + + /*This function will return a new neethi_policy struct. + So it is callers responsibility to free the neethi_policy + which is passed as an argument. */ + + AXIS2_EXTERN neethi_policy_t *AXIS2_CALL + neethi_engine_get_normalize( + const axutil_env_t * env, + axis2_bool_t deep, + neethi_policy_t * neethi_policy); + + /** + * Given a neethi_policy object this will return the + * normalized policy object. + * @param env pointer to environment struct + * @param deep to specify whether assertion level normalization + needed. + * @param neethi_policy_t to the policy which is not + normalized. + * @param registry neethi_registry_t struct which contains + policy objects. + * @return pointer to a normalized neethi_policy_t struct + */ + + /*This function will return a new neethi_policy struct. + So it is callers responsibility to free the neethi_policy + which is passed as an argument. */ + + + AXIS2_EXTERN neethi_policy_t *AXIS2_CALL + neethi_engine_normalize( + const axutil_env_t * env, + neethi_policy_t * neethi_policy, + neethi_registry_t * registry, + axis2_bool_t deep); + + /*Givnen to normalized policy objects this function will + retun the merged policy object. + * @param env pointer to environment struct + * @param neethi_policy1 pointer neethi_policy_t struct as an + * input for merge. + * @param neethi_policy2 pointer neethi_policy_t struct as an + * input for merge. + * @return pointer to a merged policy of both inputs.*/ + + /*The input for this function should be two normalized policies + otherwise the output may be wrong.*/ + + AXIS2_EXTERN neethi_policy_t *AXIS2_CALL + neethi_engine_merge( + const axutil_env_t * env, + neethi_policy_t * neethi_policy1, + neethi_policy_t * neethi_policy2); + + /*Given a policy object this function will give the + * corresponding axiom model for that policy object. + * @param policy pointer to the neethi_policy_t struct. + * @param env pointer to environment struct + */ + + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + neethi_engine_serialize( + neethi_policy_t * policy, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* NEETHI_ENGINE_H */ diff --git a/neethi/include/neethi_exactlyone.h b/neethi/include/neethi_exactlyone.h new file mode 100644 index 0000000..fc3d065 --- /dev/null +++ b/neethi/include/neethi_exactlyone.h @@ -0,0 +1,81 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NEETHI_EXACTLYONE_H +#define NEETHI_EXACTLYONE_H + +/** + * @file neethi_exactlyone.h + * @struct for operator exactlyone + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct neethi_exactlyone_t neethi_exactlyone_t; + + AXIS2_EXTERN neethi_exactlyone_t *AXIS2_CALL + neethi_exactlyone_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + neethi_exactlyone_free( + neethi_exactlyone_t * neethi_exactlyone, + const axutil_env_t * env); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + neethi_exactlyone_get_policy_components( + neethi_exactlyone_t * neethi_exactlyone, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_exactlyone_add_policy_components( + neethi_exactlyone_t * exactlyone, + axutil_array_list_t * arraylist, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_exactlyone_add_operator( + neethi_exactlyone_t * neethi_exactlyone, + const axutil_env_t * env, + neethi_operator_t * op); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + neethi_exactlyone_is_empty( + neethi_exactlyone_t * exactlyone, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_exactlyone_serialize( + neethi_exactlyone_t * neethi_exactlyone, + axiom_node_t * parent, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* NEETHI_EXACTLYONE_H */ diff --git a/neethi/include/neethi_includes.h b/neethi/include/neethi_includes.h new file mode 100644 index 0000000..88550af --- /dev/null +++ b/neethi/include/neethi_includes.h @@ -0,0 +1,55 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NEETHI_INCLUDES_H +#define NEETHI_INCLUDES_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** +* @file neethi_includes.h +* @brief includes most useful headers for policy +*/ +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /*NEETHI_INCLUDES_H */ diff --git a/neethi/include/neethi_mtom_assertion_checker.h b/neethi/include/neethi_mtom_assertion_checker.h new file mode 100644 index 0000000..2081f41 --- /dev/null +++ b/neethi/include/neethi_mtom_assertion_checker.h @@ -0,0 +1,43 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NEETHI_MTOM_ASSERTION_CHECKER_H +#define NEETHI_MTOM_ASSERTION_CHECKER_H + + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + neethi_is_mtom_required( + const axutil_env_t *env, + neethi_policy_t *policy); + + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif diff --git a/neethi/include/neethi_operator.h b/neethi/include/neethi_operator.h new file mode 100644 index 0000000..9b38f70 --- /dev/null +++ b/neethi/include/neethi_operator.h @@ -0,0 +1,95 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NEETHI_OPERATOR_H +#define NEETHI_OPERATOR_H + +/** + * @file neethi_operator.h + * @common struct for policy operators. + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef enum + { + OPERATOR_TYPE_POLICY = 0, + OPERATOR_TYPE_ALL, + OPERATOR_TYPE_EXACTLYONE, + OPERATOR_TYPE_REFERENCE, + OPERATOR_TYPE_ASSERTION, + OPERATOR_TYPE_UNKNOWN + } neethi_operator_type_t; + + typedef struct neethi_operator_t neethi_operator_t; + + AXIS2_EXTERN neethi_operator_t *AXIS2_CALL + neethi_operator_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + neethi_operator_free( + neethi_operator_t * neethi_operator, + const axutil_env_t * env); + + AXIS2_EXTERN neethi_operator_type_t AXIS2_CALL + neethi_operator_get_type( + neethi_operator_t * neethi_operator, + const axutil_env_t * env); + + AXIS2_EXTERN void *AXIS2_CALL + neethi_operator_get_value( + neethi_operator_t * neethi_operator, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_operator_set_value( + neethi_operator_t * neethi_operator, + const axutil_env_t * env, + void *value, + neethi_operator_type_t type); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_operator_serialize( + neethi_operator_t * neethi_operator, + const axutil_env_t * env, + axiom_node_t * parent); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_operator_set_value_null( + neethi_operator_t * neethi_operator, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_operator_increment_ref( + neethi_operator_t * neethi_operator, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* NEETHI_OPERATOR_H */ diff --git a/neethi/include/neethi_policy.h b/neethi/include/neethi_policy.h new file mode 100644 index 0000000..bdc2b52 --- /dev/null +++ b/neethi/include/neethi_policy.h @@ -0,0 +1,126 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NEETHI_POLICY_H +#define NEETHI_POLICY_H + +/** + * @file neethi_policy.h + * @struct for operator neethi_policy + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct neethi_policy_t neethi_policy_t; + + AXIS2_EXTERN neethi_policy_t *AXIS2_CALL + neethi_policy_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + neethi_policy_free( + neethi_policy_t * neethi_policy, + const axutil_env_t * env); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + neethi_policy_get_policy_components( + neethi_policy_t * neethi_policy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_policy_add_policy_components( + neethi_policy_t * neethi_policy, + axutil_array_list_t * arraylist, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_policy_add_operator( + neethi_policy_t * neethi_policy, + const axutil_env_t * env, + neethi_operator_t * op); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + neethi_policy_is_empty( + neethi_policy_t * neethi_policy, + const axutil_env_t * env); + + AXIS2_EXTERN neethi_exactlyone_t *AXIS2_CALL + neethi_policy_get_exactlyone( + neethi_policy_t * normalized_neethi_policy, + const axutil_env_t * env); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + neethi_policy_get_alternatives( + neethi_policy_t * neethi_policy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + neethi_policy_get_name( + neethi_policy_t * neethi_policy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_policy_set_name( + neethi_policy_t * neethi_policy, + const axutil_env_t * env, + axis2_char_t * name); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + neethi_policy_get_id( + neethi_policy_t * neethi_policy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_policy_set_id( + neethi_policy_t * neethi_policy, + const axutil_env_t * env, + axis2_char_t * id); + + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + neethi_policy_serialize( + neethi_policy_t * neethi_policy, + axiom_node_t * parent, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_policy_set_root_node( + neethi_policy_t * policy, + const axutil_env_t * env, + axiom_node_t * root_node); + + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + neethi_policy_get_attributes( + neethi_policy_t *neethi_policy, + const axutil_env_t *env); + + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* NEETHI_POLICY_H */ diff --git a/neethi/include/neethi_reference.h b/neethi/include/neethi_reference.h new file mode 100644 index 0000000..42b07c4 --- /dev/null +++ b/neethi/include/neethi_reference.h @@ -0,0 +1,69 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NEETHI_REFERENCE_H +#define NEETHI_REFERENCE_H + +/** + * @file neethi_reference.h + * @struct for operator reference + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct neethi_reference_t neethi_reference_t; + + AXIS2_EXTERN neethi_reference_t *AXIS2_CALL + neethi_reference_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + neethi_reference_free( + neethi_reference_t * neethi_reference, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + neethi_reference_get_uri( + neethi_reference_t * neethi_reference, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_reference_set_uri( + neethi_reference_t * neethi_reference, + const axutil_env_t * env, + axis2_char_t * uri); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_reference_serialize( + neethi_reference_t * neethi_reference, + axiom_node_t * parent, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* NEETHI_REFERENCE_H */ diff --git a/neethi/include/neethi_registry.h b/neethi/include/neethi_registry.h new file mode 100644 index 0000000..fd6e1d1 --- /dev/null +++ b/neethi/include/neethi_registry.h @@ -0,0 +1,71 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NEETHI_REGISTRY_H +#define NEETHI_REGISTRY_H + +/** + * @file neethi_registry.h + * @struct for operator registry + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct neethi_registry_t neethi_registry_t; + + AXIS2_EXTERN neethi_registry_t *AXIS2_CALL + neethi_registry_create( + const axutil_env_t * env); + + AXIS2_EXTERN neethi_registry_t *AXIS2_CALL + neethi_registry_create_with_parent( + const axutil_env_t * env, + neethi_registry_t * parent); + + AXIS2_EXTERN void AXIS2_CALL + neethi_registry_free( + neethi_registry_t * neethi_registry, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + neethi_registry_register( + neethi_registry_t * neethi_registry, + const axutil_env_t * env, + axis2_char_t * key, + neethi_policy_t * value); + + AXIS2_EXTERN neethi_policy_t *AXIS2_CALL + neethi_registry_lookup( + neethi_registry_t * neethi_registry, + const axutil_env_t * env, + axis2_char_t * key); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* NEETHI_REGISTRY_H */ diff --git a/neethi/include/neethi_util.h b/neethi/include/neethi_util.h new file mode 100644 index 0000000..6cdf620 --- /dev/null +++ b/neethi/include/neethi_util.h @@ -0,0 +1,53 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NEETHI_UTIL_H +#define NEETHI_UTIL_H + +/** + * @file neethi_util.h + * @policy creation utilities + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_policy_t *AXIS2_CALL + neethi_util_create_policy_from_file( + const axutil_env_t * env, + axis2_char_t * file_name); + + AXIS2_EXTERN neethi_policy_t *AXIS2_CALL + neethi_util_create_policy_from_om( + const axutil_env_t * env, + axiom_node_t * root_node); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* NEETHI_UTIL_H */ diff --git a/neethi/include/rp_algorithmsuite.h b/neethi/include/rp_algorithmsuite.h new file mode 100644 index 0000000..682abf4 --- /dev/null +++ b/neethi/include/rp_algorithmsuite.h @@ -0,0 +1,218 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_ALGORITHMSUITE_H +#define RP_ALGORITHMSUITE_H + +/** @defgroup rp_algoruthmsuite + * @ingroup rp_algorithmsuite + * @{ + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_algorithmsuite_t rp_algorithmsuite_t; + + AXIS2_EXTERN rp_algorithmsuite_t *AXIS2_CALL + rp_algorithmsuite_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_algorithmsuite_free( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_algorithmsuite_get_algosuite_string( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_algorithmsuite_set_algosuite( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env, + axis2_char_t * algosuite_string); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_algorithmsuite_get_symmetric_signature( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_algorithmsuite_set_symmetric_signature( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env, + axis2_char_t * symmetric_signature); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_algorithmsuite_get_asymmetric_signature( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_algorithmsuite_set_asymmetric_signature( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env, + axis2_char_t * asymmetric_signature); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_algorithmsuite_get_computed_key( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_algorithmsuite_set_computed_key( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env, + axis2_char_t * computed_key); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_algorithmsuite_get_digest( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_algorithmsuite_get_encryption( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN int AXIS2_CALL + rp_algorithmsuite_get_max_symmetric_keylength( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_algorithmsuite_set_max_symmetric_keylength( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env, + int max_symmetric_keylength); + + AXIS2_EXTERN int AXIS2_CALL + rp_algorithmsuite_get_min_symmetric_keylength( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN int AXIS2_CALL + rp_algorithmsuite_get_max_asymmetric_keylength( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_algorithmsuite_set_max_asymmetric_keylength( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env, + int max_asymmetric_keylength); + + AXIS2_EXTERN int AXIS2_CALL + rp_algorithmsuite_get_min_asymmetric_keylength( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_algorithmsuite_set_min_asymmetric_keylength( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env, + int min_asymmetric_keylength); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_algorithmsuite_get_symmetrickeywrap( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_algorithmsuite_get_asymmetrickeywrap( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_algorithmsuite_get_signature_key_derivation( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_algorithmsuite_get_encryption_key_derivation( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_algorithmsuite_get_soap_normalization( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_algorithmsuite_set_soap_normalization( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env, + axis2_char_t * soap_normalization); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_algorithmsuite_get_str_transformation( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_algorithmsuite_set_str_transformation( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env, + axis2_char_t * str_transformation); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_algorithmsuite_get_c14n( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_algorithmsuite_set_c14n( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env, + axis2_char_t * c14n); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_algorithmsuite_get_xpath( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_algorithmsuite_set_xpath( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env, + axis2_char_t * xpath); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_algorithmsuite_increment_ref( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN int AXIS2_CALL + rp_algorithmsuite_get_encryption_derivation_keylength( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + + AXIS2_EXTERN int AXIS2_CALL + rp_algorithmsuite_get_signature_derivation_keylength( + rp_algorithmsuite_t * algorithmsuite, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_algorithmsuite_builder.h b/neethi/include/rp_algorithmsuite_builder.h new file mode 100644 index 0000000..72140b1 --- /dev/null +++ b/neethi/include/rp_algorithmsuite_builder.h @@ -0,0 +1,45 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_ALGORITHMSUITE_BUILDER_H +#define RP_ALGORITHMSUITE_BUILDER_H + +/** @defgroup rp_algorithmsuite_builder + * @ingroup rp_algorithmsuite_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_algorithmsuite_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_asymmetric_binding.h b/neethi/include/rp_asymmetric_binding.h new file mode 100644 index 0000000..d41706d --- /dev/null +++ b/neethi/include/rp_asymmetric_binding.h @@ -0,0 +1,88 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_ASYMMETRIC_BINDING_H +#define RP_ASYMMETRIC_BINDING_H + +/** @defgroup rp_asymmetric_binding + * @ingroup rp_asymmetric_binding + * @{ + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_asymmetric_binding_t rp_asymmetric_binding_t; + + AXIS2_EXTERN rp_asymmetric_binding_t *AXIS2_CALL + rp_asymmetric_binding_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_asymmetric_binding_free( + rp_asymmetric_binding_t * asymmetric_binding, + const axutil_env_t * env); + + AXIS2_EXTERN rp_symmetric_asymmetric_binding_commons_t *AXIS2_CALL + rp_asymmetric_binding_get_symmetric_asymmetric_binding_commons( + rp_asymmetric_binding_t * asymmetric_binding, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_asymmetric_binding_set_symmetric_asymmetric_binding_commons( + rp_asymmetric_binding_t * asymmetric_binding, + const axutil_env_t * env, + rp_symmetric_asymmetric_binding_commons_t * + symmetric_asymmetric_binding_commons); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_asymmetric_binding_set_initiator_token( + rp_asymmetric_binding_t * asymmetric_binding, + const axutil_env_t * env, + rp_property_t * initiator_token); + + AXIS2_EXTERN rp_property_t *AXIS2_CALL + rp_asymmetric_binding_get_initiator_token( + rp_asymmetric_binding_t * asymmetric_binding, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_asymmetric_binding_set_recipient_token( + rp_asymmetric_binding_t * asymmetric_binding, + const axutil_env_t * env, + rp_property_t * recipient_token); + + AXIS2_EXTERN rp_property_t *AXIS2_CALL + rp_asymmetric_binding_get_recipient_token( + rp_asymmetric_binding_t * asymmetric_binding, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_asymmetric_binding_increment_ref( + rp_asymmetric_binding_t * asymmetric_binding, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_asymmetric_binding_builder.h b/neethi/include/rp_asymmetric_binding_builder.h new file mode 100644 index 0000000..ec70175 --- /dev/null +++ b/neethi/include/rp_asymmetric_binding_builder.h @@ -0,0 +1,46 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_ASYMMETRIC_BINDING_BUILDER_H +#define RP_ASYMMETRIC_BINDING_BUILDER_H + +/** @defgroup rp_asymmetric_binding_builder + * @ingroup rp_asymmetric_binding_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + + rp_asymmetric_binding_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_binding_commons.h b/neethi/include/rp_binding_commons.h new file mode 100644 index 0000000..4d7da8a --- /dev/null +++ b/neethi/include/rp_binding_commons.h @@ -0,0 +1,126 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_BINDING_COMMONS_H +#define RP_BINDING_COMMONS_H + +/** @defgroup rp_binding_commons + * @ingroup rp_binding_commons + * @{ + */ +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_binding_commons_t rp_binding_commons_t; + + AXIS2_EXTERN rp_binding_commons_t *AXIS2_CALL + rp_binding_commons_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_binding_commons_free( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env); + + AXIS2_EXTERN rp_algorithmsuite_t *AXIS2_CALL + rp_binding_commons_get_algorithmsuite( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_binding_commons_set_algorithmsuite( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env, + rp_algorithmsuite_t * algorithmsuite); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_binding_commons_get_include_timestamp( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_binding_commons_set_include_timestamp( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env, + axis2_bool_t include_timestamp); + + AXIS2_EXTERN rp_layout_t *AXIS2_CALL + rp_binding_commons_get_layout( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_binding_commons_set_layout( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env, + rp_layout_t * layout); + + AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL + rp_binding_commons_get_signed_supporting_tokens( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_binding_commons_set_signed_supporting_tokens( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env, + rp_supporting_tokens_t * signed_supporting_tokens); + + AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL + rp_binding_commons_get_signed_endorsing_supporting_tokens( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_binding_commons_set_signed_endorsing_supporting_tokens( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env, + rp_supporting_tokens_t * signed_endorsing_supporting_tokens); + + AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL + rp_binding_commons_get_endorsing_supporting_tokens( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_binding_commons_set_endorsing_supporting_tokens( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env, + rp_supporting_tokens_t * endorsing_supporting_tokens); + + AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL + rp_binding_commons_get_supporting_tokens( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_binding_commons_set_supporting_tokens( + rp_binding_commons_t * binding_commons, + const axutil_env_t * env, + rp_supporting_tokens_t * supporting_tokens); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_bootstrap_policy_builder.h b/neethi/include/rp_bootstrap_policy_builder.h new file mode 100644 index 0000000..20b3a0b --- /dev/null +++ b/neethi/include/rp_bootstrap_policy_builder.h @@ -0,0 +1,44 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_BOOTSTRAP_POLICY_BUILDER_H +#define RP_BOOTSTRAP_POLICY_BUILDER_H + +/** @defgroup rp_bootstrap_policy_builder + * @ingroup rp_bootstrap_policy_builder + * @{ + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_bootstrap_policy_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_builders.h b/neethi/include/rp_builders.h new file mode 100644 index 0000000..1903611 --- /dev/null +++ b/neethi/include/rp_builders.h @@ -0,0 +1,64 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_BUILDERS_H +#define RP_BUILDERS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** +* @file rp_builders.h +* @all the secpolicy builders +*/ +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /*RP_BUILDERS_H */ diff --git a/neethi/include/rp_defines.h b/neethi/include/rp_defines.h new file mode 100644 index 0000000..33e218e --- /dev/null +++ b/neethi/include/rp_defines.h @@ -0,0 +1,232 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_DEFINES_H +#define RP_DEFINES_H + +/** @defgroup rp_defines + * @ingroup rp_defines + * @{ + */ +#ifdef __cplusplus +extern "C" +{ +#endif + +#define RP_POLICY "Policy" +#define RP_EXACTLY_ONE "ExactlyOne" +#define RP_ALL "All" + +#define RP_SYMMETRIC_BINDING "SymmetricBinding" +#define RP_ASYMMETRIC_BINDING "AsymmetricBinding" +#define RP_TRANSPORT_BINDING "TransportBinding" + +#define RP_SIGNED_SUPPORTING_TOKENS "SignedSupportingTokens" +#define RP_SIGNED_ENDORSING_SUPPORTING_TOKENS "SignedEndorsingSupportingTokens" +#define RP_SUPPORTING_TOKENS "SupportingTokens" +#define RP_ENDORSING_SUPPORTING_TOKENS "EndorsingSupportingTokens" + +#define RP_SIGNED_PARTS "SignedParts" +#define RP_SIGNED_ELEMENTS "SignedElements" +#define RP_ENCRYPTED_PARTS "EncryptedParts" +#define RP_ENCRYPTED_ELEMENTS "EncryptedElements" +#define RP_SIGNED_ITEMS "SignedItems" +#define RP_ENCRYPTED_ITEMS "EncryptedItems" + +#define RP_BODY "Body" +#define RP_HEADER "Header" +#define RP_NAME "Name" +#define RP_NAMESPACE "Namespace" +#define RP_ELEMENT "Element" +#define RP_ATTACHMENTS "Attachments" + +#define RP_XPATH "XPath" +#define RP_XPATH_VERSION "XPathVersion" + +#define RP_WSS10 "Wss10" +#define RP_WSS11 "Wss11" +#define RP_TRUST10 "Trust10" +#define RP_TRUST13 "Trust13" + +#define RP_MUST_SUPPORT_REF_KEY_IDENTIFIER "MustSupportRefKeyIdentifier" +#define RP_MUST_SUPPORT_REF_ISSUER_SERIAL "MustSupportRefIssuerSerial" +#define RP_MUST_SUPPORT_REF_EXTERNAL_URI "MustSupportRefExternalURI" +#define RP_MUST_SUPPORT_REF_EMBEDDED_TOKEN "MustSupportRefEmbeddedToken" +#define RP_MUST_SUPPORT_REF_THUMBPRINT "MustSupportRefThumbprint" +#define RP_MUST_SUPPORT_REF_ENCRYPTED_KEY "MustSupportRefEncryptedKey" +#define RP_REQUIRE_SIGNATURE_CONFIRMATION "RequireSignatureConfirmation" +#define RP_MUST_SUPPORT_CLIENT_CHALLENGE "MustSupportClientChallenge" +#define RP_MUST_SUPPORT_SERVER_CHALLENGE "MustSupportServerChallenge" +#define RP_REQUIRE_CLIENT_ENTROPY "RequireClientEntropy" +#define RP_REQUIRE_SERVER_ENTROPHY "RequireServerEntropy" +#define RP_MUST_SUPPORT_ISSUED_TOKENS "MustSupportIssuedTokens" + +#define RP_PROTECTION_TOKEN "ProtectionToken" +#define RP_ENCRYPTION_TOKEN "EncryptionToken" +#define RP_SIGNATURE_TOKEN "SignatureToken" +#define RP_INITIATOR_TOKEN "InitiatorToken" +#define RP_RECIPIENT_TOKEN "RecipientToken" +#define RP_TRANSPORT_TOKEN "TransportToken" + +#define RP_ALGORITHM_SUITE "AlgorithmSuite" +#define RP_LAYOUT "Layout" +#define RP_INCLUDE_TIMESTAMP "IncludeTimestamp" +#define RP_ENCRYPT_BEFORE_SIGNING "EncryptBeforeSigning" +#define RP_SIGN_BEFORE_ENCRYPTING "SignBeforeEncrypting" +#define RP_ENCRYPT_SIGNATURE "EncryptSignature" +#define RP_PROTECT_TOKENS "ProtectTokens" +#define RP_ONLY_SIGN_ENTIRE_HEADERS_AND_BODY "OnlySignEntireHeadersAndBody" + +#define RP_ALGO_SUITE_BASIC256 "Basic256" +#define RP_ALGO_SUITE_BASIC192 "Basic192" +#define RP_ALGO_SUITE_BASIC128 "Basic128" +#define RP_ALGO_SUITE_TRIPLE_DES "TripleDes" +#define RP_ALGO_SUITE_BASIC256_RSA15 "Basic256Rsa15" +#define RP_ALGO_SUITE_BASIC192_RSA15 "Basic192Rsa15" +#define RP_ALGO_SUITE_BASIC128_RSA15 "Basic128Rsa15" +#define RP_ALGO_SUITE_TRIPLE_DES_RSA15 "TripleDesRsa15" +#define RP_ALGO_SUITE_BASIC256_SHA256 "Basic256Sha256" +#define RP_ALGO_SUITE_BASIC192_SHA256 "Basic192Sha256" +#define RP_ALGO_SUITE_BASIC128_SHA256 "Basic128Sha256" +#define RP_ALGO_SUITE_TRIPLE_DES_SHA256 "TripleDesSha256" +#define RP_ALGO_SUITE_BASIC256_SHA256_RSA15 "Basic256Sha256Rsa15" +#define RP_ALGO_SUITE_BASIC192_SHA256_RSA15 "Basic192Sha256Rsa15" +#define RP_ALGO_SUITE_BASIC128_SHA256_RSA15 "Basic128Sha256Rsa15" +#define RP_ALGO_SUITE_TRIPLE_DES_SHA256_RSA15 "TripleDesSha256Rsa15" + +#define RP_HMAC_SHA1 "http://www.w3.org/2000/09/xmldsig#hmac-sha1" +#define RP_RSA_SHA1 "http://www.w3.org/2000/09/xmldsig#rsa-sha1" +#define RP_SHA1 "http://www.w3.org/2000/09/xmldsig#sha1" +#define RP_SHA256 "http://www.w3.org/2001/04/xmlenc#sha256" +#define RP_SHA512 "http://www.w3.org/2001/04/xmlenc#sha512" +#define RP_AES128 "http://www.w3.org/2001/04/xmlenc#aes128-cbc" +#define RP_AES192 "http://www.w3.org/2001/04/xmlenc#aes192-cbc" +#define RP_AES256 "http://www.w3.org/2001/04/xmlenc#aes256-cbc" +#define RP_TRIPLE_DES "http://www.w3.org/2001/04/xmlenc#tripledes-cbc" +#define RP_KW_AES128 "http://www.w3.org/2001/04/xmlenc#kw-aes256" +#define RP_KW_AES192 "http://www.w3.org/2001/04/xmlenc#kw-aes192" +#define RP_KW_AES256 "http://www.w3.org/2001/04/xmlenc#kw-aes128" +#define RP_KW_TRIPLE_DES "http://www.w3.org/2001/04/xmlenc#kw-tripledes" +#define RP_KW_RSA_OAEP "http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" +#define RP_KW_RSA15 "http://www.w3.org/2001/04/xmlenc#rsa-1_5" +#define RP_P_SHA1 "http://schemas.xmlsoap.org/ws/2005/02/sc/dk/p_sha1" +#define RP_P_SHA1_L128 "http://schemas.xmlsoap.org/ws/2005/02/sc/dk/p_sha1" +#define RP_P_SHA1_L192 "http://schemas.xmlsoap.org/ws/2005/02/sc/dk/p_sha1" +#define RP_P_SHA1_L256 "http://schemas.xmlsoap.org/ws/2005/02/sc/dk/p_sha1" +#define RP_X_PATH "http://www.w3.org/TR/1999/REC-xpath-19991116" +#define RP_XPATH20 "http://www.w3.org/2002/06/xmldsig-filter2" +#define RP_C14N "http://www.w3.org/2001/10/xml-c14n#" +#define RP_EX_C14N "http://www.w3.org/2001/10/xml-exc-c14n#" +#define RP_SNT "http://www.w3.org/TR/soap12-n11n" +#define RP_STRT10 "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform" +#define RP_INCLUSIVE_C14N "InclusiveC14N" +#define RP_SOAP_NORMALIZATION_10 "SoapNormalization10" +#define RP_STR_TRANSFORM_10 "STRTransform10" +#define RP_XPATH10 "XPath10" +#define RP_XPATH_FILTER20 "XPathFilter20" + +#define RP_LAYOUT_STRICT "Strict" +#define RP_LAYOUT_LAX "Lax" +#define RP_LAYOUT_LAX_TIMESTAMP_FIRST "LaxTimestampFirst" +#define RP_LAYOUT_LAX_TIMESTAMP_LAST "LaxTimestampLast" + +#define RP_USERNAME_TOKEN "UsernameToken" +#define RP_X509_TOKEN "X509Token" +#define RP_SAML_TOKEN "SamlToken" +#define RP_ISSUED_TOKEN "IssuedToken" +#define RP_SECURITY_CONTEXT_TOKEN "SecurityContextToken" +#define RP_SECURE_CONVERSATION_TOKEN "SecureConversationToken" +#define RP_HTTPS_TOKEN "HttpsToken" + +#define RP_INCLUDE_TOKEN "IncludeToken" +#define RP_INCLUDE_ALWAYS "http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Always" +#define RP_INCLUDE_NEVER "http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never" +#define RP_INCLUDE_ONCE "http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Once" +#define RP_INCLUDE_ALWAYS_TO_RECIPIENT "http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" +#define RP_INCLUDE_NEVER_SP12 "http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never" +#define RP_INCLUDE_ONCE_SP12 "http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Once" +#define RP_INCLUDE_ALWAYS_TO_RECIPIENT_SP12 "http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient" +#define RP_INCLUDE_ALWAYS_TO_INITIATOR_SP12 "http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToInitiator" +#define RP_INCLUDE_ALWAYS_SP12 "http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Always" + +#define RP_REQUEST_SEC_TOKEN_TEMPLATE "RequestSecurityTokenTemplate" + +#define RP_REQUIRE_KEY_IDENTIFIRE_REFERENCE "RequireKeyIdentifierReference" +#define RP_REQUIRE_ISSUER_SERIAL_REFERENCE "RequireIssuerSerialReference" +#define RP_REQUIRE_EMBEDDED_TOKEN_REFERENCE "RequireEmbeddedTokenReference" +#define RP_REQUIRE_THUMBPRINT_REFERENCE "RequireThumbprintReference" +#define RP_REQUIRE_DERIVED_KEYS "RequireDerivedKeys" +#define RP_REQUIRE_EXTERNAL_REFERENCE "RequireExternalReference" +#define RP_REQUIRE_INTERNAL_REFERENCE "RequireInternalReference" +#define RP_WSS_X509_V1_TOKEN_10 "WssX509V1Token10" +#define RP_WSS_X509_V3_TOKEN_10 "WssX509V3Token10" +#define RP_WSS_X509_PKCS7_TOKEN_10 "WssX509Pkcs7Token10" +#define RP_WSS_X509_PKI_PATH_V1_TOKEN_10 "WssX509PkiPathV1Token10" +#define RP_WSS_X509_V1_TOKEN_11 "WssX509V1Token11" +#define RP_WSS_X509_V3_TOKEN_11 "WssX509V3Token11" +#define RP_WSS_X509_PKCS7_TOKEN_11 "WssX509Pkcs7Token11" +#define RP_WSS_X509_PKI_PATH_V1_TOKEN_11 "WssX509PkiPathV1Token11" + +#define RP_WSS_USERNAME_TOKEN_10 "WssUsernameToken10" +#define RP_WSS_USERNAME_TOKEN_11 "WssUsernameToken11" + +#define RP_WSS_SAML_V10_TOKEN_V10 "WssSamlV10Token10" +#define RP_WSS_SAML_V11_TOKEN_V10 "WssSamlV11Token10" +#define RP_WSS_SAML_V10_TOKEN_V11 "WssSamlV10Token11" +#define RP_WSS_SAML_V11_TOKEN_V11 "WssSamlV11Token11" +#define RP_WSS_SAML_V20_TOKEN_V11 "WssSamlV20Token11" + +#define RP_REQUIRE_EXTERNAL_URI_REFERENCE "RequireExternalUriReference" +#define RP_SC10_SECURITY_CONTEXT_TOKEN "SC10SecurityContextToken" +#define RP_SC13_SECURITY_CONTEXT_TOKEN "SC13SecurityContextToken" +#define RP_BOOTSTRAP_POLICY "BootstrapPolicy" +#define RP_ISSUER "Issuer" + +#define RP_REQUIRE_CLIENT_CERTIFICATE "RequireClientCertificate" + +#define RP_RAMPART_CONFIG "RampartConfig" +#define RP_USER "User" +#define RP_ENCRYPTION_USER "EncryptionUser" +#define RP_PASSWORD_CALLBACK_CLASS "PasswordCallbackClass" +#define RP_AUTHN_MODULE_NAME "AuthnModuleName" +#define RP_PASSWORD_TYPE "PasswordType" +#define RP_PLAINTEXT "plainText" +#define RP_DIGEST "Digest" +#define RP_RECEIVER_CERTIFICATE "ReceiverCertificate" +#define RP_CERTIFICATE "Certificate" +#define RP_PRIVATE_KEY "PrivateKey" +#define RP_PKCS12_KEY_STORE "PKCS12KeyStore" +#define RP_TIME_TO_LIVE "TimeToLive" +#define RP_CLOCK_SKEW_BUFFER "ClockSkewBuffer" +#define RP_NEED_MILLISECOND_PRECISION "PrecisionInMilliseconds" +#define RP_RD "ReplayDetection" +#define RP_RD_MODULE "ReplayDetectionModule" +#define RP_SCT_MODULE "SecurityContextTokenProvider" + +#define RP_SP_NS_11 "http://schemas.xmlsoap.org/ws/2005/07/securitypolicy" +#define RP_SP_NS_12 "http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" +#define RP_SECURITY_NS "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" +#define RP_POLICY_NS "http://schemas.xmlsoap.org/ws/2004/09/policy" +#define RP_RAMPART_NS "http://ws.apache.org/rampart/c/policy" +#define RP_POLICY_PREFIX "wsp" +#define RP_RAMPART_PREFIX "rampc" +#define RP_SP_PREFIX "sp" + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_element.h b/neethi/include/rp_element.h new file mode 100644 index 0000000..312f647 --- /dev/null +++ b/neethi/include/rp_element.h @@ -0,0 +1,69 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_ELEMENT_H +#define RP_ELEMENT_H + +/** @defgroup rp_element + * @ingroup rp_element + * @{ + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_element_t rp_element_t; + + AXIS2_EXTERN rp_element_t *AXIS2_CALL + rp_element_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_element_free( + rp_element_t * element, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_element_get_name( + rp_element_t * element, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_element_set_name( + rp_element_t * element, + const axutil_env_t * env, + axis2_char_t * name); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_element_get_namespace( + rp_element_t * element, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_element_set_namespace( + rp_element_t * element, + const axutil_env_t * env, + axis2_char_t * nspace); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_encryption_token_builder.h b/neethi/include/rp_encryption_token_builder.h new file mode 100644 index 0000000..56a5fad --- /dev/null +++ b/neethi/include/rp_encryption_token_builder.h @@ -0,0 +1,48 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_ENCRYPTION_TOKEN_BUILDER_H +#define RP_ENCRYPTION_TOKEN_BUILDER_H + +/** @defgroup rp_encryption_token_builder + * @ingroup rp_encryption_token_builder + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_encryption_token_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_header.h b/neethi/include/rp_header.h new file mode 100644 index 0000000..b4d74f7 --- /dev/null +++ b/neethi/include/rp_header.h @@ -0,0 +1,69 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_HEADER_H +#define RP_HEADER_H + +/** @defgroup rp_header + * @ingroup rp_header + * @{ + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_header_t rp_header_t; + + AXIS2_EXTERN rp_header_t *AXIS2_CALL + rp_header_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_header_free( + rp_header_t * header, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_header_get_name( + rp_header_t * header, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_header_set_name( + rp_header_t * header, + const axutil_env_t * env, + axis2_char_t * name); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_header_get_namespace( + rp_header_t * header, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_header_set_namespace( + rp_header_t * header, + const axutil_env_t * env, + axis2_char_t * nspace); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_https_token.h b/neethi/include/rp_https_token.h new file mode 100644 index 0000000..d50effa --- /dev/null +++ b/neethi/include/rp_https_token.h @@ -0,0 +1,85 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_HTTPS_TOKEN_H +#define RP_HTTPS_TOKEN_H + +/** @defgroup rp_https_token + * @ingroup rp_https_token + * @{ + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_https_token_t rp_https_token_t; + + AXIS2_EXTERN rp_https_token_t *AXIS2_CALL + rp_https_token_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_https_token_free( + rp_https_token_t * https_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_https_token_get_inclusion( + rp_https_token_t * https_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_https_token_set_inclusion( + rp_https_token_t * https_token, + const axutil_env_t * env, + axis2_char_t * inclusion); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_https_token_get_derivedkeys( + rp_https_token_t * https_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_https_token_set_derivedkeys( + rp_https_token_t * https_token, + const axutil_env_t * env, + axis2_bool_t derivedkeys); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_https_token_get_require_client_certificate( + rp_https_token_t * https_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_https_token_set_require_client_certificate( + rp_https_token_t * https_token, + const axutil_env_t * env, + axis2_bool_t require_client_certificate); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_https_token_increment_ref( + rp_https_token_t * https_token, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_https_token_builder.h b/neethi/include/rp_https_token_builder.h new file mode 100644 index 0000000..4331ecb --- /dev/null +++ b/neethi/include/rp_https_token_builder.h @@ -0,0 +1,45 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_HTTPS_TOKEN_BUILDER_H +#define RP_HTTPS_TOKEN_BUILDER_H + +/** @defgroup rp_https_token_builder + * @ingroup rp_https_token_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_https_token_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_includes.h b/neethi/include/rp_includes.h new file mode 100644 index 0000000..c479889 --- /dev/null +++ b/neethi/include/rp_includes.h @@ -0,0 +1,52 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_INCLUDES_H +#define RP_INCLUDES_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** +* @file rp_includes.h +* @brief includes most useful headers for RP +*/ +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /*RP_INCLUDES_H */ diff --git a/neethi/include/rp_initiator_token_builder.h b/neethi/include/rp_initiator_token_builder.h new file mode 100644 index 0000000..fbfa17f --- /dev/null +++ b/neethi/include/rp_initiator_token_builder.h @@ -0,0 +1,45 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_INITIATOR_TOKEN_BUILDER_H +#define RP_INITIATOR_TOKEN_BUILDER_H + +/** @defgroup rp_initiator_token_builder + * @ingroup rp_initiator_token_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_initiator_token_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_issued_token.h b/neethi/include/rp_issued_token.h new file mode 100644 index 0000000..dbe05a0 --- /dev/null +++ b/neethi/include/rp_issued_token.h @@ -0,0 +1,124 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_ISSUED_TOKEN_H +#define RP_ISSUED_TOKEN_H + +/** @defgroup trust10 + * @ingroup trust10 + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_issued_token rp_issued_token_t; + + AXIS2_EXTERN rp_issued_token_t * AXIS2_CALL + rp_issued_token_create( + const axutil_env_t *env); + + AXIS2_EXTERN void AXIS2_CALL + rp_issued_token_free( + rp_issued_token_t *issued_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_char_t * AXIS2_CALL + rp_issued_token_get_inclusion( + rp_issued_token_t *issued_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_issued_token_set_inclusion( + rp_issued_token_t *issued_token, + const axutil_env_t *env, + axis2_char_t *inclusion); + + AXIS2_EXTERN axiom_node_t * AXIS2_CALL + rp_issued_token_get_issuer_epr( + rp_issued_token_t *issued_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_issued_token_set_issuer_epr( + rp_issued_token_t *issued_token, + const axutil_env_t *env, + axiom_node_t *issuer_epr); + + AXIS2_EXTERN axiom_node_t * AXIS2_CALL + rp_issued_token_get_requested_sec_token_template( + rp_issued_token_t *issued_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_issued_token_set_requested_sec_token_template( + rp_issued_token_t *issued_token, + const axutil_env_t *env, + axiom_node_t *req_sec_token_template); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_issued_token_get_derivedkeys( + rp_issued_token_t *issued_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_issued_token_set_derivedkeys( + rp_issued_token_t *issued_token, + const axutil_env_t *env, + axis2_bool_t derivedkeys); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_issued_token_get_require_external_reference( + rp_issued_token_t *issued_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_issued_token_set_require_exernal_reference( + rp_issued_token_t *issued_token, + const axutil_env_t *env, + axis2_bool_t require_external_reference); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_issued_token_get_require_internal_reference( + rp_issued_token_t *issued_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_issued_token_set_require_internal_reference( + rp_issued_token_t *issued_token, + const axutil_env_t *env, + axis2_bool_t require_internal_reference); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_issued_token_increment_ref( + rp_issued_token_t *issued_token, + const axutil_env_t *env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_issued_token_builder.h b/neethi/include/rp_issued_token_builder.h new file mode 100644 index 0000000..6ab3862 --- /dev/null +++ b/neethi/include/rp_issued_token_builder.h @@ -0,0 +1,50 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_ISSUED_TOKEN_BUILDER_H +#define RP_ISSUED_TOKEN_BUILDER_H + +/** @defgroup trust10 + * @ingroup trust10 + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t * AXIS2_CALL + rp_issued_token_builder_build(const axutil_env_t *env, + axiom_node_t *node, axiom_element_t *element); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL rp_issued_token_builder_process_alternatives( + const axutil_env_t *env, neethi_all_t *all, + rp_issued_token_t *issued_token); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_layout.h b/neethi/include/rp_layout.h new file mode 100644 index 0000000..7aa1d07 --- /dev/null +++ b/neethi/include/rp_layout.h @@ -0,0 +1,63 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_LAYOUT_H +#define RP_LAYOUT_H + +/** @defgroup rp_layout + * @ingroup rp_layout + * @{ + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_layout_t rp_layout_t; + + AXIS2_EXTERN rp_layout_t *AXIS2_CALL + rp_layout_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_layout_free( + rp_layout_t * layout, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_layout_get_value( + rp_layout_t * layout, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_layout_set_value( + rp_layout_t * layout, + const axutil_env_t * env, + axis2_char_t * value); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_layout_increment_ref( + rp_layout_t * layout, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_layout_builder.h b/neethi/include/rp_layout_builder.h new file mode 100644 index 0000000..f101c06 --- /dev/null +++ b/neethi/include/rp_layout_builder.h @@ -0,0 +1,45 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_LAYOUT_BUILDER_H +#define RP_LAYOUT_BUILDER_H + +/** @defgroup rp_layout_builder + * @ingroup rp_layout_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_layout_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_policy_creator.h b/neethi/include/rp_policy_creator.h new file mode 100644 index 0000000..2cbe834 --- /dev/null +++ b/neethi/include/rp_policy_creator.h @@ -0,0 +1,52 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_POLICY_CREATOR_H +#define RP_POLICY_CREATOR_H + +/** @defgroup rp_policy_creator + * @ingroup rp_policy_creator + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN rp_secpolicy_t *AXIS2_CALL + rp_policy_create_from_file( + const axutil_env_t * env, + axis2_char_t * filename); + + AXIS2_EXTERN rp_secpolicy_t *AXIS2_CALL + rp_policy_create_from_om_node( + const axutil_env_t * env, + axiom_node_t * root); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_property.h b/neethi/include/rp_property.h new file mode 100644 index 0000000..ad90036 --- /dev/null +++ b/neethi/include/rp_property.h @@ -0,0 +1,95 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_PROPERTY_H +#define RP_PROPERTY_H + +/** @defgroup rp_property + * @ingroup rp_property + * @{ + */ +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef enum + { + RP_PROPERTY_USERNAME_TOKEN = 0, + RP_PROPERTY_X509_TOKEN, + RP_PROPERTY_ISSUED_TOKEN, + RP_PROPERTY_SAML_TOKEN, + RP_PROPERTY_SECURITY_CONTEXT_TOKEN, + RP_PROPERTY_HTTPS_TOKEN, + RP_PROPERTY_SYMMETRIC_BINDING, + RP_PROPERTY_ASYMMETRIC_BINDING, + RP_PROPERTY_TRANSPORT_BINDING, + RP_PROPERTY_SIGNED_SUPPORTING_TOKEN, + RP_PROPERTY_SIGNED_ENDORSING_SUPPORTING_TOKEN, + RP_PROPERTY_SUPPORTING_SUPPORTING_TOKEN, + RP_PROPERTY_ENDORSING_SUPPORTING_TOKEN, + RP_PROPERTY_WSS10, + RP_PROPERTY_WSS11, + RP_PROPERTY_SUPPORTING_TOKEN, + RP_PROPERTY_UNKNOWN + } rp_property_type_t; + + typedef struct rp_property_t rp_property_t; + + AXIS2_EXTERN rp_property_t *AXIS2_CALL + rp_property_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_property_free( + rp_property_t * property, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_property_set_value( + rp_property_t * property, + const axutil_env_t * env, + void *value, + rp_property_type_t type); + + AXIS2_EXTERN void *AXIS2_CALL + rp_property_get_value( + rp_property_t * property, + const axutil_env_t * env); + + AXIS2_EXTERN rp_property_type_t AXIS2_CALL + rp_property_get_type( + rp_property_t * property, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_property_increment_ref( + rp_property_t * property, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_protection_token_builder.h b/neethi/include/rp_protection_token_builder.h new file mode 100644 index 0000000..a203047 --- /dev/null +++ b/neethi/include/rp_protection_token_builder.h @@ -0,0 +1,48 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_PROTECTION_TOKEN_BUILDER_H +#define RP_PROTECTION_TOKEN_BUILDER_H + +/** @defgroup rp_protection_token_builder + * @ingroup rp_protection_token_builder + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_protection_token_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_rampart_config.h b/neethi/include/rp_rampart_config.h new file mode 100644 index 0000000..08a2f11 --- /dev/null +++ b/neethi/include/rp_rampart_config.h @@ -0,0 +1,217 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_RAMPART_CONFIG_H +#define RP_RAMPART_CONFIG_H + +/** @defgroup rp_rampart_config + * @ingroup rp_rampart_config + * @{ + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_rampart_config_t rp_rampart_config_t; + + AXIS2_EXTERN rp_rampart_config_t *AXIS2_CALL + rp_rampart_config_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_rampart_config_free( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_user( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_user( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * user); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_encryption_user( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_encryption_user( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * encryption_user); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_password_callback_class( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_password_callback_class( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * passwprd_callback_class); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_authenticate_module( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_authenticate_module( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * authenticate_module); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_replay_detector( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_replay_detector( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * replay_detector); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_sct_provider( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_sct_provider( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * sct_module); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_password_type( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_password_type( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * password_type); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_private_key_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_private_key_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * private_key_file); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_receiver_certificate_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_receiver_certificate_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * receiver_certificate_file); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_certificate_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_certificate_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * certificate_file); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_time_to_live( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_time_to_live( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * time_to_live); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_clock_skew_buffer( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_clock_skew_buffer( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * clock_skew_buffer); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_need_millisecond_precision( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_need_millisecond_precision( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * need_millisecond_precision); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_rd_val( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_rd_val( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * rd_val); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_increment_ref( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_rampart_config_set_pkcs12_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t *env, + axis2_char_t * pkcs12_file); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_rampart_config_get_pkcs12_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_rampart_config_builder.h b/neethi/include/rp_rampart_config_builder.h new file mode 100644 index 0000000..3dcce53 --- /dev/null +++ b/neethi/include/rp_rampart_config_builder.h @@ -0,0 +1,45 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_RAMPART_CONFIG_BUILDER_H +#define RP_RAMPART_CONFIG_BUILDER_H + +/** @defgroup rp_rampart_config_builder + * @ingroup rp_rampart_config_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_rampart_config_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_recipient_token_builder.h b/neethi/include/rp_recipient_token_builder.h new file mode 100644 index 0000000..08ed111 --- /dev/null +++ b/neethi/include/rp_recipient_token_builder.h @@ -0,0 +1,45 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_RECIPIENT_TOKEN_BUILDER_H +#define RP_RECIPIENT_TOKEN_BUILDER_H + +/** @defgroup rp_recipient_token_builder + * @ingroup rp_recipient_token_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_recipient_token_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_saml_token.h b/neethi/include/rp_saml_token.h new file mode 100644 index 0000000..044a5fb --- /dev/null +++ b/neethi/include/rp_saml_token.h @@ -0,0 +1,97 @@ +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SAML_TOKEN_H +#define RP_SAML_TOKEN_H + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_saml_token rp_saml_token_t; + + AXIS2_EXTERN rp_saml_token_t * AXIS2_CALL + rp_saml_token_create( + const axutil_env_t *env); + + AXIS2_EXTERN void AXIS2_CALL + rp_saml_token_free( + rp_saml_token_t *saml_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_char_t * AXIS2_CALL + rp_saml_token_get_inclusion( + rp_saml_token_t *saml_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_saml_token_set_inclusion( + rp_saml_token_t *saml_token, + const axutil_env_t *env, + axis2_char_t * inclusion); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_saml_token_get_derivedkeys( + rp_saml_token_t *saml_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_saml_token_set_derivedkeys( + rp_saml_token_t *saml_token, + const axutil_env_t *env, + axis2_bool_t derivedkeys); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_saml_token_get_require_key_identifier_reference( + rp_saml_token_t * saml_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_saml_token_set_require_key_identifier_reference( + rp_saml_token_t * saml_token, + const axutil_env_t * env, + axis2_bool_t require_key_identifier_reference); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_saml_token_get_token_version_and_type( + rp_saml_token_t * saml_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_saml_token_set_token_version_and_type( + rp_saml_token_t * saml_token, + const axutil_env_t * env, + axis2_char_t * token_version_and_type); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_saml_token_increment_ref( + rp_saml_token_t * saml_token, + const axutil_env_t * env); + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_saml_token_builder.h b/neethi/include/rp_saml_token_builder.h new file mode 100644 index 0000000..5fbb8d9 --- /dev/null +++ b/neethi/include/rp_saml_token_builder.h @@ -0,0 +1,44 @@ +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SAML_TOKEN_BUILDER_H +#define RP_SAML_TOKEN_BUILDER_H + +/** @defgroup rp_saml_token_builder + * @ingroup rp_saml_token_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_saml_token_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_secpolicy.h b/neethi/include/rp_secpolicy.h new file mode 100644 index 0000000..138cc1d --- /dev/null +++ b/neethi/include/rp_secpolicy.h @@ -0,0 +1,213 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SECPOLICY_H +#define RP_SECPOLICY_H + +/** @defgroup rp_secpolicy + * @ingroup rp_secpolicy + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_secpolicy_t rp_secpolicy_t; + + AXIS2_EXTERN rp_secpolicy_t *AXIS2_CALL + rp_secpolicy_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_secpolicy_free( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_secpolicy_set_binding( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_property_t * binding); + + AXIS2_EXTERN rp_property_t *AXIS2_CALL + rp_secpolicy_get_binding( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_secpolicy_set_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_supporting_tokens_t * supporting_tokens); + + AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL + rp_secpolicy_get_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_secpolicy_set_signed_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_supporting_tokens_t * signed_supporting_tokens); + + AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL + rp_secpolicy_get_signed_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_secpolicy_set_endorsing_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_supporting_tokens_t * endorsing_supporting_tokens); + + AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL + rp_secpolicy_get_endorsing_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_secpolicy_set_signed_endorsing_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_supporting_tokens_t * signed_endorsing_supporting_tokens); + + AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL + rp_secpolicy_get_signed_endorsing_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_secpolicy_set_signed_parts( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_signed_encrypted_parts_t * signed_parts); + + AXIS2_EXTERN rp_signed_encrypted_parts_t *AXIS2_CALL + rp_secpolicy_get_signed_parts( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_secpolicy_set_encrypted_parts( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_signed_encrypted_parts_t * encrypted_parts); + + AXIS2_EXTERN rp_signed_encrypted_parts_t *AXIS2_CALL + rp_secpolicy_get_encrypted_parts( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_secpolicy_set_signed_elements( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_signed_encrypted_elements_t * signed_elements); + + AXIS2_EXTERN rp_signed_encrypted_elements_t *AXIS2_CALL + rp_secpolicy_get_signed_elements( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_secpolicy_set_encrypted_elements( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_signed_encrypted_elements_t * encrypted_elements); + + AXIS2_EXTERN rp_signed_encrypted_elements_t *AXIS2_CALL + rp_secpolicy_get_encrypted_elements( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_secpolicy_set_signed_items( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_signed_encrypted_items_t * signed_items); + + AXIS2_EXTERN rp_signed_encrypted_items_t *AXIS2_CALL + rp_secpolicy_get_signed_items( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_secpolicy_set_encrypted_items( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_signed_encrypted_items_t * encrypted_items); + + AXIS2_EXTERN rp_signed_encrypted_items_t *AXIS2_CALL + rp_secpolicy_get_encrypted_items( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_secpolicy_set_wss( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_property_t * wss); + + AXIS2_EXTERN rp_property_t *AXIS2_CALL + rp_secpolicy_get_wss( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_secpolicy_set_rampart_config( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_rampart_config_t * rampart_config); + + AXIS2_EXTERN rp_rampart_config_t *AXIS2_CALL + rp_secpolicy_get_rampart_config( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_secpolicy_set_trust10( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_trust10_t * trust10); + + AXIS2_EXTERN rp_trust10_t *AXIS2_CALL + rp_secpolicy_get_trust10( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_secpolicy_builder.h b/neethi/include/rp_secpolicy_builder.h new file mode 100644 index 0000000..5f32312 --- /dev/null +++ b/neethi/include/rp_secpolicy_builder.h @@ -0,0 +1,44 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SECPOLICY_BUILDER_H +#define RP_SECPOLICY_BUILDER_H + +/** @defgroup rp_secpolicy_builder + * @ingroup rp_secpolicy_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN rp_secpolicy_t *AXIS2_CALL + rp_secpolicy_builder_build( + const axutil_env_t * env, + neethi_policy_t * policy); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_security_context_token.h b/neethi/include/rp_security_context_token.h new file mode 100644 index 0000000..b06b5e0 --- /dev/null +++ b/neethi/include/rp_security_context_token.h @@ -0,0 +1,143 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SECURITY_CONTEXT_TOKEN_H +#define RP_SECURITY_CONTEXT_TOKEN_H + +/** @defgroup rp_security_context_token + * @ingroup rp_security_context_token + * @{ + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_security_context_token_t rp_security_context_token_t; + + AXIS2_EXTERN rp_security_context_token_t *AXIS2_CALL + rp_security_context_token_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_security_context_token_free( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_security_context_token_get_inclusion( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_security_context_token_set_inclusion( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env, + axis2_char_t * inclusion); + + AXIS2_EXTERN derive_key_type_t AXIS2_CALL + rp_security_context_token_get_derivedkey( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_security_context_token_set_derivedkey( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env, + derive_key_type_t derivedkey); + + AXIS2_EXTERN derive_key_version_t AXIS2_CALL + rp_security_context_token_get_derivedkey_version( + rp_security_context_token_t *security_context_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_security_context_token_set_derivedkey_version( + rp_security_context_token_t *security_context_token, + const axutil_env_t *env, + derive_key_version_t version); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_security_context_token_get_require_external_uri_ref( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_security_context_token_set_require_external_uri_ref( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env, + axis2_bool_t require_external_uri_ref); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_security_context_token_get_sc10_security_context_token( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_security_context_token_set_sc10_security_context_token( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env, + axis2_bool_t sc10_security_context_token); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_security_context_token_get_issuer( + rp_security_context_token_t *security_context_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_security_context_token_set_issuer( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env, + axis2_char_t *issuer); + + AXIS2_EXTERN neethi_policy_t *AXIS2_CALL + rp_security_context_token_get_bootstrap_policy( + rp_security_context_token_t *security_context_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_security_context_token_set_bootstrap_policy( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env, + neethi_policy_t *bootstrap_policy); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_security_context_token_get_is_secure_conversation_token( + rp_security_context_token_t *security_context_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_security_context_token_set_is_secure_conversation_token( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env, + axis2_bool_t is_secure_conversation_token); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_security_context_token_increment_ref( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_security_context_token_builder.h b/neethi/include/rp_security_context_token_builder.h new file mode 100644 index 0000000..45e2745 --- /dev/null +++ b/neethi/include/rp_security_context_token_builder.h @@ -0,0 +1,47 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SECURITY_CONTEXT_TOKEN_BUILDER_H +#define RP_SECURITY_CONTEXT_TOKEN_BUILDER_H + +/** @defgroup rp_security_context_token_builder + * @ingroup rp_security_context_token_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_security_context_token_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element, + axis2_char_t *sp_ns_uri, + axis2_bool_t is_secure_conversation_token); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_signature_token_builder.h b/neethi/include/rp_signature_token_builder.h new file mode 100644 index 0000000..13e2b79 --- /dev/null +++ b/neethi/include/rp_signature_token_builder.h @@ -0,0 +1,48 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SIGNATURE_TOKEN_BUILDER_H +#define RP_SIGNATURE_TOKEN_BUILDER_H + +/** @defgroup rp_signature_token_builder + * @ingroup rp_signature_token_builder + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_signature_token_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_signed_encrypted_elements.h b/neethi/include/rp_signed_encrypted_elements.h new file mode 100644 index 0000000..dc44b96 --- /dev/null +++ b/neethi/include/rp_signed_encrypted_elements.h @@ -0,0 +1,86 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SIGNED_ENCRYPTED_ELEMENTS_H +#define RP_SIGNED_ENCRYPTED_ELEMENTS_H + +/** @defgroup rp_signed_encrypted_elements + * @ingroup rp_signed_encrypted_elements + * @{ + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_signed_encrypted_elements_t + rp_signed_encrypted_elements_t; + + AXIS2_EXTERN rp_signed_encrypted_elements_t *AXIS2_CALL + rp_signed_encrypted_elements_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_signed_encrypted_elements_free( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_signed_encrypted_elements_get_signedelements( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_signed_encrypted_elements_set_signedelements( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env, + axis2_bool_t signedelements); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + rp_signed_encrypted_elements_get_xpath_expressions( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_signed_encrypted_elements_add_expression( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env, + axis2_char_t * expression); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_signed_encrypted_elements_get_xpath_version( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_signed_encrypted_elements_set_xpath_version( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env, + axis2_char_t * xpath_version); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_signed_encrypted_elements_increment_ref( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_signed_encrypted_items.h b/neethi/include/rp_signed_encrypted_items.h new file mode 100644 index 0000000..c29b82d --- /dev/null +++ b/neethi/include/rp_signed_encrypted_items.h @@ -0,0 +1,70 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SIGNED_ENCRYPTED_ITEMS_H +#define RP_SIGNED_ENCRYPTED_ITEMS_H + +/** @defgroup rp_signed_encrypted_items + * @ingroup rp_signed_encrypted_itemss + * @{ + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_signed_encrypted_items_t rp_signed_encrypted_items_t; + + AXIS2_EXTERN rp_signed_encrypted_items_t *AXIS2_CALL + rp_signed_encrypted_items_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_signed_encrypted_items_free( + rp_signed_encrypted_items_t * signed_encrypted_items, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_signed_encrypted_items_get_signeditems( + rp_signed_encrypted_items_t * signed_encrypted_items, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_signed_encrypted_items_set_signeditems( + rp_signed_encrypted_items_t * signed_encrypted_items, + const axutil_env_t * env, + axis2_bool_t signeditems); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + rp_signed_encrypted_items_get_elements( + rp_signed_encrypted_items_t * signed_encrypted_items, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_signed_encrypted_items_add_element( + rp_signed_encrypted_items_t * signed_encrypted_items, + const axutil_env_t * env, + rp_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_signed_encrypted_parts.h b/neethi/include/rp_signed_encrypted_parts.h new file mode 100644 index 0000000..3df23a0 --- /dev/null +++ b/neethi/include/rp_signed_encrypted_parts.h @@ -0,0 +1,98 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SIGNED_ENCRYPTED_PARTS_H +#define RP_SIGNED_ENCRYPTED_PARTS_H + +/** @defgroup rp_signed_encrypted_parts + * @ingroup rp_signed_encrypted_parts + * @{ + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_signed_encrypted_parts_t rp_signed_encrypted_parts_t; + + AXIS2_EXTERN rp_signed_encrypted_parts_t *AXIS2_CALL + rp_signed_encrypted_parts_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_signed_encrypted_parts_free( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_signed_encrypted_parts_get_body( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_signed_encrypted_parts_set_body( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env, + axis2_bool_t body); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_signed_encrypted_parts_get_signedparts( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_signed_encrypted_parts_set_signedparts( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env, + axis2_bool_t signedparts); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_signed_encrypted_parts_get_attachments( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_signed_encrypted_parts_set_attachments( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env, + axis2_bool_t attachments); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + rp_signed_encrypted_parts_get_headers( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_signed_encrypted_parts_add_header( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env, + rp_header_t * header); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_signed_encrypted_parts_increment_ref( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_signed_encrypted_parts_builder.h b/neethi/include/rp_signed_encrypted_parts_builder.h new file mode 100644 index 0000000..fa7809e --- /dev/null +++ b/neethi/include/rp_signed_encrypted_parts_builder.h @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SIGNED_ENCRYPTED_PARTS_BUILDER_H +#define RP_SIGNED_ENCRYPTED_PARTS_BUILDER_H + +/** @defgroup rp_signed_encrypted_parts_builder + * @ingroup rp_signed_encrypted_parts_builder + * @{ + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * Builts EncryptedParts or SignedParts assertion + * @param env Pointer to environment struct + * @param node Assertion node + * @param element Assertion element + * @param is_signed boolean showing whether signing or encryption + * @returns neethi assertion created. NULL if failure. + */ + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_signed_encrypted_parts_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element, + axis2_bool_t is_signed); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_supporting_tokens.h b/neethi/include/rp_supporting_tokens.h new file mode 100644 index 0000000..6746454 --- /dev/null +++ b/neethi/include/rp_supporting_tokens.h @@ -0,0 +1,132 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SUPPORTING_TOKENS_H +#define RP_SUPPORTING_TOKENS_H + +/** @defgroup rp_supporting_tokens + * @ingroup rp_supporting_tokens + * @{ + */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_supporting_tokens_t rp_supporting_tokens_t; + + AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL + rp_supporting_tokens_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_supporting_tokens_free( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + rp_supporting_tokens_get_tokens( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_supporting_tokens_add_token( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env, + rp_property_t * token); + + AXIS2_EXTERN rp_algorithmsuite_t *AXIS2_CALL + rp_supporting_tokens_get_algorithmsuite( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_supporting_tokens_set_algorithmsuite( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env, + rp_algorithmsuite_t * algorithmsuite); + + AXIS2_EXTERN rp_signed_encrypted_parts_t *AXIS2_CALL + rp_supporting_tokens_get_signed_parts( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_supporting_tokens_set_signed_parts( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env, + rp_signed_encrypted_parts_t * signed_parts); + + AXIS2_EXTERN rp_signed_encrypted_elements_t *AXIS2_CALL + rp_supporting_tokens_get_signed_elements( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_supporting_tokens_set_signed_elements( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env, + rp_signed_encrypted_elements_t * signed_elements); + + AXIS2_EXTERN rp_signed_encrypted_parts_t *AXIS2_CALL + rp_supporting_tokens_get_encrypted_parts( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_supporting_tokens_set_encrypted_parts( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env, + rp_signed_encrypted_parts_t * encrypted_parts); + + AXIS2_EXTERN rp_signed_encrypted_elements_t *AXIS2_CALL + rp_supporting_tokens_get_encrypted_elements( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_supporting_tokens_set_encrypted_elements( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env, + rp_signed_encrypted_elements_t * encrypted_elements); + + AXIS2_EXTERN int AXIS2_CALL + rp_supporting_tokens_get_type( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_supporting_tokens_set_type( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env, + int type); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_supporting_tokens_increment_ref( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_supporting_tokens_builder.h b/neethi/include/rp_supporting_tokens_builder.h new file mode 100644 index 0000000..f3df32a --- /dev/null +++ b/neethi/include/rp_supporting_tokens_builder.h @@ -0,0 +1,49 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SUPPORTING_TOKEN_BUILDER_H +#define RP_SUPPORTING_TOKEN_BUILDER_H + +/** @defgroup rp_supporting_tokens_builder + * @ingroup rp_supporting_tokens_builder + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_supporting_tokens_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_symmetric_asymmetric_binding_commons.h b/neethi/include/rp_symmetric_asymmetric_binding_commons.h new file mode 100644 index 0000000..0251a1d --- /dev/null +++ b/neethi/include/rp_symmetric_asymmetric_binding_commons.h @@ -0,0 +1,117 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_ASSYMMETRIC_SYMMETRIC_BINDING_COMMONS_H +#define RP_ASSYMMETRIC_SYMMETRIC_BINDING_COMMONS_H + +/** @defgroup rp_assymmetric_symmetric_binding_commons + * @ingroup rp_assymmetric_symmetric_binding_commons + * @{ + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_symmetric_asymmetric_binding_commons_t + rp_symmetric_asymmetric_binding_commons_t; + + AXIS2_EXTERN rp_symmetric_asymmetric_binding_commons_t *AXIS2_CALL + rp_symmetric_asymmetric_binding_commons_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_symmetric_asymmetric_binding_commons_free( + rp_symmetric_asymmetric_binding_commons_t * + symmetric_asymmetric_binding_commons, + const axutil_env_t * env); + + AXIS2_EXTERN rp_binding_commons_t *AXIS2_CALL + rp_symmetric_asymmetric_binding_commons_get_binding_commons( + rp_symmetric_asymmetric_binding_commons_t * + symmetric_asymmetric_binding_commons, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_symmetric_asymmetric_binding_commons_set_binding_commons( + rp_symmetric_asymmetric_binding_commons_t * + symmetric_asymmetric_binding_commons, + const axutil_env_t * env, + rp_binding_commons_t * binding_commons); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_symmetric_asymmetric_binding_commons_get_signature_protection( + rp_symmetric_asymmetric_binding_commons_t * + symmetric_asymmetric_binding_commons, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_symmetric_asymmetric_binding_commons_set_signature_protection( + rp_symmetric_asymmetric_binding_commons_t * + symmetric_asymmetric_binding_commons, + const axutil_env_t * env, + axis2_bool_t signature_protection); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_symmetric_asymmetric_binding_commons_get_token_protection( + rp_symmetric_asymmetric_binding_commons_t * + symmetric_asymmetric_binding_commons, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_symmetric_asymmetric_binding_commons_set_token_protection( + rp_symmetric_asymmetric_binding_commons_t * + symmetric_asymmetric_binding_commons, + const axutil_env_t * env, + axis2_bool_t token_protection); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_symmetric_asymmetric_binding_commons_get_entire_headers_and_body_signatures + ( + rp_symmetric_asymmetric_binding_commons_t * + symmetric_asymmetric_binding_commons, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_symmetric_asymmetric_binding_commons_set_entire_headers_and_body_signatures + ( + rp_symmetric_asymmetric_binding_commons_t * + symmetric_asymmetric_binding_commons, + const axutil_env_t * env, + axis2_bool_t entire_headers_and_body_signatures); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_symmetric_asymmetric_binding_commons_get_protection_order( + rp_symmetric_asymmetric_binding_commons_t * + symmetric_asymmetric_binding_commons, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_symmetric_asymmetric_binding_commons_set_protection_order( + rp_symmetric_asymmetric_binding_commons_t * + symmetric_asymmetric_binding_commons, + const axutil_env_t * env, + axis2_char_t * protection_order); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_symmetric_binding.h b/neethi/include/rp_symmetric_binding.h new file mode 100644 index 0000000..05f412d --- /dev/null +++ b/neethi/include/rp_symmetric_binding.h @@ -0,0 +1,99 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SYMMETRIC_BINDING_H +#define RP_SYMMETRIC_BINDING_H + +/** @defgroup rp_symmetric_binding + * @ingroup rp_symmetric_binding + * @{ + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_symmetric_binding_t rp_symmetric_binding_t; + + AXIS2_EXTERN rp_symmetric_binding_t *AXIS2_CALL + rp_symmetric_binding_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_symmetric_binding_free( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env); + + AXIS2_EXTERN rp_symmetric_asymmetric_binding_commons_t *AXIS2_CALL + rp_symmetric_binding_get_symmetric_asymmetric_binding_commons( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_symmetric_binding_set_symmetric_asymmetric_binding_commons( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env, + rp_symmetric_asymmetric_binding_commons_t * + symmetric_asymmetric_binding_commons); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_symmetric_binding_set_protection_token( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env, + rp_property_t * protection_token); + + AXIS2_EXTERN rp_property_t *AXIS2_CALL + rp_symmetric_binding_get_protection_token( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_symmetric_binding_set_encryption_token( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env, + rp_property_t * encryption_token); + + AXIS2_EXTERN rp_property_t *AXIS2_CALL + rp_symmetric_binding_get_encryption_token( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_symmetric_binding_set_signature_token( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env, + rp_property_t * signature_token); + + AXIS2_EXTERN rp_property_t *AXIS2_CALL + rp_symmetric_binding_get_signature_token( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_symmetric_binding_increment_ref( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_symmetric_binding_builder.h b/neethi/include/rp_symmetric_binding_builder.h new file mode 100644 index 0000000..3f5b669 --- /dev/null +++ b/neethi/include/rp_symmetric_binding_builder.h @@ -0,0 +1,45 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_SYMMETRIC_BINDING_BUILDER_H +#define RP_SYMMETRIC_BINDING_BUILDER_H + +/** @defgroup rp_symmetric_binding_builder + * @ingroup rp_symmetric_binding_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_symmetric_binding_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_token.h b/neethi/include/rp_token.h new file mode 100644 index 0000000..eb3d84e --- /dev/null +++ b/neethi/include/rp_token.h @@ -0,0 +1,134 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_GENERIC_TOKEN_H +#define RP_GENERIC_TOKEN_H + +/** @defgroup rp_token + * @ingroup rp_token + * @{ + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef enum + { + DERIVEKEY_NONE =0, + DERIVEKEY_NEEDED, + DERIVEKEY_IMPLIED, + DERIVEKEY_EXPLICIT + } derive_key_type_t; + + typedef enum + { + DERIVEKEY_VERSION_SC10 =0, + DERIVEKEY_VERSION_SC13 + } derive_key_version_t; + + typedef struct rp_token_t rp_token_t; + + AXIS2_EXTERN rp_token_t *AXIS2_CALL + rp_token_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_token_free( + rp_token_t * token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_token_get_issuer( + rp_token_t * token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_token_set_issuer( + rp_token_t * token, + const axutil_env_t * env, + axis2_char_t * issuer); + + AXIS2_EXTERN derive_key_type_t AXIS2_CALL + rp_token_get_derivedkey_type( + rp_token_t * token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_token_set_derivedkey_type( + rp_token_t * token, + const axutil_env_t * env, + derive_key_type_t derivedkey); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_token_get_is_issuer_name( + rp_token_t * token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_token_set_is_issuer_name( + rp_token_t * token, + const axutil_env_t * env, + axis2_bool_t is_issuer_name); + + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + rp_token_get_claim( + rp_token_t * token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_token_set_claim( + rp_token_t * token, + const axutil_env_t * env, + axiom_node_t *claim); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_token_increment_ref( + rp_token_t * token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_token_set_derive_key_version( + rp_token_t *token, + const axutil_env_t *env, + derive_key_version_t version); + + AXIS2_EXTERN derive_key_version_t AXIS2_CALL + rp_token_get_derive_key_version( + rp_token_t *token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_token_set_inclusion( + rp_token_t *token, + const axutil_env_t *env, + axis2_char_t *inclusion); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_token_get_inclusion( + rp_token_t *token, + const axutil_env_t *env); + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_token_identifier.h b/neethi/include/rp_token_identifier.h new file mode 100644 index 0000000..b4d7d45 --- /dev/null +++ b/neethi/include/rp_token_identifier.h @@ -0,0 +1,46 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_TOKEN_IDENTIFIER_H +#define RP_TOKEN_IDENTIFIER_H + +/** @defgroup rp_token_identifier + * @ingroup rp_token_identifier + * @{ + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_token_identifier_set_token( + rp_property_t * token, + neethi_assertion_t * assertion, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_transport_binding.h b/neethi/include/rp_transport_binding.h new file mode 100644 index 0000000..ac904a6 --- /dev/null +++ b/neethi/include/rp_transport_binding.h @@ -0,0 +1,76 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_TRANSPORT_BINDING_H +#define RP_TRANSPORT_BINDING_H + +/** @defgroup rp_transport_binding + * @ingroup rp_transport_binding + * @{ + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_transport_binding_t rp_transport_binding_t; + + AXIS2_EXTERN rp_transport_binding_t *AXIS2_CALL + rp_transport_binding_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_transport_binding_free( + rp_transport_binding_t * transport_binding, + const axutil_env_t * env); + + AXIS2_EXTERN rp_binding_commons_t *AXIS2_CALL + rp_transport_binding_get_binding_commons( + rp_transport_binding_t * transport_binding, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_transport_binding_set_binding_commons( + rp_transport_binding_t * transport_binding, + const axutil_env_t * env, + rp_binding_commons_t * binding_commons); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_transport_binding_set_transport_token( + rp_transport_binding_t * transport_binding, + const axutil_env_t * env, + rp_property_t * transport_token); + + AXIS2_EXTERN rp_property_t *AXIS2_CALL + rp_transport_binding_get_transport_token( + rp_transport_binding_t * transport_binding, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_transport_binding_increment_ref( + rp_transport_binding_t * tansport_binding, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_transport_binding_builder.h b/neethi/include/rp_transport_binding_builder.h new file mode 100644 index 0000000..566b3aa --- /dev/null +++ b/neethi/include/rp_transport_binding_builder.h @@ -0,0 +1,46 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_TRANSPORT_BINDING_BUILDER_H +#define RP_TRANSPORT_BINDING_BUILDER_H + +/** @defgroup rp_transport_binding_builder + * @ingroup rp_transport_binding_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + + rp_transport_binding_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_transport_token_builder.h b/neethi/include/rp_transport_token_builder.h new file mode 100644 index 0000000..00887b4 --- /dev/null +++ b/neethi/include/rp_transport_token_builder.h @@ -0,0 +1,45 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_TRANSPORT_TOKEN_BUILDER_H +#define RP_TRANSPORT_TOKEN_BUILDER_H + +/** @defgroup rp_transport_token_builder + * @ingroup rp_transport_token_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_transport_token_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_trust10.h b/neethi/include/rp_trust10.h new file mode 100644 index 0000000..d6a68bf --- /dev/null +++ b/neethi/include/rp_trust10.h @@ -0,0 +1,108 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_TRUST10_H +#define RP_TRUST10_H + +/** @defgroup trust10 + * @ingroup trust10 + * @{ + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_trust10_t rp_trust10_t; + + AXIS2_EXTERN rp_trust10_t *AXIS2_CALL + rp_trust10_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_trust10_free( + rp_trust10_t * trust10, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_trust10_get_must_support_client_challenge( + rp_trust10_t * trust10, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_trust10_set_must_support_client_challenge( + rp_trust10_t * trust10, + const axutil_env_t * env, + axis2_bool_t must_support_client_challenge); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_trust10_get_must_support_server_challenge( + rp_trust10_t * trust10, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_trust10_set_must_support_server_challenge( + rp_trust10_t * trust10, + const axutil_env_t * env, + axis2_bool_t must_support_server_challenge); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_trust10_get_require_client_entropy( + rp_trust10_t * trust10, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_trust10_set_require_client_entropy( + rp_trust10_t * trust10, + const axutil_env_t * env, + axis2_bool_t require_client_entropy); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_trust10_get_require_server_entropy( + rp_trust10_t * trust10, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_trust10_set_require_server_entropy( + rp_trust10_t * trust10, + const axutil_env_t * env, + axis2_bool_t require_server_entropy); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_trust10_get_must_support_issued_token( + rp_trust10_t * trust10, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_trust10_set_must_support_issued_token( + rp_trust10_t * trust10, + const axutil_env_t * env, + axis2_bool_t must_support_issued_token); + + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_trust10_increment_ref( + rp_trust10_t * trust10, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_trust10_builder.h b/neethi/include/rp_trust10_builder.h new file mode 100644 index 0000000..443f343 --- /dev/null +++ b/neethi/include/rp_trust10_builder.h @@ -0,0 +1,45 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_TRUST10_BUILDER_H +#define RP_TRUST10_BUILDER_H + +/** @defgroup rp_trust10_builder + * @ingroup rp_trust10_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_trust10_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_username_token.h b/neethi/include/rp_username_token.h new file mode 100644 index 0000000..ce8e99f --- /dev/null +++ b/neethi/include/rp_username_token.h @@ -0,0 +1,138 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_USERNAME_TOKEN_H +#define RP_USERNAME_TOKEN_H + +/** @defgroup rp_username_token + * @ingroup rp_username_token + * @{ + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef enum + { + PASSWORD_PLAIN = 0, + PASSWORD_HASH, + PASSWORD_NONE /* no password will be provided in the user name token */ + } password_type_t; + + typedef struct rp_username_token_t rp_username_token_t; + + AXIS2_EXTERN rp_username_token_t *AXIS2_CALL + rp_username_token_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_username_token_free( + rp_username_token_t * username_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_username_token_get_inclusion( + rp_username_token_t * username_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_username_token_set_inclusion( + rp_username_token_t * username_token, + const axutil_env_t * env, + axis2_char_t * inclusion); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_username_token_get_useUTprofile10( + rp_username_token_t * username_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_username_token_set_useUTprofile10( + rp_username_token_t * username_token, + const axutil_env_t * env, + axis2_bool_t useUTprofile10); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_username_token_get_useUTprofile11( + rp_username_token_t * username_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_username_token_set_useUTprofile11( + rp_username_token_t * username_token, + const axutil_env_t * env, + axis2_bool_t useUTprofile11); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_username_token_get_issuer( + rp_username_token_t * username_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_username_token_set_issuer( + rp_username_token_t * username_token, + const axutil_env_t * env, + axis2_char_t * issuer); + + AXIS2_EXTERN derive_key_type_t AXIS2_CALL + rp_username_token_get_derivedkey_type( + rp_username_token_t * username_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_username_token_set_derivedkey_type( + rp_username_token_t * username_token, + const axutil_env_t * env, + derive_key_type_t derivedkey); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_username_token_get_is_issuer_name( + rp_username_token_t * username_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_username_token_set_is_issuer_name( + rp_username_token_t * username_token, + const axutil_env_t * env, + axis2_bool_t is_issuer_name); + + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + rp_username_token_get_claim( + rp_username_token_t * username_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_username_token_set_claim( + rp_username_token_t * username_token, + const axutil_env_t * env, + axiom_node_t *claim); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_username_token_increment_ref( + rp_username_token_t * username_token, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_username_token_builder.h b/neethi/include/rp_username_token_builder.h new file mode 100644 index 0000000..fb7a268 --- /dev/null +++ b/neethi/include/rp_username_token_builder.h @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_USERNAME_TOKEN_BUILDER_H +#define RP_USERNAME_TOKEN_BUILDER_H + +/** @defgroup rp_username_token_builder + * @ingroup rp_username_token_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_username_token_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_wss10.h b/neethi/include/rp_wss10.h new file mode 100644 index 0000000..e06f68e --- /dev/null +++ b/neethi/include/rp_wss10.h @@ -0,0 +1,96 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_WSS10_H +#define RP_WSS10_H + +/** @defgroup wss10 + * @ingroup wss10 + * @{ + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_wss10_t rp_wss10_t; + + AXIS2_EXTERN rp_wss10_t *AXIS2_CALL + rp_wss10_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_wss10_free( + rp_wss10_t * wss10, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_wss10_get_must_support_ref_key_identifier( + rp_wss10_t * wss10, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_wss10_set_must_support_ref_key_identifier( + rp_wss10_t * wss10, + const axutil_env_t * env, + axis2_bool_t must_support_ref_key_identifier); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_wss10_get_must_support_ref_issuer_serial( + rp_wss10_t * wss10, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_wss10_set_must_support_ref_issuer_serial( + rp_wss10_t * wss10, + const axutil_env_t * env, + axis2_bool_t must_support_ref_issuer_serial); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_wss10_get_must_support_ref_external_uri( + rp_wss10_t * wss10, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_wss10_set_must_support_ref_external_uri( + rp_wss10_t * wss10, + const axutil_env_t * env, + axis2_bool_t must_support_ref_external_uri); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_wss10_get_must_support_ref_embedded_token( + rp_wss10_t * wss10, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_wss10_set_must_support_ref_embedded_token( + rp_wss10_t * wss10, + const axutil_env_t * env, + axis2_bool_t must_support_ref_embedded_token); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_wss10_increment_ref( + rp_wss10_t * wss10, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_wss10_builder.h b/neethi/include/rp_wss10_builder.h new file mode 100644 index 0000000..388f308 --- /dev/null +++ b/neethi/include/rp_wss10_builder.h @@ -0,0 +1,45 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_WSS10_BUILDER_H +#define RP_WSS10_BUILDER_H + +/** @defgroup rp_wss10_builder + * @ingroup rp_wss10_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_wss10_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_wss11.h b/neethi/include/rp_wss11.h new file mode 100644 index 0000000..127867c --- /dev/null +++ b/neethi/include/rp_wss11.h @@ -0,0 +1,129 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_WSS11_H +#define RP_WSS11_H + +/** @defgroup wss11 + * @ingroup wss11 + * @{ + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_wss11_t rp_wss11_t; + + AXIS2_EXTERN rp_wss11_t *AXIS2_CALL + rp_wss11_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_wss11_free( + rp_wss11_t * wss11, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_wss11_get_must_support_ref_key_identifier( + rp_wss11_t * wss11, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_wss11_set_must_support_ref_key_identifier( + rp_wss11_t * wss11, + const axutil_env_t * env, + axis2_bool_t must_support_ref_key_identifier); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_wss11_get_must_support_ref_issuer_serial( + rp_wss11_t * wss11, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_wss11_set_must_support_ref_issuer_serial( + rp_wss11_t * wss11, + const axutil_env_t * env, + axis2_bool_t must_support_ref_issuer_serial); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_wss11_get_must_support_ref_external_uri( + rp_wss11_t * wss11, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_wss11_set_must_support_ref_external_uri( + rp_wss11_t * wss11, + const axutil_env_t * env, + axis2_bool_t must_support_ref_external_uri); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_wss11_get_must_support_ref_embedded_token( + rp_wss11_t * wss11, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_wss11_set_must_support_ref_embedded_token( + rp_wss11_t * wss11, + const axutil_env_t * env, + axis2_bool_t must_support_ref_embedded_token); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_wss11_get_must_support_ref_thumbprint( + rp_wss11_t * wss11, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_wss11_set_must_support_ref_thumbprint( + rp_wss11_t * wss11, + const axutil_env_t * env, + axis2_bool_t must_support_ref_thumbprint); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_wss11_set_must_support_ref_encryptedkey( + rp_wss11_t * wss11, + const axutil_env_t * env, + axis2_bool_t must_support_ref_encryptedkey); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_wss11_get_must_support_ref_encryptedkey( + rp_wss11_t * wss11, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_wss11_set_require_signature_confirmation( + rp_wss11_t * wss11, + const axutil_env_t * env, + axis2_bool_t require_signature_confirmation); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_wss11_get_require_signature_confirmation( + rp_wss11_t * wss11, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_wss11_increment_ref( + rp_wss11_t * wss11, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_wss11_builder.h b/neethi/include/rp_wss11_builder.h new file mode 100644 index 0000000..6e83a5c --- /dev/null +++ b/neethi/include/rp_wss11_builder.h @@ -0,0 +1,45 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_WSS11_BUILDER_H +#define RP_WSS11_BUILDER_H + +/** @defgroup rp_wss11_builder + * @ingroup rp_wss11_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_wss11_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_x509_token.h b/neethi/include/rp_x509_token.h new file mode 100644 index 0000000..7263a15 --- /dev/null +++ b/neethi/include/rp_x509_token.h @@ -0,0 +1,142 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_X509_TOKEN_H +#define RP_X509_TOKEN_H + +/** @defgroup rp_x509_token + * @ingroup rp_x509_token + * @{ + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct rp_x509_token_t rp_x509_token_t; + + AXIS2_EXTERN rp_x509_token_t *AXIS2_CALL + rp_x509_token_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + rp_x509_token_free( + rp_x509_token_t * x509_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_x509_token_get_inclusion( + rp_x509_token_t * x509_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_x509_token_set_inclusion( + rp_x509_token_t * x509_token, + const axutil_env_t * env, + axis2_char_t * inclusion); + + AXIS2_EXTERN derive_key_type_t AXIS2_CALL + rp_x509_token_get_derivedkey( + rp_x509_token_t * x509_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_x509_token_set_derivedkey( + rp_x509_token_t * x509_token, + const axutil_env_t * env, + derive_key_type_t derivedkeys); + + AXIS2_EXTERN derive_key_version_t AXIS2_CALL + rp_x509_token_get_derivedkey_version( + rp_x509_token_t *x509_token, + const axutil_env_t *env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_x509_token_set_derivedkey_version( + rp_x509_token_t *x509_token, + const axutil_env_t *env, + derive_key_version_t version); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_x509_token_get_require_key_identifier_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_x509_token_set_require_key_identifier_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env, + axis2_bool_t require_key_identifier_reference); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_x509_token_get_require_issuer_serial_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_x509_token_set_require_issuer_serial_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env, + axis2_bool_t require_issuer_serial_reference); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_x509_token_get_require_embedded_token_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_x509_token_set_require_embedded_token_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env, + axis2_bool_t require_embedded_token_reference); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + rp_x509_token_get_require_thumb_print_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_x509_token_set_require_thumb_print_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env, + axis2_bool_t require_thumb_print_reference); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + rp_x509_token_get_token_version_and_type( + rp_x509_token_t * x509_token, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_x509_token_set_token_version_and_type( + rp_x509_token_t * x509_token, + const axutil_env_t * env, + axis2_char_t * token_version_and_type); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + rp_x509_token_increment_ref( + rp_x509_token_t * x509_token, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/include/rp_x509_token_builder.h b/neethi/include/rp_x509_token_builder.h new file mode 100644 index 0000000..ca5d11e --- /dev/null +++ b/neethi/include/rp_x509_token_builder.h @@ -0,0 +1,45 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RP_X509_TOKEN_BUILDER_H +#define RP_X509_TOKEN_BUILDER_H + +/** @defgroup rp_x509_token_builder + * @ingroup rp_x509_token_builder + * @{ + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL + rp_x509_token_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/neethi/src/Makefile.am b/neethi/src/Makefile.am new file mode 100644 index 0000000..12bff83 --- /dev/null +++ b/neethi/src/Makefile.am @@ -0,0 +1,53 @@ +SUBDIRS = secpolicy rmpolicy +lib_LTLIBRARIES=libneethi.la + +libneethi_la_SOURCES= all.c \ + assertion.c \ + engine.c \ + exactlyone.c \ + operator.c \ + policy.c \ + reference.c \ + registry.c \ + assertion_builder.c \ + mtom_assertion_checker.c \ + util.c + +libneethi_la_LIBADD = ../../axiom/src/om/libaxis2_axiom.la \ + ../../util/src/libaxutil.la \ + secpolicy/builder/librp_builder.la \ + secpolicy/model/librp_model.la \ + rmpolicy/librm_policy.la + +#libneethi_LIBADD=$(top_builddir)/src/core/description/libaxis2_description.la \ +# $(top_builddir)/src/core/receivers/libaxis2_receivers.la \ +# $(top_builddir)/src/core/deployment/libaxis2_deployment.la \ +# $(top_builddir)/src/core/context/libaxis2_context.la \ +# $(top_builddir)/src/core/addr/libaxis2_addr.la \ +# $(top_builddir)/src/core/clientapi/libaxis2_clientapi.la \ +# $(top_builddir)/src/core/phaseresolver/libaxis2_phaseresolver.la \ +# $(top_builddir)/src/core/util/libaxis2_core_utils.la \ +# $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la \ +# $(top_builddir)/src/core/transport/http/util/libaxis2_http_util.la \ +# $(top_builddir)/util/src/libaxutil.la \ +# $(top_builddir)/axiom/src/om/libaxis2_axiom.la + + +libneethi_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I ../../util/include \ + -I ../../axiom/include \ + -I ../../include + +# -I$(top_builddir)/src/wsdl \ +# -I$(top_builddir)/src/core/description \ +# -I$(top_builddir)/src/core/engine \ +# -I$(top_builddir)/src/core/phaseresolver \ +# -I$(top_builddir)/src/core/deployment \ +# -I$(top_builddir)/src/core/context \ +# -I$(top_builddir)/src/core/util \ +# -I$(top_builddir)/src/core/clientapi \ +# -I$(top_builddir)/util/include \ +# -I$(top_builddir)/axiom/include + diff --git a/neethi/src/all.c b/neethi/src/all.c new file mode 100644 index 0000000..780cd3f --- /dev/null +++ b/neethi/src/all.c @@ -0,0 +1,183 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct neethi_all_t +{ + axutil_array_list_t *policy_components; +}; + +AXIS2_EXTERN neethi_all_t *AXIS2_CALL +neethi_all_create( + const axutil_env_t *env) +{ + neethi_all_t *neethi_all = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + neethi_all = (neethi_all_t *)AXIS2_MALLOC(env->allocator, sizeof(neethi_all_t)); + + if(neethi_all == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_all->policy_components = NULL; + + neethi_all->policy_components = axutil_array_list_create(env, 0); + if(!(neethi_all->policy_components)) + { + neethi_all_free(neethi_all, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + return neethi_all; +} + +AXIS2_EXTERN void AXIS2_CALL +neethi_all_free( + neethi_all_t *neethi_all, + const axutil_env_t *env) +{ + if(neethi_all) + { + if(neethi_all->policy_components) + { + int i = 0; + int size = 0; + + size = axutil_array_list_size(neethi_all->policy_components, env); + + for(i = 0; i < size; i++) + { + neethi_operator_t *operator = NULL; + operator = (neethi_operator_t *)axutil_array_list_get( + neethi_all->policy_components, env, i); + if(operator) + { + neethi_operator_free(operator, env); + operator = NULL; + } + operator = NULL; + } + axutil_array_list_free(neethi_all->policy_components, env); + neethi_all->policy_components = NULL; + } + AXIS2_FREE(env->allocator, neethi_all); + neethi_all = NULL; + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +neethi_all_get_policy_components( + neethi_all_t *neethi_all, + const axutil_env_t *env) +{ + return neethi_all->policy_components; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_all_add_policy_components( + neethi_all_t *all, + axutil_array_list_t *arraylist, + const axutil_env_t *env) +{ + + int size = axutil_array_list_size(arraylist, env); + int i = 0; + + if(axutil_array_list_ensure_capacity(all->policy_components, env, size + 1) != AXIS2_SUCCESS) + return AXIS2_FAILURE; + + for(i = 0; i < size; i++) + { + void *value = NULL; + value = axutil_array_list_get(arraylist, env, i); + neethi_operator_increment_ref((neethi_operator_t *)value, env); + axutil_array_list_add(all->policy_components, env, value); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_all_add_operator( + neethi_all_t *neethi_all, + const axutil_env_t *env, + neethi_operator_t *operator) +{ + neethi_operator_increment_ref(operator, env); + axutil_array_list_add(neethi_all->policy_components, env, operator); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +neethi_all_is_empty( + neethi_all_t *all, + const axutil_env_t *env) +{ + return axutil_array_list_is_empty(all->policy_components, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_all_serialize( + neethi_all_t *neethi_all, + axiom_node_t *parent, + const axutil_env_t *env) +{ + axiom_node_t *all_node = NULL; + axiom_element_t *all_ele = NULL; + axiom_namespace_t *policy_ns = NULL; + axutil_array_list_t *components = NULL; + + policy_ns = axiom_namespace_create(env, NEETHI_NAMESPACE, NEETHI_PREFIX); + all_ele = axiom_element_create(env, parent, NEETHI_ALL, policy_ns, &all_node); + if(!all_node) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Neethi 'all' node creation failed. Cannot serialize 'all' assertion"); + return AXIS2_FAILURE; + } + + components = neethi_all_get_policy_components(neethi_all, env); + if(components) + { + axis2_status_t status = AXIS2_FAILURE; + int i = 0; + for(i = 0; i < axutil_array_list_size(components, env); i++) + { + neethi_operator_t *operator = NULL; + operator = (neethi_operator_t *)axutil_array_list_get(components, env, i); + if(operator) + { + status = neethi_operator_serialize(operator, env, all_node); + if(status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Neethi operator serialization failed. Cannot serialize 'all' assertion"); + return AXIS2_FAILURE; + } + } + } + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/assertion.c b/neethi/src/assertion.c new file mode 100644 index 0000000..29c70be --- /dev/null +++ b/neethi/src/assertion.c @@ -0,0 +1,424 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct neethi_assertion_t +{ + void *value; + neethi_assertion_type_t type; + axutil_array_list_t *policy_components; + axiom_element_t *element; + axiom_node_t *node; + axis2_bool_t is_optional; + AXIS2_FREE_VOID_ARG free_func; +}; + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +neethi_assertion_create( + const axutil_env_t *env) +{ + neethi_assertion_t *neethi_assertion = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + neethi_assertion = (neethi_assertion_t *)AXIS2_MALLOC(env->allocator, + sizeof(neethi_assertion_t)); + + if(neethi_assertion == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_assertion->policy_components = NULL; + + neethi_assertion->policy_components = axutil_array_list_create(env, 0); + if(!(neethi_assertion->policy_components)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_assertion->value = NULL; + neethi_assertion->type = ASSERTION_TYPE_UNKNOWN; + neethi_assertion->element = NULL; + neethi_assertion->is_optional = AXIS2_FALSE; + neethi_assertion->node = NULL; + neethi_assertion->free_func = 0; + + return neethi_assertion; +} + +neethi_assertion_t *AXIS2_CALL +neethi_assertion_create_with_args( + const axutil_env_t *env, + AXIS2_FREE_VOID_ARG free_func, + void *value, + neethi_assertion_type_t type) +{ + neethi_assertion_t *neethi_assertion = NULL; + neethi_assertion = (neethi_assertion_t *)AXIS2_MALLOC(env->allocator, + sizeof(neethi_assertion_t)); + + if(!neethi_assertion) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Neethi assertion creation failed. Out of memory"); + return NULL; + } + + neethi_assertion->policy_components = NULL; + neethi_assertion->policy_components = axutil_array_list_create(env, 0); + if(!(neethi_assertion->policy_components)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Neethi assertion policy components creation failed."); + return NULL; + } + + /* This ref count is for asertions which are represented from a struct. + * These assertion structs are more probably referenced from some other + * struct. So we need to increment the ref count in order to prevent + * unnecessary memory freeing */ + + if(type == ASSERTION_TYPE_X509_TOKEN) + { + rp_x509_token_increment_ref((rp_x509_token_t *)value, env); + } + else if(type == ASSERTION_TYPE_SECURITY_CONTEXT_TOKEN) + { + rp_security_context_token_increment_ref((rp_security_context_token_t *)value, env); + } + else if(type == ASSERTION_TYPE_INITIATOR_TOKEN) + { + rp_property_increment_ref((rp_property_t *)value, env); + } + else if(type == ASSERTION_TYPE_RECIPIENT_TOKEN) + { + rp_property_increment_ref((rp_property_t *)value, env); + } + else if(type == ASSERTION_TYPE_PROTECTION_TOKEN) + { + rp_property_increment_ref((rp_property_t *)value, env); + } + else if(type == ASSERTION_TYPE_ENCRYPTION_TOKEN) + { + rp_property_increment_ref((rp_property_t *)value, env); + } + else if(type == ASSERTION_TYPE_TRANSPORT_TOKEN) + { + rp_property_increment_ref((rp_property_t *)value, env); + } + else if(type == ASSERTION_TYPE_SIGNATURE_TOKEN) + { + rp_property_increment_ref((rp_property_t *)value, env); + } + else if(type == ASSERTION_TYPE_LAYOUT) + { + rp_layout_increment_ref((rp_layout_t *)value, env); + } + else if(type == ASSERTION_TYPE_ALGORITHM_SUITE) + { + rp_algorithmsuite_increment_ref((rp_algorithmsuite_t *)value, env); + } + else if(type == ASSERTION_TYPE_WSS10) + { + rp_wss10_increment_ref((rp_wss10_t *)value, env); + } + else if(type == ASSERTION_TYPE_WSS11) + { + rp_wss11_increment_ref((rp_wss11_t *)value, env); + } + else if(type == ASSERTION_TYPE_TRUST10) + { + rp_trust10_increment_ref((rp_trust10_t *)value, env); + } + else if(type == ASSERTION_TYPE_SUPPORTING_TOKENS) + { + rp_supporting_tokens_increment_ref((rp_supporting_tokens_t *)value, env); + } + else if(type == ASSERTION_TYPE_USERNAME_TOKEN) + { + rp_username_token_increment_ref((rp_username_token_t *)value, env); + } + else if(type == ASSERTION_TYPE_ASSYMMETRIC_BINDING) + { + rp_asymmetric_binding_increment_ref((rp_asymmetric_binding_t *)value, env); + } + else if(type == ASSERTION_TYPE_SYMMETRIC_BINDING) + { + rp_symmetric_binding_increment_ref((rp_symmetric_binding_t *)value, env); + } + else if(type == ASSERTION_TYPE_TRANSPORT_BINDING) + { + rp_transport_binding_increment_ref((rp_transport_binding_t *)value, env); + } + else if(type == ASSERTION_TYPE_SIGNED_ENCRYPTED_PARTS) + { + rp_signed_encrypted_parts_increment_ref((rp_signed_encrypted_parts_t *)value, env); + } + else if(type == ASSERTION_TYPE_RAMPART_CONFIG) + { + rp_rampart_config_increment_ref((rp_rampart_config_t *)value, env); + } + else if(type == ASSERTION_TYPE_ISSUED_TOKEN) + { + rp_issued_token_increment_ref((rp_issued_token_t *)value, env); + } + else if(type == ASSERTION_TYPE_SAML_TOKEN) + { + rp_saml_token_increment_ref((rp_saml_token_t *)value, env); + } + + neethi_assertion->value = value; + neethi_assertion->type = type; + neethi_assertion->element = NULL; + neethi_assertion->is_optional = AXIS2_FALSE; + neethi_assertion->node = NULL; + neethi_assertion->free_func = free_func; + + return neethi_assertion; +} + +AXIS2_EXTERN void AXIS2_CALL +neethi_assertion_free( + neethi_assertion_t *neethi_assertion, + const axutil_env_t *env) +{ + if(neethi_assertion) + { + if(neethi_assertion->policy_components) + { + int i = 0; + for(i = 0; i < axutil_array_list_size(neethi_assertion->policy_components, env); i++) + { + neethi_operator_t *operator = NULL; + operator = (neethi_operator_t *)axutil_array_list_get( + neethi_assertion->policy_components, env, i); + if(operator) + neethi_operator_free(operator, env); + + operator = NULL; + } + axutil_array_list_free(neethi_assertion->policy_components, env); + neethi_assertion->policy_components = NULL; + } + if(neethi_assertion->value) + { + if(neethi_assertion->free_func) + { + neethi_assertion->free_func(neethi_assertion->value, env); + } + } + AXIS2_FREE(env->allocator, neethi_assertion); + neethi_assertion = NULL; + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN neethi_assertion_type_t AXIS2_CALL +neethi_assertion_get_type( + neethi_assertion_t *neethi_assertion, + const axutil_env_t *env) +{ + return neethi_assertion->type; +} + +AXIS2_EXTERN void *AXIS2_CALL +neethi_assertion_get_value( + neethi_assertion_t *neethi_assertion, + const axutil_env_t *env) +{ + return neethi_assertion->value; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_assertion_set_value( + neethi_assertion_t *neethi_assertion, + const axutil_env_t *env, + void *value, + neethi_assertion_type_t type) +{ + neethi_assertion->type = type; + if(type == ASSERTION_TYPE_X509_TOKEN) + { + rp_x509_token_increment_ref((rp_x509_token_t *)value, env); + } + neethi_assertion->value = (void *)value; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_element_t *AXIS2_CALL +neethi_assertion_get_element( + neethi_assertion_t *neethi_assertion, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return neethi_assertion->element; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_assertion_set_element( + neethi_assertion_t *neethi_assertion, + const axutil_env_t *env, + axiom_element_t *element) +{ + neethi_assertion->element = element; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +neethi_assertion_get_node( + neethi_assertion_t *neethi_assertion, + const axutil_env_t *env) +{ + return neethi_assertion->node; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_assertion_set_node( + neethi_assertion_t *neethi_assertion, + const axutil_env_t *env, + axiom_node_t * node) +{ + if(neethi_assertion->node) + { + axiom_node_free_tree(neethi_assertion->node, env); + neethi_assertion->node = NULL; + } + + if(node) + { + neethi_assertion->node = axiom_util_clone_node(env, node); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +neethi_assertion_get_is_optional( + neethi_assertion_t *neethi_assertion, + const axutil_env_t *env) +{ + return neethi_assertion->is_optional; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_assertion_set_is_optional( + neethi_assertion_t *neethi_assertion, + const axutil_env_t *env, + axis2_bool_t is_optional) +{ + neethi_assertion->is_optional = is_optional; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +neethi_assertion_get_policy_components( + neethi_assertion_t *neethi_assertion, + const axutil_env_t *env) +{ + return neethi_assertion->policy_components; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_assertion_add_policy_components( + neethi_assertion_t *neethi_assertion, + axutil_array_list_t *arraylist, + const axutil_env_t *env) +{ + + int size = axutil_array_list_size(arraylist, env); + int i = 0; + + if(axutil_array_list_ensure_capacity(neethi_assertion->policy_components, env, size + 1) + != AXIS2_SUCCESS) + return AXIS2_FAILURE; + + for(i = 0; i < size; i++) + { + void *value = NULL; + value = axutil_array_list_get(arraylist, env, i); + neethi_operator_increment_ref((neethi_operator_t *)value, env); + axutil_array_list_add(neethi_assertion->policy_components, env, value); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_assertion_add_operator( + neethi_assertion_t *neethi_assertion, + const axutil_env_t *env, + neethi_operator_t *operator) +{ + neethi_operator_increment_ref(operator, env); + axutil_array_list_add(neethi_assertion->policy_components, env, operator); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +neethi_assertion_is_empty( + neethi_assertion_t *neethi_assertion, + const axutil_env_t *env) +{ + return axutil_array_list_is_empty(neethi_assertion->policy_components, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_assertion_serialize( + neethi_assertion_t *assertion, + axiom_node_t *parent, + const axutil_env_t *env) +{ + axiom_node_t *node = NULL; + if(assertion->node) + { + node = axiom_util_clone_node(env, assertion->node); + } + + if(!node) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "assertion node creation failed. Cannot serialize assertion"); + return AXIS2_FAILURE; + } + + axiom_node_add_child(parent, env, node); + return AXIS2_SUCCESS; +} diff --git a/neethi/src/assertion_builder.c b/neethi/src/assertion_builder.c new file mode 100644 index 0000000..e6f4064 --- /dev/null +++ b/neethi/src/assertion_builder.c @@ -0,0 +1,513 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +neethi_assertion_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + axis2_char_t *localname = NULL; + axis2_char_t *ns = NULL; + axutil_qname_t *node_qname = NULL; + + localname = axiom_element_get_localname(element, env); + if(!localname) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Cannot get localname from element."); + return NULL; + } + + node_qname = axiom_element_get_qname(element, env, node); + if(!node_qname) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Cannot get qname from element %s.", + localname); + return NULL; + } + + ns = axutil_qname_get_uri(node_qname, env); + if(!ns) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Cannot get namespace from element %s.", + localname); + return NULL; + } + + if(!(axutil_strcmp(ns, RP_SP_NS_11) && axutil_strcmp(ns, RP_SP_NS_12))) + { + /* if namespace is WS-SecurityPolicy Namespace */ + if(!axutil_strcmp(localname, RP_TRANSPORT_BINDING)) + { + return rp_transport_binding_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_ASYMMETRIC_BINDING)) + { + return rp_asymmetric_binding_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_SYMMETRIC_BINDING)) + { + return rp_symmetric_binding_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_TRANSPORT_TOKEN)) + { + return rp_transport_token_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_RECIPIENT_TOKEN)) + { + return rp_recipient_token_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_INITIATOR_TOKEN)) + { + return rp_initiator_token_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_PROTECTION_TOKEN)) + { + return rp_protection_token_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_ENCRYPTION_TOKEN)) + { + return rp_encryption_token_builder_build(env, node, element); + } + + else if(!axutil_strcmp(localname, RP_SIGNATURE_TOKEN)) + { + return rp_signature_token_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_X509_TOKEN)) + { + return rp_x509_token_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_SECURITY_CONTEXT_TOKEN)) + { + return rp_security_context_token_builder_build(env, node, element, ns, AXIS2_FALSE); + } + else if(!axutil_strcmp(localname, RP_SECURE_CONVERSATION_TOKEN)) + { + return rp_security_context_token_builder_build(env, node, element, ns, AXIS2_TRUE); + } + else if(!axutil_strcmp(localname, RP_ENCRYPT_BEFORE_SIGNING)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_ENCRYPT_BEFORE_SIGNING); + return assertion; + } + else if(!axutil_strcmp(localname, RP_SIGN_BEFORE_ENCRYPTING)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_SIGN_BEFORE_ENCRYPTING); + return assertion; + } + else if(!axutil_strcmp(localname, RP_ENCRYPT_SIGNATURE)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_ENCRYPT_SIGNATURE); + return assertion; + } + else if(!axutil_strcmp(localname, RP_PROTECT_TOKENS)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_PROTECT_TOKENS); + return assertion; + } + else if(!axutil_strcmp(localname, RP_ONLY_SIGN_ENTIRE_HEADERS_AND_BODY)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_ONLY_SIGN_ENTIRE_HEADERS_AND_BODY); + return assertion; + } + else if(!axutil_strcmp(localname, RP_REQUIRE_KEY_IDENTIFIRE_REFERENCE)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_REQUIRE_KEY_IDENTIFIRE_REFERENCE); + return assertion; + } + else if(!axutil_strcmp(localname, RP_REQUIRE_ISSUER_SERIAL_REFERENCE)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_REQUIRE_ISSUER_SERIAL_REFERENCE); + return assertion; + } + else if(!axutil_strcmp(localname, RP_REQUIRE_EMBEDDED_TOKEN_REFERENCE)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_REQUIRE_EMBEDDED_TOKEN_REFERENCE); + return assertion; + } + else if(!axutil_strcmp(localname, RP_REQUIRE_THUMBPRINT_REFERENCE)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_REQUIRE_THUMBPRINT_REFERENCE); + return assertion; + } + else if(!axutil_strcmp(localname, RP_WSS_X509_V1_TOKEN_10)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_X509_V1_TOKEN_10); + return assertion; + } + else if(!axutil_strcmp(localname, RP_WSS_X509_V3_TOKEN_10)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_X509_V3_TOKEN_10); + return assertion; + } + else if(!axutil_strcmp(localname, RP_ALGORITHM_SUITE)) + { + return rp_algorithmsuite_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_LAYOUT)) + { + return rp_layout_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_USERNAME_TOKEN)) + { + return rp_username_token_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_SIGNED_SUPPORTING_TOKENS)) + { + return rp_supporting_tokens_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_SUPPORTING_TOKENS)) + { + return rp_supporting_tokens_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_ENDORSING_SUPPORTING_TOKENS)) + { + return rp_supporting_tokens_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_SIGNED_ENDORSING_SUPPORTING_TOKENS)) + { + return rp_supporting_tokens_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_WSS10)) + { + return rp_wss10_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_WSS11)) + { + return rp_wss11_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_TRUST10)) + { + return rp_trust10_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_TRUST13)) + { + /* we can still use rp_trust10 structures */ + return rp_trust10_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_INCLUDE_TIMESTAMP)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_INCLUDE_TIMESTAMP); + return assertion; + } + else if(!axutil_strcmp(localname, RP_HTTPS_TOKEN)) + { + return rp_https_token_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_WSS_USERNAME_TOKEN_10)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_USERNAME_TOKEN_10); + return assertion; + } + else if(!axutil_strcmp(localname, RP_WSS_USERNAME_TOKEN_11)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_USERNAME_TOKEN_11); + return assertion; + } + else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_REF_KEY_IDENTIFIER)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_MUST_SUPPORT_REF_KEY_IDENTIFIER); + return assertion; + } + else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_REF_ISSUER_SERIAL)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_MUST_SUPPORT_REF_ISSUER_SERIAL); + return assertion; + } + else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_REF_EXTERNAL_URI)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_MUST_SUPPORT_REF_EXTERNAL_URI); + return assertion; + } + else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_REF_EMBEDDED_TOKEN)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_MUST_SUPPORT_REF_EMBEDDED_TOKEN); + return assertion; + } + else if(!axutil_strcmp(localname, RP_SIGNED_PARTS)) + { + return rp_signed_encrypted_parts_builder_build(env, node, element, AXIS2_TRUE); + } + else if(!axutil_strcmp(localname, RP_ENCRYPTED_PARTS)) + { + return rp_signed_encrypted_parts_builder_build(env, node, element, AXIS2_FALSE); + } + else if(!axutil_strcmp(localname, RP_BOOTSTRAP_POLICY)) + { + return rp_bootstrap_policy_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_REF_THUMBPRINT)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_MUST_SUPPORT_REF_THUMBPRINT); + return assertion; + } + else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_REF_ENCRYPTED_KEY)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_MUST_SUPPORT_REF_ENCRYPTED_KEY); + return assertion; + } + else if(!axutil_strcmp(localname, RP_REQUIRE_SIGNATURE_CONFIRMATION)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_REQUIRE_SIGNATURE_CONFIRMATION); + return assertion; + } + + else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_CLIENT_CHALLENGE)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_MUST_SUPPORT_CLIENT_CHALLENGE); + return assertion; + } + + else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_SERVER_CHALLENGE)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_MUST_SUPPORT_SERVER_CHALLENGE); + return assertion; + } + + else if(!axutil_strcmp(localname, RP_REQUIRE_CLIENT_ENTROPY)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_REQUIRE_CLIENT_ENTROPY); + return assertion; + } + + else if(!axutil_strcmp(localname, RP_REQUIRE_SERVER_ENTROPHY)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_REQUIRE_SERVER_ENTROPHY); + return assertion; + } + + else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_ISSUED_TOKENS)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_MUST_SUPPORT_ISSUED_TOKENS); + return assertion; + } + + else if(!axutil_strcmp(localname, RP_REQUIRE_DERIVED_KEYS)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + if(!axutil_strcmp(ns, RP_SP_NS_11)) + { + /* derived key should be as defined in WS-SecConversation 1.0 */ + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_REQUIRE_DERIVED_KEYS_SC10); + } + else + { + /* derived key should be as defined in WS-SecConversation 1.3 */ + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_REQUIRE_DERIVED_KEYS_SC13); + } + return assertion; + } + else if(!axutil_strcmp(localname, RP_REQUIRE_EXTERNAL_URI_REFERENCE)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_REQUIRE_EXTERNAL_URI); + return assertion; + } + else if(!axutil_strcmp(localname, RP_SC10_SECURITY_CONTEXT_TOKEN)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_SC10_SECURITY_CONTEXT_TOKEN); + return assertion; + } + else if(!axutil_strcmp(localname, RP_SC13_SECURITY_CONTEXT_TOKEN)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_SC13_SECURITY_CONTEXT_TOKEN); + return assertion; + } + else if(!axutil_strcmp(localname, RP_ISSUER)) + { + neethi_assertion_t *assertion = NULL; + axis2_char_t *issuer = NULL; + + issuer = axiom_element_get_text(element, env, node); + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, issuer, ASSERTION_TYPE_ISSUER); + return assertion; + } + else if(!axutil_strcmp(localname, RP_REQUIRE_EXTERNAL_REFERENCE)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_REQUIRE_EXTERNAL_REFERENCE); + return assertion; + } + else if(!axutil_strcmp(localname, RP_REQUIRE_INTERNAL_REFERENCE)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_REQUIRE_INTERNAL_REFERENCE); + return assertion; + } + else if(!axutil_strcmp(localname, RP_ISSUED_TOKEN)) + { + return rp_issued_token_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_SAML_TOKEN)) + { + return rp_saml_token_builder_build(env, node, element); + } + else if(!axutil_strcmp(localname, RP_WSS_SAML_V10_TOKEN_V10)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_SAML_V10_TOKEN_V10); + return assertion; + } + else if(!axutil_strcmp(localname, RP_WSS_SAML_V10_TOKEN_V11)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_SAML_V10_TOKEN_V11); + return assertion; + } + else if(!axutil_strcmp(localname, RP_WSS_SAML_V11_TOKEN_V10)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_SAML_V11_TOKEN_V10); + return assertion; + } + else if(!axutil_strcmp(localname, RP_WSS_SAML_V11_TOKEN_V11)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_SAML_V11_TOKEN_V11); + return assertion; + } + else if(!axutil_strcmp(localname, RP_WSS_SAML_V20_TOKEN_V11)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_SAML_V20_TOKEN_V11); + return assertion; + } + } + else if(!axutil_strcmp(ns, RP_RAMPART_NS)) + { + /* if namespace is Rampart Namespace */ + if(!axutil_strcmp(localname, RP_RAMPART_CONFIG)) + { + return rp_rampart_config_builder_build(env, node, element); + } + } + else if(!axutil_strcmp(ns, AXIS2_MTOM_POLICY_NS)) + { + if(!axutil_strcmp(localname, AXIS2_OPTIMIZED_MIME_SERIALIZATION)) + { + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, NULL, + ASSERTION_TYPE_OPTIMIZED_MIME_SERIALIZATION); + return assertion; + } + } + else if((!axutil_strcmp(ns, AXIS2_RM_POLICY_10_NS)) || (!axutil_strcmp(ns, + AXIS2_RM_POLICY_11_NS))) + { + if(!axutil_strcmp(localname, AXIS2_RM_RMASSERTION)) + { + return axis2_rm_assertion_builder_build(env, node, element); + } + } + + /* This assertion cannot be processed */ + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NEETHI_UNKNOWN_ASSERTION, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Unknown Assertion %s with namespace %s", + localname, ns); + return NULL; +} diff --git a/neethi/src/engine.c b/neethi/src/engine.c new file mode 100644 index 0000000..b925cea --- /dev/null +++ b/neethi/src/engine.c @@ -0,0 +1,1390 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +/*Private functions*/ + +static neethi_all_t * +neethi_engine_get_operator_all( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element); + +static neethi_exactlyone_t * +neethi_engine_get_operator_exactlyone( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element); + +static neethi_reference_t * +neethi_engine_get_operator_reference( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element); + +static neethi_policy_t * +neethi_engine_get_operator_neethi_policy( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element); + +static axis2_status_t +neethi_engine_process_operation_element( + const axutil_env_t *env, + neethi_operator_t *neethi_operator, + axiom_node_t *node, + axiom_element_t *element); + +static axis2_status_t +neethi_engine_add_policy_component( + const axutil_env_t *env, + neethi_operator_t *container_operator, + neethi_operator_t *component); + +static axis2_bool_t +neethi_engine_operator_is_empty( + neethi_operator_t *operator, + const axutil_env_t *env); + +static neethi_exactlyone_t * +neethi_engine_compute_resultant_component( + axutil_array_list_t *normalized_inner_components, + neethi_operator_type_t type, + const axutil_env_t *env); + +static axutil_array_list_t * +neethi_engine_operator_get_components( + neethi_operator_t *operator, + const axutil_env_t *env); + +static neethi_exactlyone_t * +neethi_engine_normalize_operator( + neethi_operator_t *operator, + neethi_registry_t *registry, + axis2_bool_t deep, + const axutil_env_t *env); + +static neethi_exactlyone_t * +neethi_engine_get_cross_product( + neethi_exactlyone_t *exactlyone1, + neethi_exactlyone_t *exactlyone2, + const axutil_env_t *env); + +static void +neethi_engine_clear_element_attributes( + axutil_hash_t *attr_hash, + const axutil_env_t *env); + +/*Implementations*/ + +/*This is the function which is called from outside*/ + +AXIS2_EXTERN neethi_policy_t *AXIS2_CALL +neethi_engine_get_policy( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + /* This function will be called recursively */ + + return neethi_engine_get_operator_neethi_policy(env, node, element); +} + +static neethi_all_t * +neethi_engine_get_operator_all( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + neethi_all_t *all = NULL; + neethi_operator_t *neethi_operator = NULL; + axis2_status_t status = AXIS2_SUCCESS; + all = neethi_all_create(env); + + if(!all) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_operator = neethi_operator_create(env); + if(!neethi_operator) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_operator_set_value(neethi_operator, env, all, OPERATOR_TYPE_ALL); + + status = neethi_engine_process_operation_element(env, neethi_operator, node, element); + + neethi_operator_set_value_null(neethi_operator, env); + neethi_operator_free(neethi_operator, env); + neethi_operator = NULL; + + if(status != AXIS2_SUCCESS) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NEETHI_ALL_CREATION_FAILED, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] All creation failed"); + neethi_all_free(all, env); + all = NULL; + return NULL; + } + return all; +} + +static neethi_exactlyone_t * +neethi_engine_get_operator_exactlyone( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + neethi_exactlyone_t *exactlyone = NULL; + neethi_operator_t *neethi_operator = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + exactlyone = neethi_exactlyone_create(env); + + if(!exactlyone) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + + return NULL; + } + neethi_operator = neethi_operator_create(env); + if(!neethi_operator) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + + return NULL; + } + neethi_operator_set_value(neethi_operator, env, exactlyone, OPERATOR_TYPE_EXACTLYONE); + status = neethi_engine_process_operation_element(env, neethi_operator, node, element); + + neethi_operator_set_value_null(neethi_operator, env); + neethi_operator_free(neethi_operator, env); + neethi_operator = NULL; + + if(status != AXIS2_SUCCESS) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NEETHI_EXACTLYONE_CREATION_FAILED, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Exactlyone creation failed."); + neethi_exactlyone_free(exactlyone, env); + exactlyone = NULL; + return NULL; + } + + return exactlyone; +} + +neethi_reference_t * +neethi_engine_get_operator_reference( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + neethi_reference_t *reference = NULL; + axutil_qname_t *qname = NULL; + axis2_char_t *attribute_value = NULL; + + reference = neethi_reference_create(env); + + if(!reference) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + + return NULL; + } + qname = axutil_qname_create(env, NEETHI_URI, NULL, NULL); + + if(!qname) + { + return NULL; + } + + attribute_value = axiom_element_get_attribute_value(element, env, qname); + if(attribute_value) + { + neethi_reference_set_uri(reference, env, attribute_value); + } + return reference; +} + +/* This function will be called when we encounter a wsp:Policy + * element */ + +static neethi_policy_t * +neethi_engine_get_operator_neethi_policy( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + neethi_policy_t *neethi_policy = NULL; + neethi_operator_t *neethi_operator = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + /* Creates a policy struct */ + + neethi_policy = neethi_policy_create(env); + + if(!neethi_policy) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + /* Then we wrap it in a neethi_operator */ + + neethi_operator = neethi_operator_create(env); + if(!neethi_operator) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_operator_set_value(neethi_operator, env, neethi_policy, OPERATOR_TYPE_POLICY); + + /* This function will do all the processing and build the + * policy object model */ + + status = neethi_engine_process_operation_element(env, neethi_operator, node, element); + + /* To prevent freeing the policy object from the operator + * we set it to null. This object will be freed from a parent + * or from an outsider who creates a policy object */ + + neethi_operator_set_value_null(neethi_operator, env); + neethi_operator_free(neethi_operator, env); + neethi_operator = NULL; + + if(status != AXIS2_SUCCESS) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NEETHI_POLICY_CREATION_FAILED, AXIS2_FAILURE); + + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Policy creation failed."); + neethi_policy_free(neethi_policy, env); + neethi_policy = NULL; + return NULL; + } + return neethi_policy; +} + +/* This function will construct the policy objecy model by + * filling the component array_list inside the passing + * policy operator */ + +static axis2_status_t +neethi_engine_process_operation_element( + const axutil_env_t *env, + neethi_operator_t *neethi_operator, + axiom_node_t *node, + axiom_element_t *element) +{ + + neethi_operator_type_t type; + axiom_element_t *child_element = NULL; + axiom_node_t *child_node = NULL; + axiom_children_iterator_t *children_iter = NULL; + void *value = NULL; + + type = neethi_operator_get_type(neethi_operator, env); + value = neethi_operator_get_value(neethi_operator, env); + + if(type == OPERATOR_TYPE_POLICY) + { + /* wsp:Policy element can have any number of attributes + * we will store them in a hash from the uri and localname */ + + axutil_hash_t *attributes = axiom_element_extract_attributes(element, env, node); + + if(attributes) + { + axutil_hash_index_t *hi = NULL; + + /* When creating the policy object we created the hash */ + + axutil_hash_t *ht = neethi_policy_get_attributes((neethi_policy_t *)value, env); + + if(!ht) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Policy hash map creation failed."); + return AXIS2_FAILURE; + } + + for(hi = axutil_hash_first(attributes, env); hi; hi = axutil_hash_next(env, hi)) + { + axis2_char_t *key = NULL; + void *val = NULL; + axutil_qname_t *qname = NULL; + axis2_char_t *attr_val = NULL; + axiom_namespace_t *ns = NULL; + axis2_char_t *ns_uri = NULL; + axiom_attribute_t *om_attr = NULL; + + axutil_hash_this(hi, NULL, NULL, &val); + if(val) + { + om_attr = (axiom_attribute_t *)val; + ns = axiom_attribute_get_namespace(om_attr, env); + if(ns) + { + ns_uri = axiom_namespace_get_uri(ns, env); + } + + qname = axutil_qname_create(env, axiom_attribute_get_localname(om_attr, env), + ns_uri, NULL); + if(qname) + { + key = axutil_qname_to_string(qname, env); + if(key) + { + attr_val = axiom_attribute_get_value(om_attr, env); + if(attr_val) + { + /* axutil_qname_free will free the returned key + * of the qname so will duplicate it when storing */ + + axutil_hash_set(ht, axutil_strdup(env, key), AXIS2_HASH_KEY_STRING, + axutil_strdup(env, attr_val)); + } + } + axutil_qname_free(qname, env); + } + } + } + /* axiom_element_extract_attributes method will always returns + * a cloned copy, so we need to free it after we have done with it */ + + neethi_engine_clear_element_attributes(attributes, env); + attributes = NULL; + } + } + + children_iter = axiom_element_get_children(element, env, node); + if(children_iter) + { + while(axiom_children_iterator_has_next(children_iter, env)) + { + /* Extract the element and check the namespace. If the namespace + * is in ws_policy then we call the relevent operator builder + * otherwise we will call the assertion_builder */ + + child_node = axiom_children_iterator_next(children_iter, env); + if(child_node) + { + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + axiom_namespace_t *namespace = NULL; + axis2_char_t *uri = NULL; + axis2_char_t *local_name = NULL; + neethi_operator_t *operator = NULL; + local_name = axiom_element_get_localname(child_element, env); + + namespace = axiom_element_get_namespace(child_element, env, child_node); + if(!namespace) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_NEETHI_ELEMENT_WITH_NO_NAMESPACE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Element with no namespace"); + return AXIS2_FAILURE; + } + uri = axiom_namespace_get_uri(namespace, env); + if(!uri) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_EMPTY_NAMESPACE_URI, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Invalid Empty namespace uri."); + return AXIS2_FAILURE; + } + if((axutil_strcmp(uri, NEETHI_NAMESPACE) == 0) || (axutil_strcmp(uri, + NEETHI_POLICY_15_NAMESPACE) == 0)) + { + /* Looking at the localname we will call the relevent + * operator function. After that the newly created + * object is wrapped in a neethi_operator and stored in + * the parent's component list */ + + if(axutil_strcmp(local_name, NEETHI_POLICY) == 0) + { + neethi_policy_t *neethi_policy = NULL; + neethi_policy = neethi_engine_get_operator_neethi_policy(env, + child_node, child_element); + if(neethi_policy) + { + operator = neethi_operator_create(env); + neethi_operator_set_value(operator, env, neethi_policy, + OPERATOR_TYPE_POLICY); + neethi_engine_add_policy_component(env, neethi_operator, + operator); + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_NEETHI_POLICY_CREATION_FAILED_FROM_ELEMENT, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Policy creation failed from element."); + return AXIS2_FAILURE; + } + } + else if(axutil_strcmp(local_name, NEETHI_ALL) == 0) + { + neethi_all_t *all = NULL; + all + = neethi_engine_get_operator_all(env, child_node, child_element); + if(all) + { + operator = neethi_operator_create(env); + neethi_operator_set_value(operator, env, all, OPERATOR_TYPE_ALL); + neethi_engine_add_policy_component(env, neethi_operator, + operator); + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_NEETHI_ALL_CREATION_FAILED_FROM_ELEMENT, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] All creation failed from element."); + return AXIS2_FAILURE; + } + } + else if(axutil_strcmp(local_name, NEETHI_EXACTLYONE) == 0) + { + neethi_exactlyone_t *exactlyone = NULL; + exactlyone = neethi_engine_get_operator_exactlyone(env, child_node, + child_element); + if(exactlyone) + { + operator = neethi_operator_create(env); + neethi_operator_set_value(operator, env, exactlyone, + OPERATOR_TYPE_EXACTLYONE); + neethi_engine_add_policy_component(env, neethi_operator, + operator); + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_NEETHI_EXACTLYONE_CREATION_FAILED_FROM_ELEMENT, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Exactlyone creation failed from element."); + return AXIS2_FAILURE; + } + } + else if(axutil_strcmp(local_name, NEETHI_REFERENCE) == 0) + { + neethi_reference_t *reference = NULL; + reference = neethi_engine_get_operator_reference(env, child_node, + child_element); + if(reference) + { + operator = neethi_operator_create(env); + neethi_operator_set_value(operator, env, reference, + OPERATOR_TYPE_REFERENCE); + neethi_engine_add_policy_component(env, neethi_operator, + operator); + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_NEETHI_REFERENCE_CREATION_FAILED_FROM_ELEMENT, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Reference cretion failed from element."); + return AXIS2_FAILURE; + } + } + } + + else + { + /* This is an assertion in a different domain. Assertion builder + * should be called and that will call the relevent assertion builder + * after looking at the localname and the namespace */ + + neethi_assertion_t *assertion = NULL; + assertion = neethi_assertion_builder_build(env, child_node, + child_element); + if(assertion) + { + operator = neethi_operator_create(env); + neethi_operator_set_value(operator, env, assertion, + OPERATOR_TYPE_ASSERTION); + neethi_engine_add_policy_component(env, neethi_operator, operator); + neethi_assertion_set_node(assertion, env, child_node); + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_NEETHI_ASSERTION_CREATION_FAILED_FROM_ELEMENT, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Assertion creation failed from element."); + return AXIS2_FAILURE; + } + } + } + } + } + } + return AXIS2_SUCCESS; + } + else + return AXIS2_FAILURE; +} + +/* After looking at the operator_type this function will + * call the relevent neethi operator's add operator + * function */ + +static axis2_status_t +neethi_engine_add_policy_component( + const axutil_env_t *env, + neethi_operator_t *container_operator, + neethi_operator_t *component) +{ + + neethi_operator_type_t type; + void *value = NULL; + neethi_policy_t *neethi_policy = NULL; + neethi_exactlyone_t *exactlyone = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + + type = neethi_operator_get_type(container_operator, env); + value = neethi_operator_get_value(container_operator, env); + + if(value) + { + switch(type) + { + case OPERATOR_TYPE_POLICY: + neethi_policy = (neethi_policy_t *)value; + neethi_policy_add_operator(neethi_policy, env, component); + break; + + case OPERATOR_TYPE_ALL: + all = (neethi_all_t *)value; + neethi_all_add_operator(all, env, component); + break; + + case OPERATOR_TYPE_EXACTLYONE: + exactlyone = (neethi_exactlyone_t *)value; + neethi_exactlyone_add_operator(exactlyone, env, component); + break; + + case OPERATOR_TYPE_UNKNOWN: + return AXIS2_FAILURE; + break; + + case OPERATOR_TYPE_ASSERTION: + assertion = (neethi_assertion_t *)value; + neethi_assertion_add_operator(assertion, env, component); + break; + + case OPERATOR_TYPE_REFERENCE: + break; + } + return AXIS2_SUCCESS; + } + else + return AXIS2_FAILURE; +} + +/***************************************/ + +/*This function is only for testing* + *Remove it later*/ +void +check_neethi_policy( + neethi_policy_t *neethi_policy, + const axutil_env_t *env) +{ + axutil_array_list_t *list = NULL; + neethi_operator_t *op = NULL; + neethi_operator_type_t type; + + list = neethi_policy_get_policy_components(neethi_policy, env); + + if(axutil_array_list_size(list, env) > 1) + { + return; + } + op = (neethi_operator_t *)axutil_array_list_get(list, env, 0); + type = neethi_operator_get_type(op, env); + if(type == OPERATOR_TYPE_EXACTLYONE) + { + void *value = neethi_operator_get_value(op, env); + if(value) + { + return; + } + } + else + { + return; + } +} + +/************************************************/ +/* + + Following function will normalize accorading to the + WS-Policy spec. Normalize policy is in the following + format. + + + + ( ( … )* )* + + + + */ + +AXIS2_EXTERN neethi_policy_t *AXIS2_CALL +neethi_engine_get_normalize( + const axutil_env_t *env, + axis2_bool_t deep, + neethi_policy_t *neethi_policy) +{ + /* In the first call we pass the registry as null.*/ + + return neethi_engine_normalize(env, neethi_policy, NULL, deep); +} + +AXIS2_EXTERN neethi_policy_t *AXIS2_CALL +neethi_engine_normalize( + const axutil_env_t *env, + neethi_policy_t *neethi_policy, + neethi_registry_t *registry, + axis2_bool_t deep) +{ + neethi_policy_t *resultant_neethi_policy = NULL; + neethi_operator_t *operator = NULL; + neethi_operator_t *component = NULL; + neethi_exactlyone_t *exactlyone = NULL; + axis2_char_t *policy_name = NULL; + axis2_char_t *policy_id = NULL; + + /* Normalize policy will be contained in the new policy + * created below */ + + resultant_neethi_policy = neethi_policy_create(env); + if(!resultant_neethi_policy) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + policy_name = neethi_policy_get_name(neethi_policy, env); + if(policy_name) + { + neethi_policy_set_name(resultant_neethi_policy, env, policy_name); + } + policy_id = neethi_policy_get_id(neethi_policy, env); + if(policy_id) + { + neethi_policy_set_id(resultant_neethi_policy, env, policy_id); + } + + operator = neethi_operator_create(env); + if(!operator) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + neethi_operator_set_value(operator, env, neethi_policy, OPERATOR_TYPE_POLICY); + + /* When we call the normalization it should always return an exactlyone as the + * out put. */ + + exactlyone = neethi_engine_normalize_operator(operator, registry, deep, env); + + /* We are frreing the operator used to wrap the object */ + + neethi_operator_set_value_null(operator, env); + neethi_operator_free(operator, env); + operator = NULL; + + /* This exactlyone is set as the first component of the + * normalized policy */ + + if(exactlyone) + { + component = neethi_operator_create(env); + neethi_operator_set_value(component, env, exactlyone, OPERATOR_TYPE_EXACTLYONE); + neethi_policy_add_operator(resultant_neethi_policy, env, component); + + return resultant_neethi_policy; + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NEETHI_NORMALIZATION_FAILED, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Normalization failed."); + return NULL; + } +} + +AXIS2_EXTERN neethi_policy_t *AXIS2_CALL +neethi_engine_merge( + const axutil_env_t *env, + neethi_policy_t *neethi_policy1, + neethi_policy_t *neethi_policy2) +{ + + neethi_exactlyone_t *exactlyone1 = NULL; + neethi_exactlyone_t *exactlyone2 = NULL; + neethi_exactlyone_t *exactlyone = NULL; + neethi_policy_t *neethi_policy = NULL; + neethi_operator_t *component = NULL; + + exactlyone1 = neethi_policy_get_exactlyone(neethi_policy1, env); + exactlyone2 = neethi_policy_get_exactlyone(neethi_policy2, env); + + if(!exactlyone1 || !exactlyone2) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NEETHI_WRONG_INPUT_FOR_MERGE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Wrong input for merge."); + return NULL; + } + exactlyone = neethi_engine_get_cross_product(exactlyone1, exactlyone2, env); + if(exactlyone) + { + neethi_policy = neethi_policy_create(env); + component = neethi_operator_create(env); + if(!neethi_policy || !component) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_operator_set_value(component, env, exactlyone, OPERATOR_TYPE_EXACTLYONE); + neethi_policy_add_operator(neethi_policy, env, component); + return neethi_policy; + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NEETHI_CROSS_PRODUCT_FAILED, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Cross product failed."); + return NULL; + } +} + +static axis2_bool_t +neethi_engine_operator_is_empty( + neethi_operator_t *operator, + const axutil_env_t *env) +{ + + neethi_operator_type_t type; + void *value = NULL; + neethi_policy_t *neethi_policy = NULL; + neethi_exactlyone_t *exactlyone = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + + type = neethi_operator_get_type(operator, env); + value = neethi_operator_get_value(operator, env); + + if(value) + { + switch(type) + { + case OPERATOR_TYPE_POLICY: + neethi_policy = (neethi_policy_t *)value; + return neethi_policy_is_empty(neethi_policy, env); + break; + + case OPERATOR_TYPE_ALL: + all = (neethi_all_t *)value; + return neethi_all_is_empty(all, env); + break; + + case OPERATOR_TYPE_EXACTLYONE: + exactlyone = (neethi_exactlyone_t *)value; + return neethi_exactlyone_is_empty(exactlyone, env); + break; + + case OPERATOR_TYPE_UNKNOWN: + return AXIS2_FALSE; + break; + + case OPERATOR_TYPE_ASSERTION: + assertion = (neethi_assertion_t *)value; + return neethi_assertion_is_empty(assertion, env); + break; + + case OPERATOR_TYPE_REFERENCE: + break; + + } + return AXIS2_FALSE; + } + else + return AXIS2_FALSE; +} + +static axutil_array_list_t * +neethi_engine_operator_get_components( + neethi_operator_t *operator, + const axutil_env_t *env) +{ + + neethi_operator_type_t type; + void *value = NULL; + neethi_policy_t *neethi_policy = NULL; + neethi_exactlyone_t *exactlyone = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + + type = neethi_operator_get_type(operator, env); + value = neethi_operator_get_value(operator, env); + + if(value) + { + switch(type) + { + case OPERATOR_TYPE_POLICY: + neethi_policy = (neethi_policy_t *)value; + return neethi_policy_get_policy_components(neethi_policy, env); + break; + + case OPERATOR_TYPE_ALL: + all = (neethi_all_t *)value; + return neethi_all_get_policy_components(all, env); + break; + + case OPERATOR_TYPE_EXACTLYONE: + exactlyone = (neethi_exactlyone_t *)value; + return neethi_exactlyone_get_policy_components(exactlyone, env); + break; + + case OPERATOR_TYPE_UNKNOWN: + return NULL; + break; + + case OPERATOR_TYPE_ASSERTION: + assertion = (neethi_assertion_t *)value; + return neethi_assertion_get_policy_components(assertion, env); + break; + + case OPERATOR_TYPE_REFERENCE: + break; + } + } + + return NULL; +} + +static neethi_exactlyone_t * +neethi_engine_normalize_operator( + neethi_operator_t *operator, + neethi_registry_t *registry, + axis2_bool_t deep, + const axutil_env_t *env) +{ + axutil_array_list_t *child_component_list = NULL; + neethi_operator_t *child_component = NULL; + axutil_array_list_t *arraylist = NULL; + int i = 0; + + neethi_operator_type_t type = neethi_operator_get_type(operator, env); + + if(neethi_engine_operator_is_empty(operator, env)) + { + /* If this is an empty operator we just add + * an exactlyone and all */ + + neethi_exactlyone_t *exactlyone = NULL; + exactlyone = neethi_exactlyone_create(env); + if(!exactlyone) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + if(type != OPERATOR_TYPE_EXACTLYONE) + { + neethi_all_t *all = NULL; + neethi_operator_t *component = NULL; + all = neethi_all_create(env); + component = neethi_operator_create(env); + if(!all || !component) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_operator_set_value(component, env, all, OPERATOR_TYPE_ALL); + neethi_exactlyone_add_operator(exactlyone, env, component); + } + return exactlyone; + } + + child_component_list = axutil_array_list_create(env, 0); + arraylist = neethi_engine_operator_get_components(operator, env); + + /* Here we are recursively normalize each and every component */ + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + neethi_operator_type_t component_type; + child_component = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + component_type = neethi_operator_get_type(child_component, env); + + if(component_type == OPERATOR_TYPE_ASSERTION) + { + /*Assertion normalization part comes here */ + if(deep) + { + return NULL; + } + else + { + neethi_exactlyone_t *exactlyone = NULL; + neethi_all_t *all = NULL; + neethi_operator_t *op = NULL; + + exactlyone = neethi_exactlyone_create(env); + all = neethi_all_create(env); + op = neethi_operator_create(env); + + if(!all || !op || !exactlyone) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + /* We wrap everything inside an exactlyone */ + + neethi_all_add_operator(all, env, child_component); + neethi_operator_set_value(op, env, all, OPERATOR_TYPE_ALL); + neethi_exactlyone_add_operator(exactlyone, env, op); + axutil_array_list_add(child_component_list, env, exactlyone); + } + } + else if(component_type == OPERATOR_TYPE_POLICY) + { + neethi_policy_t *neethi_policy = NULL; + neethi_all_t *all = NULL; + axutil_array_list_t *children = NULL; + neethi_operator_t *to_normalize = NULL; + neethi_exactlyone_t *exactlyone = NULL; + + all = neethi_all_create(env); + if(!all) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_policy = (neethi_policy_t *)neethi_operator_get_value(child_component, env); + if(neethi_policy) + { + children = neethi_policy_get_policy_components(neethi_policy, env); + if(children) + { + neethi_all_add_policy_components(all, children, env); + to_normalize = neethi_operator_create(env); + if(!to_normalize) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_operator_set_value(to_normalize, env, all, OPERATOR_TYPE_ALL); + exactlyone + = neethi_engine_normalize_operator(to_normalize, registry, deep, env); + if(exactlyone) + { + axutil_array_list_add(child_component_list, env, exactlyone); + } + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NEETHI_NO_CHILDREN_POLICY_COMPONENTS, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] No children policy components"); + return NULL; + } + } + } + + else if(component_type == OPERATOR_TYPE_REFERENCE) + { + + /* If the operator is a policy reference we will + * extract the relevent policy from the uri and + * normalize as we are doing for a neethi_policy + * object */ + + neethi_reference_t *policy_ref = NULL; + axis2_char_t *uri = NULL; + neethi_policy_t *policy = NULL; + neethi_all_t *all = NULL; + axutil_array_list_t *children = NULL; + neethi_operator_t *to_normalize = NULL; + neethi_exactlyone_t *exactlyone = NULL; + + policy_ref = (neethi_reference_t *)neethi_operator_get_value(child_component, env); + uri = neethi_reference_get_uri(policy_ref, env); + if(!uri) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NEETHI_URI_NOT_SPECIFIED, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Uri not specified"); + return NULL; + } + + if(!registry) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Cannot resolve the reference.Registry Not provided"); + return NULL; + } + + policy = neethi_registry_lookup(registry, env, uri); + if(!policy) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NEETHI_NO_ENTRY_FOR_THE_GIVEN_URI, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] No entry for the given uri"); + return NULL; + } + neethi_operator_set_value(child_component, env, policy, OPERATOR_TYPE_POLICY); + + all = neethi_all_create(env); + if(!all) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + policy = (neethi_policy_t *)neethi_operator_get_value(child_component, env); + if(policy) + { + children = neethi_policy_get_policy_components(policy, env); + if(children) + { + neethi_all_add_policy_components(all, children, env); + to_normalize = neethi_operator_create(env); + if(!to_normalize) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_operator_set_value(to_normalize, env, all, OPERATOR_TYPE_ALL); + exactlyone + = neethi_engine_normalize_operator(to_normalize, registry, deep, env); + if(exactlyone) + { + axutil_array_list_add(child_component_list, env, exactlyone); + } + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NEETHI_NO_CHILDREN_POLICY_COMPONENTS, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] No children policy components"); + return NULL; + } + } + } + else + { + neethi_exactlyone_t *exactlyone = NULL; + exactlyone = neethi_engine_normalize_operator(child_component, registry, deep, env); + if(exactlyone) + { + axutil_array_list_add(child_component_list, env, exactlyone); + } + } + } + + /* So at this point we have set of exactlyones in the array_list, So we will + * compute one exactlyone out of those after the following call */ + + return neethi_engine_compute_resultant_component(child_component_list, type, env); +} + +/* This function will return a single exactlyone from all the + * components in the list */ + +static neethi_exactlyone_t * +neethi_engine_compute_resultant_component( + axutil_array_list_t * normalized_inner_components, + neethi_operator_type_t type, + const axutil_env_t * env) +{ + neethi_exactlyone_t *exactlyone = NULL; + int size = 0; + + if(normalized_inner_components) + { + size = axutil_array_list_size(normalized_inner_components, env); + } + + if(type == OPERATOR_TYPE_EXACTLYONE) + { + /* If the operator is an exactlyone then we get all the components + * in the exatlyones and add them to a newly created exactlyone */ + + int i = 0; + neethi_exactlyone_t *inner_exactlyone = NULL; + exactlyone = neethi_exactlyone_create(env); + + for(i = 0; i < size; i++) + { + inner_exactlyone = (neethi_exactlyone_t *)axutil_array_list_get( + normalized_inner_components, env, i); + if(inner_exactlyone) + { + neethi_exactlyone_add_policy_components(exactlyone, + neethi_exactlyone_get_policy_components(inner_exactlyone, env), env); + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_NEETHI_EXACTLYONE_NOT_FOUND_IN_NORMALIZED_POLICY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Exactlyone not found in normalized policy"); + return NULL; + } + } + } + else if(type == OPERATOR_TYPE_POLICY || type == OPERATOR_TYPE_ALL) + { + /* Here arry_list contains one exactlyone means this operator + * is already normalized. So we will return that. Otherwise we + * will get the crossproduct. */ + + if(size > 1) + { + /* Get the first one and do the cross product with other + * components */ + + int i = 0; + exactlyone = (neethi_exactlyone_t *)axutil_array_list_get(normalized_inner_components, + env, 0); + if(!exactlyone) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_NEETHI_EXACTLYONE_NOT_FOUND_IN_NORMALIZED_POLICY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Exactlyone not found in normalized policy"); + return NULL; + } + if(!neethi_exactlyone_is_empty(exactlyone, env)) + { + neethi_exactlyone_t *current_exactlyone = NULL; + i = 1; + for(i = 1; i < size; i++) + { + current_exactlyone = (neethi_exactlyone_t *)axutil_array_list_get( + normalized_inner_components, env, i); + if(!current_exactlyone) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_NEETHI_EXACTLYONE_NOT_FOUND_IN_NORMALIZED_POLICY, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Exactlyone not found in normalized policy"); + return NULL; + } + if(neethi_exactlyone_is_empty(current_exactlyone, env)) + { + exactlyone = current_exactlyone; + break; + } + else + { + neethi_exactlyone_t *temp = NULL; + neethi_exactlyone_t *temp1 = NULL; + temp = exactlyone; + temp1 = current_exactlyone; + exactlyone = neethi_engine_get_cross_product(exactlyone, + current_exactlyone, env); + neethi_exactlyone_free(temp, env); + neethi_exactlyone_free(temp1, env); + temp = NULL; + temp1 = NULL; + } + } + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NEETHI_EXACTLYONE_IS_EMPTY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Exactlyone is Empty"); + return NULL; + } + } + else + { + exactlyone = (neethi_exactlyone_t *)axutil_array_list_get(normalized_inner_components, + env, 0); + } + } + axutil_array_list_free(normalized_inner_components, env); + normalized_inner_components = NULL; + + return exactlyone; +} + +/* The cross product will return all the different combinations + * of alternatives and put them into one exactlyone */ + +static neethi_exactlyone_t * +neethi_engine_get_cross_product( + neethi_exactlyone_t *exactlyone1, + neethi_exactlyone_t *exactlyone2, + const axutil_env_t *env) +{ + neethi_exactlyone_t *cross_product = NULL; + neethi_all_t *cross_product_all = NULL; + neethi_all_t *current_all1 = NULL; + neethi_all_t *current_all2 = NULL; + axutil_array_list_t *array_list1 = NULL; + axutil_array_list_t *array_list2 = NULL; + neethi_operator_t *component = NULL; + int i = 0; + int j = 0; + + cross_product = neethi_exactlyone_create(env); + if(!cross_product) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + array_list1 = neethi_exactlyone_get_policy_components(exactlyone1, env); + array_list2 = neethi_exactlyone_get_policy_components(exactlyone2, env); + + if(!array_list1 || !array_list2) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NEETHI_NO_CHILDREN_POLICY_COMPONENTS, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] No children policy components"); + return NULL; + } + + for(i = 0; i < axutil_array_list_size(array_list1, env); i++) + { + current_all1 = (neethi_all_t *)neethi_operator_get_value( + (neethi_operator_t *)axutil_array_list_get(array_list1, env, i), env); + + if(!current_all1) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_NEETHI_ALL_NOT_FOUND_WHILE_GETTING_CROSS_PRODUCT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] All not found while getting cross product"); + return NULL; + } + + for(j = 0; j < axutil_array_list_size(array_list2, env); j++) + { + current_all2 = (neethi_all_t *)neethi_operator_get_value( + (neethi_operator_t *)axutil_array_list_get(array_list2, env, j), env); + + if(!current_all2) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_NEETHI_ALL_NOT_FOUND_WHILE_GETTING_CROSS_PRODUCT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] All not found while getting cross product"); + return NULL; + } + + cross_product_all = neethi_all_create(env); + if(!cross_product_all) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_all_add_policy_components(cross_product_all, neethi_all_get_policy_components( + current_all1, env), env); + + neethi_all_add_policy_components(cross_product_all, neethi_all_get_policy_components( + current_all2, env), env); + + component = neethi_operator_create(env); + if(!component) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_operator_set_value(component, env, cross_product_all, OPERATOR_TYPE_ALL); + neethi_exactlyone_add_operator(cross_product, env, component); + } + } + return cross_product; +} + +/*These functions are for serializing a policy object*/ + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +neethi_engine_serialize( + neethi_policy_t *policy, + const axutil_env_t *env) +{ + + return neethi_policy_serialize(policy, NULL, env); +} + +static void +neethi_engine_clear_element_attributes( + axutil_hash_t *attr_hash, + const axutil_env_t *env) +{ + axutil_hash_index_t *hi = NULL; + + for(hi = axutil_hash_first(attr_hash, env); hi; hi = axutil_hash_next(env, hi)) + { + void *val = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + if(val) + { + axiom_attribute_free((axiom_attribute_t *)val, env); + val = NULL; + } + } + axutil_hash_free(attr_hash, env); + attr_hash = NULL; + + return; +} diff --git a/neethi/src/exactlyone.c b/neethi/src/exactlyone.c new file mode 100644 index 0000000..ad94fa2 --- /dev/null +++ b/neethi/src/exactlyone.c @@ -0,0 +1,188 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct neethi_exactlyone_t +{ + axutil_array_list_t *policy_components; +}; + +AXIS2_EXTERN neethi_exactlyone_t *AXIS2_CALL +neethi_exactlyone_create( + const axutil_env_t *env) +{ + neethi_exactlyone_t *neethi_exactlyone = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + neethi_exactlyone = (neethi_exactlyone_t *)AXIS2_MALLOC(env->allocator, + sizeof(neethi_exactlyone_t)); + + if(neethi_exactlyone == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_exactlyone->policy_components = NULL; + + neethi_exactlyone->policy_components = axutil_array_list_create(env, 0); + if(!(neethi_exactlyone->policy_components)) + { + neethi_exactlyone_free(neethi_exactlyone, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + return neethi_exactlyone; +} + +AXIS2_EXTERN void AXIS2_CALL +neethi_exactlyone_free( + neethi_exactlyone_t *neethi_exactlyone, + const axutil_env_t *env) +{ + if(neethi_exactlyone) + { + if(neethi_exactlyone->policy_components) + { + int i = 0; + int size = 0; + + size = axutil_array_list_size(neethi_exactlyone->policy_components, env); + + for(i = 0; i < size; i++) + { + neethi_operator_t *operator = NULL; + operator = (neethi_operator_t *)axutil_array_list_get( + neethi_exactlyone->policy_components, env, i); + if(operator) + { + neethi_operator_free(operator, env); + operator = NULL; + } + } + axutil_array_list_free(neethi_exactlyone->policy_components, env); + neethi_exactlyone->policy_components = NULL; + } + AXIS2_FREE(env->allocator, neethi_exactlyone); + neethi_exactlyone = NULL; + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +neethi_exactlyone_get_policy_components( + neethi_exactlyone_t *neethi_exactlyone, + const axutil_env_t *env) +{ + return neethi_exactlyone->policy_components; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_exactlyone_add_policy_components( + neethi_exactlyone_t *exactlyone, + axutil_array_list_t *arraylist, + const axutil_env_t *env) +{ + + int size = axutil_array_list_size(arraylist, env); + int i = 0; + + if(axutil_array_list_ensure_capacity(exactlyone->policy_components, env, size + 1) + != AXIS2_SUCCESS) + { + return AXIS2_FAILURE; + } + + for(i = 0; i < size; i++) + { + void *value = NULL; + value = axutil_array_list_get(arraylist, env, i); + neethi_operator_increment_ref((neethi_operator_t *)value, env); + axutil_array_list_add(exactlyone->policy_components, env, value); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_exactlyone_add_operator( + neethi_exactlyone_t *neethi_exactlyone, + const axutil_env_t *env, + neethi_operator_t *operator) +{ + neethi_operator_increment_ref(operator, env); + axutil_array_list_add(neethi_exactlyone->policy_components, env, operator); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +neethi_exactlyone_is_empty( + neethi_exactlyone_t *exactlyone, + const axutil_env_t *env) +{ + return axutil_array_list_is_empty(exactlyone->policy_components, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_exactlyone_serialize( + neethi_exactlyone_t *neethi_exactlyone, + axiom_node_t *parent, + const axutil_env_t *env) +{ + axiom_node_t *exactlyone_node = NULL; + axiom_element_t *exactlyone_ele = NULL; + axiom_namespace_t *policy_ns = NULL; + axutil_array_list_t *components = NULL; + + policy_ns = axiom_namespace_create(env, NEETHI_NAMESPACE, NEETHI_PREFIX); + exactlyone_ele = axiom_element_create(env, parent, NEETHI_EXACTLYONE, policy_ns, + &exactlyone_node); + if(!exactlyone_node) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Cannot create 'ExactlyOne' node. Serialization of 'ExactlyOne' assertion failed"); + return AXIS2_FAILURE; + } + + components = neethi_exactlyone_get_policy_components(neethi_exactlyone, env); + if(components) + { + axis2_status_t status = AXIS2_FAILURE; + int i = 0; + for(i = 0; i < axutil_array_list_size(components, env); i++) + { + neethi_operator_t *operator = NULL; + operator = (neethi_operator_t *)axutil_array_list_get(components, env, i); + if(operator) + { + status = neethi_operator_serialize(operator, env, exactlyone_node); + if(status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Neethi operator serialization failed. " + "Cannot serialize 'ExactlyOne' assertion"); + return AXIS2_FAILURE; + } + } + } + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/mtom_assertion_checker.c b/neethi/src/mtom_assertion_checker.c new file mode 100644 index 0000000..77e5ff0 --- /dev/null +++ b/neethi/src/mtom_assertion_checker.c @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +neethi_is_mtom_required( + const axutil_env_t *env, + neethi_policy_t *policy) +{ + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_policy_t *normalized_policy = NULL; + neethi_operator_t *operator = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + int i = 0; + + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + + if(normalized_policy) + { + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + } + + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + /*if (value) + {*/ + if(type == ASSERTION_TYPE_OPTIMIZED_MIME_SERIALIZATION) + { + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + return AXIS2_TRUE; + } + /*}*/ + } + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return AXIS2_FALSE; +} diff --git a/neethi/src/operator.c b/neethi/src/operator.c new file mode 100644 index 0000000..68554dc --- /dev/null +++ b/neethi/src/operator.c @@ -0,0 +1,216 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +struct neethi_operator_t +{ + /* This may be a policy, all, exatlyone, reference + * or an assertion */ + void *value; + + /* The type */ + neethi_operator_type_t type; + + /* Ref count to prevent double frees*/ + int ref; +}; + +AXIS2_EXTERN neethi_operator_t *AXIS2_CALL +neethi_operator_create( + const axutil_env_t *env) +{ + neethi_operator_t *neethi_operator = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + neethi_operator = (neethi_operator_t *)AXIS2_MALLOC(env->allocator, sizeof(neethi_operator_t)); + + if(neethi_operator == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_operator->value = NULL; + neethi_operator->type = OPERATOR_TYPE_UNKNOWN; + neethi_operator->ref = 0; + return neethi_operator; +} + +AXIS2_EXTERN void AXIS2_CALL +neethi_operator_free( + neethi_operator_t *neethi_operator, + const axutil_env_t *env) +{ + if(neethi_operator) + { + if(--(neethi_operator->ref) > 0) + { + return; + } + + if(neethi_operator->value) + { + switch(neethi_operator->type) + { + case OPERATOR_TYPE_POLICY: + neethi_policy_free((neethi_policy_t *)neethi_operator->value, env); + neethi_operator->value = NULL; + break; + + case OPERATOR_TYPE_ALL: + neethi_all_free((neethi_all_t *)neethi_operator->value, env); + neethi_operator->value = NULL; + break; + + case OPERATOR_TYPE_EXACTLYONE: + neethi_exactlyone_free((neethi_exactlyone_t *)neethi_operator-> value, env); + neethi_operator->value = NULL; + break; + + case OPERATOR_TYPE_REFERENCE: + neethi_reference_free((neethi_reference_t *)neethi_operator-> value, env); + neethi_operator->value = NULL; + break; + + case OPERATOR_TYPE_ASSERTION: + neethi_assertion_free((neethi_assertion_t *)neethi_operator-> value, env); + neethi_operator->value = NULL; + break; + + case OPERATOR_TYPE_UNKNOWN: + break; + } + } + AXIS2_FREE(env->allocator, neethi_operator); + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN neethi_operator_type_t AXIS2_CALL +neethi_operator_get_type( + neethi_operator_t *neethi_operator, + const axutil_env_t *env) +{ + return neethi_operator->type; +} + +AXIS2_EXTERN void *AXIS2_CALL +neethi_operator_get_value( + neethi_operator_t *neethi_operator, + const axutil_env_t *env) +{ + return neethi_operator->value; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_operator_set_value( + neethi_operator_t *neethi_operator, + const axutil_env_t *env, + void *value, + neethi_operator_type_t type) +{ + neethi_operator->type = type; + neethi_operator->value = (void *)value; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_operator_serialize( + neethi_operator_t *neethi_operator, + const axutil_env_t *env, + axiom_node_t *parent) +{ + neethi_policy_t *policy = NULL; + neethi_all_t *all = NULL; + neethi_exactlyone_t *exactlyone = NULL; + neethi_reference_t *reference = NULL; + neethi_assertion_t *assertion = NULL; + + if(neethi_operator->value) + { + switch(neethi_operator->type) + { + case OPERATOR_TYPE_POLICY: + policy = (neethi_policy_t *)neethi_operator_get_value(neethi_operator, env); + if(!neethi_policy_serialize(policy, parent, env)) + { + return AXIS2_FAILURE; + } + else + { + return AXIS2_SUCCESS; + } + break; + + case OPERATOR_TYPE_ALL: + all = (neethi_all_t *)neethi_operator_get_value(neethi_operator, env); + return neethi_all_serialize(all, parent, env); + break; + + case OPERATOR_TYPE_EXACTLYONE: + exactlyone = (neethi_exactlyone_t *)neethi_operator_get_value(neethi_operator, env); + return neethi_exactlyone_serialize(exactlyone, parent, env); + break; + + case OPERATOR_TYPE_REFERENCE: + reference = (neethi_reference_t *)neethi_operator_get_value(neethi_operator, env); + return neethi_reference_serialize(reference, parent, env); + break; + + case OPERATOR_TYPE_ASSERTION: + assertion = (neethi_assertion_t *)neethi_operator_get_value(neethi_operator, env); + return neethi_assertion_serialize(assertion, parent, env); + break; + + case OPERATOR_TYPE_UNKNOWN: + break; + } + return AXIS2_SUCCESS; + } + else + return AXIS2_FAILURE; +} + +/* We need this method to prevent freeing the value of operator, because some times we wrap certain + * policy operators inside neethi_operator in order to call some functions.See engine.c in neethi + * for more info */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_operator_set_value_null( + neethi_operator_t *neethi_operator, + const axutil_env_t *env) +{ + neethi_operator->value = NULL; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_operator_increment_ref( + neethi_operator_t *operator, + const axutil_env_t *env) +{ + operator-> ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/policy.c b/neethi/src/policy.c new file mode 100644 index 0000000..af08222 --- /dev/null +++ b/neethi/src/policy.c @@ -0,0 +1,446 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct neethi_policy_t +{ + /* Contains the child components */ + axutil_array_list_t *policy_components; + + /* A wsp:Policy element can have any number of attributes + * This has will store those */ + axutil_hash_t *attributes; + + /* This is the node containing the policy */ + axiom_node_t *root_node; +}; + +static void +neethi_policy_clear_attributes( + axutil_hash_t *attributes, + const axutil_env_t *env); + +/* Creates a neethi_policy object */ +AXIS2_EXTERN neethi_policy_t *AXIS2_CALL +neethi_policy_create( + const axutil_env_t * env) +{ + neethi_policy_t *neethi_policy = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + neethi_policy = (neethi_policy_t *)AXIS2_MALLOC(env->allocator, sizeof(neethi_policy_t)); + + if(neethi_policy == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_policy->policy_components = NULL; + + neethi_policy->policy_components = axutil_array_list_create(env, 0); + if(!(neethi_policy->policy_components)) + { + neethi_policy_free(neethi_policy, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_policy->attributes = axutil_hash_make(env); + neethi_policy->root_node = NULL; + + return neethi_policy; +} + +/* Deallocate the memory for the neethi_policy object */ +AXIS2_EXTERN void AXIS2_CALL +neethi_policy_free( + neethi_policy_t *neethi_policy, + const axutil_env_t *env) +{ + if(neethi_policy) + { + /* We first remove the component list */ + + if(neethi_policy->policy_components) + { + int i = 0; + int size = 0; + + size = axutil_array_list_size(neethi_policy->policy_components, env); + + for(i = 0; i < size; i++) + { + neethi_operator_t *operator = NULL; + operator = (neethi_operator_t *)axutil_array_list_get( + neethi_policy->policy_components, env, i); + if(operator) + { + neethi_operator_free(operator, env); + } + operator = NULL; + } + axutil_array_list_free(neethi_policy->policy_components, env); + neethi_policy->policy_components = NULL; + } + if(neethi_policy->attributes) + { + neethi_policy_clear_attributes(neethi_policy->attributes, env); + neethi_policy->attributes = NULL; + } + if(neethi_policy->root_node) + { + axiom_node_free_tree(neethi_policy->root_node, env); + neethi_policy->root_node = NULL; + } + AXIS2_FREE(env->allocator, neethi_policy); + neethi_policy = NULL; + } + return; +} + +/* This will free the attribute hash and its content.*/ +static void +neethi_policy_clear_attributes( + axutil_hash_t *attributes, + const axutil_env_t *env) +{ + if(attributes) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + const void *key = NULL; + + for(hi = axutil_hash_first(attributes, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, &key, NULL, &val); + + if(key) + { + AXIS2_FREE(env->allocator, (axis2_char_t *)key); + key = NULL; + } + + if(val) + { + AXIS2_FREE(env->allocator, (axis2_char_t *)val); + val = NULL; + } + } + axutil_hash_free(attributes, env); + attributes = NULL; + } +} +/* Implementations */ +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +neethi_policy_get_policy_components( + neethi_policy_t *neethi_policy, + const axutil_env_t *env) +{ + return neethi_policy->policy_components; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_policy_add_policy_components( + neethi_policy_t *neethi_policy, + axutil_array_list_t *arraylist, + const axutil_env_t *env) +{ + int size = axutil_array_list_size(arraylist, env); + int i = 0; + + if(axutil_array_list_ensure_capacity(neethi_policy->policy_components, env, size + 1) + != AXIS2_SUCCESS) + { + return AXIS2_FAILURE; + } + + for(i = 0; i < size; i++) + { + void *value = NULL; + value = axutil_array_list_get(arraylist, env, i); + /* The ref count is incremented in order to prevent double frees.*/ + neethi_operator_increment_ref((neethi_operator_t *)value, env); + axutil_array_list_add(neethi_policy->policy_components, env, value); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_policy_add_operator( + neethi_policy_t *neethi_policy, + const axutil_env_t *env, + neethi_operator_t *operator) +{ + neethi_operator_increment_ref(operator, env); + axutil_array_list_add(neethi_policy->policy_components, env, operator); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +neethi_policy_is_empty( + neethi_policy_t *neethi_policy, + const axutil_env_t *env) +{ + return axutil_array_list_is_empty(neethi_policy->policy_components, env); +} + +/* A normalized policy always has just one child and it is an exactlyone + * first child. So this method */ +AXIS2_EXTERN neethi_exactlyone_t *AXIS2_CALL +neethi_policy_get_exactlyone( + neethi_policy_t *normalized_neethi_policy, + const axutil_env_t *env) +{ + neethi_exactlyone_t *exactlyone = NULL; + axutil_array_list_t *list = NULL; + + list = neethi_policy_get_policy_components(normalized_neethi_policy, env); + if(list) + { + if(axutil_array_list_size(list, env) == 1) + { + neethi_operator_t *op = NULL; + op = (neethi_operator_t *)axutil_array_list_get(list, env, 0); + if(!op) + { + return NULL; + } + if(neethi_operator_get_type(op, env) != OPERATOR_TYPE_EXACTLYONE) + { + return NULL; + } + exactlyone = (neethi_exactlyone_t *)neethi_operator_get_value(op, env); + return exactlyone; + } + else + return NULL; + } + else + return NULL; +} + +/* This function is called for a normalized policy So it will return the components of the only + * child. That should be an exactlyone The children of that exactlyone are all.*/ +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +neethi_policy_get_alternatives( + neethi_policy_t *neethi_policy, + const axutil_env_t *env) +{ + neethi_exactlyone_t *exactlyone = NULL; + exactlyone = neethi_policy_get_exactlyone(neethi_policy, env); + if(!exactlyone) + return NULL; + + return neethi_exactlyone_get_policy_components(exactlyone, env); + +} + +/* This will return any attribute which has the local name of Name */ +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +neethi_policy_get_name( + neethi_policy_t *neethi_policy, + const axutil_env_t *env) +{ + if(neethi_policy->attributes) + { + axutil_qname_t *qname = NULL; + axis2_char_t *name = NULL; + qname = axutil_qname_create(env, NEETHI_NAME, NULL, NULL); + + if(qname) + { + axis2_char_t *key = axutil_qname_to_string(qname, env); + if(key) + { + name = (axis2_char_t *)axutil_hash_get(neethi_policy->attributes, key, + AXIS2_HASH_KEY_STRING); + } + axutil_qname_free(qname, env); + qname = NULL; + return name; + } + else + { + return NULL; + } + } + else + { + return NULL; + } +} + +/* This method will return the attribute value of wsu:Id if there are any such attributes */ +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +neethi_policy_get_id( + neethi_policy_t *neethi_policy, + const axutil_env_t *env) +{ + if(neethi_policy->attributes) + { + axis2_char_t *id = NULL; + axutil_qname_t *qname = NULL; + qname = axutil_qname_create(env, NEETHI_ID, NEETHI_WSU_NS, NULL); + + if(qname) + { + axis2_char_t *key = axutil_qname_to_string(qname, env); + if(key) + { + id = (axis2_char_t *)axutil_hash_get(neethi_policy->attributes, key, + AXIS2_HASH_KEY_STRING); + } + axutil_qname_free(qname, env); + qname = NULL; + return id; + } + else + { + return NULL; + } + } + else + { + return NULL; + } +} + +/* When we encounter an attribute with wsu:Id we will store it in the hash. We are not + * considering the prefix. Just the namespace and the local_name. */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_policy_set_id( + neethi_policy_t * neethi_policy, + const axutil_env_t * env, + axis2_char_t * id) +{ + axutil_qname_t *qname = NULL; + axis2_char_t *key = NULL; + + qname = axutil_qname_create(env, NEETHI_ID, NEETHI_WSU_NS, NULL); + + if(qname) + { + key = axutil_qname_to_string(qname, env); + if(key) + { + axutil_hash_set(neethi_policy->attributes, axutil_strdup(env, key), + AXIS2_HASH_KEY_STRING, axutil_strdup(env, id)); + } + axutil_qname_free(qname, env); + return AXIS2_SUCCESS; + } + else + { + return AXIS2_FAILURE; + } +} + +/* When we encounter an attribute with Name we will store it in the hash. This has no Namespace.*/ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_policy_set_name( + neethi_policy_t * neethi_policy, + const axutil_env_t * env, + axis2_char_t * name) +{ + axutil_qname_t *qname = NULL; + axis2_char_t *key = NULL; + + qname = axutil_qname_create(env, NEETHI_NAME, NULL, NULL); + + if(qname) + { + key = axutil_qname_to_string(qname, env); + if(key) + { + axutil_hash_set(neethi_policy->attributes, axutil_strdup(env, key), + AXIS2_HASH_KEY_STRING, axutil_strdup(env, name)); + } + axutil_qname_free(qname, env); + return AXIS2_SUCCESS; + } + else + { + return AXIS2_FAILURE; + } +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +neethi_policy_get_attributes( + neethi_policy_t *neethi_policy, + const axutil_env_t *env) +{ + return neethi_policy->attributes; +} + +/*This function is for serializing*/ +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +neethi_policy_serialize( + neethi_policy_t *neethi_policy, + axiom_node_t *parent, + const axutil_env_t *env) +{ + axiom_node_t *policy_node = NULL; + axiom_element_t *policy_ele = NULL; + axiom_namespace_t *policy_ns = NULL; + axutil_array_list_t *components = NULL; + + policy_ns = axiom_namespace_create(env, NEETHI_NAMESPACE, NEETHI_PREFIX); + policy_ele = axiom_element_create(env, parent, NEETHI_POLICY, policy_ns, &policy_node); + if(!policy_ele) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Cannot create policy node. Policy serialization failed"); + return NULL; + } + + components = neethi_policy_get_policy_components(neethi_policy, env); + if(components) + { + int i = 0; + axis2_status_t status = AXIS2_FAILURE; + for(i = 0; i < axutil_array_list_size(components, env); ++i) + { + neethi_operator_t *operator = NULL; + operator = (neethi_operator_t *)axutil_array_list_get(components, env, i); + if(operator) + { + status = neethi_operator_serialize(operator, env, policy_node); + if(status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Neethi operator serialization failed."); + return NULL; + } + } + } + } + return policy_node; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_policy_set_root_node( + neethi_policy_t *policy, + const axutil_env_t *env, + axiom_node_t *root_node) +{ + policy->root_node = root_node; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/reference.c b/neethi/src/reference.c new file mode 100644 index 0000000..8b52a26 --- /dev/null +++ b/neethi/src/reference.c @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct neethi_reference_t +{ + axis2_char_t *uri; +}; + +AXIS2_EXTERN neethi_reference_t *AXIS2_CALL +neethi_reference_create( + const axutil_env_t *env) +{ + neethi_reference_t *neethi_reference = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + neethi_reference = (neethi_reference_t *)AXIS2_MALLOC(env->allocator, + sizeof(neethi_reference_t)); + + if(neethi_reference == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_reference->uri = NULL; + + return neethi_reference; +} + +AXIS2_EXTERN void AXIS2_CALL +neethi_reference_free( + neethi_reference_t *neethi_reference, + const axutil_env_t *env) +{ + if(neethi_reference) + { + AXIS2_FREE(env->allocator, neethi_reference); + neethi_reference = NULL; + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +neethi_reference_get_uri( + neethi_reference_t *neethi_reference, + const axutil_env_t *env) +{ + return neethi_reference->uri; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_reference_set_uri( + neethi_reference_t *neethi_reference, + const axutil_env_t *env, + axis2_char_t *uri) +{ + neethi_reference->uri = uri; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_reference_serialize( + neethi_reference_t *neethi_reference, + axiom_node_t *parent, + const axutil_env_t *env) +{ + axiom_node_t *ref_node = NULL; + axiom_element_t *ref_ele = NULL; + axiom_namespace_t *policy_ns = NULL; + axiom_attribute_t *att_uri = NULL; + + policy_ns = axiom_namespace_create(env, NEETHI_NAMESPACE, NEETHI_PREFIX); + ref_ele = axiom_element_create(env, parent, NEETHI_REFERENCE, policy_ns, &ref_node); + if(!ref_node) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "'reference' node creation failed. Cannot serialize 'reference' assertion"); + return AXIS2_FAILURE; + } + + att_uri = axiom_attribute_create(env, NEETHI_URI, neethi_reference->uri, NULL); + axiom_element_add_attribute(ref_ele, env, att_uri, ref_node); + + return AXIS2_SUCCESS; +} diff --git a/neethi/src/registry.c b/neethi/src/registry.c new file mode 100644 index 0000000..4ba0851 --- /dev/null +++ b/neethi/src/registry.c @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct neethi_registry_t +{ + axutil_hash_t *registry; + neethi_registry_t *parent; +}; + +AXIS2_EXTERN neethi_registry_t *AXIS2_CALL +neethi_registry_create( + const axutil_env_t *env) +{ + neethi_registry_t *neethi_registry = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + neethi_registry = (neethi_registry_t *)AXIS2_MALLOC(env->allocator, sizeof(neethi_registry_t)); + + if(neethi_registry == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_registry->registry = NULL; + + neethi_registry->registry = axutil_hash_make(env); + if(!(neethi_registry->registry)) + { + neethi_registry_free(neethi_registry, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + neethi_registry->parent = NULL; + + return neethi_registry; +} + +AXIS2_EXTERN neethi_registry_t *AXIS2_CALL +neethi_registry_create_with_parent( + const axutil_env_t *env, + neethi_registry_t *parent) +{ + neethi_registry_t *neethi_registry = NULL; + + neethi_registry = neethi_registry_create(env); + if(!neethi_registry) + return NULL; + + neethi_registry->parent = parent; + return neethi_registry; +} + +AXIS2_EXTERN void AXIS2_CALL +neethi_registry_free( + neethi_registry_t *neethi_registry, + const axutil_env_t *env) +{ + if(neethi_registry->registry) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + for(hi = axutil_hash_first(neethi_registry->registry, env); hi; hi = axutil_hash_next(env, + hi)) + { + neethi_policy_t *neethi_policy = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + neethi_policy = (neethi_policy_t *)val; + if(neethi_policy) + neethi_policy_free(neethi_policy, env); + val = NULL; + neethi_policy = NULL; + + } + axutil_hash_free(neethi_registry->registry, env); + } + if(neethi_registry->parent) + { + neethi_registry->parent = NULL; + } + AXIS2_FREE(env->allocator, neethi_registry); +} + +/* Implementations */ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +neethi_registry_register( + neethi_registry_t *neethi_registry, + const axutil_env_t *env, + axis2_char_t *key, + neethi_policy_t *value) +{ + axutil_hash_set(neethi_registry->registry, key, AXIS2_HASH_KEY_STRING, value); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN neethi_policy_t *AXIS2_CALL +neethi_registry_lookup( + neethi_registry_t *neethi_registry, + const axutil_env_t *env, + axis2_char_t *key) +{ + neethi_policy_t *policy = NULL; + + policy = (neethi_policy_t *)axutil_hash_get(neethi_registry->registry, key, + AXIS2_HASH_KEY_STRING); + + if(!policy && neethi_registry->parent) + { + return neethi_registry_lookup(neethi_registry->parent, env, key); + } + return policy; +} diff --git a/neethi/src/rmpolicy/Makefile.am b/neethi/src/rmpolicy/Makefile.am new file mode 100644 index 0000000..1b46d73 --- /dev/null +++ b/neethi/src/rmpolicy/Makefile.am @@ -0,0 +1,13 @@ +TESTS = + +noinst_LTLIBRARIES = librm_policy.la + +librm_policy_la_SOURCES = rm_assertion.c rm_assertion_builder.c + +librm_policy_la_LIBADD = ../../../util/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../include \ + -I ../../../util/include \ + -I ../../../axiom/include \ + -I ../../../include diff --git a/neethi/src/rmpolicy/rm_assertion.c b/neethi/src/rmpolicy/rm_assertion.c new file mode 100644 index 0000000..42f0fd4 --- /dev/null +++ b/neethi/src/rmpolicy/rm_assertion.c @@ -0,0 +1,511 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axis2_rm_assertion_t +{ + /* RM Policy 1.1 assertions */ + axis2_bool_t is_sequence_str; + axis2_bool_t is_sequence_transport_security; + axis2_bool_t is_exactly_once; + axis2_bool_t is_atleast_once; + axis2_bool_t is_atmost_once; + axis2_bool_t is_inorder; + + /* RM Policy 1.0 assertions */ + axis2_char_t *inactivity_timeout; + axis2_char_t *retrans_interval; + axis2_char_t *ack_interval; + axis2_bool_t is_exp_backoff; + + /* Sandesha2 specific assrtions */ + axis2_char_t *storage_mgr; + axis2_char_t *message_types_to_drop; + axis2_char_t *max_retrans_count; + axis2_char_t *sender_sleep_time; + axis2_char_t *invoker_sleep_time; + axis2_char_t *polling_wait_time; + axis2_char_t *terminate_delay; + axis2_char_t *sandesha2_db; + axis2_char_t *spec_version; +}; + +AXIS2_EXTERN axis2_rm_assertion_t *AXIS2_CALL +axis2_rm_assertion_create( + const axutil_env_t * env) +{ + axis2_rm_assertion_t *rm_assertion; + + rm_assertion = (axis2_rm_assertion_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_rm_assertion_t)); + + if(rm_assertion == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + rm_assertion->is_sequence_str = AXIS2_FALSE; + rm_assertion->is_sequence_transport_security = AXIS2_FALSE; + rm_assertion->is_exactly_once = AXIS2_TRUE; + rm_assertion->is_atleast_once = AXIS2_FALSE; + rm_assertion->is_atmost_once = AXIS2_FALSE; + rm_assertion->is_inorder = AXIS2_FALSE; + + /* RM Policy 1.0 assertions */ + rm_assertion->inactivity_timeout = NULL; + rm_assertion->retrans_interval = NULL; + rm_assertion->ack_interval = NULL; + rm_assertion->is_exp_backoff = AXIS2_FALSE; + + /* Sandesha2 specific assrtions */ + rm_assertion->storage_mgr = NULL; + rm_assertion->message_types_to_drop = NULL; + rm_assertion->max_retrans_count = NULL; + rm_assertion->sender_sleep_time = NULL; + rm_assertion->invoker_sleep_time = NULL; + rm_assertion->polling_wait_time = NULL; + rm_assertion->terminate_delay = NULL; + rm_assertion->sandesha2_db = NULL; + rm_assertion->spec_version = NULL; + + return rm_assertion; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_rm_assertion_free( + axis2_rm_assertion_t * rm_assertion, + const axutil_env_t * env) +{ + if(rm_assertion) + { + AXIS2_FREE(env->allocator, rm_assertion); + rm_assertion = NULL; + } + + return; +} + +/* Implementations. + * Following functions are getters and setters + * for rm_assertion struct */ + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_rm_assertion_get_is_sequence_str( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->is_sequence_str; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_is_sequence_str( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_bool_t is_sequence_str) +{ + rm_assertion->is_sequence_str = is_sequence_str; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_rm_assertion_get_is_sequence_transport_security( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->is_sequence_transport_security; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_is_sequence_transport_security( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_bool_t is_sequence_transport_security) +{ + rm_assertion->is_sequence_transport_security = is_sequence_transport_security; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_rm_assertion_get_is_exactly_once( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->is_exactly_once; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_is_exactly_once( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_bool_t is_exactly_once) +{ + rm_assertion->is_exactly_once = is_exactly_once; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_rm_assertion_get_is_atleast_once( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->is_atleast_once; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_is_atleast_once( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_bool_t is_atleast_once) +{ + rm_assertion->is_atleast_once = is_atleast_once; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_rm_assertion_get_is_atmost_once( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->is_atmost_once; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_is_atmost_once( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_bool_t is_atmost_once) +{ + rm_assertion->is_atmost_once = is_atmost_once; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_rm_assertion_get_is_inorder( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->is_inorder; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_is_inorder( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_bool_t is_inorder) +{ + rm_assertion->is_inorder = is_inorder; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_rm_assertion_get_inactivity_timeout( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->inactivity_timeout; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_inactivity_timeout( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* inactivity_timeout) +{ + rm_assertion->inactivity_timeout = inactivity_timeout; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_rm_assertion_get_retrans_interval( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->retrans_interval; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_retrans_interval( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* retrans_interval) +{ + rm_assertion->retrans_interval = retrans_interval; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_rm_assertion_get_ack_interval( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->ack_interval; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_ack_interval( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* ack_interval) +{ + rm_assertion->ack_interval = ack_interval; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_rm_assertion_get_is_exp_backoff( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->is_exp_backoff; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_is_exp_backoff( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_bool_t is_exp_backoff) +{ + rm_assertion->is_exp_backoff = is_exp_backoff; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_rm_assertion_get_storage_mgr( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->storage_mgr; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_storage_mgr( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* storage_mgr) +{ + rm_assertion->storage_mgr = storage_mgr; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_rm_assertion_get_message_types_to_drop( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->message_types_to_drop; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_message_types_to_drop( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* message_types_to_drop) +{ + rm_assertion->message_types_to_drop = message_types_to_drop; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_rm_assertion_get_max_retrans_count( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->max_retrans_count; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_max_retrans_count( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* max_retrans_count) +{ + rm_assertion->max_retrans_count = max_retrans_count; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_rm_assertion_get_sender_sleep_time( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->sender_sleep_time; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_sender_sleep_time( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* sender_sleep_time) +{ + rm_assertion->sender_sleep_time = sender_sleep_time; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_rm_assertion_get_invoker_sleep_time( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->invoker_sleep_time; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_invoker_sleep_time( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* invoker_sleep_time) +{ + rm_assertion->invoker_sleep_time = invoker_sleep_time; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_rm_assertion_get_polling_wait_time( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->polling_wait_time; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_polling_wait_time( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* polling_wait_time) +{ + rm_assertion->polling_wait_time = polling_wait_time; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_rm_assertion_get_terminate_delay( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->terminate_delay; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_terminate_delay( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* terminate_delay) +{ + rm_assertion->terminate_delay = terminate_delay; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_rm_assertion_get_sandesha2_db( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->sandesha2_db; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_sandesha2_db( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* sandesha2_db) +{ + rm_assertion->sandesha2_db = sandesha2_db; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_rm_assertion_get_spec_version( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env) +{ + return rm_assertion->spec_version; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_rm_assertion_set_spec_version( + axis2_rm_assertion_t *rm_assertion, + const axutil_env_t * env, + axis2_char_t* spec_version) +{ + rm_assertion->spec_version = spec_version; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_rm_assertion_t* AXIS2_CALL +axis2_rm_assertion_get_from_policy( + const axutil_env_t *env, + neethi_policy_t *policy) +{ + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_operator_t *operator = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + int i = 0; + + alternatives = neethi_policy_get_alternatives(policy, env); + + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(value) + { + if(type == ASSERTION_TYPE_RM_ASSERTION) + { + return (axis2_rm_assertion_t *)value; + } + } + } + + return NULL; +} + diff --git a/neethi/src/rmpolicy/rm_assertion_builder.c b/neethi/src/rmpolicy/rm_assertion_builder.c new file mode 100644 index 0000000..9b92fd7 --- /dev/null +++ b/neethi/src/rmpolicy/rm_assertion_builder.c @@ -0,0 +1,562 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +/*private functions*/ + +static axis2_status_t AXIS2_CALL +axis2_rm_assertion_builder_process_sandesha2_assertions( + const axutil_env_t *env, + axis2_rm_assertion_t *rm_assertion, + axiom_node_t *node, + axiom_element_t *element); + +static axis2_status_t AXIS2_CALL +axis2_rm_assertion_builder_populate_for_10( + const axutil_env_t *env, + axis2_rm_assertion_t *rm_assertion, + axiom_node_t *rm_assertion_node, + axiom_element_t *rm_assertion_element); + +static axis2_status_t AXIS2_CALL +axis2_rm_assertion_builder_populate_for_11( + const axutil_env_t *env, + axis2_rm_assertion_t *rm_assertion, + axiom_node_t *rm_assertion_node, + axiom_element_t *rm_assertion_element); + +static axis2_status_t AXIS2_CALL +axis2_rm_assertion_builder_process_delivery_assuarance( + const axutil_env_t *env, + axis2_rm_assertion_t *rm_assertion, + axiom_node_t *da_node, + axiom_element_t *da_element); + +/* This functions retrives a rm_assertion axiom_node + * which may be 1.0 or 1.1 and return a rm_assertion + * struct */ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +axis2_rm_assertion_builder_build( + const axutil_env_t *env, + axiom_node_t *rm_assertion_node, + axiom_element_t *rm_assertion_ele) +{ + axis2_rm_assertion_t *rm_assertion = NULL; + axis2_status_t status = AXIS2_SUCCESS; + axiom_children_iterator_t *children_iter = NULL; + neethi_assertion_t *assertion = NULL; + axis2_char_t *ns = NULL; + axutil_qname_t *node_qname = NULL; + + node_qname = axiom_element_get_qname(rm_assertion_ele, env, rm_assertion_node); + if(!node_qname) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Cannot get qname from element"); + return NULL; + } + + ns = axutil_qname_get_uri(node_qname, env); + if(!ns) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Cannot get namespace from element."); + return NULL; + } + + rm_assertion = axis2_rm_assertion_create(env); + if(!rm_assertion) + { + return NULL; + } + + /* First we check whether this is in 1.0 or 1.1 + * namespace. Then we called the appropriate builder */ + + children_iter = axiom_element_get_children(rm_assertion_ele, env, rm_assertion_node); + + if(!axutil_strcmp(ns, AXIS2_RM_POLICY_10_NS)) + { + status = axis2_rm_assertion_builder_populate_for_10(env, rm_assertion, rm_assertion_node, + rm_assertion_ele); + + axiom_children_iterator_reset(children_iter, env); + + } + else if(!axutil_strcmp(ns, AXIS2_RM_POLICY_11_NS)) + { + status = axis2_rm_assertion_builder_populate_for_11(env, rm_assertion, rm_assertion_node, + rm_assertion_ele); + } + + if(status == AXIS2_FAILURE) + { + axis2_rm_assertion_free(rm_assertion, env); + rm_assertion = NULL; + return NULL; + } + + /*children_iter = axiom_element_get_children(rm_assertion_ele, env, rm_assertion_node);*/ + if(children_iter) + { + while(axiom_children_iterator_has_next(children_iter, env)) + { + axiom_node_t *node = NULL; + axiom_element_t *ele = NULL; + axis2_char_t *local_name = NULL; + axutil_qname_t *node_qname = NULL; + + node = axiom_children_iterator_next(children_iter, env); + if(node) + { + if(axiom_node_get_node_type(node, env) == AXIOM_ELEMENT) + { + ele = (axiom_element_t *)axiom_node_get_data_element(node, env); + node_qname = axiom_element_get_qname(ele, env, node); + if(!node_qname) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Cannot get qname from element %s.", local_name); + return NULL; + } + ns = axutil_qname_get_uri(node_qname, env); + if(!ns) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Cannot get namespace from element %s.", local_name); + return NULL; + } + if(!axutil_strcmp(ns, AXIS2_SANDESHA2_NS)) + { + status = axis2_rm_assertion_builder_process_sandesha2_assertions(env, + rm_assertion, node, ele); + if(status == AXIS2_FAILURE) + { + axis2_rm_assertion_free(rm_assertion, env); + rm_assertion = NULL; + return NULL; + } + } + } + } + } + } + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)axis2_rm_assertion_free, rm_assertion, ASSERTION_TYPE_RM_ASSERTION); + return assertion; +} + +static axis2_status_t AXIS2_CALL +axis2_rm_assertion_builder_populate_for_10( + const axutil_env_t *env, + axis2_rm_assertion_t *rm_assertion, + axiom_node_t *rm_assertion_node, + axiom_element_t *rm_assertion_element) +{ + axiom_children_iterator_t *children_iter = NULL; + axis2_status_t status = AXIS2_FAILURE; + + /* In rm 1.0 it is just child elements which inside + * rm_assertion contains all the properties. */ + + status = axis2_rm_assertion_set_spec_version(rm_assertion, env, RM_SPEC_VERSION_1_0); + + children_iter = axiom_element_get_children(rm_assertion_element, env, rm_assertion_node); + if(children_iter) + { + while(axiom_children_iterator_has_next(children_iter, env)) + { + axiom_node_t *node = NULL; + axiom_element_t *ele = NULL; + axis2_char_t *local_name = NULL; + node = axiom_children_iterator_next(children_iter, env); + if(node) + { + if(axiom_node_get_node_type(node, env) == AXIOM_ELEMENT) + { + ele = (axiom_element_t *)axiom_node_get_data_element(node, env); + if(ele) + { + axutil_qname_t *node_qname = NULL; + axis2_char_t *ns = NULL; + node_qname = axiom_element_get_qname(ele, env, node); + if(!node) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Cannot get qname from element"); + return AXIS2_FAILURE; + } + + ns = axutil_qname_get_uri(node_qname, env); + if(!ns) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Cannot get namespace from element."); + return AXIS2_FAILURE; + } + + if(axutil_strcmp(ns, AXIS2_RM_POLICY_10_NS)) + { + continue; + } + + local_name = axiom_element_get_localname(ele, env); + if(local_name) + { + + if(!axutil_strcmp(local_name, AXIS2_RM_INACTIVITY_TIMEOUT)) + { + axis2_char_t *inactivity_timeout = NULL; + axutil_qname_t *qname = NULL; + + qname = axutil_qname_create(env, "Milliseconds", NULL, NULL); + + inactivity_timeout = axiom_element_get_attribute_value(ele, env, + qname); + if(qname) + { + axutil_qname_free(qname, env); + qname = NULL; + } + status = axis2_rm_assertion_set_inactivity_timeout(rm_assertion, + env, inactivity_timeout); + } + else if(!axutil_strcmp(local_name, + AXIS2_RM_BASE_RETRANSMISSION_INTERVAL)) + { + axis2_char_t *rti = NULL; + axutil_qname_t *qname = NULL; + qname = axutil_qname_create(env, "Milliseconds", NULL, NULL); + + rti = axiom_element_get_attribute_value(ele, env, qname); + if(qname) + { + axutil_qname_free(qname, env); + qname = NULL; + } + status = axis2_rm_assertion_set_retrans_interval(rm_assertion, env, + rti); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_EXPONENTIAL_BACK_OFF)) + { + status = axis2_rm_assertion_set_is_exp_backoff(rm_assertion, env, + AXIS2_TRUE); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_ACKNOWLEDGEMENT_INTERVAL)) + { + axis2_char_t *ack_interval = NULL; + axutil_qname_t *qname = NULL; + + qname = axutil_qname_create(env, "Milliseconds", NULL, NULL); + + ack_interval = axiom_element_get_attribute_value(ele, env, qname); + if(qname) + { + axutil_qname_free(qname, env); + qname = NULL; + } + status = axis2_rm_assertion_set_ack_interval(rm_assertion, env, + ack_interval); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Unknown Assertion %s ", local_name); + return AXIS2_FAILURE; + } + } + } + } + } + } + } + return status; +} + +/* In rm 1.1 rm_assertion contains a policy element as + * a child element. We are not creating a policy object + * for policy element. Becasue then the processing become + * complex.So we just parse the axiom model */ + +static axis2_status_t AXIS2_CALL +axis2_rm_assertion_builder_populate_for_11( + const axutil_env_t *env, + axis2_rm_assertion_t *rm_assertion, + axiom_node_t *rm_assertion_node, + axiom_element_t *rm_assertion_element) +{ + axiom_children_iterator_t *children_iter = NULL; + axis2_status_t status = AXIS2_FAILURE; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + + status = axis2_rm_assertion_set_spec_version(rm_assertion, env, RM_SPEC_VERSION_1_1); + + child_node = axiom_node_get_first_element(rm_assertion_node, env); + if(child_node) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + children_iter = axiom_element_get_children(child_element, env, child_node); + if(children_iter) + { + while(axiom_children_iterator_has_next(children_iter, env)) + { + axiom_node_t *node = NULL; + axiom_element_t *ele = NULL; + axis2_char_t *local_name = NULL; + node = axiom_children_iterator_next(children_iter, env); + if(node) + { + if(axiom_node_get_node_type(node, env) == AXIOM_ELEMENT) + { + ele = (axiom_element_t *)axiom_node_get_data_element(node, env); + if(ele) + { + axutil_qname_t *node_qname = NULL; + axis2_char_t *ns = NULL; + node_qname = axiom_element_get_qname(ele, env, node); + if(!node) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Cannot get qname from element"); + return AXIS2_FAILURE; + } + + ns = axutil_qname_get_uri(node_qname, env); + if(!ns) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Cannot get namespace from element."); + return AXIS2_FAILURE; + } + + if(axutil_strcmp(ns, AXIS2_RM_POLICY_11_NS)) + { + continue; + } + local_name = axiom_element_get_localname(ele, env); + if(local_name) + { + if(!axutil_strcmp(local_name, AXIS2_RM_SEQUENCE_STR)) + { + status = axis2_rm_assertion_set_is_sequence_str( + rm_assertion, env, AXIS2_TRUE); + } + else if(!axutil_strcmp(local_name, + AXIS2_RM_SEQUENCE_TRANSPORT_SECURITY)) + { + status + = axis2_rm_assertion_set_is_sequence_transport_security( + rm_assertion, env, AXIS2_TRUE); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_DELIVERY_ASSURANCE)) + { + status + = axis2_rm_assertion_builder_process_delivery_assuarance( + env, rm_assertion, node, ele); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Unknown Assertion %s ", local_name); + return AXIS2_FAILURE; + } + } + } + } + } + } + } + } + } + + return status; +} + +static axis2_status_t AXIS2_CALL +axis2_rm_assertion_builder_process_delivery_assuarance( + const axutil_env_t *env, + axis2_rm_assertion_t *rm_assertion, + axiom_node_t *da_node, + axiom_element_t *da_element) +{ + axiom_children_iterator_t *children_iter = NULL; + axis2_status_t status = AXIS2_FAILURE; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + + child_node = axiom_node_get_first_element(da_node, env); + if(child_node) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + children_iter = axiom_element_get_children(child_element, env, child_node); + if(children_iter) + { + while(axiom_children_iterator_has_next(children_iter, env)) + { + axiom_node_t *node = NULL; + axiom_element_t *ele = NULL; + axis2_char_t *local_name = NULL; + node = axiom_children_iterator_next(children_iter, env); + if(node) + { + if(axiom_node_get_node_type(node, env) == AXIOM_ELEMENT) + { + ele = (axiom_element_t *)axiom_node_get_data_element(node, env); + if(ele) + { + local_name = axiom_element_get_localname(ele, env); + if(local_name) + { + if(!axutil_strcmp(local_name, AXIS2_RM_EXACTLY_ONCE)) + { + status = axis2_rm_assertion_set_is_exactly_once( + rm_assertion, env, AXIS2_TRUE); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_AT_LEAST_ONCE)) + { + status = axis2_rm_assertion_set_is_atleast_once( + rm_assertion, env, AXIS2_TRUE); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_AT_MOST_ONCE)) + { + status = axis2_rm_assertion_set_is_atmost_once( + rm_assertion, env, AXIS2_TRUE); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_IN_ORDER)) + { + status = axis2_rm_assertion_set_is_inorder(rm_assertion, + env, AXIS2_TRUE); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Unknown Assertion %s ", local_name); + return AXIS2_FAILURE; + } + } + } + } + } + } + } + } + } + return status; +} + +static axis2_status_t AXIS2_CALL +axis2_rm_assertion_builder_process_sandesha2_assertions( + const axutil_env_t *env, + axis2_rm_assertion_t *rm_assertion, + axiom_node_t *node, + axiom_element_t *element) +{ + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *local_name = NULL; + + if(element) + { + local_name = axiom_element_get_localname(element, env); + if(local_name) + { + if(!axutil_strcmp(local_name, AXIS2_RM_BASE_RETRANSMISSION_INTERVAL)) + { + axis2_char_t *rti = NULL; + rti = axiom_element_get_text(element, env, node); + return axis2_rm_assertion_set_retrans_interval(rm_assertion, env, rti); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_INACTIVITY_TIMEOUT)) + { + axis2_char_t *inactivity_timeout = NULL; + inactivity_timeout = axiom_element_get_text(element, env, node); + return axis2_rm_assertion_set_inactivity_timeout(rm_assertion, env, + inactivity_timeout); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_ACKNOWLEDGEMENT_INTERVAL)) + { + axis2_char_t *ack_interval = NULL; + ack_interval = axiom_element_get_text(element, env, node); + return axis2_rm_assertion_set_ack_interval(rm_assertion, env, ack_interval); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_STORAGE_MANAGER)) + { + axis2_char_t *storage_mgr = NULL; + storage_mgr = axiom_element_get_text(element, env, node); + return axis2_rm_assertion_set_storage_mgr(rm_assertion, env, storage_mgr); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_SANDESHA2_DB)) + { + axis2_char_t *sandesha2_db = NULL; + sandesha2_db = axiom_element_get_text(element, env, node); + return axis2_rm_assertion_set_sandesha2_db(rm_assertion, env, sandesha2_db); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_MESSAGE_TYPES_TO_DROP)) + { + axis2_char_t *message_types_to_drop = NULL; + message_types_to_drop = axiom_element_get_text(element, env, node); + return axis2_rm_assertion_set_message_types_to_drop(rm_assertion, env, + message_types_to_drop); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_MAX_RETRANS_COUNT)) + { + axis2_char_t *retrans_count = NULL; + retrans_count = axiom_element_get_text(element, env, node); + return axis2_rm_assertion_set_max_retrans_count(rm_assertion, env, retrans_count); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_SENDER_SLEEP_TIME)) + { + axis2_char_t *sender_sleep_time = NULL; + sender_sleep_time = axiom_element_get_text(element, env, node); + return axis2_rm_assertion_set_sender_sleep_time(rm_assertion, env, + sender_sleep_time); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_INVOKER_SLEEP_TIME)) + { + axis2_char_t *invoker_sleep_time = NULL; + invoker_sleep_time = axiom_element_get_text(element, env, node); + return axis2_rm_assertion_set_invoker_sleep_time(rm_assertion, env, + invoker_sleep_time); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_POLLING_WAIT_TIME)) + { + axis2_char_t *polling_wait_time = NULL; + polling_wait_time = axiom_element_get_text(element, env, node); + return axis2_rm_assertion_set_polling_wait_time(rm_assertion, env, + polling_wait_time); + } + else if(!axutil_strcmp(local_name, AXIS2_RM_TERMINATE_DELAY)) + { + axis2_char_t *terminate_delay = NULL; + terminate_delay = axiom_element_get_text(element, env, node); + return axis2_rm_assertion_set_terminate_delay(rm_assertion, env, terminate_delay); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Unknown Assertion %s ", + local_name); + return AXIS2_FAILURE; + } + } + } + return status; +} + diff --git a/neethi/src/samples/test1.xml b/neethi/src/samples/test1.xml new file mode 100644 index 0000000..6cf1539 --- /dev/null +++ b/neethi/src/samples/test1.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/neethi/src/samples/test10.xml b/neethi/src/samples/test10.xml new file mode 100644 index 0000000..0c16d15 --- /dev/null +++ b/neethi/src/samples/test10.xml @@ -0,0 +1 @@ + diff --git a/neethi/src/samples/test11.xml b/neethi/src/samples/test11.xml new file mode 100644 index 0000000..453688a --- /dev/null +++ b/neethi/src/samples/test11.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/neethi/src/samples/test12.xml b/neethi/src/samples/test12.xml new file mode 100644 index 0000000..322d865 --- /dev/null +++ b/neethi/src/samples/test12.xml @@ -0,0 +1 @@ +sec:X509v3wsp:Body() \ No newline at end of file diff --git a/neethi/src/samples/test13.xml b/neethi/src/samples/test13.xml new file mode 100644 index 0000000..7817caf --- /dev/null +++ b/neethi/src/samples/test13.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/neethi/src/samples/test14.xml b/neethi/src/samples/test14.xml new file mode 100644 index 0000000..00dcab5 --- /dev/null +++ b/neethi/src/samples/test14.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/neethi/src/samples/test15.xml b/neethi/src/samples/test15.xml new file mode 100644 index 0000000..d8b2e20 --- /dev/null +++ b/neethi/src/samples/test15.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/neethi/src/samples/test16.xml b/neethi/src/samples/test16.xml new file mode 100644 index 0000000..7304862 --- /dev/null +++ b/neethi/src/samples/test16.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/neethi/src/samples/test17.xml b/neethi/src/samples/test17.xml new file mode 100644 index 0000000..fc995b1 --- /dev/null +++ b/neethi/src/samples/test17.xml @@ -0,0 +1 @@ +sec:X509v3sec:Kerberosv5TGTsec:Kerberosv5ST \ No newline at end of file diff --git a/neethi/src/samples/test18.xml b/neethi/src/samples/test18.xml new file mode 100644 index 0000000..0c6f9dc --- /dev/null +++ b/neethi/src/samples/test18.xml @@ -0,0 +1 @@ + diff --git a/neethi/src/samples/test19.xml b/neethi/src/samples/test19.xml new file mode 100644 index 0000000..243054a --- /dev/null +++ b/neethi/src/samples/test19.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/neethi/src/samples/test2.xml b/neethi/src/samples/test2.xml new file mode 100644 index 0000000..13d7a1b --- /dev/null +++ b/neethi/src/samples/test2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/neethi/src/samples/test20.xml b/neethi/src/samples/test20.xml new file mode 100644 index 0000000..be83fae --- /dev/null +++ b/neethi/src/samples/test20.xml @@ -0,0 +1 @@ + diff --git a/neethi/src/samples/test21.xml b/neethi/src/samples/test21.xml new file mode 100644 index 0000000..aecc311 --- /dev/null +++ b/neethi/src/samples/test21.xml @@ -0,0 +1,10 @@ + + + + sec:X509v3 + + + + wsp:Body() + + \ No newline at end of file diff --git a/neethi/src/samples/test22.xml b/neethi/src/samples/test22.xml new file mode 100644 index 0000000..8942352 --- /dev/null +++ b/neethi/src/samples/test22.xml @@ -0,0 +1 @@ +sec:X509v3 \ No newline at end of file diff --git a/neethi/src/samples/test23.xml b/neethi/src/samples/test23.xml new file mode 100644 index 0000000..e0c1bf8 --- /dev/null +++ b/neethi/src/samples/test23.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/neethi/src/samples/test24.xml b/neethi/src/samples/test24.xml new file mode 100644 index 0000000..2aa5b09 --- /dev/null +++ b/neethi/src/samples/test24.xml @@ -0,0 +1 @@ +wsp:Body() \ No newline at end of file diff --git a/neethi/src/samples/test25.xml b/neethi/src/samples/test25.xml new file mode 100644 index 0000000..378051d --- /dev/null +++ b/neethi/src/samples/test25.xml @@ -0,0 +1,7 @@ + + A + B + C + \ No newline at end of file diff --git a/neethi/src/samples/test3.xml b/neethi/src/samples/test3.xml new file mode 100644 index 0000000..a3bc427 --- /dev/null +++ b/neethi/src/samples/test3.xml @@ -0,0 +1,20 @@ + + + + + + sec:X509v3 + + + + + sec:X509v3 + + + + + sec:Kerberosv5TGT + + + + \ No newline at end of file diff --git a/neethi/src/samples/test4.xml b/neethi/src/samples/test4.xml new file mode 100644 index 0000000..a6af9f4 --- /dev/null +++ b/neethi/src/samples/test4.xml @@ -0,0 +1 @@ +sec:X509v3sec:X509v3 \ No newline at end of file diff --git a/neethi/src/samples/test5.xml b/neethi/src/samples/test5.xml new file mode 100644 index 0000000..7c72aff --- /dev/null +++ b/neethi/src/samples/test5.xml @@ -0,0 +1 @@ +sec:X509v3sec:X509v3sec:Kerberosv5TGT \ No newline at end of file diff --git a/neethi/src/samples/test6.xml b/neethi/src/samples/test6.xml new file mode 100644 index 0000000..4003b62 --- /dev/null +++ b/neethi/src/samples/test6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/neethi/src/samples/test7.xml b/neethi/src/samples/test7.xml new file mode 100644 index 0000000..cee2f03 --- /dev/null +++ b/neethi/src/samples/test7.xml @@ -0,0 +1 @@ +sec:X509v3wsp:Body() \ No newline at end of file diff --git a/neethi/src/samples/test8.xml b/neethi/src/samples/test8.xml new file mode 100644 index 0000000..31d9377 --- /dev/null +++ b/neethi/src/samples/test8.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/neethi/src/samples/test9.xml b/neethi/src/samples/test9.xml new file mode 100644 index 0000000..9f57428 --- /dev/null +++ b/neethi/src/samples/test9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/neethi/src/secpolicy/Makefile.am b/neethi/src/secpolicy/Makefile.am new file mode 100644 index 0000000..28fd650 --- /dev/null +++ b/neethi/src/secpolicy/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = model builder diff --git a/neethi/src/secpolicy/builder/Makefile.am b/neethi/src/secpolicy/builder/Makefile.am new file mode 100644 index 0000000..d189e16 --- /dev/null +++ b/neethi/src/secpolicy/builder/Makefile.am @@ -0,0 +1,25 @@ +TESTS = + +noinst_LTLIBRARIES = librp_builder.la + +librp_builder_la_SOURCES = algorithmsuite_builder.c \ + layout_builder.c \ + supporting_tokens_builder.c \ + transport_binding_builder.c username_token_builder.c \ + wss10_builder.c transport_token_builder.c \ + token_identifier.c https_token_builder.c rampart_config_builder.c \ + asymmetric_binding_builder.c x509_token_builder.c initiator_token_builder.c \ + recipient_token_builder.c signed_encrypted_parts_builder.c secpolicy_builder.c \ + symmetric_binding_builder.c protection_token_builder.c signature_token_builder.c \ + encryption_token_builder.c wss11_builder.c trust10_builder.c \ + bootstrap_policy_builder.c security_context_token_builder.c \ + issued_token_builder.c saml_token_builder.c + +librp_builder_la_LIBADD = ../../../../axiom/src/om/libaxis2_axiom.la \ + ../../../../util/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../include \ + -I ../../../../util/include \ + -I ../../../../axiom/include \ + -I ../../../../include diff --git a/neethi/src/secpolicy/builder/algorithmsuite_builder.c b/neethi/src/secpolicy/builder/algorithmsuite_builder.c new file mode 100644 index 0000000..3f42baf --- /dev/null +++ b/neethi/src/secpolicy/builder/algorithmsuite_builder.c @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_algorithmsuite_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_algorithmsuite_t *algorithmsuite = NULL; + axiom_node_t *child_node = NULL; + axiom_node_t *algo_node = NULL; + axiom_element_t *algo_element = NULL; + neethi_assertion_t *assertion = NULL; + + algorithmsuite = rp_algorithmsuite_create(env); + + child_node = axiom_node_get_first_element(node, env); + + if(child_node) + { + algo_node = axiom_node_get_first_element(child_node, env); + if(!algo_node) + { + return NULL; + } + } + else + { + return NULL; + } + + if(axiom_node_get_node_type(algo_node, env) == AXIOM_ELEMENT) + { + algo_element = (axiom_element_t *)axiom_node_get_data_element(algo_node, env); + if(algo_element) + { + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *algosuite_string = NULL; + + algosuite_string = axiom_element_get_localname(algo_element, env); + if(!algosuite_string) + { + return NULL; + } + status = rp_algorithmsuite_set_algosuite(algorithmsuite, env, algosuite_string); + if(AXIS2_FAILURE == status) + { + return NULL; + } + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_algorithmsuite_free, algorithmsuite, + ASSERTION_TYPE_ALGORITHM_SUITE); + return assertion; + } + else + return NULL; + } + else + return NULL; +} diff --git a/neethi/src/secpolicy/builder/asymmetric_binding_builder.c b/neethi/src/secpolicy/builder/asymmetric_binding_builder.c new file mode 100644 index 0000000..3a2f889 --- /dev/null +++ b/neethi/src/secpolicy/builder/asymmetric_binding_builder.c @@ -0,0 +1,234 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +asymmetric_binding_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_asymmetric_binding_t *asymmetric_binding); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_asymmetric_binding_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_asymmetric_binding_t *asymmetric_binding = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + asymmetric_binding = rp_asymmetric_binding_create(env); + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + neethi_policy_free(policy, env); + policy = NULL; + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + asymmetric_binding_process_alternatives(env, all, asymmetric_binding); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_asymmetric_binding_free, asymmetric_binding, + ASSERTION_TYPE_ASSYMMETRIC_BINDING); + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +asymmetric_binding_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_asymmetric_binding_t * asymmetric_binding) +{ + + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + rp_binding_commons_t *commons = NULL; + rp_symmetric_asymmetric_binding_commons_t *as_commons = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + commons = rp_binding_commons_create(env); + as_commons = rp_symmetric_asymmetric_binding_commons_create(env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(type == ASSERTION_TYPE_INITIATOR_TOKEN) + { + rp_property_t *initiator_token = NULL; + initiator_token = (rp_property_t *)neethi_assertion_get_value(assertion, env); + if(initiator_token) + { + rp_asymmetric_binding_set_initiator_token(asymmetric_binding, env, initiator_token); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_RECIPIENT_TOKEN) + { + rp_property_t *recipient_token = NULL; + recipient_token = (rp_property_t *)neethi_assertion_get_value(assertion, env); + if(recipient_token) + { + rp_asymmetric_binding_set_recipient_token(asymmetric_binding, env, recipient_token); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_ALGORITHM_SUITE) + { + rp_algorithmsuite_t *algorithmsuite = NULL; + algorithmsuite = (rp_algorithmsuite_t *)neethi_assertion_get_value(assertion, env); + if(algorithmsuite) + { + rp_binding_commons_set_algorithmsuite(commons, env, algorithmsuite); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_INCLUDE_TIMESTAMP) + { + rp_binding_commons_set_include_timestamp(commons, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_LAYOUT) + { + rp_layout_t *layout = NULL; + layout = (rp_layout_t *)neethi_assertion_get_value(assertion, env); + if(layout) + { + rp_binding_commons_set_layout(commons, env, layout); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_ENCRYPT_BEFORE_SIGNING) + { + rp_symmetric_asymmetric_binding_commons_set_protection_order(as_commons, env, + RP_ENCRYPT_BEFORE_SIGNING); + } + else if(type == ASSERTION_TYPE_SIGN_BEFORE_ENCRYPTING) + { + rp_symmetric_asymmetric_binding_commons_set_protection_order(as_commons, env, + RP_SIGN_BEFORE_ENCRYPTING); + } + else if(type == ASSERTION_TYPE_ENCRYPT_SIGNATURE) + { + rp_symmetric_asymmetric_binding_commons_set_signature_protection(as_commons, env, + AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_PROTECT_TOKENS) + { + rp_symmetric_asymmetric_binding_commons_set_token_protection(as_commons, env, + AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_ONLY_SIGN_ENTIRE_HEADERS_AND_BODY) + { + rp_symmetric_asymmetric_binding_commons_set_entire_headers_and_body_signatures( + as_commons, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_SUPPORTING_TOKENS) + { + rp_supporting_tokens_t *supporting_tokens = NULL; + supporting_tokens + = (rp_supporting_tokens_t *)neethi_assertion_get_value(assertion, env); + if(supporting_tokens) + { + rp_property_type_t type; + type = rp_supporting_tokens_get_type(supporting_tokens, env); + if(type == RP_PROPERTY_SIGNED_SUPPORTING_TOKEN) + { + rp_binding_commons_set_signed_supporting_tokens(commons, env, supporting_tokens); + } + else if(type == RP_PROPERTY_SIGNED_ENDORSING_SUPPORTING_TOKEN) + { + rp_binding_commons_set_signed_endorsing_supporting_tokens(commons, env, + supporting_tokens); + } + else if(type == RP_PROPERTY_SUPPORTING_SUPPORTING_TOKEN) + { + rp_binding_commons_set_supporting_tokens(commons, env, supporting_tokens); + } + else if(type == RP_PROPERTY_ENDORSING_SUPPORTING_TOKEN) + { + rp_binding_commons_set_endorsing_supporting_tokens(commons, env, + supporting_tokens); + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + rp_symmetric_asymmetric_binding_commons_set_binding_commons(as_commons, env, commons); + rp_asymmetric_binding_set_symmetric_asymmetric_binding_commons(asymmetric_binding, env, + as_commons); + + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/bootstrap_policy_builder.c b/neethi/src/secpolicy/builder/bootstrap_policy_builder.c new file mode 100644 index 0000000..df8c23e --- /dev/null +++ b/neethi/src/secpolicy/builder/bootstrap_policy_builder.c @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_bootstrap_policy_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + neethi_assertion_t *assertion = NULL; + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + assertion = neethi_assertion_create_with_args(env, NULL, /*this policy should not be deleted*/ + policy, ASSERTION_TYPE_BOOTSTRAP_POLICY); + return assertion; + } + else + return NULL; + } + else + return NULL; +} diff --git a/neethi/src/secpolicy/builder/encryption_token_builder.c b/neethi/src/secpolicy/builder/encryption_token_builder.c new file mode 100644 index 0000000..5896ac3 --- /dev/null +++ b/neethi/src/secpolicy/builder/encryption_token_builder.c @@ -0,0 +1,175 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +encryption_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_property_t *encryption_token); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_encryption_token_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_property_t *encryption_token = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + encryption_token = rp_property_create(env); + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + neethi_policy_free(policy, env); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + encryption_token_process_alternatives(env, all, encryption_token); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_property_free, encryption_token, + ASSERTION_TYPE_ENCRYPTION_TOKEN); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +encryption_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_property_t *encryption_token) +{ + + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(value) + { + if(type == ASSERTION_TYPE_X509_TOKEN) + { + rp_x509_token_t *x509_token = NULL; + x509_token = (rp_x509_token_t *)neethi_assertion_get_value(assertion, env); + if(x509_token) + { + rp_property_set_value(encryption_token, env, x509_token, RP_PROPERTY_X509_TOKEN); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_ISSUED_TOKEN) + { + rp_issued_token_t *issued_token = NULL; + issued_token = (rp_issued_token_t *)neethi_assertion_get_value(assertion, env); + if(issued_token) + { + rp_property_set_value(encryption_token, env, issued_token, + RP_PROPERTY_ISSUED_TOKEN); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_SAML_TOKEN) + { + rp_saml_token_t *saml_token = NULL; + saml_token = (rp_saml_token_t *)neethi_assertion_get_value(assertion, env); + if(saml_token) + { + rp_property_set_value(encryption_token, env, saml_token, RP_PROPERTY_SAML_TOKEN); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_SECURITY_CONTEXT_TOKEN) + { + rp_security_context_token_t *security_context_token = NULL; + security_context_token = (rp_security_context_token_t *)neethi_assertion_get_value( + assertion, env); + + if(security_context_token) + { + rp_property_set_value(encryption_token, env, security_context_token, + RP_PROPERTY_SECURITY_CONTEXT_TOKEN); + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/https_token_builder.c b/neethi/src/secpolicy/builder/https_token_builder.c new file mode 100644 index 0000000..9406d19 --- /dev/null +++ b/neethi/src/secpolicy/builder/https_token_builder.c @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_https_token_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_https_token_t *https_token = NULL; + neethi_assertion_t *assertion = NULL; + axis2_char_t *value = NULL; + + https_token = rp_https_token_create(env); + + value = axiom_element_get_attribute_value_by_name(element, env, RP_REQUIRE_CLIENT_CERTIFICATE); + + if(value) + { + if(axutil_strcmp(value, "true") == 0) + { + rp_https_token_set_require_client_certificate(https_token, env, AXIS2_TRUE); + } + else if(axutil_strcmp(value, "false") == 0) + { + rp_https_token_set_require_client_certificate(https_token, env, AXIS2_FALSE); + } + else + return NULL; + } + + assertion = neethi_assertion_create_with_args(env, (AXIS2_FREE_VOID_ARG)rp_https_token_free, + https_token, ASSERTION_TYPE_HTTPS_TOKEN); + return assertion; +} diff --git a/neethi/src/secpolicy/builder/initiator_token_builder.c b/neethi/src/secpolicy/builder/initiator_token_builder.c new file mode 100644 index 0000000..28b6497 --- /dev/null +++ b/neethi/src/secpolicy/builder/initiator_token_builder.c @@ -0,0 +1,138 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +initiator_token_process_alternatives( + const axutil_env_t * env, + neethi_all_t * all, + rp_property_t * initiator_token); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_initiator_token_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element) +{ + rp_property_t *initiator_token = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + initiator_token = rp_property_create(env); + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + neethi_policy_free(policy, env); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + initiator_token_process_alternatives(env, all, initiator_token); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_property_free, initiator_token, + ASSERTION_TYPE_INITIATOR_TOKEN); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +initiator_token_process_alternatives( + const axutil_env_t * env, + neethi_all_t * all, + rp_property_t * initiator_token) +{ + + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(value) + { + if(type == ASSERTION_TYPE_X509_TOKEN) + { + rp_x509_token_t *x509_token = NULL; + x509_token = (rp_x509_token_t *)neethi_assertion_get_value(assertion, env); + if(x509_token) + { + rp_property_set_value(initiator_token, env, x509_token, RP_PROPERTY_X509_TOKEN); + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/issued_token_builder.c b/neethi/src/secpolicy/builder/issued_token_builder.c new file mode 100644 index 0000000..2cfc09f --- /dev/null +++ b/neethi/src/secpolicy/builder/issued_token_builder.c @@ -0,0 +1,164 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +AXIS2_EXTERN neethi_assertion_t * AXIS2_CALL +rp_issued_token_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_issued_token_t *issued_token = NULL; + neethi_policy_t *policy = NULL; + neethi_policy_t *normalized_policy = NULL; + neethi_all_t *all = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + axis2_char_t *inclusion_value = NULL; + axutil_qname_t *qname = NULL; + axiom_node_t *issuer_node = NULL; + axiom_element_t *issuer_ele = NULL; + axiom_element_t *issuer_first_child_ele = NULL; + axiom_node_t *issuer_first_child_node = NULL; + axiom_node_t *req_sec_tok_template_node = NULL; + axiom_element_t *req_sec_tok_template_ele = NULL; + axiom_node_t *policy_node = NULL; + axiom_element_t *policy_ele = NULL; + neethi_assertion_t *assertion = NULL; + + issued_token = rp_issued_token_create(env); + qname = axutil_qname_create(env, RP_INCLUDE_TOKEN, RP_SP_NS_11, RP_SP_PREFIX); + inclusion_value = axiom_element_get_attribute_value(element, env, qname); + axutil_qname_free(qname, env); + qname = NULL; + + if(!inclusion_value) + { + /* we can try whether WS-SP1.2 specific inclusion value */ + qname = axutil_qname_create(env, RP_INCLUDE_TOKEN, RP_SP_NS_12, RP_SP_PREFIX); + inclusion_value = axiom_element_get_attribute_value(element, env, qname); + axutil_qname_free(qname, env); + qname = NULL; + } + + if(inclusion_value) + { + rp_issued_token_set_inclusion(issued_token, env, inclusion_value); + } + + qname = axutil_qname_create(env, RP_ISSUER, RP_SP_NS_11, RP_SP_PREFIX); + issuer_ele = axiom_element_get_first_child_with_qname(element, env, qname, node, &issuer_node); + if(issuer_ele) + { + issuer_first_child_ele = axiom_element_get_first_element(issuer_ele, env, issuer_node, + &issuer_first_child_node); + if(issuer_first_child_ele) + { + rp_issued_token_set_issuer_epr(issued_token, env, issuer_first_child_node); + } + } + axutil_qname_free(qname, env); + qname = NULL; + + qname = axutil_qname_create(env, RP_REQUEST_SEC_TOKEN_TEMPLATE, RP_SP_NS_11, RP_SP_PREFIX); + req_sec_tok_template_ele = axiom_element_get_first_child_with_qname(element, env, qname, node, + &req_sec_tok_template_node); + if(req_sec_tok_template_ele) + { + rp_issued_token_set_requested_sec_token_template(issued_token, env, + req_sec_tok_template_node); + } + else + { + return NULL; + } + + axutil_qname_free(qname, env); + qname = NULL; + + qname = axutil_qname_create(env, RP_POLICY, RP_POLICY_NS, RP_POLICY_PREFIX); + policy_ele = axiom_element_get_first_child_with_qname(element, env, qname, node, &policy_node); + if(policy_ele) + { + policy = neethi_engine_get_policy(env, policy_node, policy_ele); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + neethi_policy_free(policy, env); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + if(AXIS2_FAILURE == rp_issued_token_builder_process_alternatives(env, all, issued_token)) + return NULL; + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_issued_token_free, issued_token, ASSERTION_TYPE_ISSUED_TOKEN); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, issued_token, ASSERTION_TYPE_ISSUED_TOKEN); + + return assertion; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_issued_token_builder_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_issued_token_t *issued_token) +{ + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + type = neethi_assertion_get_type(assertion, env); + + if(type == ASSERTION_TYPE_REQUIRE_DERIVED_KEYS_SC10) + { + rp_issued_token_set_derivedkeys(issued_token, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_REQUIRE_EXTERNAL_REFERENCE) + { + rp_issued_token_set_require_exernal_reference(issued_token, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_REQUIRE_INTERNAL_REFERENCE) + { + rp_issued_token_set_require_internal_reference(issued_token, env, AXIS2_TRUE); + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + diff --git a/neethi/src/secpolicy/builder/layout_builder.c b/neethi/src/secpolicy/builder/layout_builder.c new file mode 100644 index 0000000..9be9ad9 --- /dev/null +++ b/neethi/src/secpolicy/builder/layout_builder.c @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_layout_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_layout_t *layout = NULL; + axiom_node_t *child_node = NULL; + axiom_node_t *layout_node = NULL; + axiom_element_t *layout_element = NULL; + neethi_assertion_t *assertion = NULL; + + layout = rp_layout_create(env); + + child_node = axiom_node_get_first_element(node, env); + + if(child_node) + { + layout_node = axiom_node_get_first_element(child_node, env); + if(!layout_node) + { + return NULL; + } + } + else + { + return NULL; + } + + if(axiom_node_get_node_type(layout_node, env) == AXIOM_ELEMENT) + { + layout_element = (axiom_element_t *)axiom_node_get_data_element(layout_node, env); + if(layout_element) + { + axis2_char_t *local_name = NULL; + + local_name = axiom_element_get_localname(layout_element, env); + if(!local_name) + return NULL; + rp_layout_set_value(layout, env, local_name); + assertion = neethi_assertion_create_with_args(env, (AXIS2_FREE_VOID_ARG)rp_layout_free, + layout, ASSERTION_TYPE_LAYOUT); + return assertion; + } + else + return NULL; + } + else + return NULL; +} diff --git a/neethi/src/secpolicy/builder/protection_token_builder.c b/neethi/src/secpolicy/builder/protection_token_builder.c new file mode 100644 index 0000000..8ea02f2 --- /dev/null +++ b/neethi/src/secpolicy/builder/protection_token_builder.c @@ -0,0 +1,175 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +protection_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_property_t *protection_token); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_protection_token_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_property_t *protection_token = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + protection_token = rp_property_create(env); + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + neethi_policy_free(policy, env); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + protection_token_process_alternatives(env, all, protection_token); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_property_free, protection_token, + ASSERTION_TYPE_PROTECTION_TOKEN); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +protection_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_property_t *protection_token) +{ + + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(value) + { + if(type == ASSERTION_TYPE_X509_TOKEN) + { + rp_x509_token_t *x509_token = NULL; + x509_token = (rp_x509_token_t *)neethi_assertion_get_value(assertion, env); + if(x509_token) + { + rp_property_set_value(protection_token, env, x509_token, RP_PROPERTY_X509_TOKEN); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_ISSUED_TOKEN) + { + rp_issued_token_t *issued_token = NULL; + issued_token = (rp_issued_token_t *)neethi_assertion_get_value(assertion, env); + if(issued_token) + { + rp_property_set_value(protection_token, env, issued_token, + RP_PROPERTY_ISSUED_TOKEN); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_SAML_TOKEN) + { + rp_saml_token_t *saml_token = NULL; + saml_token = (rp_saml_token_t *)neethi_assertion_get_value(assertion, env); + if(saml_token) + { + rp_property_set_value(protection_token, env, saml_token, RP_PROPERTY_SAML_TOKEN); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_SECURITY_CONTEXT_TOKEN) + { + rp_security_context_token_t *security_context_token = NULL; + security_context_token = (rp_security_context_token_t *)neethi_assertion_get_value( + assertion, env); + + if(security_context_token) + { + rp_property_set_value(protection_token, env, security_context_token, + RP_PROPERTY_SECURITY_CONTEXT_TOKEN); + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/rampart_config_builder.c b/neethi/src/secpolicy/builder/rampart_config_builder.c new file mode 100644 index 0000000..1c569b3 --- /dev/null +++ b/neethi/src/secpolicy/builder/rampart_config_builder.c @@ -0,0 +1,213 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +rp_rampart_config_builder_populate( + const axutil_env_t *env, + rp_rampart_config_t *rampart_config, + axiom_node_t *node, + axiom_element_t *element, + axis2_char_t *local_name); + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_rampart_config_builder_build( + const axutil_env_t *env, + axiom_node_t *config, + axiom_element_t *config_ele) +{ + rp_rampart_config_t *rampart_config = NULL; + axis2_status_t status = AXIS2_SUCCESS; + axiom_children_iterator_t *children_iter = NULL; + neethi_assertion_t *assertion = NULL; + + rampart_config = rp_rampart_config_create(env); + if(!rampart_config) + { + return NULL; + } + + children_iter = axiom_element_get_children(config_ele, env, config); + if(children_iter) + { + while(axiom_children_iterator_has_next(children_iter, env)) + { + axiom_node_t *node = NULL; + axiom_element_t *ele = NULL; + axis2_char_t *local_name = NULL; + node = axiom_children_iterator_next(children_iter, env); + if(node) + { + if(axiom_node_get_node_type(node, env) == AXIOM_ELEMENT) + { + ele = (axiom_element_t *)axiom_node_get_data_element(node, env); + if(ele) + { + local_name = axiom_element_get_localname(ele, env); + if(local_name) + { + status = rp_rampart_config_builder_populate(env, rampart_config, node, + ele, local_name); + if(status != AXIS2_SUCCESS) + { + return NULL; + } + } + } + } + } + } + } + assertion = neethi_assertion_create_with_args(env, (AXIS2_FREE_VOID_ARG)rp_rampart_config_free, + rampart_config, ASSERTION_TYPE_RAMPART_CONFIG); + return assertion; +} + +axis2_status_t AXIS2_CALL +rp_rampart_config_builder_populate( + const axutil_env_t *env, + rp_rampart_config_t *rampart_config, + axiom_node_t *node, + axiom_element_t *element, + axis2_char_t *local_name) +{ + axis2_char_t *ns = NULL; + axutil_qname_t *node_qname = NULL; + + node_qname = axiom_element_get_qname(element, env, node); + if(!node_qname) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Cannot get qname from element %s.", + local_name); + return AXIS2_FAILURE; + } + + ns = axutil_qname_get_uri(node_qname, env); + if(!ns) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Cannot get namespace from element %s.", + local_name); + return AXIS2_FAILURE; + } + + if(!axutil_strcmp(ns, RP_RAMPART_NS)) + { + if(!axutil_strcmp(local_name, RP_USER)) + { + axis2_char_t *user = NULL; + user = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_user(rampart_config, env, user); + } + else if(!axutil_strcmp(local_name, RP_ENCRYPTION_USER)) + { + axis2_char_t *encryption_user = NULL; + encryption_user = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_encryption_user(rampart_config, env, encryption_user); + } + else if(!axutil_strcmp(local_name, RP_PASSWORD_CALLBACK_CLASS)) + { + axis2_char_t *password_callback_class = NULL; + password_callback_class = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_password_callback_class(rampart_config, env, + password_callback_class); + } + else if(!axutil_strcmp(local_name, RP_AUTHN_MODULE_NAME)) + { + axis2_char_t *authenticate_module = NULL; + authenticate_module = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_authenticate_module(rampart_config, env, + authenticate_module); + } + else if(!axutil_strcmp(local_name, RP_RD_MODULE)) + { + axis2_char_t *replay_detector = NULL; + replay_detector = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_replay_detector(rampart_config, env, replay_detector); + } + else if(!axutil_strcmp(local_name, RP_SCT_MODULE)) + { + axis2_char_t *sct_module = NULL; + sct_module = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_sct_provider(rampart_config, env, sct_module); + } + else if(!axutil_strcmp(local_name, RP_PASSWORD_TYPE)) + { + axis2_char_t *password_type = NULL; + password_type = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_password_type(rampart_config, env, password_type); + } + else if(!axutil_strcmp(local_name, RP_CERTIFICATE)) + { + axis2_char_t *certificate_file = NULL; + certificate_file = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_certificate_file(rampart_config, env, certificate_file); + } + else if(!axutil_strcmp(local_name, RP_RECEIVER_CERTIFICATE)) + { + axis2_char_t *receiver_certificate_file = NULL; + receiver_certificate_file = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_receiver_certificate_file(rampart_config, env, + receiver_certificate_file); + } + else if(!axutil_strcmp(local_name, RP_PRIVATE_KEY)) + { + axis2_char_t *private_key_file = NULL; + private_key_file = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_private_key_file(rampart_config, env, private_key_file); + } + else if(!axutil_strcmp(local_name, RP_PKCS12_KEY_STORE)) + { + axis2_char_t *pkcs12_key_store = NULL; + pkcs12_key_store = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_pkcs12_file(rampart_config, env, pkcs12_key_store); + } + else if(!axutil_strcmp(local_name, RP_TIME_TO_LIVE)) + { + axis2_char_t *time_to_live = NULL; + time_to_live = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_time_to_live(rampart_config, env, time_to_live); + } + else if(!axutil_strcmp(local_name, RP_CLOCK_SKEW_BUFFER)) + { + axis2_char_t *clock_skew_buffer = NULL; + clock_skew_buffer = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_clock_skew_buffer(rampart_config, env, clock_skew_buffer); + } + else if(!axutil_strcmp(local_name, RP_NEED_MILLISECOND_PRECISION)) + { + axis2_char_t *need_ms_precision = NULL; + need_ms_precision = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_need_millisecond_precision(rampart_config, env, + need_ms_precision); + } + else if(!axutil_strcmp(local_name, RP_RD)) + { + axis2_char_t *rd_val = NULL; + rd_val = axiom_element_get_text(element, env, node); + return rp_rampart_config_set_rd_val(rampart_config, env, rd_val); + } + } + + /* either the assertion or the namespace is not identified */ + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Unknown Assertion %s with namespace %s", + local_name, ns); + return AXIS2_FAILURE; + +} diff --git a/neethi/src/secpolicy/builder/recipient_token_builder.c b/neethi/src/secpolicy/builder/recipient_token_builder.c new file mode 100644 index 0000000..d29537d --- /dev/null +++ b/neethi/src/secpolicy/builder/recipient_token_builder.c @@ -0,0 +1,139 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +recipient_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_property_t *recipient_token); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_recipient_token_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_property_t *recipient_token = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + recipient_token = rp_property_create(env); + + child_node = axiom_node_get_first_element(node, env); + + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + neethi_policy_free(policy, env); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + recipient_token_process_alternatives(env, all, recipient_token); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_property_free, recipient_token, + ASSERTION_TYPE_RECIPIENT_TOKEN); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +recipient_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_property_t *recipient_token) +{ + + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(value) + { + if(type == ASSERTION_TYPE_X509_TOKEN) + { + rp_x509_token_t *x509_token = NULL; + x509_token = (rp_x509_token_t *)neethi_assertion_get_value(assertion, env); + if(x509_token) + { + rp_property_set_value(recipient_token, env, x509_token, RP_PROPERTY_X509_TOKEN); + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/saml_token_builder.c b/neethi/src/secpolicy/builder/saml_token_builder.c new file mode 100644 index 0000000..6550d80 --- /dev/null +++ b/neethi/src/secpolicy/builder/saml_token_builder.c @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +axis2_status_t AXIS2_CALL +saml_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_saml_token_t *saml_token); + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_saml_token_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_saml_token_t *saml_token = NULL; + axis2_char_t *inclusion_value = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + axutil_qname_t *qname = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + saml_token = rp_saml_token_create(env); + qname = axutil_qname_create(env, RP_INCLUDE_TOKEN, RP_SP_NS_11, RP_SP_PREFIX); + inclusion_value = axiom_element_get_attribute_value(element, env, qname); + axutil_qname_free(qname, env); + qname = NULL; + + if(!inclusion_value) + { + /* we can try whether WS-SP1.2 specific inclusion value */ + qname = axutil_qname_create(env, RP_INCLUDE_TOKEN, RP_SP_NS_12, RP_SP_PREFIX); + inclusion_value = axiom_element_get_attribute_value(element, env, qname); + axutil_qname_free(qname, env); + qname = NULL; + } + + rp_saml_token_set_inclusion(saml_token, env, inclusion_value); + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, saml_token, ASSERTION_TYPE_SAML_TOKEN); + return assertion; + } + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + neethi_policy_free(policy, env); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + saml_token_process_alternatives(env, all, saml_token); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_saml_token_free, saml_token, ASSERTION_TYPE_SAML_TOKEN); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +saml_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_saml_token_t *saml_token) +{ + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + type = neethi_assertion_get_type(assertion, env); + + if(type == ASSERTION_TYPE_REQUIRE_DERIVED_KEYS_SC10) + { + rp_saml_token_set_derivedkeys(saml_token, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_REQUIRE_KEY_IDENTIFIRE_REFERENCE) + { + rp_saml_token_set_require_key_identifier_reference(saml_token, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_WSS_SAML_V10_TOKEN_V10) + { + rp_saml_token_set_token_version_and_type(saml_token, env, RP_WSS_SAML_V10_TOKEN_V10); + } + else if(type == ASSERTION_TYPE_WSS_SAML_V10_TOKEN_V11) + { + rp_saml_token_set_token_version_and_type(saml_token, env, RP_WSS_SAML_V10_TOKEN_V11); + } + else if(type == ASSERTION_TYPE_WSS_SAML_V11_TOKEN_V10) + { + rp_saml_token_set_token_version_and_type(saml_token, env, RP_WSS_SAML_V11_TOKEN_V10); + } + else if(type == ASSERTION_TYPE_WSS_SAML_V11_TOKEN_V11) + { + rp_saml_token_set_token_version_and_type(saml_token, env, RP_WSS_SAML_V11_TOKEN_V11); + } + else if(type == ASSERTION_TYPE_WSS_SAML_V20_TOKEN_V11) + { + rp_saml_token_set_token_version_and_type(saml_token, env, RP_WSS_SAML_V20_TOKEN_V11); + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + diff --git a/neethi/src/secpolicy/builder/secpolicy_builder.c b/neethi/src/secpolicy/builder/secpolicy_builder.c new file mode 100644 index 0000000..8548403 --- /dev/null +++ b/neethi/src/secpolicy/builder/secpolicy_builder.c @@ -0,0 +1,241 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +secpolicy_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_secpolicy_t *secpolicy); + +/***********************************/ + +AXIS2_EXTERN rp_secpolicy_t *AXIS2_CALL +rp_secpolicy_builder_build( + const axutil_env_t *env, + neethi_policy_t *policy) +{ + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + rp_secpolicy_t *secpolicy = NULL; + + secpolicy = rp_secpolicy_create(env); + + alternatives = neethi_policy_get_alternatives(policy, env); + + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + + if(secpolicy_process_alternatives(env, all, secpolicy) == AXIS2_FAILURE) + { + return NULL; + } + return secpolicy; +} + +axis2_status_t AXIS2_CALL +secpolicy_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_secpolicy_t *secpolicy) +{ + + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(value) + { + if(type == ASSERTION_TYPE_TRANSPORT_BINDING) + { + rp_property_t *binding = NULL; + rp_transport_binding_t *transport_binding = NULL; + + transport_binding = (rp_transport_binding_t *)neethi_assertion_get_value(assertion, + env); + if(!transport_binding) + { + return AXIS2_FAILURE; + } + binding = rp_property_create(env); + rp_property_set_value(binding, env, transport_binding, + RP_PROPERTY_TRANSPORT_BINDING); + rp_secpolicy_set_binding(secpolicy, env, binding); + } + else if(type == ASSERTION_TYPE_ASSYMMETRIC_BINDING) + { + rp_property_t *binding = NULL; + rp_asymmetric_binding_t *asymmetric_binding = NULL; + + asymmetric_binding = (rp_asymmetric_binding_t *)neethi_assertion_get_value( + assertion, env); + if(!asymmetric_binding) + { + return AXIS2_FAILURE; + } + binding = rp_property_create(env); + rp_property_set_value(binding, env, asymmetric_binding, + RP_PROPERTY_ASYMMETRIC_BINDING); + rp_secpolicy_set_binding(secpolicy, env, binding); + } + else if(type == ASSERTION_TYPE_SYMMETRIC_BINDING) + { + rp_property_t *binding = NULL; + rp_symmetric_binding_t *symmetric_binding = NULL; + + symmetric_binding = (rp_symmetric_binding_t *)neethi_assertion_get_value(assertion, + env); + if(!symmetric_binding) + { + return AXIS2_FAILURE; + } + binding = rp_property_create(env); + rp_property_set_value(binding, env, symmetric_binding, + RP_PROPERTY_SYMMETRIC_BINDING); + rp_secpolicy_set_binding(secpolicy, env, binding); + } + else if(type == ASSERTION_TYPE_SUPPORTING_TOKENS) + { + rp_supporting_tokens_t *supporting_tokens = NULL; + supporting_tokens = (rp_supporting_tokens_t *)neethi_assertion_get_value(assertion, + env); + if(supporting_tokens) + { + rp_property_type_t type; + type = rp_supporting_tokens_get_type(supporting_tokens, env); + if(type == RP_PROPERTY_SIGNED_SUPPORTING_TOKEN) + { + rp_secpolicy_set_signed_supporting_tokens(secpolicy, env, supporting_tokens); + } + else if(type == RP_PROPERTY_SIGNED_ENDORSING_SUPPORTING_TOKEN) + { + rp_secpolicy_set_signed_endorsing_supporting_tokens(secpolicy, env, + supporting_tokens); + } + else if(type == RP_PROPERTY_SUPPORTING_SUPPORTING_TOKEN) + { + rp_secpolicy_set_supporting_tokens(secpolicy, env, supporting_tokens); + } + else if(type == RP_PROPERTY_ENDORSING_SUPPORTING_TOKEN) + { + rp_secpolicy_set_endorsing_supporting_tokens(secpolicy, env, + supporting_tokens); + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_WSS10) + { + rp_wss10_t *wss10 = NULL; + rp_property_t *wss = NULL; + wss10 = (rp_wss10_t *)neethi_assertion_get_value(assertion, env); + if(!wss10) + { + return AXIS2_FAILURE; + } + wss = rp_property_create(env); + rp_property_set_value(wss, env, wss10, RP_PROPERTY_WSS10); + rp_secpolicy_set_wss(secpolicy, env, wss); + } + else if(type == ASSERTION_TYPE_WSS11) + { + rp_wss11_t *wss11 = NULL; + rp_property_t *wss = NULL; + wss11 = (rp_wss11_t *)neethi_assertion_get_value(assertion, env); + if(!wss11) + { + return AXIS2_FAILURE; + } + wss = rp_property_create(env); + rp_property_set_value(wss, env, wss11, RP_PROPERTY_WSS11); + rp_secpolicy_set_wss(secpolicy, env, wss); + } + else if(type == ASSERTION_TYPE_TRUST10) + { + rp_trust10_t *trust10 = NULL; + trust10 = (rp_trust10_t *)neethi_assertion_get_value(assertion, env); + if(!trust10) + { + return AXIS2_FAILURE; + } + rp_secpolicy_set_trust10(secpolicy, env, trust10); + } + else if(type == ASSERTION_TYPE_SIGNED_ENCRYPTED_PARTS) + { + rp_signed_encrypted_parts_t *signed_encrypted_parts = NULL; + signed_encrypted_parts = (rp_signed_encrypted_parts_t *)neethi_assertion_get_value( + assertion, env); + if(signed_encrypted_parts) + { + if(rp_signed_encrypted_parts_get_signedparts(signed_encrypted_parts, env)) + { + rp_secpolicy_set_signed_parts(secpolicy, env, signed_encrypted_parts); + } + else + { + rp_secpolicy_set_encrypted_parts(secpolicy, env, signed_encrypted_parts); + } + } + else + return AXIS2_FAILURE; + + } + else if(type == ASSERTION_TYPE_RAMPART_CONFIG) + { + rp_rampart_config_t *rampart_config = NULL; + rampart_config = (rp_rampart_config_t *)neethi_assertion_get_value(assertion, env); + if(!rampart_config) + { + return AXIS2_FAILURE; + } + rp_secpolicy_set_rampart_config(secpolicy, env, rampart_config); + } + else + { + continue; + } + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/security_context_token_builder.c b/neethi/src/secpolicy/builder/security_context_token_builder.c new file mode 100644 index 0000000..b4ad8e8 --- /dev/null +++ b/neethi/src/secpolicy/builder/security_context_token_builder.c @@ -0,0 +1,231 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +security_context_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_security_context_token_t * security_context_token); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_security_context_token_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element, + axis2_char_t *sp_ns_uri, + axis2_bool_t is_secure_conversation_token) +{ + rp_security_context_token_t *security_context_token = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axiom_children_iterator_t *children_iter = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + axis2_char_t *inclusion_value = NULL; + axutil_qname_t *qname = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + security_context_token = rp_security_context_token_create(env); + qname = axutil_qname_create(env, RP_INCLUDE_TOKEN, sp_ns_uri, RP_SP_PREFIX); + inclusion_value = axiom_element_get_attribute_value(element, env, qname); + axutil_qname_free(qname, env); + qname = NULL; + + rp_security_context_token_set_inclusion(security_context_token, env, inclusion_value); + rp_security_context_token_set_is_secure_conversation_token(security_context_token, env, + is_secure_conversation_token); + + if(!axutil_strcmp(sp_ns_uri, RP_SP_NS_11)) + { + rp_security_context_token_set_sc10_security_context_token(security_context_token, env, + AXIS2_TRUE); + } + else + { + rp_security_context_token_set_sc10_security_context_token(security_context_token, env, + AXIS2_FALSE); + } + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + return NULL; + } + + children_iter = axiom_element_get_children(element, env, node); + if(children_iter) + { + while(axiom_children_iterator_has_next(children_iter, env)) + { + child_node = axiom_children_iterator_next(children_iter, env); + if(child_node) + { + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + axis2_char_t *localname = NULL; + localname = axiom_element_get_localname(child_element, env); + if(axutil_strcmp(localname, RP_ISSUER) == 0) + { + axis2_char_t *ns = NULL; + axutil_qname_t *node_qname = NULL; + + node_qname = axiom_element_get_qname(child_element, env, child_node); + if(!node_qname) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Cannot get qname from element %s.", localname); + return NULL; + } + + ns = axutil_qname_get_uri(node_qname, env); + if(!ns) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Cannot get namespace from element %s.", localname); + return NULL; + } + if(!(axutil_strcmp(ns, RP_SP_NS_11) && axutil_strcmp(ns, RP_SP_NS_12))) + { + axis2_char_t *issuer = NULL; + issuer = axiom_element_get_text(child_element, env, child_node); + rp_security_context_token_set_issuer(security_context_token, env, + issuer); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Unknown Assertion %s with namespace %s", localname, + ns); + return NULL; + } + } + else + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, + policy); + neethi_policy_free(policy, env); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, + env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + security_context_token_process_alternatives(env, all, + security_context_token); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_security_context_token_free, + security_context_token, ASSERTION_TYPE_SECURITY_CONTEXT_TOKEN); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + } + } + } + } + } + } + return assertion; +} + +axis2_status_t AXIS2_CALL +security_context_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_security_context_token_t * security_context_token) +{ + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + type = neethi_assertion_get_type(assertion, env); + + if(type == ASSERTION_TYPE_REQUIRE_DERIVED_KEYS_SC10) + { + rp_security_context_token_set_derivedkey(security_context_token, env, DERIVEKEY_NEEDED); + rp_security_context_token_set_derivedkey_version(security_context_token, env, + DERIVEKEY_VERSION_SC10); + } + else if(type == ASSERTION_TYPE_REQUIRE_DERIVED_KEYS_SC13) + { + rp_security_context_token_set_derivedkey(security_context_token, env, DERIVEKEY_NEEDED); + rp_security_context_token_set_derivedkey_version(security_context_token, env, + DERIVEKEY_VERSION_SC13); + } + else if(type == ASSERTION_TYPE_REQUIRE_EXTERNAL_URI) + { + rp_security_context_token_set_require_external_uri_ref(security_context_token, env, + AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_SC10_SECURITY_CONTEXT_TOKEN) + { + rp_security_context_token_set_sc10_security_context_token(security_context_token, env, + AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_SC13_SECURITY_CONTEXT_TOKEN) + { + rp_security_context_token_set_sc10_security_context_token(security_context_token, env, + AXIS2_FALSE); + } + else if(type == ASSERTION_TYPE_ISSUER) + { + axis2_char_t *issuer = NULL; + issuer = (axis2_char_t *)neethi_assertion_get_value(assertion, env); + rp_security_context_token_set_issuer(security_context_token, env, issuer); + } + else if(type == ASSERTION_TYPE_BOOTSTRAP_POLICY) + { + neethi_policy_t *bootstrap_policy = NULL; + bootstrap_policy = (neethi_policy_t *)neethi_assertion_get_value(assertion, env); + rp_security_context_token_set_bootstrap_policy(security_context_token, env, + bootstrap_policy); + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/signature_token_builder.c b/neethi/src/secpolicy/builder/signature_token_builder.c new file mode 100644 index 0000000..0c1c0c7 --- /dev/null +++ b/neethi/src/secpolicy/builder/signature_token_builder.c @@ -0,0 +1,175 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +signature_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_property_t *signature_token); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_signature_token_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_property_t *signature_token = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + signature_token = rp_property_create(env); + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + neethi_policy_free(policy, env); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + signature_token_process_alternatives(env, all, signature_token); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_property_free, signature_token, + ASSERTION_TYPE_SIGNATURE_TOKEN); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +signature_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_property_t *signature_token) +{ + + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(value) + { + if(type == ASSERTION_TYPE_X509_TOKEN) + { + rp_x509_token_t *x509_token = NULL; + x509_token = (rp_x509_token_t *)neethi_assertion_get_value(assertion, env); + if(x509_token) + { + rp_property_set_value(signature_token, env, x509_token, RP_PROPERTY_X509_TOKEN); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_ISSUED_TOKEN) + { + rp_issued_token_t *issued_token = NULL; + issued_token = (rp_issued_token_t *)neethi_assertion_get_value(assertion, env); + if(issued_token) + { + rp_property_set_value(signature_token, env, issued_token, + RP_PROPERTY_ISSUED_TOKEN); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_SAML_TOKEN) + { + rp_saml_token_t *saml_token = NULL; + saml_token = (rp_saml_token_t *)neethi_assertion_get_value(assertion, env); + if(saml_token) + { + rp_property_set_value(signature_token, env, saml_token, RP_PROPERTY_SAML_TOKEN); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_SECURITY_CONTEXT_TOKEN) + { + rp_security_context_token_t *security_context_token = NULL; + security_context_token = (rp_security_context_token_t *)neethi_assertion_get_value( + assertion, env); + + if(security_context_token) + { + rp_property_set_value(signature_token, env, security_context_token, + RP_PROPERTY_SECURITY_CONTEXT_TOKEN); + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/signed_encrypted_parts_builder.c b/neethi/src/secpolicy/builder/signed_encrypted_parts_builder.c new file mode 100644 index 0000000..be5008e --- /dev/null +++ b/neethi/src/secpolicy/builder/signed_encrypted_parts_builder.c @@ -0,0 +1,209 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +static rp_header_t *AXIS2_CALL +rp_signed_encrypted_parts_builder_build_header( + axiom_element_t *element, + const axutil_env_t *env); + +static axis2_status_t AXIS2_CALL +rp_signed_encrypted_parts_builder_set_properties( + axiom_node_t *node, + axiom_element_t *element, + axis2_char_t *local_name, + rp_signed_encrypted_parts_t *signed_encrypted_parts, + const axutil_env_t *env); + +/** + * Builts EncryptedParts or SignedParts assertion + * @param env Pointer to environment struct + * @param node Assertion node + * @param element Assertion element + * @param is_signed boolean showing whether signing or encryption + * @returns neethi assertion created. NULL if failure. + */ +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_signed_encrypted_parts_builder_build( + const axutil_env_t *env, + axiom_node_t *parts, + axiom_element_t *parts_ele, + axis2_bool_t is_signed) +{ + rp_signed_encrypted_parts_t *signed_encrypted_parts = NULL; + axiom_children_iterator_t *children_iter = NULL; + neethi_assertion_t *assertion = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + signed_encrypted_parts = rp_signed_encrypted_parts_create(env); + if(!signed_encrypted_parts) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Cannot create signed_encrypted_parts."); + return NULL; + } + + rp_signed_encrypted_parts_set_signedparts(signed_encrypted_parts, env, is_signed); + + children_iter = axiom_element_get_children(parts_ele, env, parts); + if(children_iter) + { + while(axiom_children_iterator_has_next(children_iter, env)) + { + axiom_node_t *node = NULL; + axiom_element_t *ele = NULL; + axis2_char_t *local_name = NULL; + node = axiom_children_iterator_next(children_iter, env); + if(node) + { + if(axiom_node_get_node_type(node, env) == AXIOM_ELEMENT) + { + ele = (axiom_element_t *)axiom_node_get_data_element(node, env); + if(ele) + { + local_name = axiom_element_get_localname(ele, env); + if(local_name) + { + status = rp_signed_encrypted_parts_builder_set_properties(node, ele, + local_name, signed_encrypted_parts, env); + if(status != AXIS2_SUCCESS) + { + rp_signed_encrypted_parts_free(signed_encrypted_parts, env); + signed_encrypted_parts = NULL; + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Cannot create signed_encrypted_parts. " + "Error in processing child element %s", local_name); + return NULL; + } + } + } + } + } + } + } + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_signed_encrypted_parts_free, signed_encrypted_parts, + ASSERTION_TYPE_SIGNED_ENCRYPTED_PARTS); + return assertion; +} + +static axis2_status_t AXIS2_CALL +rp_signed_encrypted_parts_builder_set_properties( + axiom_node_t *node, + axiom_element_t *element, + axis2_char_t *local_name, + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t *env) +{ + axis2_char_t *ns = NULL; + axutil_qname_t *node_qname = NULL; + + node_qname = axiom_element_get_qname(element, env, node); + if(!node_qname) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Cannot get qname from element %s.", + local_name); + return AXIS2_FAILURE; + } + + ns = axutil_qname_get_uri(node_qname, env); + if(!ns) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Cannot get namespace from element %s.", + local_name); + return AXIS2_FAILURE; + } + + /* process assertions common for WS-SecPolicy 1.1 and 1.2 */ + if(!(axutil_strcmp(ns, RP_SP_NS_11) && axutil_strcmp(ns, RP_SP_NS_12))) + { + /* this assertion is in WS-SecurityPolicy namespace */ + if(!strcmp(local_name, RP_BODY)) + { + rp_signed_encrypted_parts_set_body(signed_encrypted_parts, env, AXIS2_TRUE); + return AXIS2_SUCCESS; + } + else if(!strcmp(local_name, RP_HEADER)) + { + rp_header_t *header = NULL; + header = rp_signed_encrypted_parts_builder_build_header(element, env); + if(!header) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Failed to process Header Assertion."); + return AXIS2_FAILURE; + } + + return rp_signed_encrypted_parts_add_header(signed_encrypted_parts, env, header); + } + } + + /* process assertions specific to WS-SecPolicy 1.2 */ + if(!axutil_strcmp(ns, RP_SP_NS_12)) + { + if(!strcmp(local_name, RP_ATTACHMENTS)) + { + rp_signed_encrypted_parts_set_attachments(signed_encrypted_parts, env, AXIS2_TRUE); + return AXIS2_SUCCESS; + } + } + + /* either namespace or assertion is not understood */ + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Unknown Assertion %s with namespace %s", + local_name, ns); + return AXIS2_FAILURE; +} + +static rp_header_t *AXIS2_CALL +rp_signed_encrypted_parts_builder_build_header( + axiom_element_t *element, + const axutil_env_t *env) +{ + rp_header_t *header = NULL; + axis2_char_t *name = NULL; + axis2_char_t *nspace = NULL; + + name = axiom_element_get_attribute_value_by_name(element, env, RP_NAME); + nspace = axiom_element_get_attribute_value_by_name(element, env, RP_NAMESPACE); + if(!nspace) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Header assertion should have namespace associated with it."); + return NULL; + } + + header = rp_header_create(env); + if(!header) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Cannot create rp_header structure. Insufficient memory."); + return NULL; + } + + if(name) + { + rp_header_set_name(header, env, name); + } + + rp_header_set_namespace(header, env, nspace); + return header; +} diff --git a/neethi/src/secpolicy/builder/supporting_tokens_builder.c b/neethi/src/secpolicy/builder/supporting_tokens_builder.c new file mode 100644 index 0000000..7482144 --- /dev/null +++ b/neethi/src/secpolicy/builder/supporting_tokens_builder.c @@ -0,0 +1,203 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +supporting_tokens_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_supporting_tokens_t *supporting_tokens); + +axis2_bool_t AXIS2_CALL +is_token_assertion( + const axutil_env_t *env, + neethi_assertion_type_t type); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_supporting_tokens_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_supporting_tokens_t *supporting_tokens = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + axis2_char_t *local_name = NULL; + neethi_policy_t *normalized_policy = NULL; + + supporting_tokens = rp_supporting_tokens_create(env); + local_name = axiom_element_get_localname(element, env); + + if(local_name) + { + if(axutil_strcmp(local_name, RP_SIGNED_SUPPORTING_TOKENS) == 0) + { + rp_supporting_tokens_set_type(supporting_tokens, env, + RP_PROPERTY_SIGNED_SUPPORTING_TOKEN); + } + else if(axutil_strcmp(local_name, RP_SIGNED_ENDORSING_SUPPORTING_TOKENS) == 0) + { + rp_supporting_tokens_set_type(supporting_tokens, env, + RP_PROPERTY_SIGNED_ENDORSING_SUPPORTING_TOKEN); + } + else if(axutil_strcmp(local_name, RP_SUPPORTING_TOKENS) == 0) + { + rp_supporting_tokens_set_type(supporting_tokens, env, + RP_PROPERTY_SUPPORTING_SUPPORTING_TOKEN); + } + else if(axutil_strcmp(local_name, RP_ENDORSING_SUPPORTING_TOKENS) == 0) + { + rp_supporting_tokens_set_type(supporting_tokens, env, + RP_PROPERTY_ENDORSING_SUPPORTING_TOKEN); + } + else + return NULL; + } + else + return NULL; + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + neethi_policy_free(policy, env); + policy = NULL; + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + supporting_tokens_process_alternatives(env, all, supporting_tokens); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_supporting_tokens_free, supporting_tokens, + ASSERTION_TYPE_SUPPORTING_TOKENS); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +supporting_tokens_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_supporting_tokens_t *supporting_tokens) +{ + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(value) + { + if(type == ASSERTION_TYPE_ALGORITHM_SUITE) + { + rp_algorithmsuite_t *algorithmsuite = NULL; + algorithmsuite = (rp_algorithmsuite_t *)neethi_assertion_get_value(assertion, env); + if(algorithmsuite) + { + rp_supporting_tokens_set_algorithmsuite(supporting_tokens, env, algorithmsuite); + } + else + return AXIS2_FAILURE; + } + else if(is_token_assertion(env, type)) + { + rp_property_t *token = NULL; + token = rp_property_create(env); + rp_token_identifier_set_token(token, assertion, env); + rp_supporting_tokens_add_token(supporting_tokens, env, token); + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_bool_t AXIS2_CALL +is_token_assertion( + const axutil_env_t *env, + neethi_assertion_type_t type) +{ + if(type == ASSERTION_TYPE_USERNAME_TOKEN) + { + return AXIS2_TRUE; + } + else if(type == ASSERTION_TYPE_X509_TOKEN) + { + return AXIS2_TRUE; + } + else if(type == ASSERTION_TYPE_ISSUED_TOKEN) + { + return AXIS2_TRUE; + } + else if(type == ASSERTION_TYPE_SAML_TOKEN) + { + return AXIS2_TRUE; + } + else + return AXIS2_FALSE; +} diff --git a/neethi/src/secpolicy/builder/symmetric_binding_builder.c b/neethi/src/secpolicy/builder/symmetric_binding_builder.c new file mode 100644 index 0000000..1338963 --- /dev/null +++ b/neethi/src/secpolicy/builder/symmetric_binding_builder.c @@ -0,0 +1,245 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +symmetric_binding_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_symmetric_binding_t *symmetric_binding); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_symmetric_binding_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_symmetric_binding_t *symmetric_binding = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + symmetric_binding = rp_symmetric_binding_create(env); + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + neethi_policy_free(policy, env); + policy = NULL; + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + symmetric_binding_process_alternatives(env, all, symmetric_binding); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_symmetric_binding_free, symmetric_binding, + ASSERTION_TYPE_SYMMETRIC_BINDING); + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +symmetric_binding_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_symmetric_binding_t * symmetric_binding) +{ + + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + rp_binding_commons_t *commons = NULL; + rp_symmetric_asymmetric_binding_commons_t *as_commons = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + commons = rp_binding_commons_create(env); + as_commons = rp_symmetric_asymmetric_binding_commons_create(env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(type == ASSERTION_TYPE_PROTECTION_TOKEN) + { + rp_property_t *protection_token = NULL; + protection_token = (rp_property_t *)neethi_assertion_get_value(assertion, env); + if(protection_token) + { + rp_symmetric_binding_set_protection_token(symmetric_binding, env, protection_token); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_ENCRYPTION_TOKEN) + { + rp_property_t *encryption_token = NULL; + encryption_token = (rp_property_t *)neethi_assertion_get_value(assertion, env); + if(encryption_token) + { + rp_symmetric_binding_set_encryption_token(symmetric_binding, env, encryption_token); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_SIGNATURE_TOKEN) + { + rp_property_t *signature_token = NULL; + signature_token = (rp_property_t *)neethi_assertion_get_value(assertion, env); + if(signature_token) + { + rp_symmetric_binding_set_signature_token(symmetric_binding, env, signature_token); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_ALGORITHM_SUITE) + { + rp_algorithmsuite_t *algorithmsuite = NULL; + algorithmsuite = (rp_algorithmsuite_t *)neethi_assertion_get_value(assertion, env); + if(algorithmsuite) + { + rp_binding_commons_set_algorithmsuite(commons, env, algorithmsuite); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_INCLUDE_TIMESTAMP) + { + rp_binding_commons_set_include_timestamp(commons, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_LAYOUT) + { + rp_layout_t *layout = NULL; + layout = (rp_layout_t *)neethi_assertion_get_value(assertion, env); + if(layout) + { + rp_binding_commons_set_layout(commons, env, layout); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_ENCRYPT_BEFORE_SIGNING) + { + rp_symmetric_asymmetric_binding_commons_set_protection_order(as_commons, env, + RP_ENCRYPT_BEFORE_SIGNING); + } + else if(type == ASSERTION_TYPE_SIGN_BEFORE_ENCRYPTING) + { + rp_symmetric_asymmetric_binding_commons_set_protection_order(as_commons, env, + RP_SIGN_BEFORE_ENCRYPTING); + } + else if(type == ASSERTION_TYPE_ENCRYPT_SIGNATURE) + { + rp_symmetric_asymmetric_binding_commons_set_signature_protection(as_commons, env, + AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_PROTECT_TOKENS) + { + rp_symmetric_asymmetric_binding_commons_set_token_protection(as_commons, env, + AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_ONLY_SIGN_ENTIRE_HEADERS_AND_BODY) + { + rp_symmetric_asymmetric_binding_commons_set_entire_headers_and_body_signatures( + as_commons, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_SUPPORTING_TOKENS) + { + rp_supporting_tokens_t *supporting_tokens = NULL; + supporting_tokens + = (rp_supporting_tokens_t *)neethi_assertion_get_value(assertion, env); + if(supporting_tokens) + { + rp_property_type_t type; + type = rp_supporting_tokens_get_type(supporting_tokens, env); + if(type == RP_PROPERTY_SIGNED_SUPPORTING_TOKEN) + { + rp_binding_commons_set_signed_supporting_tokens(commons, env, supporting_tokens); + } + else if(type == RP_PROPERTY_SIGNED_ENDORSING_SUPPORTING_TOKEN) + { + rp_binding_commons_set_signed_endorsing_supporting_tokens(commons, env, + supporting_tokens); + } + else if(type == RP_PROPERTY_SUPPORTING_SUPPORTING_TOKEN) + { + rp_binding_commons_set_supporting_tokens(commons, env, supporting_tokens); + } + else if(type == RP_PROPERTY_ENDORSING_SUPPORTING_TOKEN) + { + rp_binding_commons_set_endorsing_supporting_tokens(commons, env, + supporting_tokens); + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + rp_symmetric_asymmetric_binding_commons_set_binding_commons(as_commons, env, commons); + rp_symmetric_binding_set_symmetric_asymmetric_binding_commons(symmetric_binding, env, + as_commons); + + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/token_identifier.c b/neethi/src/secpolicy/builder/token_identifier.c new file mode 100644 index 0000000..938627e --- /dev/null +++ b/neethi/src/secpolicy/builder/token_identifier.c @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +/***********************************/ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_token_identifier_set_token( + rp_property_t *token, + neethi_assertion_t *assertion, + const axutil_env_t *env) +{ + void *value = NULL; + neethi_assertion_type_t type; + + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(value) + { + if(type == ASSERTION_TYPE_USERNAME_TOKEN) + { + rp_username_token_t *username_token = NULL; + username_token = (rp_username_token_t *)value; + rp_property_set_value(token, env, username_token, RP_PROPERTY_USERNAME_TOKEN); + return AXIS2_SUCCESS; + } + else if(type == ASSERTION_TYPE_X509_TOKEN) + { + rp_x509_token_t *x509_token = NULL; + x509_token = (rp_x509_token_t *)value; + rp_property_set_value(token, env, x509_token, RP_PROPERTY_X509_TOKEN); + return AXIS2_SUCCESS; + } + else if(type == ASSERTION_TYPE_SAML_TOKEN) + { + rp_saml_token_t *saml_token = NULL; + saml_token = (rp_saml_token_t *)value; + rp_property_set_value(token, env, saml_token, RP_PROPERTY_SAML_TOKEN); + return AXIS2_SUCCESS; + } + else if(type == ASSERTION_TYPE_ISSUED_TOKEN) + { + rp_issued_token_t *issued_token = NULL; + issued_token = (rp_issued_token_t *)value; + rp_property_set_value(token, env, issued_token, RP_PROPERTY_ISSUED_TOKEN); + return AXIS2_SUCCESS; + } + else + return AXIS2_FAILURE; + } + + return AXIS2_FAILURE; +} + diff --git a/neethi/src/secpolicy/builder/transport_binding_builder.c b/neethi/src/secpolicy/builder/transport_binding_builder.c new file mode 100644 index 0000000..be84119 --- /dev/null +++ b/neethi/src/secpolicy/builder/transport_binding_builder.c @@ -0,0 +1,196 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +transport_binding_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_transport_binding_t *transport_binding); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_transport_binding_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_transport_binding_t *transport_binding = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + transport_binding = rp_transport_binding_create(env); + + child_node = axiom_node_get_first_element(node, env); + + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + neethi_policy_free(policy, env); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + transport_binding_process_alternatives(env, all, transport_binding); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_transport_binding_free, transport_binding, + ASSERTION_TYPE_TRANSPORT_BINDING); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +transport_binding_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_transport_binding_t *transport_binding) +{ + + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + rp_binding_commons_t *commons = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + commons = rp_binding_commons_create(env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(type == ASSERTION_TYPE_TRANSPORT_TOKEN) + { + rp_property_t *transport_token = NULL; + transport_token = (rp_property_t *)neethi_assertion_get_value(assertion, env); + if(transport_token) + { + rp_transport_binding_set_transport_token(transport_binding, env, transport_token); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_ALGORITHM_SUITE) + { + rp_algorithmsuite_t *algorithmsuite = NULL; + algorithmsuite = (rp_algorithmsuite_t *)neethi_assertion_get_value(assertion, env); + if(algorithmsuite) + { + rp_binding_commons_set_algorithmsuite(commons, env, algorithmsuite); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_INCLUDE_TIMESTAMP) + { + rp_binding_commons_set_include_timestamp(commons, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_LAYOUT) + { + rp_layout_t *layout = NULL; + layout = (rp_layout_t *)neethi_assertion_get_value(assertion, env); + if(layout) + { + rp_binding_commons_set_layout(commons, env, layout); + } + else + return AXIS2_FAILURE; + } + else if(type == ASSERTION_TYPE_SUPPORTING_TOKENS) + { + rp_supporting_tokens_t *supporting_tokens = NULL; + supporting_tokens + = (rp_supporting_tokens_t *)neethi_assertion_get_value(assertion, env); + if(supporting_tokens) + { + rp_property_type_t type; + type = rp_supporting_tokens_get_type(supporting_tokens, env); + if(type == RP_PROPERTY_SIGNED_SUPPORTING_TOKEN) + { + rp_binding_commons_set_signed_supporting_tokens(commons, env, supporting_tokens); + } + else if(type == RP_PROPERTY_SIGNED_ENDORSING_SUPPORTING_TOKEN) + { + rp_binding_commons_set_signed_endorsing_supporting_tokens(commons, env, + supporting_tokens); + } + else if(type == RP_PROPERTY_SUPPORTING_SUPPORTING_TOKEN) + { + rp_binding_commons_set_supporting_tokens(commons, env, supporting_tokens); + } + else if(type == RP_PROPERTY_ENDORSING_SUPPORTING_TOKEN) + { + rp_binding_commons_set_endorsing_supporting_tokens(commons, env, + supporting_tokens); + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + + rp_transport_binding_set_binding_commons(transport_binding, env, commons); + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/transport_token_builder.c b/neethi/src/secpolicy/builder/transport_token_builder.c new file mode 100644 index 0000000..f50183d --- /dev/null +++ b/neethi/src/secpolicy/builder/transport_token_builder.c @@ -0,0 +1,138 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +transport_token_process_alternatives( + const axutil_env_t * env, + neethi_all_t * all, + rp_property_t * transport_token); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_transport_token_builder_build( + const axutil_env_t * env, + axiom_node_t * node, + axiom_element_t * element) +{ + rp_property_t *transport_token = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + transport_token = rp_property_create(env); + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + transport_token_process_alternatives(env, all, transport_token); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_property_free, transport_token, + ASSERTION_TYPE_TRANSPORT_TOKEN); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +transport_token_process_alternatives( + const axutil_env_t * env, + neethi_all_t * all, + rp_property_t * transport_token) +{ + + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(value) + { + if(type == ASSERTION_TYPE_HTTPS_TOKEN) + { + rp_https_token_t *https_token = NULL; + https_token = (rp_https_token_t *)neethi_assertion_get_value(assertion, env); + if(https_token) + { + rp_property_set_value(transport_token, env, https_token, + RP_PROPERTY_HTTPS_TOKEN); + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/trust10_builder.c b/neethi/src/secpolicy/builder/trust10_builder.c new file mode 100644 index 0000000..e97f0f7 --- /dev/null +++ b/neethi/src/secpolicy/builder/trust10_builder.c @@ -0,0 +1,139 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +trust10_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_trust10_t *trust10); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_trust10_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_trust10_t *trust10 = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + trust10 = rp_trust10_create(env); + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + neethi_policy_free(policy, env); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + trust10_process_alternatives(env, all, trust10); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_trust10_free, trust10, ASSERTION_TYPE_TRUST10); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +trust10_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_trust10_t *trust10) +{ + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(type == ASSERTION_TYPE_MUST_SUPPORT_CLIENT_CHALLENGE) + { + rp_trust10_set_must_support_client_challenge(trust10, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_MUST_SUPPORT_SERVER_CHALLENGE) + { + rp_trust10_set_must_support_server_challenge(trust10, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_REQUIRE_CLIENT_ENTROPY) + { + rp_trust10_set_require_client_entropy(trust10, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_REQUIRE_SERVER_ENTROPHY) + { + rp_trust10_set_require_server_entropy(trust10, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_MUST_SUPPORT_ISSUED_TOKENS) + { + rp_trust10_set_must_support_issued_token(trust10, env, AXIS2_TRUE); + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/username_token_builder.c b/neethi/src/secpolicy/builder/username_token_builder.c new file mode 100644 index 0000000..b8ac02b --- /dev/null +++ b/neethi/src/secpolicy/builder/username_token_builder.c @@ -0,0 +1,150 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +static axis2_status_t AXIS2_CALL username_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_username_token_t *username_token); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_username_token_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_username_token_t *username_token = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + axis2_char_t *inclusion_value = NULL; + axutil_qname_t *qname = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + username_token = rp_username_token_create(env); + qname = axutil_qname_create(env, RP_INCLUDE_TOKEN, RP_SP_NS_11, RP_SP_PREFIX); + inclusion_value = axiom_element_get_attribute_value(element, env, qname); + axutil_qname_free(qname, env); + qname = NULL; + if(!inclusion_value) + { + /* we can try whether WS-SP1.2 specific inclusion value */ + qname = axutil_qname_create(env, RP_INCLUDE_TOKEN, RP_SP_NS_12, RP_SP_PREFIX); + inclusion_value = axiom_element_get_attribute_value(element, env, qname); + axutil_qname_free(qname, env); + qname = NULL; + } + + rp_username_token_set_inclusion(username_token, env, inclusion_value); + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + assertion = neethi_assertion_create(env); + neethi_assertion_set_value(assertion, env, username_token, ASSERTION_TYPE_USERNAME_TOKEN); + return assertion; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + neethi_policy_free(policy, env); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + username_token_process_alternatives(env, all, username_token); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_username_token_free, username_token, + ASSERTION_TYPE_USERNAME_TOKEN); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +static axis2_status_t AXIS2_CALL +username_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_username_token_t *username_token) +{ + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(value) + { + if(type == ASSERTION_TYPE_WSS_USERNAME_TOKEN_10) + { + rp_username_token_set_useUTprofile10(username_token, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_WSS_USERNAME_TOKEN_11) + { + rp_username_token_set_useUTprofile11(username_token, env, AXIS2_TRUE); + } + else + return AXIS2_FAILURE; + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/wss10_builder.c b/neethi/src/secpolicy/builder/wss10_builder.c new file mode 100644 index 0000000..6dd10ae --- /dev/null +++ b/neethi/src/secpolicy/builder/wss10_builder.c @@ -0,0 +1,135 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +wss10_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_wss10_t *wss10); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_wss10_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_wss10_t *wss10 = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + wss10 = rp_wss10_create(env); + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + neethi_policy_free(policy, env); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + wss10_process_alternatives(env, all, wss10); + + assertion = neethi_assertion_create_with_args(env, (AXIS2_FREE_VOID_ARG)rp_wss10_free, + wss10, ASSERTION_TYPE_WSS10); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +wss10_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_wss10_t *wss10) +{ + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(type == ASSERTION_TYPE_MUST_SUPPORT_REF_KEY_IDENTIFIER) + { + rp_wss10_set_must_support_ref_key_identifier(wss10, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_MUST_SUPPORT_REF_ISSUER_SERIAL) + { + rp_wss10_set_must_support_ref_issuer_serial(wss10, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_MUST_SUPPORT_REF_EXTERNAL_URI) + { + rp_wss10_set_must_support_ref_external_uri(wss10, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_MUST_SUPPORT_REF_EMBEDDED_TOKEN) + { + rp_wss10_set_must_support_ref_embedded_token(wss10, env, AXIS2_TRUE); + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/wss11_builder.c b/neethi/src/secpolicy/builder/wss11_builder.c new file mode 100644 index 0000000..6249181 --- /dev/null +++ b/neethi/src/secpolicy/builder/wss11_builder.c @@ -0,0 +1,147 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +wss11_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_wss11_t *wss11); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_wss11_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_wss11_t *wss11 = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + wss11 = rp_wss11_create(env); + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + neethi_policy_free(policy, env); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + wss11_process_alternatives(env, all, wss11); + + assertion = neethi_assertion_create_with_args(env, (AXIS2_FREE_VOID_ARG)rp_wss11_free, + wss11, ASSERTION_TYPE_WSS11); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +wss11_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_wss11_t *wss11) +{ + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + void *value = NULL; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + value = neethi_assertion_get_value(assertion, env); + type = neethi_assertion_get_type(assertion, env); + + if(type == ASSERTION_TYPE_MUST_SUPPORT_REF_KEY_IDENTIFIER) + { + rp_wss11_set_must_support_ref_key_identifier(wss11, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_MUST_SUPPORT_REF_ISSUER_SERIAL) + { + rp_wss11_set_must_support_ref_issuer_serial(wss11, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_MUST_SUPPORT_REF_EXTERNAL_URI) + { + rp_wss11_set_must_support_ref_external_uri(wss11, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_MUST_SUPPORT_REF_EMBEDDED_TOKEN) + { + rp_wss11_set_must_support_ref_embedded_token(wss11, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_MUST_SUPPORT_REF_THUMBPRINT) + { + rp_wss11_set_must_support_ref_thumbprint(wss11, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_MUST_SUPPORT_REF_ENCRYPTED_KEY) + { + rp_wss11_set_must_support_ref_encryptedkey(wss11, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_REQUIRE_SIGNATURE_CONFIRMATION) + { + rp_wss11_set_require_signature_confirmation(wss11, env, AXIS2_TRUE); + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/builder/x509_token_builder.c b/neethi/src/secpolicy/builder/x509_token_builder.c new file mode 100644 index 0000000..fa8d8f9 --- /dev/null +++ b/neethi/src/secpolicy/builder/x509_token_builder.c @@ -0,0 +1,168 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +/*private functions*/ + +axis2_status_t AXIS2_CALL +x509_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_x509_token_t *x509_token); + +/***********************************/ + +AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL +rp_x509_token_builder_build( + const axutil_env_t *env, + axiom_node_t *node, + axiom_element_t *element) +{ + rp_x509_token_t *x509_token = NULL; + neethi_policy_t *policy = NULL; + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + axutil_array_list_t *alternatives = NULL; + neethi_operator_t *component = NULL; + neethi_all_t *all = NULL; + axis2_char_t *inclusion_value = NULL; + axutil_qname_t *qname = NULL; + neethi_assertion_t *assertion = NULL; + neethi_policy_t *normalized_policy = NULL; + + x509_token = rp_x509_token_create(env); + qname = axutil_qname_create(env, RP_INCLUDE_TOKEN, RP_SP_NS_11, RP_SP_PREFIX); + inclusion_value = axiom_element_get_attribute_value(element, env, qname); + axutil_qname_free(qname, env); + qname = NULL; + + if(!inclusion_value) + { + /* we can try whether WS-SP1.2 specific inclusion value */ + qname = axutil_qname_create(env, RP_INCLUDE_TOKEN, RP_SP_NS_12, RP_SP_PREFIX); + inclusion_value = axiom_element_get_attribute_value(element, env, qname); + axutil_qname_free(qname, env); + qname = NULL; + } + + rp_x509_token_set_inclusion(x509_token, env, inclusion_value); + + child_node = axiom_node_get_first_element(node, env); + if(!child_node) + { + return NULL; + } + + if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + child_element = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + if(child_element) + { + policy = neethi_engine_get_policy(env, child_node, child_element); + if(!policy) + { + return NULL; + } + normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); + neethi_policy_free(policy, env); + policy = NULL; + alternatives = neethi_policy_get_alternatives(normalized_policy, env); + component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0); + all = (neethi_all_t *)neethi_operator_get_value(component, env); + x509_token_process_alternatives(env, all, x509_token); + + assertion = neethi_assertion_create_with_args(env, + (AXIS2_FREE_VOID_ARG)rp_x509_token_free, x509_token, ASSERTION_TYPE_X509_TOKEN); + + neethi_policy_free(normalized_policy, env); + normalized_policy = NULL; + + return assertion; + } + else + return NULL; + } + else + return NULL; +} + +axis2_status_t AXIS2_CALL +x509_token_process_alternatives( + const axutil_env_t *env, + neethi_all_t *all, + rp_x509_token_t *x509_token) +{ + neethi_operator_t *operator = NULL; + axutil_array_list_t *arraylist = NULL; + neethi_assertion_t *assertion = NULL; + neethi_assertion_type_t type; + + int i = 0; + + arraylist = neethi_all_get_policy_components(all, env); + + for(i = 0; i < axutil_array_list_size(arraylist, env); i++) + { + operator = (neethi_operator_t *)axutil_array_list_get(arraylist, env, i); + assertion = (neethi_assertion_t *)neethi_operator_get_value(operator, env); + type = neethi_assertion_get_type(assertion, env); + + if(type == ASSERTION_TYPE_REQUIRE_DERIVED_KEYS_SC10) + { + rp_x509_token_set_derivedkey(x509_token, env, DERIVEKEY_NEEDED); + rp_x509_token_set_derivedkey_version(x509_token, env, DERIVEKEY_VERSION_SC10); + } + else if(type == ASSERTION_TYPE_REQUIRE_DERIVED_KEYS_SC13) + { + rp_x509_token_set_derivedkey(x509_token, env, DERIVEKEY_NEEDED); + rp_x509_token_set_derivedkey_version(x509_token, env, DERIVEKEY_VERSION_SC13); + } + else if(type == ASSERTION_TYPE_REQUIRE_KEY_IDENTIFIRE_REFERENCE) + { + rp_x509_token_set_require_key_identifier_reference(x509_token, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_REQUIRE_ISSUER_SERIAL_REFERENCE) + { + rp_x509_token_set_require_issuer_serial_reference(x509_token, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_REQUIRE_EMBEDDED_TOKEN_REFERENCE) + { + rp_x509_token_set_require_embedded_token_reference(x509_token, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_REQUIRE_THUMBPRINT_REFERENCE) + { + rp_x509_token_set_require_thumb_print_reference(x509_token, env, AXIS2_TRUE); + } + else if(type == ASSERTION_TYPE_WSS_X509_V1_TOKEN_10) + { + rp_x509_token_set_token_version_and_type(x509_token, env, RP_WSS_X509_V1_TOKEN_10); + } + else if(type == ASSERTION_TYPE_WSS_X509_V3_TOKEN_10) + { + rp_x509_token_set_token_version_and_type(x509_token, env, RP_WSS_X509_V3_TOKEN_10); + } + else + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/Makefile.am b/neethi/src/secpolicy/model/Makefile.am new file mode 100644 index 0000000..b24ddb7 --- /dev/null +++ b/neethi/src/secpolicy/model/Makefile.am @@ -0,0 +1,21 @@ +TESTS = + +noinst_LTLIBRARIES = librp_model.la + +librp_model_la_SOURCES = algorithmsuite.c asymmetric_binding.c \ + binding_commons.c header.c element.c https_token.c layout.c \ + property.c rampart_config.c secpolicy.c security_context_token.c \ + signed_encrypted_elements.c signed_encrypted_parts.c signed_encrypted_items.c \ + supporting_tokens.c symmetric_asymmetric_binding_commons.c \ + symmetric_binding.c transport_binding.c ut.c wss10.c wss11.c x509_token.c \ + trust10.c issued_token.c saml_token.c token.c + + +librp_model_la_LIBADD = ../../../../util/src/libaxutil.la + + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../include \ + -I ../../../../util/include \ + -I ../../../../axiom/include \ + -I ../../../../include diff --git a/neethi/src/secpolicy/model/algorithmsuite.c b/neethi/src/secpolicy/model/algorithmsuite.c new file mode 100644 index 0000000..db3426c --- /dev/null +++ b/neethi/src/secpolicy/model/algorithmsuite.c @@ -0,0 +1,627 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_algorithmsuite_t +{ + axis2_char_t *algosuite_string; + axis2_char_t *symmetric_signature; + axis2_char_t *asymmetric_signature; + axis2_char_t *computed_key; + int max_symmetric_keylength; + int min_asymmetric_keylength; + int max_asymmetric_keylength; + axis2_char_t *digest; + axis2_char_t *encryption; + axis2_char_t *symmetrickeywrap; + axis2_char_t *asymmetrickeywrap; + axis2_char_t *encryption_key_derivation; + axis2_char_t *signature_key_derivation; + int encryption_key_derivation_keylength; + int signature_key_derivation_keylength; + int min_symmetric_keylength; + axis2_char_t *c14n; + axis2_char_t *soap_normalization; + axis2_char_t *str_transformation; + axis2_char_t *xpath; + int ref; + +}; + +AXIS2_EXTERN rp_algorithmsuite_t *AXIS2_CALL +rp_algorithmsuite_create( + const axutil_env_t *env) +{ + rp_algorithmsuite_t *algorithmsuite = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + algorithmsuite = (rp_algorithmsuite_t *)AXIS2_MALLOC(env->allocator, + sizeof(rp_algorithmsuite_t)); + + if(algorithmsuite == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + algorithmsuite->algosuite_string = NULL; + algorithmsuite->symmetric_signature = RP_HMAC_SHA1; + algorithmsuite->asymmetric_signature = RP_RSA_SHA1; + algorithmsuite->computed_key = RP_P_SHA1; + algorithmsuite->max_symmetric_keylength = 256; + algorithmsuite->min_asymmetric_keylength = 1024; + algorithmsuite->max_asymmetric_keylength = 4096; + algorithmsuite->digest = NULL; + algorithmsuite->encryption = NULL; + algorithmsuite->symmetrickeywrap = NULL; + algorithmsuite->asymmetrickeywrap = NULL; + algorithmsuite->encryption_key_derivation = NULL; + algorithmsuite->signature_key_derivation = NULL; + algorithmsuite->encryption_key_derivation_keylength = 192; + algorithmsuite->signature_key_derivation_keylength = 192; + algorithmsuite->min_symmetric_keylength = 0; + ; + algorithmsuite->c14n = RP_EX_C14N; + algorithmsuite->soap_normalization = NULL; + algorithmsuite->str_transformation = NULL; + algorithmsuite->xpath = NULL; + algorithmsuite->ref = 0; + return algorithmsuite; +} + +AXIS2_EXTERN void AXIS2_CALL +rp_algorithmsuite_free( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + if(algorithmsuite) + { + if(--(algorithmsuite->ref) > 0) + { + return; + } + + AXIS2_FREE(env->allocator, algorithmsuite); + algorithmsuite = NULL; + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_algorithmsuite_get_algosuite_string( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + if(!algorithmsuite) + return NULL; + else + return algorithmsuite->algosuite_string; + +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_algorithmsuite_set_algosuite( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env, + axis2_char_t *algosuite_string) +{ + AXIS2_PARAM_CHECK(env->error, algosuite_string, AXIS2_FAILURE); + + algorithmsuite->algosuite_string = algosuite_string; + + if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_BASIC256) == 0) + { + algorithmsuite->digest = RP_SHA1; + algorithmsuite->encryption = RP_AES256; + algorithmsuite->symmetrickeywrap = RP_KW_AES256; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA_OAEP; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L256; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L192; + algorithmsuite->min_symmetric_keylength = 256; + algorithmsuite->encryption_key_derivation_keylength = 256; + algorithmsuite->signature_key_derivation_keylength = 192; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_BASIC192) == 0) + { + algorithmsuite->digest = RP_SHA1; + algorithmsuite->encryption = RP_AES192; + algorithmsuite->symmetrickeywrap = RP_KW_AES192; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA_OAEP; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L192; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L192; + algorithmsuite->min_symmetric_keylength = 192; + algorithmsuite->encryption_key_derivation_keylength = 192; + algorithmsuite->signature_key_derivation_keylength = 192; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_BASIC128) == 0) + { + algorithmsuite->digest = RP_SHA1; + algorithmsuite->encryption = RP_AES128; + algorithmsuite->symmetrickeywrap = RP_KW_AES128; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA_OAEP; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L128; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L128; + algorithmsuite->min_symmetric_keylength = 128; + algorithmsuite->encryption_key_derivation_keylength = 128; + algorithmsuite->signature_key_derivation_keylength = 128; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_TRIPLE_DES) == 0) + { + algorithmsuite->digest = RP_SHA1; + algorithmsuite->encryption = RP_TRIPLE_DES; + algorithmsuite->symmetrickeywrap = RP_KW_TRIPLE_DES; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA_OAEP; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L192; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L192; + algorithmsuite->min_symmetric_keylength = 192; + algorithmsuite->encryption_key_derivation_keylength = 192; + algorithmsuite->signature_key_derivation_keylength = 192; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_BASIC256_RSA15) == 0) + { + algorithmsuite->digest = RP_SHA1; + algorithmsuite->encryption = RP_AES256; + algorithmsuite->symmetrickeywrap = RP_KW_AES256; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA15; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L256; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L192; + algorithmsuite->min_symmetric_keylength = 256; + algorithmsuite->encryption_key_derivation_keylength = 256; + algorithmsuite->signature_key_derivation_keylength = 192; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_BASIC192_RSA15) == 0) + { + algorithmsuite->digest = RP_SHA1; + algorithmsuite->encryption = RP_AES192; + algorithmsuite->symmetrickeywrap = RP_KW_AES192; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA15; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L192; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L192; + algorithmsuite->min_symmetric_keylength = 192; + algorithmsuite->encryption_key_derivation_keylength = 192; + algorithmsuite->signature_key_derivation_keylength = 192; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_BASIC128_RSA15) == 0) + { + algorithmsuite->digest = RP_SHA1; + algorithmsuite->encryption = RP_AES128; + algorithmsuite->symmetrickeywrap = RP_KW_AES128; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA15; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L128; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L128; + algorithmsuite->min_symmetric_keylength = 128; + algorithmsuite->encryption_key_derivation_keylength = 128; + algorithmsuite->signature_key_derivation_keylength = 128; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_TRIPLE_DES_RSA15) == 0) + { + algorithmsuite->digest = RP_SHA1; + algorithmsuite->encryption = RP_TRIPLE_DES; + algorithmsuite->symmetrickeywrap = RP_KW_TRIPLE_DES; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA15; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L192; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L192; + algorithmsuite->min_symmetric_keylength = 192; + algorithmsuite->encryption_key_derivation_keylength = 192; + algorithmsuite->signature_key_derivation_keylength = 192; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_BASIC256_SHA256) == 0) + { + algorithmsuite->digest = RP_SHA256; + algorithmsuite->encryption = RP_AES256; + algorithmsuite->symmetrickeywrap = RP_KW_AES256; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA_OAEP; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L256; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L192; + algorithmsuite->min_symmetric_keylength = 256; + algorithmsuite->encryption_key_derivation_keylength = 256; + algorithmsuite->signature_key_derivation_keylength = 192; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_BASIC192_SHA256) == 0) + { + algorithmsuite->digest = RP_SHA256; + algorithmsuite->encryption = RP_AES192; + algorithmsuite->symmetrickeywrap = RP_KW_AES192; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA_OAEP; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L192; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L192; + algorithmsuite->min_symmetric_keylength = 192; + algorithmsuite->encryption_key_derivation_keylength = 192; + algorithmsuite->signature_key_derivation_keylength = 192; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_BASIC128_SHA256) == 0) + { + algorithmsuite->digest = RP_SHA256; + algorithmsuite->encryption = RP_AES128; + algorithmsuite->symmetrickeywrap = RP_KW_AES128; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA_OAEP; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L128; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L128; + algorithmsuite->min_symmetric_keylength = 128; + algorithmsuite->encryption_key_derivation_keylength = 128; + algorithmsuite->signature_key_derivation_keylength = 128; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_TRIPLE_DES_SHA256) == 0) + { + algorithmsuite->digest = RP_SHA256; + algorithmsuite->encryption = RP_TRIPLE_DES; + algorithmsuite->symmetrickeywrap = RP_KW_TRIPLE_DES; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA_OAEP; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L192; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L192; + algorithmsuite->min_symmetric_keylength = 192; + algorithmsuite->encryption_key_derivation_keylength = 192; + algorithmsuite->signature_key_derivation_keylength = 192; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_BASIC256_SHA256_RSA15) == 0) + { + algorithmsuite->digest = RP_SHA256; + algorithmsuite->encryption = RP_AES256; + algorithmsuite->symmetrickeywrap = RP_KW_AES256; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA15; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L256; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L192; + algorithmsuite->min_symmetric_keylength = 256; + algorithmsuite->encryption_key_derivation_keylength = 256; + algorithmsuite->signature_key_derivation_keylength = 192; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_BASIC192_SHA256_RSA15) == 0) + { + algorithmsuite->digest = RP_SHA256; + algorithmsuite->encryption = RP_AES192; + algorithmsuite->symmetrickeywrap = RP_KW_AES192; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA15; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L192; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L192; + algorithmsuite->min_symmetric_keylength = 192; + algorithmsuite->encryption_key_derivation_keylength = 192; + algorithmsuite->signature_key_derivation_keylength = 192; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_BASIC128_SHA256_RSA15) == 0) + { + algorithmsuite->digest = RP_SHA256; + algorithmsuite->encryption = RP_AES128; + algorithmsuite->symmetrickeywrap = RP_KW_AES128; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA15; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L128; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L128; + algorithmsuite->min_symmetric_keylength = 128; + algorithmsuite->encryption_key_derivation_keylength = 128; + algorithmsuite->signature_key_derivation_keylength = 128; + + return AXIS2_SUCCESS; + } + else if(axutil_strcmp(algosuite_string, RP_ALGO_SUITE_TRIPLE_DES_SHA256_RSA15) == 0) + { + algorithmsuite->digest = RP_SHA256; + algorithmsuite->encryption = RP_TRIPLE_DES; + algorithmsuite->symmetrickeywrap = RP_KW_TRIPLE_DES; + algorithmsuite->asymmetrickeywrap = RP_KW_RSA15; + algorithmsuite->encryption_key_derivation = RP_P_SHA1_L192; + algorithmsuite->signature_key_derivation = RP_P_SHA1_L192; + algorithmsuite->min_symmetric_keylength = 192; + algorithmsuite->encryption_key_derivation_keylength = 192; + algorithmsuite->signature_key_derivation_keylength = 192; + + return AXIS2_SUCCESS; + } + else + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_algorithmsuite_get_symmetric_signature( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->symmetric_signature; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_algorithmsuite_set_symmetric_signature( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env, + axis2_char_t *symmetric_signature) +{ + AXIS2_PARAM_CHECK(env->error, symmetric_signature, AXIS2_FAILURE); + + algorithmsuite->symmetric_signature = symmetric_signature; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_algorithmsuite_get_asymmetric_signature( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->asymmetric_signature; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_algorithmsuite_set_asymmetric_signature( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env, + axis2_char_t *asymmetric_signature) +{ + AXIS2_PARAM_CHECK(env->error, asymmetric_signature, AXIS2_FAILURE); + + algorithmsuite->asymmetric_signature = asymmetric_signature; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_algorithmsuite_get_computed_key( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->computed_key; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_algorithmsuite_set_computed_key( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env, + axis2_char_t *computed_key) +{ + AXIS2_PARAM_CHECK(env->error, computed_key, AXIS2_FAILURE); + + algorithmsuite->computed_key = computed_key; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_algorithmsuite_get_digest( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->digest; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_algorithmsuite_get_encryption( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->encryption; +} + +AXIS2_EXTERN int AXIS2_CALL +rp_algorithmsuite_get_max_symmetric_keylength( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->max_symmetric_keylength; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_algorithmsuite_set_max_symmetric_keylength( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env, + int max_symmetric_keylength) +{ + algorithmsuite->max_symmetric_keylength = max_symmetric_keylength; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +rp_algorithmsuite_get_min_symmetric_keylength( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->min_symmetric_keylength; +} + +AXIS2_EXTERN int AXIS2_CALL +rp_algorithmsuite_get_encryption_derivation_keylength( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->encryption_key_derivation_keylength; +} + +AXIS2_EXTERN int AXIS2_CALL +rp_algorithmsuite_get_signature_derivation_keylength( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->signature_key_derivation_keylength; +} + +AXIS2_EXTERN int AXIS2_CALL +rp_algorithmsuite_get_max_asymmetric_keylength( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->max_asymmetric_keylength; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_algorithmsuite_set_max_asymmetric_keylength( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env, + int max_asymmetric_keylength) +{ + algorithmsuite->max_asymmetric_keylength = max_asymmetric_keylength; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +rp_algorithmsuite_get_min_asymmetric_keylength( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->min_asymmetric_keylength; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_algorithmsuite_set_min_asymmetric_keylength( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env, + int min_asymmetric_keylength) +{ + algorithmsuite->min_asymmetric_keylength = min_asymmetric_keylength; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_algorithmsuite_get_symmetrickeywrap( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->symmetrickeywrap; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_algorithmsuite_get_asymmetrickeywrap( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->asymmetrickeywrap; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_algorithmsuite_get_signature_key_derivation( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->signature_key_derivation; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_algorithmsuite_get_encryption_key_derivation( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->encryption_key_derivation; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_algorithmsuite_get_soap_normalization( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->soap_normalization; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_algorithmsuite_set_soap_normalization( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env, + axis2_char_t *soap_normalization) +{ + AXIS2_PARAM_CHECK(env->error, soap_normalization, AXIS2_FAILURE); + algorithmsuite->soap_normalization = soap_normalization; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_algorithmsuite_get_str_transformation( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->str_transformation; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_algorithmsuite_set_str_transformation( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env, + axis2_char_t *str_transformation) +{ + AXIS2_PARAM_CHECK(env->error, str_transformation, AXIS2_FAILURE); + algorithmsuite->str_transformation = str_transformation; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_algorithmsuite_get_c14n( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->c14n; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_algorithmsuite_set_c14n( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env, + axis2_char_t *c14n) +{ + AXIS2_PARAM_CHECK(env->error, c14n, AXIS2_FAILURE); + algorithmsuite->c14n = c14n; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_algorithmsuite_get_xpath( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + return algorithmsuite->xpath; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_algorithmsuite_set_xpath( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env, + axis2_char_t *xpath) +{ + AXIS2_PARAM_CHECK(env->error, xpath, AXIS2_FAILURE); + algorithmsuite->xpath = xpath; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_algorithmsuite_increment_ref( + rp_algorithmsuite_t *algorithmsuite, + const axutil_env_t *env) +{ + algorithmsuite->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/asymmetric_binding.c b/neethi/src/secpolicy/model/asymmetric_binding.c new file mode 100644 index 0000000..0e57dce --- /dev/null +++ b/neethi/src/secpolicy/model/asymmetric_binding.c @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_asymmetric_binding_t +{ + rp_symmetric_asymmetric_binding_commons_t *symmetric_asymmetric_binding_commons; + rp_property_t *initiator_token; + rp_property_t *recipient_token; + int ref; +}; + +AXIS2_EXTERN rp_asymmetric_binding_t *AXIS2_CALL +rp_asymmetric_binding_create( + const axutil_env_t *env) +{ + rp_asymmetric_binding_t *asymmetric_binding = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + asymmetric_binding = (rp_asymmetric_binding_t *)AXIS2_MALLOC(env->allocator, + sizeof(rp_asymmetric_binding_t)); + + if(asymmetric_binding == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + asymmetric_binding->symmetric_asymmetric_binding_commons = NULL; + asymmetric_binding->initiator_token = NULL; + asymmetric_binding->recipient_token = NULL; + asymmetric_binding->ref = 0; + + return asymmetric_binding; + +} + +AXIS2_EXTERN void AXIS2_CALL +rp_asymmetric_binding_free( + rp_asymmetric_binding_t *asymmetric_binding, + const axutil_env_t *env) +{ + if(asymmetric_binding) + { + + if(--(asymmetric_binding->ref) > 0) + { + return; + } + + if(asymmetric_binding->symmetric_asymmetric_binding_commons) + { + rp_symmetric_asymmetric_binding_commons_free( + asymmetric_binding-> symmetric_asymmetric_binding_commons, env); + asymmetric_binding->symmetric_asymmetric_binding_commons = NULL; + } + if(asymmetric_binding->initiator_token) + { + rp_property_free(asymmetric_binding->initiator_token, env); + asymmetric_binding->initiator_token = NULL; + } + if(asymmetric_binding->recipient_token) + { + rp_property_free(asymmetric_binding->recipient_token, env); + asymmetric_binding->recipient_token = NULL; + } + AXIS2_FREE(env->allocator, asymmetric_binding); + } + + return; +} + +/* Implementations */ + +AXIS2_EXTERN rp_symmetric_asymmetric_binding_commons_t *AXIS2_CALL +rp_asymmetric_binding_get_symmetric_asymmetric_binding_commons( + rp_asymmetric_binding_t *asymmetric_binding, + const axutil_env_t *env) +{ + return asymmetric_binding->symmetric_asymmetric_binding_commons; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_asymmetric_binding_set_symmetric_asymmetric_binding_commons( + rp_asymmetric_binding_t *asymmetric_binding, + const axutil_env_t *env, + rp_symmetric_asymmetric_binding_commons_t * symmetric_asymmetric_binding_commons) +{ + AXIS2_PARAM_CHECK(env->error, symmetric_asymmetric_binding_commons, AXIS2_FAILURE); + + asymmetric_binding->symmetric_asymmetric_binding_commons = symmetric_asymmetric_binding_commons; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_property_t *AXIS2_CALL +rp_asymmetric_binding_get_initiator_token( + rp_asymmetric_binding_t *asymmetric_binding, + const axutil_env_t *env) +{ + return asymmetric_binding->initiator_token; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_asymmetric_binding_set_initiator_token( + rp_asymmetric_binding_t *asymmetric_binding, + const axutil_env_t *env, + rp_property_t *initiator_token) +{ + AXIS2_PARAM_CHECK(env->error, initiator_token, AXIS2_FAILURE); + + rp_property_increment_ref(initiator_token, env); + asymmetric_binding->initiator_token = initiator_token; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_asymmetric_binding_set_recipient_token( + rp_asymmetric_binding_t *asymmetric_binding, + const axutil_env_t *env, + rp_property_t *recipient_token) +{ + AXIS2_PARAM_CHECK(env->error, recipient_token, AXIS2_FAILURE); + + rp_property_increment_ref(recipient_token, env); + asymmetric_binding->recipient_token = recipient_token; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_property_t *AXIS2_CALL +rp_asymmetric_binding_get_recipient_token( + rp_asymmetric_binding_t *asymmetric_binding, + const axutil_env_t *env) +{ + return asymmetric_binding->recipient_token; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_asymmetric_binding_increment_ref( + rp_asymmetric_binding_t *asymmetric_binding, + const axutil_env_t *env) +{ + asymmetric_binding->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/binding_commons.c b/neethi/src/secpolicy/model/binding_commons.c new file mode 100644 index 0000000..9795c78 --- /dev/null +++ b/neethi/src/secpolicy/model/binding_commons.c @@ -0,0 +1,245 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_binding_commons_t +{ + rp_algorithmsuite_t *algorithmsuite; + axis2_bool_t include_timestamp; + rp_layout_t *layout; + rp_supporting_tokens_t *signed_supporting_tokens; + rp_supporting_tokens_t *signed_endorsing_supporting_tokens; + rp_supporting_tokens_t *endorsing_supporting_tokens; + rp_supporting_tokens_t *supporting_tokens; +}; + +AXIS2_EXTERN rp_binding_commons_t *AXIS2_CALL +rp_binding_commons_create( + const axutil_env_t *env) +{ + rp_binding_commons_t *binding_commons = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + binding_commons = (rp_binding_commons_t *)AXIS2_MALLOC(env->allocator, + sizeof(rp_binding_commons_t)); + + if(binding_commons == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + binding_commons->algorithmsuite = NULL; + binding_commons->include_timestamp = AXIS2_FALSE; + binding_commons->layout = NULL; + binding_commons->signed_supporting_tokens = NULL; + binding_commons->signed_endorsing_supporting_tokens = NULL; + binding_commons->endorsing_supporting_tokens = NULL; + binding_commons->supporting_tokens = NULL; + + return binding_commons; + +} + +AXIS2_EXTERN void AXIS2_CALL +rp_binding_commons_free( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env) +{ + if(binding_commons) + { + if(binding_commons->algorithmsuite) + { + rp_algorithmsuite_free(binding_commons->algorithmsuite, env); + binding_commons->algorithmsuite = NULL; + } + if(binding_commons->layout) + { + rp_layout_free(binding_commons->layout, env); + binding_commons->layout = NULL; + } + if(binding_commons->signed_supporting_tokens) + { + rp_supporting_tokens_free(binding_commons->signed_supporting_tokens, env); + binding_commons->signed_supporting_tokens = NULL; + } + if(binding_commons->signed_endorsing_supporting_tokens) + { + rp_supporting_tokens_free(binding_commons-> signed_endorsing_supporting_tokens, env); + binding_commons->signed_endorsing_supporting_tokens = NULL; + } + if(binding_commons->endorsing_supporting_tokens) + { + rp_supporting_tokens_free(binding_commons-> endorsing_supporting_tokens, env); + binding_commons->endorsing_supporting_tokens = NULL; + } + if(binding_commons->supporting_tokens) + { + rp_supporting_tokens_free(binding_commons->supporting_tokens, env); + binding_commons->supporting_tokens = NULL; + } + AXIS2_FREE(env->allocator, binding_commons); + binding_commons = NULL; + + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_binding_commons_get_include_timestamp( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env) +{ + return binding_commons->include_timestamp; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_binding_commons_set_include_timestamp( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env, + axis2_bool_t include_timestamp) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, include_timestamp, AXIS2_FAILURE); + + binding_commons->include_timestamp = include_timestamp; + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN rp_algorithmsuite_t *AXIS2_CALL +rp_binding_commons_get_algorithmsuite( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env) +{ + return binding_commons->algorithmsuite; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_binding_commons_set_algorithmsuite( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env, + rp_algorithmsuite_t *algorithmsuite) +{ + AXIS2_PARAM_CHECK(env->error, algorithmsuite, AXIS2_FAILURE); + + rp_algorithmsuite_increment_ref(algorithmsuite, env); + binding_commons->algorithmsuite = algorithmsuite; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_layout_t *AXIS2_CALL +rp_binding_commons_get_layout( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env) +{ + return binding_commons->layout; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_binding_commons_set_layout( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env, + rp_layout_t *layout) +{ + AXIS2_PARAM_CHECK(env->error, layout, AXIS2_FAILURE); + rp_layout_increment_ref(layout, env); + binding_commons->layout = layout; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL +rp_binding_commons_get_signed_supporting_tokens( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env) +{ + return binding_commons->signed_supporting_tokens; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_binding_commons_set_signed_supporting_tokens( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env, + rp_supporting_tokens_t *signed_supporting_tokens) +{ + AXIS2_PARAM_CHECK(env->error, signed_supporting_tokens, AXIS2_FAILURE); + binding_commons->signed_supporting_tokens = signed_supporting_tokens; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL +rp_binding_commons_get_signed_endorsing_supporting_tokens( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env) +{ + return binding_commons->signed_endorsing_supporting_tokens; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_binding_commons_set_signed_endorsing_supporting_tokens( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env, + rp_supporting_tokens_t *signed_endorsing_supporting_tokens) +{ + AXIS2_PARAM_CHECK(env->error, signed_endorsing_supporting_tokens, AXIS2_FAILURE); + + binding_commons->signed_endorsing_supporting_tokens = signed_endorsing_supporting_tokens; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL +rp_binding_commons_get_endorsing_supporting_tokens( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env) +{ + return binding_commons->endorsing_supporting_tokens; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_binding_commons_set_endorsing_supporting_tokens( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env, + rp_supporting_tokens_t *endorsing_supporting_tokens) +{ + AXIS2_PARAM_CHECK(env->error, endorsing_supporting_tokens, AXIS2_FAILURE); + binding_commons->endorsing_supporting_tokens = endorsing_supporting_tokens; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL +rp_binding_commons_get_supporting_tokens( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env) +{ + return binding_commons->supporting_tokens; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_binding_commons_set_supporting_tokens( + rp_binding_commons_t *binding_commons, + const axutil_env_t *env, + rp_supporting_tokens_t *supporting_tokens) +{ + AXIS2_PARAM_CHECK(env->error, supporting_tokens, AXIS2_FAILURE); + binding_commons->supporting_tokens = supporting_tokens; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/element.c b/neethi/src/secpolicy/model/element.c new file mode 100644 index 0000000..125fef3 --- /dev/null +++ b/neethi/src/secpolicy/model/element.c @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_element_t +{ + axis2_char_t *name; + axis2_char_t *nspace; +}; + +AXIS2_EXTERN rp_element_t *AXIS2_CALL +rp_element_create( + const axutil_env_t * env) +{ + rp_element_t *element = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + element = (rp_element_t *)AXIS2_MALLOC(env->allocator, sizeof(rp_element_t)); + + if(element == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + element->name = NULL; + element->nspace = NULL; + + return element; + +} + +AXIS2_EXTERN void AXIS2_CALL +rp_element_free( + rp_element_t * element, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(element) + { + AXIS2_FREE(env->allocator, element); + element = NULL; + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_element_get_name( + rp_element_t * element, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return element->name; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_element_set_name( + rp_element_t * element, + const axutil_env_t * env, + axis2_char_t * name) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, name, AXIS2_FAILURE); + + element->name = name; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_element_get_namespace( + rp_element_t * element, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return element->nspace; + +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_element_set_namespace( + rp_element_t * element, + const axutil_env_t * env, + axis2_char_t * nspace) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, nspace, AXIS2_FAILURE); + + element->nspace = nspace; + + return AXIS2_SUCCESS; + +} diff --git a/neethi/src/secpolicy/model/header.c b/neethi/src/secpolicy/model/header.c new file mode 100644 index 0000000..9aab978 --- /dev/null +++ b/neethi/src/secpolicy/model/header.c @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_header_t +{ + axis2_char_t *name; + axis2_char_t *nspace; +}; + +AXIS2_EXTERN rp_header_t *AXIS2_CALL +rp_header_create( + const axutil_env_t * env) +{ + rp_header_t *header = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + header = (rp_header_t *)AXIS2_MALLOC(env->allocator, sizeof(rp_header_t)); + + if(header == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + header->name = NULL; + header->nspace = NULL; + + return header; + +} + +AXIS2_EXTERN void AXIS2_CALL +rp_header_free( + rp_header_t * header, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(header) + { + if(header->name) + { + AXIS2_FREE(env->allocator, header->name); + header->name = NULL; + } + if(header->nspace) + { + AXIS2_FREE(env->allocator, header->nspace); + header->nspace = NULL; + } + + AXIS2_FREE(env->allocator, header); + header = NULL; + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_header_get_name( + rp_header_t * header, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return header->name; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_header_set_name( + rp_header_t * header, + const axutil_env_t * env, + axis2_char_t * name) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, name, AXIS2_FAILURE); + + header->name = axutil_strdup(env, name); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_header_get_namespace( + rp_header_t * header, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return header->nspace; + +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_header_set_namespace( + rp_header_t * header, + const axutil_env_t * env, + axis2_char_t * nspace) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, nspace, AXIS2_FAILURE); + + header->nspace = axutil_strdup(env, nspace); + + return AXIS2_SUCCESS; + +} diff --git a/neethi/src/secpolicy/model/https_token.c b/neethi/src/secpolicy/model/https_token.c new file mode 100644 index 0000000..100af45 --- /dev/null +++ b/neethi/src/secpolicy/model/https_token.c @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_https_token_t +{ + axis2_char_t *inclusion; + axis2_bool_t derivedkeys; + axis2_bool_t require_client_certificate; + int ref; +}; + +AXIS2_EXTERN rp_https_token_t *AXIS2_CALL +rp_https_token_create( + const axutil_env_t * env) +{ + rp_https_token_t *https_token = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + https_token = (rp_https_token_t *)AXIS2_MALLOC(env->allocator, sizeof(rp_https_token_t)); + + if(https_token == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + https_token->inclusion = RP_INCLUDE_ALWAYS; + https_token->derivedkeys = AXIS2_FALSE; + https_token->require_client_certificate = AXIS2_FALSE; + https_token->ref = 0; + + return https_token; + +} + +AXIS2_EXTERN void AXIS2_CALL +rp_https_token_free( + rp_https_token_t * https_token, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(https_token) + { + if(--(https_token->ref) > 0) + { + return; + } + AXIS2_FREE(env->allocator, https_token); + https_token = NULL; + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_https_token_get_inclusion( + rp_https_token_t * https_token, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return https_token->inclusion; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_https_token_set_inclusion( + rp_https_token_t * https_token, + const axutil_env_t * env, + axis2_char_t * inclusion) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, inclusion, AXIS2_FAILURE); + + https_token->inclusion = inclusion; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_https_token_get_derivedkeys( + rp_https_token_t * https_token, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return https_token->derivedkeys; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_https_token_set_derivedkeys( + rp_https_token_t * https_token, + const axutil_env_t * env, + axis2_bool_t derivedkeys) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, derivedkeys, AXIS2_FAILURE); + + https_token->derivedkeys = derivedkeys; + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_https_token_get_require_client_certificate( + rp_https_token_t * https_token, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return https_token->require_client_certificate; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_https_token_set_require_client_certificate( + rp_https_token_t * https_token, + const axutil_env_t * env, + axis2_bool_t require_client_certificate) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, require_client_certificate, AXIS2_FAILURE) + https_token->require_client_certificate = require_client_certificate; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_https_token_increment_ref( + rp_https_token_t * https_token, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + https_token->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/issued_token.c b/neethi/src/secpolicy/model/issued_token.c new file mode 100644 index 0000000..00948f2 --- /dev/null +++ b/neethi/src/secpolicy/model/issued_token.c @@ -0,0 +1,211 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_issued_token +{ + axis2_char_t *inclusion; + axiom_node_t *issuer_epr; + axiom_node_t *requested_sec_token_template; + axis2_bool_t derivedkeys; + axis2_bool_t require_external_reference; + axis2_bool_t require_internal_reference; + int ref; +}; + +AXIS2_EXTERN rp_issued_token_t * AXIS2_CALL +rp_issued_token_create( + const axutil_env_t *env) +{ + rp_issued_token_t *issued_token = NULL; + + issued_token = (rp_issued_token_t*)AXIS2_MALLOC(env->allocator, sizeof(rp_issued_token_t)); + + if(issued_token == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + issued_token->inclusion = NULL; + issued_token->issuer_epr = NULL; + issued_token->requested_sec_token_template = NULL; + issued_token->derivedkeys = AXIS2_FALSE; + issued_token->require_external_reference = AXIS2_FALSE; + issued_token->require_internal_reference = AXIS2_FALSE; + issued_token->ref = 0; + + return issued_token; +} + +AXIS2_EXTERN void AXIS2_CALL +rp_issued_token_free( + rp_issued_token_t *issued_token, + const axutil_env_t *env) +{ + if(issued_token) + { + if(--(issued_token->ref) > 0) + { + return; + } + + AXIS2_FREE(env->allocator, issued_token); + issued_token = NULL; + } + return; +} + +AXIS2_EXTERN axis2_char_t * AXIS2_CALL +rp_issued_token_get_inclusion( + rp_issued_token_t *issued_token, + const axutil_env_t *env) +{ + return issued_token->inclusion; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_issued_token_set_inclusion( + rp_issued_token_t *issued_token, + const axutil_env_t *env, + axis2_char_t *inclusion) +{ + if(inclusion) + { + issued_token->inclusion = inclusion; + return AXIS2_SUCCESS; + } + + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axiom_node_t * AXIS2_CALL +rp_issued_token_get_issuer_epr( + rp_issued_token_t *issued_token, + const axutil_env_t *env) +{ + return issued_token->issuer_epr; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_issued_token_set_issuer_epr( + rp_issued_token_t *issued_token, + const axutil_env_t *env, + axiom_node_t *issuer_epr) +{ + if(issuer_epr) + { + issued_token->issuer_epr = issuer_epr; + return AXIS2_SUCCESS; + } + + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axiom_node_t * AXIS2_CALL +rp_issued_token_get_requested_sec_token_template( + rp_issued_token_t *issued_token, + const axutil_env_t *env) +{ + return issued_token->requested_sec_token_template; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_issued_token_set_requested_sec_token_template( + rp_issued_token_t *issued_token, + const axutil_env_t *env, + axiom_node_t *req_sec_token_template) +{ + if(req_sec_token_template) + { + issued_token->requested_sec_token_template = req_sec_token_template; + return AXIS2_SUCCESS; + } + + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_issued_token_get_derivedkeys( + rp_issued_token_t *issued_token, + const axutil_env_t *env) +{ + return issued_token->derivedkeys; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_issued_token_set_derivedkeys( + rp_issued_token_t *issued_token, + const axutil_env_t *env, + axis2_bool_t derivedkeys) +{ + AXIS2_PARAM_CHECK(env->error, derivedkeys, AXIS2_FAILURE); + issued_token->derivedkeys = derivedkeys; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_issued_token_get_require_external_reference( + rp_issued_token_t *issued_token, + const axutil_env_t *env) +{ + return issued_token->require_external_reference; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_issued_token_set_require_exernal_reference( + rp_issued_token_t *issued_token, + const axutil_env_t *env, + axis2_bool_t require_external_reference) +{ + AXIS2_PARAM_CHECK(env->error, require_external_reference, AXIS2_FAILURE); + issued_token->require_external_reference = require_external_reference; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_issued_token_get_require_internal_reference( + rp_issued_token_t *issued_token, + const axutil_env_t *env) +{ + return issued_token->require_internal_reference; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_issued_token_set_require_internal_reference( + rp_issued_token_t *issued_token, + const axutil_env_t *env, + axis2_bool_t require_internal_reference) +{ + AXIS2_PARAM_CHECK(env->error, require_internal_reference, AXIS2_FAILURE); + issued_token->require_internal_reference = require_internal_reference; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_issued_token_increment_ref( + rp_issued_token_t *issued_token, + const axutil_env_t *env) +{ + issued_token->ref++; + return AXIS2_SUCCESS; +} + diff --git a/neethi/src/secpolicy/model/layout.c b/neethi/src/secpolicy/model/layout.c new file mode 100644 index 0000000..b4591c4 --- /dev/null +++ b/neethi/src/secpolicy/model/layout.c @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_layout_t +{ + axis2_char_t *value; + int ref; +}; + +AXIS2_EXTERN rp_layout_t *AXIS2_CALL +rp_layout_create( + const axutil_env_t * env) +{ + rp_layout_t *layout = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + layout = (rp_layout_t *)AXIS2_MALLOC(env->allocator, sizeof(rp_layout_t)); + + if(layout == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + layout->value = RP_LAYOUT_STRICT; + layout->ref = 0; + return layout; + +} + +AXIS2_EXTERN void AXIS2_CALL +rp_layout_free( + rp_layout_t * layout, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(layout) + { + if(--(layout->ref) > 0) + { + return; + } + AXIS2_FREE(env->allocator, layout); + layout = NULL; + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_layout_get_value( + rp_layout_t * layout, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return layout->value; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_layout_set_value( + rp_layout_t * layout, + const axutil_env_t * env, + axis2_char_t * value) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + + layout->value = value; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_layout_increment_ref( + rp_layout_t * layout, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + layout->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/property.c b/neethi/src/secpolicy/model/property.c new file mode 100644 index 0000000..a8d806c --- /dev/null +++ b/neethi/src/secpolicy/model/property.c @@ -0,0 +1,265 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +struct rp_property_t +{ + rp_property_type_t type; + void *value; + int ref; +}; + +AXIS2_EXTERN rp_property_t *AXIS2_CALL +rp_property_create( + const axutil_env_t * env) +{ + rp_property_t *property = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + property = (rp_property_t *)AXIS2_MALLOC(env->allocator, sizeof(rp_property_t)); + + if(property == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + property->type = RP_PROPERTY_UNKNOWN; + property->value = NULL; + property->ref = 0; + + return property; +} + +AXIS2_EXTERN void AXIS2_CALL +rp_property_free( + rp_property_t * property, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(property) + { + if(--(property->ref) > 0) + { + return; + } + + if(property->value) + { + switch(property->type) + { + case RP_PROPERTY_USERNAME_TOKEN: + rp_username_token_free((rp_username_token_t *)property->value, env); + property->value = NULL; + break; + + case RP_PROPERTY_X509_TOKEN: + rp_x509_token_free((rp_x509_token_t *)property->value, env); + property->value = NULL; + break; + + case RP_PROPERTY_ISSUED_TOKEN: + rp_issued_token_free((rp_issued_token_t *)property->value, env); + property->value = NULL; + break; + + case RP_PROPERTY_SAML_TOKEN: + rp_saml_token_free((rp_saml_token_t *)property->value, env); + property->value = NULL; + break; + + case RP_PROPERTY_SECURITY_CONTEXT_TOKEN: + rp_security_context_token_free((rp_security_context_token_t *)property->value, + env); + property->value = NULL; + break; + + case RP_PROPERTY_HTTPS_TOKEN: + rp_https_token_free((rp_https_token_t *)property->value, env); + property->value = NULL; + break; + + case RP_PROPERTY_SYMMETRIC_BINDING: + rp_symmetric_binding_free((rp_symmetric_binding_t *)property-> value, env); + property->value = NULL; + break; + + case RP_PROPERTY_ASYMMETRIC_BINDING: + rp_asymmetric_binding_free((rp_asymmetric_binding_t *)property->value, env); + property->value = NULL; + break; + + case RP_PROPERTY_TRANSPORT_BINDING: + rp_transport_binding_free((rp_transport_binding_t *)property-> value, env); + property->value = NULL; + break; + + case RP_PROPERTY_SIGNED_SUPPORTING_TOKEN: + rp_supporting_tokens_free((rp_supporting_tokens_t *)property-> value, env); + property->value = NULL; + break; + + case RP_PROPERTY_SIGNED_ENDORSING_SUPPORTING_TOKEN: + rp_supporting_tokens_free((rp_supporting_tokens_t *)property-> value, env); + property->value = NULL; + break; + + case RP_PROPERTY_SUPPORTING_SUPPORTING_TOKEN: + rp_supporting_tokens_free((rp_supporting_tokens_t *)property-> value, env); + property->value = NULL; + break; + + case RP_PROPERTY_ENDORSING_SUPPORTING_TOKEN: + rp_supporting_tokens_free((rp_supporting_tokens_t *)property-> value, env); + property->value = NULL; + break; + + case RP_PROPERTY_SUPPORTING_TOKEN: + rp_supporting_tokens_free((rp_supporting_tokens_t *)property-> value, env); + property->value = NULL; + break; + + case RP_PROPERTY_WSS10: + rp_wss10_free((rp_wss10_t *)property->value, env); + property->value = NULL; + break; + + case RP_PROPERTY_WSS11: + rp_wss11_free((rp_wss11_t *)property->value, env); + property->value = NULL; + break; + + case RP_PROPERTY_UNKNOWN: + break; + } + } + AXIS2_FREE(env->allocator, property); + } + + return; +} + +/* Implementations */ +AXIS2_EXTERN void *AXIS2_CALL +rp_property_get_value( + rp_property_t * property, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return property->value; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_property_set_value( + rp_property_t * property, + const axutil_env_t * env, + void *value, + rp_property_type_t type) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + + property->type = type; + + if(type == RP_PROPERTY_X509_TOKEN) + { + rp_x509_token_increment_ref((rp_x509_token_t *)value, env); + } + else if(type == RP_PROPERTY_SECURITY_CONTEXT_TOKEN) + { + rp_security_context_token_increment_ref((rp_security_context_token_t *)value, env); + } + else if(type == RP_PROPERTY_WSS10) + { + rp_wss10_increment_ref((rp_wss10_t *)value, env); + } + else if(type == RP_PROPERTY_WSS11) + { + rp_wss11_increment_ref((rp_wss11_t *)value, env); + } + else if(type == RP_PROPERTY_USERNAME_TOKEN) + { + rp_username_token_increment_ref((rp_username_token_t *)value, env); + } + + else if(type == RP_PROPERTY_HTTPS_TOKEN) + { + rp_https_token_increment_ref((rp_https_token_t *)value, env); + } + + else if(type == RP_PROPERTY_SIGNED_SUPPORTING_TOKEN) + { + rp_supporting_tokens_increment_ref((rp_supporting_tokens_t *)value, env); + } + else if(type == RP_PROPERTY_SUPPORTING_SUPPORTING_TOKEN) + { + rp_supporting_tokens_increment_ref((rp_supporting_tokens_t *)value, env); + } + else if(type == RP_PROPERTY_SIGNED_ENDORSING_SUPPORTING_TOKEN) + { + rp_supporting_tokens_increment_ref((rp_supporting_tokens_t *)value, env); + } + else if(type == RP_PROPERTY_ENDORSING_SUPPORTING_TOKEN) + { + rp_supporting_tokens_increment_ref((rp_supporting_tokens_t *)value, env); + } + else if(type == RP_PROPERTY_ASYMMETRIC_BINDING) + { + rp_asymmetric_binding_increment_ref((rp_asymmetric_binding_t *)value, env); + } + else if(type == RP_PROPERTY_TRANSPORT_BINDING) + { + rp_transport_binding_increment_ref((rp_transport_binding_t *)value, env); + } + else if(type == RP_PROPERTY_SYMMETRIC_BINDING) + { + rp_symmetric_binding_increment_ref((rp_symmetric_binding_t *)value, env); + } + property->value = (void *)value; + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN rp_property_type_t AXIS2_CALL +rp_property_get_type( + rp_property_t * property, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return property->type; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_property_increment_ref( + rp_property_t * property, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + property->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/rampart_config.c b/neethi/src/secpolicy/model/rampart_config.c new file mode 100644 index 0000000..ba8bebd --- /dev/null +++ b/neethi/src/secpolicy/model/rampart_config.c @@ -0,0 +1,446 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_rampart_config_t +{ + axis2_char_t *user; + axis2_char_t *encryption_user; + axis2_char_t *password_callback_class; + axis2_char_t *authenticate_module; + axis2_char_t *replay_detector; + axis2_char_t *sct_provider; + axis2_char_t *password_type; + axis2_char_t *time_to_live; + axis2_char_t *clock_skew_buffer; + axis2_char_t *need_millisecond_precision; + axis2_char_t *receiver_certificate_file; + axis2_char_t *certificate_file; + axis2_char_t *private_key_file; + axis2_char_t *pkcs12_file; + axis2_char_t *rd_val; + int ref; +}; + +AXIS2_EXTERN rp_rampart_config_t *AXIS2_CALL +rp_rampart_config_create( + const axutil_env_t * env) +{ + rp_rampart_config_t *rampart_config = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + rampart_config = (rp_rampart_config_t *)AXIS2_MALLOC(env->allocator, + sizeof(rp_rampart_config_t)); + + if(rampart_config == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + rampart_config->user = NULL; + rampart_config->encryption_user = NULL; + rampart_config->password_callback_class = NULL; + rampart_config->private_key_file = NULL; + rampart_config->receiver_certificate_file = NULL; + rampart_config->certificate_file = NULL; + rampart_config->authenticate_module = NULL; + rampart_config->replay_detector = NULL; + rampart_config->sct_provider = NULL; + rampart_config->password_type = NULL; + rampart_config->time_to_live = NULL; + rampart_config->clock_skew_buffer = NULL; + rampart_config->need_millisecond_precision = NULL; + rampart_config->pkcs12_file = NULL; + rampart_config->rd_val = NULL; + rampart_config->ref = 0; + + return rampart_config; +} + +AXIS2_EXTERN void AXIS2_CALL +rp_rampart_config_free( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(rampart_config) + { + if(--(rampart_config->ref) > 0) + { + return; + } + + AXIS2_FREE(env->allocator, rampart_config); + rampart_config = NULL; + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_user( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return rampart_config->user; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_user( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * user) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, user, AXIS2_FAILURE); + + rampart_config->user = user; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_encryption_user( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return rampart_config->encryption_user; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_encryption_user( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * encryption_user) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, encryption_user, AXIS2_FAILURE); + + rampart_config->encryption_user = encryption_user; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_password_callback_class( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return rampart_config->password_callback_class; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_password_callback_class( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * password_callback_class) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, password_callback_class, AXIS2_FAILURE); + + rampart_config->password_callback_class = password_callback_class; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_authenticate_module( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return rampart_config->authenticate_module; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_authenticate_module( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * authenticate_module) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, authenticate_module, AXIS2_FAILURE); + + rampart_config->authenticate_module = authenticate_module; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_replay_detector( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return rampart_config->replay_detector; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_replay_detector( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * replay_detector) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, replay_detector, AXIS2_FAILURE); + + rampart_config->replay_detector = replay_detector; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_sct_provider( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return rampart_config->sct_provider; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_sct_provider( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * sct_module) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, sct_module, AXIS2_FAILURE); + + rampart_config->sct_provider = sct_module; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_password_type( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return rampart_config->password_type; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_password_type( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * password_type) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, password_type, AXIS2_FAILURE); + + rampart_config->password_type = password_type; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_private_key_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return rampart_config->private_key_file; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_private_key_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * private_key_file) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, private_key_file, AXIS2_FAILURE); + + rampart_config->private_key_file = private_key_file; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_receiver_certificate_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return rampart_config->receiver_certificate_file; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_receiver_certificate_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * receiver_certificate_file) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, receiver_certificate_file, AXIS2_FAILURE); + + rampart_config->receiver_certificate_file = receiver_certificate_file; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_certificate_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return rampart_config->certificate_file; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_certificate_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * certificate_file) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, certificate_file, AXIS2_FAILURE); + + rampart_config->certificate_file = certificate_file; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_time_to_live( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return rampart_config->time_to_live; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_time_to_live( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * time_to_live) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, time_to_live, AXIS2_FAILURE); + + rampart_config->time_to_live = time_to_live; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_clock_skew_buffer( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + return rampart_config->clock_skew_buffer; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_clock_skew_buffer( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * clock_skew_buffer) +{ + rampart_config->clock_skew_buffer = clock_skew_buffer; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_need_millisecond_precision( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + return rampart_config->need_millisecond_precision; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_need_millisecond_precision( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * need_millisecond_precision) +{ + rampart_config->need_millisecond_precision = need_millisecond_precision; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_pkcs12_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + return rampart_config->pkcs12_file; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_pkcs12_file( + rp_rampart_config_t * rampart_config, + const axutil_env_t *env, + axis2_char_t * pkcs12_file) +{ + if(rampart_config) + { + if(pkcs12_file) + { + rampart_config->pkcs12_file = pkcs12_file; + return AXIS2_SUCCESS; + } + + return AXIS2_FAILURE; + } + + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_rampart_config_get_rd_val( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return rampart_config->rd_val; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_set_rd_val( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env, + axis2_char_t * rd_val) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, rd_val, AXIS2_FAILURE); + + rampart_config->rd_val = rd_val; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_rampart_config_increment_ref( + rp_rampart_config_t * rampart_config, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + rampart_config->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/saml_token.c b/neethi/src/secpolicy/model/saml_token.c new file mode 100644 index 0000000..ae0f1ea --- /dev/null +++ b/neethi/src/secpolicy/model/saml_token.c @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_saml_token +{ + axis2_char_t *inclusion; + axis2_bool_t derivedkeys; + axis2_bool_t require_key_identifier_reference; + axis2_char_t *token_version_and_type; + int ref; +}; + +AXIS2_EXTERN rp_saml_token_t * AXIS2_CALL +rp_saml_token_create( + const axutil_env_t *env) +{ + rp_saml_token_t * saml_token; + + saml_token = (rp_saml_token_t*)AXIS2_MALLOC(env->allocator, sizeof(rp_saml_token_t)); + + if(saml_token == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + saml_token->inclusion = NULL; + saml_token->derivedkeys = AXIS2_FALSE; + saml_token->require_key_identifier_reference = AXIS2_FALSE; + saml_token->token_version_and_type = NULL; + saml_token->ref = 0; + + return saml_token; +} + +AXIS2_EXTERN void AXIS2_CALL +rp_saml_token_free( + rp_saml_token_t *saml_token, + const axutil_env_t *env) +{ + if(saml_token) + { + if(--(saml_token->ref) > 0) + { + return; + } + + AXIS2_FREE(env->allocator, saml_token); + saml_token = NULL; + } + + return; +} + +AXIS2_EXTERN axis2_char_t * AXIS2_CALL +rp_saml_token_get_inclusion( + rp_saml_token_t *saml_token, + const axutil_env_t *env) +{ + return saml_token->inclusion; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_saml_token_set_inclusion( + rp_saml_token_t *saml_token, + const axutil_env_t *env, + axis2_char_t * inclusion) +{ + AXIS2_PARAM_CHECK(env->error, inclusion, AXIS2_FAILURE); + saml_token->inclusion = inclusion; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_saml_token_get_derivedkeys( + rp_saml_token_t *saml_token, + const axutil_env_t *env) +{ + return saml_token->derivedkeys; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_saml_token_set_derivedkeys( + rp_saml_token_t *saml_token, + const axutil_env_t *env, + axis2_bool_t derivedkeys) +{ + AXIS2_PARAM_CHECK(env->error, derivedkeys, AXIS2_FAILURE); + saml_token->derivedkeys = derivedkeys; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_saml_token_get_require_key_identifier_reference( + rp_saml_token_t * saml_token, + const axutil_env_t * env) +{ + return saml_token->require_key_identifier_reference; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_saml_token_set_require_key_identifier_reference( + rp_saml_token_t * saml_token, + const axutil_env_t * env, + axis2_bool_t require_key_identifier_reference) +{ + AXIS2_PARAM_CHECK(env->error, require_key_identifier_reference, AXIS2_FAILURE); + saml_token->require_key_identifier_reference = require_key_identifier_reference; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_saml_token_get_token_version_and_type( + rp_saml_token_t * saml_token, + const axutil_env_t * env) +{ + return saml_token->token_version_and_type; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_saml_token_set_token_version_and_type( + rp_saml_token_t * saml_token, + const axutil_env_t * env, + axis2_char_t * token_version_and_type) +{ + AXIS2_PARAM_CHECK(env->error, token_version_and_type, AXIS2_FAILURE); + + saml_token->token_version_and_type = token_version_and_type; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_saml_token_increment_ref( + rp_saml_token_t * saml_token, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + saml_token->ref++; + return AXIS2_SUCCESS; +} + diff --git a/neethi/src/secpolicy/model/secpolicy.c b/neethi/src/secpolicy/model/secpolicy.c new file mode 100644 index 0000000..fdd112c --- /dev/null +++ b/neethi/src/secpolicy/model/secpolicy.c @@ -0,0 +1,493 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_secpolicy_t +{ + rp_property_t *binding; + rp_property_t *wss; + rp_trust10_t *trust10; + rp_supporting_tokens_t *supporting_tokens; + rp_supporting_tokens_t *signed_supporting_tokens; + rp_supporting_tokens_t *endorsing_supporting_tokens; + rp_supporting_tokens_t *signed_endorsing_supporting_tokens; + rp_signed_encrypted_parts_t *signed_parts; + rp_signed_encrypted_parts_t *encrypted_parts; + rp_signed_encrypted_elements_t *signed_elements; + rp_signed_encrypted_elements_t *encrypted_elements; + rp_signed_encrypted_items_t *signed_items; + rp_signed_encrypted_items_t *encrypted_items; + rp_rampart_config_t *rampart_config; + +}; + +AXIS2_EXTERN rp_secpolicy_t *AXIS2_CALL +rp_secpolicy_create( + const axutil_env_t * env) +{ + rp_secpolicy_t *secpolicy = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + secpolicy = (rp_secpolicy_t *)AXIS2_MALLOC(env->allocator, sizeof(rp_secpolicy_t)); + + if(secpolicy == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + secpolicy->binding = NULL; + secpolicy->wss = NULL; + secpolicy->trust10 = NULL; + secpolicy->supporting_tokens = NULL; + secpolicy->signed_supporting_tokens = NULL; + secpolicy->endorsing_supporting_tokens = NULL; + secpolicy->signed_endorsing_supporting_tokens = NULL; + secpolicy->signed_parts = NULL; + secpolicy->encrypted_parts = NULL; + secpolicy->signed_elements = NULL; + secpolicy->encrypted_elements = NULL; + secpolicy->signed_items = NULL; + secpolicy->encrypted_items = NULL; + secpolicy->rampart_config = NULL; + + return secpolicy; +} + +AXIS2_EXTERN void AXIS2_CALL +rp_secpolicy_free( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(secpolicy) + { + if(secpolicy->binding) + { + rp_property_free(secpolicy->binding, env); + secpolicy->binding = NULL; + } + if(secpolicy->wss) + { + rp_property_free(secpolicy->wss, env); + secpolicy->wss = NULL; + } + if(secpolicy->trust10) + { + rp_trust10_free(secpolicy->trust10, env); + secpolicy->trust10 = NULL; + } + if(secpolicy->supporting_tokens) + { + rp_supporting_tokens_free(secpolicy->supporting_tokens, env); + secpolicy->supporting_tokens = NULL; + } + if(secpolicy->signed_supporting_tokens) + { + rp_supporting_tokens_free(secpolicy->signed_supporting_tokens, env); + secpolicy->signed_supporting_tokens = NULL; + } + if(secpolicy->endorsing_supporting_tokens) + { + rp_supporting_tokens_free(secpolicy->endorsing_supporting_tokens, env); + secpolicy->endorsing_supporting_tokens = NULL; + } + if(secpolicy->signed_endorsing_supporting_tokens) + { + rp_supporting_tokens_free(secpolicy-> signed_endorsing_supporting_tokens, env); + secpolicy->signed_endorsing_supporting_tokens = NULL; + } + if(secpolicy->signed_parts) + { + rp_signed_encrypted_parts_free(secpolicy->signed_parts, env); + secpolicy->signed_parts = NULL; + } + if(secpolicy->encrypted_parts) + { + rp_signed_encrypted_parts_free(secpolicy->encrypted_parts, env); + secpolicy->encrypted_parts = NULL; + } + if(secpolicy->signed_elements) + { + rp_signed_encrypted_elements_free(secpolicy->signed_elements, env); + secpolicy->signed_elements = NULL; + } + if(secpolicy->encrypted_elements) + { + rp_signed_encrypted_elements_free(secpolicy->encrypted_elements, env); + secpolicy->encrypted_elements = NULL; + } + if(secpolicy->signed_items) + { + rp_signed_encrypted_items_free(secpolicy->signed_items, env); + secpolicy->signed_items = NULL; + } + if(secpolicy->encrypted_items) + { + rp_signed_encrypted_items_free(secpolicy->encrypted_items, env); + secpolicy->encrypted_items = NULL; + } + if(secpolicy->rampart_config) + { + rp_rampart_config_free(secpolicy->rampart_config, env); + secpolicy->rampart_config = NULL; + } + AXIS2_FREE(env->allocator, secpolicy); + } + + return; +} + +/* Implementations */ +AXIS2_EXTERN rp_property_t *AXIS2_CALL +rp_secpolicy_get_binding( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return secpolicy->binding; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_secpolicy_set_binding( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_property_t * binding) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, binding, AXIS2_FAILURE); + rp_property_increment_ref(binding, env); + secpolicy->binding = binding; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_secpolicy_set_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_supporting_tokens_t * supporting_tokens) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, supporting_tokens, AXIS2_FAILURE); + + rp_supporting_tokens_increment_ref(supporting_tokens, env); + secpolicy->supporting_tokens = supporting_tokens; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL +rp_secpolicy_get_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return secpolicy->supporting_tokens; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_secpolicy_set_signed_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_supporting_tokens_t * signed_supporting_tokens) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, signed_supporting_tokens, AXIS2_FAILURE); + + rp_supporting_tokens_increment_ref(signed_supporting_tokens, env); + secpolicy->signed_supporting_tokens = signed_supporting_tokens; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL +rp_secpolicy_get_signed_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return secpolicy->signed_supporting_tokens; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_secpolicy_set_endorsing_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_supporting_tokens_t * endorsing_supporting_tokens) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, endorsing_supporting_tokens, AXIS2_FAILURE); + + rp_supporting_tokens_increment_ref(endorsing_supporting_tokens, env); + secpolicy->endorsing_supporting_tokens = endorsing_supporting_tokens; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL +rp_secpolicy_get_endorsing_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return secpolicy->endorsing_supporting_tokens; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_secpolicy_set_signed_endorsing_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_supporting_tokens_t * signed_endorsing_supporting_tokens) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, signed_endorsing_supporting_tokens, AXIS2_FAILURE); + + rp_supporting_tokens_increment_ref(signed_endorsing_supporting_tokens, env); + secpolicy->signed_endorsing_supporting_tokens = signed_endorsing_supporting_tokens; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL +rp_secpolicy_get_signed_endorsing_supporting_tokens( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return secpolicy->signed_endorsing_supporting_tokens; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_secpolicy_set_signed_parts( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_signed_encrypted_parts_t * signed_parts) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, signed_parts, AXIS2_FAILURE); + rp_signed_encrypted_parts_increment_ref(signed_parts, env); + secpolicy->signed_parts = signed_parts; + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN rp_signed_encrypted_parts_t *AXIS2_CALL +rp_secpolicy_get_signed_parts( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return secpolicy->signed_parts; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_secpolicy_set_encrypted_parts( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_signed_encrypted_parts_t * encrypted_parts) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, encrypted_parts, AXIS2_FAILURE); + + rp_signed_encrypted_parts_increment_ref(encrypted_parts, env); + secpolicy->encrypted_parts = encrypted_parts; + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN rp_signed_encrypted_parts_t *AXIS2_CALL +rp_secpolicy_get_encrypted_parts( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return secpolicy->encrypted_parts; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_secpolicy_set_signed_elements( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_signed_encrypted_elements_t * signed_elements) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, signed_elements, AXIS2_FAILURE); + + rp_signed_encrypted_elements_increment_ref(signed_elements, env); + secpolicy->signed_elements = signed_elements; + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN rp_signed_encrypted_elements_t *AXIS2_CALL +rp_secpolicy_get_signed_elements( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return secpolicy->signed_elements; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_secpolicy_set_encrypted_elements( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_signed_encrypted_elements_t * encrypted_elements) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, encrypted_elements, AXIS2_FAILURE); + + rp_signed_encrypted_elements_increment_ref(encrypted_elements, env); + secpolicy->encrypted_elements = encrypted_elements; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_signed_encrypted_elements_t *AXIS2_CALL +rp_secpolicy_get_encrypted_elements( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return secpolicy->encrypted_elements; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_secpolicy_set_signed_items( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_signed_encrypted_items_t * signed_items) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, signed_items, AXIS2_FAILURE); + + secpolicy->signed_items = signed_items; + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN rp_signed_encrypted_items_t *AXIS2_CALL +rp_secpolicy_get_signed_items( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return secpolicy->signed_items; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_secpolicy_set_encrypted_items( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_signed_encrypted_items_t * encrypted_items) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, encrypted_items, AXIS2_FAILURE); + + secpolicy->encrypted_items = encrypted_items; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_signed_encrypted_items_t *AXIS2_CALL +rp_secpolicy_get_encrypted_items( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return secpolicy->encrypted_items; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_secpolicy_set_wss( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_property_t * wss) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, wss, AXIS2_FAILURE); + + rp_property_increment_ref(wss, env); + secpolicy->wss = wss; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_property_t *AXIS2_CALL +rp_secpolicy_get_wss( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return secpolicy->wss; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_secpolicy_set_trust10( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_trust10_t * trust10) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, trust10, AXIS2_FAILURE); + + rp_trust10_increment_ref(trust10, env); + secpolicy->trust10 = trust10; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_trust10_t *AXIS2_CALL +rp_secpolicy_get_trust10( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return secpolicy->trust10; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_secpolicy_set_rampart_config( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env, + rp_rampart_config_t * rampart_config) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, rampart_config, AXIS2_FAILURE); + + rp_rampart_config_increment_ref(rampart_config, env); + secpolicy->rampart_config = rampart_config; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_rampart_config_t *AXIS2_CALL +rp_secpolicy_get_rampart_config( + rp_secpolicy_t * secpolicy, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return secpolicy->rampart_config; +} diff --git a/neethi/src/secpolicy/model/security_context_token.c b/neethi/src/secpolicy/model/security_context_token.c new file mode 100644 index 0000000..9b00465 --- /dev/null +++ b/neethi/src/secpolicy/model/security_context_token.c @@ -0,0 +1,239 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_security_context_token_t +{ + rp_token_t *token; + axis2_bool_t require_external_uri_ref; + axis2_bool_t sc10_security_context_token; + neethi_policy_t *bootstrap_policy; + axis2_bool_t is_secure_conversation_token; + int ref; +}; + +AXIS2_EXTERN rp_security_context_token_t *AXIS2_CALL +rp_security_context_token_create( + const axutil_env_t * env) +{ + rp_security_context_token_t *security_context_token = NULL; + + security_context_token = (rp_security_context_token_t *)AXIS2_MALLOC(env->allocator, + sizeof(rp_security_context_token_t)); + + if(!security_context_token) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Security context token assertion creation failed. Insufficient memory"); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + security_context_token->ref = 0; + security_context_token->require_external_uri_ref = AXIS2_FALSE; + security_context_token->sc10_security_context_token = AXIS2_FALSE; + security_context_token->bootstrap_policy = NULL; + security_context_token->is_secure_conversation_token = AXIS2_FALSE; + + security_context_token->token = rp_token_create(env); + if(!security_context_token->token) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Security context token assertion creation failed."); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + rp_security_context_token_free(security_context_token, env); + return NULL; + } + + return security_context_token; +} + +AXIS2_EXTERN void AXIS2_CALL +rp_security_context_token_free( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env) +{ + if(security_context_token) + { + if(--(security_context_token->ref) > 0) + { + return; + } + + if(security_context_token->bootstrap_policy) + { + neethi_policy_free(security_context_token->bootstrap_policy, env); + } + + rp_token_free(security_context_token->token, env); + AXIS2_FREE(env->allocator, security_context_token); + security_context_token = NULL; + } +} + +/* Implementations */ + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_security_context_token_get_inclusion( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env) +{ + return rp_token_get_inclusion(security_context_token->token, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_security_context_token_set_inclusion( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env, + axis2_char_t * inclusion) +{ + return rp_token_set_inclusion(security_context_token->token, env, inclusion); +} + +AXIS2_EXTERN derive_key_type_t AXIS2_CALL +rp_security_context_token_get_derivedkey( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env) +{ + return rp_token_get_derivedkey_type(security_context_token->token, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_security_context_token_set_derivedkey( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env, + derive_key_type_t derivedkey) +{ + return rp_token_set_derivedkey_type(security_context_token->token, env, derivedkey); +} + +AXIS2_EXTERN derive_key_version_t AXIS2_CALL +rp_security_context_token_get_derivedkey_version( + rp_security_context_token_t *security_context_token, + const axutil_env_t *env) +{ + return rp_token_get_derive_key_version(security_context_token->token, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_security_context_token_set_derivedkey_version( + rp_security_context_token_t *security_context_token, + const axutil_env_t *env, + derive_key_version_t version) +{ + return rp_token_set_derive_key_version(security_context_token->token, env, version); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_security_context_token_get_require_external_uri_ref( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env) +{ + return security_context_token->require_external_uri_ref; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_security_context_token_set_require_external_uri_ref( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env, + axis2_bool_t require_external_uri_ref) +{ + security_context_token->require_external_uri_ref = require_external_uri_ref; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_security_context_token_get_sc10_security_context_token( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env) +{ + return security_context_token->sc10_security_context_token; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_security_context_token_set_sc10_security_context_token( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env, + axis2_bool_t sc10_security_context_token) +{ + security_context_token->sc10_security_context_token = sc10_security_context_token; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_security_context_token_get_issuer( + rp_security_context_token_t *security_context_token, + const axutil_env_t *env) +{ + return rp_token_get_issuer(security_context_token->token, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_security_context_token_set_issuer( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env, + axis2_char_t *issuer) +{ + return rp_token_set_issuer(security_context_token->token, env, issuer); +} + +AXIS2_EXTERN neethi_policy_t *AXIS2_CALL +rp_security_context_token_get_bootstrap_policy( + rp_security_context_token_t *security_context_token, + const axutil_env_t *env) +{ + return security_context_token->bootstrap_policy; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_security_context_token_set_bootstrap_policy( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env, + neethi_policy_t *bootstrap_policy) +{ + security_context_token->bootstrap_policy = bootstrap_policy; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_security_context_token_get_is_secure_conversation_token( + rp_security_context_token_t *security_context_token, + const axutil_env_t *env) +{ + return security_context_token->is_secure_conversation_token; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_security_context_token_set_is_secure_conversation_token( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env, + axis2_bool_t is_secure_conversation_token) +{ + security_context_token->is_secure_conversation_token = is_secure_conversation_token; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_security_context_token_increment_ref( + rp_security_context_token_t * security_context_token, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + security_context_token->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/signed_encrypted_elements.c b/neethi/src/secpolicy/model/signed_encrypted_elements.c new file mode 100644 index 0000000..b656f0f --- /dev/null +++ b/neethi/src/secpolicy/model/signed_encrypted_elements.c @@ -0,0 +1,180 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_signed_encrypted_elements_t +{ + axis2_bool_t signedelements; + axutil_array_list_t *xpath_expressions; + axis2_char_t *xpath_version; + int ref; + +}; + +AXIS2_EXTERN rp_signed_encrypted_elements_t *AXIS2_CALL +rp_signed_encrypted_elements_create( + const axutil_env_t * env) +{ + rp_signed_encrypted_elements_t *signed_encrypted_elements = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + signed_encrypted_elements = (rp_signed_encrypted_elements_t *)AXIS2_MALLOC(env->allocator, + sizeof(rp_signed_encrypted_elements_t)); + + if(signed_encrypted_elements == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + signed_encrypted_elements->xpath_expressions = NULL; + + signed_encrypted_elements->xpath_expressions = axutil_array_list_create(env, 0); + if(!(signed_encrypted_elements->xpath_expressions)) + { + rp_signed_encrypted_elements_free(signed_encrypted_elements, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + signed_encrypted_elements->xpath_version = NULL; + signed_encrypted_elements->ref = 0; + + return signed_encrypted_elements; + +} + +AXIS2_EXTERN void AXIS2_CALL +rp_signed_encrypted_elements_free( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(signed_encrypted_elements) + { + if(--(signed_encrypted_elements->ref) > 0) + { + return; + } + + if(signed_encrypted_elements->xpath_expressions) + { + int i = 0; + for(i = 0; i < axutil_array_list_size(signed_encrypted_elements-> xpath_expressions, + env); i++) + { + axis2_char_t *expression = NULL; + expression = (axis2_char_t *)axutil_array_list_get( + signed_encrypted_elements-> xpath_expressions, env, i); + if(expression) + AXIS2_FREE(env->allocator, expression); + + expression = NULL; + } + axutil_array_list_free(signed_encrypted_elements->xpath_expressions, env); + signed_encrypted_elements->xpath_expressions = NULL; + + } + AXIS2_FREE(env->allocator, signed_encrypted_elements); + signed_encrypted_elements = NULL; + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_signed_encrypted_elements_get_signedelements( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return signed_encrypted_elements->signedelements; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_signed_encrypted_elements_set_signedelements( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env, + axis2_bool_t signedelements) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, signedelements, AXIS2_FAILURE); + + signed_encrypted_elements->signedelements = signedelements; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +rp_signed_encrypted_elements_get_xpath_expressions( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return signed_encrypted_elements->xpath_expressions; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_signed_encrypted_elements_add_expression( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env, + axis2_char_t * expression) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, expression, AXIS2_FAILURE); + + axutil_array_list_add(signed_encrypted_elements->xpath_expressions, env, expression); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_signed_encrypted_elements_get_xpath_version( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return signed_encrypted_elements->xpath_version; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_signed_encrypted_elements_set_xpath_version( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env, + axis2_char_t * xpath_version) +{ + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, xpath_version, AXIS2_FAILURE); + + signed_encrypted_elements->xpath_version = xpath_version; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_signed_encrypted_elements_increment_ref( + rp_signed_encrypted_elements_t * signed_encrypted_elements, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + signed_encrypted_elements->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/signed_encrypted_items.c b/neethi/src/secpolicy/model/signed_encrypted_items.c new file mode 100644 index 0000000..e3e6150 --- /dev/null +++ b/neethi/src/secpolicy/model/signed_encrypted_items.c @@ -0,0 +1,136 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_signed_encrypted_items_t +{ + axis2_bool_t signeditems; + axutil_array_list_t *elements; + +}; + +AXIS2_EXTERN rp_signed_encrypted_items_t *AXIS2_CALL +rp_signed_encrypted_items_create( + const axutil_env_t * env) +{ + rp_signed_encrypted_items_t *signed_encrypted_items = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + signed_encrypted_items = (rp_signed_encrypted_items_t *)AXIS2_MALLOC(env->allocator, + sizeof(rp_signed_encrypted_items_t)); + + if(signed_encrypted_items == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + signed_encrypted_items->elements = NULL; + + signed_encrypted_items->elements = axutil_array_list_create(env, 0); + if(!(signed_encrypted_items->elements)) + { + rp_signed_encrypted_items_free(signed_encrypted_items, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + return signed_encrypted_items; + +} + +AXIS2_EXTERN void AXIS2_CALL +rp_signed_encrypted_items_free( + rp_signed_encrypted_items_t * signed_encrypted_items, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(signed_encrypted_items) + { + + if(signed_encrypted_items->elements) + { + int i = 0; + for(i = 0; i < axutil_array_list_size(signed_encrypted_items->elements, env); i++) + { + rp_element_t *element = NULL; + element = (rp_element_t *)axutil_array_list_get(signed_encrypted_items->elements, + env, i); + if(element) + rp_element_free(element, env); + + element = NULL; + } + axutil_array_list_free(signed_encrypted_items->elements, env); + signed_encrypted_items->elements = NULL; + + } + AXIS2_FREE(env->allocator, signed_encrypted_items); + signed_encrypted_items = NULL; + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_signed_encrypted_items_get_signeditems( + rp_signed_encrypted_items_t * signed_encrypted_items, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return signed_encrypted_items->signeditems; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_signed_encrypted_items_set_signeditems( + rp_signed_encrypted_items_t * signed_encrypted_items, + const axutil_env_t * env, + axis2_bool_t signeditems) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, signeditems, AXIS2_FAILURE); + signed_encrypted_items->signeditems = signeditems; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +rp_signed_encrypted_items_get_elements( + rp_signed_encrypted_items_t * signed_encrypted_items, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return signed_encrypted_items->elements; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_signed_encrypted_items_add_element( + rp_signed_encrypted_items_t * signed_encrypted_items, + const axutil_env_t * env, + rp_element_t * element) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, element, AXIS2_FAILURE); + + axutil_array_list_add(signed_encrypted_items->elements, env, element); + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/signed_encrypted_parts.c b/neethi/src/secpolicy/model/signed_encrypted_parts.c new file mode 100644 index 0000000..0f16e83 --- /dev/null +++ b/neethi/src/secpolicy/model/signed_encrypted_parts.c @@ -0,0 +1,176 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_signed_encrypted_parts_t +{ + axis2_bool_t body; + axis2_bool_t signedparts; + axis2_bool_t attachments; + axutil_array_list_t *headers; + int ref; +}; + +AXIS2_EXTERN rp_signed_encrypted_parts_t *AXIS2_CALL +rp_signed_encrypted_parts_create( + const axutil_env_t * env) +{ + rp_signed_encrypted_parts_t *signed_encrypted_parts = NULL; + signed_encrypted_parts = (rp_signed_encrypted_parts_t *)AXIS2_MALLOC(env->allocator, + sizeof(rp_signed_encrypted_parts_t)); + + if(!signed_encrypted_parts) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Cannot create signed_encrypted_parts. Insuficient memory."); + return NULL; + } + + signed_encrypted_parts->headers = axutil_array_list_create(env, 0); + if(!signed_encrypted_parts->headers) + { + rp_signed_encrypted_parts_free(signed_encrypted_parts, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Cannot create signed_encrypted_parts. Headers array list creation failed."); + return NULL; + } + + signed_encrypted_parts->body = AXIS2_FALSE; + signed_encrypted_parts->ref = 0; + signed_encrypted_parts->signedparts = AXIS2_FALSE; + signed_encrypted_parts->attachments = AXIS2_FALSE; + return signed_encrypted_parts; +} + +AXIS2_EXTERN void AXIS2_CALL +rp_signed_encrypted_parts_free( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env) +{ + if(signed_encrypted_parts) + { + if(--(signed_encrypted_parts->ref) > 0) + { + return; + } + + if(signed_encrypted_parts->headers) + { + int i = 0; + for(i = 0; i < axutil_array_list_size(signed_encrypted_parts->headers, env); i++) + { + rp_header_t *header = NULL; + header = (rp_header_t *)axutil_array_list_get(signed_encrypted_parts->headers, env, + i); + if(header) + { + rp_header_free(header, env); + } + } + axutil_array_list_free(signed_encrypted_parts->headers, env); + signed_encrypted_parts->headers = NULL; + } + AXIS2_FREE(env->allocator, signed_encrypted_parts); + signed_encrypted_parts = NULL; + } +} + +/* Implementations */ + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_signed_encrypted_parts_get_body( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env) +{ + return signed_encrypted_parts->body; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_signed_encrypted_parts_set_body( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env, + axis2_bool_t body) +{ + AXIS2_PARAM_CHECK(env->error, body, AXIS2_FAILURE); + signed_encrypted_parts->body = body; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_signed_encrypted_parts_get_signedparts( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env) +{ + return signed_encrypted_parts->signedparts; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_signed_encrypted_parts_set_signedparts( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env, + axis2_bool_t signedparts) +{ + signed_encrypted_parts->signedparts = signedparts; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +rp_signed_encrypted_parts_get_headers( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env) +{ + return signed_encrypted_parts->headers; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_signed_encrypted_parts_add_header( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env, + rp_header_t * header) +{ + AXIS2_PARAM_CHECK(env->error, header, AXIS2_FAILURE); + axutil_array_list_add(signed_encrypted_parts->headers, env, header); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_signed_encrypted_parts_increment_ref( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env) +{ + signed_encrypted_parts->ref++; + return AXIS2_SUCCESS; +} +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_signed_encrypted_parts_get_attachments( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env) +{ + return signed_encrypted_parts->attachments; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_signed_encrypted_parts_set_attachments( + rp_signed_encrypted_parts_t * signed_encrypted_parts, + const axutil_env_t * env, + axis2_bool_t attachments) +{ + signed_encrypted_parts->attachments = attachments; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/supporting_tokens.c b/neethi/src/secpolicy/model/supporting_tokens.c new file mode 100644 index 0000000..7ec2d7f --- /dev/null +++ b/neethi/src/secpolicy/model/supporting_tokens.c @@ -0,0 +1,300 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_supporting_tokens_t +{ + rp_algorithmsuite_t *algorithmsuite; + axutil_array_list_t *tokens; + rp_signed_encrypted_elements_t *signed_elements; + rp_signed_encrypted_parts_t *signed_parts; + rp_signed_encrypted_elements_t *encrypted_elements; + rp_signed_encrypted_parts_t *encrypted_parts; + int type; + int ref; +}; + +AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL +rp_supporting_tokens_create( + const axutil_env_t * env) +{ + rp_supporting_tokens_t *supporting_tokens = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + supporting_tokens = (rp_supporting_tokens_t *)AXIS2_MALLOC(env->allocator, + sizeof(rp_supporting_tokens_t)); + + if(supporting_tokens == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + supporting_tokens->tokens = NULL; + supporting_tokens->tokens = axutil_array_list_create(env, 0); + if(!(supporting_tokens->tokens)) + { + rp_supporting_tokens_free(supporting_tokens, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + supporting_tokens->algorithmsuite = NULL; + supporting_tokens->signed_parts = NULL; + supporting_tokens->signed_elements = NULL; + supporting_tokens->encrypted_parts = NULL; + supporting_tokens->encrypted_elements = NULL; + supporting_tokens->type = 0; + supporting_tokens->ref = 0; + return supporting_tokens; +} + +AXIS2_EXTERN void AXIS2_CALL +rp_supporting_tokens_free( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(supporting_tokens) + { + + if(--(supporting_tokens->ref) > 0) + { + return; + } + + if(supporting_tokens->tokens) + { + int i = 0; + for(i = 0; i < axutil_array_list_size(supporting_tokens->tokens, env); i++) + { + rp_property_t *token = NULL; + token = (rp_property_t *)axutil_array_list_get(supporting_tokens->tokens, env, i); + if(token) + rp_property_free(token, env); + + token = NULL; + } + axutil_array_list_free(supporting_tokens->tokens, env); + supporting_tokens->tokens = NULL; + + } + if(supporting_tokens->algorithmsuite) + { + rp_algorithmsuite_free(supporting_tokens->algorithmsuite, env); + supporting_tokens->algorithmsuite = NULL; + } + if(supporting_tokens->signed_parts) + { + rp_signed_encrypted_parts_free(supporting_tokens->signed_parts, env); + supporting_tokens->signed_parts = NULL; + } + if(supporting_tokens->signed_elements) + { + rp_signed_encrypted_elements_free(supporting_tokens-> signed_elements, env); + supporting_tokens->signed_elements = NULL; + } + if(supporting_tokens->encrypted_parts) + { + rp_signed_encrypted_parts_free(supporting_tokens->encrypted_parts, env); + supporting_tokens->encrypted_parts = NULL; + } + if(supporting_tokens->encrypted_elements) + { + rp_signed_encrypted_elements_free(supporting_tokens-> encrypted_elements, env); + supporting_tokens->encrypted_elements = NULL; + } + AXIS2_FREE(env->allocator, supporting_tokens); + supporting_tokens = NULL; + } + return; +} + +/* Implementations */ + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +rp_supporting_tokens_get_tokens( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return supporting_tokens->tokens; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_supporting_tokens_add_token( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env, + rp_property_t * token) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, token, AXIS2_FAILURE); + + rp_property_increment_ref(token, env); + axutil_array_list_add(supporting_tokens->tokens, env, token); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_algorithmsuite_t *AXIS2_CALL +rp_supporting_tokens_get_algorithmsuite( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + return supporting_tokens->algorithmsuite; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_supporting_tokens_set_algorithmsuite( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env, + rp_algorithmsuite_t * algorithmsuite) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, algorithmsuite, AXIS2_FAILURE); + + rp_algorithmsuite_increment_ref(algorithmsuite, env); + supporting_tokens->algorithmsuite = algorithmsuite; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_signed_encrypted_parts_t *AXIS2_CALL +rp_supporting_tokens_get_signed_parts( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + return supporting_tokens->signed_parts; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_supporting_tokens_set_signed_parts( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env, + rp_signed_encrypted_parts_t * signed_parts) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, signed_parts, AXIS2_FAILURE); + + supporting_tokens->signed_parts = signed_parts; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_signed_encrypted_elements_t *AXIS2_CALL +rp_supporting_tokens_get_signed_elements( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + return supporting_tokens->signed_elements; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_supporting_tokens_set_signed_elements( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env, + rp_signed_encrypted_elements_t * signed_elements) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, signed_elements, AXIS2_FAILURE); + + supporting_tokens->signed_elements = signed_elements; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_signed_encrypted_parts_t *AXIS2_CALL +rp_supporting_tokens_get_encrypted_parts( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + return supporting_tokens->encrypted_parts; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_supporting_tokens_set_encrypted_parts( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env, + rp_signed_encrypted_parts_t * encrypted_parts) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, encrypted_parts, AXIS2_FAILURE); + + supporting_tokens->encrypted_parts = encrypted_parts; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_signed_encrypted_elements_t *AXIS2_CALL +rp_supporting_tokens_get_encrypted_elements( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return supporting_tokens->encrypted_elements; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_supporting_tokens_set_encrypted_elements( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env, + rp_signed_encrypted_elements_t * encrypted_elements) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, encrypted_elements, AXIS2_FAILURE); + + supporting_tokens->encrypted_elements = encrypted_elements; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +rp_supporting_tokens_get_type( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + return supporting_tokens->type; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_supporting_tokens_set_type( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env, + int type) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + supporting_tokens->type = type; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_supporting_tokens_increment_ref( + rp_supporting_tokens_t * supporting_tokens, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + supporting_tokens->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/symmetric_asymmetric_binding_commons.c b/neethi/src/secpolicy/model/symmetric_asymmetric_binding_commons.c new file mode 100644 index 0000000..06a4188 --- /dev/null +++ b/neethi/src/secpolicy/model/symmetric_asymmetric_binding_commons.c @@ -0,0 +1,192 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_symmetric_asymmetric_binding_commons_t +{ + rp_binding_commons_t *binding_commons; + axis2_char_t *protection_order; + axis2_bool_t signature_protection; + axis2_bool_t token_protection; + axis2_bool_t entire_headers_and_body_signatures; + +}; + +AXIS2_EXTERN rp_symmetric_asymmetric_binding_commons_t *AXIS2_CALL +rp_symmetric_asymmetric_binding_commons_create( + const axutil_env_t * env) +{ + rp_symmetric_asymmetric_binding_commons_t *symmetric_asymmetric_binding_commons = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + symmetric_asymmetric_binding_commons + = (rp_symmetric_asymmetric_binding_commons_t *)AXIS2_MALLOC(env-> allocator, + sizeof(rp_symmetric_asymmetric_binding_commons_t)); + + if(symmetric_asymmetric_binding_commons == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + symmetric_asymmetric_binding_commons->binding_commons = NULL; + symmetric_asymmetric_binding_commons->protection_order = RP_SIGN_BEFORE_ENCRYPTING; + symmetric_asymmetric_binding_commons->signature_protection = AXIS2_FALSE; + symmetric_asymmetric_binding_commons->token_protection = AXIS2_FALSE; + symmetric_asymmetric_binding_commons->entire_headers_and_body_signatures = AXIS2_FALSE; + + return symmetric_asymmetric_binding_commons; +} + +AXIS2_EXTERN void AXIS2_CALL +rp_symmetric_asymmetric_binding_commons_free( + rp_symmetric_asymmetric_binding_commons_t * symmetric_asymmetric_binding_commons, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(symmetric_asymmetric_binding_commons) + { + if(symmetric_asymmetric_binding_commons->binding_commons) + { + rp_binding_commons_free(symmetric_asymmetric_binding_commons-> binding_commons, env); + symmetric_asymmetric_binding_commons->binding_commons = NULL; + } + AXIS2_FREE(env->allocator, symmetric_asymmetric_binding_commons); + symmetric_asymmetric_binding_commons = NULL; + } + return; +} + +/* Implementations */ +AXIS2_EXTERN rp_binding_commons_t *AXIS2_CALL +rp_symmetric_asymmetric_binding_commons_get_binding_commons( + rp_symmetric_asymmetric_binding_commons_t * symmetric_asymmetric_binding_commons, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + return symmetric_asymmetric_binding_commons->binding_commons; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_symmetric_asymmetric_binding_commons_set_binding_commons( + rp_symmetric_asymmetric_binding_commons_t * symmetric_asymmetric_binding_commons, + const axutil_env_t * env, + rp_binding_commons_t * binding_commons) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, binding_commons, AXIS2_FAILURE); + + symmetric_asymmetric_binding_commons->binding_commons = binding_commons; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_symmetric_asymmetric_binding_commons_get_signature_protection( + rp_symmetric_asymmetric_binding_commons_t * symmetric_asymmetric_binding_commons, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return symmetric_asymmetric_binding_commons->signature_protection; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_symmetric_asymmetric_binding_commons_set_signature_protection( + rp_symmetric_asymmetric_binding_commons_t * symmetric_asymmetric_binding_commons, + const axutil_env_t * env, + axis2_bool_t signature_protection) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, signature_protection, AXIS2_FAILURE); + symmetric_asymmetric_binding_commons->signature_protection = signature_protection; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_symmetric_asymmetric_binding_commons_get_token_protection( + rp_symmetric_asymmetric_binding_commons_t * symmetric_asymmetric_binding_commons, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return symmetric_asymmetric_binding_commons->token_protection; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_symmetric_asymmetric_binding_commons_set_token_protection( + rp_symmetric_asymmetric_binding_commons_t * symmetric_asymmetric_binding_commons, + const axutil_env_t * env, + axis2_bool_t token_protection) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, token_protection, AXIS2_FAILURE); + + symmetric_asymmetric_binding_commons->token_protection = token_protection; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_symmetric_asymmetric_binding_commons_get_entire_headers_and_body_signatures( + rp_symmetric_asymmetric_binding_commons_t * symmetric_asymmetric_binding_commons, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return symmetric_asymmetric_binding_commons-> entire_headers_and_body_signatures; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_symmetric_asymmetric_binding_commons_set_entire_headers_and_body_signatures( + rp_symmetric_asymmetric_binding_commons_t * symmetric_asymmetric_binding_commons, + const axutil_env_t * env, + axis2_bool_t entire_headers_and_body_signatures) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, entire_headers_and_body_signatures, AXIS2_FAILURE); + + symmetric_asymmetric_binding_commons->entire_headers_and_body_signatures + = entire_headers_and_body_signatures; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_symmetric_asymmetric_binding_commons_get_protection_order( + rp_symmetric_asymmetric_binding_commons_t * symmetric_asymmetric_binding_commons, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + return symmetric_asymmetric_binding_commons->protection_order; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_symmetric_asymmetric_binding_commons_set_protection_order( + rp_symmetric_asymmetric_binding_commons_t * symmetric_asymmetric_binding_commons, + const axutil_env_t * env, + axis2_char_t * protection_order) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, protection_order, AXIS2_FAILURE); + + symmetric_asymmetric_binding_commons->protection_order = protection_order; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/symmetric_binding.c b/neethi/src/secpolicy/model/symmetric_binding.c new file mode 100644 index 0000000..4d6dc2d --- /dev/null +++ b/neethi/src/secpolicy/model/symmetric_binding.c @@ -0,0 +1,216 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_symmetric_binding_t +{ + rp_symmetric_asymmetric_binding_commons_t *symmetric_asymmetric_binding_commons; + rp_property_t *protection_token; + rp_property_t *signature_token; + rp_property_t *encryption_token; + int ref; +}; + +AXIS2_EXTERN rp_symmetric_binding_t *AXIS2_CALL +rp_symmetric_binding_create( + const axutil_env_t * env) +{ + rp_symmetric_binding_t *symmetric_binding = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + symmetric_binding = (rp_symmetric_binding_t *)AXIS2_MALLOC(env->allocator, + sizeof(rp_symmetric_binding_t)); + + if(symmetric_binding == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + symmetric_binding->symmetric_asymmetric_binding_commons = NULL; + symmetric_binding->protection_token = NULL; + symmetric_binding->signature_token = NULL; + symmetric_binding->encryption_token = NULL; + symmetric_binding->ref = 0; + + return symmetric_binding; +} + +AXIS2_EXTERN void AXIS2_CALL +rp_symmetric_binding_free( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(symmetric_binding) + { + if(--(symmetric_binding->ref) > 0) + { + return; + } + + if(symmetric_binding->symmetric_asymmetric_binding_commons) + { + rp_symmetric_asymmetric_binding_commons_free( + symmetric_binding-> symmetric_asymmetric_binding_commons, env); + symmetric_binding->symmetric_asymmetric_binding_commons = NULL; + } + if(symmetric_binding->protection_token) + { + rp_property_free(symmetric_binding->protection_token, env); + symmetric_binding->protection_token = NULL; + } + if(symmetric_binding->encryption_token) + { + rp_property_free(symmetric_binding->encryption_token, env); + symmetric_binding->encryption_token = NULL; + } + if(symmetric_binding->signature_token) + { + rp_property_free(symmetric_binding->signature_token, env); + symmetric_binding->signature_token = NULL; + } + AXIS2_FREE(env->allocator, symmetric_binding); + } + + return; +} + +/* Implementations */ + +AXIS2_EXTERN rp_symmetric_asymmetric_binding_commons_t *AXIS2_CALL +rp_symmetric_binding_get_symmetric_asymmetric_binding_commons( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + return symmetric_binding->symmetric_asymmetric_binding_commons; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_symmetric_binding_set_symmetric_asymmetric_binding_commons( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env, + rp_symmetric_asymmetric_binding_commons_t * symmetric_asymmetric_binding_commons) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, symmetric_asymmetric_binding_commons, AXIS2_FAILURE); + + symmetric_binding->symmetric_asymmetric_binding_commons = symmetric_asymmetric_binding_commons; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_property_t *AXIS2_CALL +rp_symmetric_binding_get_protection_token( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + return symmetric_binding->protection_token; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_symmetric_binding_set_protection_token( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env, + rp_property_t * protection_token) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, protection_token, AXIS2_FAILURE); + if(symmetric_binding->signature_token || symmetric_binding->encryption_token) + { + return AXIS2_FAILURE; + } + rp_property_increment_ref(protection_token, env); + symmetric_binding->protection_token = protection_token; + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_symmetric_binding_set_encryption_token( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env, + rp_property_t * encryption_token) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, encryption_token, AXIS2_FAILURE); + if(symmetric_binding->protection_token) + { + return AXIS2_FAILURE; + } + rp_property_increment_ref(encryption_token, env); + symmetric_binding->encryption_token = encryption_token; + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN rp_property_t *AXIS2_CALL +rp_symmetric_binding_get_encryption_token( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + return symmetric_binding->encryption_token; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_symmetric_binding_set_signature_token( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env, + rp_property_t * signature_token) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, signature_token, AXIS2_FAILURE); + if(symmetric_binding->protection_token) + { + return AXIS2_FAILURE; + } + rp_property_increment_ref(signature_token, env); + symmetric_binding->signature_token = signature_token; + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN rp_property_t *AXIS2_CALL +rp_symmetric_binding_get_signature_token( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + return symmetric_binding->signature_token; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_symmetric_binding_increment_ref( + rp_symmetric_binding_t * symmetric_binding, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + symmetric_binding->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/token.c b/neethi/src/secpolicy/model/token.c new file mode 100644 index 0000000..ccb80e4 --- /dev/null +++ b/neethi/src/secpolicy/model/token.c @@ -0,0 +1,190 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_token_t +{ + axis2_char_t *issuer; + axis2_char_t *inclusion; + axiom_node_t *claim; + axis2_bool_t is_issuer_name; /* shows whether 'issuer' points to issuer name or end point */ + derive_key_type_t derive_key; + derive_key_version_t derive_key_version; + int ref; +}; + +AXIS2_EXTERN rp_token_t *AXIS2_CALL +rp_token_create( + const axutil_env_t * env) +{ + rp_token_t *token = NULL; + token = (rp_token_t *)AXIS2_MALLOC(env->allocator, sizeof(rp_token_t)); + + if(!token) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] Token creation failed. Insufficient memory"); + return NULL; + } + token->issuer = NULL; + token->is_issuer_name = AXIS2_FALSE; + token->claim = NULL; + token->derive_key = DERIVEKEY_NONE; + token->derive_key_version = DERIVEKEY_VERSION_SC13; + token->inclusion = RP_INCLUDE_ALWAYS_SP12; + token->ref = 0; + + return token; +} + +AXIS2_EXTERN void AXIS2_CALL +rp_token_free( + rp_token_t * token, + const axutil_env_t * env) +{ + if(token) + { + if(--(token->ref) > 0) + { + return; + } + + AXIS2_FREE(env->allocator, token); + token = NULL; + } +} + +/* Implementations */ + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_token_get_issuer( + rp_token_t * token, + const axutil_env_t * env) +{ + return token->issuer; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_token_set_issuer( + rp_token_t * token, + const axutil_env_t * env, + axis2_char_t * issuer) +{ + token->issuer = issuer; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_token_set_derive_key_version( + rp_token_t *token, + const axutil_env_t *env, + derive_key_version_t version) +{ + token->derive_key_version = version; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN derive_key_version_t AXIS2_CALL +rp_token_get_derive_key_version( + rp_token_t *token, + const axutil_env_t *env) +{ + return token->derive_key_version; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_token_set_inclusion( + rp_token_t *token, + const axutil_env_t *env, + axis2_char_t *inclusion) +{ + token->inclusion = inclusion; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_token_get_inclusion( + rp_token_t *token, + const axutil_env_t *env) +{ + return token->inclusion; +} + +AXIS2_EXTERN derive_key_type_t AXIS2_CALL +rp_token_get_derivedkey_type( + rp_token_t * token, + const axutil_env_t * env) +{ + return token->derive_key; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_token_set_derivedkey_type( + rp_token_t * token, + const axutil_env_t * env, + derive_key_type_t derivedkey) +{ + token->derive_key = derivedkey; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_token_get_is_issuer_name( + rp_token_t * token, + const axutil_env_t * env) +{ + return token->is_issuer_name; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_token_set_is_issuer_name( + rp_token_t * token, + const axutil_env_t * env, + axis2_bool_t is_issuer_name) +{ + token->is_issuer_name = is_issuer_name; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +rp_token_get_claim( + rp_token_t * token, + const axutil_env_t * env) +{ + return token->claim; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_token_set_claim( + rp_token_t * token, + const axutil_env_t * env, + axiom_node_t *claim) +{ + token->claim = claim; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_token_increment_ref( + rp_token_t * token, + const axutil_env_t * env) +{ + token->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/transport_binding.c b/neethi/src/secpolicy/model/transport_binding.c new file mode 100644 index 0000000..cb84fff --- /dev/null +++ b/neethi/src/secpolicy/model/transport_binding.c @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_transport_binding_t +{ + rp_binding_commons_t *binding_commons; + rp_property_t *transport_token; + int ref; +}; + +AXIS2_EXTERN rp_transport_binding_t *AXIS2_CALL +rp_transport_binding_create( + const axutil_env_t * env) +{ + rp_transport_binding_t *transport_binding = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + transport_binding = (rp_transport_binding_t *)AXIS2_MALLOC(env->allocator, + sizeof(rp_transport_binding_t)); + + if(transport_binding == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + transport_binding->binding_commons = NULL; + transport_binding->transport_token = NULL; + transport_binding->ref = 0; + + return transport_binding; + +} + +AXIS2_EXTERN void AXIS2_CALL +rp_transport_binding_free( + rp_transport_binding_t * transport_binding, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(transport_binding) + { + if(--(transport_binding->ref) > 0) + { + return; + } + if(transport_binding->binding_commons) + { + rp_binding_commons_free(transport_binding->binding_commons, env); + transport_binding->binding_commons = NULL; + } + if(transport_binding->transport_token) + { + rp_property_free(transport_binding->transport_token, env); + transport_binding->transport_token = NULL; + } + AXIS2_FREE(env->allocator, transport_binding); + } + + return; +} + +/* Implementations */ + +AXIS2_EXTERN rp_binding_commons_t *AXIS2_CALL +rp_transport_binding_get_binding_commons( + rp_transport_binding_t * transport_binding, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + return transport_binding->binding_commons; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_transport_binding_set_binding_commons( + rp_transport_binding_t * transport_binding, + const axutil_env_t * env, + rp_binding_commons_t * binding_commons) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, binding_commons, AXIS2_FAILURE); + + transport_binding->binding_commons = binding_commons; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN rp_property_t *AXIS2_CALL +rp_transport_binding_get_transport_token( + rp_transport_binding_t * transport_binding, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + + return transport_binding->transport_token; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_transport_binding_set_transport_token( + rp_transport_binding_t * transport_binding, + const axutil_env_t * env, + rp_property_t * transport_token) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, transport_token, AXIS2_FAILURE); + + rp_property_increment_ref(transport_token, env); + transport_binding->transport_token = transport_token; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_transport_binding_increment_ref( + rp_transport_binding_t * transport_binding, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + transport_binding->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/trust10.c b/neethi/src/secpolicy/model/trust10.c new file mode 100644 index 0000000..54d98c8 --- /dev/null +++ b/neethi/src/secpolicy/model/trust10.c @@ -0,0 +1,201 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_trust10_t +{ + axis2_bool_t must_support_client_challenge; + axis2_bool_t must_support_server_challenge; + axis2_bool_t require_client_entropy; + axis2_bool_t require_server_entropy; + axis2_bool_t must_support_issued_token; + int ref; +}; + +AXIS2_EXTERN rp_trust10_t *AXIS2_CALL +rp_trust10_create( + const axutil_env_t * env) +{ + rp_trust10_t *trust10 = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + trust10 = (rp_trust10_t *)AXIS2_MALLOC(env->allocator, sizeof(rp_trust10_t)); + + if(trust10 == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + trust10->must_support_client_challenge = AXIS2_FALSE; + trust10->must_support_server_challenge = AXIS2_FALSE; + trust10->require_client_entropy = AXIS2_FALSE; + trust10->require_server_entropy = AXIS2_FALSE; + trust10->must_support_issued_token = AXIS2_FALSE; + trust10->ref = 0; + + return trust10; + +} + +AXIS2_EXTERN void AXIS2_CALL +rp_trust10_free( + rp_trust10_t * trust10, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(trust10) + { + if(--(trust10->ref) > 0) + { + return; + } + + AXIS2_FREE(env->allocator, trust10); + trust10 = NULL; + } + return; +} + +/* Implementations */ +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_trust10_get_must_support_client_challenge( + rp_trust10_t * trust10, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return trust10->must_support_client_challenge; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_trust10_set_must_support_client_challenge( + rp_trust10_t * trust10, + const axutil_env_t * env, + axis2_bool_t must_support_client_challenge) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, must_support_client_challenge, AXIS2_FAILURE); + trust10->must_support_client_challenge = must_support_client_challenge; + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_trust10_get_must_support_server_challenge( + rp_trust10_t * trust10, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return trust10->must_support_server_challenge; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_trust10_set_must_support_server_challenge( + rp_trust10_t * trust10, + const axutil_env_t * env, + axis2_bool_t must_support_server_challenge) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, must_support_server_challenge, AXIS2_FAILURE); + trust10->must_support_server_challenge = must_support_server_challenge; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_trust10_get_require_client_entropy( + rp_trust10_t * trust10, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return trust10->require_client_entropy; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_trust10_set_require_client_entropy( + rp_trust10_t * trust10, + const axutil_env_t * env, + axis2_bool_t require_client_entropy) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, require_client_entropy, AXIS2_FAILURE); + trust10->require_client_entropy = require_client_entropy; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_trust10_get_require_server_entropy( + rp_trust10_t * trust10, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return trust10->require_server_entropy; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_trust10_set_require_server_entropy( + rp_trust10_t * trust10, + const axutil_env_t * env, + axis2_bool_t require_server_entropy) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, require_server_entropy, AXIS2_FAILURE); + trust10->require_server_entropy = require_server_entropy; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_trust10_get_must_support_issued_token( + rp_trust10_t * trust10, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return trust10->must_support_issued_token; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_trust10_set_must_support_issued_token( + rp_trust10_t * trust10, + const axutil_env_t * env, + axis2_bool_t must_support_issued_token) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, must_support_issued_token, AXIS2_FAILURE); + trust10->must_support_issued_token = must_support_issued_token; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_trust10_increment_ref( + rp_trust10_t * trust10, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + trust10->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/ut.c b/neethi/src/secpolicy/model/ut.c new file mode 100644 index 0000000..867e5c1 --- /dev/null +++ b/neethi/src/secpolicy/model/ut.c @@ -0,0 +1,214 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct rp_username_token_t +{ + axis2_char_t *inclusion; + password_type_t password_type; + axis2_bool_t useUTprofile10; + axis2_bool_t useUTprofile11; + rp_token_t *token; + int ref; +}; + +AXIS2_EXTERN rp_username_token_t *AXIS2_CALL +rp_username_token_create( + const axutil_env_t * env) +{ + rp_username_token_t *username_token = NULL; + username_token = (rp_username_token_t *)AXIS2_MALLOC(env->allocator, + sizeof(rp_username_token_t)); + + if(!username_token) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] User name token creation failed. Insufficient memory"); + return NULL; + } + + username_token->token = rp_token_create(env); + if(!username_token->token) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] User name token creation failed."); + rp_username_token_free(username_token, env); + return NULL; + } + + username_token->inclusion = RP_INCLUDE_ALWAYS; + username_token->password_type = PASSWORD_PLAIN; + username_token->useUTprofile10 = AXIS2_TRUE; + username_token->useUTprofile11 = AXIS2_FALSE; + username_token->ref = 0; + + return username_token; +} + +AXIS2_EXTERN void AXIS2_CALL +rp_username_token_free( + rp_username_token_t * username_token, + const axutil_env_t * env) +{ + if(username_token) + { + if(--(username_token->ref) > 0) + { + return; + } + + rp_token_free(username_token->token, env); + AXIS2_FREE(env->allocator, username_token); + username_token = NULL; + } +} + +/* Implementations */ + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_username_token_get_inclusion( + rp_username_token_t * username_token, + const axutil_env_t * env) +{ + return username_token->inclusion; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_username_token_set_inclusion( + rp_username_token_t * username_token, + const axutil_env_t * env, + axis2_char_t * inclusion) +{ + AXIS2_PARAM_CHECK(env->error, inclusion, AXIS2_FAILURE); + username_token->inclusion = inclusion; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_username_token_get_useUTprofile10( + rp_username_token_t * username_token, + const axutil_env_t * env) +{ + return username_token->useUTprofile10; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_username_token_set_useUTprofile10( + rp_username_token_t * username_token, + const axutil_env_t * env, + axis2_bool_t useUTprofile10) +{ + username_token->useUTprofile10 = useUTprofile10; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_username_token_get_useUTprofile11( + rp_username_token_t * username_token, + const axutil_env_t * env) +{ + return username_token->useUTprofile10; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_username_token_set_useUTprofile11( + rp_username_token_t * username_token, + const axutil_env_t * env, + axis2_bool_t useUTprofile11) +{ + username_token->useUTprofile11 = useUTprofile11; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_username_token_increment_ref( + rp_username_token_t * username_token, + const axutil_env_t * env) +{ + username_token->ref++; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_username_token_get_issuer( + rp_username_token_t * username_token, + const axutil_env_t * env) +{ + return rp_token_get_issuer(username_token->token, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_username_token_set_issuer( + rp_username_token_t * username_token, + const axutil_env_t * env, + axis2_char_t * issuer) +{ + return rp_token_set_issuer(username_token->token, env, issuer); +} + +AXIS2_EXTERN derive_key_type_t AXIS2_CALL +rp_username_token_get_derivedkey_type( + rp_username_token_t * username_token, + const axutil_env_t * env) +{ + return rp_token_get_derivedkey_type(username_token->token, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_username_token_set_derivedkey_type( + rp_username_token_t * username_token, + const axutil_env_t * env, + derive_key_type_t derivedkey) +{ + return rp_token_set_derivedkey_type(username_token->token, env, derivedkey); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_username_token_get_is_issuer_name( + rp_username_token_t * username_token, + const axutil_env_t * env) +{ + return rp_token_get_is_issuer_name(username_token->token, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_username_token_set_is_issuer_name( + rp_username_token_t * username_token, + const axutil_env_t * env, + axis2_bool_t is_issuer_name) +{ + return rp_token_set_is_issuer_name(username_token->token, env, is_issuer_name); +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +rp_username_token_get_claim( + rp_username_token_t * username_token, + const axutil_env_t * env) +{ + return rp_token_get_claim(username_token->token, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_username_token_set_claim( + rp_username_token_t * username_token, + const axutil_env_t * env, + axiom_node_t *claim) +{ + return rp_token_set_claim(username_token->token, env, claim); +} diff --git a/neethi/src/secpolicy/model/wss10.c b/neethi/src/secpolicy/model/wss10.c new file mode 100644 index 0000000..2ee451d --- /dev/null +++ b/neethi/src/secpolicy/model/wss10.c @@ -0,0 +1,178 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_wss10_t +{ + axis2_bool_t must_support_ref_key_identifier; + axis2_bool_t must_support_ref_issuer_serial; + axis2_bool_t must_support_ref_external_uri; + axis2_bool_t must_support_ref_embedded_token; + axis2_bool_t must_support_direct_reference; + int ref; +}; + +AXIS2_EXTERN rp_wss10_t *AXIS2_CALL +rp_wss10_create( + const axutil_env_t * env) +{ + rp_wss10_t *wss10 = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + wss10 = (rp_wss10_t *)AXIS2_MALLOC(env->allocator, sizeof(rp_wss10_t)); + + if(wss10 == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + wss10->must_support_ref_key_identifier = AXIS2_FALSE; + wss10->must_support_ref_issuer_serial = AXIS2_FALSE; + wss10->must_support_ref_external_uri = AXIS2_FALSE; + wss10->must_support_ref_embedded_token = AXIS2_FALSE; + wss10->must_support_direct_reference = AXIS2_TRUE; + wss10->ref = 0; + + return wss10; + +} + +AXIS2_EXTERN void AXIS2_CALL +rp_wss10_free( + rp_wss10_t * wss10, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(wss10) + { + if(--(wss10->ref) > 0) + { + return; + } + + AXIS2_FREE(env->allocator, wss10); + wss10 = NULL; + } + return; +} + +/* Implementations */ +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_wss10_get_must_support_ref_key_identifier( + rp_wss10_t * wss10, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return wss10->must_support_ref_key_identifier; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_wss10_set_must_support_ref_key_identifier( + rp_wss10_t * wss10, + const axutil_env_t * env, + axis2_bool_t must_support_ref_key_identifier) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, must_support_ref_key_identifier, AXIS2_FAILURE); + wss10->must_support_ref_key_identifier = must_support_ref_key_identifier; + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_wss10_get_must_support_ref_issuer_serial( + rp_wss10_t * wss10, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return wss10->must_support_ref_issuer_serial; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_wss10_set_must_support_ref_issuer_serial( + rp_wss10_t * wss10, + const axutil_env_t * env, + axis2_bool_t must_support_ref_issuer_serial) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, must_support_ref_issuer_serial, AXIS2_FAILURE); + wss10->must_support_ref_issuer_serial = must_support_ref_issuer_serial; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_wss10_get_must_support_ref_external_uri( + rp_wss10_t * wss10, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return wss10->must_support_ref_external_uri; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_wss10_set_must_support_ref_external_uri( + rp_wss10_t * wss10, + const axutil_env_t * env, + axis2_bool_t must_support_ref_external_uri) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, must_support_ref_external_uri, AXIS2_FAILURE); + wss10->must_support_ref_external_uri = must_support_ref_external_uri; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_wss10_get_must_support_ref_embedded_token( + rp_wss10_t * wss10, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return wss10->must_support_ref_embedded_token; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_wss10_set_must_support_ref_embedded_token( + rp_wss10_t * wss10, + const axutil_env_t * env, + axis2_bool_t must_support_ref_embedded_token) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, must_support_ref_embedded_token, AXIS2_FAILURE); + wss10->must_support_ref_embedded_token = must_support_ref_embedded_token; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_wss10_increment_ref( + rp_wss10_t * wss10, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + wss10->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/wss11.c b/neethi/src/secpolicy/model/wss11.c new file mode 100644 index 0000000..552646c --- /dev/null +++ b/neethi/src/secpolicy/model/wss11.c @@ -0,0 +1,256 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_wss11_t +{ + axis2_bool_t must_support_ref_key_identifier; + axis2_bool_t must_support_ref_issuer_serial; + axis2_bool_t must_support_ref_external_uri; + axis2_bool_t must_support_ref_embedded_token; + axis2_bool_t must_support_ref_thumbprint; + axis2_bool_t must_support_ref_encryptedkey; + axis2_bool_t require_signature_confirmation; + axis2_bool_t must_support_direct_reference; + int ref; +}; + +AXIS2_EXTERN rp_wss11_t *AXIS2_CALL +rp_wss11_create( + const axutil_env_t * env) +{ + rp_wss11_t *wss11 = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + wss11 = (rp_wss11_t *)AXIS2_MALLOC(env->allocator, sizeof(rp_wss11_t)); + + if(wss11 == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + wss11->must_support_ref_key_identifier = AXIS2_FALSE; + wss11->must_support_ref_issuer_serial = AXIS2_FALSE; + wss11->must_support_ref_external_uri = AXIS2_FALSE; + wss11->must_support_ref_embedded_token = AXIS2_FALSE; + wss11->must_support_ref_thumbprint = AXIS2_FALSE; + wss11->must_support_ref_encryptedkey = AXIS2_FALSE; + wss11->require_signature_confirmation = AXIS2_FALSE; + wss11->must_support_direct_reference = AXIS2_TRUE; + wss11->ref = 0; + + return wss11; + +} + +AXIS2_EXTERN void AXIS2_CALL +rp_wss11_free( + rp_wss11_t * wss11, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(wss11) + { + if(--(wss11->ref) > 0) + { + return; + } + AXIS2_FREE(env->allocator, wss11); + wss11 = NULL; + } + return; +} + +/* Implementations */ +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_wss11_get_must_support_ref_key_identifier( + rp_wss11_t * wss11, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return wss11->must_support_ref_key_identifier; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_wss11_set_must_support_ref_key_identifier( + rp_wss11_t * wss11, + const axutil_env_t * env, + axis2_bool_t must_support_ref_key_identifier) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, must_support_ref_key_identifier, AXIS2_FAILURE); + wss11->must_support_ref_key_identifier = must_support_ref_key_identifier; + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_wss11_get_must_support_ref_issuer_serial( + rp_wss11_t * wss11, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return wss11->must_support_ref_issuer_serial; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_wss11_set_must_support_ref_issuer_serial( + rp_wss11_t * wss11, + const axutil_env_t * env, + axis2_bool_t must_support_ref_issuer_serial) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, must_support_ref_issuer_serial, AXIS2_FAILURE); + wss11->must_support_ref_issuer_serial = must_support_ref_issuer_serial; + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_wss11_get_must_support_ref_external_uri( + rp_wss11_t * wss11, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return wss11->must_support_ref_external_uri; + +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_wss11_set_must_support_ref_external_uri( + rp_wss11_t * wss11, + const axutil_env_t * env, + axis2_bool_t must_support_ref_external_uri) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, must_support_ref_external_uri, AXIS2_FAILURE); + wss11->must_support_ref_external_uri = must_support_ref_external_uri; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_wss11_get_must_support_ref_embedded_token( + rp_wss11_t * wss11, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return wss11->must_support_ref_embedded_token; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_wss11_set_must_support_ref_embedded_token( + rp_wss11_t * wss11, + const axutil_env_t * env, + axis2_bool_t must_support_ref_embedded_token) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, must_support_ref_embedded_token, AXIS2_FAILURE); + wss11->must_support_ref_embedded_token = must_support_ref_embedded_token; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_wss11_get_must_support_ref_thumbprint( + rp_wss11_t * wss11, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return wss11->must_support_ref_thumbprint; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_wss11_set_must_support_ref_thumbprint( + rp_wss11_t * wss11, + const axutil_env_t * env, + axis2_bool_t must_support_ref_thumbprint) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + AXIS2_PARAM_CHECK(env->error, must_support_ref_thumbprint, AXIS2_FAILURE); + wss11->must_support_ref_thumbprint = must_support_ref_thumbprint; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_wss11_get_must_support_ref_encryptedkey( + rp_wss11_t * wss11, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return wss11->must_support_ref_encryptedkey; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_wss11_set_must_support_ref_encryptedkey( + rp_wss11_t * wss11, + const axutil_env_t * env, + axis2_bool_t must_support_ref_encryptedkey) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, must_support_ref_encryptedkey, AXIS2_FAILURE); + wss11->must_support_ref_encryptedkey = must_support_ref_encryptedkey; + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_wss11_get_require_signature_confirmation( + rp_wss11_t * wss11, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + return wss11->require_signature_confirmation; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_wss11_set_require_signature_confirmation( + rp_wss11_t * wss11, + const axutil_env_t * env, + axis2_bool_t require_signature_confirmation) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, require_signature_confirmation, AXIS2_FAILURE); + wss11->require_signature_confirmation = require_signature_confirmation; + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_wss11_increment_ref( + rp_wss11_t * wss11, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + wss11->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/secpolicy/model/x509_token.c b/neethi/src/secpolicy/model/x509_token.c new file mode 100644 index 0000000..057af86 --- /dev/null +++ b/neethi/src/secpolicy/model/x509_token.c @@ -0,0 +1,231 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct rp_x509_token_t +{ + rp_token_t *token; + axis2_bool_t require_key_identifier_reference; + axis2_bool_t require_issuer_serial_reference; + axis2_bool_t require_embedded_token_reference; + axis2_bool_t require_thumb_print_reference; + axis2_char_t *token_version_and_type; + int ref; + +}; + +AXIS2_EXTERN rp_x509_token_t *AXIS2_CALL +rp_x509_token_create( + const axutil_env_t * env) +{ + rp_x509_token_t *x509_token = NULL; + x509_token = (rp_x509_token_t *)AXIS2_MALLOC(env->allocator, sizeof(rp_x509_token_t)); + + if(!x509_token) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[neethi] X509 token assertion creation failed. Insufficient memory"); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + x509_token->require_key_identifier_reference = AXIS2_FALSE; + x509_token->require_issuer_serial_reference = AXIS2_FALSE; + x509_token->require_embedded_token_reference = AXIS2_FALSE; + x509_token->require_thumb_print_reference = AXIS2_FALSE; + x509_token->token_version_and_type = RP_WSS_X509_V3_TOKEN_10; + x509_token->ref = 0; + + x509_token->token = rp_token_create(env); + if(!x509_token->token) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] X509 token assertion creation failed."); + rp_x509_token_free(x509_token, env); + return NULL; + } + return x509_token; +} + +AXIS2_EXTERN void AXIS2_CALL +rp_x509_token_free( + rp_x509_token_t * x509_token, + const axutil_env_t * env) +{ + if(x509_token) + { + if(--(x509_token->ref) > 0) + { + return; + } + + rp_token_free(x509_token->token, env); + AXIS2_FREE(env->allocator, x509_token); + x509_token = NULL; + } +} + +/* Implementations */ + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_x509_token_get_inclusion( + rp_x509_token_t * x509_token, + const axutil_env_t * env) +{ + return rp_token_get_inclusion(x509_token->token, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_x509_token_set_inclusion( + rp_x509_token_t * x509_token, + const axutil_env_t * env, + axis2_char_t * inclusion) +{ + return rp_token_set_inclusion(x509_token->token, env, inclusion); +} + +AXIS2_EXTERN derive_key_type_t AXIS2_CALL +rp_x509_token_get_derivedkey( + rp_x509_token_t * x509_token, + const axutil_env_t * env) +{ + return rp_token_get_derivedkey_type(x509_token->token, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_x509_token_set_derivedkey( + rp_x509_token_t * x509_token, + const axutil_env_t * env, + derive_key_type_t derivedkeys) +{ + return rp_token_set_derivedkey_type(x509_token->token, env, derivedkeys); +} + +AXIS2_EXTERN derive_key_version_t AXIS2_CALL +rp_x509_token_get_derivedkey_version( + rp_x509_token_t *x509_token, + const axutil_env_t *env) +{ + return rp_token_get_derive_key_version(x509_token->token, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_x509_token_set_derivedkey_version( + rp_x509_token_t *x509_token, + const axutil_env_t *env, + derive_key_version_t version) +{ + return rp_token_set_derive_key_version(x509_token->token, env, version); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_x509_token_get_require_key_identifier_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env) +{ + return x509_token->require_key_identifier_reference; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_x509_token_set_require_key_identifier_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env, + axis2_bool_t require_key_identifier_reference) +{ + x509_token->require_key_identifier_reference = require_key_identifier_reference; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_x509_token_get_require_issuer_serial_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env) +{ + return x509_token->require_issuer_serial_reference; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_x509_token_set_require_issuer_serial_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env, + axis2_bool_t require_issuer_serial_reference) +{ + x509_token->require_issuer_serial_reference = require_issuer_serial_reference; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_x509_token_get_require_embedded_token_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env) +{ + return x509_token->require_embedded_token_reference; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_x509_token_set_require_embedded_token_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env, + axis2_bool_t require_embedded_token_reference) +{ + x509_token->require_embedded_token_reference = require_embedded_token_reference; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +rp_x509_token_get_require_thumb_print_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env) +{ + return x509_token->require_thumb_print_reference; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_x509_token_set_require_thumb_print_reference( + rp_x509_token_t * x509_token, + const axutil_env_t * env, + axis2_bool_t require_thumb_print_reference) +{ + x509_token->require_thumb_print_reference = require_thumb_print_reference; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +rp_x509_token_get_token_version_and_type( + rp_x509_token_t * x509_token, + const axutil_env_t * env) +{ + return x509_token->token_version_and_type; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_x509_token_set_token_version_and_type( + rp_x509_token_t * x509_token, + const axutil_env_t * env, + axis2_char_t * token_version_and_type) +{ + x509_token->token_version_and_type = token_version_and_type; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +rp_x509_token_increment_ref( + rp_x509_token_t * x509_token, + const axutil_env_t * env) +{ + x509_token->ref++; + return AXIS2_SUCCESS; +} diff --git a/neethi/src/util.c b/neethi/src/util.c new file mode 100644 index 0000000..ca3d790 --- /dev/null +++ b/neethi/src/util.c @@ -0,0 +1,95 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +AXIS2_EXTERN neethi_policy_t *AXIS2_CALL +neethi_util_create_policy_from_file( + const axutil_env_t *env, + axis2_char_t *file_name) +{ + + axiom_xml_reader_t *reader = NULL; + axiom_stax_builder_t *builder = NULL; + axiom_document_t *document = NULL; + axiom_node_t *root_node = NULL; + + reader = axiom_xml_reader_create_for_file(env, file_name, NULL); + + if(!reader) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CREATING_XML_STREAM_READER, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + builder = axiom_stax_builder_create(env, reader); + if(!builder) + { + axiom_xml_reader_free(reader, env); + return NULL; + } + document = axiom_stax_builder_get_document(builder, env); + + if(!document) + { + axiom_stax_builder_free(builder, env); + return NULL; + } + + root_node = axiom_document_build_all(document, env); + if(!root_node) + { + axiom_stax_builder_free(builder, env); + return NULL; + } + + axiom_stax_builder_free_self(builder, env); + builder = NULL; + + return neethi_util_create_policy_from_om(env, root_node); + +} + +AXIS2_EXTERN neethi_policy_t *AXIS2_CALL +neethi_util_create_policy_from_om( + const axutil_env_t *env, + axiom_node_t *root_node) +{ + + axiom_element_t *root_ele = NULL; + + if(axiom_node_get_node_type(root_node, env) == AXIOM_ELEMENT) + { + root_ele = (axiom_element_t *)axiom_node_get_data_element(root_node, env); + if(root_ele) + { + neethi_policy_t *neethi_policy = NULL; + neethi_policy = neethi_engine_get_policy(env, root_node, root_ele); + if(!neethi_policy) + { + return NULL; + } + neethi_policy_set_root_node(neethi_policy, env, root_node); + return neethi_policy; + } + else + return NULL; + } + else + return NULL; +} diff --git a/neethi/test/Makefile.am b/neethi/test/Makefile.am new file mode 100644 index 0000000..b7ace58 --- /dev/null +++ b/neethi/test/Makefile.am @@ -0,0 +1,14 @@ +TESTS = +noinst_PROGRAMS = test + +test_SOURCES = test.c + +INCLUDES = -I$(top_builddir)/include \ + -I ../../util/include \ + -I ../../axiom/include \ + -I ../../include + +test_LDADD = $(top_builddir)/src/libneethi.la \ + ../../axiom/src/om/libaxis2_axiom.la \ + ../../util/src/libaxutil.la \ + ../src/libneethi.la diff --git a/neethi/test/main.c b/neethi/test/main.c new file mode 100644 index 0000000..53ec367 --- /dev/null +++ b/neethi/test/main.c @@ -0,0 +1,362 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +axis2_status_t AXIS2_CALL om_node_serialize( + axiom_node_t * node, + const axutil_env_t * env); + +/*axis2_status_t AXIS2_CALL +load_policy_array( + axutil_array_list_t *arraylist, + axis2_char_t *file_name, + const axutil_env_t *env); +*/ +axis2_status_t AXIS2_CALL load_policy_array( + axutil_array_list_t * arraylist, + axiom_node_t * root, + const axutil_env_t * env); + +axiom_node_t *return_policy_element( + axis2_char_t * name, + const axutil_env_t * env, + axis2_char_t * wsdl_name); + +axis2_char_t *get_policy_ref( + axiom_node_t * node, + const axutil_env_t * env); + +void get_all_policy( + axis2_char_t * element_name, + const axutil_env_t * env, + axutil_array_list_t * policy_node_list, + axis2_char_t * wsdl_name); + +neethi_policy_t *AXIS2_CALL merge_policylist( + axutil_array_list_t * arraylist, + const axutil_env_t * env); + +int +main( + int argc, + char **argv) +{ + axis2_status_t status = AXIS2_FAILURE; + int i = 0; + axutil_array_list_t *policy_list = NULL; + axutil_array_list_t *policy_node_list = NULL; + neethi_policy_t *resultant = NULL; + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + axutil_error_t *error = axutil_error_create(allocator); + const axutil_env_t *env = axutil_env_create_with_error(allocator, error); + + policy_list = axutil_array_list_create(env, 0); + policy_node_list = axutil_array_list_create(env, 0); + + get_all_policy(argv[1], env, policy_node_list, argv[2]); + + for (i = 0; i < axutil_array_list_size(policy_node_list, env); i++) + { + axiom_node_t *node = NULL; + node = (axiom_node_t *) axutil_array_list_get(policy_node_list, env, i); + status = load_policy_array(policy_list, node, env); + } + + resultant = merge_policylist(policy_list, env); + if (!resultant) + { + printf("Error Merging\n"); + return 0; + } + else + { + axiom_node_t *s_node = NULL; + axis2_char_t *buff = NULL; + s_node = neethi_engine_serialize(resultant, env); + if (!s_node) + { + printf("Serializing failed\n"); + return 0; + } + buff = axiom_node_to_string(s_node, env); + printf("\n%s", buff); + } + printf("Successful\n"); + return 0; + +} + +neethi_policy_t *AXIS2_CALL +merge_policylist( + axutil_array_list_t * arraylist, + const axutil_env_t * env) +{ + int i = 0; + neethi_policy_t *policy = NULL; + neethi_policy_t *result = NULL; + + result = (neethi_policy_t *) axutil_array_list_get(arraylist, env, 0); + result = + (neethi_policy_t *) neethi_engine_get_normalize(env, AXIS2_FALSE, + result); + + for (i = 1; i < axutil_array_list_size(arraylist, env); i++) + { + policy = (neethi_policy_t *) axutil_array_list_get(arraylist, env, i); + policy = + (neethi_policy_t *) neethi_engine_get_normalize(env, AXIS2_FALSE, + policy); + result = (neethi_policy_t *) neethi_engine_merge(env, policy, result); + } + return result; +} + +axis2_status_t AXIS2_CALL +om_node_serialize( + axiom_node_t * node, + const axutil_env_t * env) +{ + + axiom_output_t *om_output = NULL; + axiom_xml_writer_t *writer = NULL; + axis2_char_t *output_buffer = NULL; + axis2_status_t status = AXIS2_FAILURE; + + writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_output = axiom_output_create(env, writer); + + status = axiom_node_serialize(node, env, om_output); + if (status != AXIS2_SUCCESS) + { + printf("\naxiom_node_serialize failed\n"); + return 0; + } + else + printf("\naxiom_node_serialize success\n"); + /* end serializing stuff */ + + /*axiom_node_free_tree(node1, env); */ + output_buffer = (axis2_char_t *) axiom_xml_writer_get_xml(writer, env); + + printf("\nend test_om_serialize\n"); + +} + +axis2_status_t AXIS2_CALL +load_policy_array( + axutil_array_list_t * arraylist, + axiom_node_t * root, + const axutil_env_t * env) +{ + + axiom_element_t *root_ele = NULL; + + if (root) + { + if (axiom_node_get_node_type(root, env) == AXIOM_ELEMENT) + { + root_ele = + (axiom_element_t *) axiom_node_get_data_element(root, env); + if (root_ele) + { + neethi_policy_t *neethi_policy = NULL; + neethi_policy = neethi_engine_get_policy(env, root, root_ele); + if (!neethi_policy) + { + printf("Policy Creation fails\n"); + return AXIS2_FAILURE; + } + axutil_array_list_add(arraylist, env, neethi_policy); + } + } + } + return AXIS2_SUCCESS; +} + +axiom_node_t * +return_policy_element( + axis2_char_t * name, + const axutil_env_t * env, + axis2_char_t * wsdl_name) +{ + axiom_element_t *ele1 = NULL, + *ele2 = NULL; + axiom_document_t *document = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL, + *policy_node = NULL; + axiom_namespace_t *ns = NULL; + axiom_xml_reader_t *reader = NULL; + axiom_stax_builder_t *builder = NULL; + char *buffer = NULL; + axiom_attribute_t *attr = NULL; + axis2_char_t *value = NULL; + axis2_char_t *val = NULL; + axutil_hash_t *attr_hash = NULL; + axis2_char_t *xml_output = NULL; + axutil_hash_index_t *hi; + +/* + f = fopen(wsdl_name, "r"); + if (!f) + return NULL; + + reader = axiom_xml_reader_create_for_io(env, read_input, NULL , NULL, NULL); +*/ + reader = axiom_xml_reader_create_for_file(env, wsdl_name, NULL); + + if (!reader) + { + printf("ERROR CREATING PULLPARSER"); + return NULL; + } + + builder = axiom_stax_builder_create(env, reader); + + if (!builder) + { + printf("ERROR CREATING PULL PARSER"); + return NULL; + } + + document = axiom_stax_builder_get_document(builder, env); + if (!document) + return NULL; + + node1 = axiom_document_get_root_element(document, env); + if (!node1) + { + printf(" root element null "); + axiom_stax_builder_free(builder, env); + return NULL; + } + + do + { + node2 = axiom_document_build_next(document, env); + + if (!node2) + break; + + if (axiom_node_get_node_type(node2, env) == AXIOM_ELEMENT) + { + ele2 = (axiom_element_t *) axiom_node_get_data_element(node2, env); + attr_hash = axiom_element_get_all_attributes(ele2, env); + if (attr_hash) + { + hi = axutil_hash_first(attr_hash, env); + axutil_hash_this(hi, NULL, NULL, &attr); + + if (axutil_strcmp(axiom_attribute_get_value(attr, env), name) == + 0) + { + policy_node = node2; + } + } + } + } + while (node2); + return policy_node; +} + +axis2_char_t * +get_policy_ref( + axiom_node_t * node, + const axutil_env_t * env) +{ + axiom_element_t *policy_element = NULL; + axiom_children_iterator_t *children_iter = NULL; + axiom_node_t *child_node = NULL; + axutil_qname_t *qname = NULL; + axis2_char_t *value = NULL; + axis2_char_t *val = NULL; + axiom_attribute_t *attr = NULL; + + policy_element = (axiom_element_t *) axiom_node_get_data_element(node, env); + children_iter = axiom_element_get_children(policy_element, env, node); + + while (axiom_children_iterator_has_next(children_iter, env)) + { + child_node = axiom_children_iterator_next(children_iter, env); + if (axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) + { + policy_element = + (axiom_element_t *) axiom_node_get_data_element(child_node, + env); + + if (axutil_strcmp + (axiom_element_get_localname(policy_element, env), + "PolicyReference") == 0) + { + qname = axutil_qname_create(env, "URI", NULL, NULL); + attr = axiom_element_get_attribute(policy_element, env, qname); + + if (attr) + { + value = axiom_attribute_get_value(attr, env); + val = axutil_string_substring_starting_at(value, 1); + return val; + } + } + } + } + return NULL; +} + +void +get_all_policy( + axis2_char_t * element_name, + const axutil_env_t * env, + axutil_array_list_t * policy_node_list, + axis2_char_t * wsdl_name) +{ + axutil_hash_t *attr_hash = NULL; + axutil_hash_index_t *hi = NULL; + axiom_element_t *element = NULL; + axiom_attribute_t *attribute = NULL; + axis2_char_t *attribute_val = NULL; + axiom_node_t *parent_policy_node = NULL, + *parent_node = NULL; + + parent_node = return_policy_element(element_name, env, wsdl_name); + if (!parent_node) + return; + + parent_policy_node = + return_policy_element(get_policy_ref(parent_node, env), env, wsdl_name); + axutil_array_list_add(policy_node_list, env, parent_policy_node); + + if (axiom_node_get_node_type(parent_node, env) == AXIOM_ELEMENT) + { + element = + (axiom_element_t *) axiom_node_get_data_element(parent_node, env); + attr_hash = axiom_element_get_all_attributes(element, env); + if (attr_hash) + { + hi = axutil_hash_next(env, axutil_hash_first(attr_hash, env)); + do + { + if (hi) + { + axutil_hash_this(hi, NULL, NULL, &attribute); + attribute_val = axiom_attribute_get_value(attribute, env); + attribute_val = axutil_rindex(attribute_val, ':'); + attribute_val = + axutil_string_substring_starting_at(attribute_val, 1); + get_all_policy(attribute_val, env, policy_node_list, + wsdl_name); + hi = axutil_hash_next(env, hi); + } + } + while (hi); + } + } + return; +} diff --git a/neethi/test/policies/1.5symmetric_binding_policy.xml b/neethi/test/policies/1.5symmetric_binding_policy.xml new file mode 100644 index 0000000..b660ac9 --- /dev/null +++ b/neethi/test/policies/1.5symmetric_binding_policy.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Alice + 360 + a + Digest + AXIS2C_HOME/bin/samples/rampart/callback/libpwcb.so + AXIS2C_HOME/bin/samples/rampart/keys/ahome/bob_cert.cert + AXIS2C_HOME/bin/samples/rampart/keys/ahome/alice_cert.cert + AXIS2C_HOME/bin/samples/rampart/keys/ahome/alice_key.pem + + + + diff --git a/neethi/test/policies/Policy-for-Endpoint-1A.xml b/neethi/test/policies/Policy-for-Endpoint-1A.xml new file mode 100644 index 0000000..ff1a54f --- /dev/null +++ b/neethi/test/policies/Policy-for-Endpoint-1A.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Endpoint-1B.xml b/neethi/test/policies/Policy-for-Endpoint-1B.xml new file mode 100644 index 0000000..4df87e6 --- /dev/null +++ b/neethi/test/policies/Policy-for-Endpoint-1B.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Endpoint-2A.xml b/neethi/test/policies/Policy-for-Endpoint-2A.xml new file mode 100644 index 0000000..1517682 --- /dev/null +++ b/neethi/test/policies/Policy-for-Endpoint-2A.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Endpoint-2B.xml b/neethi/test/policies/Policy-for-Endpoint-2B.xml new file mode 100644 index 0000000..359f4bb --- /dev/null +++ b/neethi/test/policies/Policy-for-Endpoint-2B.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Input-in-Operation-1A-in-relation-to-Endpoint-1A.xml b/neethi/test/policies/Policy-for-Input-in-Operation-1A-in-relation-to-Endpoint-1A.xml new file mode 100644 index 0000000..de6cf40 --- /dev/null +++ b/neethi/test/policies/Policy-for-Input-in-Operation-1A-in-relation-to-Endpoint-1A.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Input-in-Operation-1A-in-relation-to-Endpoint-1B.xml b/neethi/test/policies/Policy-for-Input-in-Operation-1A-in-relation-to-Endpoint-1B.xml new file mode 100644 index 0000000..c88dafa --- /dev/null +++ b/neethi/test/policies/Policy-for-Input-in-Operation-1A-in-relation-to-Endpoint-1B.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Input-in-Operation-1B-in-relation-to-Endpoint-1A.xml b/neethi/test/policies/Policy-for-Input-in-Operation-1B-in-relation-to-Endpoint-1A.xml new file mode 100644 index 0000000..2885491 --- /dev/null +++ b/neethi/test/policies/Policy-for-Input-in-Operation-1B-in-relation-to-Endpoint-1A.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Input-in-Operation-1B-in-relation-to-Endpoint-1B.xml b/neethi/test/policies/Policy-for-Input-in-Operation-1B-in-relation-to-Endpoint-1B.xml new file mode 100644 index 0000000..187a7b7 --- /dev/null +++ b/neethi/test/policies/Policy-for-Input-in-Operation-1B-in-relation-to-Endpoint-1B.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Input-in-Operation-2A-in-relation-to-Endpoint-2A.xml b/neethi/test/policies/Policy-for-Input-in-Operation-2A-in-relation-to-Endpoint-2A.xml new file mode 100644 index 0000000..60e9575 --- /dev/null +++ b/neethi/test/policies/Policy-for-Input-in-Operation-2A-in-relation-to-Endpoint-2A.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Input-in-Operation-2A-in-relation-to-Endpoint-2B.xml b/neethi/test/policies/Policy-for-Input-in-Operation-2A-in-relation-to-Endpoint-2B.xml new file mode 100644 index 0000000..59cc4fa --- /dev/null +++ b/neethi/test/policies/Policy-for-Input-in-Operation-2A-in-relation-to-Endpoint-2B.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Input-in-Operation-2B-in-relation-to-Endpoint-2A.xml b/neethi/test/policies/Policy-for-Input-in-Operation-2B-in-relation-to-Endpoint-2A.xml new file mode 100644 index 0000000..ee38033 --- /dev/null +++ b/neethi/test/policies/Policy-for-Input-in-Operation-2B-in-relation-to-Endpoint-2A.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Input-in-Operation-2B-in-relation-to-Endpoint-2B.xml b/neethi/test/policies/Policy-for-Input-in-Operation-2B-in-relation-to-Endpoint-2B.xml new file mode 100644 index 0000000..883dcda --- /dev/null +++ b/neethi/test/policies/Policy-for-Input-in-Operation-2B-in-relation-to-Endpoint-2B.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Operation-1A-in-relation-to-Endpoint-1A.xml b/neethi/test/policies/Policy-for-Operation-1A-in-relation-to-Endpoint-1A.xml new file mode 100644 index 0000000..dfccd95 --- /dev/null +++ b/neethi/test/policies/Policy-for-Operation-1A-in-relation-to-Endpoint-1A.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Operation-1A-in-relation-to-Endpoint-1B.xml b/neethi/test/policies/Policy-for-Operation-1A-in-relation-to-Endpoint-1B.xml new file mode 100644 index 0000000..f86c59d --- /dev/null +++ b/neethi/test/policies/Policy-for-Operation-1A-in-relation-to-Endpoint-1B.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Operation-1B-in-relation-to-Endpoint-1A.xml b/neethi/test/policies/Policy-for-Operation-1B-in-relation-to-Endpoint-1A.xml new file mode 100644 index 0000000..1f39527 --- /dev/null +++ b/neethi/test/policies/Policy-for-Operation-1B-in-relation-to-Endpoint-1A.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Operation-1B-in-relation-to-Endpoint-1B.xml b/neethi/test/policies/Policy-for-Operation-1B-in-relation-to-Endpoint-1B.xml new file mode 100644 index 0000000..180e72f --- /dev/null +++ b/neethi/test/policies/Policy-for-Operation-1B-in-relation-to-Endpoint-1B.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Operation-2A-in-relation-to-Endpoint-2A.xml b/neethi/test/policies/Policy-for-Operation-2A-in-relation-to-Endpoint-2A.xml new file mode 100644 index 0000000..07efde6 --- /dev/null +++ b/neethi/test/policies/Policy-for-Operation-2A-in-relation-to-Endpoint-2A.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Operation-2A-in-relation-to-Endpoint-2B.xml b/neethi/test/policies/Policy-for-Operation-2A-in-relation-to-Endpoint-2B.xml new file mode 100644 index 0000000..071fe79 --- /dev/null +++ b/neethi/test/policies/Policy-for-Operation-2A-in-relation-to-Endpoint-2B.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Operation-2B-in-relation-to-Endpoint-2A.xml b/neethi/test/policies/Policy-for-Operation-2B-in-relation-to-Endpoint-2A.xml new file mode 100644 index 0000000..2356e7e --- /dev/null +++ b/neethi/test/policies/Policy-for-Operation-2B-in-relation-to-Endpoint-2A.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Operation-2B-in-relation-to-Endpoint-2B.xml b/neethi/test/policies/Policy-for-Operation-2B-in-relation-to-Endpoint-2B.xml new file mode 100644 index 0000000..2a1787b --- /dev/null +++ b/neethi/test/policies/Policy-for-Operation-2B-in-relation-to-Endpoint-2B.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-OutFault-in-Operation-1A-in-relation-to-Endpoint-1A.xml b/neethi/test/policies/Policy-for-OutFault-in-Operation-1A-in-relation-to-Endpoint-1A.xml new file mode 100644 index 0000000..084aa48 --- /dev/null +++ b/neethi/test/policies/Policy-for-OutFault-in-Operation-1A-in-relation-to-Endpoint-1A.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-OutFault-in-Operation-1A-in-relation-to-Endpoint-1B.xml b/neethi/test/policies/Policy-for-OutFault-in-Operation-1A-in-relation-to-Endpoint-1B.xml new file mode 100644 index 0000000..7873554 --- /dev/null +++ b/neethi/test/policies/Policy-for-OutFault-in-Operation-1A-in-relation-to-Endpoint-1B.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-OutFault-in-Operation-1B-in-relation-to-Endpoint-1A.xml b/neethi/test/policies/Policy-for-OutFault-in-Operation-1B-in-relation-to-Endpoint-1A.xml new file mode 100644 index 0000000..83acbfb --- /dev/null +++ b/neethi/test/policies/Policy-for-OutFault-in-Operation-1B-in-relation-to-Endpoint-1A.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-OutFault-in-Operation-1B-in-relation-to-Endpoint-1B.xml b/neethi/test/policies/Policy-for-OutFault-in-Operation-1B-in-relation-to-Endpoint-1B.xml new file mode 100644 index 0000000..238a6dc --- /dev/null +++ b/neethi/test/policies/Policy-for-OutFault-in-Operation-1B-in-relation-to-Endpoint-1B.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-OutFault-in-Operation-2A-in-relation-to-Endpoint-2A.xml b/neethi/test/policies/Policy-for-OutFault-in-Operation-2A-in-relation-to-Endpoint-2A.xml new file mode 100644 index 0000000..df84817 --- /dev/null +++ b/neethi/test/policies/Policy-for-OutFault-in-Operation-2A-in-relation-to-Endpoint-2A.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-OutFault-in-Operation-2A-in-relation-to-Endpoint-2B.xml b/neethi/test/policies/Policy-for-OutFault-in-Operation-2A-in-relation-to-Endpoint-2B.xml new file mode 100644 index 0000000..83c6448 --- /dev/null +++ b/neethi/test/policies/Policy-for-OutFault-in-Operation-2A-in-relation-to-Endpoint-2B.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-OutFault-in-Operation-2B-in-relation-to-Endpoint-2A.xml b/neethi/test/policies/Policy-for-OutFault-in-Operation-2B-in-relation-to-Endpoint-2A.xml new file mode 100644 index 0000000..e448339 --- /dev/null +++ b/neethi/test/policies/Policy-for-OutFault-in-Operation-2B-in-relation-to-Endpoint-2A.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-OutFault-in-Operation-2B-in-relation-to-Endpoint-2B.xml b/neethi/test/policies/Policy-for-OutFault-in-Operation-2B-in-relation-to-Endpoint-2B.xml new file mode 100644 index 0000000..f0332c8 --- /dev/null +++ b/neethi/test/policies/Policy-for-OutFault-in-Operation-2B-in-relation-to-Endpoint-2B.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Output-in-Operation-1A-in-relation-to-Endpoint-1A.xml b/neethi/test/policies/Policy-for-Output-in-Operation-1A-in-relation-to-Endpoint-1A.xml new file mode 100644 index 0000000..7bb10e5 --- /dev/null +++ b/neethi/test/policies/Policy-for-Output-in-Operation-1A-in-relation-to-Endpoint-1A.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Output-in-Operation-1A-in-relation-to-Endpoint-1B.xml b/neethi/test/policies/Policy-for-Output-in-Operation-1A-in-relation-to-Endpoint-1B.xml new file mode 100644 index 0000000..76493bb --- /dev/null +++ b/neethi/test/policies/Policy-for-Output-in-Operation-1A-in-relation-to-Endpoint-1B.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Output-in-Operation-1B-in-relation-to-Endpoint-1A.xml b/neethi/test/policies/Policy-for-Output-in-Operation-1B-in-relation-to-Endpoint-1A.xml new file mode 100644 index 0000000..f4734e7 --- /dev/null +++ b/neethi/test/policies/Policy-for-Output-in-Operation-1B-in-relation-to-Endpoint-1A.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Output-in-Operation-1B-in-relation-to-Endpoint-1B.xml b/neethi/test/policies/Policy-for-Output-in-Operation-1B-in-relation-to-Endpoint-1B.xml new file mode 100644 index 0000000..4bffd4e --- /dev/null +++ b/neethi/test/policies/Policy-for-Output-in-Operation-1B-in-relation-to-Endpoint-1B.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Output-in-Operation-2A-in-relation-to-Endpoint-2A.xml b/neethi/test/policies/Policy-for-Output-in-Operation-2A-in-relation-to-Endpoint-2A.xml new file mode 100644 index 0000000..3cdbe39 --- /dev/null +++ b/neethi/test/policies/Policy-for-Output-in-Operation-2A-in-relation-to-Endpoint-2A.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Output-in-Operation-2A-in-relation-to-Endpoint-2B.xml b/neethi/test/policies/Policy-for-Output-in-Operation-2A-in-relation-to-Endpoint-2B.xml new file mode 100644 index 0000000..54be84f --- /dev/null +++ b/neethi/test/policies/Policy-for-Output-in-Operation-2A-in-relation-to-Endpoint-2B.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Output-in-Operation-2B-in-relation-to-Endpoint-2A.xml b/neethi/test/policies/Policy-for-Output-in-Operation-2B-in-relation-to-Endpoint-2A.xml new file mode 100644 index 0000000..a891bfc --- /dev/null +++ b/neethi/test/policies/Policy-for-Output-in-Operation-2B-in-relation-to-Endpoint-2A.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Output-in-Operation-2B-in-relation-to-Endpoint-2B.xml b/neethi/test/policies/Policy-for-Output-in-Operation-2B-in-relation-to-Endpoint-2B.xml new file mode 100644 index 0000000..4dfc80a --- /dev/null +++ b/neethi/test/policies/Policy-for-Output-in-Operation-2B-in-relation-to-Endpoint-2B.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Service-1.xml b/neethi/test/policies/Policy-for-Service-1.xml new file mode 100644 index 0000000..a94a159 --- /dev/null +++ b/neethi/test/policies/Policy-for-Service-1.xml @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/neethi/test/policies/Policy-for-Service-2.xml b/neethi/test/policies/Policy-for-Service-2.xml new file mode 100644 index 0000000..b57b6cf --- /dev/null +++ b/neethi/test/policies/Policy-for-Service-2.xml @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/neethi/test/policies/PolicyAttachments.wsdl b/neethi/test/policies/PolicyAttachments.wsdl new file mode 100644 index 0000000..acf07c1 --- /dev/null +++ b/neethi/test/policies/PolicyAttachments.wsdl @@ -0,0 +1,448 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/neethi/test/policies/asymmetric_binding_policy.xml b/neethi/test/policies/asymmetric_binding_policy.xml new file mode 100644 index 0000000..da136af --- /dev/null +++ b/neethi/test/policies/asymmetric_binding_policy.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Alice + 360 + a + Digest + AXIS2C_HOME/bin/samples/rampart/callback/libpwcb.so + AXIS2C_HOME/bin/samples/rampart/keys/ahome/bob_cert.cert + AXIS2C_HOME/bin/samples/rampart/keys/ahome/alice_cert.cert + AXIS2C_HOME/bin/samples/rampart/keys/ahome/alice_key.pem + + + + diff --git a/neethi/test/policies/rm-1.0.xml b/neethi/test/policies/rm-1.0.xml new file mode 100644 index 0000000..353e1ba --- /dev/null +++ b/neethi/test/policies/rm-1.0.xml @@ -0,0 +1,21 @@ + + + + + + + + + /tmp/sandesha2_db + 64 + persistent + none + 10 + 1 + 1 + 4 + 4 + + + + diff --git a/neethi/test/policies/rm-1.1.xml b/neethi/test/policies/rm-1.1.xml new file mode 100644 index 0000000..6c60dbc --- /dev/null +++ b/neethi/test/policies/rm-1.1.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + 600000 + 200 + 300 + /tmp/sandesha2_db + persistent + none + 10 + 1 + 1 + 4 + 4 + + + + diff --git a/neethi/test/policies/symmetric_binding_policy.xml b/neethi/test/policies/symmetric_binding_policy.xml new file mode 100644 index 0000000..3db3ed8 --- /dev/null +++ b/neethi/test/policies/symmetric_binding_policy.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Alice + 360 + a + Digest + AXIS2C_HOME/bin/samples/rampart/callback/libpwcb.so + AXIS2C_HOME/bin/samples/rampart/keys/ahome/bob_cert.cert + AXIS2C_HOME/bin/samples/rampart/keys/ahome/alice_cert.cert + AXIS2C_HOME/bin/samples/rampart/keys/ahome/alice_key.pem + + + + diff --git a/neethi/test/security_context_token/build.sh b/neethi/test/security_context_token/build.sh new file mode 100644 index 0000000..6a5714d --- /dev/null +++ b/neethi/test/security_context_token/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gcc security_context_token_test.c ../../../util/test/util/create_env.c -Werror -g -I$AXIS2C_HOME/include/axis2-1.2 -L$AXIS2C_HOME/lib -lneethi -laxutil -laxis2_axiom -laxis2_parser -o security_context_token diff --git a/neethi/test/security_context_token/security_context_token_test.c b/neethi/test/security_context_token/security_context_token_test.c new file mode 100644 index 0000000..6f320f3 --- /dev/null +++ b/neethi/test/security_context_token/security_context_token_test.c @@ -0,0 +1,54 @@ +#include +#include "../../../util/test/util/create_env.h" + +axutil_env_t *env = NULL; +rp_security_context_token_t * security_context_token = NULL; +axis2_char_t * inclusion = NULL ; +axis2_status_t status = AXIS2_FAILURE ; +axis2_bool_t derivedkeys ; +axis2_bool_t require_external_uri_ref; +axis2_bool_t sc10_security_context_token; + +/** @brief test options + * build a om from a client options + */ + +axis2_status_t test_security_context_token(axutil_env_t *env) +{ + security_context_token = rp_security_context_token_create(env); + inclusion = rp_security_context_token_get_inclusion(security_context_token,env); + printf("%s\n",inclusion); + status = rp_security_context_token_set_inclusion(security_context_token,env,inclusion); + if (status == AXIS2_SUCCESS) + printf("rp security context token set is success\n"); + derivedkeys = rp_security_context_token_get_derivedkeys(security_context_token,env); + status = rp_security_context_token_set_derivedkeys(security_context_token,env,derivedkeys); + if (status == AXIS2_SUCCESS) + printf("rp security token derivedkeys set is success\n"); + require_external_uri_ref = rp_security_context_token_get_require_external_uri_ref(security_context_token,env); + status = rp_security_context_token_set_require_external_uri_ref(security_context_token,env,require_external_uri_ref); + if (status == AXIS2_SUCCESS) + printf("rp security require external uri set is success\n"); + sc10_security_context_token = rp_security_context_token_get_sc10_security_context_token(security_context_token,env); + status = rp_security_context_token_set_sc10_security_context_token(security_context_token,env,sc10_security_context_token); + if (status == AXIS2_SUCCESS) + printf("rp security sc10 security token set is success\n"); + rp_security_context_token_increment_ref(security_context_token,env); + rp_security_context_token_free(security_context_token,env); + return AXIS2_SUCCESS; +} +int main() +{ + int status = AXIS2_SUCCESS; + env = create_environment(); + status = test_security_context_token(env); + if(status == AXIS2_FAILURE) + { + printf(" test failed"); + } + axutil_env_free(env); + return 0; +} + + + diff --git a/neethi/test/test-policy.xml b/neethi/test/test-policy.xml new file mode 100644 index 0000000..8e44f90 --- /dev/null +++ b/neethi/test/test-policy.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/neethi/test/test-resources/different-level-policies.xml b/neethi/test/test-resources/different-level-policies.xml new file mode 100644 index 0000000..de5a707 --- /dev/null +++ b/neethi/test/test-resources/different-level-policies.xml @@ -0,0 +1,109 @@ + + sec_echo + + + This is a testing service , to test the system is working or not + + + + http://example.com/ws/2004/09/policy/Test/EchoRequest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bob + 360 + b + Digest + /home/manjula/axis2/c/deploy/bin/samples/rampart/callback/libpwcb.so + /home/manjula/axis2/c/deploy/bin/samples/rampart/keys/bhome/alice_cert.cert + /home/manjula/axis2/c/deploy/bin/samples/rampart/keys/bhome/bob_cert.cert + /home/manjula/axis2/c/deploy/bin/samples/rampart/keys/bhome/bob_key.pem + + + + + diff --git a/neethi/test/test-resources/echo-services.xml b/neethi/test/test-resources/echo-services.xml new file mode 100644 index 0000000..c7fc88b --- /dev/null +++ b/neethi/test/test-resources/echo-services.xml @@ -0,0 +1,115 @@ + + echo + + + This is a testing service , to test the system is working or not + + + + http://ws.apache.org/axis2/c/samples/echoString + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alice + bob + org.apache.rampart.PWCallback + + + + JKS + store.jks + password + + + + + JKS + store.jks + password + + + + + + + + + diff --git a/neethi/test/test-resources/message-services-sc.xml b/neethi/test/test-resources/message-services-sc.xml new file mode 100644 index 0000000..2f293df --- /dev/null +++ b/neethi/test/test-resources/message-services-sc.xml @@ -0,0 +1,116 @@ + + + + + + org.apache.rampart.Service + + + + urn:echo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alice + bob + org.apache.rampart.PWCallback + + + + JKS + store.jks + password + + + + + JKS + store.jks + password + + + + + + + + + diff --git a/neethi/test/test-resources/services-1.xml b/neethi/test/test-resources/services-1.xml new file mode 100644 index 0000000..4c727d3 --- /dev/null +++ b/neethi/test/test-resources/services-1.xml @@ -0,0 +1,51 @@ + + + + + + org.apache.rampart.Service + + + + urn:echo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alice + org.apache.rampart.PWCallback + + + + + + + diff --git a/neethi/test/test-resources/services-2.xml b/neethi/test/test-resources/services-2.xml new file mode 100644 index 0000000..ec80dd5 --- /dev/null +++ b/neethi/test/test-resources/services-2.xml @@ -0,0 +1,76 @@ + + + + + + org.apache.rampart.Service + + + + urn:echo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alice + bob + org.apache.rampart.PWCallback + + + + JKS + store.jks + password + + + + + + + + diff --git a/neethi/test/test-resources/services-3.xml b/neethi/test/test-resources/services-3.xml new file mode 100644 index 0000000..3d1bf60 --- /dev/null +++ b/neethi/test/test-resources/services-3.xml @@ -0,0 +1,88 @@ + + + + + + org.apache.rampart.Service + + + + urn:echo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alice + bob + org.apache.rampart.PWCallback + + + + JKS + store.jks + password + + + + + JKS + store.jks + password + + + + + + + + + diff --git a/neethi/test/test-resources/services-4.xml b/neethi/test/test-resources/services-4.xml new file mode 100644 index 0000000..537164f --- /dev/null +++ b/neethi/test/test-resources/services-4.xml @@ -0,0 +1,89 @@ + + + + + + org.apache.rampart.Service + + + + urn:echo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alice + bob + org.apache.rampart.PWCallback + + + + JKS + store.jks + password + + + + + JKS + store.jks + password + + + + + + + + + diff --git a/neethi/test/test-resources/services-5.xml b/neethi/test/test-resources/services-5.xml new file mode 100644 index 0000000..64fcecb --- /dev/null +++ b/neethi/test/test-resources/services-5.xml @@ -0,0 +1,89 @@ + + + + + + org.apache.rampart.Service + + + + urn:echo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alice + bob + org.apache.rampart.PWCallback + + + + JKS + store.jks + password + + + + + JKS + store.jks + password + + + + + + + + diff --git a/neethi/test/test-resources/services-6.xml b/neethi/test/test-resources/services-6.xml new file mode 100644 index 0000000..ff37936 --- /dev/null +++ b/neethi/test/test-resources/services-6.xml @@ -0,0 +1,86 @@ + + + + + + org.apache.rampart.Service + + + + urn:echo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alice + bob + org.apache.rampart.PWCallback + + + + JKS + store.jks + password + + + + + JKS + store.jks + password + + + + + + + diff --git a/neethi/test/test-resources/services-7.xml b/neethi/test/test-resources/services-7.xml new file mode 100644 index 0000000..b476623 --- /dev/null +++ b/neethi/test/test-resources/services-7.xml @@ -0,0 +1,89 @@ + + + + + + org.apache.rampart.Service + + + + urn:echo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alice + bob + org.apache.rampart.PWCallback + + + + JKS + store.jks + password + + + + + JKS + store.jks + password + + + + + + + + diff --git a/neethi/test/test-resources/services-8.xml b/neethi/test/test-resources/services-8.xml new file mode 100644 index 0000000..5e67653 --- /dev/null +++ b/neethi/test/test-resources/services-8.xml @@ -0,0 +1,89 @@ + + + + + + org.apache.rampart.Service + + + + urn:echo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alice + useReqSigCert + org.apache.rampart.PWCallback + + + + JKS + store.jks + password + + + + + JKS + store.jks + password + + + + + + + + diff --git a/neethi/test/test-resources/services-9.xml b/neethi/test/test-resources/services-9.xml new file mode 100644 index 0000000..fbf1eda --- /dev/null +++ b/neethi/test/test-resources/services-9.xml @@ -0,0 +1,87 @@ + + + + + + org.apache.rampart.Service + + + + urn:echo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alice + bob + org.apache.rampart.PWCallback + + + + JKS + store.jks + password + + + + + JKS + store.jks + password + + + + + + + diff --git a/neethi/test/test-resources/services-sc-1.xml b/neethi/test/test-resources/services-sc-1.xml new file mode 100644 index 0000000..1bd254f --- /dev/null +++ b/neethi/test/test-resources/services-sc-1.xml @@ -0,0 +1,176 @@ + + + + + + + org.apache.rampart.Service + + + + urn:echo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alice + bob + org.apache.rampart.PWCallback + + + + JKS + store.jks + password + + + + + JKS + store.jks + password + + + + + + + + + + + + JKS + sts.jks + password + + + + + + + 3 + + + BinarySecret + + + + + + + + + + + + + diff --git a/neethi/test/test-resources/services-sc-2.xml b/neethi/test/test-resources/services-sc-2.xml new file mode 100644 index 0000000..2d0febe --- /dev/null +++ b/neethi/test/test-resources/services-sc-2.xml @@ -0,0 +1,186 @@ + + + + + + + org.apache.rampart.Service + + + + urn:echo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bob + alice + org.apache.rampart.PWCallback + + + + JKS + store.jks + password + + + + + JKS + store.jks + password + + + + + + + + + + + + + JKS + sts.jks + password + + + + + + + 3 + + + BinarySecret + + + + + + + + + + + + + diff --git a/neethi/test/test.c b/neethi/test/test.c new file mode 100644 index 0000000..9585599 --- /dev/null +++ b/neethi/test/test.c @@ -0,0 +1,239 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +axis2_status_t AXIS2_CALL om_node_serialize( + axiom_node_t * node, + const axutil_env_t * env); + +int +main( + int argc, + char **argv) +{ + /*axutil_allocator_t *allocator = axutil_allocator_init(NULL); + axutil_error_t *error = axutil_error_create(allocator); + const axutil_env_t *env = axutil_env_create_with_error(allocator, error);*/ + const axutil_env_t *env = NULL; + axiom_xml_reader_t *reader = NULL; + axiom_stax_builder_t *builder = NULL; + axiom_document_t *document = NULL; + axiom_node_t *root = NULL; + axiom_element_t *root_ele = NULL; + + env = axutil_env_create_all("test.log", AXIS2_LOG_LEVEL_TRACE); + + reader = axiom_xml_reader_create_for_file(env, argv[1], NULL); + + if (!reader) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CREATING_XML_STREAM_READER, + AXIS2_FAILURE); + printf("xml reader creation failed\n"); + return 0; + } + + builder = axiom_stax_builder_create(env, reader); + if (!builder) + { + axiom_xml_reader_free(reader, env); + printf("Builder creation failed\n"); + return 0; + } + document = axiom_stax_builder_get_document(builder, env); + if (!document) + { + axiom_stax_builder_free(builder, env); + printf("Document creation failed\n"); + return 0; + } + + /*root = axiom_document_get_root_element(document, env); */ + root = axiom_document_build_all(document, env); + if (!root) + { + axiom_stax_builder_free(builder, env); + return 0; + } + + if (root) + { + if (axiom_node_get_node_type(root, env) == AXIOM_ELEMENT) + { + root_ele = + (axiom_element_t *) axiom_node_get_data_element(root, env); + if (root_ele) + { + neethi_policy_t *neethi_policy = NULL; + neethi_policy = neethi_engine_get_policy(env, root, root_ele); + if (!neethi_policy) + { + printf("Policy Creation fails\n"); + return 0; + } + + if(neethi_policy) + { + axis2_char_t *id = NULL; + axis2_char_t *name = NULL; + + id = neethi_policy_get_id(neethi_policy, env); + if(id) + { + printf("Id is : %s\n", id); + } + name = neethi_policy_get_name(neethi_policy, env); + if(name) + { + printf("Name is : %s\n", name); + } + neethi_policy_free(neethi_policy, env); + neethi_policy = NULL; + + printf("Successful \n"); + } + + /*else + { + axiom_node_t *s_node = NULL; + s_node = neethi_engine_serialize(neethi_policy, env); + if (!s_node) + { + printf("Serializing failed\n"); + return 0; + } + if (om_node_serialize(s_node, env) != AXIS2_SUCCESS) + return 0; + }*/ + } + } + } + + if(builder) + { + axiom_stax_builder_free(builder, env); + builder = NULL; + } + + axutil_env_free((axutil_env_t *)env); + env = NULL; + + printf("Successful\n"); + return 0; + +} + +axis2_status_t AXIS2_CALL +om_node_serialize( + axiom_node_t * node, + const axutil_env_t * env) +{ + + axiom_output_t *om_output = NULL; + axiom_xml_writer_t *writer = NULL; + axis2_char_t *output_buffer = NULL; + axis2_status_t status = AXIS2_FAILURE; + + writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_output = axiom_output_create(env, writer); + + status = axiom_node_serialize(node, env, om_output); + if (status != AXIS2_SUCCESS) + { + printf("\naxiom_node_serialize failed\n"); + return 0; + } + else + printf("\naxiom_node_serialize success\n"); + /* end serializing stuff */ + + /*axiom_node_free_tree(node1, environment); */ + output_buffer = (axis2_char_t *) axiom_xml_writer_get_xml(writer, env); + + printf("\nend test_om_serialize\n"); + + return AXIS2_SUCCESS; + +} + +axutil_array_list_t *AXIS2_CALL +load_policy_array( + int argc, + char **argv, + const axutil_env_t * env) +{ + + axiom_xml_reader_t *reader = NULL; + axiom_stax_builder_t *builder = NULL; + axiom_document_t *document = NULL; + axiom_node_t *root = NULL; + axiom_element_t *root_ele = NULL; + int i = 0; + axutil_array_list_t *arraylist = NULL; + + arraylist = axutil_array_list_create(env, 0); + + for (i = 1; i < argc; i++) + { + reader = axiom_xml_reader_create_for_file(env, argv[i], NULL); + + if (!reader) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CREATING_XML_STREAM_READER, + AXIS2_FAILURE); + printf("xml reader creation failed\n"); + return NULL; + } + + builder = axiom_stax_builder_create(env, reader); + if (!builder) + { + axiom_xml_reader_free(reader, env); + printf("Builder creation failed\n"); + return NULL; + } + document = axiom_stax_builder_get_document(builder, env); + if (!document) + { + axiom_stax_builder_free(builder, env); + printf("Document creation failed\n"); + return NULL; + } + + /*root = axiom_document_get_root_element(document, env); */ + root = axiom_document_build_all(document, env); + if (!root) + { + axiom_stax_builder_free(builder, env); + return NULL; + } + if (root) + { + if (axiom_node_get_node_type(root, env) == AXIOM_ELEMENT) + { + root_ele = + (axiom_element_t *) axiom_node_get_data_element(root, env); + if (root_ele) + { + neethi_policy_t *neethi_policy = NULL; + neethi_policy = + neethi_engine_get_policy(env, root, root_ele); + if (!neethi_policy) + { + printf("Policy Creation fails\n"); + return NULL; + } + axutil_array_list_add(arraylist, env, neethi_policy); + } + } + } + } + return arraylist; +} diff --git a/project.properties b/project.properties new file mode 100644 index 0000000..a951975 --- /dev/null +++ b/project.properties @@ -0,0 +1,30 @@ +# ------------------------------------------------------------------- +# Copyright 2001-2004 The Apache Software Foundation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------- + +axis2_version=1.6.0 +maven.xdoc.date=left +maven.xdoc.version=${pom.currentVersion} +maven.xdoc.includeProjectDocumentation=no +maven.html2xdoc.enabled=true +maven.html2xdoc.dir=./xdocs +maven.pdf.navigationFile=navigation-pdf.xml +maven.allreports.disable=true +maven.xdoc.theme=classic +maven.ui.navcol.background=#fff +maven.ui.navcol.background.ns4=#fff +maven.ui.banner.border.top=#fff +maven.ui.banner.border.bottom=#fff +maven.ui.banner.background=#fff diff --git a/project.xml b/project.xml new file mode 100644 index 0000000..b5aafea --- /dev/null +++ b/project.xml @@ -0,0 +1,328 @@ + + + + + 3 + + + Apache Axis2/C + axis2c + axis2c + ${axis2_version} + + + + Apache Software Foundation + http://www.apache.org/ + http://www.apache.org/images/asf-logo.gif + + + 2005 + http://ws.apache.org/axis2/images/axis.jpg + Axis2 is an effort to re-design and totally re-implement both Axis/Java and (eventually) Axis/C++ on a new architecture. Evolving from the now standard "handler chain" model which Axis1 pioneered, Axis2 is developing a more flexible pipeline architecture which can yet be managed and packaged in a more organized manner. This new design acknowledges the maturing of the Web services space in terms of new protocols such as WS-ReliableMessaging, WS-Security and WS-Addressing that are built on top of the base SOAP system. At the time Axis1 was designed, while it was fully expected that other protocols such as WS-ReliableMessaging would be built on top of it, there was not a proper extension architecture defined to enable clean composition of such layers. Thus, one of the key motivations for Axis2 is to provide a clean and simple environment for like Apache Sandesha and Apache WSS4J to layer on top of the base SOAP system. Another driving force for Axis2 as well as the move away from RPC oriented Web services towards more document-oriented, message style asynchronous service interactions. The Axis2 project is centered on a new representation for SOAP messages called AXIOM (AXIs Object Model). AXIOM consists of two parts: a complete XML Infoset representation and a SOAP Infoset representation on top of that. The XML Infoset representation provides a JDOM-like simple API but is built on a deferred model via a StAX-based (Streaming API for XML) pull parsing API. A key feature of AXIOM is that it allows one to stop building the XML tree and just access the pull stream directly; thus enabling both maximum flexibility and maximum performance. This approach allows us to support multiple levels of abstraction for consuming and offering Web services: using plain AXIOM, using generated code and statically data-bound data types and so on. At the time of Axis1's design, RPC-style, synchronous, request-response interactions were the order of the day for Web services. Today service interactions are much more message + -oriented and exploit many different message exchange patterns. The Axis2 engine architecture is careful to not build in any assumptions of request-response patterns to ensure that it can be used easily to support arbitrary message exchange patterns. + Axis2 C + + http://ws.apache.org/axis2/c + http://issues.apache.org/jira/browse/AXIS2C + ws.apache.org/axis2/c + /www/ws.apache.org/axis2/c + /www/ws.apache.org/builds/c + + scm|svn|http://svn.apache.org/repos/asf/webservices/axis2/trunk/c + scm|svn|https://svn.apache.org/repos/asf/webservices/axis2/trunk/c + https://svn.apache.org/repos/asf/webservices/axis2/trunk/c/ + + + + Axis C Developer List + axis-c-dev-subscribe@ws.apache.org?subject=subscribe + axis-c-dev-unsubscribe@ws.apache.org?subject=unsubscribe + http://marc.theaimsgroup.com/?l=axis-c-dev&r=1&w=2 + + http://markmail.org/search/list:org.apache.ws.axis-c-dev + + + + Axis C User List + axis-c-user-subscribe@ws.apache.org?subject=subscribe + axis-c-user-unsubscribe@ws.apache.org?subject=unsubscribe + http://marc.theaimsgroup.com/?l=axis-c-user&r=1&w=2 + + http://markmail.org/search/list:org.apache.ws.axis-c-user + + + + CVS Commit Message List + axis-cvs-subscribe@ws.apache.org + axis-cvs-unsubscribe@ws.apache.org + axis-cvs@ws.apache.org + http://markmail.org/search/list:org.apache.ws.axis-cvs + + + + + + + + + Samisa Abeysinghe + samisa + samisa AT wso2 DOT com + WSO2 + + + Dushshantha Chandradasa + dushshantha + dushshantha AT wso2 DOT com + WSO2 + + + Chris Darroch + chrisd + chrisd AT pearsoncmg DOT com + Pearson Education Core Technology Group + + + Senaka Fernando + senaka + senaka AT wso2 DOT com + WSO2 + + + Paul Fremantle + pzf + paul AT wso2 DOT com + WSO2 + + + Dimuthu Gamage + dimuthu + dimuthuc AT gmail DOT com + Univerisity of Moratuwa + + + Sahan Gamage + sahan + sahans AT gmail DOT com + Purdue University + + + Lahiru Gunathilake + lahiru + glahiru@gmail.com + University of Moratuwa + + + Nandika Jayawardana + nandika + nandika AT wso2 DOT com + WSO2 + + + Supun Kamburugamuva + supun + supun06 AT gmail DOT com + Univerisity of Moratuwa + + + Kaushalye Kapuruge + kaushalye + kaushalye AT wso2 DOT com + WSO2 + + + Damitha Kumarage + damitha + damitha AT wso2 DOT com + WSO2 + + + Bill Mitchell + bmitchell + wtmitchell3 AT acm DOT org + + + + Danushka Menikkumbura + danushka + danushka AT wso2 DOT com + + + + Diluka Moratuwage + diluka + diluka AT wso2 DOT com + + + + Dumindu Pallewela + dumindu + dumindu AT wso2 DOT com + WSO2 + + + Milinda Pathirage + milinda + milinda DOT pathirage AT gmail DOT com + Univerisity of Moratuwa + + + Manjula Peiris + manjula + manjula AT wso2 DOT com + WSO2 + + + Dinesh Premalal + dinesh + dinesh AT wso2 DOT com + WSO2 + + + Sanjaya Rathnaweera + pini + sanjaya AT wso2 DOT com + WSO2 + + + Davanum Srinivas + dims + davanum AT gmail DOT com + + + + Sanjiva Weerawarana + sanjiva + sanjiva AT wso2 DOT com + WSO2 + + + Nabeel Yoosuf + nabeel + nabeel DOT yoosuf AT gmail DOT com + Purdue University + + + Selvaratnam Uthaiyashankar + shankar + shankar AT wso2 DOT com + WSO2 + + + + + James Clark + jjc AT public DOT jclark DOT com + + Technical Adviser on Building a Portable/Re-usable C library + + + + Spencer Davis + spencerdavis91 AT gmail DOT com + + Composing Axis2/C FAQ Documentation + + + + Alastair FETTES + afettes AT mdacorporation DOT com + + Suggestion to improve API and several inputs through JIRA + + + + Frederic Heem + frederic DOT heem AT telsey DOT it + + Suggestions for improvements through Jiras and Bug fixes + + + + Rajika Kumarasiri + rajikacc AT gmail DOT com + + Bug Fixes + + + + Manoj Pushpakumara + manaj AT wso2 DOT com + + Improvements to the Unit Test cases + + + + Buddhika Semashinghe + buddhika AT wso2 DOT com + + Helps to improve overall quality of the code base + + + + Varuna Jayasiri + vpjayasiri AT gmail DOT com + + Axiom XPath implementation + + + + Nikola Tankovic + nikola DOT tankovic AT gmail DOT com + + CGI deployment support + + + + + + + + + + + + + + + + + axis-c-dev@apache.org + ${basedir}/src + ${basedir}/src/test + + + + **/_test*.c + + + **/*Test*All.c + + + + + + + + + maven-changes-plugin + + + diff --git a/release_process b/release_process new file mode 100644 index 0000000..b69133b --- /dev/null +++ b/release_process @@ -0,0 +1,141 @@ +AXIS2/C release process +========================== + +1. Get a svn checkout from the trunk. +2. Change the version numbers and update the following files. + * ChangeLog + NEWSaxis2.pc + samples/ChangeLog + axutil_version.h + axis2.pc.in + config.h + doxygenconf + AUTHORS (if there are new) + NOTICE (for years) + NEWS + project.xml + samples/AUTHORS + samples/configure.ac + configure.ac & Makefile.am (in configure.ac change the VERSION_NO also) + util, util/include, guththila, axiom, neethi, samples, tools/tcpmon, tools/md5 + INSTALL file + project.properties + build/win32/makefile + + +3. Update the documents inside xdocs + * download.html + * index.html + * installationguide.html + * axis2c_manual + +4. Run the build.sh + make sure for the configure option you have the following. + sh configure --prefix=${AXIS2C_HOME} --enable-tests=yes --with-apache2=/usr/local/apache2/include --enable-tcp=yes --with-archive=/usr/include + +5. Create the source distribution + * Should have maven 1.0.2 installed (for "maven site" command) + * make dist + +6. Create the binay distribution + * make bindist + +7. Test the source and binary distributions + +8. Test the source distribution in Windows and create the Sorce zip + and the windows binary + + Building Windows Binary + -------------------------- + + Edit the build/win32/configure.in as follows + + * CRUNTIME = /MT + * EMBED_MANIFEST = 0 + * DEBUG = 0 + + To create the binary distribution + + * nmake dist + + +9. Sign the packs + * use existing key pair if you have + * To create a new key pair + gpg --gen-key + key selection default + key size 2048 + key never expire + real name:Manjula Peiris + comment: + generated user id is: + "Manjula Peiris" + passphrase temp_12_word + + keys will be created in ~/.gnupg directory. + + * cd to the directory which contains the pack and export keys + gpg --armor --export manjula@wso2.com > KEYS + + generated message is: + You need a Passphrase to protect your secret key. + by default key is created in ~/.gnupg + + * Use following script to sign the keys + + #!/bin/bash + + SRC_TAR_GZ=axis2c-src-1.6.0.tar.gz + LIN_BIN_TAR_GZ=axis2c-bin-1.6.0-linux.tar.gz + SRC_ZIP=axis2c-src-1.6.0.zip + WIN32_BIN_ZIP=axis2c-bin-1.6.0-win32.zip + SRC_TAR_GZ_MD5=$SRC_TAR_GZ.md5 + LIN_BIN_TAR_GZ_MD5=$LIN_BIN_TAR_GZ.md5 + SRC_ZIP_MD5=$SRC_ZIP.md5 + WIN32_BIN_ZIP_MD5=$WIN32_BIN_ZIP.md5 + SRC_TAR_GZ_ASC=$SRC_TAR_GZ.asc + LIN_BIN_TAR_GZ_ASC=$LIN_BIN_TAR_GZ.asc + SRC_ZIP_ASC=$SRC_ZIP.asc + WIN32_BIN_ZIP_ASC=$WIN32_BIN_ZIP.asc + + rm -f *.asc + rm -f *.md5 + + echo "Creating MD5" + openssl md5 < $SRC_TAR_GZ > $SRC_TAR_GZ_MD5 + openssl md5 < $LIN_BIN_TAR_GZ > $LIN_BIN_TAR_GZ_MD5 + openssl md5 < $SRC_ZIP > $SRC_ZIP_MD5 + openssl md5 < $WIN32_BIN_ZIP > $WIN32_BIN_ZIP_MD5 + + echo "To sign please enter password for the private key" + gpg --armor --output $SRC_TAR_GZ_ASC --detach-sig $SRC_TAR_GZ + gpg --armor --output $LIN_BIN_TAR_GZ_ASC --detach-sig $LIN_BIN_TAR_GZ + gpg --armor --output $SRC_ZIP_ASC --detach-sig $SRC_ZIP + gpg --armor --output $WIN32_BIN_ZIP_ASC --detach-sig $WIN32_BIN_ZIP + + echo "DONE" + +10. Copy the source, binary packs to your directory in people.apache.org + + rm -rf 1.6.0 + rm -f 1.6.0.tar.gz + mkdir 1.6.0 + cp -f ../KEYS 1.6.0 + cp -f axis2c-* 1.6.0 + tar -zcf axis2c_1.6.0.tar.gz 1.6.0 + scp axis2c_1.6.0.tar.gz manjula@people.apache.org:~/ + +11. Put RCs till all the packs are throughly tested and there are no more + known issues. +12. Then upload the release packs to your directory at apache +13. Call for vote +14. When the required number of votes is received, upload the release. + Copy the release from your home to /www/www.apache.org/dist/ws/axis2-c/ + update the keys (cat KEYS >> /www/www.apache.org/dist/ws/axis2-c/KEYS) + Move earlier releases to archive.apache.org (/www/archive.apache.org/dist/ws/axis2/c/) + Update the site at [WWW] https://svn.apache.org/repos/asf/webservices/axis2/site/c/ + svn update the site at /www/ws.apache.org/axis2/c + Test Main Site Downloads (wait until mirros pickup the distributables, before sending the release note.) + +15. When the site is updated announce the release. + diff --git a/samples/AUTHORS b/samples/AUTHORS new file mode 100644 index 0000000..1dcb019 --- /dev/null +++ b/samples/AUTHORS @@ -0,0 +1,26 @@ +Developers +---------- +Samisa Abeysinghe +Dushshantha Chandradasa +Chris Darroch +Senaka Fernando +Paul Fremantle +Dimuthu Gamage +Sahan Gamage +Lahiru Gunathilake +Nandika Jayawardana +Supun Kamburugamuva +Kaushalye Kapuruge +Damitha Kumarage +Danushka Menikkumbura +Bill Mitchell +Diluka Moratuwage +Dumindu Pallewela +Milinda Pathirage +Manjula Peiris +Dinesh Premalal +Sanjaya Rathnaweera +Davanum Srinivas +Selvaratnam Uthaiyashankar +Sanjiva Weerawarana +Nabeel Yoosuf diff --git a/samples/COPYING b/samples/COPYING new file mode 100644 index 0000000..4a67574 --- /dev/null +++ b/samples/COPYING @@ -0,0 +1,203 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + diff --git a/samples/ChangeLog b/samples/ChangeLog new file mode 100644 index 0000000..dab96de --- /dev/null +++ b/samples/ChangeLog @@ -0,0 +1,215 @@ +Axis2/C (1.6.0) + * XPath support for Axiom XML object model + * CGI support + * Improvements to MTOM to send, receive very large attachments + * Improvements to AMQP transport + * Improvemnets to WSDL2C codegen tool + * Many bug fixes. + * Memory leak fixes + +Axis2/C (1.5.0) + * AMQP Transport support with Apache Qpid. (At an experimental stage. Not working under Windows. Please refer the INSTALL file to build this) + * Modifications to IIS Module to support IIS 6 & 7 + * Added a JScript file to automate IIS module registry configuration + * Improved the in-only message handling + * Specifying the MEP in the services.xml for non in-out messages made mandatory + * Improvements to Guthtila for better performance + * Improvements to TCPMon tool + * Memory leak fixes + * Bug fixes + +Axis2/C (1.4.0) + * Fixed library version numbering + * Made Guththila as default XML parser +-- Axis2/C team Mon,5 May 2008 + +Axis2/C (1.3.0) + * Fixed a bug on version numbering + * List Axis2/C dependencies licensing in LICENSE file + * Add relevant copyright notices to NOTICE file + * Digest Authentication Support + * Proxy Authentication Support + * Enhanced REST support + * Ability to insert xml declaration on outgoing payloads + * MTOM support with libcurl + * Improvements to TCPMon Tool + * Improvements to Test Coverage + * Improvements to API docs + * Improvements to CA certificate validation mechanisms on SSL Transport + * Improvements to Neethi + * Fixed issue in HTTP GET on mod_axis2 + * Major Improvements to Guththila Parser + * Improvements to libcurl based sender + * Creation of a FAQ list + * Improvements to Axis2/C documentation + * Added Documentation on Archive Based Deployment + * Fixes for IIS module + * Removed dependency in util for the Axis2/C core + * Ability to access transport headers at the service level (for RESTful services) + * uint64_t and int64_t support at util layer and codegen level + * Removed zlib dependencies when Archive Based Deployment model is disabled + * Signal Handling in Windows + * Removed over 99% of the warnings found on Windows + * Increased build speed on Windows with nmake. + * Improvements to Windows build system + * Extensions to client API to support HTTP/Proxy Authentication + * Memory leak fixes + * Many bug fixes + +-- Axis2/C team Fri, 29 February 2008 +Axis2/C (1.2.0) + * Improvements to Java tool, WSDL2C, that generates C code + * Improvment to Apache2 module so that it + * Create a shared memory global pool + * create context hierarchy in the global pool + enabling it to have true application level scope. + * Improved Policy + * Improvements to thread environment + * Improvements to error handling + * Memory leak fixes + * Many bug fixes + +-- Axis2/C team Mon, 17 January 2008 +Axis2/C (1.1.0) + * WS-Policy implementation + * TCP Transport + * Improvements to Guththila parser to improve performance + * Improvements to Java tool, WSDL2C, that generates C code + * Basic HTTP Authentication + * Memory leak fixes + * Many bug fixes + +-- Axis2/C team Mon, 24 September 2007 + +Axis2/C (1.0.0) + * Many Bug Fixes + * IIS module for server side + * libcurl based client transport + * Improvements to overall API to make it more user friendly, stable and binary compatible + * Transport proxy support + * Memory leak fixes +-- Axis2/C team Mon, 30 April 2007 + +Axis2/C (0.96) + * Major Memory leak fixes + * Many Bug Fixes + * Improvement to REST processing + * Improvement to SOAP-Fault processing + * Improvement to mod_axis2 library (plugged with apr pools) + * Visual Studio 7.0 project +-- Axis2/C team Thu, 19 December 2006 + +Axis2/C (0.95) + * Major Memory leak fixes + * Many Bug Fixes + * Improved Documentation +-- Axis2/C team Thu, 26 October 2006 + +Axis2/C (0.94) + * Guththila pull parser support + * WSDL2C code generation tool + * TCP Monitor - C implementation + * Major Memory leak fixes + * Fixes to code generation with Java Tool + * Many Bug Fixes +-- Axis2/C team Tue, 3 October 2006 + +Axis2/C (0.93) + * REST support for HTTP GET case + * XML Schema implementation + * Woden/C implementation that supports both WSDL 1.1 and WSDL 2.0 + * Dynamic client invocation (given a WSDL, consume services dynamically) + * Numerous improvements to API and API documentation + * Many bug fixes, especially, many paths of execution previously untouched were tested along with Sandesha2/C implementation +-- Axis2/C team Thu, 31 August 2006 + +Axis2/C (0.92) + * Completed MTOM implementation with multiple attachment support and non-optimize + * Completed service client API with send robust and fire and forget + * Added "message" to description hierarchy + * Archive based deployment Model (for services and modules) + * Code generation for WSDL using Java WSDL2Code tool + * ADB support (with Java WSDL2C tool) + * WS-Security usernameToken support + * Initial implementation of the XML Schema parser (To be used in WSDL parser and REST support) + * Initial implementation of WSDL parser (To be used in dynamic invocation) + * Changed double pointer environment parameters into pointer parameters + to improve efficiency + -- Axis2/C team Fri, 16 June 2006 + +Axis2/C (0.91) + + * Full Addressing 1.0 support + * Improved fault handling model + * SSL client transport + * MTOM implementation + * Implementation of easy to use service client and operation client APIs for client side programming + * REST support (POST case) + * Module version support + * Service groups + * Numerous bug fixes since last release + -- Axis2/C team Mon, 15 May 2006 + + +Axis2/C (0.90) + + * Minimal memory leaks + * Apache2 module working in Windows + * More samples and tests + * WSDL Object Model built based on the proposed WSDL 2.0 Component model + * Dynamic Invocation + * Numerous bug fixes since last release + -- Axis2/C team Fri, 31 Mar 2006 + + +Axis2/C (M0.5) + + * Improving code quality by fixing memory leaks and reviewing the code + * Apache2 integration + * More samples and tests + * Initial documentation(User guide, Developer Guide and Installation Guide) + * Numerous bug fixes since last release + -- Axis2/C team Fri, 10 Mar 2006 + + +Axis2/C (M0.4) + + * Threading support and threaded simple axis server + * Module loading support + * Addressing module and addressing based dispatching + * HTTP chunking support + * Improved logging mechanism + * Ability to build and run on Windows platform + -- Axis2/C team Fri, 17 Feb 2006 + + +Axis2/C (M0.3) + + * Core engine in place with deployment, description and context hiarachies and http transport support + * Soap processing support + * Simple http server + * Client API implementation + * Couple of working service and client samples + -- Axis2/C team Thu, 02 Feb 2006 + + +Axis2/C (M0.2) + + * Improved OM module + * libxml2 parser support + * PHP binding for OM module + * Some test cases for PHP binding + * Many memory leaks fixes + -- Axis2/C team Thu, 08 Dec 2005 + + +Axis2/C (M0.1) + + * Initial release + + * OM module + * Guththila pull parser support + * libxml2 parser support(only reader is supported as of now) + * doxygen documentation support + * A sample demonstrating how to use OM + -- Axis2/C team Fri, 25 Nov 2005 diff --git a/samples/INSTALL b/samples/INSTALL new file mode 100644 index 0000000..72f0cc3 --- /dev/null +++ b/samples/INSTALL @@ -0,0 +1,14 @@ +Getting Axis2/C Samples Source Working on Linux +============================================= +Build the source +This can be done using the following command sequence: + ./configure + make + make install + use './configure --help' for options + +NOTE: If you don't provide a --prefix configure option, it will by default +install into /usr/local/axis2c/samples directory. + + + diff --git a/samples/LICENSE b/samples/LICENSE new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/samples/LICENSE @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/samples/Makefile.am b/samples/Makefile.am new file mode 100644 index 0000000..b66b5af --- /dev/null +++ b/samples/Makefile.am @@ -0,0 +1,8 @@ +SUBDIRS = server client user_guide mtom_caching_callback mtom_sending_callback + +dist-hook: + rm -rf `find $(distdir)/ -type d -name .svn` + rm -rf `find $(distdir)/ -type d -name .deps` + rm -rf `find $(distdir)/ -type d -name .libs` + +EXTRA_DIST=codegen autogen.sh build.sh diff --git a/samples/NEWS b/samples/NEWS new file mode 100644 index 0000000..ef04f57 --- /dev/null +++ b/samples/NEWS @@ -0,0 +1,97 @@ +Apache Axis2/C Team is pleased to announce the release of Apache Axis2/C +version 1.6.0. + +You can download this release from http://ws.apache.org/axis2/c/download.cgi + +Key Features +============ + + 1. Support for one-way messaging (In-Only) and + request response messaging (In-Out) + + 2. Client APIs : Easy to use service client API and + more advanced operation client API + + 3. Transports supported : HTTP + * Inbuilt HTTP server called simple axis server + * Apache2 httpd module called mod_axis2 for server side + * IIS module for server side. Supports IIS 5.1, 6 and 7. + * Client transport with ability to enable SSL support + * Basic HTTP Authentication + * Digest HTTP Authentication + * libcurl based client transport + * CGI interface + + 4. Transports supported : HTTPS + * HTTPS Transport implementation using OpenSSL + + 5. Transports supported : TCP + * for both client and server side + + 6. Transports supported : AMQP + * AMQP Transport implementation using Apache Qpid + * Available only in Linux platforms. + * At an experimental stage. Please refer the INSTALL file to build this. + + 7. Transport proxy support (HTTP) + * Proxy Authentication (Basic/Digest) + + 8. Module architecture, mechanism to extend the SOAP processing model. + + 9. WS-Addressing support, both the submission (2004/08) and + final (2005/08) versions, implemented as a module. + + 10. MTOM/XOP support. + + 11. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages; + This has complete XML infoset support. + + 12. XPath support for Axiom XML Object model + + 13. XML parser abstraction + * Libxml2 wrapper + * Guththila pull parser support + + 14. Both directory based and archive based deployment models for deploying + services and modules + + 15. Description hierarchy providing access to static data of Axis2/C runtime + (configuration, service groups, services, operations and messages) + + 16. Context hierarchy providing access to dynamic + Axis2/C runtime information (corresponding contexts to map to + each level of description hierarchy) + + 17. Message receiver abstraction + * Inbuilt raw XML message receiver + + 18. Code generation tool for stub and skeleton generation for a given + WSDL (based on Java tool) + * Axis Data Binding (ADB) support + + 19. REST support (more POX like) using HTTP POST, GET, HEAD, PUT and DELETE + * Support for RESTful Services + + 20. Comprehensive documentation + * Axis2/C Manual + + 21. WS-Policy implementation called Neethi/C, with WS-SecurityPolicy extension + + +Major Changes Since Last Release +================================ + + 1. XPath support for Axiom XML object model + 2. CGI support + 3. Improvements to MTOM to send, receive very large attachments + 4. Improvements to AMQP transport + 5. Many bug fixes. + 6. Memory leak fixes + +We welcome your early feedback on this implementation. + +Thanks for your interest in Axis2/C !!! + +-- Apache Axis2/C Team -- + + diff --git a/samples/README b/samples/README new file mode 100644 index 0000000..0471d96 --- /dev/null +++ b/samples/README @@ -0,0 +1,51 @@ + + Apache Axis2/C Samples + ------------------------ + + What Is It? + ----------- + + This package consists the samples of Apache Axis2/C. + + As a project of the Apache Software Foundation, the + developers aim to collaboratively develop and maintain a robust, + commercial-grade, standards-based Web services stack implementation with + freely available source code. + + The Latest Version + ------------------ + + You can get the latest svn checkout of Apache Axis2/C samples from + + https://svn.apache.org/repos/asf/webservices/axis2/trunk/c/samples + + Installation + ------------ + + Please see the file called INSTALL. + + Licensing + --------- + + Please see the file called LICENSE. + + Contacts + -------- + + o If you want freely available support for using Apache Axis2/C samples please + join the Apache Axis2/C user community by subscribing to users mailing + list, axis-c-user@ws.apache.org' as described at + http://ws.apache.org/axis2/c/mail-lists.html + + o If you have a bug report for Apache Axis2/C samples please log-in and create a JIRA issue + at http://issues.apache.org/jira/browse/AXIS2C + + o If you want to participate actively in developing Apache Axis2/C samples please + subscribe to the `axis-c-dev@ws.apache.org' mailing list as described at + http://ws.apache.org/axis2/c/mail-lists.html + + Acknowledgements + ---------------- + + Apache Axis2/C samples rely heavily on the use of autoconf and libtool to provide + a build environment. diff --git a/samples/autogen.sh b/samples/autogen.sh new file mode 100755 index 0000000..c0d09b3 --- /dev/null +++ b/samples/autogen.sh @@ -0,0 +1,51 @@ +#!/bin/bash +echo -n 'Running libtoolize...' +if [ `uname -s` = Darwin ] +then + LIBTOOLIZE=glibtoolize +else + LIBTOOLIZE=libtoolize +fi + +if $LIBTOOLIZE --force > /dev/null 2>&1; then + + echo 'done.' +else + echo 'failed.' + exit 1 +fi + + +echo -n 'Running aclocal...' +if aclocal > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoheader...' +if autoheader > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoconf...' +if autoconf > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running automake...' +if automake --add-missing > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo 'done' diff --git a/samples/build.sh b/samples/build.sh new file mode 100755 index 0000000..9fe3d7d --- /dev/null +++ b/samples/build.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +./autogen.sh + +./configure --prefix=${AXIS2C_HOME} +make -j 10 +make install + diff --git a/samples/client/Makefile.am b/samples/client/Makefile.am new file mode 100644 index 0000000..5e285b0 --- /dev/null +++ b/samples/client/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = echo math google notify mtom yahoo amqp version mtom_callback +EXTRA_DIST= Makefile.am diff --git a/samples/client/amqp/Makefile.am b/samples/client/amqp/Makefile.am new file mode 100644 index 0000000..10429ae --- /dev/null +++ b/samples/client/amqp/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = echo notify mtom diff --git a/samples/client/amqp/echo/Makefile.am b/samples/client/amqp/echo/Makefile.am new file mode 100644 index 0000000..b348c63 --- /dev/null +++ b/samples/client/amqp/echo/Makefile.am @@ -0,0 +1,36 @@ +prgbindir = $(prefix)/samples/bin/amqp + +prgbin_PROGRAMS = echo_blocking \ + echo_non_blocking \ + echo_blocking_addr \ + echo_blocking_dual \ + echo_non_blocking_dual \ + echo_blocking_soap11 + + +echo_blocking_SOURCES = echo_blocking.c echo_util.c +echo_non_blocking_SOURCES = echo_non_blocking.c echo_util.c +echo_blocking_addr_SOURCES = echo_blocking_addr.c echo_util.c +echo_blocking_dual_SOURCES = echo_blocking_dual.c echo_util.c +echo_non_blocking_dual_SOURCES = echo_non_blocking_dual.c echo_util.c +echo_blocking_soap11_SOURCES = echo_blocking_soap11.c echo_util.c + +LINK_FLAGS = $(LDFLAGS) \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_engine \ + -laxis2_parser \ + -lpthread \ + $(GUTHTHILA_LIBS) + +echo_blocking_LDADD = $(LINK_FLAGS) +echo_non_blocking_LDADD = $(LINK_FLAGS) +echo_blocking_addr_LDADD = $(LINK_FLAGS) +echo_blocking_dual_LDADD = $(LINK_FLAGS) +echo_non_blocking_dual_LDADD = $(LINK_FLAGS) +echo_blocking_soap11_LDADD = $(LINK_FLAGS) + +INCLUDES = @AXIS2INC@ + +EXTRA_DIST=echo_util.h diff --git a/samples/client/amqp/echo/echo_blocking.c b/samples/client/amqp/echo/echo_blocking.c new file mode 100644 index 0000000..d21b2bb --- /dev/null +++ b/samples/client/amqp/echo/echo_blocking.c @@ -0,0 +1,124 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" +#include +#include +#include + +int +main (int argc, char **argv) +{ + const axutil_env_t* env = NULL; + const axis2_char_t* address = NULL; + axis2_endpoint_ref_t* endpoint_ref = NULL; + axis2_options_t* options = NULL; + const axis2_char_t* client_home = NULL; + axis2_svc_client_t* svc_client = NULL; + axiom_node_t* payload = NULL; + axiom_node_t* ret_node = NULL; + + /* Set up the environment */ + env = axutil_env_create_all ("echo_blocking_amqp.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "amqp://localhost:5672/axis2/services/echo"; + if (argc > 1) + address = argv[1]; + + if (axutil_strcmp (address, "-h") == 0) + { + printf ("Usage : %s [endpoint_url]\n", argv[0]); + printf ("use -h for help\n"); + + return 0; + } + + printf ("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create (env, address); + + /* Setup options */ + options = axis2_options_create (env); + axis2_options_set_to (options, env, endpoint_ref); + + /* Set up deploy folder */ + client_home = AXIS2_GETENV ("AXIS2C_HOME"); + if (!client_home || !strcmp (client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create (env, client_home); + if (!svc_client) + { + printf ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE (env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options (svc_client, env, options); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc (env); + + /* Send request and get response */ + ret_node = axis2_svc_client_send_receive (svc_client, env, payload); + + if (ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string (ret_node, env); + if (om_str) + { + printf ("\nReceived OM : %s\n", om_str); + AXIS2_FREE (env->allocator, om_str); + } + + printf ("\necho client invoke SUCCESSFUL!\n"); + } + else + { + AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE (env->error)); + + printf ("echo client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free (svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free ((axutil_env_t*)env); + env = NULL; + } + + return 0; +} + + diff --git a/samples/client/amqp/echo/echo_blocking_addr.c b/samples/client/amqp/echo/echo_blocking_addr.c new file mode 100644 index 0000000..1c0383c --- /dev/null +++ b/samples/client/amqp/echo/echo_blocking_addr.c @@ -0,0 +1,132 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" +#include +#include +#include + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + + /* Set up the environment */ + env = + axutil_env_create_all("echo_blocking_addr_amqp.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "amqp://localhost:5672/axis2/services/echo"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf("Usage : %s [endpoint_url]\n", argv[0]); + printf("use -h for help\n"); + return 0; + } + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_action(options, env, + "http://ws.apache.org/axis2/c/samples/echoString"); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Engage addressing module */ + axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc(env); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + { + printf("\nReceived OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + } + printf("\necho client invoke SUCCESSFUL!\n"); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} diff --git a/samples/client/amqp/echo/echo_blocking_dual.c b/samples/client/amqp/echo/echo_blocking_dual.c new file mode 100644 index 0000000..2d20ad0 --- /dev/null +++ b/samples/client/amqp/echo/echo_blocking_dual.c @@ -0,0 +1,142 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" +#include +#include +#include + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_endpoint_ref_t *reply_to = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + + /* Set up the environment */ + env = + axutil_env_create_all("echo_blocking_dual_amqp.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "amqp://localhost:5672/axis2/services/echo"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf("Usage : %s [endpoint_url]\n", argv[0]); + printf("use -h for help\n"); + return 0; + } + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_use_separate_listener(options, env, AXIS2_TRUE); + + /* Seperate listner needs addressing, hence addressing stuff in options */ + axis2_options_set_action(options, env, + "http://ws.apache.org/axis2/c/samples/echoString"); + reply_to = + axis2_endpoint_ref_create(env, + "amqp://localhost:5672/axis2/services/__ANONYMOUS_SERVICE__"); + axis2_options_set_reply_to(options, env, reply_to); + + axis2_options_set_transport_in_protocol(options, env, AXIS2_TRANSPORT_ENUM_AMQP); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc(env); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + { + printf("\nReceived OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + } + printf("\necho client invoke SUCCESSFUL!\n"); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo client invoke FAILED!\n"); + } + + if (svc_client) + { + AXIS2_SLEEP(1); + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} diff --git a/samples/client/amqp/echo/echo_blocking_soap11.c b/samples/client/amqp/echo/echo_blocking_soap11.c new file mode 100644 index 0000000..4281e14 --- /dev/null +++ b/samples/client/amqp/echo/echo_blocking_soap11.c @@ -0,0 +1,135 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" +#include +#include +#include + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + axutil_string_t *soap_action = NULL; + + /* Set up the environment */ + env = + axutil_env_create_all("echo_blocking_soap11_amqp.log", + AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "amqp://localhost:5672/axis2/services/echo"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf("Usage : %s [endpoint_url]\n", argv[0]); + printf("use -h for help\n"); + return 0; + } + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_soap_version(options, env, AXIOM_SOAP11); + soap_action = + axutil_string_create(env, + "http://ws.apache.org/axis2/c/samples/echo/soap_action"); + axis2_options_set_soap_action(options, env, soap_action); + axutil_string_free(soap_action, env); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc(env); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + { + printf("\nReceived OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + } + printf("\necho client invoke SUCCESSFUL!\n"); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} diff --git a/samples/client/amqp/echo/echo_non_blocking.c b/samples/client/amqp/echo/echo_non_blocking.c new file mode 100644 index 0000000..9846977 --- /dev/null +++ b/samples/client/amqp/echo/echo_non_blocking.c @@ -0,0 +1,217 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" +#include +#include +#include + +/* my on_complete callback function */ +axis2_status_t AXIS2_CALL +echo_callback_on_complete (struct axis2_callback* callback, + const axutil_env_t* env); + +/* my on_error callback function */ +axis2_status_t AXIS2_CALL +echo_callback_on_error (struct axis2_callback* callback, + const axutil_env_t* env, + int exception); + +/* to check whether the callback is completed */ +int isComplete = 0; + +int +main(int argc, char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axis2_callback_t *callback = NULL; + int count = 0; + + /* Set up the environment */ + env = axutil_env_create_all ("echo_non_blocking_amqp.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "amqp://localhost:5672/axis2/services/echo"; + if (argc > 1) + address = argv[1]; + + if (axutil_strcmp (address, "-h") == 0) + { + printf ("Usage : %s [endpoint_url]\n", argv[0]); + printf ("use -h for help\n"); + + return 0; + } + + printf ("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create (env, address); + + /* Setup options */ + options = axis2_options_create (env); + axis2_options_set_to (options, env, endpoint_ref); + + /* Set up deploy folder */ + client_home = AXIS2_GETENV ("AXIS2C_HOME"); + if (!client_home || !strcmp (client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create (env, client_home); + if (!svc_client) + { + printf ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE (env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options (svc_client, env, options); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc (env); + + /* Create the callback object with default on_complete and on_error + callback functions */ + callback = axis2_callback_create (env); + + /* Set our on_complete fucntion pointer to the callback object */ + axis2_callback_set_on_complete (callback, echo_callback_on_complete); + + /* Set our on_error function pointer to the callback object */ + axis2_callback_set_on_error (callback, echo_callback_on_error); + + /* Send request */ + axis2_svc_client_send_receive_non_blocking (svc_client, env, + payload, callback); + + /*Wait till callback is complete. Simply keep the parent thread running + until our on_complete or on_error is invoked */ + while (count < 30) + { + if (isComplete) + { + /* We are done with the callback */ + break; + } + + AXIS2_SLEEP (1); + count++; + } + + if (!(count < 30)) + { + printf ("\necho client invoke FAILED. Counter timed out.\n"); + } + + if (svc_client) + { + axis2_svc_client_free (svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free ((axutil_env_t *) env); + env = NULL; + } + + return 0; +} + +axis2_status_t AXIS2_CALL +echo_callback_on_complete(struct axis2_callback* callback, + const axutil_env_t* env) +{ + + /** SOAP response has arrived here; get the soap envelope + from the callback object and do whatever you want to do with it */ + + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_node_t *ret_node = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + soap_envelope = axis2_callback_get_envelope (callback, env); + + if (!soap_envelope) + { + AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE (env->error)); + printf ("echo stub invoke FAILED!\n"); + status = AXIS2_FAILURE; + } + else + { + ret_node = axiom_soap_envelope_get_base_node (soap_envelope, env); + + if (!ret_node) + { + AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE (env->error)); + + printf ("echo stub invoke FAILED!\n"); + status = AXIS2_FAILURE; + } + else + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string (ret_node, env); + if (om_str) + { + printf ("\nReceived OM : %s\n", om_str); + AXIS2_FREE (env->allocator, om_str); + } + + printf ("\necho client invoke SUCCESSFUL!\n"); + } + } + + isComplete = 1; + return status; +} + +axis2_status_t AXIS2_CALL +echo_callback_on_error (struct axis2_callback* callback, + const axutil_env_t* env, + int exception) +{ + + /** take necessary action on error */ + printf ("\necho client invike FAILED. Error code:%d ::%s", exception, + AXIS2_ERROR_GET_MESSAGE (env->error)); + + isComplete = 1; + + return AXIS2_SUCCESS; +} + + diff --git a/samples/client/amqp/echo/echo_non_blocking_dual.c b/samples/client/amqp/echo/echo_non_blocking_dual.c new file mode 100644 index 0000000..b1ce5a1 --- /dev/null +++ b/samples/client/amqp/echo/echo_non_blocking_dual.c @@ -0,0 +1,235 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" +#include +#include +#include + +#define MAX_COUNT 10 + +/* my on_complete callback function */ +axis2_status_t AXIS2_CALL echo_callback_on_complete( + struct axis2_callback * callback, + const axutil_env_t * env); + +/* my on_error callback function */ +axis2_status_t AXIS2_CALL echo_callback_on_error( + struct axis2_callback *callback, + const axutil_env_t * env, + int exception); + +/* to check whether the callback is completed */ +int isComplete = 0; + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_endpoint_ref_t *reply_to = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axis2_callback_t *callback = NULL; + int count = 0; + + /* Set up the environment */ + env = + axutil_env_create_all("echo_non_blocking_dual_amqp.log", + AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "amqp://localhost:5672/axis2/services/echo"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf("Usage : %s [endpoint_url]\n", argv[0]); + printf("use -h for help\n"); + return 0; + } + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_use_separate_listener(options, env, AXIS2_TRUE); + + /* Seperate listner needs addressing, hence addressing stuff in options */ + axis2_options_set_action(options, env, + "http://ws.apache.org/axis2/c/samples/echoString"); + reply_to = + axis2_endpoint_ref_create(env, + "amqp://localhost:5672/axis2/services/__ANONYMOUS_SERVICE__"); + axis2_options_set_reply_to(options, env, reply_to); + + axis2_options_set_transport_in_protocol(options, env, AXIS2_TRANSPORT_ENUM_AMQP); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING); + /*axis2_svc_client_engage_module(svc_client, env, "sandesha2"); */ + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc(env); + + /* Create the callback object with default on_complete and on_error + callback functions */ + callback = axis2_callback_create(env); + + /* Set our on_complete fucntion pointer to the callback object */ + axis2_callback_set_on_complete(callback, echo_callback_on_complete); + + /* Set our on_error function pointer to the callback object */ + axis2_callback_set_on_error(callback, echo_callback_on_error); + + /* Send request */ + axis2_svc_client_send_receive_non_blocking(svc_client, env, + payload, callback); + + /** Wait till callback is complete. Simply keep the parent thread running + until our on_complete or on_error is invoked */ + while (count < MAX_COUNT) + { + if (isComplete) + { + /* We are done with the callback */ + break; + } + + AXIS2_SLEEP(1); + count++; + } + + if (!(count < MAX_COUNT)) + { + printf("\necho client invoke FAILED. Counter timed out.\n"); + } + + if (svc_client) + { + AXIS2_SLEEP(1); + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} + +axis2_status_t AXIS2_CALL +echo_callback_on_complete( + struct axis2_callback * callback, + const axutil_env_t * env) +{ + + /** SOAP response has arrived here; get the soap envelope + from the callback object and do whatever you want to do with it */ + + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_node_t *ret_node = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + soap_envelope = axis2_callback_get_envelope(callback, env); + + if (!soap_envelope) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo stub invoke FAILED!\n"); + status = AXIS2_FAILURE; + } + else + { + ret_node = axiom_soap_envelope_get_base_node(soap_envelope, env); + + if (!ret_node) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo stub invoke FAILED!\n"); + status = AXIS2_FAILURE; + } + else + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + printf("\nReceived OM : %s\n", om_str); + printf("\necho client invoke SUCCESSFUL!\n"); + } + } + isComplete = 1; + return status; +} + +axis2_status_t AXIS2_CALL +echo_callback_on_error( + struct axis2_callback * callback, + const axutil_env_t * env, + int exception) +{ + + /** take necessary action on error */ + printf("\nEcho client invoke FAILED. Error code:%d ::%s", exception, + AXIS2_ERROR_GET_MESSAGE(env->error)); + isComplete = 1; + return AXIS2_SUCCESS; +} diff --git a/samples/client/amqp/echo/echo_util.c b/samples/client/amqp/echo/echo_util.c new file mode 100644 index 0000000..c49d42d --- /dev/null +++ b/samples/client/amqp/echo/echo_util.c @@ -0,0 +1,47 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" + +/* build SOAP request message content using OM */ +axiom_node_t* +build_om_payload_for_echo_svc (const axutil_env_t* env) +{ + axiom_node_t* echo_om_node = NULL; + axiom_element_t* echo_om_ele = NULL; + axiom_node_t* text_om_node = NULL; + axiom_element_t* text_om_ele = NULL; + axiom_namespace_t* ns1 = NULL; + axis2_char_t* om_str = NULL; + + ns1 = axiom_namespace_create (env, "http://ws.apache.org/axis2/services/echo", + "ns1"); + echo_om_ele = axiom_element_create (env, NULL, "echoString", ns1, &echo_om_node); + text_om_ele = axiom_element_create (env, echo_om_node, "text", NULL, &text_om_node); + axiom_element_set_text (text_om_ele, env, "Hello World!", text_om_node); + + om_str = axiom_node_to_string (echo_om_node, env); + if (om_str) + printf ("\nSending OM : %s\n", om_str); + + AXIS2_FREE (env->allocator, om_str); + + return echo_om_node; +} + + diff --git a/samples/client/amqp/echo/echo_util.h b/samples/client/amqp/echo/echo_util.h new file mode 100644 index 0000000..c932efb --- /dev/null +++ b/samples/client/amqp/echo/echo_util.h @@ -0,0 +1,54 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_UG_ECHO_UTIL_H +#define AXIS2_UG_ECHO_UTIL_H + +#include +#include + +axiom_node_t* build_om_payload_for_echo_svc (const axutil_env_t * env); + +#endif + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_UG_ECHO_UTIL_H +#define AXIS2_UG_ECHO_UTIL_H + +#include +#include + +axiom_node_t* build_om_payload_for_echo_svc (const axutil_env_t * env); + +#endif diff --git a/samples/client/amqp/mtom/Makefile.am b/samples/client/amqp/mtom/Makefile.am new file mode 100644 index 0000000..fa2f51a --- /dev/null +++ b/samples/client/amqp/mtom/Makefile.am @@ -0,0 +1,18 @@ +SUBDIRS = resources + +prgbindir = $(prefix)/samples/bin/amqp + +prgbin_PROGRAMS = mtom + +mtom_SOURCES = mtom_client.c + +mtom_LDADD = $(LDFLAGS) \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_engine \ + -laxis2_parser \ + -lpthread \ + $(GUTHTHILA_LIBS) + +INCLUDES = @AXIS2INC@ diff --git a/samples/client/amqp/mtom/mtom_client.c b/samples/client/amqp/mtom/mtom_client.c new file mode 100644 index 0000000..da87e1b --- /dev/null +++ b/samples/client/amqp/mtom/mtom_client.c @@ -0,0 +1,259 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +axiom_node_t *build_om_programatically( + const axutil_env_t * env, + const axis2_char_t * image_name, + const axis2_char_t * to_save_name, + axis2_bool_t optimized); + +int +process_response_node( + const axutil_env_t * env, + axiom_node_t *node, + const axis2_char_t * to_save_name); + + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + const axis2_char_t *image_name = "resources/axis2.jpg"; + const axis2_char_t *to_save_name = "test.jpg"; + axis2_bool_t optimized = AXIS2_TRUE; + + /* Set up the environment */ + env = axutil_env_create_all("mtom_amqp.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of mtom service */ + address = "amqp://localhost:5672/axis2/services/mtom"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf + ("Usage : %s [endpoint_url] [image_name] [to_save_name] [do_not_optimize]\n", + argv[0]); + printf("use -h for help\n"); + return 0; + } + if (argc > 2) + image_name = argv[2]; + if (argc > 3) + to_save_name = argv[3]; + if (argc > 4) + optimized = AXIS2_FALSE; + + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_action(options, env, + "http://ws.apache.org/axis2/c/samples/mtomSample"); + + axis2_options_set_soap_version(options, env, AXIOM_SOAP11); + + if(optimized) + { + axis2_options_set_enable_mtom(options, env, AXIS2_TRUE); + } + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Engage addressing module */ + axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING); + + /* Build the SOAP request message payload using OM API. */ + payload = + build_om_programatically(env, image_name, to_save_name, optimized); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + if (ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + { + if (axis2_svc_client_get_last_response_has_fault(svc_client, env) == AXIS2_TRUE) + { + printf("\nRecieved Fault : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + } + else + { + printf("\nReceived OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + printf("\nmtom client invoke SUCCESSFUL!\n"); + process_response_node(env, ret_node, to_save_name); + } + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("\nmtom client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; + +} + +/* build SOAP request message content using OM */ +axiom_node_t * +build_om_programatically( + const axutil_env_t * env, + const axis2_char_t * image_name, + const axis2_char_t * to_save_name, + axis2_bool_t optimized) +{ + axiom_node_t *mtom_om_node = NULL; + axiom_element_t *mtom_om_ele = NULL; + axiom_node_t *image_om_node = NULL; + axiom_element_t *image_om_ele = NULL; + axiom_node_t *file_om_node = NULL; + axiom_element_t *file_om_ele = NULL; + axiom_node_t *data_om_node = NULL; + axiom_text_t *data_text = NULL; + axiom_namespace_t *ns1 = NULL; + axis2_char_t *om_str = NULL; + + axiom_data_handler_t *data_handler = NULL; + + ns1 = + axiom_namespace_create(env, "http://ws.apache.org/axis2/c/samples/mtom", + "ns1"); + mtom_om_ele = + axiom_element_create(env, NULL, "mtomSample", ns1, &mtom_om_node); + + file_om_ele = + axiom_element_create(env, mtom_om_node, "fileName", ns1, &file_om_node); + axiom_element_set_text(file_om_ele, env, to_save_name, file_om_node); + + image_om_ele = + axiom_element_create(env, mtom_om_node, "image", ns1, &image_om_node); + + data_handler = axiom_data_handler_create(env, image_name, "image/jpeg"); + data_text = + axiom_text_create_with_data_handler(env, image_om_node, data_handler, + &data_om_node); + axiom_text_set_optimize(data_text, env, optimized); + om_str = axiom_node_to_string(mtom_om_node, env); + if (om_str) + { + printf("%s", om_str); + AXIS2_FREE(env->allocator, om_str); + } + return mtom_om_node; +} + + +int +process_response_node( + const axutil_env_t * env, + axiom_node_t *node, + const axis2_char_t * to_save_name) +{ + axiom_node_t *res_om_node = NULL; + axiom_element_t *res_om_ele = NULL; + res_om_node = axiom_node_get_first_child(node, env); + + if(axiom_node_get_node_type(res_om_node, env) == AXIOM_TEXT) + {/** received mtom atttachment */ + axiom_data_handler_t *data_handler = NULL; + axiom_text_t *axiom_text = (axiom_text_t*)axiom_node_get_data_element(res_om_node, env); + data_handler = axiom_text_get_data_handler(axiom_text, env); + + /*axiom_data_handler_set_file_name(data_handler, env, (axis2_char_t *)to_save_name);*/ + if(axiom_data_handler_get_cached(data_handler, env)) + { + printf("Attachment is cached.\n"); + } + else + { + axiom_data_handler_set_file_name(data_handler, env, "test"); + axiom_data_handler_write_to(data_handler, env); + } + }else if(axiom_node_get_node_type(res_om_node, env) == AXIOM_ELEMENT){ + res_om_ele = axiom_node_get_data_element(res_om_node, env); + printf("Base64 String received \n\n\n %s \n\n", axiom_element_get_text(res_om_ele, env, res_om_node)); + } + + return 0; +} + + diff --git a/samples/client/amqp/mtom/resources/Makefile.am b/samples/client/amqp/mtom/resources/Makefile.am new file mode 100644 index 0000000..2d60ebd --- /dev/null +++ b/samples/client/amqp/mtom/resources/Makefile.am @@ -0,0 +1,5 @@ +samplesdir = $(prefix)/samples/bin/amqp/resources + +samples_DATA = axis2.jpg + +EXTRA_DIST = axis2.jpg diff --git a/samples/client/amqp/mtom/resources/axis2.jpg b/samples/client/amqp/mtom/resources/axis2.jpg new file mode 100644 index 0000000..73371d8 Binary files /dev/null and b/samples/client/amqp/mtom/resources/axis2.jpg differ diff --git a/samples/client/amqp/notify/Makefile.am b/samples/client/amqp/notify/Makefile.am new file mode 100644 index 0000000..85cc43e --- /dev/null +++ b/samples/client/amqp/notify/Makefile.am @@ -0,0 +1,15 @@ +prgbindir = $(prefix)/samples/bin/amqp + +prgbin_PROGRAMS = notify + +notify_SOURCES = notify_client.c + +notify_LDADD = -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_engine \ + -laxis2_parser \ + -lpthread \ + $(GUTHTHILA_LIBS) + +INCLUDES = @AXIS2INC@ diff --git a/samples/client/amqp/notify/notify_client.c b/samples/client/amqp/notify/notify_client.c new file mode 100644 index 0000000..f562a5c --- /dev/null +++ b/samples/client/amqp/notify/notify_client.c @@ -0,0 +1,152 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +axiom_node_t *build_om_programatically( + const axutil_env_t * env); + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axis2_status_t status = AXIS2_FAILURE; + + /* Set up the environment */ + env = axutil_env_create_all("notify_amqp.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "amqp://localhost:5672/axis2/services/notify"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf("Usage : %s [endpoint_url]\n", argv[0]); + printf("use -h for help\n"); + return 0; + } + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_action(options, env, "http://example.org/action/notify"); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Engage addressing module */ + axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_programatically(env); + + /* Send request */ + status = axis2_svc_client_send_robust(svc_client, env, payload); + + if (status == AXIS2_SUCCESS) + { + printf("\nnotify client invoke SUCCESSFUL!\n"); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("notify client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} + +/* build SOAP request message content using OM */ +axiom_node_t * +build_om_programatically( + const axutil_env_t * env) +{ + axiom_node_t *notify_om_node = NULL; + axiom_element_t *notify_om_ele = NULL; + axiom_namespace_t *ns1 = NULL; + axis2_char_t *buffer = NULL; + + ns1 = axiom_namespace_create(env, "http://example.org/notify", "m"); + notify_om_ele = + axiom_element_create(env, NULL, "notify", ns1, ¬ify_om_node); + axiom_element_set_text(notify_om_ele, env, "notify5", notify_om_node); + + buffer = axiom_node_to_string(notify_om_node, env); + if (buffer) + { + printf("\nSending OM node in XML : %s \n", buffer); + AXIS2_FREE(env->allocator, buffer); + } + + return notify_om_node; +} diff --git a/samples/client/echo/Makefile.am b/samples/client/echo/Makefile.am new file mode 100644 index 0000000..340e826 --- /dev/null +++ b/samples/client/echo/Makefile.am @@ -0,0 +1,18 @@ +prgbindir=$(prefix)/samples/bin +prgbin_PROGRAMS = echo +echo_SOURCES = echo.c + +echo_LDADD = $(LDFLAGS) \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_engine \ + -laxis2_parser \ + -lpthread \ + -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +INCLUDES = @AXIS2INC@ + +EXTRA_DIST=README.txt echo.mk diff --git a/samples/client/echo/README.txt b/samples/client/echo/README.txt new file mode 100644 index 0000000..e3284a5 --- /dev/null +++ b/samples/client/echo/README.txt @@ -0,0 +1,5 @@ +Client Sample -echo +------------------- + +This is a sample to help test addressing. +This sample works with echo service. diff --git a/samples/client/echo/echo.c b/samples/client/echo/echo.c new file mode 100644 index 0000000..94a0a20 --- /dev/null +++ b/samples/client/echo/echo.c @@ -0,0 +1,196 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +axiom_node_t *build_om_payload_for_echo_svc( + const axutil_env_t * env); + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + axiom_node_t *payload2 = NULL; + axiom_node_t *ret_node2 = NULL; + + /* Set up the environment */ + env = axutil_env_create_all("echo.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "http://localhost:9090/axis2/services/echo"; + if (argc > 1) + { + if (axutil_strcmp(argv[1], "-h") == 0) + { + printf("Usage : %s [endpoint_url]\n", + argv[0]); + printf("use -h for help\n"); + return 0; + } + else + { + address = argv[1]; + } + } + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_action(options, env, + "http://ws.apache.org/axis2/c/samples/echoString"); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Engage addressing module */ + axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc(env); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + printf("\nReceived OM : %s\n", om_str); + printf("\necho client invoke SUCCESSFUL!\n"); + + AXIS2_FREE(env->allocator, om_str); + ret_node = NULL; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo client invoke FAILED!\n"); + } + + payload2 = build_om_payload_for_echo_svc(env); + ret_node2 = axis2_svc_client_send_receive(svc_client, env, payload2); + if (ret_node2) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node2, env); + if (om_str) + printf("\nReceived OM : %s\n", om_str); + printf("\necho client invoke SUCCESSFUL!\n"); + + AXIS2_FREE(env->allocator, om_str); + ret_node2 = NULL; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} + +/* build SOAP request message content using OM */ +axiom_node_t * +build_om_payload_for_echo_svc( + const axutil_env_t * env) +{ + axiom_node_t *echo_om_node = NULL; + axiom_element_t *echo_om_ele = NULL; + axiom_node_t *text_om_node = NULL; + axiom_element_t *text_om_ele = NULL; + axiom_namespace_t *ns1 = NULL; + axis2_char_t *om_str = NULL; + + ns1 = + axiom_namespace_create(env, "http://ws.apache.org/axis2/services/echo", + "ns1"); + echo_om_ele = + axiom_element_create(env, NULL, "echoString", ns1, &echo_om_node); + text_om_ele = + axiom_element_create(env, echo_om_node, "text", NULL, &text_om_node); + axiom_element_set_text(text_om_ele, env, "Hello World!", text_om_node); + om_str = axiom_node_to_string(echo_om_node, env); + + if (om_str) + { + printf("\nSending OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + om_str = NULL; + } + return echo_om_node; +} diff --git a/samples/client/echo/echo.mk b/samples/client/echo/echo.mk new file mode 100644 index 0000000..fc9b65b --- /dev/null +++ b/samples/client/echo/echo.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" *.C /I.\..\..\..\include /c + @link.exe /nologo echo.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:echo.exe + + + + + diff --git a/samples/client/google/Makefile.am b/samples/client/google/Makefile.am new file mode 100644 index 0000000..b44e9b8 --- /dev/null +++ b/samples/client/google/Makefile.am @@ -0,0 +1,17 @@ +prgbindir=$(prefix)/samples/bin +prgbin_PROGRAMS = google +google_SOURCES = google_client.c + +google_LDADD = $(LDFLAGS) \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_engine \ + -laxis2_parser \ + -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +INCLUDES = @AXIS2INC@ + +EXTRA_DIST=README.txt google.mk diff --git a/samples/client/google/README.txt b/samples/client/google/README.txt new file mode 100644 index 0000000..de8e74e --- /dev/null +++ b/samples/client/google/README.txt @@ -0,0 +1,10 @@ +Client Sample- Google +--------------------- + +In order to run this sample, you need to get a Google license key. +Please visit http://www.google.com/apis/ for details on how to get a license key. + +Use the '-h' option with the sample to get help on command line options. +e.g. +./google -h + diff --git a/samples/client/google/google.mk b/samples/client/google/google.mk new file mode 100644 index 0000000..56fa2b1 --- /dev/null +++ b/samples/client/google/google.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" *.C /I.\..\..\..\include /c + @link.exe /nologo *.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:google.exe + + + + + diff --git a/samples/client/google/google_client.c b/samples/client/google/google_client.c new file mode 100644 index 0000000..05e9f33 --- /dev/null +++ b/samples/client/google/google_client.c @@ -0,0 +1,290 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +axiom_node_t *build_soap_body_content( + const axutil_env_t * env, + const axis2_char_t * operation, + const axis2_char_t * google_key, + const axis2_char_t * word_to_spell); + +void print_invalid_om( + const axutil_env_t * env, + axiom_node_t * ret_node); + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + + const axis2_char_t *google_key = NULL; + const axis2_char_t *word_to_spell = NULL; + const axis2_char_t *operation = NULL; + + operation = "doSpellingSuggestion"; + google_key = "00000000000000000000000000000000"; + word_to_spell = "salvasion"; + + /* Set up the environment */ + env = axutil_env_create_all("google_client.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of google service */ + address = "http://api.google.com/search/beta2"; + + if ((argc > 1) && (axutil_strcmp("-h", argv[1]) == 0)) + { + printf("\nUsage : %s [google_key] [word_to_spell] \n", argv[0]); + printf + ("\tgoogle_key Your Google license key. Default value won't work. You must use your key here.\n"); + printf + ("\tword_to_spell Word to be spelled by Google service. Default is %s\n", + word_to_spell); + printf + ("NOTE: command line arguments must appear in given order, with trailing ones being optional\n"); + printf("\tUse -h for help\n"); + return 0; + } + + if (argc > 1) + google_key = argv[1]; + if (argc > 2) + word_to_spell = argv[2]; + if (argc > 3) + address = argv[3]; + + printf("Using endpoint : %s\n", address); + printf("\nInvoking operation %s with params %s and %s\n", operation, + google_key, word_to_spell); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_soap_version(options, env, AXIOM_SOAP11); + + /* Set up deploy folder. */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Build the SOAP request message payload using OM API. */ + payload = + build_soap_body_content(env, operation, google_key, word_to_spell); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (axis2_svc_client_get_last_response_has_fault(svc_client, env)) + { + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_body_t *soap_body = NULL; + axiom_soap_fault_t *soap_fault = NULL; + axis2_char_t *fault_string = NULL; + + printf("\nResponse has a SOAP fault\n"); + soap_envelope = + axis2_svc_client_get_last_response_soap_envelope(svc_client, env); + if (soap_envelope) + { + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + } + + if (soap_body) + { + soap_fault = axiom_soap_body_get_fault(soap_body, env); + } + + if (soap_fault) + { + fault_string = axiom_node_to_string(axiom_soap_fault_get_base_node + (soap_fault, env), env); + printf("\nReturned SOAP fault: %s\n", fault_string); + AXIS2_FREE (env->allocator, fault_string); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return -1; + } + + if (ret_node) + { + if (axiom_node_get_node_type(ret_node, env) == AXIOM_ELEMENT) + { + axis2_char_t *result = NULL; + axiom_element_t *result_ele = NULL; + axiom_node_t *ret_node1 = NULL; + + result_ele = + (axiom_element_t *) axiom_node_get_data_element(ret_node, env); + if (axutil_strcmp + (axiom_element_get_localname(result_ele, env), + "doSpellingSuggestionResponse") != 0) + { + print_invalid_om(env, ret_node); + return AXIS2_FAILURE; + } + + ret_node1 = axiom_node_get_first_element(ret_node, env); /*return */ + if (!ret_node1) + { + print_invalid_om(env, ret_node); + return AXIS2_FAILURE; + } + result_ele = + (axiom_element_t *) axiom_node_get_data_element(ret_node1, env); + result = axiom_element_get_text(result_ele, env, ret_node1); + printf("\nResult = %s\n", result); + } + else + { + print_invalid_om(env, ret_node); + return AXIS2_FAILURE; + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("Google client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} + +axiom_node_t * +build_soap_body_content( + const axutil_env_t * env, + const axis2_char_t * operation, + const axis2_char_t * google_key, + const axis2_char_t * word_to_spell) +{ + axiom_node_t *google_om_node = NULL; + axiom_element_t *google_om_ele = NULL; + axiom_node_t *text_om_node = NULL; + axiom_element_t *text_om_ele = NULL; + axiom_namespace_t *ns0 = NULL, + *ns1 = NULL, + *ns2 = NULL, + *ns3 = NULL; + axiom_attribute_t *attri1 = NULL; + axis2_char_t *buffer = NULL; + + ns0 = + axiom_namespace_create(env, AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI, + "soapenv"); + ns1 = axiom_namespace_create(env, "urn:GoogleSearch", "ns1"); + ns2 = + axiom_namespace_create(env, "http://www.w3.org/1999/XMLSchema-instance", + "xsi"); + ns3 = + axiom_namespace_create(env, "http://www.w3.org/1999/XMLSchema", "xsd"); + + attri1 = axiom_attribute_create(env, "encodingStyle", + "http://schemas.xmlsoap.org/soap/encoding/", + ns0); + + google_om_ele = + axiom_element_create(env, NULL, operation, ns1, &google_om_node); + axiom_element_add_attribute(google_om_ele, env, attri1, google_om_node); + axiom_element_declare_namespace(google_om_ele, env, google_om_node, ns2); + axiom_element_declare_namespace(google_om_ele, env, google_om_node, ns3); + + text_om_ele = + axiom_element_create(env, google_om_node, "key", NULL, &text_om_node); + attri1 = axiom_attribute_create(env, "type", "xsd:string", ns2); + axiom_element_add_attribute(text_om_ele, env, attri1, text_om_node); + axiom_element_set_text(text_om_ele, env, google_key, text_om_node); + + text_om_ele = + axiom_element_create(env, google_om_node, "phrase", NULL, + &text_om_node); + axiom_element_add_attribute(text_om_ele, env, attri1, text_om_node); + axiom_element_set_text(text_om_ele, env, word_to_spell, text_om_node); + + buffer = axiom_node_to_string(google_om_node, env); + printf("%s\n", buffer); + AXIS2_FREE (env->allocator, buffer); + return google_om_node; +} + +void +print_invalid_om( + const axutil_env_t * env, + axiom_node_t * ret_node) +{ + axis2_char_t *buffer = NULL; + buffer = axiom_node_get_data_element(ret_node, env); + printf("\nReceived OM as result : %s\n", buffer); +} diff --git a/samples/client/math/Makefile.am b/samples/client/math/Makefile.am new file mode 100644 index 0000000..8cca62e --- /dev/null +++ b/samples/client/math/Makefile.am @@ -0,0 +1,20 @@ +prgbindir=$(prefix)/samples/bin +prgbin_PROGRAMS = math +noinst_HEADERS = axis2_math_stub.h +math_SOURCES = axis2_math_stub.c \ + math_client.c + +math_LDADD = \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_engine \ + -laxis2_parser \ + -lpthread \ + -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +INCLUDES = @AXIS2INC@ + +EXTRA_DIST=math.mk diff --git a/samples/client/math/axis2_math_stub.c b/samples/client/math/axis2_math_stub.c new file mode 100644 index 0000000..366e159 --- /dev/null +++ b/samples/client/math/axis2_math_stub.c @@ -0,0 +1,193 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_math_stub.h" + +axis2_stub_t * +axis2_math_stub_create_with_endpoint_ref_and_client_home( + const axutil_env_t * env, + axis2_endpoint_ref_t * endpoint_ref, + axis2_char_t * client_home) +{ + axis2_stub_t *stub = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + stub = (axis2_stub_t *) + axis2_stub_create_with_endpoint_ref_and_client_home(env, endpoint_ref, + client_home); + if (!stub) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + axis2_populate_axis_service(stub, env); + return stub; +} + +void +axis2_populate_axis_service( + axis2_stub_t * stub, + const axutil_env_t * env) +{ + axis2_svc_client_t *svc_client = NULL; + axutil_qname_t *op_qname = NULL; + axis2_svc_t *svc = NULL; + axis2_op_t *op = NULL; + + /*Modifying the Service */ + svc_client = axis2_stub_get_svc_client(stub, env); + svc = axis2_svc_client_get_svc(svc_client, env); + + /*creating the operations */ + + op_qname = axutil_qname_create(env, "add", "", NULL); + op = axis2_op_create_with_qname(env, op_qname); + axis2_op_set_msg_exchange_pattern(op, env, AXIS2_MEP_URI_OUT_IN); + axis2_svc_add_op(svc, env, op); + axutil_qname_free(op_qname, env); + + op_qname = axutil_qname_create(env, "sub", "", NULL); + op = axis2_op_create_with_qname(env, op_qname); + axis2_op_set_msg_exchange_pattern(op, env, AXIS2_MEP_URI_OUT_IN); + axis2_svc_add_op(svc, env, op); + axutil_qname_free(op_qname, env); + + op_qname = axutil_qname_create(env, "mul", "", NULL); + op = axis2_op_create_with_qname(env, op_qname); + axis2_op_set_msg_exchange_pattern(op, env, AXIS2_MEP_URI_OUT_IN); + axis2_svc_add_op(svc, env, op); + axutil_qname_free(op_qname, env); + + op_qname = axutil_qname_create(env, "div", "", NULL); + op = axis2_op_create_with_qname(env, op_qname); + axis2_op_set_msg_exchange_pattern(op, env, AXIS2_MEP_URI_OUT_IN); + axis2_svc_add_op(svc, env, op); + axutil_qname_free(op_qname, env); +} + +axis2_stub_t * +axis2_math_stub_create_with_endpoint_uri_and_client_home( + const axutil_env_t * env, + const axis2_char_t * endpoint_uri, + const axis2_char_t * client_home) +{ + axis2_stub_t *stub = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + stub = (axis2_stub_t *) + axis2_stub_create_with_endpoint_uri_and_client_home(env, endpoint_uri, + client_home); + if (!stub) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + axis2_populate_axis_service(stub, env); + + return stub; +} + +/***************************Function implementation****************************/ + +axiom_node_t * +axis2_math_stub_add( + axis2_stub_t * stub, + const axutil_env_t * env, + axiom_node_t * node) +{ + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *ret_node = NULL; + axutil_qname_t *op_qname = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + svc_client = axis2_stub_get_svc_client(stub, env); + op_qname = axutil_qname_create(env, "add", "", NULL); + ret_node = + axis2_svc_client_send_receive_with_op_qname(svc_client, env, op_qname, + node); + axutil_qname_free(op_qname, env); + + return ret_node; +} + +axiom_node_t * +axis2_math_stub_sub( + axis2_stub_t * stub, + const axutil_env_t * env, + axiom_node_t * node) +{ + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *ret_node = NULL; + axutil_qname_t *op_qname = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + svc_client = axis2_stub_get_svc_client(stub, env); + op_qname = axutil_qname_create(env, "sub", "", NULL); + ret_node = + axis2_svc_client_send_receive_with_op_qname(svc_client, env, op_qname, + node); + + return ret_node; +} + +axiom_node_t * +axis2_math_stub_mul( + axis2_stub_t * stub, + const axutil_env_t * env, + axiom_node_t * node) +{ + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *ret_node = NULL; + axutil_qname_t *op_qname = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + svc_client = axis2_stub_get_svc_client(stub, env); + op_qname = axutil_qname_create(env, "mul", "", NULL); + ret_node = + axis2_svc_client_send_receive_with_op_qname(svc_client, env, op_qname, + node); + + return ret_node; +} + +axiom_node_t * +axis2_math_stub_div( + axis2_stub_t * stub, + const axutil_env_t * env, + axiom_node_t * node) +{ + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *ret_node = NULL; + axutil_qname_t *op_qname = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + svc_client = axis2_stub_get_svc_client(stub, env); + op_qname = axutil_qname_create(env, "div", "", NULL); + ret_node = + axis2_svc_client_send_receive_with_op_qname(svc_client, env, op_qname, + node); + + return ret_node; +} diff --git a/samples/client/math/axis2_math_stub.h b/samples/client/math/axis2_math_stub.h new file mode 100644 index 0000000..20497b5 --- /dev/null +++ b/samples/client/math/axis2_math_stub.h @@ -0,0 +1,86 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_ECHO_STUB_H +#define AXIS2_ECHO_STUB_H + +/** + * @file axis2_math_stub.h + * @brief axis2 math stub interface + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + axiom_node_t *axis2_math_stub_add( + axis2_stub_t * stub, + const axutil_env_t * env, + axiom_node_t * node); + + axiom_node_t *axis2_math_stub_sub( + axis2_stub_t * stub, + const axutil_env_t * env, + axiom_node_t * node); + + axiom_node_t *axis2_math_stub_mul( + axis2_stub_t * stub, + const axutil_env_t * env, + axiom_node_t * node); + + axiom_node_t *axis2_math_stub_div( + axis2_stub_t * stub, + const axutil_env_t * env, + axiom_node_t * node); + + /** + * populate services + */ + void axis2_populate_axis_service( + axis2_stub_t * stub, + const axutil_env_t * env); + + /** + * Creates axis2_stub struct + * @param endpoint reference + * @return pointer to newly created axis2_stub struct + */ + axis2_stub_t *axis2_math_stub_create_with_endpoint_ref_and_client_home( + const axutil_env_t * env, + axis2_endpoint_ref_t * endpoint_ref, + axis2_char_t * client_home); + + /** + * Creates axis2_stub struct + * @param endpoint uri + * @return pointer to newly created axis2_stub struct + */ + axis2_stub_t *axis2_math_stub_create_with_endpoint_uri_and_client_home( + const axutil_env_t * env, + const axis2_char_t * endpoint_uri, + const axis2_char_t * client_home); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_ECHO_STUB_H */ diff --git a/samples/client/math/math.mk b/samples/client/math/math.mk new file mode 100644 index 0000000..c82a342 --- /dev/null +++ b/samples/client/math/math.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" *.C /I.\..\..\..\include /c + @link.exe /nologo *.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:math.exe + + + + + diff --git a/samples/client/math/math_client.c b/samples/client/math/math_client.c new file mode 100644 index 0000000..5d783a7 --- /dev/null +++ b/samples/client/math/math_client.c @@ -0,0 +1,201 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_math_stub.h" +#include +#include +#include +#include +#include + +axiom_node_t *build_om_programatically( + const axutil_env_t * env, + const axis2_char_t * operation, + const axis2_char_t * param1, + const axis2_char_t * param2); + +int +main( + int argc, + char **argv) +{ + axis2_stub_t *stub = NULL; + axiom_node_t *node = NULL; + axis2_status_t status = AXIS2_FAILURE; + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + const axis2_char_t *client_home = NULL; + axiom_node_t *ret_node = NULL; + + const axis2_char_t *operation = "add"; + const axis2_char_t *param1 = "40"; + const axis2_char_t *param2 = "8"; + + env = axutil_env_create_all("math_blocking.log", AXIS2_LOG_LEVEL_TRACE); + + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + address = "http://localhost:9090/axis2/services/math"; + if (argc > 1) + operation = argv[1]; + if (axutil_strcmp(operation, "-h") == 0) + { + printf("Usage : %s [operation] [param1] [param2] [endpoint_url]\n", + argv[0]); + printf("use -h for help\n"); + printf("default operation add\n"); + printf("default param1 %s\n", param1); + printf("default param2 %s\n", param2); + printf("default endpoint_url %s\n", address); + printf + ("NOTE: command line arguments must appear in given order, with trailing ones being optional\n"); + return 0; + } + if (argc > 2) + param1 = argv[2]; + if (argc > 3) + param2 = argv[3]; + if (argc > 4) + address = argv[4]; + + printf("Using endpoint : %s\n", address); + printf("\nInvoking operation %s with params %s and %s\n", operation, param1, + param2); + + node = build_om_programatically(env, operation, param1, param2); + stub = + axis2_math_stub_create_with_endpoint_uri_and_client_home(env, address, + client_home); + + /* create node and invoke math */ + if (stub) + { + ret_node = axis2_math_stub_add(stub, env, node); + } + + if (ret_node) + { + if (axiom_node_get_node_type(ret_node, env) == AXIOM_ELEMENT) + { + axis2_char_t *result = NULL; + axiom_element_t *result_ele = + (axiom_element_t *) axiom_node_get_data_element(ret_node, env); + + result = axiom_element_get_text(result_ele, env, ret_node); + printf("\nResult = %s\n", result); + } + else + { + axiom_xml_writer_t *writer = NULL; + axiom_output_t *om_output = NULL; + axis2_char_t *buffer = NULL; + writer = + axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_output = axiom_output_create(env, writer); + + axiom_node_serialize(ret_node, env, om_output); + buffer = (axis2_char_t *) axiom_xml_writer_get_xml(writer, env); + printf("\nReceived invalid OM as result : %s\n", buffer); + if (buffer) + { + AXIS2_FREE(env->allocator, buffer); + buffer = NULL; + } + if (om_output) + { + axiom_output_free(om_output, env); + om_output = NULL; + } + axiom_xml_writer_free(writer, env); + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("math stub invoke FAILED!\n"); + } + + if (stub) + { + axis2_stub_free(stub, env); + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return status; +} + +axiom_node_t * +build_om_programatically( + const axutil_env_t * env, + const axis2_char_t * operation, + const axis2_char_t * param1, + const axis2_char_t * param2) +{ + axiom_node_t *math_om_node = NULL; + axiom_element_t *math_om_ele = NULL; + axiom_node_t *text_om_node = NULL; + axiom_element_t *text_om_ele = NULL; + axiom_namespace_t *ns1 = NULL; + + axiom_xml_writer_t *xml_writer = NULL; + axiom_output_t *om_output = NULL; + axis2_char_t *buffer = NULL; + + ns1 = + axiom_namespace_create(env, "http://ws.apache.org/axis2/services/math", + "ns1"); + + math_om_ele = + axiom_element_create(env, NULL, operation, ns1, &math_om_node); + + text_om_ele = + axiom_element_create(env, math_om_node, "param1", NULL, &text_om_node); + axiom_element_set_text(text_om_ele, env, param1, text_om_node); + + text_om_ele = + axiom_element_create(env, math_om_node, "param2", NULL, &text_om_node); + axiom_element_set_text(text_om_ele, env, param2, text_om_node); + + xml_writer = + axiom_xml_writer_create_for_memory(env, NULL, AXIS2_FALSE, AXIS2_FALSE, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_output = axiom_output_create(env, xml_writer); + + axiom_node_serialize(math_om_node, env, om_output); + buffer = (axis2_char_t *) axiom_xml_writer_get_xml(xml_writer, env); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "\nSending OM node in XML : %s \n", + buffer); + if (om_output) + { + axiom_output_free(om_output, env); + om_output = NULL; + } + + return math_om_node; +} diff --git a/samples/client/math/services.xml b/samples/client/math/services.xml new file mode 100644 index 0000000..53c43e9 --- /dev/null +++ b/samples/client/math/services.xml @@ -0,0 +1,18 @@ + + math + + This is a testing service, named 'math' to test multiple operations in the same service + + + + + + + + + + + + + + diff --git a/samples/client/mtom/Makefile.am b/samples/client/mtom/Makefile.am new file mode 100644 index 0000000..df1a866 --- /dev/null +++ b/samples/client/mtom/Makefile.am @@ -0,0 +1,20 @@ +SUBDIRS=resources +prgbindir=$(prefix)/samples/bin +prgbin_PROGRAMS = mtom + +mtom_SOURCES = mtom_client.c + +mtom_LDADD = $(LDFLAGS) \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_engine \ + -laxis2_parser \ + -lpthread \ + -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +INCLUDES = @AXIS2INC@ + +EXTRA_DIST=mtom.mk diff --git a/samples/client/mtom/mtom.mk b/samples/client/mtom/mtom.mk new file mode 100644 index 0000000..01f0e3c --- /dev/null +++ b/samples/client/mtom/mtom.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" *.C /I.\..\..\..\include /c + @link.exe /nologo *.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:mtom.exe + + + + + diff --git a/samples/client/mtom/mtom_client.c b/samples/client/mtom/mtom_client.c new file mode 100644 index 0000000..070ee5b --- /dev/null +++ b/samples/client/mtom/mtom_client.c @@ -0,0 +1,271 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +axiom_node_t *build_om_programatically( + const axutil_env_t * env, + const axis2_char_t * image_name, + const axis2_char_t * to_save_name, + axis2_bool_t optimized); + +int +process_response_node( + const axutil_env_t * env, + axiom_node_t *node, + const axis2_char_t * to_save_name); + + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + const axis2_char_t *image_name = "resources/axis2.jpg"; + const axis2_char_t *to_save_name = "test.jpg"; + axis2_bool_t optimized = AXIS2_TRUE; + + /* Set up the environment */ + env = axutil_env_create_all("mtom.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of mtom service */ + address = "http://localhost:9090/axis2/services/mtom"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf + ("Usage : %s [endpoint_url] [image_name] [to_save_name] [do_not_optimize]\n", + argv[0]); + printf("use -h for help\n"); + return 0; + } + if (argc > 2) + image_name = argv[2]; + if (argc > 3) + to_save_name = argv[3]; + if (argc > 4) + optimized = AXIS2_FALSE; + + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_action(options, env, + "http://ws.apache.org/axis2/c/samples/mtomSample"); + + axis2_options_set_soap_version(options, env, AXIOM_SOAP11); + + if(optimized) + { + axis2_options_set_enable_mtom(options, env, AXIS2_TRUE); + } + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Engage addressing module */ + axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING); + + /* Build the SOAP request message payload using OM API. */ + payload = + build_om_programatically(env, image_name, to_save_name, optimized); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + if (ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + { + if (axis2_svc_client_get_last_response_has_fault(svc_client, env) == AXIS2_TRUE) + { + printf("\nRecieved Fault : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + } + else + { + printf("\nReceived OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + printf("\nmtom client invoke SUCCESSFUL!\n"); + process_response_node(env, ret_node, to_save_name); + } + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("\nmtom client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; + +} + +/* build SOAP request message content using OM */ +axiom_node_t * +build_om_programatically( + const axutil_env_t * env, + const axis2_char_t * image_name, + const axis2_char_t * to_save_name, + axis2_bool_t optimized) +{ + axiom_node_t *mtom_om_node = NULL; + axiom_element_t *mtom_om_ele = NULL; + axiom_node_t *image_om_node = NULL; + axiom_element_t *image_om_ele = NULL; + axiom_node_t *file_om_node = NULL; + axiom_element_t *file_om_ele = NULL; + axiom_node_t *data_om_node = NULL; + axiom_text_t *data_text = NULL; + axiom_namespace_t *ns1 = NULL; + axis2_char_t *om_str = NULL; + + axiom_data_handler_t *data_handler = NULL; + + ns1 = + axiom_namespace_create(env, "http://ws.apache.org/axis2/c/samples/mtom", + "ns1"); + mtom_om_ele = + axiom_element_create(env, NULL, "mtomSample", ns1, &mtom_om_node); + + file_om_ele = + axiom_element_create(env, mtom_om_node, "fileName", ns1, &file_om_node); + axiom_element_set_text(file_om_ele, env, to_save_name, file_om_node); + + image_om_ele = + axiom_element_create(env, mtom_om_node, "image", ns1, &image_om_node); + + /* This is when we directly give file name */ + + data_handler = axiom_data_handler_create(env, image_name, "image/jpeg"); + + /* Uncomment following to set a callback instead of a file */ + + /*data_handler = axiom_data_handler_create(env, NULL, "image/jpeg"); + axiom_data_handler_set_data_handler_type(data_handler, env, AXIOM_DATA_HANDLER_TYPE_CALLBACK); + axiom_data_handler_set_user_param(data_handler, env, (void *)image_name);*/ + + data_text = + axiom_text_create_with_data_handler(env, image_om_node, data_handler, + &data_om_node); + + axiom_text_set_optimize(data_text, env, optimized); + /*axiom_text_set_is_swa(data_text, env, AXIS2_TRUE);*/ + om_str = axiom_node_to_string(mtom_om_node, env); + if (om_str) + { + printf("%s", om_str); + AXIS2_FREE(env->allocator, om_str); + } + return mtom_om_node; +} + + +int +process_response_node( + const axutil_env_t * env, + axiom_node_t *node, + const axis2_char_t * to_save_name) +{ + axiom_node_t *res_om_node = NULL; + axiom_element_t *res_om_ele = NULL; + res_om_node = axiom_node_get_first_child(node, env); + + if(axiom_node_get_node_type(res_om_node, env) == AXIOM_TEXT) + {/** received mtom atttachment */ + axiom_data_handler_t *data_handler = NULL; + axiom_text_t *axiom_text = (axiom_text_t*)axiom_node_get_data_element(res_om_node, env); + data_handler = axiom_text_get_data_handler(axiom_text, env); + + /*axiom_data_handler_set_file_name(data_handler, env, (axis2_char_t *)to_save_name);*/ + if(axiom_data_handler_get_cached(data_handler, env)) + { + printf("Attachment is cached.\n"); + } + else + { + axiom_data_handler_set_file_name(data_handler, env, "test"); + axiom_data_handler_write_to(data_handler, env); + } + }else if(axiom_node_get_node_type(res_om_node, env) == AXIOM_ELEMENT){ + res_om_ele = axiom_node_get_data_element(res_om_node, env); + printf("Base64 String received \n\n\n %s \n\n", axiom_element_get_text(res_om_ele, env, res_om_node)); + } + + return 0; +} + + diff --git a/samples/client/mtom/resources/Makefile.am b/samples/client/mtom/resources/Makefile.am new file mode 100644 index 0000000..ee7e84b --- /dev/null +++ b/samples/client/mtom/resources/Makefile.am @@ -0,0 +1,3 @@ +samplesdir=$(prefix)/samples/bin/resources +samples_DATA=axis2.jpg +EXTRA_DIST=axis2.jpg diff --git a/samples/client/mtom/resources/axis2.jpg b/samples/client/mtom/resources/axis2.jpg new file mode 100644 index 0000000..73371d8 Binary files /dev/null and b/samples/client/mtom/resources/axis2.jpg differ diff --git a/samples/client/mtom_callback/Makefile.am b/samples/client/mtom_callback/Makefile.am new file mode 100644 index 0000000..10b1001 --- /dev/null +++ b/samples/client/mtom_callback/Makefile.am @@ -0,0 +1,19 @@ +prgbindir=$(prefix)/samples/bin +prgbin_PROGRAMS = mtom_callback + +mtom_callback_SOURCES = mtom_callback_client.c + +mtom_callback_LDADD = $(LDFLAGS) \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_engine \ + -laxis2_parser \ + -lpthread \ + -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +INCLUDES = @AXIS2INC@ + +EXTRA_DIST=mtom_callback.mk diff --git a/samples/client/mtom_callback/mtom_callback.mk b/samples/client/mtom_callback/mtom_callback.mk new file mode 100644 index 0000000..ff59030 --- /dev/null +++ b/samples/client/mtom_callback/mtom_callback.mk @@ -0,0 +1,4 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" *.C /I.\..\..\..\include /c + @link.exe /nologo *.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:mtom_callback.exe + diff --git a/samples/client/mtom_callback/mtom_callback_client.c b/samples/client/mtom_callback/mtom_callback_client.c new file mode 100644 index 0000000..464d997 --- /dev/null +++ b/samples/client/mtom_callback/mtom_callback_client.c @@ -0,0 +1,261 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +axiom_node_t *build_om_programatically( + const axutil_env_t * env, + const axis2_char_t * image_name); + +int +process_response_node( + const axutil_env_t * env, + axiom_node_t *node); + + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + const axis2_char_t *image_name = "resources/axis2.jpg"; + + /* Set up the environment */ + env = axutil_env_create_all("mtom_callback.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of mtom service */ + address = "http://localhost:9090/axis2/services/mtom_callback"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf + ("Usage : %s [endpoint_url] [image_name] \n", + argv[0]); + printf("use -h for help\n"); + return 0; + } + if (argc > 2) + image_name = argv[2]; + + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_action(options, env, + "http://ws.apache.org/axis2/c/samples/mtomCallbackSample"); + + axis2_options_set_soap_version(options, env, AXIOM_SOAP11); + + axis2_options_set_enable_mtom(options, env, AXIS2_TRUE); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Engage addressing module */ + axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING); + + /* Build the SOAP request message payload using OM API. */ + payload = + build_om_programatically(env, image_name); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + if (ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + { + if (axis2_svc_client_get_last_response_has_fault(svc_client, env) == AXIS2_TRUE) + { + printf("\nRecieved Fault : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + } + else + { + printf("\nReceived OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + printf("\nmtom client invoke SUCCESSFUL!\n"); + process_response_node(env, ret_node); + } + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("\nmtom client invoke FAILED!\n"); + printf("\nSending callback may not be set. Check the log for more details.\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; + +} + +/* build SOAP request message content using OM */ +axiom_node_t * +build_om_programatically( + const axutil_env_t * env, + const axis2_char_t * attachment_name) +{ + axiom_node_t *mtom_om_node = NULL; + axiom_element_t *mtom_om_ele = NULL; + axiom_node_t *attachment_om_node = NULL; + axiom_element_t *attachment_om_ele = NULL; + axiom_node_t *data_om_node = NULL; + axiom_text_t *data_text = NULL; + axiom_namespace_t *ns1 = NULL; + axis2_char_t *om_str = NULL; + + axiom_data_handler_t *data_handler = NULL; + + ns1 = + axiom_namespace_create(env, "http://ws.apache.org/axis2/c/samples/mtom", + "ns1"); + mtom_om_ele = + axiom_element_create(env, NULL, "mtomSample", ns1, &mtom_om_node); + + attachment_om_ele = + axiom_element_create(env, mtom_om_node, "attachment", ns1, &attachment_om_node); + + /* The attachment is loaded using the callback. The callback should be + * specified in the axis2.xml */ + + data_handler = axiom_data_handler_create(env, NULL, "image/jpeg"); + axiom_data_handler_set_data_handler_type(data_handler, env, AXIOM_DATA_HANDLER_TYPE_CALLBACK); + axiom_data_handler_set_user_param(data_handler, env, (void *)attachment_name); + + data_text = + axiom_text_create_with_data_handler(env, attachment_om_node, data_handler, + &data_om_node); + + axiom_text_set_optimize(data_text, env, AXIS2_TRUE); + om_str = axiom_node_to_string(mtom_om_node, env); + if (om_str) + { + printf("%s", om_str); + AXIS2_FREE(env->allocator, om_str); + } + return mtom_om_node; +} + + +int +process_response_node( + const axutil_env_t * env, + axiom_node_t *node) +{ + axiom_node_t *res_om_node = NULL; + res_om_node = axiom_node_get_first_child(node, env); + + if(axiom_node_get_node_type(res_om_node, env) == AXIOM_TEXT) + {/** received mtom atttachment */ + axiom_data_handler_t *data_handler = NULL; + axiom_text_t *axiom_text = (axiom_text_t*)axiom_node_get_data_element(res_om_node, env); + data_handler = axiom_text_get_data_handler(axiom_text, env); + + if(axiom_data_handler_get_cached(data_handler, env)) + { + axis2_char_t *mime_id = NULL; + + printf("Attachment is cached.\n"); + + mime_id = axiom_data_handler_get_mime_id(data_handler, env); + if(mime_id) + { + /* The client implementer should know what to do with + * the attachment in the response. Becasue the attachment + * was stored using the callback given by the client */ + + /*axis2_char_t command[1000]; + + sprintf(command, "rm -f /opt/tmp/%s", mime_id); + system(command);*/ + } + } + else + { + axiom_data_handler_set_file_name(data_handler, env, "test"); + axiom_data_handler_write_to(data_handler, env); + } + } + else + { + printf("No attachemnt in the response\n"); + } + + return 0; +} + + diff --git a/samples/client/notify/Makefile.am b/samples/client/notify/Makefile.am new file mode 100644 index 0000000..c89bd4c --- /dev/null +++ b/samples/client/notify/Makefile.am @@ -0,0 +1,18 @@ +prgbindir=$(prefix)/samples/bin +prgbin_PROGRAMS = notify +notify_SOURCES = notify_client.c + +notify_LDADD = \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_engine \ + -laxis2_parser \ + -lpthread \ + -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +INCLUDES = @AXIS2INC@ + +EXTRA_DIST=notify.mk diff --git a/samples/client/notify/notify.mk b/samples/client/notify/notify.mk new file mode 100644 index 0000000..f1759e2 --- /dev/null +++ b/samples/client/notify/notify.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" *.C /I.\..\..\..\include /c + @link.exe /nologo *.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:notify.exe + + + + + diff --git a/samples/client/notify/notify_client.c b/samples/client/notify/notify_client.c new file mode 100644 index 0000000..15629b0 --- /dev/null +++ b/samples/client/notify/notify_client.c @@ -0,0 +1,152 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +axiom_node_t *build_om_programatically( + const axutil_env_t * env); + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axis2_status_t status = AXIS2_FAILURE; + + /* Set up the environment */ + env = axutil_env_create_all("notify.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "http://localhost:9090/axis2/services/notify"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf("Usage : %s [endpoint_url]\n", argv[0]); + printf("use -h for help\n"); + return 0; + } + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_action(options, env, "http://example.org/action/notify"); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Engage addressing module */ + axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_programatically(env); + + /* Send request */ + status = axis2_svc_client_send_robust(svc_client, env, payload); + + if (status == AXIS2_SUCCESS) + { + printf("\nnotify client invoke SUCCESSFUL!\n"); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("notify client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} + +/* build SOAP request message content using OM */ +axiom_node_t * +build_om_programatically( + const axutil_env_t * env) +{ + axiom_node_t *notify_om_node = NULL; + axiom_element_t *notify_om_ele = NULL; + axiom_namespace_t *ns1 = NULL; + axis2_char_t *buffer = NULL; + + ns1 = axiom_namespace_create(env, "http://example.org/notify", "m"); + notify_om_ele = + axiom_element_create(env, NULL, "notify", ns1, ¬ify_om_node); + axiom_element_set_text(notify_om_ele, env, "notify5", notify_om_node); + + buffer = axiom_node_to_string(notify_om_node, env); + if (buffer) + { + printf("\nSending OM node in XML : %s \n", buffer); + AXIS2_FREE(env->allocator, buffer); + } + + return notify_om_node; +} diff --git a/samples/client/version/Makefile.am b/samples/client/version/Makefile.am new file mode 100644 index 0000000..9e66c83 --- /dev/null +++ b/samples/client/version/Makefile.am @@ -0,0 +1,19 @@ +prgbindir=$(prefix)/samples/bin +prgbin_PROGRAMS = version +noinst_HEADERS = axis2_version_stub.h +version_SOURCES = axis2_version_stub.c \ + version_client.c + +version_LDADD = \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_engine \ + -laxis2_parser \ + -lpthread \ + -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +INCLUDES = @AXIS2INC@ + diff --git a/samples/client/version/axis2_version_stub.c b/samples/client/version/axis2_version_stub.c new file mode 100644 index 0000000..168e1b0 --- /dev/null +++ b/samples/client/version/axis2_version_stub.c @@ -0,0 +1,114 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_version_stub.h" + +axis2_stub_t * +axis2_version_stub_create_with_endpoint_ref_and_client_home( + const axutil_env_t * env, + axis2_endpoint_ref_t * endpoint_ref, + axis2_char_t * client_home) +{ + axis2_stub_t *stub = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + stub = (axis2_stub_t *) + axis2_stub_create_with_endpoint_ref_and_client_home(env, endpoint_ref, + client_home); + if (!stub) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + axis2_populate_axis_service(stub, env); + return stub; +} + +void +axis2_populate_axis_service( + axis2_stub_t * stub, + const axutil_env_t * env) +{ + axis2_svc_client_t *svc_client = NULL; + axutil_qname_t *op_qname = NULL; + axis2_svc_t *svc = NULL; + axis2_op_t *op = NULL; + + /*Modifying the Service */ + svc_client = axis2_stub_get_svc_client(stub, env); + svc = axis2_svc_client_get_svc(svc_client, env); + + /*creating the operations */ + + op_qname = axutil_qname_create(env, "GetVersion", "", NULL); + op = axis2_op_create_with_qname(env, op_qname); + axis2_op_set_msg_exchange_pattern(op, env, AXIS2_MEP_URI_OUT_IN); + axis2_svc_add_op(svc, env, op); + axutil_qname_free(op_qname, env); + +} + +axis2_stub_t * +axis2_version_stub_create_with_endpoint_uri_and_client_home( + const axutil_env_t * env, + const axis2_char_t * endpoint_uri, + const axis2_char_t * client_home) +{ + axis2_stub_t *stub = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + stub = (axis2_stub_t *) + axis2_stub_create_with_endpoint_uri_and_client_home(env, endpoint_uri, + client_home); + if (!stub) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + axis2_populate_axis_service(stub, env); + + return stub; +} + +/***************************Function implementation****************************/ + +axiom_node_t * +axis2_version_stub_get_version( + axis2_stub_t * stub, + const axutil_env_t * env, + axiom_node_t * node) +{ + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *ret_node = NULL; + axutil_qname_t *op_qname = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + svc_client = axis2_stub_get_svc_client(stub, env); + op_qname = axutil_qname_create(env, "GetVersion", "", NULL); + ret_node = + axis2_svc_client_send_receive_with_op_qname(svc_client, env, op_qname, + node); + axutil_qname_free(op_qname, env); + + return ret_node; +} + diff --git a/samples/client/version/axis2_version_stub.h b/samples/client/version/axis2_version_stub.h new file mode 100644 index 0000000..9ebdfa5 --- /dev/null +++ b/samples/client/version/axis2_version_stub.h @@ -0,0 +1,71 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_VERSION_STUB_H +#define AXIS2_VERSION_STUB_H + +/** + * @file axis2_version_stub.h + * @brief axis2 version stub interface + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + axiom_node_t *axis2_version_stub_get_version( + axis2_stub_t * stub, + const axutil_env_t * env, + axiom_node_t * node); + + /** + * populate services + */ + void axis2_populate_axis_service( + axis2_stub_t * stub, + const axutil_env_t * env); + + /** + * Creates axis2_stub struct + * @param endpoint reference + * @return pointer to newly created axis2_stub struct + */ + axis2_stub_t *axis2_version_stub_create_with_endpoint_ref_and_client_home( + const axutil_env_t * env, + axis2_endpoint_ref_t * endpoint_ref, + axis2_char_t * client_home); + + /** + * Creates axis2_stub struct + * @param endpoint uri + * @return pointer to newly created axis2_stub struct + */ + axis2_stub_t *axis2_version_stub_create_with_endpoint_uri_and_client_home( + const axutil_env_t * env, + const axis2_char_t * endpoint_uri, + const axis2_char_t * client_home); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_VERSION_STUB_H */ diff --git a/samples/client/version/services.xml b/samples/client/version/services.xml new file mode 100644 index 0000000..88fa9a1 --- /dev/null +++ b/samples/client/version/services.xml @@ -0,0 +1,9 @@ + + version + + This is a testing service, named 'version' to test multiple operations in the same service + + + + + diff --git a/samples/client/version/test.xml b/samples/client/version/test.xml new file mode 100644 index 0000000..ca6650c --- /dev/null +++ b/samples/client/version/test.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/samples/client/version/version_client.c b/samples/client/version/version_client.c new file mode 100644 index 0000000..b72d242 --- /dev/null +++ b/samples/client/version/version_client.c @@ -0,0 +1,185 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_version_stub.h" +#include +#include +#include +#include +#include + +axiom_node_t *build_om_programatically( + const axutil_env_t * env); + +int +main( + int argc, + char **argv) +{ + axis2_stub_t *stub = NULL; + axiom_node_t *node = NULL; + axis2_status_t status = AXIS2_FAILURE; + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + const axis2_char_t *client_home = NULL; + axiom_node_t *ret_node = NULL; + + const axis2_char_t *operation = "get_version"; + const axis2_char_t *param1 = "40"; + const axis2_char_t *param2 = "8"; + + env = axutil_env_create_all("version_blocking.log", AXIS2_LOG_LEVEL_TRACE); + + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + address = "http://localhost:9090/axis2/services/version"; + if (argc > 1) + operation = argv[1]; + if (axutil_strcmp(operation, "-h") == 0) + { + printf("Usage : %s [operation] [param1] [param2] [endpoint_url]\n", + argv[0]); + printf("use -h for help\n"); + printf("default operation get_version\n"); + printf("default param1 %s\n", param1); + printf("default param2 %s\n", param2); + printf("default endpoint_url %s\n", address); + printf + ("NOTE: command line arguments must appear in given order, with trailing ones being optional\n"); + return 0; + } + if (argc > 2) + param1 = argv[2]; + if (argc > 3) + param2 = argv[3]; + if (argc > 4) + address = argv[4]; + + printf("Using endpoint : %s\n", address); + printf("\nInvoking operation %s\n", operation); + + node = build_om_programatically(env); + stub = + axis2_version_stub_create_with_endpoint_uri_and_client_home(env, address, + client_home); + + /* create node and invoke version */ + if (stub) + { + ret_node = axis2_version_stub_get_version(stub, env, node); + } + + if (ret_node) + { + if (axiom_node_get_node_type(ret_node, env) == AXIOM_ELEMENT) + { + axis2_char_t *result = NULL; + axiom_element_t *result_ele = + (axiom_element_t *) axiom_node_get_data_element(ret_node, env); + + result = axiom_element_get_text(result_ele, env, ret_node); + printf("\nResult = %s\n", result); + } + else + { + axiom_xml_writer_t *writer = NULL; + axiom_output_t *om_output = NULL; + axis2_char_t *buffer = NULL; + writer = + axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_output = axiom_output_create(env, writer); + + axiom_node_serialize(ret_node, env, om_output); + buffer = (axis2_char_t *) axiom_xml_writer_get_xml(writer, env); + printf("\nReceived invalid OM as result : %s\n", buffer); + if (buffer) + { + AXIS2_FREE(env->allocator, buffer); + buffer = NULL; + } + if (om_output) + { + axiom_output_free(om_output, env); + om_output = NULL; + } + axiom_xml_writer_free(writer, env); + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("version stub invoke FAILED!\n"); + } + + if (stub) + { + axis2_stub_free(stub, env); + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return status; +} + +axiom_node_t * +build_om_programatically( + const axutil_env_t * env) +{ + axiom_node_t *version_om_node = NULL; + axiom_element_t *version_om_ele = NULL; + axiom_namespace_t *ns1 = NULL; + + axiom_xml_writer_t *xml_writer = NULL; + axiom_output_t *om_output = NULL; + axis2_char_t *buffer = NULL; + + ns1 = + axiom_namespace_create(env, "urn:aewebservices71", + "ns1"); + + version_om_ele = + axiom_element_create(env, NULL, "GetVersion", ns1, &version_om_node); + + + xml_writer = + axiom_xml_writer_create_for_memory(env, NULL, AXIS2_FALSE, AXIS2_FALSE, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_output = axiom_output_create(env, xml_writer); + + axiom_node_serialize(version_om_node, env, om_output); + buffer = (axis2_char_t *) axiom_xml_writer_get_xml(xml_writer, env); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "\nSending OM node in XML : %s \n", + buffer); + if (om_output) + { + axiom_output_free(om_output, env); + om_output = NULL; + } + + return version_om_node; +} diff --git a/samples/client/yahoo/Makefile.am b/samples/client/yahoo/Makefile.am new file mode 100644 index 0000000..3d8c3c8 --- /dev/null +++ b/samples/client/yahoo/Makefile.am @@ -0,0 +1,17 @@ +prgbindir=$(prefix)/samples/bin +prgbin_PROGRAMS = yahoosearch +yahoosearch_SOURCES = yahoo_client.c + +yahoosearch_LDADD = $(LDFLAGS) \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_engine \ + -laxis2_parser \ + -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +INCLUDES = @AXIS2INC@ + +EXTRA_DIST=yahoo.mk diff --git a/samples/client/yahoo/yahoo.mk b/samples/client/yahoo/yahoo.mk new file mode 100644 index 0000000..815ad00 --- /dev/null +++ b/samples/client/yahoo/yahoo.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" *.C /I.\..\..\..\include /c + @link.exe /nologo *.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:yahoo.exe + + + + + diff --git a/samples/client/yahoo/yahoo_client.c b/samples/client/yahoo/yahoo_client.c new file mode 100644 index 0000000..01fd97b --- /dev/null +++ b/samples/client/yahoo/yahoo_client.c @@ -0,0 +1,207 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +axiom_node_t *build_yahoo_rest_payload( + const axutil_env_t * env, + axis2_char_t * string); + +void format_output( + const axutil_env_t * env, + axiom_node_t * ret_node); + +void format_output_one( + const axutil_env_t * env, + axiom_node_t * child_node); + +int print_help( + ); + +int +main( + int argc, + char *argv[]) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + axis2_char_t *search_string = NULL; + + if (argc > 1) + { + + if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) + { + print_help(); + } + else + search_string = argv[1]; + } + + env = axutil_env_create_all("yahoo_rest_search.log", AXIS2_LOG_LEVEL_TRACE); + address = "http://search.yahooapis.com/WebSearchService/V1/webSearch"; + + printf("using endpoint %s \n", address); + + endpoint_ref = axis2_endpoint_ref_create(env, address); + + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + + axis2_options_set_enable_rest(options, env, AXIS2_TRUE); + axis2_options_set_http_method(options, env, AXIS2_HTTP_GET); + + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Build the SOAP request message payload using OM API. */ + payload = build_yahoo_rest_payload(env, search_string); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (ret_node) + { + format_output(env, ret_node); + printf("\nYahoo REST client invoke SUCCESSFUL!\n"); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("Yahoo REST client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} + +axiom_node_t * +build_yahoo_rest_payload( + const axutil_env_t * env, + axis2_char_t * string) +{ + axiom_node_t *root_node; + axiom_node_t *appid_node; + axiom_node_t *query_node; + axiom_element_t *appid_element; + axiom_element_t *query_element; + axiom_element_t *root_element; + + root_element = + axiom_element_create(env, NULL, "yahoo_rest_search", NULL, &root_node); + appid_element = + axiom_element_create(env, root_node, "appid", NULL, &appid_node); + axiom_element_set_text(appid_element, env, "YahooDemo", appid_node); + query_element = + axiom_element_create(env, root_node, "query", NULL, &query_node); + + if (string) + { + axiom_element_set_text(query_element, env, string, query_node); + } + else + { + axiom_element_set_text(query_element, env, "finance", query_node); + } + + return root_node; +} + +void +format_output( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *child_node; + child_node = axiom_node_get_first_child(node, env); + while (axiom_node_is_complete(node, env) && child_node) + { + printf("\n\n"); + format_output_one(env, child_node); + child_node = axiom_node_get_next_sibling(child_node, env); + } + +} + +void +format_output_one( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *child_node; + child_node = axiom_node_get_first_child(node, env); + while (axiom_node_is_complete(node, env) && child_node) + { + axis2_char_t *om_str = axiom_node_to_string(child_node, env); + if (om_str) + { + printf("\t%s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + } + child_node = axiom_node_get_next_sibling(child_node, env); + } +} + +int +print_help( + ) +{ + printf("./yahoosearch string_to_search \n"); + exit(0); + return 0; +} diff --git a/samples/codegen/client/calc_xml_inout/Makefile.am b/samples/codegen/client/calc_xml_inout/Makefile.am new file mode 100644 index 0000000..aa3981c --- /dev/null +++ b/samples/codegen/client/calc_xml_inout/Makefile.am @@ -0,0 +1,24 @@ +prgbindir=$(prefix)/bin/samples +prgbin_PROGRAMS = Calculator +samplesdir=$(prefix)/samples/client/Calculator + +Calculator_SOURCES = \ + test_Calcultor.c \ + axis2_Calculator_stub.c + + +Calculator_LDADD = $(LDFLAGS) \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_wsdl \ + -laxis2_engine \ + -laxis2_parser \ + -lpthread \ + -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +INCLUDES = -I$(AXIS2C_HOME)/include \ + @UTILINC@ \ + @AXIOMINC@ diff --git a/samples/codegen/client/calc_xml_inout/readme b/samples/codegen/client/calc_xml_inout/readme new file mode 100644 index 0000000..905d49a --- /dev/null +++ b/samples/codegen/client/calc_xml_inout/readme @@ -0,0 +1,12 @@ +This sample demostrates the use of code generation using Axis2/Java WSDL2Java +tool (Axis2/Java source revision 414253). + +sample source test_calcultor.c +wsdl $AXIS2C_SRC_HOME/test/resources/wsdl/Calculator.wsdl + +Command to execute the code generation: +WSDL2C.sh -uri -l c -d none +WSDL2C.bat -uri -l c -d none + +Please check the instruction of $AXIS2C_SRC_HOME/c/tools/codegen/javatool/README.txt +on how to use the script diff --git a/samples/codegen/client/calc_xml_inout/test_calculator.c b/samples/codegen/client/calc_xml_inout/test_calculator.c new file mode 100644 index 0000000..572e809 --- /dev/null +++ b/samples/codegen/client/calc_xml_inout/test_calculator.c @@ -0,0 +1,125 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_stub_Calculator.h" + +axiom_node_t *generate_request_xml( + const axutil_env_t * env); +void handle_respone_xml( + const axutil_env_t * env, + axiom_node_t * res); + +int +main( + int argc, + char **argv) +{ + axutil_env_t *env = NULL; + axis2_char_t *operation = NULL; + axis2_char_t *client_home = NULL; + + axis2_char_t *endpoint_uri = NULL; + + axis2_stub_t *stub = NULL; + + axiom_node_t *req = NULL; + axiom_node_t *res = NULL; + + endpoint_uri = "http://localhost:9090/axis2/services/Calculator"; + + env = + axutil_env_create_all("codegen_utest_blocking.log", + AXIS2_LOG_LEVEL_TRACE); + + /* Set up deploy folder. */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home) + client_home = "../../../deploy"; + + stub = axis2_stub_create_Calculator(env, client_home, endpoint_uri); + + req = generate_request_xml(env); + + /* invoke the web service method */ + res = axis2_stub_op_Calculator_add(stub, env, req); + + handle_respone_xml(env, res); + + return 0; +} + +axiom_node_t * +generate_request_xml( + const axutil_env_t * env) +{ + axiom_node_t *op_node = NULL; + axiom_element_t *op_ele = NULL; + axiom_node_t *value_node = NULL; + axiom_element_t *value_ele = NULL; + axiom_namespace_t *ns1 = NULL; + axis2_char_t *om_str = NULL; + + int value1 = 13; + int value2 = 7; + char value_str[64]; + + ns1 = + axiom_namespace_create(env, "http://localhost/axis/Calculator", "ns1"); + op_ele = axiom_element_create(env, NULL, "add", ns1, &op_node); + + value_ele = axiom_element_create(env, op_node, "in1", NULL, &value_node); + sprintf(value_str, "%d", value1); + axiom_element_set_text(value_ele, env, value_str, value_node); + + value_ele = axiom_element_create(env, op_node, "in2", NULL, &value_node); + sprintf(value_str, "%d", value1); + axiom_element_set_text(value_ele, env, value_str, value_node); + + printf("requesting %d + %d \n", value1, value2); + om_str = axiom_node_to_string(op_node, env); + if (om_str) + printf("\nSending OM : %s\n", om_str); + + return op_node; + +} + +void +handle_respone_xml( + const axutil_env_t * env, + axiom_node_t * res) +{ + axiom_node_t *node = NULL; + axiom_element_t *ele = NULL; + axis2_char_t *text = NULL; + + if (!res) + { + printf("response null\n"); + return; + } + node = axiom_node_get_first_child(res, env); + if (node) + { + ele = axiom_node_get_data_element(node, env); + text = axiom_element_get_text(ele, env, node); + + printf("answer = %s\n", text); + } + +} diff --git a/samples/codegen/client/calculator/Makefile.am b/samples/codegen/client/calculator/Makefile.am new file mode 100644 index 0000000..9e75ed0 --- /dev/null +++ b/samples/codegen/client/calculator/Makefile.am @@ -0,0 +1,26 @@ +prgbindir=$(prefix)/bin/samples +prgbin_PROGRAMS = Calculator +samplesdir=$(prefix)/samples/client/Calculator + +Calculator_SOURCES = \ +axis2_add.c axis2_Calculator_stub.c axis2_divResponse.c axis2_mulResponse.c axis2_subResponse.c \ +axis2_addRequest.c axis2_div.c axis2_mul.c axis2_sub.c test_Calcultor.c \ +axis2_addResponse20.c axis2_divRequest.c axis2_mulRequest.c axis2_subRequest.c \ +axis2_addResponse.c axis2_divResponse16.c axis2_mulResponse14.c axis2_subResponse12.c + + +Calculator_LDADD = $(LDFLAGS) \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_wsdl \ + -laxis2_engine \ + -laxis2_parser \ + -lpthread \ + -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +INCLUDES = -I$(AXIS2C_HOME)/include \ + @UTILINC@ \ + @AXIOMINC@ diff --git a/samples/codegen/client/calculator/readme b/samples/codegen/client/calculator/readme new file mode 100644 index 0000000..2a7a351 --- /dev/null +++ b/samples/codegen/client/calculator/readme @@ -0,0 +1,15 @@ +This sample demonstrates the use of code generation using Axis2/Java WSDL2Java +tool (Axis2/Java source revision 414253). + +sample source test_calcultor.c +wsdl $AXIS2C_SRC_HOME/test/resources/wsdl/Calculator.wsdl + + +Command to execute the code generation: + +WSDL2C.sh -uri Calculator.wsdl -u -d adb +WSDL2C.bat -uri Calculator.wsdl -u -d adb + +Please check the instruction of $AXIS2C_SRC_HOME/c/tools/codegen/javatool/README.txt +on how to use the script + diff --git a/samples/codegen/client/calculator/test_calculator.c b/samples/codegen/client/calculator/test_calculator.c new file mode 100644 index 0000000..2f4d2eb --- /dev/null +++ b/samples/codegen/client/calculator/test_calculator.c @@ -0,0 +1,77 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_stub_Calculator.h" + +int +main( + int argc, + char **argv) +{ + axutil_env_t *env = NULL; + axis2_char_t *operation = NULL; + axis2_char_t *client_home = NULL; + + axis2_char_t *endpoint_uri = NULL; + + axis2_stub_t *stub = NULL; + + /* variables use databinding */ + adb_addResponse_t *add_res = NULL; + adb_add_t *add_req = NULL; + + int ret_val = 0; + + int val1 = 8; + int val2 = 13; + + endpoint_uri = "http://localhost:9090/axis2/services/calculator"; + + env = + axutil_env_create_all("codegen_utest_blocking.log", + AXIS2_LOG_LEVEL_TRACE); + + /* Set up deploy folder. */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home) + client_home = "../../../deploy"; + + stub = axis2_stub_create_Calculator(env, client_home, endpoint_uri); + + /* create the struct */ + add_req = adb_add_create(env); + adb_add_set_in0(add_req, env, val1); + adb_add_set_in1(add_req, env, val2); + + + /* invoke the web service method */ + add_res = axis2_stub_op_Calculator_add(stub, env, add_req); + + if (!add_res) + { + printf("Error: response NULL\n"); + return -1; + } + + /* return the output params using databinding */ + ret_val = adb_addResponse_get_addReturn(add_res, env); + + printf("finally: add (%d %d ) = %d\n", val1, val2, ret_val); + + return 0; +} diff --git a/samples/codegen/client/interop_doc1/Makefile.am b/samples/codegen/client/interop_doc1/Makefile.am new file mode 100644 index 0000000..ff7ecb8 --- /dev/null +++ b/samples/codegen/client/interop_doc1/Makefile.am @@ -0,0 +1,56 @@ +prgbindir=$(prefix)/bin/samples +samplesdir=$(prefix)/samples/client/InteropTestPortTypeDocService +prgbin_PROGRAMS = test_echo_date test_echo_struct_array +test_echo_date_SOURCES = \ +axis2_echoBase64.c axis2_echoFloat.c axis2_echoString.c \ +axis2_echoBase64Response.c axis2_echoFloatResponse.c axis2_echoStringResponse.c \ +axis2_echoBoolean.c axis2_echoHexBinary.c axis2_echoStructArray.c \ +axis2_echoBooleanResponse.c axis2_echoHexBinaryResponse.c axis2_echoStructArrayResponse.c \ +axis2_echoDate.c axis2_echoIntegerArray.c axis2_echoStruct.c \ +axis2_echoDateResponse.c axis2_echoIntegerArrayResponse.c axis2_echoStructResponse.c \ +axis2_echoDecimal.c axis2_echoInteger.c axis2_echoVoid.c \ +axis2_echoDecimalResponse.c axis2_echoIntegerResponse.c axis2_echoVoidResponse.c \ +axis2_echoFloatArray.c axis2_echoStringArray.c axis2_InteropTestPortTypeDocService_stub.c \ +axis2_echoFloatArrayResponse.c axis2_echoStringArrayResponse.c axis2_SOAPStruct.c \ +test_echo_date.c + +test_echo_date_LDADD = \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_wsdl \ + -laxis2_engine \ + -laxis2_parser \ + -lpthread \ + -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +test_echo_struct_array_SOURCES = \ +axis2_echoBase64.c axis2_echoFloat.c axis2_echoString.c \ +axis2_echoBase64Response.c axis2_echoFloatResponse.c axis2_echoStringResponse.c \ +axis2_echoBoolean.c axis2_echoHexBinary.c axis2_echoStructArray.c \ +axis2_echoBooleanResponse.c axis2_echoHexBinaryResponse.c axis2_echoStructArrayResponse.c \ +axis2_echoDate.c axis2_echoIntegerArray.c axis2_echoStruct.c \ +axis2_echoDateResponse.c axis2_echoIntegerArrayResponse.c axis2_echoStructResponse.c \ +axis2_echoDecimal.c axis2_echoInteger.c axis2_echoVoid.c \ +axis2_echoDecimalResponse.c axis2_echoIntegerResponse.c axis2_echoVoidResponse.c \ +axis2_echoFloatArray.c axis2_echoStringArray.c axis2_InteropTestPortTypeDocService_stub.c \ +axis2_echoFloatArrayResponse.c axis2_echoStringArrayResponse.c axis2_SOAPStruct.c \ +test_echo_struct_array.c + +test_echo_struct_array_LDADD = \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_wsdl \ + -laxis2_engine \ + -laxis2_parser \ + -lpthread \ + -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +INCLUDES = -I$(AXIS2C_HOME)/include \ + @UTILINC@ \ + @AXIOMINC@ diff --git a/samples/codegen/client/interop_doc1/readme b/samples/codegen/client/interop_doc1/readme new file mode 100644 index 0000000..dc4ed1f --- /dev/null +++ b/samples/codegen/client/interop_doc1/readme @@ -0,0 +1,13 @@ +This sample demonstrates the use of code generation using Axis2/Java WSDL2Java +tool (Axis2/Java source revision 414253). + +sample sources test_echo_date.c test_echo_struct_array.c +wsdl $AXIS2C_SRC_HOME/test/resources/wsdl/InteropTestRound1Doc.wsdl + +Command to execute the code generation: +WSDL2C.sh -uri InteropTestRound1Doc.wsdl -u -d adb +WSDL2C.bat -uri InteropTestRound1Doc.wsdl -u -d adb + +Please check the instruction of $AXIS2C_SRC_HOME/c/tools/codegen/javatool/README.txt +on how to use the script + diff --git a/samples/codegen/client/interop_doc1/test_echo_date.c b/samples/codegen/client/interop_doc1/test_echo_date.c new file mode 100644 index 0000000..b66c33d --- /dev/null +++ b/samples/codegen/client/interop_doc1/test_echo_date.c @@ -0,0 +1,77 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_stub_InteropTestPortTypeDocService.h" + +int +main( + int argc, + char **argv) +{ + axutil_env_t *env = NULL; + axis2_char_t *client_home = NULL; + + axis2_char_t *endpoint_uri = NULL; + + axis2_stub_t *stub = NULL; + + /* variables use databinding */ + adb_echoDate_t *echo_in = NULL; + adb_echoDateResponse_t *echo_out = NULL; + + axutil_date_time_t *echo_date = NULL; + axutil_date_time_t *return_echo_date = NULL; + + axis2_char_t *send_date_str = NULL; + axis2_char_t *return_date_str = NULL; + + endpoint_uri = "http://localhost:9090/axis2/services/interop_doc1"; + + env = axutil_env_create_all("codegen_utest_blocking.log", + AXIS2_LOG_LEVEL_TRACE); + + /* Set up deploy folder. */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home) + client_home = "../../../deploy"; + + stub = axis2_stub_create_InteropTestPortTypeDocService(env, + client_home, + endpoint_uri); + + /* create the struct */ + echo_date = axutil_date_time_create(env); /* default to current date */ + send_date_str = axutil_date_time_serialize_date_time(echo_date, env); + printf("sending date %s\n", send_date_str); + + /* create the input params using databinding */ + echo_in = adb_echoDate_create(env); + adb_echoDate_set_arg_0_10(echo_in, env, echo_date); + + /* invoke the web service method */ + echo_out = axis2_stub_op_InteropTestPortTypeDocService_echoDate(stub, env, echo_in); + + /* return the output params using databinding */ + return_echo_date = adb_echoDateResponse_get_echoDateReturn(echo_out, env); + + return_date_str = + axutil_date_time_serialize_date_time(return_echo_date, env); + printf("returned date %s\n", return_date_str); + + return 0; +} diff --git a/samples/codegen/client/interop_doc1/test_echo_struct_array.c b/samples/codegen/client/interop_doc1/test_echo_struct_array.c new file mode 100644 index 0000000..19a3a9a --- /dev/null +++ b/samples/codegen/client/interop_doc1/test_echo_struct_array.c @@ -0,0 +1,93 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_stub_InteropTestPortTypeDocService.h" + +int +main( + int argc, + char **argv) +{ + axutil_env_t *env = NULL; + axis2_char_t *client_home = NULL; + axis2_char_t *endpoint_uri = NULL; + axis2_stub_t *stub = NULL; + + /* variables use databinding */ + adb_echoStructArray_t *echo_in = NULL; + adb_echoStructArrayResponse_t *echo_out = NULL; + + adb_SOAPStruct_t *echo_struct = NULL; + int arr_size = 0; + int ret_arr_size = 0; + + int i = 0; /* for for loop */ + + endpoint_uri = "http://localhost:9090/axis2/services/interop_doc1"; + + env = axutil_env_create_all("codegen_utest_blocking.log", + AXIS2_LOG_LEVEL_TRACE); + + /* Set up deploy folder. */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home) + client_home = "../../../deploy"; + + stub = axis2_stub_create_InteropTestPortTypeDocService(env, + client_home, + endpoint_uri); + + /* create the struct */ + echo_in = adb_echoStructArray_create(env); + + /* create the struct array */ + echo_struct = adb_SOAPStruct_create(env); + adb_SOAPStruct_set_varString(echo_struct, env, "sturct0"); + adb_SOAPStruct_set_varInt(echo_struct, env, 0); + adb_SOAPStruct_set_varFloat(echo_struct, env, 0); + + adb_echoStructArray_add_arg_0_7(echo_in, env, echo_struct); + + echo_struct = adb_SOAPStruct_create(env); + adb_SOAPStruct_set_varString(echo_struct, env, "sturct1"); + adb_SOAPStruct_set_varInt(echo_struct, env, 10); + adb_SOAPStruct_set_varFloat(echo_struct, env, 100); + + adb_echoStructArray_add_arg_0_7(echo_in, env, echo_struct); + + echo_struct = adb_SOAPStruct_create(env); + adb_SOAPStruct_set_varString(echo_struct, env, "sturct2"); + adb_SOAPStruct_set_varInt(echo_struct, env, 20); + adb_SOAPStruct_set_varFloat(echo_struct, env, 200); + + adb_echoStructArray_add_arg_0_7(echo_in, env, echo_struct); + + /* invoke the web service method */ + echo_out = axis2_stub_op_InteropTestPortTypeDocService_echoStruct(stub, env, echo_in); + + ret_arr_size = adb_echoStructArrayResponse_sizeof_echoStructArrayReturn(echo_out, env); + for (i = 0; i < ret_arr_size; i++) + { + echo_struct = adb_echoStructArrayResponse_get_echoStructArrayReturn(echo_out, env); + printf("recieved turn %d \n string %s\n int %d\n float %f\n\n", i, + adb_SOAPStruct_get_varString(echo_struct, env), + adb_SOAPStruct_get_varInt(echo_struct, env), + adb_SOAPStruct_get_varFloat(echo_struct, env)); + } + return 0; +} diff --git a/samples/codegen/client/interop_doc2/Makefile.am b/samples/codegen/client/interop_doc2/Makefile.am new file mode 100644 index 0000000..1208385 --- /dev/null +++ b/samples/codegen/client/interop_doc2/Makefile.am @@ -0,0 +1,42 @@ +prgbindir = $(prefix)/bin/samples +prgbin_PROGRAMS = test_echo_string test_echo_struct test_echo_string_array +samplesdir = $(prefix)/samples/client/WSDLInteropTestDocLitService + +test_echo_string_SOURCES = \ + axis2_ArrayOfstring_literal.c axis2_echoStringArray.c axis2_echoStringArrayResponse.c \ + axis2_echoString.c axis2_echoStringResponse.c axis2_echoStruct.c axis2_echoStructResponse.c \ + axis2_echoVoid.c axis2_echoVoidResponse.c axis2_SOAPStruct.c axis2_WSDLInteropTestDocLitService_stub.c \ + test_echo_string.c +test_echo_string_LDADD = \ + $(LDFLAGS) -L$(AXIS2C_HOME)/lib -laxutil -laxis2_axiom \ + -laxis2_wsdl -laxis2_engine -laxis2_parser -lpthread -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +test_echo_struct_SOURCES = \ + axis2_ArrayOfstring_literal.c axis2_echoStringArray.c \ + axis2_echoStringArrayResponse.c axis2_echoString.c \ + axis2_echoStringResponse.c axis2_echoStruct.c axis2_echoStructResponse.c \ + axis2_echoVoid.c axis2_echoVoidResponse.c axis2_SOAPStruct.c \ + axis2_WSDLInteropTestDocLitService_stub.c test_echo_struct.c +test_echo_struct_LDADD = \ + $(LDFLAGS) -L$(AXIS2C_HOME)/lib -laxutil -laxis2_axiom \ + -laxis2_wsdl -laxis2_engine -laxis2_parser -lpthread -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +test_echo_string_array_SOURCES = \ + axis2_ArrayOfstring_literal.c axis2_echoStringArray.c \ + axis2_echoStringArrayResponse.c axis2_echoString.c \ + axis2_echoStringResponse.c axis2_echoStruct.c axis2_echoStructResponse.c \ + axis2_echoVoid.c axis2_echoVoidResponse.c axis2_SOAPStruct.c \ + axis2_WSDLInteropTestDocLitService_stub.c test_echo_string_array.c +test_echo_string_array_LDADD = \ + $(LDFLAGS) -L$(AXIS2C_HOME)/lib -laxutil -laxis2_axiom \ + -laxis2_wsdl -laxis2_engine -laxis2_parser -lpthread -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +INCLUDES = -I$(AXIS2C_HOME)/include \ + @UTILINC@ \ + @AXIOMINC@ diff --git a/samples/codegen/client/interop_doc2/readme b/samples/codegen/client/interop_doc2/readme new file mode 100644 index 0000000..efc2a9f --- /dev/null +++ b/samples/codegen/client/interop_doc2/readme @@ -0,0 +1,13 @@ +This sample demonstrates the use of code generation using Axis2/Java WSDL2Java +tool (Axis2/Java source revision 414253). + +sample sources test_echo_string_array.c test_echo_string.c test_echo_struct.c +wsdl $AXIS2C_SRC_HOME/test/resources/wsdl/interoptestdoclitparameters.wsdl + +Command to execute the code generation: + +WSDL2C.sh -uri Calculator.wsdl -u -d adb +WSDL2C.bat -uri Calculator.wsdl -u -d adb + +Please check the instruction of $AXIS2C_SRC_HOME/c/tools/codegen/javatool/README.txt +on how to use the script diff --git a/samples/codegen/client/interop_doc2/test_echo_string.c b/samples/codegen/client/interop_doc2/test_echo_string.c new file mode 100644 index 0000000..87ef342 --- /dev/null +++ b/samples/codegen/client/interop_doc2/test_echo_string.c @@ -0,0 +1,70 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_stub_WSDLInteropTestDocLitService.h" + +int +main( + int argc, + char **argv) +{ + axutil_env_t *env = NULL; + axis2_char_t *client_home = NULL; + + axis2_char_t *endpoint_uri = NULL; + + axis2_stub_t *stub = NULL; + + /* variables use databinding */ + adb_echoString_t *echo_in = NULL; + adb_echoStringResponse_t *echo_out = NULL; + + char *echo_str = "hello"; + char *return_echo_str = NULL; + + endpoint_uri = "http://localhost:9090/axis2/services/interop_doc2"; + + env = + axutil_env_create_all("codegen_utest_blocking.log", + AXIS2_LOG_LEVEL_TRACE); + + /* Set up deploy folder. */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home) + client_home = "../../../deploy"; + + stub = + axis2_stub_create_WSDLInteropTestDocLitService(env, client_home, + endpoint_uri); + + /* create the struct */ + + /* create the input params using databinding */ + echo_in = adb_echoString_create(env); + adb_echoString_set_param0(echo_in, env, echo_str); + + /* invoke the web service method */ + echo_out = axis2_stub_op_WSDLInteropTestDocLitService_echoString(stub, env, echo_in); + + /* return the output params using databinding */ + return_echo_str = adb_echoStructResponse_get_return(echo_out, env); + + printf("returned string %s\n", return_echo_str); + + return 0; +} diff --git a/samples/codegen/client/interop_doc2/test_echo_string_array.c b/samples/codegen/client/interop_doc2/test_echo_string_array.c new file mode 100644 index 0000000..136096c --- /dev/null +++ b/samples/codegen/client/interop_doc2/test_echo_string_array.c @@ -0,0 +1,90 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_stub_WSDLInteropTestDocLitService.h" + +int +main( + int argc, + char **argv) +{ + axutil_env_t *env = NULL; + axis2_char_t *client_home = NULL; + + axis2_char_t *endpoint_uri = NULL; + + axis2_stub_t *stub = NULL; + + /* variables use databinding */ + adb_echoStringArray_t *echo_in = NULL; + adb_echoStringArrayResponse_t *echo_out = NULL; + adb_ArrayOfstring_literal_t *array_in = NULL; + adb_ArrayOfstring_literal_t *array_out = NULL; + + static char *string_array[] = { "test", "this", "array" }; + int array_length = 3; + + char *string_return = NULL; + int return_array_length = 0; + int i = 0; /* for loops */ + + endpoint_uri = "http://localhost:9090/axis2/services/interop_doc2"; + + env = + axutil_env_create_all("codegen_utest_blocking.log", + AXIS2_LOG_LEVEL_TRACE); + + /* Set up deploy folder. */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home) + client_home = "../../../deploy"; + + stub = + axis2_stub_create_WSDLInteropTestDocLitService(env, client_home, + endpoint_uri); + + /* create the array */ + array_in = adb_ArrayOfstring_literal_create(env); + + for(i = 0; i < array_length; i ++) + { + adb_ArrayOfstring_literal_add_string(array_in, env, + string_array[i]); + } + + /* create the input params using databinding */ + echo_in = adb_echoStringArray_create(env); + adb_echoStringArray_set_param0(echo_in, env, array_in); + + /* invoke the web service method */ + echo_out = axis2_stub_op_WSDLInteropTestDocLitService_echoStringArray(stub, env, echo_in); + + /* return the output params using databinding */ + array_out = adb_echoStringArrayResponse_get_return(echo_out, env); + + + return_array_length = adb_ArrayOfstring_literal_sizeof_string(array_out, env); + + for (i = 0; i < return_array_length; i++) + { + string_return = adb_ArrayOfstring_literal_get_string_at(array_out, env, i); + printf("value%d: %s \n", i, string_return); + } + + return 0; +} diff --git a/samples/codegen/client/interop_doc2/test_echo_struct.c b/samples/codegen/client/interop_doc2/test_echo_struct.c new file mode 100644 index 0000000..06bd7f7 --- /dev/null +++ b/samples/codegen/client/interop_doc2/test_echo_struct.c @@ -0,0 +1,89 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_stub_WSDLInteropTestDocLitService.h" + +int +main( + int argc, + char **argv) +{ + axutil_env_t *env = NULL; + axis2_char_t *client_home = NULL; + + axis2_char_t *endpoint_uri = NULL; + + axis2_stub_t *stub = NULL; + + /* variables use databinding */ + adb_echoStruct_t *echo_in = NULL; + adb_echoStructResponse_t *echo_out = NULL; + adb_SOAPStruct_t *struct_in = NULL; + adb_SOAPStruct_t *struct_out = NULL; + + float float_val = 11; + int int_val = 10; + char *string_val = "hello struct"; + + int ret_int_val = 0; + float ret_float_val = 0; + char *ret_string_val = ""; + + endpoint_uri = "http://localhost:9090/axis2/services/interop_doc2"; + + env = + axutil_env_create_all("codegen_utest_blocking.log", + AXIS2_LOG_LEVEL_TRACE); + + /* Set up deploy folder. */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home) + client_home = "../../../deploy"; + + stub = axis2_stub_create_WSDLInteropTestDocLitService(env, + client_home, + endpoint_uri); + + /* create the struct */ + struct_in = adb_SOAPStruct_create(env); + adb_SOAPStruct_set_varFloat(struct_in, env, float_val); + adb_SOAPStruct_set_varInt(struct_in, env, int_val); + adb_SOAPStruct_set_varString(struct_in, env, string_val); + + /* create the input params using databinding */ + echo_in = adb_echoStruct_create(env); + adb_echoStruct_set_param0(echo_in, env, struct_in); + + /* invoke the web service method */ + echo_out = axis2_stub_op_WSDLInteropTestDocLitService_echoStruct(stub, env, echo_in); + + /* return the output params using databinding */ + struct_out = adb_echoStructResponse_get_return(echo_out, env); + /*struct_out = adb_echostruct_get_param0( ret_val, env ); */ + + ret_float_val = adb_SOAPStruct_get_varFloat(struct_out, env); + ret_int_val = adb_SOAPStruct_get_varInt(struct_out, env); + ret_string_val = adb_SOAPStruct_get_varString(struct_out, env); + + printf("returned values \n"); + printf(" float %f\n", ret_float_val); + printf(" int %d \n", ret_int_val); + printf(" string %s \n", ret_string_val); + + return 0; +} diff --git a/samples/codegen/databinding/Calculator/Calculator.wsdl b/samples/codegen/databinding/Calculator/Calculator.wsdl new file mode 100644 index 0000000..5600279 --- /dev/null +++ b/samples/codegen/databinding/Calculator/Calculator.wsdl @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/codegen/databinding/Calculator/client/CalculatorAdd.c b/samples/codegen/databinding/Calculator/client/CalculatorAdd.c new file mode 100644 index 0000000..edb4b62 --- /dev/null +++ b/samples/codegen/databinding/Calculator/client/CalculatorAdd.c @@ -0,0 +1,38 @@ +#include "axis2_stub_Calculator.h" +int +main( + int argc, + char *argv) +{ + axutil_env_t * env = NULL; + axis2_char_t * operation = NULL; + axis2_char_t * client_home = NULL; + axis2_char_t * endpoint_uri = NULL; + axis2_stub_t * stub = NULL; + adb_addResponse_t * add_res = NULL; + adb_add_t * add_in = NULL; + int res_val = 0; + endpoint_uri = "http://localhost:9090/axis2/services/Calculator"; + env = axutil_env_create_all("alltest.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set up deploy folder. */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home) + client_home = "../../../deploy"; + stub = axis2_stub_create_Calculator(env, client_home, endpoint_uri); + add_in = adb_add_create(env); + adb_add_set_arg_0_0(add_in, env, 10); + adb_add_set_arg_1_0(add_in, env, 10); + add_res = axis2_stub_op_Calculator_add(stub, env, add_in); + if (!add_res) + + { + printf("Error: response NULL\n"); + return -1; + } + res_val = adb_addResponse_get_addReturn(add_res, env); + printf("ADD Result:%d ", res_val); + return 0; +} + + diff --git a/samples/codegen/databinding/Calculator/server/axis2_skel_Calculator.c b/samples/codegen/databinding/Calculator/server/axis2_skel_Calculator.c new file mode 100644 index 0000000..ab30974 --- /dev/null +++ b/samples/codegen/databinding/Calculator/server/axis2_skel_Calculator.c @@ -0,0 +1,104 @@ + + +/** + * axis2_skel_Calculator.c + * + * This file was auto-generated from WSDL for "Calculator|http://localhost/axis/Calculator" service + * by the Apache Axis2/C version: #axisVersion# #today# + * axis2_skel_Calculator Axis2/C skeleton for the axisService + */ + +#include "axis2_skel_Calculator.h" + + +/** + * auto generated function definition signature + * for "add|" operation. + + * @param add + */ + adb_addResponse_t * axis2_skel_Calculator_add(const axutil_env_t * env, + adb_add_t * add) +{ + adb_addResponse_t * add_res = NULL; + int ret_val = 0; + int val1 = 0; + int val2 = 0; + val1 = adb_add_get_arg_0_0(add, env); + val2 = adb_add_get_arg_1_0(add, env); + ret_val = val1 + val2; + add_res = adb_addResponse_create(env); + adb_addResponse_set_addReturn(add_res, env, ret_val); + return add_res; +} + + + +/** + * auto generated function definition signature + * for "div|" operation. + + * @param div + */ + adb_divResponse_t * axis2_skel_Calculator_div(const axutil_env_t * env, + adb_div_t * div) +{ + adb_divResponse_t * div_res = NULL; + int ret_val = 0; + int val1 = 0; + int val2 = 0; + val1 = adb_div_get_arg_0_3(div, env); + val2 = adb_div_get_arg_1_3(div, env); + ret_val = val1 / val2; + div_res = adb_divResponse_create(env); + adb_divResponse_set_divReturn(div_res, env, ret_val); + return div_res; +} + + + +/** + * auto generated function definition signature + * for "sub|" operation. + + * @param sub + */ + adb_subResponse_t * axis2_skel_Calculator_sub(const axutil_env_t * env, + adb_sub_t * sub) +{ + adb_subResponse_t * sub_res = NULL; + int ret_val = 0; + int val1 = 0; + int val2 = 0; + val1 = adb_sub_get_arg_0_1(sub, env); + val2 = adb_sub_get_arg_1_1(sub, env); + ret_val = val1 - val2; + sub_res = adb_subResponse_create(env); + adb_subResponse_set_subReturn(sub_res, env, ret_val); + return sub_res; +} + + + +/** + * auto generated function definition signature + * for "mul|" operation. + + * @param mul + */ + adb_mulResponse_t * axis2_skel_Calculator_mul(const axutil_env_t * env, + adb_mul_t * mul) +{ + adb_mulResponse_t * mul_res = NULL; + int ret_val = 0; + int val1 = 0; + int val2 = 0; + val1 = adb_mul_get_arg_0_2(mul, env); + val2 = adb_mul_get_arg_1_2(mul, env); + ret_val = val1 * val2; + mul_res = adb_mulResponse_create(env); + adb_mulResponse_set_mulReturn(mul_res, env, ret_val); + return mul_res; +} + + diff --git a/samples/codegen/databinding/READEME.txt b/samples/codegen/databinding/READEME.txt new file mode 100644 index 0000000..7db1592 --- /dev/null +++ b/samples/codegen/databinding/READEME.txt @@ -0,0 +1,66 @@ +Sample: Data Binding +==================== + +Introduction +------------ + +These samples demonstrate the use of code generation using Axis2/Java WSDL2Java +(http://svn.apache.org/repos/asf/webservices/axis2/trunk/java)tool with Axis Data Binding. +You can download the latest update of the tool from +http://people.apache.org/dist/axis2/nightly + +Files +----- + +-StockQuoteService + Client source ./StockQuoteService/stock_quote_client.c + Service Source ./StockQuoteService/axis2_skel_StockQuoteService.c + wsdl ./StockQuoteService/StockQuoteService.wsdl + +-Calculator + Client source ./Calculator/CalculatorAdd.c + Service Source ./Calculator/axis2_skel_Calculator.c + wsdl ./Calculator/Calculator.wsdl + + +Code Generation +--------------- + +Use the shell script or batch file available in the ../../../tools/codegen/javatool directory to generate +code using following options.(Reade the READEME.txt at ../../../tools/codegen/javatool directory to learn how to use scripts) + +Client side stub generation with Axis Data Binding: + Linux: WSDL2C.sh -uri -g -d adb -u -f -o + Win32: WSDL2C.bat -uri -g -d adb -u -f -o + +Server side skeleton generation with Axis Data Binding: + Linux: WSDL2C.sh -uri -sd -ss -d adb -u -f -o + Win32: WSDL2C.bat -uri -sd -ss -d adb -u -f -o + +Description of Options used: + + -o : output file location + -ss : Generate server side code (i.e. skeletons). Default is off + -sd : Generate service descriptor (i.e. services.xml). Default is off. Valid with -ss + -d : valid databinding(s) are adb, xmlbeans and jaxme. Default is adb + -g : Generates all the classes. valid only with the -ss (This will generate client and server codes) + -u : unpacks the databinding classes + -f : Generate the source output folder without the src directory + +Please refer to the http://ws.apache.org/axis2/tools/1_1/CodegenToolReference.html for further details. + +Deploying the Service +--------------------- +You need to generate the required server side code using command described above and replace +the axis2_skel_.c with given implementation. After building the lib.so, +put it inside $AXIS2C_HOME/services// directory. + +You need to then startup the server to deploy the service. + +Running the Client +------------------ +You need to generate the required client side code using command described above and put them inside +where client implementations resides. And then build the client and run it. + + + diff --git a/samples/codegen/databinding/StockQuoteService/StockQuote.xsd b/samples/codegen/databinding/StockQuoteService/StockQuote.xsd new file mode 100644 index 0000000..288a873 --- /dev/null +++ b/samples/codegen/databinding/StockQuoteService/StockQuote.xsd @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/codegen/databinding/StockQuoteService/StockQuoteService.wsdl b/samples/codegen/databinding/StockQuoteService/StockQuoteService.wsdl new file mode 100644 index 0000000..7374021 --- /dev/null +++ b/samples/codegen/databinding/StockQuoteService/StockQuoteService.wsdl @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/codegen/databinding/StockQuoteService/client/stock_quote_client.c b/samples/codegen/databinding/StockQuoteService/client/stock_quote_client.c new file mode 100644 index 0000000..0b921e7 --- /dev/null +++ b/samples/codegen/databinding/StockQuoteService/client/stock_quote_client.c @@ -0,0 +1,121 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version + * 2.0 + * (the "License"); you may not use this file except in compliance + * with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_stub_StockQuoteService.h" +#include +void handle_response( + adb_getStockQuoteResponse_t * res, + axutil_env_t * env); +int +main( + int argc, + char *argv[]) +{ + axutil_env_t * env = NULL; + axis2_char_t * client_home = NULL; + axis2_char_t * endpoint_uri = NULL; + axis2_stub_t * stub = NULL; + axis2_char_t * symbol = NULL; + adb_getStockQuote_t * req = NULL; + adb_getStockQuoteResponse_t * res = NULL; + if (argc > 1) + + { + symbol = argv[1]; + } + + else + + { + printf("\nEnter Symbol Name!"); + return -1; + } + endpoint_uri = "http://localhost:9090/axis2/services/StockQuoteService"; + env = + axutil_env_create_all("codegen_sample_stock_quote.log", + AXIS2_LOG_LEVEL_TRACE); + + /* Set up deploy folder. */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home) + client_home = "../../../deploy"; + stub = + axis2_stub_create_StockQuoteService(env, client_home, endpoint_uri); + + /* Create the struct */ + req = adb_getStockQuote_create(env); + adb_getStockQuote_set_symbol(req, env, symbol); + res = axis2_stub_op_StockQuoteService_getStockQuote(stub, env, req); + if (!res) + + { + printf("Error: response NULL!\n"); + return -1; + } + handle_response(res, env); /*Handle Response */ + return 0; +} +void +handle_response( + adb_getStockQuoteResponse_t * res, + axutil_env_t * env) +{ + adb_quote_t * quote = NULL; + adb_changeType_t * change = NULL; + adb_lastTradeType_t * last_trade = NULL; + + /*Attributes of Quote */ + axis2_char_t * symbol_res = NULL; + int volume = 0; + + /*Attributes of Last Trade */ + float price = 0; + long date = 0; + + /*Attributes of Change */ + float dollar = 0; + float precent = 0; + quote = adb_getStockQuoteResponse_get_returnQuote(res, env); + if (!quote) + + { + printf("Error: Quote response NULL!\n"); + return; + } + last_trade = adb_quote_get_lastTrade(quote, env); + change = adb_quote_get_change(quote, env); + symbol_res = adb_quote_get_symbol(quote, env); + volume = adb_quote_get_volume(quote, env); + price = adb_lastTradeType_get_price(last_trade, env); + date = adb_lastTradeType_get_date(last_trade, env); + dollar = adb_changeType_get_dollar(change, env); + precent = adb_changeType_get_percent(change, env); + printf("\nSTOCK QUOTERESPONSE\n"); + printf("\tSYMBOL\t\t: %s\n", symbol_res); + printf("\tVOLUME\t\t: %d\n", volume); + printf("\tPRICE\t\t: %f\n", price); + printf("\tDATE\t\t: %l\n", date); + printf("\tDOLLAR\t\t: %f\n", dollar); + printf("\tPRECENT\t\t: %f\n", precent); +} + + diff --git a/samples/codegen/databinding/StockQuoteService/server/axis2_skel_StockQuoteService.c b/samples/codegen/databinding/StockQuoteService/server/axis2_skel_StockQuoteService.c new file mode 100644 index 0000000..2e33017 --- /dev/null +++ b/samples/codegen/databinding/StockQuoteService/server/axis2_skel_StockQuoteService.c @@ -0,0 +1,75 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/** + * axis2_skel_StockQuoteService.c + * + * This file was auto-generated from WSDL for "StockQuoteService|http://w3.ibm.com/schemas/services/2002/11/15/stockquote/wsdl" service + * by the Apache Axis2/C version: #axisVersion# #today# + * axis2_skel_StockQuoteService Axis2/C skeleton for the axisService + */ + +#include "axis2_skel_StockQuoteService.h" + + +/** + * auto generated function definition signature + * for "getStockQuote|" operation. + + * @param getStockQuote + */ + adb_getStockQuoteResponse_t * +axis2_skel_StockQuoteService_getStockQuote(const axutil_env_t * env, + adb_getStockQuote_t * + getStockQuote) +{ + + /* TODO fill this with the necessary business logic */ + axis2_char_t * symbol_in = NULL; + adb_getStockQuoteResponse_t * response = NULL; + adb_quote_t * res_quote = NULL; + adb_changeType_t * res_change = NULL; + adb_lastTradeType_t * res_last_trade = NULL; + symbol_in = adb_getStockQuote_get_symbol(getStockQuote, env); + if (!symbol_in) + + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf + ("StockQuoteService client request ERROR: input parameter NULL\n"); + return NULL; + } + res_quote = adb_quote_create(env); + adb_quote_set_symbol(res_quote, env, symbol_in); + adb_quote_set_volume(res_quote, env, 1000); + res_change = adb_changeType_create(env); + adb_changeType_set_percent(res_change, env, 10); + adb_changeType_set_dollar(res_change, env, 98); + adb_quote_set_change(res_quote, env, res_change); + res_last_trade = adb_lastTradeType_create(env); + adb_lastTradeType_set_price(res_last_trade, env, 23); + adb_lastTradeType_set_date(res_last_trade, env, 1165997291); + adb_quote_set_lasttrade(res_quote, env, res_last_trade); + response = adb_getStockQuoteResponse_create(env); + adb_getStockQuoteResponse_set_returnQuote(response, env, res_quote); + return response; +} + + diff --git a/samples/codegen/server/calc_xml_inout/Makefile.am b/samples/codegen/server/calc_xml_inout/Makefile.am new file mode 100644 index 0000000..145ef08 --- /dev/null +++ b/samples/codegen/server/calc_xml_inout/Makefile.am @@ -0,0 +1,14 @@ +prglibdir=$(prefix)/services/Calculator +samplesdir=$(prefix)/samples/server/Calculator +prglib_LTLIBRARIES = libCalculator.la +prglib_DATA= services.xml +EXTRA_DIST = services.xml +SUBDIRS = +libCalculator_la_SOURCES = \ + axis2_Calculator.c \ + axis2_Calculator_svc_skeleton.c + +libCalculator_la_LIBADD = +INCLUDES = -I$(AXIS2C_HOME)/include \ + @UTILINC@ \ + @AXIOMINC@ diff --git a/samples/codegen/server/calc_xml_inout/axis2_skel_Calculator.c b/samples/codegen/server/calc_xml_inout/axis2_skel_Calculator.c new file mode 100644 index 0000000..ceb6bbe --- /dev/null +++ b/samples/codegen/server/calc_xml_inout/axis2_skel_Calculator.c @@ -0,0 +1,135 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * axis2_skel_Calculator.c + * + * This file was auto-generated from WSDL + * by the Apache Axis2/Java version: #axisVersion# #today# + * axis2_skel_Calculator Axis2/C skeleton for the axisService + */ + +#include "axis2_skel_Calculator.h" + +/** + * Auto generated function definition + + * @param param0 + +*/ +axiom_node_t * +axis2_skel_Calculator_add( + const axutil_env_t * env, + axiom_node_t * param0) +{ + /* Todo fill this with the necessary business logic */ + axiom_node_t *req = param0; + axiom_node_t *node = NULL; + axiom_element_t *ele = NULL; + axis2_char_t *text = NULL; + + axiom_node_t *op_node = NULL; + axiom_element_t *op_ele = NULL; + axiom_node_t *value_node = NULL; + axiom_element_t *value_ele = NULL; + axiom_namespace_t *ns1 = NULL; + axis2_char_t *om_str = NULL; + + char value_str[64]; + + int result = 0; + + int value1, + value2; + if (!req) + { + printf("response null\n"); + return NULL; + } + else + { + node = axiom_node_get_first_child(req, env); + ele = axiom_node_get_data_element(node, env); + text = axiom_element_get_text(ele, env, node); + value1 = atoi(text); + + node = axiom_node_get_next_sibling(node, env); + ele = axiom_node_get_data_element(node, env); + text = axiom_element_get_text(ele, env, node); + value2 = atoi(text); + + } + + result = value1 + value2; + + ns1 = + axiom_namespace_create(env, "http://localhost/axis/Calculator", "ns1"); + op_ele = axiom_element_create(env, NULL, "addResponse", ns1, &op_node); + + value_ele = axiom_element_create(env, op_node, "in1", NULL, &value_node); + sprintf(value_str, "%d", result); + axiom_element_set_text(value_ele, env, value_str, value_node); + + return op_node; + +} + +/** + * Auto generated function definition + + * @param param2 + +*/ +axiom_node_t * +axis2_skel_Calculator_div( + const axutil_env_t * env, + axiom_node_t * param2) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} + +/** + * Auto generated function definition + + * @param param4 + +*/ +axiom_node_t * +axis2_skel_Calculator_sub( + const axutil_env_t * env, + axiom_node_t * param4) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} + +/** + * Auto generated function definition + + * @param param6 + +*/ +axiom_node_t * +axis2_skel_Calculator_mul( + const axutil_env_t * env, + axiom_node_t * param6) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} diff --git a/samples/codegen/server/calc_xml_inout/readme b/samples/codegen/server/calc_xml_inout/readme new file mode 100644 index 0000000..e4cecdf --- /dev/null +++ b/samples/codegen/server/calc_xml_inout/readme @@ -0,0 +1,12 @@ +This sample demonstrates the use of code generation using Axis2/Java WSDL2Java +tool (Axis2/Java source revision 414253). + +wsdl $AXIS2C_SRC_HOME/test/resources/wsdl/Calculator.wsdl + +Command to execute the code generation: + +WSDL2C.sh -uri Calculator.wsdl -u -d none -ss +WSDL2C.bat -uri Calculator.wsdl -u -d none -ss + +Please check the instruction of $AXIS2C_SRC_HOME/tools/codegen/javatool/README.txt +on how to use the script diff --git a/samples/codegen/server/calculator/Makefile.am b/samples/codegen/server/calculator/Makefile.am new file mode 100644 index 0000000..308673c --- /dev/null +++ b/samples/codegen/server/calculator/Makefile.am @@ -0,0 +1,15 @@ +prglibdir=$(prefix)/services/Calculator +samplesdir=$(prefix)/samples/server/Calculator +prglib_LTLIBRARIES = libCalculator.la +prglib_DATA= services.xml +EXTRA_DIST = services.xml +SUBDIRS = +libCalculator_la_SOURCES = \ +axis2_add.c axis2_Calculator.c axis2_divResponse16.c axis2_mulResponse14.c axis2_subResponse12.c \ +axis2_addRequest.c axis2_Calculator_svc_skeleton.c axis2_divResponse.c axis2_mulResponse.c axis2_subResponse.c \ +axis2_addResponse20.c axis2_div.c axis2_mul.c axis2_sub.c \ +axis2_addResponse.c axis2_divRequest.c axis2_mulRequest.c axis2_subRequest.c +libCalculator_la_LIBADD = +INCLUDES = -I$(AXIS2C_HOME)/include \ + @UTILINC@ \ + @AXIOMINC@ diff --git a/samples/codegen/server/calculator/axis2_skel_Calculator.c b/samples/codegen/server/calculator/axis2_skel_Calculator.c new file mode 100644 index 0000000..70d6da4 --- /dev/null +++ b/samples/codegen/server/calculator/axis2_skel_Calculator.c @@ -0,0 +1,158 @@ + + + /** + * axis2_skel_Calculator.c + * + * This file was auto-generated from WSDL for "Calculator|http://localhost/axis/Calculator" service + * by the Apache Axis2/C version: #axisVersion# #today# + * axis2_skel_Calculator Axis2/C skeleton for the axisService + */ + + #include "axis2_skel_Calculator.h" + + + + + /** + * auto generated function definition signature + * for "div|http://localhost/axis/Calculator" operation. + + * @param div + */ + + adb_divResponse_t* axis2_skel_Calculator_div (const axutil_env_t *env, + adb_div_t *_div1) + { + + + adb_divResponse_t *_divresponse2; + int int_2; + + int int_0; + int int_1; + + /* Extract the request */ + + int_0 = adb_div_get_in0(_div1, env); + printf("Returned int: %d\n", int_0); + int_1 = adb_div_get_in1(_div1, env); + printf("Returned int: %d\n", int_1); + + /* Build the response adb */ + + _divresponse2 = adb_divResponse_create(env); + int_2 = int_0 / int_1; + adb_divResponse_set_divReturn(_divresponse2, env, int_2); + + return _divresponse2; + } + + + + /** + * auto generated function definition signature + * for "mul|http://localhost/axis/Calculator" operation. + + * @param mul + */ + + adb_mulResponse_t* axis2_skel_Calculator_mul (const axutil_env_t *env, + adb_mul_t *_mul1) + { + + + adb_mulResponse_t *_mulresponse2; + int int_5; + + int int_3; + int int_4; + + /* Extract the request */ + + int_3 = adb_mul_get_in0(_mul1, env); + printf("Returned int: %d\n", int_3); + int_4 = adb_mul_get_in1(_mul1, env); + printf("Returned int: %d\n", int_4); + + /* Build the response adb */ + + _mulresponse2 = adb_mulResponse_create(env); + int_5 = int_3 * int_4; + adb_mulResponse_set_mulReturn(_mulresponse2, env, int_5); + + return _mulresponse2; + } + + + + /** + * auto generated function definition signature + * for "add|http://localhost/axis/Calculator" operation. + + * @param add + */ + + adb_addResponse_t* axis2_skel_Calculator_add (const axutil_env_t *env, + adb_add_t *_add1) + { + + + adb_addResponse_t *_addresponse2; + int int_8; + + int int_6; + int int_7; + + /* Extract the request */ + + int_6 = adb_add_get_in0(_add1, env); + printf("Returned int: %d\n", int_6); + int_7 = adb_add_get_in1(_add1, env); + printf("Returned int: %d\n", int_7); + + /* Build the response adb */ + + _addresponse2 = adb_addResponse_create(env); + int_8 = int_6 + int_7; + adb_addResponse_set_addReturn(_addresponse2, env, int_8); + + return _addresponse2; + } + + + + /** + * auto generated function definition signature + * for "sub|http://localhost/axis/Calculator" operation. + + * @param sub + */ + + adb_subResponse_t* axis2_skel_Calculator_sub (const axutil_env_t *env, + adb_sub_t *_sub1) + { + + + adb_subResponse_t *_subresponse2; + int int_11; + + int int_9; + int int_10; + + /* Extract the request */ + + int_9 = adb_sub_get_in0(_sub1, env); + printf("Returned int: %d\n", int_9); + int_10 = adb_sub_get_in1(_sub1, env); + printf("Returned int: %d\n", int_10); + + /* Build the response adb */ + + _subresponse2 = adb_subResponse_create(env); + int_11 = int_9 - int_10; + adb_subResponse_set_subReturn(_subresponse2, env, int_11); + + return _subresponse2; + } + + diff --git a/samples/codegen/server/calculator/readme b/samples/codegen/server/calculator/readme new file mode 100644 index 0000000..49b34bc --- /dev/null +++ b/samples/codegen/server/calculator/readme @@ -0,0 +1,12 @@ +This sample demonstrates the use of code generation using Axis2/Java WSDL2Java +tool (Axis2/Java source revision 414253). + +wsdl $AXIS2C_SRC_HOME/test/resources/wsdl/Calculator.wsdl + +Command to execute the code generation: + +WSDL2C.sh -uri Calculator.wsdl -u -d adb -ss +WSDL2C.bat -uri Calculator.wsdl -u -d adb -ss + +Please check the instruction of $AXIS2C_SRC_HOME/c/tools/codegen/javatool/README.txt +on how to use the script diff --git a/samples/codegen/server/interop_doc1/Makefile.am b/samples/codegen/server/interop_doc1/Makefile.am new file mode 100644 index 0000000..1abe530 --- /dev/null +++ b/samples/codegen/server/interop_doc1/Makefile.am @@ -0,0 +1,23 @@ +prglibdir=$(prefix)/services/interop_doc1 +samplesdir=$(prefix)/samples/server/interop_doc1 +prglib_LTLIBRARIES = libInteropTestPortTypeDocService.la +prglib_DATA= services.xml +EXTRA_DIST = services.xml +SUBDIRS = +libInteropTestPortTypeDocService_la_SOURCES = \ +axis2_echoBase64.c axis2_echoFloatResponse.c axis2_echoStructArray.c \ +axis2_echoBase64Response.c axis2_echoHexBinary.c axis2_echoStructArrayResponse.c \ +axis2_echoBoolean.c axis2_echoHexBinaryResponse.c axis2_echoStruct.c \ +axis2_echoBooleanResponse.c axis2_echoIntegerArray.c axis2_echoStructResponse.c \ +axis2_echoDate.c axis2_echoIntegerArrayResponse.c axis2_echoVoid.c \ +axis2_echoDateResponse.c axis2_echoInteger.c axis2_echoVoidResponse.c \ +axis2_echoDecimal.c axis2_echoIntegerResponse.c axis2_InteropTestPortTypeDocService.c \ +axis2_echoDecimalResponse.c axis2_echoStringArray.c axis2_InteropTestPortTypeDocService_svc_skeleton.c \ +axis2_echoFloatArray.c axis2_echoStringArrayResponse.c axis2_SOAPStruct.c \ +axis2_echoFloatArrayResponse.c axis2_echoString.c \ +axis2_echoFloat.c axis2_echoStringResponse.c + +libInteropTestPortTypeDocService_la_LIBADD = +INCLUDES = -I$(AXIS2C_HOME)/include \ + @UTILINC@ \ + @AXIOMINC@ diff --git a/samples/codegen/server/interop_doc1/axis2_skel_InteropTestPortTypeDocService.c b/samples/codegen/server/interop_doc1/axis2_skel_InteropTestPortTypeDocService.c new file mode 100644 index 0000000..6b31079 --- /dev/null +++ b/samples/codegen/server/interop_doc1/axis2_skel_InteropTestPortTypeDocService.c @@ -0,0 +1,274 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * axis2_skel_InteropTestPortTypeDocService.c + * + * This file was auto-generated from WSDL + * by the Apache Axis2/Java version: #axisVersion# #today# + * axis2_skel_InteropTestPortTypeDocService Axis2/C skeleton for the axisService + */ + +#include "axis2_skel_InteropTestPortTypeDocService.h" + +/** + * Auto generated function definition + + * @param param0 + + */ +adb_echoFloatResponse_t * +axis2_skel_InteropTestPortTypeDocService_echoFloat( + const axutil_env_t * env, + adb_echoFloat_t * param0) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} + +/** + * Auto generated function definition + + * @param param2 + + */ +adb_echoVoidResponse_t * +axis2_skel_InteropTestPortTypeDocService_echoVoid( + const axutil_env_t * env, + adb_echoVoid_t * param2) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} + +/** + * Auto generated function definition + + * @param param4 + + */ +adb_echoDateResponse_t * +axis2_skel_InteropTestPortTypeDocService_echoDate( + const axutil_env_t * env, + adb_echoDate_t * param4) +{ + /* Todo fill this with the necessary business logic */ + adb_echoDate_t *echo_in = param4; + adb_echoDateResponse_t *echo_out = NULL; + + axutil_date_time_t *echo_date = NULL; + axis2_char_t *recieved_date_str = NULL; + + echo_date = adb_echoDate_get_arg_0_10(echo_in, env); + + recieved_date_str = axutil_date_time_serialize_date_time(echo_date, env); + printf("echoing date %s\n", recieved_date_str); + + echo_out = adb_echoDateResponse_create(env); + adb_echoDateResponse_set_echodatereturn(echo_out, env, echo_date); + + return echo_out; +} + +/** + * Auto generated function definition + + * @param param6 + + */ +adb_echoDecimalResponse_t * +axis2_skel_InteropTestPortTypeDocService_echoDecimal( + const axutil_env_t * env, + adb_echoDecimal_t * param6) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} + +/** + * Auto generated function definition + + * @param param8 + + */ +adb_echoStringResponse_t * +axis2_skel_InteropTestPortTypeDocService_echoString( + const axutil_env_t * env, + adb_echoString_t * param8) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} + +/** + * Auto generated function definition + + * @param param10 + + */ +adb_echoBase64Response_t * +axis2_skel_InteropTestPortTypeDocService_echoBase64( + const axutil_env_t * env, + adb_echoBase64_t * param10) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} + +/** + * Auto generated function definition + + * @param param12 + + */ +adb_echoFloatArrayResponse_t * +axis2_skel_InteropTestPortTypeDocService_echoFloatArray( + const axutil_env_t * env, + adb_echoFloatArray_t * param12) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} + +/** + * Auto generated function definition + + * @param param14 + + */ +adb_echoIntegerArrayResponse_t * +axis2_skel_InteropTestPortTypeDocService_echoIntegerArray( + const axutil_env_t * env, + adb_echoIntegerArray_t * param14) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} + +/** + * Auto generated function definition + + * @param param16 + + */ +adb_echoHexBinaryResponse_t * +axis2_skel_InteropTestPortTypeDocService_echoHexBinary( + const axutil_env_t * env, + adb_echoHexBinary_t * param16) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} + +/** + * Auto generated function definition + + * @param param18 + + */ +adb_echoIntegerResponse_t * +axis2_skel_InteropTestPortTypeDocService_echoInteger( + const axutil_env_t * env, + adb_echoInteger_t * param18) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} + +/** + * Auto generated function definition + + * @param param20 + + */ +adb_echoBooleanResponse_t * +axis2_skel_InteropTestPortTypeDocService_echoBoolean( + const axutil_env_t * env, + adb_echoBoolean_t * param20) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} + +/** + * Auto generated function definition + + * @param param22 + + */ +adb_echoStringArrayResponse_t * +axis2_skel_InteropTestPortTypeDocService_echoStringArray( + const axutil_env_t * env, + adb_echoStringArray_t * param22) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} + +/** + * Auto generated function definition + + * @param param24 + + */ +adb_echoStructArrayResponse_t * +axis2_skel_InteropTestPortTypeDocService_echoStructArray( + const axutil_env_t * env, + adb_echoStructArray_t * param24) +{ + /* Todo fill this with the necessary business logic */ + adb_echoStructArray_t *echo_in = param24; + adb_echoStructArrayResponse_t *echo_out = NULL; + + adb_SOAPStruct_t *echo_struct = NULL; + int arr_size = 0; + + int i = 0; + + arr_size = adb_echoStructArray_sizeof_arg_0_7(echo_in, env); + echo_out = adb_echoStructArrayResponse_create(env); + for (i = 0; i < arr_size; i++) + { + echo_struct = + adb_echoStructArray_get_arg_0_7_at(echo_in, env, i); + printf("echoing turn %d\n string %s\n int %d\n float %f\n\n", i, + adb_SOAPStruct_get_varString(echo_struct, env), + adb_SOAPStruct_get_varInt(echo_struct, env), + adb_SOAPStruct_get_varFloat(echo_struct, env)); + + adb_echoStructArrayresponse_add_echoStructArrayreturn + (echo_out, env, echo_struct); + } + return echo_out; + +} + +/** + * Auto generated function definition + + * @param param26 + + */ +adb_echoStructResponse_t * +axis2_skel_InteropTestPortTypeDocService_echoStruct( + const axutil_env_t * env, + adb_echoStruct_t * param26) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} diff --git a/samples/codegen/server/interop_doc1/readme b/samples/codegen/server/interop_doc1/readme new file mode 100644 index 0000000..f7c262e --- /dev/null +++ b/samples/codegen/server/interop_doc1/readme @@ -0,0 +1,10 @@ +This sample demonstrates the use of code generation using Axis2/Java WSDL2Java +tool (Axis2/Java source revision 414253). + +wsdl $AXIS2C_SRC_HOME/test/resources/wsdl/InteropTestRound1Doc.wsdl + +Command to execute the code generation: +WSDL2C.sh -uri Calculator.wsdl -u -d adb -ss +WSDL2C.bat -uri Calculator.wsdl -u -d adb -ss + +Please check the instruction of $AXIS2C_SRC_HOME/c/tools/codegen/javatool/README.txt diff --git a/samples/codegen/server/interop_doc2/Makefile.am b/samples/codegen/server/interop_doc2/Makefile.am new file mode 100644 index 0000000..7b46d88 --- /dev/null +++ b/samples/codegen/server/interop_doc2/Makefile.am @@ -0,0 +1,16 @@ +prglibdir=$(prefix)/services/interop_doc2 +samplesdir=$(prefix)/samples/server/interop_doc2 +prglib_LTLIBRARIES = libWSDLInteropTestDocLitService.la +prglib_DATA= services.xml +EXTRA_DIST = services.xml +SUBDIRS = +libWSDLInteropTestDocLitService_la_SOURCES = \ +axis2_ArrayOfstring_literal.c axis2_echoStringResponse.c axis2_echoVoidResponse.c \ +axis2_echoStringArray.c axis2_echoStruct.c axis2_SOAPStruct.c \ +axis2_echoStringArrayResponse.c axis2_echoStructResponse.c axis2_WSDLInteropTestDocLitService.c \ +axis2_echoString.c axis2_echoVoid.c axis2_WSDLInteropTestDocLitService_svc_skeleton.c + +libWSDLInteropTestDocLitService_la_LIBADD = +INCLUDES = -I$(AXIS2C_HOME)/include \ + @UTILINC@ \ + @AXIOMINC@ diff --git a/samples/codegen/server/interop_doc2/axis2_skel_WSDLInteropTestDocLitService.c b/samples/codegen/server/interop_doc2/axis2_skel_WSDLInteropTestDocLitService.c new file mode 100644 index 0000000..f6b818a --- /dev/null +++ b/samples/codegen/server/interop_doc2/axis2_skel_WSDLInteropTestDocLitService.c @@ -0,0 +1,139 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * axis2_WSDLInteropTestDocLitService.c + * + * This file was auto-generated from WSDL + * by the Apache Axis2/Java version: #axisVersion# #today# + * axis2_WSDLInteropTestDocLitService Axis2/C skeleton for the axisService + */ + +#include "axis2_WSDLInteropTestDocLitService.h" + +/** + * Auto generated function definition + + * @param param0 + + */ +axis2_echoVoidResponse_t * +axis2_WSDLInteropTestDocLitService_echoVoid( + const axutil_env_t * env, + axis2_echoVoid_t * param0) +{ + /* Todo fill this with the necessary business logic */ + return NULL; +} + +/** + * Auto generated function definition + + * @param param2 + + */ +axis2_echoStringArrayResponse_t * +axis2_WSDLInteropTestDocLitService_echoStringArray( + const axutil_env_t * env, + axis2_echoStringArray_t * param2) +{ + /* Todo fill this with the necessary business logic */ + axis2_echoStringArray_t *echo_in = param2; + axis2_echoStringArrayResponse_t *echo_out = NULL; + axis2_ArrayOfstring_literal_t *array_in = NULL; + axis2_ArrayOfstring_literal_t *array_out = NULL; + char **string_array = NULL; + int string_array_length = 0; + + array_in = AXIS2_ECHOSTRINGARRAY_GET_PARAM0(echo_in, env); + string_array = AXIS2_ARRAYOFSTRING_LITERAL_GET_STRING(array_in, env, + &string_array_length); + + array_out = axis2_ArrayOfstring_literal_create(env); + AXIS2_ARRAYOFSTRING_LITERAL_SET_STRING(array_out, env, + string_array, string_array_length); + echo_out = axis2_echoStringArrayResponse_create(env); + + AXIS2_ECHOSTRINGARRAYRESPONSE_SET_RETURN(echo_out, env, array_out); + + return echo_out; + +} + +/** + * Auto generated function definition + + * @param param4 + + */ +axis2_echoStructResponse_t * +axis2_WSDLInteropTestDocLitService_echoStruct( + const axutil_env_t * env, + axis2_echoStruct_t * param4) +{ + /* Todo fill this with the necessary business logic */ + axis2_echoStruct_t *echo_in = param4; + axis2_echoStructResponse_t *echo_out = NULL; + axis2_SOAPStruct_t *struct_in = NULL; + axis2_SOAPStruct_t *struct_out = NULL; + + float float_val = 0; + int int_val = 0; + char *string_val = NULL; + + struct_in = AXIS2_ECHOSTRUCT_GET_PARAM0(echo_in, env); + + float_val = AXIS2_SOAPSTRUCT_GET_VARFLOAT(struct_in, env); + int_val = AXIS2_SOAPSTRUCT_GET_VARINT(struct_in, env); + string_val = AXIS2_SOAPSTRUCT_GET_VARSTRING(struct_in, env); + + struct_out = axis2_SOAPStruct_create(env); + AXIS2_SOAPSTRUCT_SET_VARFLOAT(struct_out, env, float_val); + AXIS2_SOAPSTRUCT_SET_VARINT(struct_out, env, int_val); + AXIS2_SOAPSTRUCT_SET_VARSTRING(struct_out, env, string_val); + + echo_out = axis2_echoStructResponse_create(env); + AXIS2_ECHOSTRUCTRESPONSE_SET_RETURN(echo_out, env, struct_out); + + return echo_out; +} + +/** + * Auto generated function definition + + * @param param6 + + */ +axis2_echoStringResponse_t * +axis2_WSDLInteropTestDocLitService_echoString( + const axutil_env_t * env, + axis2_echoString_t * param6) +{ + /* Todo fill this with the necessary business logic */ + axis2_echoString_t *echo_in = param6; + axis2_echoStringResponse_t *echo_out = NULL; + + char *echo_string = NULL; + + echo_string = AXIS2_ECHOSTRING_GET_PARAM0(echo_in, env); + + echo_out = axis2_echoStringResponse_create(env); + AXIS2_ECHOSTRUCTRESPONSE_SET_RETURN(echo_out, env, echo_string); + + return echo_out; +} diff --git a/samples/codegen/server/interop_doc2/readme b/samples/codegen/server/interop_doc2/readme new file mode 100644 index 0000000..51f3c59 --- /dev/null +++ b/samples/codegen/server/interop_doc2/readme @@ -0,0 +1,10 @@ +This sample demonstrates the use of code generation using Axis2/Java WSDL2Java +tool (Axis2/Java source revision 414253). + +wsdl $AXIS2C_HOME/test/resources/wsdl/interoptestdoclitparameters.wsdl + +Command to execute the code generation: +WSDL2C.sh -uri Calculator.wsdl -u -d adb -ss +WSDL2C.bat -uri Calculator.wsdl -u -d adb -ss + +Please check the instruction of $AXIS2C_SRC_HOME/c/tools/codegen/javatool/README.txt diff --git a/samples/configure.ac b/samples/configure.ac new file mode 100644 index 0000000..734e88c --- /dev/null +++ b/samples/configure.ac @@ -0,0 +1,154 @@ +dnl run autogen.sh to generate the configure script. + +AC_PREREQ(2.59) + +AC_INIT(axis2c-sample-src, 1.6.0) +AC_CANONICAL_SYSTEM +AM_CONFIG_HEADER(config.h) +dnl AM_INIT_AUTOMAKE([tar-ustar]) +AM_INIT_AUTOMAKE +m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])]) +AC_PREFIX_DEFAULT(/usr/local/axis2c) + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_CPP +AC_PROG_LIBTOOL +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET + +dnl check for flavours of varargs macros (test from GLib) +AC_MSG_CHECKING(for ISO C99 varargs macros in C) +AC_TRY_COMPILE([],[ +int a(int p1, int p2, int p3); +#define call_a(...) a(1,__VA_ARGS__) +call_a(2,3); +],axis2c_have_iso_c_varargs=yes,axis2c_have_iso_c_varargs=no) +AC_MSG_RESULT($axis2c_have_iso_c_varargs) + +AC_MSG_CHECKING(for GNUC varargs macros) +AC_TRY_COMPILE([],[ +int a(int p1, int p2, int p3); +#define call_a(params...) a(1,params) +call_a(2,3); +],axis2c_have_gnuc_varargs=yes,axis2c_have_gnuc_varargs=no) +AC_MSG_RESULT($axis2c_have_gnuc_varargs) + +dnl Output varargs tests +if test x$axis2c_have_iso_c_varargs = xyes; then + AC_DEFINE(HAVE_ISO_VARARGS,1,[Have ISO C99 varargs macros]) +fi +if test x$axis2c_have_gnuc_varargs = xyes; then + AC_DEFINE(HAVE_GNUC_VARARGS,1,[Have GNU-style varargs macros]) +fi + +dnl Checks for libraries. +AC_CHECK_LIB(dl, dlopen) + +CFLAGS="$CFLAGS -ansi -Wall -D_LARGEFILE64_SOURCE -Wno-implicit-function-declaration" + +dnl Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([stdio.h stdlib.h string.h]) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST + +dnl Checks for library functions. +dnl AC_FUNC_MALLOC +dnl AC_FUNC_REALLOC + +CFLAGS="$CFLAGS $GUTHTHILA_CFLAGS" + +AC_MSG_CHECKING(whether to build dynamic invocation client) +AC_ARG_ENABLE(diclient, [ --enable-diclient build diclient. default=no], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + DICLIENT_DIR="" + ;; + *) + AC_MSG_RESULT(yes) + DICLIENT_DIR="diclient" + + ;; + esac ], + AC_MSG_RESULT(yes) + DICLIENT_DIR="" +) + +AC_MSG_CHECKING(To Use Axis2 C . This is a compulsory module to build Axis2 C samples) +AC_ARG_WITH(axis2, +[ --with-axis2[=PATH] Find the AXIS2 header files in 'PATH'. + 'PATH' should point to AXIS2 include files location. + If you omit the '=PATH' part completely, the configure script will search + '${AXIS2C_HOME}/include/axis2-1.6.0' for AXIS2 headers.], +[ case "$withval" in + no) + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + dnl Find axis2 include dir in the path + if test -d $withval; then + axis2inc="-I$withval" + dnl else find the axiom include dir in ${AXIS2C_HOME}/include + elif test -d "${AXIS2C_HOME}/include"; then + axis2inc="-I${AXIS2C_HOME}/include/axis2-1.6.0" + else + AC_MSG_ERROR(could not find axis2. stop) + fi + ;; + esac ], + if test -d "${AXIS2C_HOME}/include"; then + axis2inc="-I${AXIS2C_HOME}/include/axis2-1.6.0" + fi + AC_MSG_RESULT(no) +) + +APACHE2INC=$apache2inc +AXIS2INC=$axis2inc +APRINC=$aprinc + +AC_SUBST(APACHE2INC) +AC_SUBST(APRINC) +AC_SUBST(AXIS2INC) +AC_SUBST(GUTHTHILA_DIR) +AC_SUBST(GUTHTHILA_LIBS) +AC_SUBST(DICLIENT_DIR) + +AC_CONFIG_FILES([Makefile \ + server/Makefile \ + server/echo/Makefile \ + server/math/Makefile \ + server/version/Makefile \ + server/Calculator/Makefile \ + server/notify/Makefile \ + server/sg_math/Makefile \ + server/mtom/Makefile \ + server/mtom_callback/Makefile \ + client/Makefile \ + client/echo/Makefile \ + client/math/Makefile \ + client/version/Makefile \ + client/mtom/Makefile \ + client/mtom_callback/Makefile \ + client/mtom/resources/Makefile \ + client/notify/Makefile \ + client/google/Makefile \ + client/yahoo/Makefile \ + client/amqp/Makefile \ + client/amqp/echo/Makefile \ + client/amqp/notify/Makefile \ + client/amqp/mtom/Makefile \ + client/amqp/mtom/resources/Makefile \ + user_guide/Makefile \ + user_guide/clients/Makefile \ + mtom_caching_callback/Makefile \ + mtom_sending_callback/Makefile + ]) + +AC_OUTPUT + diff --git a/samples/mtom_caching_callback/Makefile.am b/samples/mtom_caching_callback/Makefile.am new file mode 100644 index 0000000..1d8b2a9 --- /dev/null +++ b/samples/mtom_caching_callback/Makefile.am @@ -0,0 +1,10 @@ +prglibdir=$(prefix)/samples/lib/mtom_caching_callback +prglib_LTLIBRARIES = libmtom_caching_callback.la +libmtom_caching_callback_la_SOURCES = mtom_caching_callback.c +libmtom_caching_callback_la_LIBADD = $(LDFLAGS) \ + -L$(AXIS2C_HOME)/lib \ + -laxutil + +INCLUDES = -I ../../util/include \ + -I ../../axiom/include \ + @AXIS2INC@ diff --git a/samples/mtom_caching_callback/mtom_caching_callback.c b/samples/mtom_caching_callback/mtom_caching_callback.c new file mode 100644 index 0000000..03ee358 --- /dev/null +++ b/samples/mtom_caching_callback/mtom_caching_callback.c @@ -0,0 +1,184 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +caching_callback_free(axiom_mtom_caching_callback_t *caching_callback, + const axutil_env_t* env) +{ + if (caching_callback) + { + if (caching_callback->ops) + { + AXIS2_FREE(env->allocator, caching_callback->ops); + } + AXIS2_FREE(env->allocator, caching_callback); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void* AXIS2_CALL +caching_callback_init_handler(axiom_mtom_caching_callback_t *caching_callback, + const axutil_env_t* env, + axis2_char_t *key) +{ + FILE *fp = NULL; + axis2_char_t *file_name = NULL; + axis2_char_t *encoded_key = NULL; + + if(caching_callback->user_param) + { + /* If this is set the callback implementer may use + it to create the void return value at the end of + this function. + */ + } + + if(key) + { + /*encoded_key = axutil_strdup(env, key);*/ + encoded_key = AXIS2_MALLOC(env->allocator, (sizeof(axis2_char_t ))* (strlen(key))); + memset(encoded_key, 0, strlen(key)); + + if(encoded_key) + { + encoded_key = axutil_url_encode(env, encoded_key, key, (int)strlen(key)); + } + + file_name = axutil_stracat(env, "/opt/tmp/", encoded_key); + /*file_name = key;*/ + if(file_name) + { + fp = fopen(file_name, "ab+"); + } + else + { + return NULL; + } + } + + #if !defined(WIN32) + { + axis2_char_t permission_str[256]; + sprintf(permission_str, "chmod 777 %s", file_name); + system(permission_str); + } + #endif + + if(encoded_key) + { + AXIS2_FREE(env->allocator, encoded_key); + encoded_key = NULL; + } + + + if(file_name) + { + AXIS2_FREE(env->allocator, file_name); + file_name = NULL; + } + + return (void *)fp; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +caching_callback_cache(axiom_mtom_caching_callback_t *caching_callback, + const axutil_env_t* env, + axis2_char_t *buf, + int buf_len, + void* handler) +{ + size_t len = 0; + FILE *fp = (FILE *)(handler); + + + len = fwrite(buf, 1, buf_len, fp); + if(len < 0) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; + +} + + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +caching_callback_close_handler(axiom_mtom_caching_callback_t *caching_callback, + const axutil_env_t* env, + void* handler) +{ + axis2_status_t status = AXIS2_SUCCESS; + + if(fclose((FILE *)handler) != 0) + { + status = AXIS2_FAILURE; + } + return status; +} + + +/** + * Following block distinguish the exposed part of the dll. + */ +AXIS2_EXPORT int +axis2_get_instance(axiom_mtom_caching_callback_t **inst, + const axutil_env_t *env) +{ + axiom_mtom_caching_callback_t* caching_callback = NULL; + + caching_callback = AXIS2_MALLOC(env->allocator, + sizeof(axiom_mtom_caching_callback_t)); + + caching_callback->ops = AXIS2_MALLOC( + env->allocator, sizeof(axiom_mtom_caching_callback_ops_t)); + + /*assign function pointers*/ + + caching_callback->ops->init_handler = caching_callback_init_handler; + caching_callback->ops->cache = caching_callback_cache; + caching_callback->ops->close_handler = caching_callback_close_handler; + caching_callback->ops->free = caching_callback_free; + + *inst = caching_callback; + + if (!(*inst)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Cannot load the caching callback"); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int axis2_remove_instance(axiom_mtom_caching_callback_t *inst, + const axutil_env_t *env) +{ + axis2_status_t status = AXIS2_FAILURE; + if (inst) + { + status = AXIOM_MTOM_CACHING_CALLBACK_FREE(inst, env); + } + return status; +} diff --git a/samples/mtom_sending_callback/Makefile.am b/samples/mtom_sending_callback/Makefile.am new file mode 100644 index 0000000..991bff9 --- /dev/null +++ b/samples/mtom_sending_callback/Makefile.am @@ -0,0 +1,11 @@ +prglibdir=$(prefix)/samples/lib/mtom_sending_callback +prglib_LTLIBRARIES = libmtom_sending_callback.la +libmtom_sending_callback_la_SOURCES = mtom_sending_callback.c +libmtom_sending_callback_la_LIBADD = $(LDFLAGS) \ + -L$(AXIS2C_HOME)/lib \ + -laxutil + +INCLUDES = -I ../../util/include \ + -I ../../axiom/include \ + -I /usr/include/mysql \ + @AXIS2INC@ diff --git a/samples/mtom_sending_callback/mtom_sending_callback.c b/samples/mtom_sending_callback/mtom_sending_callback.c new file mode 100644 index 0000000..7182008 --- /dev/null +++ b/samples/mtom_sending_callback/mtom_sending_callback.c @@ -0,0 +1,209 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +#define MAX_BUFFER_SIZE 1024 + +struct storage_handler +{ + FILE *fp; + int storage_size; + axis2_char_t *buffer; + int buffer_size; +}; +typedef struct storage_handler storage_handler_t; + + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +mtom_sending_callback_free(axiom_mtom_sending_callback_t *mtom_sending_callback, + const axutil_env_t* env) +{ + if (mtom_sending_callback) + { + if (mtom_sending_callback->ops) + { + AXIS2_FREE(env->allocator, mtom_sending_callback->ops); + } + AXIS2_FREE(env->allocator, mtom_sending_callback); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void* AXIS2_CALL +mtom_sending_callback_init_handler(axiom_mtom_sending_callback_t *mtom_sending_callback, + const axutil_env_t* env, + void *user_param) +{ + axis2_char_t *file_name = NULL; + storage_handler_t *storage_handler = NULL; + struct stat stat_p; + + if(user_param) + { + /*file_name = axutil_stracat(env, "/tmp/", (axis2_char_t *)user_param);*/ + file_name = (axis2_char_t *)user_param; + } + else + { + return NULL; + } + + if (stat(file_name, &stat_p) == -1) + { + return NULL; + } + + storage_handler = AXIS2_MALLOC(env->allocator, + sizeof(storage_handler_t)); + + storage_handler->fp = fopen(file_name, "rb"); + storage_handler->storage_size = stat_p.st_size; + + if(storage_handler->storage_size > MAX_BUFFER_SIZE) + { + storage_handler->buffer_size = MAX_BUFFER_SIZE; + } + else + { + storage_handler->buffer_size = storage_handler->storage_size; + } + + storage_handler->buffer = (axis2_char_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t)*(storage_handler->buffer_size)); + + /* + #if !defined(WIN32) + { + axis2_char_t permission_str[256]; + sprintf(permission_str, "chmod 777 %s", file_name); + system(permission_str); + } + #endif + */ + + /*if(file_name) + { + AXIS2_FREE(env->allocator, file_name); + file_name = NULL; + }*/ + + return (void *)storage_handler; +} + +AXIS2_EXTERN int AXIS2_CALL +mtom_sending_callback_load_data(axiom_mtom_sending_callback_t *mtom_sending_callback, + const axutil_env_t* env, + void *handler, + axis2_char_t **buffer) +{ + int len = 0; + FILE *fp = ((storage_handler_t *)(handler))->fp; + storage_handler_t *storage_handler = NULL; + + storage_handler = (storage_handler_t *)handler; + + memset(storage_handler->buffer, 0, storage_handler->buffer_size); + + if(feof(fp)) + { + return 0; + } + else + { + len = (int)fread(storage_handler->buffer, 1, + storage_handler->buffer_size, fp); + } + + *buffer = storage_handler->buffer; + return len; +} + + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +mtom_sending_callback_close_handler(axiom_mtom_sending_callback_t *mtom_sending_callback, + const axutil_env_t* env, + void* handler) +{ + axis2_status_t status = AXIS2_SUCCESS; + storage_handler_t *storage_handler = NULL; + + storage_handler = (storage_handler_t *)handler; + + if(fclose(storage_handler->fp) != 0) + { + status = AXIS2_FAILURE; + } + + AXIS2_FREE(env->allocator, storage_handler->buffer); + storage_handler->buffer = NULL; + + AXIS2_FREE(env->allocator, storage_handler); + storage_handler = NULL; + + return status; +} + + +/** + * Following block distinguish the exposed part of the dll. + */ +AXIS2_EXPORT int +axis2_get_instance(axiom_mtom_sending_callback_t **inst, + const axutil_env_t *env) +{ + axiom_mtom_sending_callback_t* mtom_sending_callback = NULL; + + mtom_sending_callback = AXIS2_MALLOC(env->allocator, + sizeof(axiom_mtom_sending_callback_t)); + + mtom_sending_callback->ops = AXIS2_MALLOC( + env->allocator, sizeof(axiom_mtom_sending_callback_ops_t)); + + /*assign function pointers*/ + + mtom_sending_callback->ops->init_handler = mtom_sending_callback_init_handler; + mtom_sending_callback->ops->load_data = mtom_sending_callback_load_data; + mtom_sending_callback->ops->close_handler = mtom_sending_callback_close_handler; + mtom_sending_callback->ops->free = mtom_sending_callback_free; + + *inst = mtom_sending_callback; + + if (!(*inst)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Cannot load the mtom_sending callback"); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int axis2_remove_instance(axiom_mtom_sending_callback_t *inst, + const axutil_env_t *env) +{ + axis2_status_t status = AXIS2_FAILURE; + if (inst) + { + status = AXIOM_MTOM_SENDING_CALLBACK_FREE(inst, env); + } + return status; +} diff --git a/samples/server/Calculator/Calculator.mk b/samples/server/Calculator/Calculator.mk new file mode 100644 index 0000000..8b4c683 --- /dev/null +++ b/samples/server/Calculator/Calculator.mk @@ -0,0 +1,7 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "AXIS2_DECLARE_EXPORT" /D "_WINDOWS" /D "_MBCS" *.C /I.\..\..\..\include /c + @link.exe /nologo *.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /DLL /OUT:Calculator.dll + + + + diff --git a/samples/server/Calculator/Calculator.wsdl b/samples/server/Calculator/Calculator.wsdl new file mode 100644 index 0000000..a37e390 --- /dev/null +++ b/samples/server/Calculator/Calculator.wsdl @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/server/Calculator/Makefile.am b/samples/server/Calculator/Makefile.am new file mode 100644 index 0000000..65f95ce --- /dev/null +++ b/samples/server/Calculator/Makefile.am @@ -0,0 +1,9 @@ +prglibdir=$(prefix)/services/Calculator +prglib_LTLIBRARIES = libCalculator.la +prglib_DATA=services.xml Calculator.wsdl +EXTRA_DIST = services.xml Calculator.wsdl Calculator.mk calc.h +noinst_HEADERS = calc.h +SUBDIRS = +libCalculator_la_SOURCES = calc.c calc_skeleton.c +libCalculator_la_LIBADD = +INCLUDES = @AXIS2INC@ diff --git a/samples/server/Calculator/calc.c b/samples/server/Calculator/calc.c new file mode 100644 index 0000000..3e5eeba --- /dev/null +++ b/samples/server/Calculator/calc.c @@ -0,0 +1,553 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "calc.h" +#include + +axiom_node_t * +axis2_calc_add( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *complex_node = NULL; + axiom_node_t *seq_node = NULL; + axiom_node_t *param1_node = NULL; + axiom_node_t *param1_text_node = NULL; + axis2_char_t *param1_str = NULL; + long int param1 = 0; + axiom_node_t *param2_node = NULL; + axiom_node_t *param2_text_node = NULL; + axis2_char_t *param2_str = NULL; + long int param2 = 0; + + if (!node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Calculator client request ERROR: input parameter NULL\n"); + return NULL; + } + complex_node = axiom_node_get_first_child(node, env); + if (!complex_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + seq_node = axiom_node_get_first_child(complex_node, env); + if (!seq_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + param1_node = axiom_node_get_first_child(seq_node, env); + if (!param1_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + param1_text_node = axiom_node_get_first_child(param1_node, env); + if (!param1_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + if (axiom_node_get_node_type(param1_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param1_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param1_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_node = axiom_node_get_next_sibling(param1_node, env); + if (!param2_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + param2_text_node = axiom_node_get_first_child(param2_node, env); + if (!param2_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + if (axiom_node_get_node_type(param2_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param2_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param2_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + if (param1_str && param2_str) + { + long int result = 0; + axis2_char_t result_str[255]; + + axiom_element_t *ele1 = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL; + axiom_namespace_t *ns1 = NULL; + axiom_text_t *text1 = NULL; + + param1 = strtol(param1_str, NULL, 10); + param2 = strtol(param2_str, NULL, 10); + result = param1 + param2; + sprintf(result_str, "%ld", result); + + ns1 = axiom_namespace_create(env, + "http://axis2/test/namespace1", "ns1"); + ele1 = axiom_element_create(env, NULL, "result", ns1, &node1); + text1 = axiom_text_create(env, node1, result_str, &node2); + + return node1; + } + + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid parameters\n"); + return NULL; +} + +axiom_node_t * +axis2_calc_sub( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *param1_node = NULL; + axiom_node_t *param1_text_node = NULL; + axis2_char_t *param1_str = NULL; + long int param1 = 0; + axiom_node_t *param2_node = NULL; + axiom_node_t *param2_text_node = NULL; + axis2_char_t *param2_str = NULL; + long int param2 = 0; + + if (!node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Calculator client request ERROR: input parameter NULL\n"); + return NULL; + } + + param1_node = axiom_node_get_first_child(node, env); + if (!param1_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + param1_text_node = axiom_node_get_first_child(param1_node, env); + if (!param1_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param1_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param1_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param1_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_node = axiom_node_get_next_sibling(param1_node, env); + if (!param2_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_text_node = axiom_node_get_first_child(param2_node, env); + if (!param2_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param2_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param2_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param2_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + if (param1_str && param2_str) + { + long int result = 0; + axis2_char_t result_str[255]; + + axiom_element_t *ele1 = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL; + axiom_namespace_t *ns1 = NULL; + axiom_text_t *text1 = NULL; + + param1 = strtol(param1_str, NULL, 10); + param2 = strtol(param2_str, NULL, 10); + result = param1 - param2; + sprintf(result_str, "%ld", result); + + ns1 = axiom_namespace_create(env, + "http://axis2/test/namespace1", "ns1"); + ele1 = axiom_element_create(env, NULL, "result", ns1, &node1); + text1 = axiom_text_create(env, node1, result_str, &node2); + + return node1; + } + + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid parameters\n"); + return NULL; +} + +axiom_node_t * +axis2_calc_mul( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *param1_node = NULL; + axiom_node_t *param1_text_node = NULL; + axis2_char_t *param1_str = NULL; + long int param1 = 0; + axiom_node_t *param2_node = NULL; + axiom_node_t *param2_text_node = NULL; + axis2_char_t *param2_str = NULL; + long int param2 = 0; + + if (!node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Calculator client request ERROR: input parameter NULL\n"); + return NULL; + } + + param1_node = axiom_node_get_first_child(node, env); + if (!param1_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + param1_text_node = axiom_node_get_first_child(param1_node, env); + if (!param1_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param1_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param1_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param1_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_node = axiom_node_get_next_sibling(param1_node, env); + if (!param2_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_text_node = axiom_node_get_first_child(param2_node, env); + if (!param2_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param2_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param2_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param2_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + if (param1_str && param2_str) + { + long int result = 0; + axis2_char_t result_str[255]; + + axiom_element_t *ele1 = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL; + axiom_namespace_t *ns1 = NULL; + axiom_text_t *text1 = NULL; + + param1 = strtol(param1_str, NULL, 10); + param2 = strtol(param2_str, NULL, 10); + result = param1 * param2; + sprintf(result_str, "%ld", result); + + ns1 = axiom_namespace_create(env, + "http://axis2/test/namespace1", "ns1"); + ele1 = axiom_element_create(env, NULL, "result", ns1, &node1); + text1 = axiom_text_create(env, node1, result_str, &node2); + + return node1; + } + + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid parameters\n"); + return NULL; +} + +axiom_node_t * +axis2_calc_div( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *param1_node = NULL; + axiom_node_t *param1_text_node = NULL; + axis2_char_t *param1_str = NULL; + long int param1 = 0; + axiom_node_t *param2_node = NULL; + axiom_node_t *param2_text_node = NULL; + axis2_char_t *param2_str = NULL; + long int param2 = 0; + + if (!node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Calculator client request ERROR: input parameter NULL\n"); + return NULL; + } + + param1_node = axiom_node_get_first_child(node, env); + if (!param1_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + param1_text_node = axiom_node_get_first_child(param1_node, env); + if (!param1_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param1_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param1_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param1_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_node = axiom_node_get_next_sibling(param1_node, env); + if (!param2_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_text_node = axiom_node_get_first_child(param2_node, env); + if (!param2_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param2_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param2_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param2_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid XML in request\n"); + return NULL; + } + + if (param1_str && param2_str) + { + long int result = 0; + axis2_char_t result_str[255]; + + axiom_element_t *ele1 = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL; + axiom_namespace_t *ns1 = NULL; + axiom_text_t *text1 = NULL; + + param1 = strtol(param1_str, NULL, 10); + param2 = strtol(param2_str, NULL, 10); + if (param2 == 0) + return NULL; + result = param1 / param2; + sprintf(result_str, "%ld", result); + + ns1 = axiom_namespace_create(env, + "http://axis2/test/namespace1", "ns1"); + ele1 = axiom_element_create(env, NULL, "result", ns1, &node1); + text1 = axiom_text_create(env, node1, result_str, &node2); + + return node1; + } + + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST, + AXIS2_FAILURE); + printf("Calculator service ERROR: invalid parameters\n"); + return NULL; +} diff --git a/samples/server/Calculator/calc.h b/samples/server/Calculator/calc.h new file mode 100644 index 0000000..58ffde8 --- /dev/null +++ b/samples/server/Calculator/calc.h @@ -0,0 +1,41 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef CALC_H +#define CALC_H + +#include +#include +#include +#include +#include +#include + +axiom_node_t *axis2_calc_add( + const axutil_env_t * env, + axiom_node_t * node); +axiom_node_t *axis2_calc_sub( + const axutil_env_t * env, + axiom_node_t * node); +axiom_node_t *axis2_calc_mul( + const axutil_env_t * env, + axiom_node_t * node); +axiom_node_t *axis2_calc_div( + const axutil_env_t * env, + axiom_node_t * node); + +#endif /* CALC_H */ diff --git a/samples/server/Calculator/calc_skeleton.c b/samples/server/Calculator/calc_skeleton.c new file mode 100644 index 0000000..c153eee --- /dev/null +++ b/samples/server/Calculator/calc_skeleton.c @@ -0,0 +1,157 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "axis2_svc_skeleton.h" +#include "calc.h" +#include +#include + +int AXIS2_CALL calc_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL calc_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx); + +int AXIS2_CALL calc_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +static const axis2_svc_skeleton_ops_t calc_svc_skeleton_ops_var = { + calc_init, + calc_invoke, + NULL, + calc_free +}; + +AXIS2_EXTERN axis2_svc_skeleton_t *AXIS2_CALL +axis2_calc_create( + const axutil_env_t * env) +{ + axis2_svc_skeleton_t *svc_skeleton = NULL; + svc_skeleton = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_skeleton_t)); + + svc_skeleton->ops = &calc_svc_skeleton_ops_var; + + svc_skeleton->func_array = NULL; + + return svc_skeleton; +} + +int AXIS2_CALL +calc_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Any initialization stuff of calc goes here */ + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +calc_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + if (svc_skeleton) + { + AXIS2_FREE(env->allocator, svc_skeleton); + svc_skeleton = NULL; + } + return AXIS2_SUCCESS; +} + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL +calc_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx) +{ + /* Depending on the function name invoke the + * corresponding calc method + */ + if (node) + { + if (axiom_node_get_node_type(node, env) == AXIOM_ELEMENT) + { + axiom_element_t *element = NULL; + element = + (axiom_element_t *) axiom_node_get_data_element(node, env); + if (element) + { + axis2_char_t *op_name = + axiom_element_get_localname(element, env); + if (op_name) + { + if (axutil_strcmp(op_name, "add") == 0) + return axis2_calc_add(env, node); + if (axutil_strcmp(op_name, "sub") == 0) + return axis2_calc_sub(env, node); + if (axutil_strcmp(op_name, "mul") == 0) + return axis2_calc_mul(env, node); + if (axutil_strcmp(op_name, "div") == 0) + return axis2_calc_div(env, node); + } + } + } + } + + printf("Calculator service ERROR: invalid OM parameters in request\n"); + + /** Note: return a SOAP fault here */ + return node; +} + +/** + * Following block distinguish the exposed part of the dll. + */ + +AXIS2_EXPORT int +axis2_get_instance( + struct axis2_svc_skeleton **inst, + const axutil_env_t * env) +{ + *inst = axis2_calc_create(env); + if (!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_svc_skeleton_t * inst, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + if (inst) + { + status = AXIS2_SVC_SKELETON_FREE(inst, env); + } + return status; +} diff --git a/samples/server/Calculator/services.xml b/samples/server/Calculator/services.xml new file mode 100644 index 0000000..b449764 --- /dev/null +++ b/samples/server/Calculator/services.xml @@ -0,0 +1,28 @@ + + Calculator + + + This is a testing service, named 'Calculator' to test dynamic client + + + + + Calculator#add + + + + + Calculator#sub + + + + + Calculator#mul + + + + + Calculator#div + + + diff --git a/samples/server/Makefile.am b/samples/server/Makefile.am new file mode 100644 index 0000000..677aad9 --- /dev/null +++ b/samples/server/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = echo math notify sg_math mtom Calculator version mtom_callback +EXTRA_DIST = axis2.xml diff --git a/samples/server/axis2.log b/samples/server/axis2.log new file mode 100644 index 0000000..39cdd0d --- /dev/null +++ b/samples/server/axis2.log @@ -0,0 +1 @@ +- diff --git a/samples/server/axis2.xml b/samples/server/axis2.xml new file mode 100644 index 0000000..0851e3b --- /dev/null +++ b/samples/server/axis2.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + 6060 + false + + + + + + + + + + + + + HTTP/1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/server/echo/Makefile.am b/samples/server/echo/Makefile.am new file mode 100644 index 0000000..8413c5a --- /dev/null +++ b/samples/server/echo/Makefile.am @@ -0,0 +1,9 @@ +prglibdir=$(prefix)/services/echo +prglib_LTLIBRARIES = libecho.la +prglib_DATA= services.xml +EXTRA_DIST = services.xml echo.mk echo.h +noinst_HEADERS = echo.h +SUBDIRS = +libecho_la_SOURCES = echo.c echo_skeleton.c +libecho_la_LIBADD = +INCLUDES = @AXIS2INC@ diff --git a/samples/server/echo/echo.c b/samples/server/echo/echo.c new file mode 100644 index 0000000..2ce6a08 --- /dev/null +++ b/samples/server/echo/echo.c @@ -0,0 +1,116 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "echo.h" +#include +#include + +axiom_node_t *build_om_programatically( + const axutil_env_t * env, + axis2_char_t * text); + +void set_custom_error( + const axutil_env_t * env, + axis2_char_t * error_message); + +axiom_node_t * +axis2_echo_echo( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *text_parent_node = NULL; + axiom_node_t *text_node = NULL; + axiom_node_t *ret_node = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + /* Expected request format is :- + * + * echo5 + * + */ + if (!node) /* 'echoString' node */ + { + set_custom_error(env, "Invalid payload; echoString node is NULL"); + return NULL; + } + + text_parent_node = axiom_node_get_first_element(node, env); + if (!text_parent_node) + { + set_custom_error(env, "Invalid payload; text node is NULL"); + return NULL; + } + + text_node = axiom_node_get_first_child(text_parent_node, env); + if (!text_node) /* actual text to echo */ + { + set_custom_error(env, "Invalid payload; text to be echoed is NULL"); + return NULL; + } + + if (axiom_node_get_node_type(text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(text_node, env); + if (text && axiom_text_get_value(text, env)) + { + axis2_char_t *text_str = + (axis2_char_t *) axiom_text_get_value(text, env); + ret_node = build_om_programatically(env, text_str); + } + } + else + { + set_custom_error(env, "Invalid payload; invalid XML in request"); + return NULL; + } + + return ret_node; +} + +/* Builds the response content */ +axiom_node_t * +build_om_programatically( + const axutil_env_t * env, + axis2_char_t * text) +{ + axiom_node_t *echo_om_node = NULL; + axiom_element_t *echo_om_ele = NULL; + axiom_node_t *text_om_node = NULL; + axiom_element_t *text_om_ele = NULL; + axiom_namespace_t *ns1 = NULL; + + ns1 = + axiom_namespace_create(env, "http://ws.apache.org/axis2/c/samples", + "ns1"); + echo_om_ele = + axiom_element_create(env, NULL, "echoString", ns1, &echo_om_node); + text_om_ele = + axiom_element_create(env, echo_om_node, "text", NULL, &text_om_node); + axiom_element_set_text(text_om_ele, env, text, text_om_node); + return echo_om_node; +} + +void +set_custom_error( + const axutil_env_t * env, + axis2_char_t * error_message) +{ + axutil_error_set_error_message(env->error, error_message); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_LAST + 1, AXIS2_FAILURE); +} diff --git a/samples/server/echo/echo.h b/samples/server/echo/echo.h new file mode 100644 index 0000000..ecad867 --- /dev/null +++ b/samples/server/echo/echo.h @@ -0,0 +1,32 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef CALC_H +#define CALC_H + +#include +#include +#include +#include +#include +#include + +axiom_node_t *axis2_echo_echo( + const axutil_env_t * env, + axiom_node_t * node); + +#endif /* CALC_H */ diff --git a/samples/server/echo/echo.mk b/samples/server/echo/echo.mk new file mode 100644 index 0000000..ae0f769 --- /dev/null +++ b/samples/server/echo/echo.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "_MBCS" *.C /I.\..\..\..\include /c + @link.exe /nologo *.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /DLL /OUT:echo.dll + + + + + diff --git a/samples/server/echo/echo_skeleton.c b/samples/server/echo/echo_skeleton.c new file mode 100644 index 0000000..2f902ab --- /dev/null +++ b/samples/server/echo/echo_skeleton.c @@ -0,0 +1,182 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include "echo.h" +#include +#include +#include + +int AXIS2_CALL echo_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL echo_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx); + +int AXIS2_CALL echo_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +axiom_node_t *AXIS2_CALL echo_on_fault( + axis2_svc_skeleton_t * svc_skeli, + const axutil_env_t * env, + axiom_node_t * node); + +static const axis2_svc_skeleton_ops_t echo_svc_skeleton_ops_var = { + echo_init, + echo_invoke, + echo_on_fault, + echo_free +}; + +/*Create function */ +axis2_svc_skeleton_t * +axis2_echo_create( + const axutil_env_t * env) +{ + axis2_svc_skeleton_t *svc_skeleton = NULL; + /* Allocate memory for the structs */ + svc_skeleton = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_skeleton_t)); + + svc_skeleton->ops = &echo_svc_skeleton_ops_var; + + svc_skeleton->func_array = NULL; + + return svc_skeleton; +} + +/* Initialize the service */ +int AXIS2_CALL +echo_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Any initialization stuff of echo service should go here */ + return AXIS2_SUCCESS; +} + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL +echo_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx) +{ + /* Invoke the business logic. + * Depending on the function name invoke the correct impl method. + * We have only echo in this sample, hence invoke echo method. + * To see how to deal with multiple impl methods, have a look at the + * math sample. + */ + axis2_endpoint_ref_t* to_epr = NULL; + to_epr = axis2_msg_ctx_get_to(msg_ctx, env); + + if (to_epr) + { + axis2_char_t* to_address = NULL; + to_address = (axis2_char_t*)axis2_endpoint_ref_get_address(to_epr, env); + + if (to_address && strstr(to_address, AXIS2_ANON_SERVICE)) + { + axis2_msg_ctx_set_wsa_action(msg_ctx, env, AXIS2_ANON_OUT_IN_OP); + } + } + + return axis2_echo_echo(env, node); +} + +/* On fault, handle the fault */ +axiom_node_t *AXIS2_CALL +echo_on_fault( + axis2_svc_skeleton_t * svc_skeli, + const axutil_env_t * env, + axiom_node_t * node) +{ + /* Here we are just setting a simple error message inside an element + * called 'EchoServiceError' + */ + axiom_node_t *error_node = NULL; + axiom_element_t *error_ele = NULL; + + error_ele = + axiom_element_create(env, NULL, "EchoServiceError", NULL, &error_node); + axiom_element_set_text(error_ele, env, "Echo service failed ", error_node); + return error_node; +} + +/* Free the resources used */ +int AXIS2_CALL +echo_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Free the function array */ + if (svc_skeleton->func_array) + { + axutil_array_list_free(svc_skeleton->func_array, env); + svc_skeleton->func_array = NULL; + } + + /* Free the service skeleton */ + if (svc_skeleton) + { + AXIS2_FREE(env->allocator, svc_skeleton); + svc_skeleton = NULL; + } + + return AXIS2_SUCCESS; +} + +/** + * Following block distinguish the exposed part of the dll. + */ +AXIS2_EXPORT int +axis2_get_instance( + axis2_svc_skeleton_t ** inst, + const axutil_env_t * env) +{ + *inst = axis2_echo_create(env); + if (!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_svc_skeleton_t * inst, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + if (inst) + { + status = AXIS2_SVC_SKELETON_FREE(inst, env); + } + return status; +} diff --git a/samples/server/echo/services.xml b/samples/server/echo/services.xml new file mode 100644 index 0000000..ea75640 --- /dev/null +++ b/samples/server/echo/services.xml @@ -0,0 +1,34 @@ + + echo + + + + + + + + + This is a testing service, to test whether the system is working or not + + + + + http://ws.apache.org/axis2/c/samples/echoString + + + POST + echoString + + + + + + + + + + diff --git a/samples/server/math/Makefile.am b/samples/server/math/Makefile.am new file mode 100644 index 0000000..d8e6f82 --- /dev/null +++ b/samples/server/math/Makefile.am @@ -0,0 +1,9 @@ +prglibdir=$(prefix)/services/math +prglib_LTLIBRARIES = libmath.la +prglib_DATA=services.xml +EXTRA_DIST = services.xml math.mk math.h +noinst_HEADERS = math.h +SUBDIRS = +libmath_la_SOURCES = math.c math_skeleton.c +libmath_la_LIBADD = +INCLUDES = @AXIS2INC@ diff --git a/samples/server/math/math.c b/samples/server/math/math.c new file mode 100644 index 0000000..c3236a2 --- /dev/null +++ b/samples/server/math/math.c @@ -0,0 +1,537 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "math.h" +#include + +axiom_node_t * +axis2_math_add( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *param1_node = NULL; + axiom_node_t *param1_text_node = NULL; + axis2_char_t *param1_str = NULL; + long int param1 = 0; + axiom_node_t *param2_node = NULL; + axiom_node_t *param2_text_node = NULL; + axis2_char_t *param2_str = NULL; + long int param2 = 0; + + if (!node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Math client request ERROR: input parameter NULL\n"); + return NULL; + } + + param1_node = axiom_node_get_first_child(node, env); + if (!param1_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param1_text_node = axiom_node_get_first_child(param1_node, env); + if (!param1_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param1_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param1_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param1_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_node = axiom_node_get_next_sibling(param1_node, env); + if (!param2_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_text_node = axiom_node_get_first_child(param2_node, env); + if (!param2_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param2_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param2_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param2_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (param1_str && param2_str) + { + long int result = 0; + axis2_char_t result_str[255]; + + axiom_element_t *ele1 = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL; + axiom_namespace_t *ns1 = NULL; + axiom_text_t *text1 = NULL; + + param1 = strtol(param1_str, NULL, 10); + param2 = strtol(param2_str, NULL, 10); + result = param1 + param2; + sprintf(result_str, "%ld", result); + + ns1 = axiom_namespace_create(env, + "http://axis2/test/namespace1", "ns1"); + ele1 = axiom_element_create(env, NULL, "result", ns1, &node1); + text1 = axiom_text_create(env, node1, result_str, &node2); + + return node1; + } + + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid parameters\n"); + return NULL; +} + +axiom_node_t * +axis2_math_sub( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *param1_node = NULL; + axiom_node_t *param1_text_node = NULL; + axis2_char_t *param1_str = NULL; + long int param1 = 0; + axiom_node_t *param2_node = NULL; + axiom_node_t *param2_text_node = NULL; + axis2_char_t *param2_str = NULL; + long int param2 = 0; + + if (!node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Math client request ERROR: input parameter NULL\n"); + return NULL; + } + + param1_node = axiom_node_get_first_child(node, env); + if (!param1_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param1_text_node = axiom_node_get_first_child(param1_node, env); + if (!param1_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param1_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param1_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param1_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_node = axiom_node_get_next_sibling(param1_node, env); + if (!param2_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_text_node = axiom_node_get_first_child(param2_node, env); + if (!param2_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param2_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param2_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param2_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (param1_str && param2_str) + { + long int result = 0; + axis2_char_t result_str[255]; + + axiom_element_t *ele1 = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL; + axiom_namespace_t *ns1 = NULL; + axiom_text_t *text1 = NULL; + + param1 = strtol(param1_str, NULL, 10); + param2 = strtol(param2_str, NULL, 10); + result = param1 - param2; + sprintf(result_str, "%ld", result); + + ns1 = axiom_namespace_create(env, + "http://axis2/test/namespace1", "ns1"); + ele1 = axiom_element_create(env, NULL, "result", ns1, &node1); + text1 = axiom_text_create(env, node1, result_str, &node2); + + return node1; + } + + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid parameters\n"); + return NULL; +} + +axiom_node_t * +axis2_math_mul( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *param1_node = NULL; + axiom_node_t *param1_text_node = NULL; + axis2_char_t *param1_str = NULL; + long int param1 = 0; + axiom_node_t *param2_node = NULL; + axiom_node_t *param2_text_node = NULL; + axis2_char_t *param2_str = NULL; + long int param2 = 0; + + if (!node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Math client request ERROR: input parameter NULL\n"); + return NULL; + } + + param1_node = axiom_node_get_first_child(node, env); + if (!param1_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param1_text_node = axiom_node_get_first_child(param1_node, env); + if (!param1_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param1_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param1_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param1_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_node = axiom_node_get_next_sibling(param1_node, env); + if (!param2_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_text_node = axiom_node_get_first_child(param2_node, env); + if (!param2_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param2_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param2_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param2_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (param1_str && param2_str) + { + long int result = 0; + axis2_char_t result_str[255]; + + axiom_element_t *ele1 = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL; + axiom_namespace_t *ns1 = NULL; + axiom_text_t *text1 = NULL; + + param1 = strtol(param1_str, NULL, 10); + param2 = strtol(param2_str, NULL, 10); + result = param1 * param2; + sprintf(result_str, "%ld", result); + + ns1 = axiom_namespace_create(env, + "http://axis2/test/namespace1", "ns1"); + ele1 = axiom_element_create(env, NULL, "result", ns1, &node1); + text1 = axiom_text_create(env, node1, result_str, &node2); + + return node1; + } + + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid parameters\n"); + return NULL; +} + +axiom_node_t * +axis2_math_div( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *param1_node = NULL; + axiom_node_t *param1_text_node = NULL; + axis2_char_t *param1_str = NULL; + long int param1 = 0; + axiom_node_t *param2_node = NULL; + axiom_node_t *param2_text_node = NULL; + axis2_char_t *param2_str = NULL; + long int param2 = 0; + + if (!node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Math client request ERROR: input parameter NULL\n"); + return NULL; + } + + param1_node = axiom_node_get_first_child(node, env); + if (!param1_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param1_text_node = axiom_node_get_first_child(param1_node, env); + if (!param1_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param1_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param1_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param1_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_node = axiom_node_get_next_sibling(param1_node, env); + if (!param2_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_text_node = axiom_node_get_first_child(param2_node, env); + if (!param2_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param2_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param2_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param2_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (param1_str && param2_str) + { + long int result = 0; + axis2_char_t result_str[255]; + + axiom_element_t *ele1 = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL; + axiom_namespace_t *ns1 = NULL; + axiom_text_t *text1 = NULL; + + param1 = strtol(param1_str, NULL, 10); + param2 = strtol(param2_str, NULL, 10); + if (param2 == 0) + return NULL; + result = param1 / param2; + sprintf(result_str, "%ld", result); + + ns1 = axiom_namespace_create(env, + "http://axis2/test/namespace1", "ns1"); + ele1 = axiom_element_create(env, NULL, "result", ns1, &node1); + text1 = axiom_text_create(env, node1, result_str, &node2); + + return node1; + } + + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid parameters\n"); + return NULL; +} diff --git a/samples/server/math/math.h b/samples/server/math/math.h new file mode 100644 index 0000000..58abfc5 --- /dev/null +++ b/samples/server/math/math.h @@ -0,0 +1,41 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MATH_H +#define MATH_H + +#include +#include +#include +#include +#include +#include + +axiom_node_t *axis2_math_add( + const axutil_env_t * env, + axiom_node_t * node); +axiom_node_t *axis2_math_sub( + const axutil_env_t * env, + axiom_node_t * node); +axiom_node_t *axis2_math_mul( + const axutil_env_t * env, + axiom_node_t * node); +axiom_node_t *axis2_math_div( + const axutil_env_t * env, + axiom_node_t * node); + +#endif /* MATH_H */ diff --git a/samples/server/math/math.mk b/samples/server/math/math.mk new file mode 100644 index 0000000..dee9b6d --- /dev/null +++ b/samples/server/math/math.mk @@ -0,0 +1,7 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "AXIS2_DECLARE_EXPORT" /D "_WINDOWS" /D "_MBCS" *.C /I.\..\..\..\include /c + @link.exe /nologo *.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /DLL /OUT:math.dll + + + + diff --git a/samples/server/math/math_skeleton.c b/samples/server/math/math_skeleton.c new file mode 100644 index 0000000..4aabce8 --- /dev/null +++ b/samples/server/math/math_skeleton.c @@ -0,0 +1,157 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "axis2_svc_skeleton.h" +#include "math.h" +#include +#include + +int AXIS2_CALL math_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL math_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx); + +int AXIS2_CALL math_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +static const axis2_svc_skeleton_ops_t math_svc_skeleton_ops_var = { + math_init, + math_invoke, + NULL, + math_free +}; + +AXIS2_EXTERN axis2_svc_skeleton_t *AXIS2_CALL +math_create( + const axutil_env_t * env) +{ + axis2_svc_skeleton_t *svc_skeleton = NULL; + svc_skeleton = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_skeleton_t)); + + svc_skeleton->ops = &math_svc_skeleton_ops_var; + + svc_skeleton->func_array = NULL; + + return svc_skeleton; +} + +int AXIS2_CALL +math_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Any initialization stuff of math goes here */ + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +math_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + if (svc_skeleton) + { + AXIS2_FREE(env->allocator, svc_skeleton); + svc_skeleton = NULL; + } + return AXIS2_SUCCESS; +} + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL +math_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx) +{ + /* Depending on the function name invoke the + * corresponding math method + */ + if (node) + { + if (axiom_node_get_node_type(node, env) == AXIOM_ELEMENT) + { + axiom_element_t *element = NULL; + element = + (axiom_element_t *) axiom_node_get_data_element(node, env); + if (element) + { + axis2_char_t *op_name = + axiom_element_get_localname(element, env); + if (op_name) + { + if (axutil_strcmp(op_name, "add") == 0) + return axis2_math_add(env, node); + if (axutil_strcmp(op_name, "sub") == 0) + return axis2_math_sub(env, node); + if (axutil_strcmp(op_name, "mul") == 0) + return axis2_math_mul(env, node); + if (axutil_strcmp(op_name, "div") == 0) + return axis2_math_div(env, node); + } + } + } + } + + printf("Math service ERROR: invalid OM parameters in request\n"); + + /** Note: return a SOAP fault here */ + return node; +} + +/** + * Following block distinguish the exposed part of the dll. + */ + +AXIS2_EXPORT int +axis2_get_instance( + struct axis2_svc_skeleton **inst, + const axutil_env_t * env) +{ + *inst = math_create(env); + if (!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_svc_skeleton_t * inst, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + if (inst) + { + status = AXIS2_SVC_SKELETON_FREE(inst, env); + } + return status; +} diff --git a/samples/server/math/services.xml b/samples/server/math/services.xml new file mode 100644 index 0000000..70ff77b --- /dev/null +++ b/samples/server/math/services.xml @@ -0,0 +1,18 @@ + + math + + This is a testing service, named 'math' to test multiple operations in the same service + + + + + + + + + + + + + + diff --git a/samples/server/mtom/Makefile.am b/samples/server/mtom/Makefile.am new file mode 100644 index 0000000..198cad3 --- /dev/null +++ b/samples/server/mtom/Makefile.am @@ -0,0 +1,9 @@ +prglibdir=$(prefix)/services/mtom +prglib_LTLIBRARIES = libmtom.la +prglib_DATA= services.xml +EXTRA_DIST = services.xml mtom.mk mtom.h +noinst_HEADERS = mtom.h +SUBDIRS = +libmtom_la_SOURCES = mtom.c mtom_skeleton.c +libmtom_la_LIBADD = +INCLUDES = @AXIS2INC@ diff --git a/samples/server/mtom/mtom.c b/samples/server/mtom/mtom.c new file mode 100644 index 0000000..f00b68b --- /dev/null +++ b/samples/server/mtom/mtom.c @@ -0,0 +1,261 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "mtom.h" +#include +#include + +axiom_node_t *build_response1( + const axutil_env_t * env, + axis2_char_t * text); + +axiom_node_t *build_response2( + const axutil_env_t *env, + axiom_data_handler_t *data_handler); + +axiom_node_t* +axis2_mtom_mtom( + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t *msg_ctx) +{ + axiom_node_t *file_name_node = NULL; + axiom_node_t *file_text_node = NULL; + axiom_node_t *ret_node = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + /* Expected request format is :- + * + test.jpg + + + + + */ + if (!node) /* 'mtomSample' node */ + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Echo client ERROR: input parameter NULL\n"); + return NULL; + } + + file_name_node = axiom_node_get_first_child(node, env); + if (!file_name_node) /* 'text' node */ + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Echo client ERROR: invalid XML in request\n"); + return NULL; + } + + file_text_node = axiom_node_get_first_child(file_name_node, env); + if (!file_text_node) /* actual text to mtom */ + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Echo client ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(file_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(file_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + axiom_node_t *image_node = NULL; + axis2_char_t *text_str = + (axis2_char_t *) axiom_text_get_value(text, env); + printf("File Name %s \n", text_str); + + image_node = axiom_node_get_next_sibling(file_name_node, env); + if (image_node) + { + /* axiom_node_t *inc_node = NULL; + inc_node = axiom_node_get_first_child(image_node, env); + if (inc_node) + { */ + axiom_node_t *binary_node = NULL; + binary_node = axiom_node_get_first_child(image_node, env); + if (binary_node) + { + axiom_data_handler_t *data_handler = NULL; + axiom_text_t *bin_text = (axiom_text_t *) + axiom_node_get_data_element(binary_node, env); + data_handler = axiom_text_get_data_handler(bin_text, env); + if (data_handler && !axiom_data_handler_get_cached(data_handler, env)) + { + axiom_data_handler_t *data_handler_res = NULL; + axis2_byte_t *input_buff = NULL; + axis2_byte_t *buff = NULL; + size_t buff_len = 0; + + + axiom_data_handler_set_file_name(data_handler, env, + text_str); + axiom_data_handler_write_to(data_handler, env); + + input_buff = axiom_data_handler_get_input_stream(data_handler, env); + buff_len = axiom_data_handler_get_input_stream_len(data_handler, env); + + data_handler_res = axiom_data_handler_create(env, NULL, NULL); + + buff = AXIS2_MALLOC(env->allocator, sizeof(axis2_byte_t)*buff_len); + + if (!buff) + { + AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, + "malloc failed, not enough memory"); + return NULL; + } + + memcpy(buff, input_buff, buff_len); + + axiom_data_handler_set_binary_data(data_handler_res, env, buff, buff_len); + + axis2_msg_ctx_set_doing_mtom (msg_ctx, env, AXIS2_TRUE); + ret_node = build_response2(env, data_handler_res); + } + else if(data_handler && axiom_data_handler_get_cached(data_handler, env)) + { + axiom_data_handler_t *data_handler_res = NULL; + axis2_char_t *file_name = NULL; + + file_name = axiom_data_handler_get_file_name(data_handler, env); + if(!file_name) + { + return NULL; + } + + data_handler_res = axiom_data_handler_create(env, file_name, NULL); + + axis2_msg_ctx_set_doing_mtom (msg_ctx, env, AXIS2_TRUE); + ret_node = build_response2(env, data_handler_res); + } + + else if (axiom_node_get_node_type(binary_node, env) == AXIOM_TEXT) /* attachment has come by value, as non-optimized binary */ + { + int plain_binary_len = 0; + int ret_len = 0; + axiom_text_t *bin_text = (axiom_text_t *) + axiom_node_get_data_element(binary_node, env); + axis2_byte_t *plain_binary = NULL; + axiom_data_handler_t *data_handler = NULL; + + axis2_char_t *base64text = + (axis2_char_t *) axiom_text_get_value(bin_text, + env); + printf("base64text = %s\n", base64text); + plain_binary_len = axutil_base64_decode_len(base64text); + plain_binary = AXIS2_MALLOC(env-> + allocator, + sizeof(unsigned char) * + plain_binary_len); + ret_len = + axutil_base64_decode_binary((unsigned char *) + plain_binary, + base64text); + data_handler = + axiom_data_handler_create(env, text_str, NULL); + axiom_data_handler_set_binary_data(data_handler, env, + plain_binary, + ret_len); + axiom_data_handler_write_to(data_handler, env); + ret_node = build_response1(env, base64text); + } + else /* nothing came */ + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_ATTACHMENT_MISSING, + AXIS2_FAILURE); + printf("Echo client ERROR: attachment is missing.\n"); + return NULL; + } + /* } */ + } + } + + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Echo client ERROR: invalid XML in request\n"); + return NULL; + } + + return ret_node; +} + +/* Builds the response content */ +axiom_node_t * +build_response1( + const axutil_env_t * env, + axis2_char_t * text) +{ + axiom_node_t *mtom_om_node = NULL; + axiom_element_t *mtom_om_ele = NULL; + axiom_node_t *om_node = NULL; + axiom_element_t *om_ele = NULL; + + + axiom_namespace_t *ns1 = NULL; + + ns1 = + axiom_namespace_create(env, "http://ws.apache.org/axis2/c/samples", + "ns1"); + + mtom_om_ele = + axiom_element_create(env, NULL, "response", ns1, &mtom_om_node); + + om_ele = axiom_element_create(env, mtom_om_node, "string", NULL, &om_node); + + axiom_element_set_text(mtom_om_ele, env, text, om_node); + + + return mtom_om_node; +} + + +axiom_node_t *build_response2( + const axutil_env_t *env, + axiom_data_handler_t *data_handler) +{ + axiom_node_t *mtom_om_node = NULL; + axiom_element_t *mtom_om_ele = NULL; + axiom_node_t *text_node = NULL; + axiom_namespace_t *ns1 = NULL; + + ns1 = + axiom_namespace_create(env, "http://ws.apache.org/axis2/c/samples", + "ns1"); + mtom_om_ele = + axiom_element_create(env, NULL, "response", ns1, &mtom_om_node); + + axiom_text_create_with_data_handler(env, mtom_om_node, data_handler, + &text_node); + + return mtom_om_node; +} + + + diff --git a/samples/server/mtom/mtom.h b/samples/server/mtom/mtom.h new file mode 100644 index 0000000..8ee6a39 --- /dev/null +++ b/samples/server/mtom/mtom.h @@ -0,0 +1,33 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef CALC_H +#define CALC_H + +#include +#include +#include +#include +#include +#include + +axiom_node_t *axis2_mtom_mtom( + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t *msg_ctx); + +#endif /* CALC_H */ diff --git a/samples/server/mtom/mtom.mk b/samples/server/mtom/mtom.mk new file mode 100644 index 0000000..a2d9b9b --- /dev/null +++ b/samples/server/mtom/mtom.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "_MBCS" *.C /I.\..\..\..\include /c + @link.exe /nologo *.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /DLL /OUT:mtom.dll + + + + + diff --git a/samples/server/mtom/mtom_skeleton.c b/samples/server/mtom/mtom_skeleton.c new file mode 100644 index 0000000..3ef10b6 --- /dev/null +++ b/samples/server/mtom/mtom_skeleton.c @@ -0,0 +1,166 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include "mtom.h" +#include + +int AXIS2_CALL mtom_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL mtom_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx); + +int AXIS2_CALL mtom_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +axiom_node_t *AXIS2_CALL mtom_on_fault( + axis2_svc_skeleton_t * svc_skeli, + const axutil_env_t * env, + axiom_node_t * node); + +static const axis2_svc_skeleton_ops_t mtom_svc_skeleton_ops_var = { + mtom_init, + mtom_invoke, + mtom_on_fault, + mtom_free +}; + +/*Create function */ +axis2_svc_skeleton_t * +axis2_mtom_create( + const axutil_env_t * env) +{ + axis2_svc_skeleton_t *svc_skeleton = NULL; + /* Allocate memory for the structs */ + svc_skeleton = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_skeleton_t)); + + svc_skeleton->ops = &mtom_svc_skeleton_ops_var; + + svc_skeleton->func_array = NULL; + + return svc_skeleton; +} + +/* Initialize the service */ +int AXIS2_CALL +mtom_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Any initialization stuff of mtom service should go here */ + return AXIS2_SUCCESS; +} + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL +mtom_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx) +{ + /* Invoke the business logic. + * Depending on the function name invoke the correct impl method. + * We have only mtom in this sample, hence invoke mtom method. + * To see how to deal with multiple impl methods, have a look at the + * math sample. + */ + return axis2_mtom_mtom(env, node, msg_ctx); +} + +/* On fault, handle the fault */ +axiom_node_t *AXIS2_CALL +mtom_on_fault( + axis2_svc_skeleton_t * svc_skeli, + const axutil_env_t * env, + axiom_node_t * node) +{ + /* Here we are just setting a simple error message inside an element + * called 'EchoServiceError' + */ + axiom_node_t *error_node = NULL; + axiom_node_t *text_node = NULL; + axiom_element_t *error_ele = NULL; + error_ele = axiom_element_create(env, node, "EchoServiceError", NULL, + &error_node); + axiom_element_set_text(error_ele, env, "Echo service failed ", text_node); + return error_node; +} + +/* Free the resources used */ +int AXIS2_CALL +mtom_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Free the function array */ + if (svc_skeleton->func_array) + { + axutil_array_list_free(svc_skeleton->func_array, env); + svc_skeleton->func_array = NULL; + } + + /* Free the service skeleton */ + if (svc_skeleton) + { + AXIS2_FREE(env->allocator, svc_skeleton); + svc_skeleton = NULL; + } + + return AXIS2_SUCCESS; +} + +/** + * Following block distinguish the exposed part of the dll. + */ +AXIS2_EXPORT int +axis2_get_instance( + axis2_svc_skeleton_t ** inst, + const axutil_env_t * env) +{ + *inst = axis2_mtom_create(env); + if (!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_svc_skeleton_t * inst, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + if (inst) + { + status = AXIS2_SVC_SKELETON_FREE(inst, env); + } + return status; +} diff --git a/samples/server/mtom/services.xml b/samples/server/mtom/services.xml new file mode 100644 index 0000000..1a1b1b2 --- /dev/null +++ b/samples/server/mtom/services.xml @@ -0,0 +1,12 @@ + + mtom + + + This is a testing service , to test the system is working or not + + + + http://ws.apache.org/axis2/c/samples/mtom + + + diff --git a/samples/server/mtom_callback/Makefile.am b/samples/server/mtom_callback/Makefile.am new file mode 100644 index 0000000..11a107e --- /dev/null +++ b/samples/server/mtom_callback/Makefile.am @@ -0,0 +1,9 @@ +prglibdir=$(prefix)/services/mtom_callback +prglib_LTLIBRARIES = libmtom_callback.la +prglib_DATA= services.xml +EXTRA_DIST = services.xml mtom_callback.mk mtom_callback.h +noinst_HEADERS = mtom_callback.h +SUBDIRS = +libmtom_callback_la_SOURCES = mtom_callback.c mtom_skeleton.c +libmtom_callback_la_LIBADD = +INCLUDES = @AXIS2INC@ diff --git a/samples/server/mtom_callback/mtom_callback.c b/samples/server/mtom_callback/mtom_callback.c new file mode 100644 index 0000000..7029124 --- /dev/null +++ b/samples/server/mtom_callback/mtom_callback.c @@ -0,0 +1,261 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "mtom_callback.h" +#include +#include +#include +#include +#include +#include +#include + +axiom_node_t *build_response( + const axutil_env_t *env, + axiom_data_handler_t *data_handler); + +axis2_status_t process_attachments( + axis2_msg_ctx_t *msg_ctx, + const axutil_env_t * env, + void *user_param, + axis2_char_t *callback_name); + +axiom_node_t* +axis2_mtom_callback_mtom( + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t *msg_ctx) +{ + axiom_node_t *attachment_node = NULL; + axiom_node_t *binary_node = NULL; + axiom_node_t *ret_node = NULL; + axis2_status_t status = AXIS2_FAILURE; + void *user_param = NULL; + axutil_param_t *callback_name_param = NULL; + axis2_char_t *callback_name = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + /* Expected request format is :- + * + + + + + */ + if (!node) /* 'mtomSample' node */ + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Echo client ERROR: input parameter NULL\n"); + return NULL; + } + + attachment_node = axiom_node_get_first_child(node, env); + if (!attachment_node) /* 'text' node */ + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Echo client ERROR: invalid XML in request\n"); + return NULL; + } + + /* This is the paramter specified in the services.xml + * or in axis2.xml + */ + + callback_name_param = axis2_msg_ctx_get_parameter (msg_ctx, env, + AXIS2_MTOM_CACHING_CALLBACK); + + if(callback_name_param) + { + callback_name = (axis2_char_t *) axutil_param_get_value (callback_name_param, env); + } + + /* This will process the attachment data in the stream */ + + status = process_attachments(msg_ctx, env, user_param, callback_name); + if(status == AXIS2_FAILURE) + { + return NULL; + } + + binary_node = axiom_node_get_first_child(attachment_node, env); + if (binary_node) + { + axiom_data_handler_t *data_handler = NULL; + axiom_text_t *bin_text = NULL; + axis2_char_t *attachment_id = NULL; + axiom_data_handler_t *data_handler_res = NULL; + axis2_char_t *location = NULL; + + bin_text = (axiom_text_t *)axiom_node_get_data_element(binary_node, env); + if(bin_text) + { + data_handler = axiom_text_get_data_handler(bin_text, env); + if(!data_handler) + { + return NULL; + } + } + + attachment_id = axiom_data_handler_get_mime_id(data_handler, env); + + if(!attachment_id) + { + return NULL; + } + + /* This is the case where the attachment resides in memory */ + + if (!axiom_data_handler_get_cached(data_handler, env)) + { + /* axis2_byte_t *input_buff = NULL; + axis2_byte_t *buff = NULL; + int buff_len = 0;*/ + + axiom_data_handler_set_file_name(data_handler, env, attachment_id); + axiom_data_handler_write_to(data_handler, env); + location = attachment_id; + } + + else + { + axiom_data_handler_type_t data_handler_type; + data_handler_type = axiom_data_handler_get_data_handler_type(data_handler, env); + + if(data_handler_type == AXIOM_DATA_HANDLER_TYPE_CALLBACK) + { + /* The service implementer should be aware of how to deal with the attachment + * Becasue it was stored using the callback he provided. */ + + /*axis2_char_t command[1000]; + + sprintf(command, "rm -f /opt/tmp/%s", attachment_id); + system(command);*/ + + /*location = attachment_id;*/ + /*location = "/home/manjula/axis2/mtom/resources/song.MP3"; */ + + location = "/opt/manjula-mtom.MPG"; + } + else if(data_handler_type == AXIOM_DATA_HANDLER_TYPE_FILE) + { + axis2_char_t *file_name = NULL; + + file_name = axiom_data_handler_get_file_name(data_handler, env); + if(file_name) + { + location = axutil_strdup(env, file_name); + } + } + } + + /* The samples sends back an attachment to the client. Hence we are creating the + * response data_handler as a type CALLBACK. So the sender callback should be + * specified either in the services.xml or in the axis2.xml. + */ + + data_handler_res = axiom_data_handler_create(env, NULL, NULL); + axiom_data_handler_set_data_handler_type(data_handler_res, env, AXIOM_DATA_HANDLER_TYPE_CALLBACK); + axiom_data_handler_set_user_param(data_handler_res, env, (void *)location); + + axis2_msg_ctx_set_doing_mtom (msg_ctx, env, AXIS2_TRUE); + ret_node = build_response(env, data_handler_res); + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Echo client ERROR: invalid XML in request\n"); + return NULL; + } + + return ret_node; +} + +/* Builds the response content */ + + +axiom_node_t *build_response( + const axutil_env_t *env, + axiom_data_handler_t *data_handler) +{ + axiom_node_t *mtom_om_node = NULL; + axiom_element_t *mtom_om_ele = NULL; + axiom_node_t *text_node = NULL; + axiom_namespace_t *ns1 = NULL; + + ns1 = + axiom_namespace_create(env, "http://ws.apache.org/axis2/c/samples", + "ns1"); + mtom_om_ele = + axiom_element_create(env, NULL, "response", ns1, &mtom_om_node); + + axiom_text_create_with_data_handler(env, mtom_om_node, data_handler, + &text_node); + + return mtom_om_node; +} + +axis2_status_t process_attachments( + axis2_msg_ctx_t *msg_ctx, + const axutil_env_t * env, + void *user_param, + axis2_char_t *callback_name) +{ + axis2_op_ctx_t *op_ctx = NULL; + axis2_msg_ctx_t *in_msg_ctx = NULL; + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_body_t *soap_body = NULL; + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + if(op_ctx) + { + in_msg_ctx = axis2_op_ctx_get_msg_ctx(op_ctx, env, AXIS2_WSDL_MESSAGE_LABEL_IN); + if(in_msg_ctx) + { + soap_envelope = axis2_msg_ctx_get_soap_envelope(in_msg_ctx, env); + if(soap_envelope) + { + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + if(soap_body) + { + return axiom_soap_body_process_attachments(soap_body, env, user_param, callback_name); + } + else + { + return AXIS2_FAILURE; + } + } + else + { + return AXIS2_FAILURE; + } + } + else + { + return AXIS2_FAILURE; + } + } + else + { + return AXIS2_FAILURE; + } +} + diff --git a/samples/server/mtom_callback/mtom_callback.h b/samples/server/mtom_callback/mtom_callback.h new file mode 100644 index 0000000..b7c0057 --- /dev/null +++ b/samples/server/mtom_callback/mtom_callback.h @@ -0,0 +1,33 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MTOM_CALLBACK_H +#define MTOM_CALLBACK_H + +#include +#include +#include +#include +#include +#include + +axiom_node_t *axis2_mtom_callback_mtom( + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t *msg_ctx); + +#endif /* MTOM_CALLBACK_H */ diff --git a/samples/server/mtom_callback/mtom_callback.mk b/samples/server/mtom_callback/mtom_callback.mk new file mode 100644 index 0000000..29cca6a --- /dev/null +++ b/samples/server/mtom_callback/mtom_callback.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "_MBCS" *.C /I.\..\..\..\include /c + @link.exe /nologo *.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /DLL /OUT:mtom_callback.dll + + + + + diff --git a/samples/server/mtom_callback/mtom_skeleton.c b/samples/server/mtom_callback/mtom_skeleton.c new file mode 100644 index 0000000..941521e --- /dev/null +++ b/samples/server/mtom_callback/mtom_skeleton.c @@ -0,0 +1,166 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include "mtom_callback.h" +#include + +int AXIS2_CALL mtom_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL mtom_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx); + +int AXIS2_CALL mtom_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +axiom_node_t *AXIS2_CALL mtom_on_fault( + axis2_svc_skeleton_t * svc_skeli, + const axutil_env_t * env, + axiom_node_t * node); + +static const axis2_svc_skeleton_ops_t mtom_svc_skeleton_ops_var = { + mtom_init, + mtom_invoke, + mtom_on_fault, + mtom_free +}; + +/*Create function */ +axis2_svc_skeleton_t * +axis2_mtom_create( + const axutil_env_t * env) +{ + axis2_svc_skeleton_t *svc_skeleton = NULL; + /* Allocate memory for the structs */ + svc_skeleton = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_skeleton_t)); + + svc_skeleton->ops = &mtom_svc_skeleton_ops_var; + + svc_skeleton->func_array = NULL; + + return svc_skeleton; +} + +/* Initialize the service */ +int AXIS2_CALL +mtom_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Any initialization stuff of mtom service should go here */ + return AXIS2_SUCCESS; +} + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL +mtom_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx) +{ + /* Invoke the business logic. + * Depending on the function name invoke the correct impl method. + * We have only mtom in this sample, hence invoke mtom method. + * To see how to deal with multiple impl methods, have a look at the + * math sample. + */ + return axis2_mtom_callback_mtom(env, node, msg_ctx); +} + +/* On fault, handle the fault */ +axiom_node_t *AXIS2_CALL +mtom_on_fault( + axis2_svc_skeleton_t * svc_skeli, + const axutil_env_t * env, + axiom_node_t * node) +{ + /* Here we are just setting a simple error message inside an element + * called 'EchoServiceError' + */ + axiom_node_t *error_node = NULL; + axiom_node_t *text_node = NULL; + axiom_element_t *error_ele = NULL; + error_ele = axiom_element_create(env, node, "EchoServiceError", NULL, + &error_node); + axiom_element_set_text(error_ele, env, "Echo service failed ", text_node); + return error_node; +} + +/* Free the resources used */ +int AXIS2_CALL +mtom_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Free the function array */ + if (svc_skeleton->func_array) + { + axutil_array_list_free(svc_skeleton->func_array, env); + svc_skeleton->func_array = NULL; + } + + /* Free the service skeleton */ + if (svc_skeleton) + { + AXIS2_FREE(env->allocator, svc_skeleton); + svc_skeleton = NULL; + } + + return AXIS2_SUCCESS; +} + +/** + * Following block distinguish the exposed part of the dll. + */ +AXIS2_EXPORT int +axis2_get_instance( + axis2_svc_skeleton_t ** inst, + const axutil_env_t * env) +{ + *inst = axis2_mtom_create(env); + if (!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_svc_skeleton_t * inst, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + if (inst) + { + status = AXIS2_SVC_SKELETON_FREE(inst, env); + } + return status; +} diff --git a/samples/server/mtom_callback/services.xml b/samples/server/mtom_callback/services.xml new file mode 100644 index 0000000..7219c8b --- /dev/null +++ b/samples/server/mtom_callback/services.xml @@ -0,0 +1,16 @@ + + mtom_callback + + + + + + + This is a testing service , to test the system is working or not + + + + http://ws.apache.org/axis2/c/samples/mtomCallbackSample + + + diff --git a/samples/server/notify/Makefile.am b/samples/server/notify/Makefile.am new file mode 100644 index 0000000..2e2bf2c --- /dev/null +++ b/samples/server/notify/Makefile.am @@ -0,0 +1,9 @@ +prglibdir=$(prefix)/services/notify +prglib_LTLIBRARIES = libnotify.la +prglib_DATA= services.xml +EXTRA_DIST = services.xml notify.mk notify.h +noinst_HEADERS = notify.h +SUBDIRS = +libnotify_la_SOURCES = notify.c notify_skeleton.c +libnotify_la_LIBADD = +INCLUDES = @AXIS2INC@ diff --git a/samples/server/notify/notify.c b/samples/server/notify/notify.c new file mode 100644 index 0000000..80dc5bd --- /dev/null +++ b/samples/server/notify/notify.c @@ -0,0 +1,77 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "notify.h" +#include + +void +axis2_notify_notify( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *text_node = NULL; + + if (!env || !env) + { + return; + } + + /* Expected request format is :- + Message 3 + */ + if (!node) /* 'notify' node */ + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Echo client ERROR: input parameter NULL"); + return; + } + + text_node = axiom_node_get_first_child(node, env); + if (!text_node) /* actual text to notify */ + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Echo client ERROR: invalid XML in request"); + return; + } + + if (axiom_node_get_node_type(text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(text_node, env); + if (text && axiom_text_get_value(text, env)) + { + axis2_char_t *text_str = + (axis2_char_t *) axiom_text_get_value(text, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Notification received : %s", text_str); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Echo client ERROR: invalid XML in request"); + return; + } + + return; +} + diff --git a/samples/server/notify/notify.h b/samples/server/notify/notify.h new file mode 100644 index 0000000..5a175a0 --- /dev/null +++ b/samples/server/notify/notify.h @@ -0,0 +1,32 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef CALC_H +#define CALC_H + +#include +#include +#include +#include +#include +#include + +void axis2_notify_notify( + const axutil_env_t * env, + axiom_node_t * node); + +#endif /* CALC_H */ diff --git a/samples/server/notify/notify.mk b/samples/server/notify/notify.mk new file mode 100644 index 0000000..9f3d533 --- /dev/null +++ b/samples/server/notify/notify.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "_MBCS" *.C /I.\..\..\..\include /c + @link.exe /nologo *.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /DLL /OUT:notify.dll + + + + + diff --git a/samples/server/notify/notify_skeleton.c b/samples/server/notify/notify_skeleton.c new file mode 100644 index 0000000..82acf49 --- /dev/null +++ b/samples/server/notify/notify_skeleton.c @@ -0,0 +1,167 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "axis2_svc_skeleton.h" +#include "notify.h" +#include + +int AXIS2_CALL notify_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL notify_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx); + +int AXIS2_CALL notify_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +axiom_node_t *AXIS2_CALL notify_on_fault( + axis2_svc_skeleton_t * svc_skeli, + const axutil_env_t * env, + axiom_node_t * node); + +static const axis2_svc_skeleton_ops_t notify_svc_skeleton_ops_var = { + notify_init, + notify_invoke, + notify_on_fault, + notify_free +}; + +/*Create function */ +axis2_svc_skeleton_t * +axis2_notify_create( + const axutil_env_t * env) +{ + axis2_svc_skeleton_t *svc_skeleton = NULL; + /* Allocate memory for the structs */ + svc_skeleton = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_skeleton_t)); + + svc_skeleton->ops = ¬ify_svc_skeleton_ops_var; + + svc_skeleton->func_array = NULL; + + return svc_skeleton; +} + +/* Initialize the service */ +int AXIS2_CALL +notify_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Any initialization stuff of notify service should go here */ + return AXIS2_SUCCESS; +} + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL +notify_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx) +{ + /* Invoke the business logic. + * Depending on the function name invoke the correct impl method. + * We have only notify in this sample, hence invoke notify method. + * To see how to deal with multiple impl methods, have a look at the + * math sample. + */ + axis2_notify_notify(env, node); + return NULL; +} + +/* On fault, handle the fault */ +axiom_node_t *AXIS2_CALL +notify_on_fault( + axis2_svc_skeleton_t * svc_skeli, + const axutil_env_t * env, + axiom_node_t * node) +{ + /* Here we are just setting a simple error message inside an element + * called 'EchoServiceError' + */ + axiom_node_t *error_node = NULL; + axiom_node_t *text_node = NULL; + axiom_element_t *error_ele = NULL; + error_ele = axiom_element_create(env, node, "NotifyServiceError", NULL, + &error_node); + axiom_element_set_text(error_ele, env, "Notify service failed ", text_node); + return error_node; +} + +/* Free the resources used */ +int AXIS2_CALL +notify_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Free the function array */ + if (svc_skeleton->func_array) + { + axutil_array_list_free(svc_skeleton->func_array, env); + svc_skeleton->func_array = NULL; + } + + /* Free the service skeleton */ + if (svc_skeleton) + { + AXIS2_FREE(env->allocator, svc_skeleton); + svc_skeleton = NULL; + } + + return AXIS2_SUCCESS; +} + +/** + * Following block distinguish the exposed part of the dll. + */ +AXIS2_EXPORT int +axis2_get_instance( + axis2_svc_skeleton_t ** inst, + const axutil_env_t * env) +{ + *inst = axis2_notify_create(env); + if (!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_svc_skeleton_t * inst, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + if (inst) + { + status = AXIS2_SVC_SKELETON_FREE(inst, env); + } + return status; +} diff --git a/samples/server/notify/services.xml b/samples/server/notify/services.xml new file mode 100644 index 0000000..ff2be47 --- /dev/null +++ b/samples/server/notify/services.xml @@ -0,0 +1,13 @@ + + notify + + + This is a testing service , to test one way service support + + + + + http://example.org/action/notify + + + diff --git a/samples/server/sg_math/Makefile.am b/samples/server/sg_math/Makefile.am new file mode 100644 index 0000000..82cc1ba --- /dev/null +++ b/samples/server/sg_math/Makefile.am @@ -0,0 +1,11 @@ +prglibdir=$(prefix)/services/sg_math +prglib_LTLIBRARIES = libadd.la libsub.la libmul.la libdiv.la +prglib_DATA=services.xml +EXTRA_DIST = services.xml sg_math.mk add.h div.h mul.h sub.h + +noinst_HEADERS = add.h sub.h mul.h div.h +libadd_la_SOURCES = add.c add_skeleton.c +libsub_la_SOURCES = sub.c sub_skeleton.c +libmul_la_SOURCES = mul.c mul_skeleton.c +libdiv_la_SOURCES = div.c div_skeleton.c +INCLUDES = @AXIS2INC@ diff --git a/samples/server/sg_math/add.c b/samples/server/sg_math/add.c new file mode 100644 index 0000000..91cf99a --- /dev/null +++ b/samples/server/sg_math/add.c @@ -0,0 +1,180 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "add.h" +#include +#include + +axiom_node_t * +axis2_add_add( + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx) +{ + axiom_node_t *param1_node = NULL; + axiom_node_t *param1_text_node = NULL; + axis2_char_t *param1_str = NULL; + long int param1 = 0; + axiom_node_t *param2_node = NULL; + axiom_node_t *param2_text_node = NULL; + axis2_char_t *param2_str = NULL; + long int param2 = 0; + + if (!node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Math client request ERROR: input parameter NULL\n"); + return NULL; + } + + param1_node = axiom_node_get_first_child(node, env); + if (!param1_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param1_text_node = axiom_node_get_first_child(param1_node, env); + if (!param1_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param1_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param1_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param1_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_node = axiom_node_get_next_sibling(param1_node, env); + if (!param2_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_text_node = axiom_node_get_first_child(param2_node, env); + if (!param2_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param2_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param2_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param2_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (param1_str && param2_str) + { + long int result = 0; + axis2_char_t result_str[255]; + + axiom_element_t *ele1 = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL; + axiom_namespace_t *ns1 = NULL; + axiom_text_t *text1 = NULL; + + axis2_svc_grp_ctx_t *svc_grp_ctx = NULL; + + param1 = strtol(param1_str, NULL, 10); + param2 = strtol(param2_str, NULL, 10); + result = param1 + param2; + sprintf(result_str, "%ld", result); + + ns1 = axiom_namespace_create(env, + "http://axis2/test/namespace1", "ns1"); + ele1 = axiom_element_create(env, NULL, "result", ns1, &node1); + text1 = axiom_text_create(env, node1, result_str, &node2); + + /* Put the result into service group context */ + svc_grp_ctx = axis2_msg_ctx_get_svc_grp_ctx(msg_ctx, env); + if (svc_grp_ctx) + { + axis2_ctx_t *ctx = NULL; + ctx = axis2_svc_grp_ctx_get_base(svc_grp_ctx, env); + if (ctx) + { + axutil_property_t *prop = NULL; + /* get value */ + prop = axis2_ctx_get_property(ctx, env, "ADD_RESULT"); + if (prop) + { + axis2_char_t *val = + (axis2_char_t *) axutil_property_get_value(prop, env); + printf("Previous result = %s\n", val); + } + /* set value */ + prop = axutil_property_create(env); + if (prop) + { + axutil_property_set_value(prop, env, + axutil_strdup(env, result_str)); + axis2_ctx_set_property(ctx, env, "ADD_RESULT", prop); + } + } + } + + return node1; + } + + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid parameters\n"); + return NULL; +} diff --git a/samples/server/sg_math/add.h b/samples/server/sg_math/add.h new file mode 100644 index 0000000..40ec76b --- /dev/null +++ b/samples/server/sg_math/add.h @@ -0,0 +1,33 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef ADD_H +#define ADD_H + +#include +#include +#include +#include +#include +#include + +axiom_node_t *axis2_add_add( + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx); + +#endif /* ADD_H */ diff --git a/samples/server/sg_math/add_skeleton.c b/samples/server/sg_math/add_skeleton.c new file mode 100644 index 0000000..7e7e13a --- /dev/null +++ b/samples/server/sg_math/add_skeleton.c @@ -0,0 +1,151 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "axis2_svc_skeleton.h" +#include "add.h" +#include +#include + +int AXIS2_CALL add_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL add_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx); + +int AXIS2_CALL add_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +static const axis2_svc_skeleton_ops_t add_svc_skeleton_ops_var = { + add_init, + add_invoke, + NULL, + add_free +}; + +AXIS2_EXTERN axis2_svc_skeleton_t *AXIS2_CALL +axis2_add_create( + const axutil_env_t * env) +{ + axis2_svc_skeleton_t *svc_skeleton = NULL; + svc_skeleton = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_skeleton_t)); + + svc_skeleton->ops = &add_svc_skeleton_ops_var; + + svc_skeleton->func_array = NULL; + + return svc_skeleton; +} + +int AXIS2_CALL +add_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Any initialization stuff of add goes here */ + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +add_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + if (svc_skeleton) + { + AXIS2_FREE(env->allocator, svc_skeleton); + svc_skeleton = NULL; + } + return AXIS2_SUCCESS; +} + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL +add_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx) +{ + /* Depending on the function name invoke the + * corresponding add method + */ + if (node) + { + if (axiom_node_get_node_type(node, env) == AXIOM_ELEMENT) + { + axiom_element_t *element = NULL; + element = + (axiom_element_t *) axiom_node_get_data_element(node, env); + if (element) + { + axis2_char_t *op_name = + axiom_element_get_localname(element, env); + if (op_name) + { + if (axutil_strcmp(op_name, "add") == 0) + return axis2_add_add(env, node, msg_ctx); + } + } + } + } + + printf("Math service ERROR: invalid OM parameters in request\n"); + + /** Note: return a SOAP fault here */ + return node; +} + +/** + * Following block distinguish the exposed part of the dll. + */ + +AXIS2_EXPORT int +axis2_get_instance( + struct axis2_svc_skeleton **inst, + const axutil_env_t * env) +{ + *inst = axis2_add_create(env); + if (!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_svc_skeleton_t * inst, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + if (inst) + { + status = AXIS2_SVC_SKELETON_FREE(inst, env); + } + return status; +} diff --git a/samples/server/sg_math/div.c b/samples/server/sg_math/div.c new file mode 100644 index 0000000..13ac9b5 --- /dev/null +++ b/samples/server/sg_math/div.c @@ -0,0 +1,150 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "div.h" +#include + +axiom_node_t * +axis2_div_div( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *param1_node = NULL; + axiom_node_t *param1_text_node = NULL; + axis2_char_t *param1_str = NULL; + long int param1 = 0; + axiom_node_t *param2_node = NULL; + axiom_node_t *param2_text_node = NULL; + axis2_char_t *param2_str = NULL; + long int param2 = 0; + + if (!node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Math client request ERROR: input parameter NULL\n"); + return NULL; + } + + param1_node = axiom_node_get_first_child(node, env); + if (!param1_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param1_text_node = axiom_node_get_first_child(param1_node, env); + if (!param1_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param1_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param1_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param1_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_node = axiom_node_get_next_sibling(param1_node, env); + if (!param2_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_text_node = axiom_node_get_first_child(param2_node, env); + if (!param2_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param2_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param2_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param2_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (param1_str && param2_str) + { + long int result = 0; + axis2_char_t result_str[255]; + + axiom_element_t *ele1 = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL; + axiom_namespace_t *ns1 = NULL; + axiom_text_t *text1 = NULL; + + param1 = strtol(param1_str, NULL, 10); + param2 = strtol(param2_str, NULL, 10); + if (param2 == 0) + return NULL; + result = param1 / param2; + sprintf(result_str, "%ld", result); + + ns1 = axiom_namespace_create(env, + "http://axis2/test/namespace1", "ns1"); + ele1 = axiom_element_create(env, NULL, "result", ns1, &node1); + text1 = axiom_text_create(env, node1, result_str, &node2); + + return node1; + } + + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid parameters\n"); + return NULL; +} diff --git a/samples/server/sg_math/div.h b/samples/server/sg_math/div.h new file mode 100644 index 0000000..3b03e42 --- /dev/null +++ b/samples/server/sg_math/div.h @@ -0,0 +1,32 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef DIV_H +#define DIV_H + +#include +#include +#include +#include +#include +#include + +axiom_node_t *axis2_div_div( + const axutil_env_t * env, + axiom_node_t * node); + +#endif /* DIV_H */ diff --git a/samples/server/sg_math/div_skeleton.c b/samples/server/sg_math/div_skeleton.c new file mode 100644 index 0000000..9007a58 --- /dev/null +++ b/samples/server/sg_math/div_skeleton.c @@ -0,0 +1,151 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "axis2_svc_skeleton.h" +#include "div.h" +#include +#include + +int AXIS2_CALL div_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL div_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx); + +int AXIS2_CALL div_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +static const axis2_svc_skeleton_ops_t div_svc_skeleton_ops_var = { + div_init, + div_invoke, + NULL, + div_free +}; + +AXIS2_EXTERN axis2_svc_skeleton_t *AXIS2_CALL +axis2_div_create( + const axutil_env_t * env) +{ + axis2_svc_skeleton_t *svc_skeleton = NULL; + svc_skeleton = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_skeleton_t)); + + svc_skeleton->ops = &div_svc_skeleton_ops_var; + + svc_skeleton->func_array = NULL; + + return svc_skeleton; +} + +int AXIS2_CALL +div_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Any initialization stuff of div goes here */ + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +div_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + if (svc_skeleton) + { + AXIS2_FREE(env->allocator, svc_skeleton); + svc_skeleton = NULL; + } + return AXIS2_SUCCESS; +} + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL +div_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx) +{ + /* Depending on the function name invoke the + * corresponding div method + */ + if (node) + { + if (axiom_node_get_node_type(node, env) == AXIOM_ELEMENT) + { + axiom_element_t *element = NULL; + element = + (axiom_element_t *) axiom_node_get_data_element(node, env); + if (element) + { + axis2_char_t *op_name = + axiom_element_get_localname(element, env); + if (op_name) + { + if (axutil_strcmp(op_name, "div") == 0) + return axis2_div_div(env, node); + } + } + } + } + + printf("Math service ERROR: invalid OM parameters in request\n"); + + /** Note: return a SOAP fault here */ + return node; +} + +/** + * Following block distinguish the exposed part of the dll. + */ + +AXIS2_EXPORT int +axis2_get_instance( + struct axis2_svc_skeleton **inst, + const axutil_env_t * env) +{ + *inst = axis2_div_create(env); + if (!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_svc_skeleton_t * inst, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + if (inst) + { + status = AXIS2_SVC_SKELETON_FREE(inst, env); + } + return status; +} diff --git a/samples/server/sg_math/mul.c b/samples/server/sg_math/mul.c new file mode 100644 index 0000000..b86a22b --- /dev/null +++ b/samples/server/sg_math/mul.c @@ -0,0 +1,148 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "mul.h" +#include + +axiom_node_t * +axis2_mul_mul( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *param1_node = NULL; + axiom_node_t *param1_text_node = NULL; + axis2_char_t *param1_str = NULL; + long int param1 = 0; + axiom_node_t *param2_node = NULL; + axiom_node_t *param2_text_node = NULL; + axis2_char_t *param2_str = NULL; + long int param2 = 0; + + if (!node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Math client request ERROR: input parameter NULL\n"); + return NULL; + } + + param1_node = axiom_node_get_first_child(node, env); + if (!param1_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param1_text_node = axiom_node_get_first_child(param1_node, env); + if (!param1_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param1_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param1_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param1_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_node = axiom_node_get_next_sibling(param1_node, env); + if (!param2_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_text_node = axiom_node_get_first_child(param2_node, env); + if (!param2_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param2_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param2_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param2_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (param1_str && param2_str) + { + long int result = 0; + axis2_char_t result_str[255]; + + axiom_element_t *ele1 = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL; + axiom_namespace_t *ns1 = NULL; + axiom_text_t *text1 = NULL; + + param1 = strtol(param1_str, NULL, 10); + param2 = strtol(param2_str, NULL, 10); + result = param1 * param2; + sprintf(result_str, "%ld", result); + + ns1 = axiom_namespace_create(env, + "http://axis2/test/namespace1", "ns1"); + ele1 = axiom_element_create(env, NULL, "result", ns1, &node1); + text1 = axiom_text_create(env, node1, result_str, &node2); + + return node1; + } + + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid parameters\n"); + return NULL; +} diff --git a/samples/server/sg_math/mul.h b/samples/server/sg_math/mul.h new file mode 100644 index 0000000..5e2d243 --- /dev/null +++ b/samples/server/sg_math/mul.h @@ -0,0 +1,32 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MUL_H +#define MUL_H + +#include +#include +#include +#include +#include +#include + +axiom_node_t *axis2_mul_mul( + const axutil_env_t * env, + axiom_node_t * node); + +#endif /* MUL_H */ diff --git a/samples/server/sg_math/mul_skeleton.c b/samples/server/sg_math/mul_skeleton.c new file mode 100644 index 0000000..1a58e3b --- /dev/null +++ b/samples/server/sg_math/mul_skeleton.c @@ -0,0 +1,151 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "axis2_svc_skeleton.h" +#include "mul.h" +#include +#include + +int AXIS2_CALL mul_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL mul_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx); + +int AXIS2_CALL mul_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +static const axis2_svc_skeleton_ops_t mul_svc_skeleton_ops_var = { + mul_init, + mul_invoke, + NULL, + mul_free +}; + +AXIS2_EXTERN axis2_svc_skeleton_t *AXIS2_CALL +axis2_mul_create( + const axutil_env_t * env) +{ + axis2_svc_skeleton_t *svc_skeleton = NULL; + svc_skeleton = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_skeleton_t)); + + svc_skeleton->ops = &mul_svc_skeleton_ops_var; + + svc_skeleton->func_array = NULL; + + return svc_skeleton; +} + +int AXIS2_CALL +mul_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Any initialization stuff of mul goes here */ + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +mul_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + if (svc_skeleton) + { + AXIS2_FREE(env->allocator, svc_skeleton); + svc_skeleton = NULL; + } + return AXIS2_SUCCESS; +} + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL +mul_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx) +{ + /* Depending on the function name invoke the + * corresponding mul method + */ + if (node) + { + if (axiom_node_get_node_type(node, env) == AXIOM_ELEMENT) + { + axiom_element_t *element = NULL; + element = + (axiom_element_t *) axiom_node_get_data_element(node, env); + if (element) + { + axis2_char_t *op_name = + axiom_element_get_localname(element, env); + if (op_name) + { + if (axutil_strcmp(op_name, "mul") == 0) + return axis2_mul_mul(env, node); + } + } + } + } + + printf("Math service ERROR: invalid OM parameters in request\n"); + + /** Note: return a SOAP fault here */ + return node; +} + +/** + * Following block distinguish the exposed part of the dll. + */ + +AXIS2_EXPORT int +axis2_get_instance( + struct axis2_svc_skeleton **inst, + const axutil_env_t * env) +{ + *inst = axis2_mul_create(env); + if (!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_svc_skeleton_t * inst, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + if (inst) + { + status = AXIS2_SVC_SKELETON_FREE(inst, env); + } + return status; +} diff --git a/samples/server/sg_math/services.xml b/samples/server/sg_math/services.xml new file mode 100644 index 0000000..524a7ee --- /dev/null +++ b/samples/server/sg_math/services.xml @@ -0,0 +1,30 @@ + + + add + + This is add service, that belongs to the math service group. + + + + + sub + + This is sub service, that belongs to the math service group. + + + + + mul + + This is mul service, that belongs to the math service group. + + + + + div + + This is div service, that belongs to the math service group. + + + + diff --git a/samples/server/sg_math/sg_math.mk b/samples/server/sg_math/sg_math.mk new file mode 100644 index 0000000..5ee16ed --- /dev/null +++ b/samples/server/sg_math/sg_math.mk @@ -0,0 +1,15 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "AXIS2_DECLARE_EXPORT" /D "_WINDOWS" /D "_MBCS" add.c add_skeleton.c /I.\..\..\..\include /c + @link.exe /nologo add.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /DLL /OUT:add.dll + + + @cl.exe /nologo /D "WIN32" /D "AXIS2_DECLARE_EXPORT" /D "_WINDOWS" /D "_MBCS" div.c div_skeleton.c /I.\..\..\..\include /c + @link.exe /nologo div.obj /LIBPATH:.\..\..\..\lib axiom.lib axis2_util.lib axis2_engine.lib axis2_parser.lib /DLL /OUT:div.dll + + + @cl.exe /nologo /D "WIN32" /D "AXIS2_DECLARE_EXPORT" /D "_WINDOWS" /D "_MBCS" sub.c sub_skeleton.c /I.\..\..\..\include /c + @link.exe /nologo sub.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /DLL /OUT:sub.dll + + + @cl.exe /nologo /D "WIN32" /D "AXIS2_DECLARE_EXPORT" /D "_WINDOWS" /D "_MBCS" mul.c mul_skeleton.c /I.\..\..\..\include /c + @link.exe /nologo mul.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /DLL /OUT:mul.dll diff --git a/samples/server/sg_math/sub.c b/samples/server/sg_math/sub.c new file mode 100644 index 0000000..2b6b4e9 --- /dev/null +++ b/samples/server/sg_math/sub.c @@ -0,0 +1,148 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "sub.h" +#include + +axiom_node_t * +axis2_sub_sub( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *param1_node = NULL; + axiom_node_t *param1_text_node = NULL; + axis2_char_t *param1_str = NULL; + long int param1 = 0; + axiom_node_t *param2_node = NULL; + axiom_node_t *param2_text_node = NULL; + axis2_char_t *param2_str = NULL; + long int param2 = 0; + + if (!node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Math client request ERROR: input parameter NULL\n"); + return NULL; + } + + param1_node = axiom_node_get_first_child(node, env); + if (!param1_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param1_text_node = axiom_node_get_first_child(param1_node, env); + if (!param1_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param1_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param1_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param1_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_node = axiom_node_get_next_sibling(param1_node, env); + if (!param2_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + param2_text_node = axiom_node_get_first_child(param2_node, env); + if (!param2_text_node) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (axiom_node_get_node_type(param2_text_node, env) == AXIOM_TEXT) + { + axiom_text_t *text = + (axiom_text_t *) axiom_node_get_data_element(param2_text_node, env); + if (text && axiom_text_get_value(text, env)) + { + param2_str = (axis2_char_t *) axiom_text_get_value(text, env); + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid XML in request\n"); + return NULL; + } + + if (param1_str && param2_str) + { + long int result = 0; + axis2_char_t result_str[255]; + + axiom_element_t *ele1 = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL; + axiom_namespace_t *ns1 = NULL; + axiom_text_t *text1 = NULL; + + param1 = strtol(param1_str, NULL, 10); + param2 = strtol(param2_str, NULL, 10); + result = param1 - param2; + sprintf(result_str, "%ld", result); + + ns1 = axiom_namespace_create(env, + "http://axis2/test/namespace1", "ns1"); + ele1 = axiom_element_create(env, NULL, "result", ns1, &node1); + text1 = axiom_text_create(env, node1, result_str, &node2); + + return node1; + } + + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid parameters\n"); + return NULL; +} diff --git a/samples/server/sg_math/sub.h b/samples/server/sg_math/sub.h new file mode 100644 index 0000000..9083c57 --- /dev/null +++ b/samples/server/sg_math/sub.h @@ -0,0 +1,32 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef SUB_H +#define SUB_H + +#include +#include +#include +#include +#include +#include + +axiom_node_t *axis2_sub_sub( + const axutil_env_t * env, + axiom_node_t * node); + +#endif /* SUB_H */ diff --git a/samples/server/sg_math/sub_skeleton.c b/samples/server/sg_math/sub_skeleton.c new file mode 100644 index 0000000..aedeac7 --- /dev/null +++ b/samples/server/sg_math/sub_skeleton.c @@ -0,0 +1,151 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "axis2_svc_skeleton.h" +#include "sub.h" +#include +#include + +int AXIS2_CALL sub_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL sub_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx); + +int AXIS2_CALL sub_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +static const axis2_svc_skeleton_ops_t sub_svc_skeleton_ops_var = { + sub_init, + sub_invoke, + NULL, + sub_free +}; + +AXIS2_EXTERN axis2_svc_skeleton_t *AXIS2_CALL +axis2_sub_create( + const axutil_env_t * env) +{ + axis2_svc_skeleton_t *svc_skeleton = NULL; + svc_skeleton = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_skeleton_t)); + + svc_skeleton->ops = &sub_svc_skeleton_ops_var; + + svc_skeleton->func_array = NULL; + + return svc_skeleton; +} + +int AXIS2_CALL +sub_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Any initialization stuff of sub goes here */ + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +sub_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + if (svc_skeleton) + { + AXIS2_FREE(env->allocator, svc_skeleton); + svc_skeleton = NULL; + } + return AXIS2_SUCCESS; +} + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL +sub_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx) +{ + /* Depending on the function name invoke the + * corresponding sub method + */ + if (node) + { + if (axiom_node_get_node_type(node, env) == AXIOM_ELEMENT) + { + axiom_element_t *element = NULL; + element = + (axiom_element_t *) axiom_node_get_data_element(node, env); + if (element) + { + axis2_char_t *op_name = + axiom_element_get_localname(element, env); + if (op_name) + { + if (axutil_strcmp(op_name, "sub") == 0) + return axis2_sub_sub(env, node); + } + } + } + } + + printf("Math service ERROR: invalid OM parameters in request\n"); + + /** Note: return a SOAP fault here */ + return node; +} + +/** + * Following block distinguish the exposed part of the dll. + */ + +AXIS2_EXPORT int +axis2_get_instance( + struct axis2_svc_skeleton **inst, + const axutil_env_t * env) +{ + *inst = axis2_sub_create(env); + if (!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_svc_skeleton_t * inst, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + if (inst) + { + status = AXIS2_SVC_SKELETON_FREE(inst, env); + } + return status; +} diff --git a/samples/server/version/Makefile.am b/samples/server/version/Makefile.am new file mode 100644 index 0000000..9e6f94a --- /dev/null +++ b/samples/server/version/Makefile.am @@ -0,0 +1,10 @@ +prglibdir=$(prefix)/services/version +prglib_LTLIBRARIES = libversion.la +prglib_DATA=services.xml +noinst_HEADERS = version.h +SUBDIRS = +libversion_la_SOURCES = version.c version_skel.c +libversion_la_LIBADD = +INCLUDES = @AXIS2INC@ +EXTRA_DIST = services.xml version.h + diff --git a/samples/server/version/services.xml b/samples/server/version/services.xml new file mode 100644 index 0000000..37bdc6b --- /dev/null +++ b/samples/server/version/services.xml @@ -0,0 +1,9 @@ + + version + + This is a testing service, named 'version' to test multiple operations in the same service + + + + + diff --git a/samples/server/version/version.c b/samples/server/version/version.c new file mode 100644 index 0000000..81182eb --- /dev/null +++ b/samples/server/version/version.c @@ -0,0 +1,59 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "version.h" +#include + +axiom_node_t * +axis2_version_get_version( + const axutil_env_t * env, + axiom_node_t * node) +{ + if (!node) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + AXIS2_FAILURE); + printf("Math client request ERROR: input parameter NULL\n"); + return NULL; + } + else + { + axis2_char_t result_str[255]; + + axiom_element_t *ele1 = NULL; + axiom_node_t *node1 = NULL, + *node2 = NULL; + axiom_namespace_t *ns1 = NULL; + axiom_text_t *text1 = NULL; + + sprintf(result_str, "%s", "Version 1.6"); + + ns1 = axiom_namespace_create(env, + "urn:aewebservices71", "ns1"); + ele1 = axiom_element_create(env, NULL, "result", ns1, &node1); + text1 = axiom_text_create(env, node1, result_str, &node2); + + return node1; + } + + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST, + AXIS2_FAILURE); + printf("Math service ERROR: invalid parameters\n"); + return NULL; +} + diff --git a/samples/server/version/version.h b/samples/server/version/version.h new file mode 100644 index 0000000..56fc54e --- /dev/null +++ b/samples/server/version/version.h @@ -0,0 +1,32 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MATH_H +#define MATH_H + +#include +#include +#include +#include +#include +#include + +axiom_node_t *axis2_version_get_version( + const axutil_env_t * env, + axiom_node_t * node); + +#endif /* MATH_H */ diff --git a/samples/server/version/version_skel.c b/samples/server/version/version_skel.c new file mode 100644 index 0000000..961c3d8 --- /dev/null +++ b/samples/server/version/version_skel.c @@ -0,0 +1,151 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "axis2_svc_skeleton.h" +#include "version.h" +#include +#include + +int AXIS2_CALL version_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL version_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx); + +int AXIS2_CALL version_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +static const axis2_svc_skeleton_ops_t version_svc_skeleton_ops_var = { + version_init, + version_invoke, + NULL, + version_free +}; + +AXIS2_EXTERN axis2_svc_skeleton_t *AXIS2_CALL +version_create( + const axutil_env_t * env) +{ + axis2_svc_skeleton_t *svc_skeleton = NULL; + svc_skeleton = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_skeleton_t)); + + svc_skeleton->ops = &version_svc_skeleton_ops_var; + + svc_skeleton->func_array = NULL; + + return svc_skeleton; +} + +int AXIS2_CALL +version_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + /* Any initialization stuff of version goes here */ + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +version_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + if (svc_skeleton) + { + AXIS2_FREE(env->allocator, svc_skeleton); + svc_skeleton = NULL; + } + return AXIS2_SUCCESS; +} + +/* + * This method invokes the right service method + */ +axiom_node_t *AXIS2_CALL +version_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx) +{ + /* Depending on the function name invoke the + * corresponding version method + */ + if (node) + { + if (axiom_node_get_node_type(node, env) == AXIOM_ELEMENT) + { + axiom_element_t *element = NULL; + element = + (axiom_element_t *) axiom_node_get_data_element(node, env); + if (element) + { + axis2_char_t *op_name = + axiom_element_get_localname(element, env); + if (op_name) + { + if (axutil_strcmp(op_name, "GetVersion") == 0) + return axis2_version_get_version(env, node); + } + } + } + } + + printf("Math service ERROR: invalid OM parameters in request\n"); + + /** Note: return a SOAP fault here */ + return node; +} + +/** + * Following block distinguish the exposed part of the dll. + */ + +AXIS2_EXPORT int +axis2_get_instance( + struct axis2_svc_skeleton **inst, + const axutil_env_t * env) +{ + *inst = version_create(env); + if (!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_svc_skeleton_t * inst, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + if (inst) + { + status = AXIS2_SVC_SKELETON_FREE(inst, env); + } + return status; +} diff --git a/samples/user_guide/Makefile.am b/samples/user_guide/Makefile.am new file mode 100644 index 0000000..fc8e098 --- /dev/null +++ b/samples/user_guide/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = clients diff --git a/samples/user_guide/clients/Makefile.am b/samples/user_guide/clients/Makefile.am new file mode 100644 index 0000000..91da51d --- /dev/null +++ b/samples/user_guide/clients/Makefile.am @@ -0,0 +1,37 @@ +prgbindir=$(prefix)/samples/bin +prgbin_PROGRAMS = echo_blocking echo_non_blocking echo_blocking_addr echo_rest echo_blocking_dual echo_non_blocking_dual echo_blocking_soap11 echo_blocking_auth + + +echo_blocking_SOURCES = echo_blocking.c echo_util.c +echo_non_blocking_SOURCES = echo_non_blocking.c echo_util.c +echo_blocking_addr_SOURCES = echo_blocking_addr.c echo_util.c +echo_rest_SOURCES = echo_util.c echo_rest.c +echo_blocking_dual_SOURCES = echo_blocking_dual.c echo_util.c +echo_non_blocking_dual_SOURCES = echo_non_blocking_dual.c echo_util.c +echo_blocking_soap11_SOURCES = echo_blocking_soap11.c echo_util.c +echo_blocking_auth_SOURCES = echo_blocking_auth.c echo_util.c + +LINK_FLAGS = $(LDFLAGS) \ + -L$(AXIS2C_HOME)/lib \ + -laxutil \ + -laxis2_axiom \ + -laxis2_engine \ + -laxis2_parser \ + -lpthread \ + -laxis2_http_sender \ + -laxis2_http_receiver \ + $(GUTHTHILA_LIBS) + +echo_blocking_LDADD = $(LINK_FLAGS) +echo_non_blocking_LDADD = $(LINK_FLAGS) +echo_blocking_addr_LDADD = $(LINK_FLAGS) +echo_rest_LDADD = $(LINK_FLAGS) +echo_blocking_dual_LDADD = $(LINK_FLAGS) +echo_non_blocking_dual_LDADD = $(LINK_FLAGS) +echo_blocking_soap11_LDADD = $(LINK_FLAGS) +echo_blocking_auth_LDADD = $(LINK_FLAGS) + +INCLUDES = @AXIS2INC@ + +EXTRA_DIST=echo_util.h echo_blocking_addr.mk echo_blocking.mk echo_non_blocking_dual.mk echo_rest.mk echo_blocking_dual.mk echo_blocking_soap11.mk echo_non_blocking.mk echo_blocking_auth.mk + diff --git a/samples/user_guide/clients/echo_blocking.c b/samples/user_guide/clients/echo_blocking.c new file mode 100644 index 0000000..4657814 --- /dev/null +++ b/samples/user_guide/clients/echo_blocking.c @@ -0,0 +1,126 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" +#include +#include +#include + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + + /* Set up the environment */ + env = axutil_env_create_all("echo_blocking.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "http://localhost:9090/axis2/services/echo"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf("Usage : %s [endpoint_url]\n", argv[0]); + printf("use -h for help\n"); + return 0; + } + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc(env); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + { + printf("\nReceived OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + } + printf("\necho client invoke SUCCESSFUL!\n"); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} diff --git a/samples/user_guide/clients/echo_blocking.mk b/samples/user_guide/clients/echo_blocking.mk new file mode 100644 index 0000000..362a458 --- /dev/null +++ b/samples/user_guide/clients/echo_blocking.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" echo_blocking.C echo_util.c /I.\..\..\..\include /c + @link.exe /nologo echo_blocking.obj echo_util.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:echo_blocking.exe + + + + + diff --git a/samples/user_guide/clients/echo_blocking_addr.c b/samples/user_guide/clients/echo_blocking_addr.c new file mode 100644 index 0000000..20cc6eb --- /dev/null +++ b/samples/user_guide/clients/echo_blocking_addr.c @@ -0,0 +1,132 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" +#include +#include +#include + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + + /* Set up the environment */ + env = + axutil_env_create_all("echo_blocking_addr.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "http://localhost:9090/axis2/services/echo"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf("Usage : %s [endpoint_url]\n", argv[0]); + printf("use -h for help\n"); + return 0; + } + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_action(options, env, + "http://ws.apache.org/axis2/c/samples/echoString"); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Engage addressing module */ + axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc(env); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + { + printf("\nReceived OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + } + printf("\necho client invoke SUCCESSFUL!\n"); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} diff --git a/samples/user_guide/clients/echo_blocking_addr.mk b/samples/user_guide/clients/echo_blocking_addr.mk new file mode 100644 index 0000000..88b519f --- /dev/null +++ b/samples/user_guide/clients/echo_blocking_addr.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" echo_blocking_addr.C echo_util.c /I.\..\..\..\include /c + @link.exe /nologo echo_blocking_addr.obj echo_util.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:echo_blocking_addr.exe + + + + + diff --git a/samples/user_guide/clients/echo_blocking_auth.c b/samples/user_guide/clients/echo_blocking_auth.c new file mode 100644 index 0000000..375dbd0 --- /dev/null +++ b/samples/user_guide/clients/echo_blocking_auth.c @@ -0,0 +1,295 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +axiom_node_t *build_om_payload_for_echo_svc( + const axutil_env_t * env); + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + const axis2_char_t *un = NULL; + const axis2_char_t *pw = NULL; + const axis2_char_t *unp = NULL; + const axis2_char_t *pwp = NULL; + axis2_bool_t http_auth_required = AXIS2_FALSE; + axis2_bool_t proxy_auth_required = AXIS2_FALSE; + + /* Set up the environment */ + env = axutil_env_create_all("echo_blocking_auth.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "http://localhost:9090/axis2/services/echo"; + if (argc > 1) + { + if (axutil_strcmp(argv[1], "-h") == 0) + { + printf("Usage : %s [endpoint_url] (-a [username] [password]) (-p [username] [password])\n", + argv[0]); + printf("use -a option for HTTP Authentication\n"); + printf("use -p option for Proxy Authentication\n"); + printf("use -h for help\n"); + return 0; + } + else if (axutil_strcmp(argv[1], "-a") == 0) + { + if (argc > 3) + { + un = argv[2]; + pw = argv[3]; + } + } + else if (axutil_strcmp(argv[1], "-p") == 0) + { + if (argc > 3) + { + unp = argv[2]; + pwp = argv[3]; + } + } + else + { + address = argv[1]; + } + + if (argc > 4) + { + if (axutil_strcmp(argv[2], "-a") == 0) + { + un = argv[3]; + pw = argv[4]; + } + else if (axutil_strcmp(argv[2], "-p") == 0) + { + unp = argv[3]; + pwp = argv[4]; + } + } + if (argc > 6) + { + if (axutil_strcmp(argv[4], "-a") == 0) + { + un = argv[5]; + pw = argv[6]; + if (argc > 7) + { + address = argv[7]; + } + } + else if (axutil_strcmp(argv[4], "-p") == 0) + { + unp = argv[5]; + pwp = argv[6]; + if (argc > 7) + { + address = argv[7]; + } + } + } + if (argc > 7) + { + if (axutil_strcmp(argv[5], "-a") == 0) + { + un = argv[6]; + pw = argv[7]; + if (!address) + { + address = argv[4]; + } + } + else if (axutil_strcmp(argv[5], "-p") == 0) + { + unp = argv[6]; + pwp = argv[7]; + if (!address) + { + address = argv[4]; + } + } + } + } + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_action(options, env, + "http://ws.apache.org/axis2/c/samples/echoString"); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Enabling REST for HTTP HEAD Request */ + axis2_options_set_enable_rest(options, env, AXIS2_TRUE); + + /* Setting Request as HTTP HEAD Request */ + axis2_options_set_http_method(options, env, AXIS2_HTTP_HEAD); + + /* Sending dummy authentication info */ + if (un && pw) + { + axis2_options_set_http_auth_info(options, env, "", "", NULL); + } + if (unp && pwp) + { + axis2_options_set_proxy_auth_info(options, env, "", "", NULL); + } + + /* Force authentication tests */ + axis2_options_set_test_http_auth(options, env, AXIS2_TRUE); + axis2_options_set_test_proxy_auth(options, env, AXIS2_TRUE); + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* un-comment line below to setup proxy from code*/ + /*axis2_svc_client_set_proxy_with_auth(svc_client, env, "127.0.0.1", "3128", NULL, NULL);*/ + + /* Sending robust authentication test message */ + axis2_svc_client_send_robust(svc_client, env, NULL); + + /* Checking whether authentication is required */ + if (axis2_svc_client_get_proxy_auth_required(svc_client, env)) + { + proxy_auth_required = AXIS2_TRUE; + + /* Set proxy-auth information */ + if (unp && pwp) + { + axis2_options_set_proxy_auth_info(options, env, unp, pwp, + axis2_svc_client_get_auth_type(svc_client, env)); + /* un-comment line below to setup proxy from code*/ + /*axis2_svc_client_set_proxy_with_auth(svc_client, env, "127.0.0.1", "3128", unp, pwp);*/ + } + + /* Sending robust authentication test message */ + axis2_svc_client_send_robust(svc_client, env, NULL); + } + if (axis2_svc_client_get_http_auth_required(svc_client, env)) + { + http_auth_required = AXIS2_TRUE; + /* Set http-auth information */ + if (un && pw) + { + axis2_options_set_http_auth_info(options, env, un, pw, + axis2_svc_client_get_auth_type(svc_client, env)); + } + } + + /* Cancel authentication tests */ + axis2_options_set_test_http_auth(options, env, AXIS2_FALSE); + axis2_options_set_test_proxy_auth(options, env, AXIS2_FALSE); + + /* Print whether authentication was required */ + if (http_auth_required) + { + printf("\nHTTP Authentication info required.\n"); + } + if (proxy_auth_required) + { + printf("\nProxy Authentication info required.\n"); + } + + /* Disabling REST for SOAP Request */ + axis2_options_set_enable_rest(options, env, AXIS2_FALSE); + + /* Setting Request as HTTP POST Request */ + axis2_options_set_http_method(options, env, AXIS2_HTTP_POST); + + /* Engage addressing module */ + axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc(env); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + printf("\nReceived OM : %s\n", om_str); + printf("\necho client invoke SUCCESSFUL!\n"); + + AXIS2_FREE(env->allocator, om_str); + ret_node = NULL; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} diff --git a/samples/user_guide/clients/echo_blocking_auth.mk b/samples/user_guide/clients/echo_blocking_auth.mk new file mode 100644 index 0000000..b6c74fe --- /dev/null +++ b/samples/user_guide/clients/echo_blocking_auth.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" echo_blocking_auth.C echo_util.c /I.\..\..\..\include /c + @link.exe /nologo echo_blocking_auth.obj echo_util.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:echo_blocking_auth.exe + + + + + diff --git a/samples/user_guide/clients/echo_blocking_dual.c b/samples/user_guide/clients/echo_blocking_dual.c new file mode 100644 index 0000000..9d25637 --- /dev/null +++ b/samples/user_guide/clients/echo_blocking_dual.c @@ -0,0 +1,140 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" +#include +#include +#include + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_endpoint_ref_t *reply_to = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + + /* Set up the environment */ + env = + axutil_env_create_all("echo_blocking_dual.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "http://localhost:9090/axis2/services/echo"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf("Usage : %s [endpoint_url]\n", argv[0]); + printf("use -h for help\n"); + return 0; + } + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_use_separate_listener(options, env, AXIS2_TRUE); + + /* Seperate listner needs addressing, hence addressing stuff in options */ + axis2_options_set_action(options, env, + "http://ws.apache.org/axis2/c/samples/echoString"); + reply_to = + axis2_endpoint_ref_create(env, + "http://localhost:6060/axis2/services/__ANONYMOUS_SERVICE__/__OPERATION_OUT_IN__"); + axis2_options_set_reply_to(options, env, reply_to); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc(env); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + { + printf("\nReceived OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + } + printf("\necho client invoke SUCCESSFUL!\n"); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo client invoke FAILED!\n"); + } + + if (svc_client) + { + AXIS2_SLEEP(1); + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} diff --git a/samples/user_guide/clients/echo_blocking_dual.mk b/samples/user_guide/clients/echo_blocking_dual.mk new file mode 100644 index 0000000..89fe2d7 --- /dev/null +++ b/samples/user_guide/clients/echo_blocking_dual.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" echo_blocking_dual.C echo_util.c /I.\..\..\..\include /c + @link.exe /nologo echo_blocking_dual.obj echo_util.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:echo_blocking_dual.exe + + + + + diff --git a/samples/user_guide/clients/echo_blocking_soap11.c b/samples/user_guide/clients/echo_blocking_soap11.c new file mode 100644 index 0000000..104dc55 --- /dev/null +++ b/samples/user_guide/clients/echo_blocking_soap11.c @@ -0,0 +1,135 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" +#include +#include +#include + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + axutil_string_t *soap_action = NULL; + + /* Set up the environment */ + env = + axutil_env_create_all("echo_blocking_soap11.log", + AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "http://localhost:9090/axis2/services/echo"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf("Usage : %s [endpoint_url]\n", argv[0]); + printf("use -h for help\n"); + return 0; + } + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_soap_version(options, env, AXIOM_SOAP11); + soap_action = + axutil_string_create(env, + "http://ws.apache.org/axis2/c/samples/echo/soap_action"); + axis2_options_set_soap_action(options, env, soap_action); + axutil_string_free(soap_action, env); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc(env); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + { + printf("\nReceived OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + } + printf("\necho client invoke SUCCESSFUL!\n"); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} diff --git a/samples/user_guide/clients/echo_blocking_soap11.mk b/samples/user_guide/clients/echo_blocking_soap11.mk new file mode 100644 index 0000000..eebd7e2 --- /dev/null +++ b/samples/user_guide/clients/echo_blocking_soap11.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" echo_blocking_soap11.C echo_util.c /I.\..\..\..\include /c + @link.exe /nologo echo_blocking_soap11.obj echo_util.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:echo_blocking_soap11.exe + + + + + diff --git a/samples/user_guide/clients/echo_non_blocking.c b/samples/user_guide/clients/echo_non_blocking.c new file mode 100644 index 0000000..22cdbb8 --- /dev/null +++ b/samples/user_guide/clients/echo_non_blocking.c @@ -0,0 +1,211 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" +#include +#include +#include + +/* my on_complete callback function */ +axis2_status_t AXIS2_CALL echo_process_response_envelope( + struct axis2_callback * callback, + const axutil_env_t * env); + +/* my on_error callback function */ +axis2_status_t AXIS2_CALL echo_callback_on_error( + struct axis2_callback *callback, + const axutil_env_t * env, + int exception); + +/* to check whether the callback is completed */ + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axis2_callback_t *callback = NULL; + int count = 0; + + /* Set up the environment */ + env = axutil_env_create_all("echo_non_blocking.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "http://localhost:9090/axis2/services/echo"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf("Usage : %s [endpoint_url]\n", argv[0]); + printf("use -h for help\n"); + return 0; + } + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc(env); + + /* Create the callback object with default on_complete and on_error + callback functions */ + callback = axis2_callback_create(env); + + /* Set our on_complete fucntion pointer to the callback object */ + /*axis2_callback_set_on_complete(callback, echo_callback_on_complete);*/ + + /* Set our on_error function pointer to the callback object */ + axis2_callback_set_on_error(callback, echo_callback_on_error); + + /* Send request */ + axis2_svc_client_send_receive_non_blocking(svc_client, env, + payload, callback); + + /** Wait till callback is complete. Simply keep the parent thread running + until our on_complete or on_error is invoked */ + + while(!axis2_callback_get_complete(callback, env)) + { + AXIS2_SLEEP(1); + if(count < 30) + { + count++; + } + else + { + printf("\necho client invoke FAILED. Counter timed out.\n"); + } + + } + echo_process_response_envelope(callback, env); + if(svc_client) + axis2_svc_client_free(svc_client, env); + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} + +axis2_status_t AXIS2_CALL +echo_process_response_envelope( + struct axis2_callback * callback, + const axutil_env_t * env) +{ + + /** SOAP response has arrived here; get the soap envelope + from the callback object and do whatever you want to do with it */ + + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_node_t *ret_node = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + soap_envelope = axis2_callback_get_envelope(callback, env); + + if (!soap_envelope) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo stub invoke FAILED!\n"); + status = AXIS2_FAILURE; + } + else + { + ret_node = axiom_soap_envelope_get_base_node(soap_envelope, env); + + if (!ret_node) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo stub invoke FAILED!\n"); + status = AXIS2_FAILURE; + } + else + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + { + printf("\nReceived OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + } + printf("\necho client invoke SUCCESSFUL!\n"); + } + } + + return status; +} + +axis2_status_t AXIS2_CALL +echo_callback_on_error( + struct axis2_callback * callback, + const axutil_env_t * env, + int exception) +{ + + /** take necessary action on error */ + printf("\necho client invike FAILED. Error code:%d ::%s", exception, + AXIS2_ERROR_GET_MESSAGE(env->error)); + + return AXIS2_SUCCESS; +} diff --git a/samples/user_guide/clients/echo_non_blocking.mk b/samples/user_guide/clients/echo_non_blocking.mk new file mode 100644 index 0000000..efb6550 --- /dev/null +++ b/samples/user_guide/clients/echo_non_blocking.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" echo_non_blocking.C echo_util.c /I.\..\..\..\include /c + @link.exe /nologo echo_non_blocking.obj echo_util.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:echo_non_blocking.exe + + + + + diff --git a/samples/user_guide/clients/echo_non_blocking_dual.c b/samples/user_guide/clients/echo_non_blocking_dual.c new file mode 100644 index 0000000..60d20ae --- /dev/null +++ b/samples/user_guide/clients/echo_non_blocking_dual.c @@ -0,0 +1,233 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" +#include +#include +#include + +#define MAX_COUNT 3000000 + +/* my on_complete callback function */ +axis2_status_t AXIS2_CALL echo_callback_on_complete( + struct axis2_callback * callback, + const axutil_env_t * env); + +/* my on_error callback function */ +axis2_status_t AXIS2_CALL echo_callback_on_error( + struct axis2_callback *callback, + const axutil_env_t * env, + int exception); + +/* to check whether the callback is completed */ +int isComplete = 0; + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_endpoint_ref_t *reply_to = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axis2_callback_t *callback = NULL; + int count = 0; + + /* Set up the environment */ + env = + axutil_env_create_all("echo_non_blocking_dual.log", + AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "http://localhost:9090/axis2/services/echo"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf("Usage : %s [endpoint_url]\n", argv[0]); + printf("use -h for help\n"); + return 0; + } + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_options_set_use_separate_listener(options, env, AXIS2_TRUE); + + /* Seperate listner needs addressing, hence addressing stuff in options */ + axis2_options_set_action(options, env, + "http://ws.apache.org/axis2/c/samples/echoString"); + reply_to = + axis2_endpoint_ref_create(env, + "http://localhost:6060/axis2/services/__ANONYMOUS_SERVICE__/__OPERATION_OUT_IN__"); + axis2_options_set_reply_to(options, env, reply_to); + + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING); + /*axis2_svc_client_engage_module(svc_client, env, "sandesha2"); */ + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc(env); + + /* Create the callback object with default on_complete and on_error + callback functions */ + callback = axis2_callback_create(env); + + /* Set our on_complete fucntion pointer to the callback object */ + axis2_callback_set_on_complete(callback, echo_callback_on_complete); + + /* Set our on_error function pointer to the callback object */ + axis2_callback_set_on_error(callback, echo_callback_on_error); + + /* Send request */ + axis2_svc_client_send_receive_non_blocking(svc_client, env, + payload, callback); + + /** Wait till callback is complete. Simply keep the parent thread running + until our on_complete or on_error is invoked */ + while (count < MAX_COUNT) + { + if (isComplete) + { + /* We are done with the callback */ + break; + } + +/* AXIS2_SLEEP(1); */ + count++; + } + + if (!(count < MAX_COUNT)) + { + printf("\necho client invoke FAILED. Counter timed out.\n"); + } + + if (svc_client) + { + AXIS2_SLEEP(1); + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} + +axis2_status_t AXIS2_CALL +echo_callback_on_complete( + struct axis2_callback * callback, + const axutil_env_t * env) +{ + + /** SOAP response has arrived here; get the soap envelope + from the callback object and do whatever you want to do with it */ + + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_node_t *ret_node = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + soap_envelope = axis2_callback_get_envelope(callback, env); + + if (!soap_envelope) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo stub invoke FAILED!\n"); + status = AXIS2_FAILURE; + } + else + { + ret_node = axiom_soap_envelope_get_base_node(soap_envelope, env); + + if (!ret_node) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo stub invoke FAILED!\n"); + status = AXIS2_FAILURE; + } + else + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + printf("\nReceived OM : %s\n", om_str); + printf("\necho client invoke SUCCESSFUL!\n"); + } + } + isComplete = 1; + return status; +} + +axis2_status_t AXIS2_CALL +echo_callback_on_error( + struct axis2_callback * callback, + const axutil_env_t * env, + int exception) +{ + + /** take necessary action on error */ + printf("\nEcho client invoke FAILED. Error code:%d ::%s", exception, + AXIS2_ERROR_GET_MESSAGE(env->error)); + isComplete = 1; + return AXIS2_SUCCESS; +} diff --git a/samples/user_guide/clients/echo_non_blocking_dual.mk b/samples/user_guide/clients/echo_non_blocking_dual.mk new file mode 100644 index 0000000..cf9dc95 --- /dev/null +++ b/samples/user_guide/clients/echo_non_blocking_dual.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" echo_non_blocking_dual.C echo_util.c /I.\..\..\..\include /c + @link.exe /nologo echo_non_blocking_dual.obj echo_util.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:echo_non_blocking_dual.exe + + + + + diff --git a/samples/user_guide/clients/echo_rest.c b/samples/user_guide/clients/echo_rest.c new file mode 100644 index 0000000..6f05e8d --- /dev/null +++ b/samples/user_guide/clients/echo_rest.c @@ -0,0 +1,229 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" +#include +#include +#include +#include + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + axis2_bool_t method_get = AXIS2_FALSE; + axis2_bool_t method_head = AXIS2_FALSE; + axis2_bool_t method_put = AXIS2_FALSE; + axis2_bool_t method_delete = AXIS2_FALSE; + + /* Set up the environment */ + env = axutil_env_create_all("echo_rest.log", AXIS2_LOG_LEVEL_TRACE); + + /* Set end point reference of echo service */ + address = "http://localhost:9090/axis2/services/echo/echoString"; + if (argc > 1) + { + if (0 == strncmp(argv[1], "-mGET", 5)) + { + method_get = AXIS2_TRUE; + } + else if (0 == strncmp(argv[1], "-mHEAD", 6)) + { + method_head = AXIS2_TRUE; + } + else if (0 == strncmp(argv[1], "-mPUT", 5)) + { + method_put = AXIS2_TRUE; + } + else if (0 == strncmp(argv[1], "-mDELETE",8 )) + { + method_delete = AXIS2_TRUE; + } + else if (0 == axutil_strcmp(argv[1], "-h")) + { + printf("Usage : %s [endpoint_url] \n", argv[0]); + printf("\nNOTE: You can test for other HTTP methods by changing the"); + printf(" services.xml of the echo service\n and providing the correct REST HTTP method"); + printf(" and the location to be used for operation.\n"); + printf(" Also note that you have to restart the server after changing the services.xml.\n"); + printf(" use %s -mGET for HTTP GET\n", argv[0]); + printf(" use %s -mHEAD for HTTP HEAD\n", argv[0]); + printf(" use %s -mDELETE for HTTP DELETE\n", argv[0]); + printf(" use %s -mPUT for HTTP PUT\n", argv[0]); + printf(" use -h for help\n"); + return 0; + } + else + { + address = argv[1]; + } + } + + if (argc > 2) + { + if (0 == strncmp(argv[2], "-mGET", 5)) + { + method_get = AXIS2_TRUE; + } + else if (0 == strncmp(argv[2], "-mHEAD", 6)) + { + method_head = AXIS2_TRUE; + } + else if (0 == strncmp(argv[2], "-mPUT", 5)) + { + method_put = AXIS2_TRUE; + } + else if (0 == strncmp(argv[2], "-mDELETE",8 )) + { + method_delete = AXIS2_TRUE; + } + else + { + address = argv[2]; + } + } + + printf("Using endpoint : %s\n", address); + + /* Create EPR with given address */ + endpoint_ref = axis2_endpoint_ref_create(env, address); + + /* Setup options */ + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + /* Enable REST at the client side */ + axis2_options_set_enable_rest(options, env, AXIS2_TRUE); + + if (AXIS2_TRUE == method_get) + { + axis2_options_set_http_method(options, env, AXIS2_HTTP_GET); + } + else if (AXIS2_TRUE == method_head) + { + axis2_options_set_http_method(options, env, AXIS2_HTTP_HEAD); + } + else if (AXIS2_TRUE == method_put) + { + axis2_options_set_http_method(options, env, AXIS2_HTTP_PUT); + } + else if (AXIS2_TRUE == method_delete) + { + axis2_options_set_http_method(options, env, AXIS2_HTTP_DELETE); + } + /* Set up deploy folder. It is from the deploy folder, the configuration is picked up + * using the axis2.xml file. + * In this sample client_home points to the Axis2/C default deploy folder. The client_home can + * be different from this folder on your system. For example, you may have a different folder + * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the + * modules that the client uses + */ + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf + ("Error creating service client, Please check AXIS2C_HOME again\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + /* Build the SOAP request message payload using OM API. */ + payload = build_om_payload_for_echo_svc(env); + + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (ret_node && + axis2_svc_client_get_last_response_has_fault(svc_client, env)) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + { + printf("\nReceived OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + } + printf("\necho client invoke FAILED!\n"); + } + else if (ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if (om_str) + { + printf("\nReceived OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + } + printf("\necho client invoke SUCCESSFUL!\n"); + } + else if (method_head && + axis2_svc_client_get_last_response_has_fault(svc_client, env)) + { + /* HEAD request should probably be removed from this file, + * and be relocated to transport unit tests. + */ + printf("\necho client invoke FAILED!\n"); + } + else if (method_head) + { + /* HEAD request should probably be removed from this file, + * and be relocated to transport unit tests. + */ + printf("\necho client invoke SUCCESSFUL!\n"); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("echo client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + return 0; +} diff --git a/samples/user_guide/clients/echo_rest.mk b/samples/user_guide/clients/echo_rest.mk new file mode 100644 index 0000000..a815594 --- /dev/null +++ b/samples/user_guide/clients/echo_rest.mk @@ -0,0 +1,8 @@ +echo: + @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" echo_rest.C echo_util.c /I.\..\..\..\include /c + @link.exe /nologo echo_rest.obj echo_util.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:echo_rest.exe + + + + + diff --git a/samples/user_guide/clients/echo_util.c b/samples/user_guide/clients/echo_util.c new file mode 100644 index 0000000..a38158b --- /dev/null +++ b/samples/user_guide/clients/echo_util.c @@ -0,0 +1,48 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "echo_util.h" + +/* build SOAP request message content using OM */ +axiom_node_t * +build_om_payload_for_echo_svc( + const axutil_env_t * env) +{ + axiom_node_t *echo_om_node = NULL; + axiom_element_t *echo_om_ele = NULL; + axiom_node_t *text_om_node = NULL; + axiom_element_t *text_om_ele = NULL; + axiom_namespace_t *ns1 = NULL; + axis2_char_t *om_str = NULL; + + ns1 = + axiom_namespace_create(env, "http://ws.apache.org/axis2/services/echo", + "ns1"); + echo_om_ele = + axiom_element_create(env, NULL, "echoString", ns1, &echo_om_node); + text_om_ele = + axiom_element_create(env, echo_om_node, "text", NULL, &text_om_node); + axiom_element_set_text(text_om_ele, env, "Hello World!", text_om_node); + + om_str = axiom_node_to_string(echo_om_node, env); + if (om_str) + printf("\nSending OM : %s\n", om_str); + AXIS2_FREE(env->allocator, om_str); + + return echo_om_node; +} diff --git a/samples/user_guide/clients/echo_util.h b/samples/user_guide/clients/echo_util.h new file mode 100644 index 0000000..19baeb3 --- /dev/null +++ b/samples/user_guide/clients/echo_util.h @@ -0,0 +1,28 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_UG_ECHO_UTIL_H +#define AXIS2_UG_ECHO_UTIL_H + +#include +#include + +axiom_node_t *build_om_payload_for_echo_svc( + const axutil_env_t * env); + +#endif diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..1c054db --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = core modules diff --git a/src/core/Makefile.am b/src/core/Makefile.am new file mode 100644 index 0000000..a3316e6 --- /dev/null +++ b/src/core/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = addr context description phaseresolver receivers util clientapi deployment transport/http/util transport/http/common engine transport diff --git a/src/core/addr/Makefile.am b/src/core/addr/Makefile.am new file mode 100644 index 0000000..1f7512f --- /dev/null +++ b/src/core/addr/Makefile.am @@ -0,0 +1,13 @@ +noinst_LTLIBRARIES = libaxis2_addr.la + +libaxis2_addr_la_SOURCES = relates_to.c \ + svc_name.c \ + any_content_type.c \ + endpoint_ref.c \ + msg_info_headers.c + + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include diff --git a/src/core/addr/any_content_type.c b/src/core/addr/any_content_type.c new file mode 100644 index 0000000..1a9e6a1 --- /dev/null +++ b/src/core/addr/any_content_type.c @@ -0,0 +1,120 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axis2_any_content_type +{ + + /** map of values in the any content type */ + axutil_hash_t *value_map; +}; + +AXIS2_EXTERN axis2_any_content_type_t *AXIS2_CALL +axis2_any_content_type_create( + const axutil_env_t * env) +{ + axis2_any_content_type_t *any_content_type = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + any_content_type = AXIS2_MALLOC(env->allocator, sizeof(axis2_any_content_type_t)); + if(!any_content_type) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + any_content_type->value_map = NULL; + + any_content_type->value_map = axutil_hash_make(env); + + if(!(any_content_type->value_map)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + axis2_any_content_type_free(any_content_type, env); + return NULL; + } + + return any_content_type; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_any_content_type_add_value( + axis2_any_content_type_t * any_content_type, + const axutil_env_t * env, + const axutil_qname_t * qname, + const axis2_char_t * value) +{ + axis2_char_t *temp = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(any_content_type->value_map) + { + axis2_char_t *name = NULL; + + name = axutil_qname_to_string((axutil_qname_t *)qname, env); + axutil_hash_set(any_content_type->value_map, name, AXIS2_HASH_KEY_STRING, value); + + temp = axutil_hash_get(any_content_type->value_map, name, AXIS2_HASH_KEY_STRING); + if(temp) + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_any_content_type_get_value( + const axis2_any_content_type_t * any_content_type, + const axutil_env_t * env, + const axutil_qname_t * qname) +{ + if(any_content_type->value_map) + { + axis2_char_t *name = NULL; + + name = axutil_qname_to_string((axutil_qname_t *)qname, env); + return axutil_hash_get(any_content_type->value_map, name, AXIS2_HASH_KEY_STRING); + } + return NULL; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_any_content_type_get_value_map( + const axis2_any_content_type_t * any_content_type, + const axutil_env_t * env) +{ + return any_content_type->value_map; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_any_content_type_free( + axis2_any_content_type_t * any_content_type, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(any_content_type->value_map) + { + axutil_hash_free(any_content_type->value_map, env); + } + + AXIS2_FREE(env->allocator, any_content_type); + + return; +} diff --git a/src/core/addr/endpoint_ref.c b/src/core/addr/endpoint_ref.c new file mode 100644 index 0000000..dd351f0 --- /dev/null +++ b/src/core/addr/endpoint_ref.c @@ -0,0 +1,375 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axis2_endpoint_ref +{ + + /** endpoint address */ + axis2_char_t *address; + + /** interface qname */ + axutil_qname_t *interface_qname; + + /** reference parameters */ + axutil_array_list_t *ref_param_list; + + /** meta data */ + axutil_array_list_t *metadata_list; + + /** reference parameter attribute list */ + axutil_array_list_t *ref_attribute_list; + + /** meta data attribute list */ + axutil_array_list_t *meta_attribute_list; + + /** extensible element list */ + axutil_array_list_t *extension_list; + + /** service name */ + axis2_svc_name_t *svc_name; +}; + +axis2_endpoint_ref_t *AXIS2_CALL +axis2_endpoint_ref_create( + const axutil_env_t * env, + const axis2_char_t * address) +{ + axis2_endpoint_ref_t *endpoint_ref = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + endpoint_ref = AXIS2_MALLOC(env->allocator, sizeof(axis2_endpoint_ref_t)); + if(!endpoint_ref) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + endpoint_ref->address = NULL; + endpoint_ref->interface_qname = NULL; + endpoint_ref->ref_param_list = NULL; + endpoint_ref->metadata_list = NULL; + endpoint_ref->ref_attribute_list = NULL; + endpoint_ref->meta_attribute_list = NULL; + endpoint_ref->extension_list = NULL; + endpoint_ref->svc_name = NULL; + + if(address) + { + endpoint_ref->address = axutil_strdup(env, address); + if(!(endpoint_ref->address)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + axis2_endpoint_ref_free(endpoint_ref, env); + return NULL; + } + } + + return endpoint_ref; +} + +const axis2_char_t *AXIS2_CALL +axis2_endpoint_ref_get_address( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env) +{ + return endpoint_ref->address; +} + +axis2_status_t AXIS2_CALL +axis2_endpoint_ref_set_address( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + const axis2_char_t * address) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(endpoint_ref->address) + { + AXIS2_FREE(env->allocator, endpoint_ref->address); + } + + endpoint_ref->address = axutil_strdup(env, address); + return AXIS2_SUCCESS; +} + +const axutil_qname_t *AXIS2_CALL +axis2_endpoint_ref_get_interface_qname( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env) +{ + return endpoint_ref->interface_qname; +} + +axis2_status_t AXIS2_CALL +axis2_endpoint_ref_set_interface_qname( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + const axutil_qname_t * interface_qname) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + endpoint_ref->interface_qname = axutil_qname_clone((axutil_qname_t *)interface_qname, env); + return AXIS2_SUCCESS; +} + +axis2_svc_name_t *AXIS2_CALL +axis2_endpoint_ref_get_svc_name( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env) +{ + return endpoint_ref->svc_name; +} + +axis2_status_t AXIS2_CALL +axis2_endpoint_ref_set_svc_name( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + axis2_svc_name_t * svc_name) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + endpoint_ref->svc_name = svc_name; + return AXIS2_SUCCESS; +} + +void AXIS2_CALL +axis2_endpoint_ref_free_void_arg( + void *endpoint_ref, + const axutil_env_t * env) +{ + axis2_endpoint_ref_t *endpoint_ref_l = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + endpoint_ref_l = (axis2_endpoint_ref_t *)endpoint_ref; + axis2_endpoint_ref_free(endpoint_ref_l, env); + return; +} + +void AXIS2_CALL +axis2_endpoint_ref_free( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(endpoint_ref->address) + { + AXIS2_FREE(env->allocator, endpoint_ref->address); + } + + if(endpoint_ref->ref_param_list) + { + axutil_array_list_free(endpoint_ref->ref_param_list, env); + } + + if(endpoint_ref->metadata_list) + { + axutil_array_list_free(endpoint_ref->metadata_list, env); + } + + if(endpoint_ref->ref_attribute_list) + { + axutil_array_list_free(endpoint_ref->ref_attribute_list, env); + } + + if(endpoint_ref->meta_attribute_list) + { + axutil_array_list_free(endpoint_ref->meta_attribute_list, env); + } + + if(endpoint_ref->extension_list) + { + axutil_array_list_free(endpoint_ref->extension_list, env); + } + + AXIS2_FREE(env->allocator, endpoint_ref); + + return; +} + +axutil_array_list_t *AXIS2_CALL +axis2_endpoint_ref_get_ref_param_list( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env) +{ + return endpoint_ref->ref_param_list; +} + +axutil_array_list_t *AXIS2_CALL +axis2_endpoint_ref_get_metadata_list( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env) +{ + return endpoint_ref->metadata_list; +} + +axis2_status_t AXIS2_CALL +axis2_endpoint_ref_add_ref_param( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + axiom_node_t * ref_param_node) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(!(endpoint_ref->ref_param_list)) + { + endpoint_ref->ref_param_list = axutil_array_list_create(env, 0); + if(!(endpoint_ref->ref_param_list)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + if(endpoint_ref->ref_param_list && ref_param_node) + { + return axutil_array_list_add(endpoint_ref->ref_param_list, env, ref_param_node); + } + + return AXIS2_FAILURE; +} + +axis2_status_t AXIS2_CALL +axis2_endpoint_ref_add_metadata( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + axiom_node_t * meta_data_node) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(!(endpoint_ref->metadata_list)) + { + endpoint_ref->metadata_list = axutil_array_list_create(env, 0); + if(!(endpoint_ref->metadata_list)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + if(endpoint_ref->metadata_list && meta_data_node) + { + return axutil_array_list_add(endpoint_ref->metadata_list, env, meta_data_node); + } + + return AXIS2_FAILURE; +} + +axutil_array_list_t *AXIS2_CALL +axis2_endpoint_ref_get_ref_attribute_list( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env) +{ + return endpoint_ref->ref_attribute_list; +} + +axutil_array_list_t *AXIS2_CALL +axis2_endpoint_ref_get_metadata_attribute_list( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env) +{ + return endpoint_ref->meta_attribute_list; +} + +axutil_array_list_t *AXIS2_CALL +axis2_endpoint_ref_get_extension_list( + const axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env) +{ + return endpoint_ref->extension_list; +} + +axis2_status_t AXIS2_CALL +axis2_endpoint_ref_add_ref_attribute( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + axiom_attribute_t * attr) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(!(endpoint_ref->ref_attribute_list)) + { + endpoint_ref->ref_attribute_list = axutil_array_list_create(env, 0); + if(!(endpoint_ref->ref_attribute_list)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + if(endpoint_ref->ref_attribute_list && attr) + { + return axutil_array_list_add(endpoint_ref->ref_attribute_list, env, attr); + } + + return AXIS2_FAILURE; +} + +axis2_status_t AXIS2_CALL +axis2_endpoint_ref_add_metadata_attribute( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + axiom_attribute_t * attr) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(!(endpoint_ref->meta_attribute_list)) + { + endpoint_ref->meta_attribute_list = axutil_array_list_create(env, 0); + if(!(endpoint_ref->meta_attribute_list)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + if(endpoint_ref->meta_attribute_list && attr) + { + return axutil_array_list_add(endpoint_ref->meta_attribute_list, env, attr); + } + + return AXIS2_FAILURE; +} + +axis2_status_t AXIS2_CALL +axis2_endpoint_ref_add_extension( + axis2_endpoint_ref_t * endpoint_ref, + const axutil_env_t * env, + axiom_node_t * extension_node) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(!(endpoint_ref->extension_list)) + { + endpoint_ref->extension_list = axutil_array_list_create(env, 0); + if(!(endpoint_ref->extension_list)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + if(endpoint_ref->extension_list && extension_node) + { + return axutil_array_list_add(endpoint_ref->extension_list, env, extension_node); + } + + return AXIS2_FAILURE; +} diff --git a/src/core/addr/msg_info_headers.c b/src/core/addr/msg_info_headers.c new file mode 100644 index 0000000..8d61c5b --- /dev/null +++ b/src/core/addr/msg_info_headers.c @@ -0,0 +1,448 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axis2_msg_info_headers +{ + + /** The address of the intended receiver of the message. This is mandatory */ + axis2_endpoint_ref_t *to; + + /** Reference of the endpoint where the message originated from */ + axis2_endpoint_ref_t *from; + + /** Pair of values that indicate how this message relate to another message */ + axis2_relates_to_t *relates_to; + + /** Identifies the intended receiver for replies to the message, + if this is set, none and anonymous settings are ignored */ + axis2_endpoint_ref_t *reply_to; + + /** reply to should be none */ + axis2_bool_t reply_to_none; + + /** reply to should be anonymous, this is overridden by none*/ + axis2_bool_t reply_to_anonymous; + + /** identifies the intended receiver for faults related to the message + if this is set, none and anonymous settings are ignored */ + axis2_endpoint_ref_t *fault_to; + + /** fault to should be none */ + axis2_bool_t fault_to_none; + + /** fault to should be anonymous, this is overridden by none*/ + axis2_bool_t fault_to_anonymous; + + /** action */ + axis2_char_t *action; + + /** message Id */ + axis2_char_t *message_id; + + /** reference parameters */ + axutil_array_list_t *ref_params; +}; + +AXIS2_EXTERN axis2_msg_info_headers_t *AXIS2_CALL +axis2_msg_info_headers_create( + const axutil_env_t * env, + axis2_endpoint_ref_t * to, + const axis2_char_t * action) +{ + axis2_msg_info_headers_t *msg_info_headers = NULL; + + msg_info_headers = AXIS2_MALLOC(env->allocator, sizeof(axis2_msg_info_headers_t)); + + if(!msg_info_headers) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + msg_info_headers->to = NULL; + msg_info_headers->from = NULL; + msg_info_headers->relates_to = NULL; + msg_info_headers->reply_to_none = AXIS2_FALSE; + msg_info_headers->reply_to_anonymous = AXIS2_FALSE; + msg_info_headers->reply_to = NULL; + msg_info_headers->fault_to_none = AXIS2_FALSE; + msg_info_headers->fault_to_anonymous = AXIS2_FALSE; + msg_info_headers->fault_to = NULL; + msg_info_headers->action = NULL; + msg_info_headers->message_id = NULL; + msg_info_headers->ref_params = NULL; + + if(to) + { + msg_info_headers->to = to; + } + + if(action) + { + msg_info_headers->action = axutil_strdup(env, action); + if(!(msg_info_headers->action)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + axis2_msg_info_headers_free(msg_info_headers, env); + return NULL; + } + } + + return msg_info_headers; +} + +/** + * Method getTo + * + * @return + */ +AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL +axis2_msg_info_headers_get_to( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env) +{ + return msg_info_headers->to; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_info_headers_set_to( + struct axis2_msg_info_headers * msg_info_headers, + const axutil_env_t * env, + axis2_endpoint_ref_t * to) +{ + if(msg_info_headers->to && to) /* if the incoming to is NULL, + we consider that to be a reset, + so don't free */ + { + axis2_endpoint_ref_free(msg_info_headers->to, env); + msg_info_headers->to = NULL; + } + msg_info_headers->to = to; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL +axis2_msg_info_headers_get_from( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env) +{ + return msg_info_headers->from; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_info_headers_set_from( + struct axis2_msg_info_headers * msg_info_headers, + const axutil_env_t * env, + axis2_endpoint_ref_t * from) +{ + msg_info_headers->from = from; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL +axis2_msg_info_headers_get_reply_to( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env) +{ + return msg_info_headers->reply_to; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_info_headers_set_reply_to( + struct axis2_msg_info_headers * msg_info_headers, + const axutil_env_t * env, + axis2_endpoint_ref_t * reply_to) +{ + msg_info_headers->reply_to = reply_to; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL +axis2_msg_info_headers_get_fault_to( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env) +{ + return msg_info_headers->fault_to; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_info_headers_set_fault_to( + struct axis2_msg_info_headers * msg_info_headers, + const axutil_env_t * env, + axis2_endpoint_ref_t * fault_to) +{ + msg_info_headers->fault_to = fault_to; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_msg_info_headers_get_action( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env) +{ + return msg_info_headers->action; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_info_headers_set_action( + struct axis2_msg_info_headers * msg_info_headers, + const axutil_env_t * env, + const axis2_char_t * action) +{ + if(msg_info_headers->action) + { + AXIS2_FREE(env->allocator, msg_info_headers->action); + msg_info_headers->action = NULL; + } + if(action) + { + msg_info_headers->action = axutil_strdup(env, action); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_msg_info_headers_get_message_id( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env) +{ + return msg_info_headers->message_id; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_info_headers_set_message_id( + struct axis2_msg_info_headers * msg_info_headers, + const axutil_env_t * env, + const axis2_char_t * message_id) +{ + if(msg_info_headers->message_id) + { + AXIS2_FREE(env->allocator, msg_info_headers->message_id); + msg_info_headers->message_id = NULL; + } + + if(message_id) + { + msg_info_headers->message_id = axutil_stracat(env, AXIS2_MESSAGE_ID_PREFIX, message_id); + if(!(msg_info_headers->message_id)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_info_headers_set_in_message_id( + struct axis2_msg_info_headers * msg_info_headers, + const axutil_env_t * env, + const axis2_char_t * message_id) +{ + if(msg_info_headers->message_id) + { + AXIS2_FREE(env->allocator, msg_info_headers->message_id); + msg_info_headers->message_id = NULL; + } + + if(message_id) + { + msg_info_headers->message_id = axutil_strdup(env, message_id); + + if(!(msg_info_headers->message_id)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_relates_to_t *AXIS2_CALL +axis2_msg_info_headers_get_relates_to( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env) +{ + return msg_info_headers->relates_to; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_info_headers_set_relates_to( + struct axis2_msg_info_headers * msg_info_headers, + const axutil_env_t * env, + axis2_relates_to_t * relates_to) +{ + if(msg_info_headers->relates_to) + { + axis2_relates_to_free(msg_info_headers->relates_to, env); + } + msg_info_headers->relates_to = relates_to; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_msg_info_headers_get_all_ref_params( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env) +{ + return msg_info_headers->ref_params; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_info_headers_add_ref_param( + struct axis2_msg_info_headers * msg_info_headers, + const axutil_env_t * env, + axiom_node_t * ref_param) +{ + if(!(msg_info_headers->ref_params)) + { + msg_info_headers->ref_params = axutil_array_list_create(env, 10); + if(!(msg_info_headers->ref_params)) + return AXIS2_FAILURE; + } + + if(ref_param) + { + return axutil_array_list_add(msg_info_headers->ref_params, env, ref_param); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_msg_info_headers_free( + struct axis2_msg_info_headers *msg_info_headers, + const axutil_env_t * env) +{ + if(msg_info_headers->to) + { + axis2_endpoint_ref_free(msg_info_headers->to, env); + } + if(msg_info_headers->from) + { + axis2_endpoint_ref_free(msg_info_headers->from, env); + } + if(msg_info_headers->reply_to) + { + axis2_endpoint_ref_free(msg_info_headers->reply_to, env); + } + if(msg_info_headers->relates_to) + { + axis2_relates_to_free(msg_info_headers->relates_to, env); + } + + if(msg_info_headers->fault_to) + { + axis2_endpoint_ref_free(msg_info_headers->fault_to, env); + } + + if(msg_info_headers->ref_params) + { + axutil_array_list_free(msg_info_headers->ref_params, env); + } + if(msg_info_headers->action) + { + AXIS2_FREE(env->allocator, msg_info_headers->action); + } + if(msg_info_headers->message_id) + { + AXIS2_FREE(env->allocator, msg_info_headers->message_id); + } + + AXIS2_FREE(env->allocator, msg_info_headers); + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_info_headers_set_reply_to_none( + struct axis2_msg_info_headers * msg_info_headers, + const axutil_env_t * env, + const axis2_bool_t none) +{ + msg_info_headers->reply_to_none = none; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_msg_info_headers_get_reply_to_none( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env) +{ + return msg_info_headers->reply_to_none; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_info_headers_set_reply_to_anonymous( + struct axis2_msg_info_headers * msg_info_headers, + const axutil_env_t * env, + const axis2_bool_t anonymous) +{ + msg_info_headers->reply_to_anonymous = anonymous; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_msg_info_headers_get_reply_to_anonymous( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env) +{ + return msg_info_headers->reply_to_anonymous; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_info_headers_set_fault_to_none( + struct axis2_msg_info_headers * msg_info_headers, + const axutil_env_t * env, + const axis2_bool_t none) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + msg_info_headers->fault_to_none = none; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_msg_info_headers_get_fault_to_none( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env) +{ + return msg_info_headers->fault_to_none; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_info_headers_set_fault_to_anonymous( + struct axis2_msg_info_headers * msg_info_headers, + const axutil_env_t * env, + const axis2_bool_t anonymous) +{ + msg_info_headers->fault_to_anonymous = anonymous; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_msg_info_headers_get_fault_to_anonymous( + const axis2_msg_info_headers_t * msg_info_headers, + const axutil_env_t * env) +{ + return msg_info_headers->fault_to_anonymous; +} + diff --git a/src/core/addr/relates_to.c b/src/core/addr/relates_to.c new file mode 100644 index 0000000..e28df54 --- /dev/null +++ b/src/core/addr/relates_to.c @@ -0,0 +1,164 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axis2_relates_to +{ + + /** value string */ + axis2_char_t *value; + + /** relationship type string */ + axis2_char_t *relationship_type; +}; + +axis2_relates_to_t *AXIS2_CALL +axis2_relates_to_create( + const axutil_env_t * env, + const axis2_char_t * value, + const axis2_char_t * relationship_type) +{ + axis2_relates_to_t *relates_to = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + relates_to = AXIS2_MALLOC(env->allocator, sizeof(axis2_relates_to_t)); + if(!relates_to) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + relates_to->value = NULL; + relates_to->relationship_type = NULL; + + if(value) + { + relates_to->value = axutil_strdup(env, value); + if(!(relates_to->value)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + axis2_relates_to_free(relates_to, env); + return NULL; + } + } + + if(relationship_type) + { + relates_to->relationship_type = axutil_strdup(env, relationship_type); + if(!(relates_to->relationship_type)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + axis2_relates_to_free(relates_to, env); + return NULL; + } + } + + return relates_to; +} + +const axis2_char_t *AXIS2_CALL +axis2_relates_to_get_value( + const axis2_relates_to_t * relates_to, + const axutil_env_t * env) +{ + return relates_to->value; +} + +axis2_status_t AXIS2_CALL +axis2_relates_to_set_value( + struct axis2_relates_to * relates_to, + const axutil_env_t * env, + const axis2_char_t * value) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(relates_to->value) + { + AXIS2_FREE(env->allocator, relates_to->value); + } + + if(value) + { + relates_to->value = (axis2_char_t *)axutil_strdup(env, value); + if(!(relates_to->value)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +const axis2_char_t *AXIS2_CALL +axis2_relates_to_get_relationship_type( + const axis2_relates_to_t * relates_to, + const axutil_env_t * env) +{ + return relates_to->relationship_type; +} + +axis2_status_t AXIS2_CALL +axis2_relates_to_set_relationship_type( + struct axis2_relates_to * relates_to, + const axutil_env_t * env, + const axis2_char_t * relationship_type) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(relates_to->relationship_type) + { + AXIS2_FREE(env->allocator, relates_to->relationship_type); + } + + if(relationship_type) + { + relates_to->relationship_type = (axis2_char_t *)axutil_strdup(env, relationship_type); + if(!(relates_to->relationship_type)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +void AXIS2_CALL +axis2_relates_to_free( + struct axis2_relates_to *relates_to, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(relates_to->value) + { + AXIS2_FREE(env->allocator, relates_to->value); + } + + if(relates_to->relationship_type) + { + AXIS2_FREE(env->allocator, relates_to->relationship_type); + } + + AXIS2_FREE(env->allocator, relates_to); + + return; +} diff --git a/src/core/addr/svc_name.c b/src/core/addr/svc_name.c new file mode 100644 index 0000000..0aa34ab --- /dev/null +++ b/src/core/addr/svc_name.c @@ -0,0 +1,151 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axis2_svc_name +{ + + /** service QName */ + axutil_qname_t *qname; + + /** service endpoint name */ + axis2_char_t *endpoint_name; +}; + +axis2_svc_name_t *AXIS2_CALL +axis2_svc_name_create( + const axutil_env_t * env, + const axutil_qname_t * qname, + const axis2_char_t * endpoint_name) +{ + axis2_svc_name_t *svc_name = NULL; + + svc_name = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_name_t)); + if(!svc_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + svc_name->qname = NULL; + svc_name->endpoint_name = NULL; + + if(qname) + { + svc_name->qname = axutil_qname_clone((axutil_qname_t *)qname, env); + if(!(svc_name->qname)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + axis2_svc_name_free(svc_name, env); + return NULL; + } + } + + if(endpoint_name) + { + svc_name->endpoint_name = axutil_strdup(env, endpoint_name); + if(!(svc_name->endpoint_name)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + axis2_svc_name_free(svc_name, env); + return NULL; + } + } + + return svc_name; +} + +const axutil_qname_t *AXIS2_CALL +axis2_svc_name_get_qname( + const axis2_svc_name_t * svc_name, + const axutil_env_t * env) +{ + return svc_name->qname; +} + +axis2_status_t AXIS2_CALL +axis2_svc_name_set_qname( + struct axis2_svc_name * svc_name, + const axutil_env_t * env, + const axutil_qname_t * qname) +{ + if(svc_name->qname) + { + axutil_qname_free(svc_name->qname, env); + } + + if(qname) + { + svc_name->qname = axutil_qname_clone((axutil_qname_t *)qname, env); + if(!(svc_name->qname)) + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +const axis2_char_t *AXIS2_CALL +axis2_svc_name_get_endpoint_name( + const axis2_svc_name_t * svc_name, + const axutil_env_t * env) +{ + return svc_name->endpoint_name; +} + +axis2_status_t AXIS2_CALL +axis2_svc_name_set_endpoint_name( + struct axis2_svc_name * svc_name, + const axutil_env_t * env, + const axis2_char_t * endpoint_name) +{ + if(svc_name->endpoint_name) + { + AXIS2_FREE(env->allocator, svc_name->endpoint_name); + } + + if(endpoint_name) + { + svc_name->endpoint_name = axutil_strdup(env, endpoint_name); + if(!(svc_name->endpoint_name)) + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +void AXIS2_CALL +axis2_svc_name_free( + struct axis2_svc_name *svc_name, + const axutil_env_t * env) +{ + if(svc_name->qname) + { + axutil_qname_free(svc_name->qname, env); + } + + if(svc_name->endpoint_name) + { + AXIS2_FREE(env->allocator, svc_name->endpoint_name); + } + + AXIS2_FREE(env->allocator, svc_name); + + return; +} + diff --git a/src/core/clientapi/Makefile.am b/src/core/clientapi/Makefile.am new file mode 100644 index 0000000..8dead6f --- /dev/null +++ b/src/core/clientapi/Makefile.am @@ -0,0 +1,17 @@ +noinst_LTLIBRARIES = libaxis2_clientapi.la +libaxis2_clientapi_la_SOURCES = async_result.c \ + callback.c \ + listener_manager.c \ + callback_recv.c \ + stub.c \ + options.c \ + op_client.c \ + svc_client.c + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/util/include/platforms \ + -I$(top_builddir)/axiom/include \ + -I$(top_builddir)/neethi/include diff --git a/src/core/clientapi/async_result.c b/src/core/clientapi/async_result.c new file mode 100644 index 0000000..693e283 --- /dev/null +++ b/src/core/clientapi/async_result.c @@ -0,0 +1,83 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axis2_async_result +{ + + /** result message context */ + axis2_msg_ctx_t *result; +}; + +AXIS2_EXTERN axis2_async_result_t *AXIS2_CALL +axis2_async_result_create( + const axutil_env_t * env, + axis2_msg_ctx_t * result) +{ + axis2_async_result_t *async_result = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + async_result = AXIS2_MALLOC(env->allocator, sizeof(axis2_async_result_t)); + if(!async_result) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create asynchronous result."); + return NULL; + } + + async_result->result = NULL; + + if(result) + { + async_result->result = result; /* shallow copy */ + } + + return async_result; +} + +AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL +axis2_async_result_get_envelope( + axis2_async_result_t * async_result, + const axutil_env_t * env) +{ + if(async_result->result) + { + return axis2_msg_ctx_get_soap_envelope(async_result->result, env); + } + + return NULL; +} + +AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL +axis2_async_result_get_result( + axis2_async_result_t * async_result, + const axutil_env_t * env) +{ + return async_result->result; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_async_result_free( + axis2_async_result_t * async_result, + const axutil_env_t * env) +{ + AXIS2_FREE(env->allocator, async_result); +} diff --git a/src/core/clientapi/callback.c b/src/core/clientapi/callback.c new file mode 100644 index 0000000..6f875df --- /dev/null +++ b/src/core/clientapi/callback.c @@ -0,0 +1,272 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axis2_callback +{ + + /** callback complete? */ + axis2_bool_t complete; + + /** envelope corresponding to the result */ + axiom_soap_envelope_t *envelope; + + /** message context corresponding to the result */ + axis2_msg_ctx_t *msg_ctx; + + /** error code */ + int error; + + /** to store callback specific data */ + void *data; + axutil_thread_mutex_t *mutex; + + /** + * This function is called by invoke_on_complete. + * Users could provide this method so that they can define what to be + * done when the callback returns on completion. + * @param callback pointer to callback struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + axis2_status_t + ( + AXIS2_CALL * on_complete) + ( + axis2_callback_t * callback, + const axutil_env_t * env); + + /** + * This function is called by report_error. + * Users could provide this method so that they can define what to be done + * when the callback returns an error. + * @param callback pointer to callback struct + * @param env pointer to environment struct + * @param exception error code representing the error + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + axis2_status_t + ( + AXIS2_CALL * on_error) +( axis2_callback_t * callback, +const axutil_env_t * env, +const int exception); +}; + +static axis2_status_t AXIS2_CALL axis2_callback_on_complete( + axis2_callback_t * callback, + const axutil_env_t * env); + +static axis2_status_t AXIS2_CALL axis2_callback_on_error( + axis2_callback_t * callback, + const axutil_env_t * env, + int exception); + +AXIS2_EXTERN axis2_callback_t *AXIS2_CALL +axis2_callback_create( + const axutil_env_t * env) +{ + axis2_callback_t *callback = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + callback = AXIS2_MALLOC(env->allocator, sizeof(axis2_callback_t)); + if(!callback) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create callback."); + return NULL; + } + + callback->complete = AXIS2_FALSE; + callback->envelope = NULL; + callback->msg_ctx = NULL; + callback->error = AXIS2_ERROR_NONE; + callback->data = NULL; + callback->mutex = NULL; + callback->on_complete = axis2_callback_on_complete; + callback->on_error = axis2_callback_on_error; + + callback->mutex = axutil_thread_mutex_create(env->allocator, AXIS2_THREAD_MUTEX_DEFAULT); + return callback; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_callback_invoke_on_complete( + axis2_callback_t * callback, + const axutil_env_t * env, + axis2_async_result_t * result) +{ + axis2_status_t status = AXIS2_FAILURE; + + callback->envelope = axis2_async_result_get_envelope(result, env); + callback->msg_ctx = axis2_async_result_get_result(result, env); + axis2_msg_ctx_increment_ref(callback->msg_ctx, env); /* this will be set in opclient's msgctx + map and will be deleted from there */ + + status = callback->on_complete(callback, env); + + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_callback_report_error( + axis2_callback_t * callback, + const axutil_env_t * env, + const int exception) +{ + axis2_callback_set_error(callback, env, exception); + return callback->on_error(callback, env, exception); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_callback_get_complete( + const axis2_callback_t * callback, + const axutil_env_t * env) +{ + return callback->complete; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_callback_set_complete( + axis2_callback_t * callback, + const axutil_env_t * env, + const axis2_bool_t complete) +{ + callback->complete = complete; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL +axis2_callback_get_envelope( + const axis2_callback_t * callback, + const axutil_env_t * env) +{ + return callback->envelope; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_callback_set_envelope( + axis2_callback_t * callback, + const axutil_env_t * env, + axiom_soap_envelope_t * envelope) +{ + callback->envelope = envelope; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL +axis2_callback_get_msg_ctx( + const axis2_callback_t * callback, + const axutil_env_t * env) +{ + return callback->msg_ctx; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_callback_set_msg_ctx( + axis2_callback_t * callback, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + callback->msg_ctx = msg_ctx; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_callback_get_error( + const axis2_callback_t * callback, + const axutil_env_t * env) +{ + return callback->error; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_callback_set_error( + axis2_callback_t * callback, + const axutil_env_t * env, + const int error) +{ + callback->error = error; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_callback_free( + axis2_callback_t * callback, + const axutil_env_t * env) +{ + if(callback->mutex) + { + axutil_thread_mutex_destroy(callback->mutex); + } + + AXIS2_FREE(env->allocator, callback); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_callback_set_data( + axis2_callback_t * callback, + void *data) +{ + callback->data = (void *)data; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void *AXIS2_CALL +axis2_callback_get_data( + const axis2_callback_t * callback) +{ + return callback->data; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_callback_set_on_complete( + axis2_callback_t * callback, + axis2_on_complete_func_ptr func) +{ + callback->on_complete = func; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_callback_set_on_error( + axis2_callback_t * callback, + axis2_on_error_func_ptr func) +{ + callback->on_error = func; +} + +static axis2_status_t AXIS2_CALL +axis2_callback_on_complete( + axis2_callback_t * callback, + const axutil_env_t * env) +{ + return AXIS2_SUCCESS; +} + +static axis2_status_t AXIS2_CALL +axis2_callback_on_error( + axis2_callback_t * callback, + const axutil_env_t * env, + int exception) +{ + return AXIS2_SUCCESS; +} diff --git a/src/core/clientapi/callback_recv.c b/src/core/clientapi/callback_recv.c new file mode 100644 index 0000000..f45ed87 --- /dev/null +++ b/src/core/clientapi/callback_recv.c @@ -0,0 +1,199 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_callback_recv.h" +#include +#include + +struct axis2_callback_recv +{ + /** base context struct */ + axis2_msg_recv_t *base; + axis2_bool_t base_deep_copy; + + /** callback map */ + axutil_hash_t *callback_map; + axutil_thread_mutex_t *mutex; +}; + +static axis2_status_t AXIS2_CALL axis2_callback_recv_receive( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + void *callback_recv_param); + +AXIS2_EXTERN axis2_callback_recv_t *AXIS2_CALL +axis2_callback_recv_create( + const axutil_env_t * env) +{ + axis2_callback_recv_t *callback_recv = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + callback_recv = AXIS2_MALLOC(env->allocator, sizeof(axis2_callback_recv_t)); + + if(!callback_recv) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create callback receive."); + return NULL; + } + + callback_recv->base = NULL; + callback_recv->base_deep_copy = AXIS2_TRUE; + callback_recv->callback_map = NULL; + callback_recv->mutex = NULL; + + callback_recv->base = axis2_msg_recv_create(env); + if(!callback_recv->base) + { + axis2_callback_recv_free(callback_recv, env); + return NULL; + } + axis2_msg_recv_set_derived(callback_recv->base, env, callback_recv); + axis2_msg_recv_set_receive(callback_recv->base, env, axis2_callback_recv_receive); + + callback_recv->callback_map = axutil_hash_make(env); + if(!callback_recv->callback_map) + { + axis2_callback_recv_free(callback_recv, env); + return NULL; + } + + callback_recv->mutex = axutil_thread_mutex_create(env->allocator, AXIS2_THREAD_MUTEX_DEFAULT); + return callback_recv; +} + +AXIS2_EXTERN axis2_msg_recv_t *AXIS2_CALL +axis2_callback_recv_get_base( + axis2_callback_recv_t * callback_recv, + const axutil_env_t * env) +{ + callback_recv->base_deep_copy = AXIS2_FALSE; + return callback_recv->base; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_callback_recv_free( + axis2_callback_recv_t * callback_recv, + const axutil_env_t * env) +{ + if(callback_recv->mutex) + { + axutil_thread_mutex_destroy(callback_recv->mutex); + } + + if(callback_recv->callback_map) + { + axutil_hash_index_t *hi = NULL; + const void *key = NULL; + void *val = NULL; + for(hi = axutil_hash_first(callback_recv->callback_map, env); hi; hi = axutil_hash_next( + env, hi)) + { + axutil_hash_this(hi, &key, NULL, &val); + if(key) + { + AXIS2_FREE(env->allocator, (char *)key); + } + if(val) + { + axis2_callback_t *callback = (axis2_callback_t *) val; + axis2_callback_free(callback, env); + } + + } + + axutil_hash_free(callback_recv->callback_map, env); + } + + if(callback_recv->base && callback_recv->base_deep_copy) + { + axis2_msg_recv_free(callback_recv->base, env); + } + + if(callback_recv) + { + AXIS2_FREE(env->allocator, callback_recv); + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_callback_recv_add_callback( + axis2_callback_recv_t * callback_recv, + const axutil_env_t * env, + const axis2_char_t * msg_id, + axis2_callback_t * callback) +{ + if(msg_id) + { + axis2_char_t *mid = axutil_strdup(env, msg_id); + axutil_hash_set(callback_recv->callback_map, mid, AXIS2_HASH_KEY_STRING, callback); + } + return AXIS2_SUCCESS; +} + +/* In the dual channel invocations client set a callback function to be invoked when a resonse + * is received from the server. When the response is received by the listening port of the + * listener manager, in the engine receive call the message is finally hit by callback receiver + * which is an implementation of the axis2 message receiver. This is the function that is called + * at that stage. The client set callback function is called from within here. + */ +static axis2_status_t AXIS2_CALL +axis2_callback_recv_receive( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + void *callback_recv_param) +{ + axis2_callback_recv_t *callback_recv = NULL; + axis2_relates_to_t *relates_to = NULL; + axis2_msg_info_headers_t *msg_info_headers = NULL; + + callback_recv = axis2_msg_recv_get_derived(msg_recv, env); + + msg_info_headers = axis2_msg_ctx_get_msg_info_headers(msg_ctx, env); + if(msg_info_headers) + { + relates_to = axis2_msg_info_headers_get_relates_to(msg_info_headers, env); + if(relates_to) + { + const axis2_char_t *msg_id = axis2_relates_to_get_value(relates_to, env); + if(msg_id) + { + axis2_async_result_t *result = NULL; + axis2_callback_t *callback = (axis2_callback_t *)axutil_hash_get( + callback_recv->callback_map, msg_id, AXIS2_HASH_KEY_STRING); + + result = axis2_async_result_create(env, msg_ctx); + if(callback && result) + { + axis2_callback_invoke_on_complete(callback, env, result); + axis2_callback_set_complete(callback, env, AXIS2_TRUE); + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, NULL); + } + + axis2_async_result_free(result, env); + if(callback && result) + return AXIS2_SUCCESS; + } + } + } + + return AXIS2_FAILURE; +} + diff --git a/src/core/clientapi/listener_manager.c b/src/core/clientapi/listener_manager.c new file mode 100644 index 0000000..1e3e3f2 --- /dev/null +++ b/src/core/clientapi/listener_manager.c @@ -0,0 +1,302 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +/** + * keep information about the listener for a given transport + */ +typedef struct axis2_transport_listener_state +{ + int waiting_calls; + + axis2_transport_receiver_t *listener; + +} axis2_transport_listener_state_t; + +struct axis2_listener_manager +{ + + /** hash map of listeners */ + axis2_transport_listener_state_t *listener_map[AXIS2_TRANSPORT_ENUM_MAX]; + axutil_thread_t *listener_thread[AXIS2_TRANSPORT_ENUM_MAX]; + + /** configuration context */ + axis2_conf_ctx_t *conf_ctx; +}; + +typedef struct axis2_listener_manager_worker_func_args +{ + const axutil_env_t *env; + axis2_listener_manager_t *listner_manager; + axis2_transport_receiver_t *listener; +} axis2_listener_manager_worker_func_args_t; + +void *AXIS2_THREAD_FUNC axis2_listener_manager_worker_func( + axutil_thread_t * thd, + void *data); + +AXIS2_EXTERN axis2_listener_manager_t *AXIS2_CALL +axis2_listener_manager_create( + const axutil_env_t * env) +{ + axis2_listener_manager_t *listener_manager = NULL; + int i = 0; + + AXIS2_ENV_CHECK(env, NULL); + + listener_manager = AXIS2_MALLOC(env->allocator, sizeof(axis2_listener_manager_t)); + + if(!listener_manager) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create listener manager."); + return NULL; + } + + listener_manager->conf_ctx = NULL; + + for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++) + { + listener_manager->listener_map[i] = NULL; + listener_manager->listener_thread[i] = NULL; + } + + return listener_manager; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_listener_manager_make_sure_started( + axis2_listener_manager_t * listener_manager, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS transport, + axis2_conf_ctx_t * conf_ctx) +{ + axis2_transport_listener_state_t *tl_state = NULL; + + AXIS2_PARAM_CHECK(env->error, conf_ctx, AXIS2_FAILURE); + + if(listener_manager->conf_ctx) + { + if(conf_ctx != listener_manager->conf_ctx) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CLIENT_SIDE_SUPPORT_ONLY_ONE_CONF_CTX, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Only one configuration context is supported at client side."); + return AXIS2_FAILURE; + } + } + else + { + listener_manager->conf_ctx = conf_ctx; + } + + tl_state = listener_manager->listener_map[transport]; + + if(!tl_state) + { + /*means this transport not yet started, start the transport */ + axis2_transport_in_desc_t *transport_in = NULL; + axis2_conf_t *conf = NULL; + axis2_transport_receiver_t *listener = NULL; + + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + transport_in = axis2_conf_get_transport_in(conf, env, transport); + if(transport_in) + { + listener = axis2_transport_in_desc_get_recv(transport_in, env); + if(listener) + { + axutil_thread_t *worker_thread = NULL; + axis2_listener_manager_worker_func_args_t *arg_list = NULL; + arg_list = AXIS2_MALLOC(env->allocator, + sizeof(axis2_listener_manager_worker_func_args_t)); + if(!arg_list) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create listener manager worker function arguments."); + return AXIS2_FAILURE; + } + arg_list->env = env; + arg_list->listner_manager = listener_manager; + arg_list->listener = listener; +#ifdef AXIS2_SVR_MULTI_THREADED + if (env->thread_pool) + { + worker_thread = + axutil_thread_pool_get_thread(env->thread_pool, + axis2_listener_manager_worker_func, + (void *) arg_list); + if (!worker_thread) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Thread creation failed" + "Invoke non blocking failed"); + } + else + { + /*axutil_thread_pool_thread_detach(env->thread_pool, + worker_thread);*/ + /* we should not detach this, because, in the dual channel case + we should be able to terminate the thread before deleting the listener */ + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Thread pool not set in environment." + " Cannot invoke call non blocking"); + } +#else + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Threading not enabled." + " Cannot start separate listener"); + return AXIS2_FAILURE; +#endif + + tl_state = AXIS2_MALLOC(env->allocator, + sizeof(axis2_transport_listener_state_t)); + + if(!tl_state) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create transport listener state."); + } + else + { + tl_state->listener = listener; + tl_state->waiting_calls = 0; + listener_manager->listener_map[transport] = tl_state; + listener_manager->listener_thread[transport] = worker_thread; + } + } + } + } + } + + if(tl_state) + { + tl_state->waiting_calls++; + return AXIS2_SUCCESS; + } + else + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_listener_manager_stop( + axis2_listener_manager_t * listener_manager, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS transport) +{ + axis2_transport_listener_state_t *tl_state = NULL; + axis2_status_t status = AXIS2_FAILURE; + axutil_thread_t *listener_thread = NULL; + + tl_state = listener_manager->listener_map[transport]; + listener_thread = listener_manager->listener_thread[transport]; + + if(tl_state) + { + tl_state->waiting_calls--; + if(tl_state->waiting_calls == 0) + { + status = axis2_transport_receiver_stop(tl_state->listener, env); + if(status == AXIS2_SUCCESS) + listener_manager->listener_map[transport] = NULL; + } + } + + if(listener_thread) + { + axutil_thread_pool_exit_thread(env->thread_pool, listener_thread); + listener_manager->listener_thread[transport] = NULL; + } + + return status; +} + +AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL +axis2_listener_manager_get_reply_to_epr( + const axis2_listener_manager_t * listener_manager, + const axutil_env_t * env, + const axis2_char_t * svc_name, + const AXIS2_TRANSPORT_ENUMS transport) +{ + axis2_transport_listener_state_t *tl_state = NULL; + + tl_state = listener_manager->listener_map[transport]; + if(tl_state) + { + return axis2_transport_receiver_get_reply_to_epr(tl_state->listener, env, svc_name); + } + return NULL; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_listener_manager_free( + axis2_listener_manager_t * listener_manager, + const axutil_env_t * env) +{ + int i = 0; + + for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++) + { + if(listener_manager->listener_map[i]) + AXIS2_FREE(env->allocator, listener_manager->listener_map[i]); + } + + AXIS2_FREE(env->allocator, listener_manager); +} + +AXIS2_EXTERN axis2_conf_ctx_t *AXIS2_CALL +axis2_listener_manager_get_conf_ctx( + const axis2_listener_manager_t * listener_manager, + const axutil_env_t * env) +{ + return listener_manager->conf_ctx; +} + +void *AXIS2_THREAD_FUNC +axis2_listener_manager_worker_func( + axutil_thread_t * thd, + void *data) +{ + axis2_listener_manager_worker_func_args_t *args_list = NULL; + const axutil_env_t *th_env = NULL; + + args_list = (axis2_listener_manager_worker_func_args_t *)data; + if(!args_list) + return NULL; + + th_env = axutil_init_thread_env(args_list->env); + /* Start the protocol server. For examlle if protocol is http axis2_http_server_start function + * of the axis2_http_receiver is called. + */ + if(args_list->listener) + { + axis2_transport_receiver_start(args_list->listener, th_env); + } + return NULL; +} diff --git a/src/core/clientapi/op_client.c b/src/core/clientapi/op_client.c new file mode 100644 index 0000000..3ccb776 --- /dev/null +++ b/src/core/clientapi/op_client.c @@ -0,0 +1,1439 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include "axis2_callback_recv.h" +#include +#include +#include +#include +#include +#include +#include + +struct axis2_op_client +{ + axis2_svc_ctx_t *svc_ctx; + + axis2_options_t *options; + + axis2_op_ctx_t *op_ctx; + + axis2_callback_t *callback; + + axis2_bool_t completed; + + /* to hold the locally created async result */ + axis2_async_result_t *async_result; + + axis2_callback_recv_t *callback_recv; + + /** message exchange pattern */ + axis2_char_t *mep; + + axis2_char_t *soap_version_uri; + axutil_string_t *soap_action; + axis2_char_t *wsa_action; + axis2_bool_t reuse; + +}; + +typedef struct axis2_op_client_worker_func_args +{ + const axutil_env_t *env; + axis2_op_client_t *op_client; + axis2_callback_t *callback; + axis2_op_t *op; + axis2_msg_ctx_t *msg_ctx; +} axis2_op_client_worker_func_args_t; + +void *AXIS2_THREAD_FUNC axis2_op_client_worker_func( + axutil_thread_t * thd, + void *data); + +static axis2_char_t *AXIS2_CALL axis2_op_client_get_transport_from_url( + const axis2_char_t * url, + const axutil_env_t * env); + +AXIS2_EXTERN axis2_op_client_t *AXIS2_CALL +axis2_op_client_create( + const axutil_env_t * env, + axis2_op_t * op, + axis2_svc_ctx_t * svc_ctx, + axis2_options_t * options) +{ + axis2_op_client_t *op_client = NULL; + const axis2_char_t *mep_uri = NULL; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, op, NULL); + AXIS2_PARAM_CHECK(env->error, svc_ctx, NULL); + AXIS2_PARAM_CHECK(env->error, options, NULL); + + op_client = AXIS2_MALLOC(env->allocator, sizeof(axis2_op_client_t)); + if(!op_client) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create op client."); + return NULL; + } + + /** initialize data */ + op_client->callback = NULL; + op_client->completed = AXIS2_FALSE; + op_client->reuse = AXIS2_FALSE; + op_client->async_result = NULL; + op_client->callback_recv = NULL; + + op_client->options = options; + op_client->svc_ctx = svc_ctx; + + op_client->mep = NULL; + op_client->soap_version_uri = NULL; + op_client->soap_action = NULL; + op_client->wsa_action = NULL; + + op_client->op_ctx = axis2_op_ctx_create(env, op, op_client->svc_ctx); + if(!(op_client->op_ctx)) + { + axis2_op_client_free(op_client, env); + return NULL; + } + + mep_uri = axis2_op_get_msg_exchange_pattern(op, env); + + if(!mep_uri) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MEP_CANNOT_DETERMINE_MEP, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot find message exchange pattern uri."); + axis2_op_client_free(op_client, env); + return NULL; + } + + op_client->mep = axutil_strdup(env, mep_uri); + + op_client->soap_version_uri = axutil_strdup(env, AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI); + if(!(op_client->soap_version_uri)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create soap version uri."); + axis2_op_client_free(op_client, env); + return NULL; + } + + /** initialize parser for thread safety */ + axiom_xml_reader_init(); + return op_client; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_client_set_options( + axis2_op_client_t * op_client, + const axutil_env_t * env, + const axis2_options_t * options) +{ + if(op_client->options) + { + axis2_options_free(op_client->options, env); + } + op_client->options = (axis2_options_t *)options; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_options_t *AXIS2_CALL +axis2_op_client_get_options( + const axis2_op_client_t * op_client, + const axutil_env_t * env) +{ + return op_client->options; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_client_add_msg_ctx( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_msg_ctx_t * mc) +{ + axis2_msg_ctx_t *out_msg_ctx = NULL, *in_msg_ctx = NULL; + axis2_msg_ctx_t **msg_ctx_map = NULL; + + /* Don't use AXIS2_PARAM_CHECK to verify op_client, as it clobbers + env->error->status_code on no error destroying the information + therein that an error has already occurred. */ + if(!op_client) + { + if(axutil_error_get_status_code(env->error) == AXIS2_SUCCESS) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + } + return AXIS2_FAILURE; + } + /* mc message context pointer may be NULL, e.g., when no response message + is received */ + + if(op_client->op_ctx) + { + msg_ctx_map = axis2_op_ctx_get_msg_ctx_map(op_client->op_ctx, env); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "op_ctx is NULL, unable to continue"); + return AXIS2_FAILURE; + } + + if(msg_ctx_map) + { + out_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT]; + in_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN]; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "msg_ctx_map is NULL, unable to continue"); + return AXIS2_FAILURE; + } + + if(op_client->reuse) + { + /* This is the second invocation using the same service client, + so reset */ + if(out_msg_ctx) + { + axis2_msg_ctx_free(out_msg_ctx, env); + out_msg_ctx = NULL; + msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT] = NULL; + } + + if(in_msg_ctx) + { + axis2_msg_ctx_free(in_msg_ctx, env); + in_msg_ctx = NULL; + msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN] = NULL; + } + + axis2_op_ctx_set_complete(op_client->op_ctx, env, AXIS2_FALSE); + op_client->reuse = AXIS2_FALSE; + } + + if(out_msg_ctx && in_msg_ctx) + { + /* may be this is the second invocation using the same service clinet, + so reset */ + axis2_msg_ctx_free(out_msg_ctx, env); + out_msg_ctx = NULL; + msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT] = NULL; + axis2_msg_ctx_free(in_msg_ctx, env); + in_msg_ctx = NULL; + msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN] = NULL; + axis2_op_ctx_set_complete(op_client->op_ctx, env, AXIS2_FALSE); + } + + if(!out_msg_ctx) + { + msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT] = mc; + } + else + { + msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN] = mc; + axis2_op_ctx_set_complete(op_client->op_ctx, env, AXIS2_TRUE); + } + + if(out_msg_ctx && !mc) + { + axutil_property_t *dump_property; + axis2_char_t *dump_value = NULL; + if(!axis2_msg_ctx_get_doing_rest(out_msg_ctx, env)) + { + dump_property = axis2_msg_ctx_get_property(out_msg_ctx, env, AXIS2_DUMP_INPUT_MSG_TRUE); + if(dump_property) + { + dump_value = (axis2_char_t *)axutil_property_get_value(dump_property, env); + } + } + + if(axutil_strcmp(dump_value, AXIS2_VALUE_TRUE)) + { + axis2_msg_ctx_free(out_msg_ctx, env); + out_msg_ctx = NULL; + msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT] = NULL; + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_client_add_out_msg_ctx( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_msg_ctx_t * mc) +{ + axis2_msg_ctx_t **msg_ctx_map = NULL; + + msg_ctx_map = axis2_op_ctx_get_msg_ctx_map(op_client->op_ctx, env); + + if(msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT]) + { + axis2_msg_ctx_free(msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT], env); + } + msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT] = mc; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_client_add_in_msg_ctx( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_msg_ctx_t * mc) +{ + axis2_msg_ctx_t **msg_ctx_map = NULL; + + msg_ctx_map = axis2_op_ctx_get_msg_ctx_map(op_client->op_ctx, env); + + if(msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN]) + { + axis2_msg_ctx_free(msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN], env); + } + msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN] = mc; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_msg_ctx_t *AXIS2_CALL +axis2_op_client_get_msg_ctx( + const axis2_op_client_t * op_client, + const axutil_env_t * env, + const axis2_wsdl_msg_labels_t message_label) +{ + return axis2_op_ctx_get_msg_ctx(op_client->op_ctx, env, message_label); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_client_set_callback( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_callback_t * callback) +{ + if(op_client->callback) + { + axis2_callback_free(op_client->callback, env); + } + + op_client->callback = callback; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_callback_t *AXIS2_CALL +axis2_op_client_get_callback( + axis2_op_client_t * op_client, + const axutil_env_t * env) +{ + return op_client->callback; +} + +/* This function is called from service client irrespective of the message exchange pattern + * and whether one/two way channel used. + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_client_execute( + axis2_op_client_t * op_client, + const axutil_env_t * env, + const axis2_bool_t block) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_msg_ctx_t *msg_ctx = NULL; + + axis2_transport_out_desc_t *transport_out = NULL; + axis2_transport_in_desc_t *transport_in = NULL; + + axis2_status_t status = AXIS2_FAILURE; + axis2_op_t *op = NULL; + axis2_char_t *msg_id = NULL; + + if(op_client->completed) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Op client execute failed. Already completed."); + return AXIS2_FAILURE; + } + + conf_ctx = axis2_svc_ctx_get_conf_ctx(op_client->svc_ctx, env); + + msg_ctx = (axis2_msg_ctx_t *)axis2_op_client_get_msg_ctx(op_client, env, + AXIS2_WSDL_MESSAGE_LABEL_OUT); + + if(!msg_ctx) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Op client execute failed. Message context is not valid."); + return AXIS2_FAILURE; + } + + axis2_msg_ctx_set_options(msg_ctx, env, op_client->options); + + /** + if the transport to use for sending is not specified, try to find it + from the URL or the client option. + */ + transport_out = axis2_options_get_transport_out(op_client->options, env); + if(!transport_out) + { + axis2_endpoint_ref_t *to_epr = NULL; + axutil_property_t *property = NULL; + property = axis2_options_get_property(op_client->options, env, AXIS2_TARGET_EPR); + if(property) + { + to_epr = axutil_property_get_value(property, env); + } + + if(!to_epr) + { + to_epr = axis2_options_get_to(op_client->options, env); + } + + if(!to_epr) + { + to_epr = axis2_msg_ctx_get_to(msg_ctx, env); + } + + transport_out = axis2_op_client_infer_transport(op_client, env, to_epr); + } + + if(!transport_out) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Op client execute failed. Cannot find transport out."); + return AXIS2_FAILURE; + } + + if(!(axis2_msg_ctx_get_transport_out_desc(msg_ctx, env))) + { + axis2_msg_ctx_set_transport_out_desc(msg_ctx, env, transport_out); + } + + transport_in = axis2_options_get_transport_in(op_client->options, env); + if(!transport_in) + { + axis2_conf_ctx_t *conf_ctx = axis2_svc_ctx_get_conf_ctx(op_client->svc_ctx, env); + + if(conf_ctx) + { + axis2_conf_t *conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + transport_in = axis2_conf_get_transport_in(conf, env, + axis2_transport_out_desc_get_enum(transport_out, env)); + } + } + } + if(!transport_in) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Op client execute failed. Cannot find transport in."); + return AXIS2_FAILURE; + } + + if(!(axis2_msg_ctx_get_transport_in_desc(msg_ctx, env))) + { + axis2_msg_ctx_set_transport_in_desc(msg_ctx, env, transport_in); + } + + op = axis2_op_ctx_get_op(op_client->op_ctx, env); + + if(!op) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Op client execute failed. Cannot find operation."); + return AXIS2_FAILURE; + } + status = axis2_op_client_prepare_invocation(op_client, env, op, msg_ctx); + if(status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Op client execute failed. Preparing for invocation failed."); + return AXIS2_FAILURE; + } + msg_id = (axis2_char_t *)axutil_uuid_gen(env); + axis2_msg_ctx_set_message_id(msg_ctx, env, msg_id); + if(msg_id) + { + AXIS2_FREE(env->allocator, msg_id); + msg_id = NULL; + } + + /* If dual channel. */ + if(axis2_options_get_use_separate_listener(op_client->options, env)) + { + axis2_engine_t *engine = NULL; + + if(op_client->callback) + { + AXIS2_CALLBACK_RECV_ADD_CALLBACK(op_client->callback_recv, env, + axis2_msg_ctx_get_msg_id(msg_ctx, env), op_client->callback); + } + + axis2_msg_ctx_set_op_ctx(msg_ctx, env, axis2_op_find_op_ctx(op, env, msg_ctx, + op_client-> svc_ctx)); + axis2_msg_ctx_set_svc_ctx(msg_ctx, env, op_client->svc_ctx); + + /* send the message */ + engine = axis2_engine_create(env, conf_ctx); + if(!engine) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Op client execute failed due to engine creation failure."); + return AXIS2_FAILURE; + } + axis2_engine_send(engine, env, msg_ctx); + axis2_engine_free(engine, env); + } + else /* Same channel will be used irrespective of message exchange pattern. */ + { + if(block) + { + axis2_msg_ctx_t *response_mc = NULL; + + axis2_msg_ctx_set_svc_ctx(msg_ctx, env, op_client->svc_ctx); + axis2_msg_ctx_set_conf_ctx(msg_ctx, env, axis2_svc_ctx_get_conf_ctx( + op_client-> svc_ctx, env)); + axis2_msg_ctx_set_op_ctx(msg_ctx, env, op_client->op_ctx); + + /*Send the SOAP Message and receive a response */ + response_mc = axis2_op_client_two_way_send(env, msg_ctx); + if(!response_mc) + { + const axis2_char_t *mep = axis2_op_get_msg_exchange_pattern(op, env); + if(!(axutil_strcmp(mep, AXIS2_MEP_URI_OUT_ONLY)) || !(axutil_strcmp(mep, + AXIS2_MEP_URI_ROBUST_OUT_ONLY))) + { + if(env->error) + { + return env->error->status_code; + } + else + { + return AXIS2_FAILURE; + } + } + else + { + return AXIS2_FAILURE; + } + } + axis2_op_client_add_msg_ctx(op_client, env, response_mc); + } + else + { + axis2_op_client_worker_func_args_t *arg_list = NULL; + arg_list = AXIS2_MALLOC(env->allocator, sizeof(axis2_op_client_worker_func_args_t)); + if(!arg_list) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create op client worker function argument list."); + return AXIS2_FAILURE; + } + arg_list->env = env; + arg_list->op_client = op_client; + arg_list->callback = op_client->callback; + arg_list->op = op; + arg_list->msg_ctx = msg_ctx; +#ifdef AXIS2_SVR_MULTI_THREADED + if (env->thread_pool) + { + axutil_thread_t *worker_thread = NULL; + worker_thread = axutil_thread_pool_get_thread(env->thread_pool, + axis2_op_client_worker_func, + (void *) + arg_list); + if (!worker_thread) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Thread creation failed call invoke non blocking"); + } + else + { + axutil_thread_pool_thread_detach(env->thread_pool, + worker_thread); + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Thread pool not set in environment" + "Cannot invoke call non blocking"); + } +#else + axis2_op_client_worker_func(NULL, (void *)arg_list); +#endif + + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_client_reset( + axis2_op_client_t * op_client, + const axutil_env_t * env) +{ + if(!op_client->completed) + return AXIS2_FAILURE; + + op_client->completed = AXIS2_FALSE; + + op_client->op_ctx = NULL; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_client_complete( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_msg_ctx_t * mc) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_listener_manager_t *listener_manager = NULL; + AXIS2_TRANSPORT_ENUMS transport = AXIS2_TRANSPORT_ENUM_HTTP; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(mc, env); + + if(!conf_ctx) + return AXIS2_FAILURE; + + if(!listener_manager) + return AXIS2_FAILURE; + + return axis2_listener_manager_stop(listener_manager, env, transport); +} + +AXIS2_EXTERN axis2_op_ctx_t *AXIS2_CALL +axis2_op_client_get_operation_context( + const axis2_op_client_t * op_client, + const axutil_env_t * env) +{ + return op_client->op_ctx; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_op_client_free( + axis2_op_client_t * op_client, + const axutil_env_t * env) +{ + if(!op_client) + return; + + /*if(op_client->callback) + { + axis2_callback_free(op_client->callback, env); + }*/ + + if(op_client->op_ctx) + { + axis2_op_ctx_free(op_client->op_ctx, env); + op_client->op_ctx = NULL; + } + + if(op_client->soap_version_uri) + { + AXIS2_FREE(env->allocator, op_client->soap_version_uri); + } + + if(op_client->mep) + { + AXIS2_FREE(env->allocator, op_client->mep); + } + + if(axis2_options_get_xml_parser_reset(op_client->options, env)) + { + axiom_xml_reader_cleanup(); + } + + AXIS2_FREE(env->allocator, op_client); +} + +/* This function is the thread worker function for the single channel non blocking case. Here + * being non-blocking implies that message is two way. */ +void *AXIS2_THREAD_FUNC +axis2_op_client_worker_func( + axutil_thread_t * thd, + void *data) +{ + axis2_op_client_worker_func_args_t *args_list = NULL; + axis2_op_ctx_t *op_ctx = NULL; + axis2_msg_ctx_t *response = NULL; + axutil_env_t *th_env = NULL; + axutil_thread_pool_t *th_pool = NULL; + + args_list = (axis2_op_client_worker_func_args_t *)data; + if(!args_list) + { + return NULL; + } + + th_env = axutil_init_thread_env(args_list->env); + + op_ctx = axis2_op_ctx_create(th_env, args_list->op, args_list->op_client->svc_ctx); + if(!op_ctx) + { + return NULL; + } + axis2_msg_ctx_set_op_ctx(args_list->msg_ctx, th_env, op_ctx); + axis2_msg_ctx_set_svc_ctx(args_list->msg_ctx, th_env, args_list->op_client->svc_ctx); + + /* send the request and wait for response */ + response = axis2_op_client_two_way_send(th_env, args_list->msg_ctx); + + /* We do not need to handle the NULL response here because this thread function is called only + * in the single channel non blocking case which, imply this is two way message by design. + */ + + /* Here after the code is a subset of what callback receiver do in dual channel case.*/ + axis2_op_client_add_msg_ctx(args_list->op_client, th_env, response); + args_list->op_client->async_result = axis2_async_result_create(th_env, response); + + if(args_list->callback) + { + axis2_callback_invoke_on_complete(args_list->callback, th_env, + args_list->op_client->async_result); + + axis2_callback_set_complete(args_list->callback, th_env, AXIS2_TRUE); + } + + /* Clean up memory */ + axis2_async_result_free(args_list->op_client->async_result, th_env); + + axis2_op_ctx_free(op_ctx, th_env); + + th_pool = th_env->thread_pool; + + AXIS2_FREE(th_env->allocator, args_list); + + if(th_env) + { + axutil_free_thread_env(th_env); + th_env = NULL; + } + axutil_thread_pool_exit_thread(th_pool, thd); + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_client_set_callback_recv( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_callback_recv_t * callback_recv) +{ + op_client->callback_recv = callback_recv; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_string_t *AXIS2_CALL +axis2_op_client_get_soap_action( + const axis2_op_client_t * op_client, + const axutil_env_t * env) +{ + return op_client->soap_action; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_client_prepare_invocation( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_op_t * op, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_svc_t *svc = NULL; + + AXIS2_PARAM_CHECK(env->error, op, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + /* make sure operation's MEP is the same as given MEP */ + if(op_client->mep) + { + if(axutil_strcmp(op_client->mep, axis2_op_get_msg_exchange_pattern(op, env))) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MEP_MISMATCH_IN_MEP_CLIENT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Message exchange pattern of op client and operation are different."); + return AXIS2_FAILURE; + } + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MEP_CANNOT_BE_NULL_IN_MEP_CLIENT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Message exchange pattern of op client is not valid."); + return AXIS2_FAILURE; + } + /* If operation has a parent service get it */ + svc = axis2_op_get_parent(op, env); + if(svc) + { + axis2_svc_ctx_set_svc(op_client->svc_ctx, env, svc); + } + else + { + svc = axis2_svc_ctx_get_svc(op_client->svc_ctx, env); + if(svc) + { + axis2_op_t *temp_op = NULL; + const axutil_qname_t *op_qname = axis2_op_get_qname(op, env); + temp_op = axis2_svc_get_op_with_qname(svc, env, op_qname); + if(!temp_op) + { + axis2_svc_add_op(svc, env, op); + } + } + } + + if(op_client->wsa_action) + { + axis2_msg_ctx_set_wsa_action(msg_ctx, env, op_client->wsa_action); + } + + if(op_client->soap_action) + { + axis2_msg_ctx_set_soap_action(msg_ctx, env, op_client->soap_action); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL +axis2_op_client_prepare_soap_envelope( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axiom_node_t * to_send) +{ + axis2_msg_ctx_t *msg_ctx = NULL; + axiom_soap_envelope_t *envelope = NULL; + int soap_version = AXIOM_SOAP12; + + if(op_client->svc_ctx) + { + msg_ctx = axis2_msg_ctx_create(env, axis2_svc_ctx_get_conf_ctx(op_client-> svc_ctx, env), + NULL, NULL); + } + + if(!msg_ctx) + { + return NULL; + } + + if(op_client->soap_version_uri) + { + if(!(axutil_strcmp(op_client->soap_version_uri, AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI))) + soap_version = AXIOM_SOAP11; + else + soap_version = AXIOM_SOAP12; + } + + envelope = axiom_soap_envelope_create_default_soap_envelope(env, soap_version); + if(!envelope) + { + return NULL; + } + + if(to_send) + { + axiom_soap_body_t *soap_body = NULL; + soap_body = axiom_soap_envelope_get_body(envelope, env); + if(soap_body) + { + axiom_node_t *node = NULL; + node = axiom_soap_body_get_base_node(soap_body, env); + if(node) + { + axiom_node_add_child(node, env, to_send); + } + } + } + + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, envelope); + + return msg_ctx; +} + +AXIS2_EXTERN axis2_transport_out_desc_t *AXIS2_CALL +axis2_op_client_infer_transport( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_endpoint_ref_t * epr) +{ + axis2_char_t *transport = NULL; + axis2_transport_out_desc_t *transport_out_desc = NULL; + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + AXIS2_TRANSPORT_ENUMS transport_enum = AXIS2_TRANSPORT_ENUM_MAX; + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Start:axis2_op_client_infer_transport"); + + /* We first try the client option */ + transport_enum = axis2_options_get_sender_transport_protocol(op_client->options, env); + if(transport_enum == AXIS2_TRANSPORT_ENUM_MAX) + { + /* If we couldn't find the transport we default to HTTP */ + transport_enum = AXIS2_TRANSPORT_ENUM_HTTP; + /* We try to infer transport from the url */ + if(epr) + { + const axis2_char_t *to_url = axis2_endpoint_ref_get_address(epr, env); + + transport = axis2_op_client_get_transport_from_url(to_url, env); + } + + if(transport) + { + if(!axutil_strcmp(transport, AXIS2_TRANSPORT_HTTP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_HTTP; + } + else if(!axutil_strcmp(transport, AXIS2_TRANSPORT_HTTPS)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_HTTPS; + } + else if(!axutil_strcmp(transport, AXIS2_TRANSPORT_XMPP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_XMPP; + } + else if(!axutil_strcmp(transport, AXIS2_TRANSPORT_TCP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_TCP; + } + else if(!axutil_strcmp(transport, AXIS2_TRANSPORT_AMQP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_AMQP; + } + else if(!axutil_strcmp(transport, AXIS2_TRANSPORT_UDP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_UDP; + } + + AXIS2_FREE(env->allocator, transport); + transport = NULL; + } + } + conf_ctx = axis2_svc_ctx_get_conf_ctx(op_client->svc_ctx, env); + if(conf_ctx) + { + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + transport_out_desc = axis2_conf_get_transport_out(conf, env, transport_enum); + } + } + if(!transport_out_desc) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot infer transport"); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CANNOT_INFER_TRANSPORT, AXIS2_FAILURE); + } + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "End:axis2_op_client_infer_transport"); + return transport_out_desc; +} + +AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL +axis2_op_client_create_default_soap_envelope( + axis2_op_client_t * op_client, + const axutil_env_t * env) +{ + axiom_soap_envelope_t *envelope = NULL; + + if(!(axutil_strcmp(AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI, op_client->soap_version_uri))) + { + envelope = axiom_soap_envelope_create_with_soap_version_prefix(env, AXIOM_SOAP12, NULL); + } + + if(!(axutil_strcmp(AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI, op_client->soap_version_uri))) + { + envelope = axiom_soap_envelope_create_with_soap_version_prefix(env, AXIOM_SOAP11, NULL); + } + return envelope; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_client_engage_module( + axis2_op_client_t * op_client, + const axutil_env_t * env, + const axutil_qname_t * qname) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + + if(op_client->svc_ctx) + { + conf_ctx = axis2_svc_ctx_get_conf_ctx(op_client->svc_ctx, env); + if(conf_ctx) + { + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + /*if it is already engaged do not engage it again */ + if(!(axis2_conf_is_engaged(conf, env, qname))) + { + return axis2_conf_engage_module(conf, env, qname); + } + } + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_client_set_soap_version_uri( + axis2_op_client_t * op_client, + const axutil_env_t * env, + const axis2_char_t * soap_version_uri) +{ + if(op_client->soap_version_uri) + { + AXIS2_FREE(env->allocator, op_client->soap_version_uri); + op_client->soap_version_uri = NULL; + } + + if(soap_version_uri) + { + op_client->soap_version_uri = axutil_strdup(env, soap_version_uri); + if(!(op_client->soap_version_uri)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create soap version uri."); + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_client_set_soap_action( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axutil_string_t * soap_action) +{ + if(op_client->soap_action) + { + axutil_string_free(op_client->soap_action, env); + op_client->soap_action = NULL; + } + + if(soap_action) + { + op_client->soap_action = axutil_string_clone(soap_action, env); + if(!(op_client->soap_action)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create soap action."); + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_client_set_wsa_action( + axis2_op_client_t * op_client, + const axutil_env_t * env, + const axis2_char_t * wsa_action) +{ + if(op_client->wsa_action) + { + AXIS2_FREE(env->allocator, op_client->wsa_action); + op_client->wsa_action = NULL; + } + + if(wsa_action) + { + op_client->wsa_action = axutil_strdup(env, wsa_action); + if(!(op_client->wsa_action)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create wsa action."); + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +static axis2_char_t *AXIS2_CALL +axis2_op_client_get_transport_from_url( + const axis2_char_t * url, + const axutil_env_t * env) +{ + axis2_char_t *transport = NULL; + const axis2_char_t *start = NULL; + const axis2_char_t *end = NULL; + AXIS2_PARAM_CHECK(env->error, url, NULL); + start = url; + end = url; + while((*end) && (*end) != ':') + end++; + + if((*end) == ':') + { + const axis2_char_t *c = NULL; + transport = AXIS2_MALLOC(env->allocator, (end - start + 1) * sizeof(char)); + if(!transport) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create transport protocol identifier."); + return NULL; + } + + for(c = start; c < end; c++) + transport[c - start] = *c; + transport[c - start] = '\0'; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "URL is malformed or does not contain a transport protocol"); + } + return transport; +} + +AXIS2_EXTERN axis2_svc_ctx_t *AXIS2_CALL +axis2_op_client_get_svc_ctx( + const axis2_op_client_t * op_client, + const axutil_env_t * env) +{ + return op_client->svc_ctx; +} + +/* This function is called only for single channel invocations */ +AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL +axis2_op_client_two_way_send( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_engine_t *engine = NULL; + axis2_status_t status = AXIS2_SUCCESS; + axis2_msg_ctx_t *response = NULL; + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_op_t *op = NULL; + axiom_soap_envelope_t *response_envelope = NULL; + axutil_property_t *property = NULL; + long index = -1; + axis2_bool_t wait_indefinitely = AXIS2_FALSE; + axis2_char_t *mep = NULL; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + engine = axis2_engine_create(env, conf_ctx); + if(!engine) + return NULL; + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_TIMEOUT_IN_SECONDS); + if(property) + { + axis2_char_t *value = axutil_property_get_value(property, env); + if(value) + index = AXIS2_ATOI(value); + if(index == -1) + { + wait_indefinitely = AXIS2_TRUE; + index = 1; + } + } + + status = axis2_engine_send(engine, env, msg_ctx); + + axis2_engine_free(engine, env); + engine = NULL; + + if(status != AXIS2_SUCCESS) + { + if(AXIS2_ERROR_GET_STATUS_CODE(env->error) == AXIS2_SUCCESS) + { + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_FAILURE); + } + return NULL; + } + + op = axis2_msg_ctx_get_op(msg_ctx, env); + if(op) + { + mep = (axis2_char_t *)axis2_op_get_msg_exchange_pattern(op, env); + } + + if(!mep) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MEP_CANNOT_DETERMINE_MEP, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot determine message exchange pattern."); + return NULL; + } + + /* handle one way non robust case */ + if(!(axutil_strcmp(mep, AXIS2_MEP_URI_OUT_ONLY))) + { + return NULL; + } + + /* create the response */ + response = axis2_msg_ctx_create(env, conf_ctx, + axis2_msg_ctx_get_transport_in_desc(msg_ctx, env), axis2_msg_ctx_get_transport_out_desc( + msg_ctx, env)); + if(!response) + return NULL; + + axis2_msg_ctx_set_server_side(response, env, AXIS2_FALSE); + axis2_msg_ctx_set_conf_ctx(response, env, axis2_msg_ctx_get_conf_ctx(msg_ctx, env)); + axis2_msg_ctx_set_svc_grp_ctx(response, env, axis2_msg_ctx_get_svc_grp_ctx(msg_ctx, env)); + + /* If request is REST we assume the response is REST, so set the variable */ + axis2_msg_ctx_set_doing_rest(response, env, axis2_msg_ctx_get_doing_rest(msg_ctx, env)); + axis2_msg_ctx_set_status_code(response, env, axis2_msg_ctx_get_status_code(msg_ctx, env)); + + if(op) + { + axis2_op_register_op_ctx(op, env, response, axis2_msg_ctx_get_op_ctx(msg_ctx, env)); + } + + /* set response envelope */ + if(engine) + { + axis2_engine_free(engine, env); + engine = NULL; + } + response_envelope = axis2_msg_ctx_get_response_soap_envelope(msg_ctx, env); + if(response_envelope) + { + axis2_msg_ctx_set_soap_envelope(response, env, response_envelope); + engine = axis2_engine_create(env, conf_ctx); + if(engine) + { + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HANDLER_ALREADY_VISITED); + if(property) + { + axis2_char_t *value = axutil_property_get_value(property, env); + if(!axutil_strcmp(AXIS2_VALUE_TRUE, value)) + { + if(engine) + { + axis2_engine_free(engine, env); + } + return response; + } + } + status = axis2_engine_receive(engine, env, response); + } + } + else + { + while(!response_envelope && index > 0) + { + /*wait till the response arrives */ + AXIS2_SLEEP(1); + if(!wait_indefinitely) + index--; + response_envelope = axis2_msg_ctx_get_response_soap_envelope(msg_ctx, env); + } + /* if it is a two way message, then the status should be in error, + else it is a one way message */ + if(response_envelope) + { + axis2_msg_ctx_set_soap_envelope(response, env, response_envelope); + /* There could be a scenariao where the message has already passed + * through the incoming phases. eg. Reliable Messaging 1.0 two + * way single channel + */ + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HANDLER_ALREADY_VISITED); + if(property) + { + axis2_char_t *value = axutil_property_get_value(property, env); + if(!axutil_strcmp(AXIS2_VALUE_TRUE, value)) + { + return response; + } + } + engine = axis2_engine_create(env, conf_ctx); + if(engine) + { + status = axis2_engine_receive(engine, env, response); + if(status != AXIS2_SUCCESS) + return NULL; + } + } + else + { + if(AXIS2_ERROR_GET_STATUS_CODE(env->error) != AXIS2_SUCCESS) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_BLOCKING_INVOCATION_EXPECTS_RESPONSE, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Response is not valid. Blocking invocation expects response."); + if(engine) + { + axis2_engine_free(engine, env); + engine = NULL; + } + axis2_msg_ctx_free(response, env); + return NULL; + } + } + } + + /*following is no longer valid. Just keeping for others view*/ + + /* property is NULL, and we set null for AXIS2_TRANSPORT_IN in msg_ctx to + avoid double free of this property */ + /*axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_TRANSPORT_IN, property);*/ + + if(engine) + { + axis2_engine_free(engine, env); + engine = NULL; + } + if(!(axutil_strcmp(mep, AXIS2_MEP_URI_ROBUST_OUT_ONLY)) && response) + { + if(axis2_msg_ctx_get_doing_rest(response, env) && axis2_msg_ctx_get_status_code(response, + env) >= 400) + { + /* All HTTP 4xx and 5xx status codes are treated as errors */ + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "HTTP client transport error."); + return NULL; + } + switch(axis2_msg_ctx_get_status_code(response, env)) + { + /* In a SOAP request HTTP status code 500 is used for errors */ + case 500: + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "HTTP client transport error."); + break; + case 0: + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_BLOCKING_INVOCATION_EXPECTS_RESPONSE, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Response is not valid. Blocking invocation expects response."); + break; + case -1: + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_BLOCKING_INVOCATION_EXPECTS_RESPONSE, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Response is not valid. Blocking invocation expects response."); + break; + } + + if(response) + { + axis2_msg_ctx_free(response, env); + } + + return NULL; + } + return response; +} + +AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL +axis2_op_client_receive( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_engine_t *engine = NULL; + axis2_status_t status = AXIS2_SUCCESS; + axis2_msg_ctx_t *response = NULL; + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_op_t *op = NULL; + axiom_soap_envelope_t *response_envelope = NULL; + axutil_property_t *property = NULL; + + /* create the response */ + response = axis2_msg_ctx_create(env, conf_ctx, + axis2_msg_ctx_get_transport_in_desc(msg_ctx, env), axis2_msg_ctx_get_transport_out_desc( + msg_ctx, env)); + if(!response) + return NULL; + + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_TRANSPORT_IN); + if(property) + { + axis2_msg_ctx_set_property(response, env, AXIS2_TRANSPORT_IN, property); + property = NULL; + } + + op = axis2_msg_ctx_get_op(msg_ctx, env); + if(op) + { + axis2_op_register_op_ctx(op, env, response, axis2_msg_ctx_get_op_ctx(msg_ctx, env)); + } + axis2_msg_ctx_set_server_side(response, env, AXIS2_FALSE); + axis2_msg_ctx_set_conf_ctx(response, env, axis2_msg_ctx_get_conf_ctx(msg_ctx, env)); + axis2_msg_ctx_set_svc_grp_ctx(response, env, axis2_msg_ctx_get_svc_grp_ctx(msg_ctx, env)); + + /* If request is REST we assume the response is REST, so set the variable */ + axis2_msg_ctx_set_doing_rest(response, env, axis2_msg_ctx_get_doing_rest(msg_ctx, env)); + + response_envelope = axis2_msg_ctx_get_response_soap_envelope(msg_ctx, env); + if(response_envelope) + { + axis2_msg_ctx_set_soap_envelope(response, env, response_envelope); + if(engine) + { + axis2_engine_free(engine, env); + engine = NULL; + } + + engine = axis2_engine_create(env, conf_ctx); + if(engine) + { + status = axis2_engine_receive(engine, env, response); + if(status != AXIS2_SUCCESS) + { + return NULL; + } + } + + } + else + { + /* if it is a two way message, then the status should be in error, + else it is a one way message */ + if(AXIS2_ERROR_GET_STATUS_CODE(env->error) != AXIS2_SUCCESS) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_BLOCKING_INVOCATION_EXPECTS_RESPONSE, + AXIS2_FAILURE); + return NULL; + } + } + + /* property is NULL, and we set null for AXIS2_TRANSPORT_IN in msg_ctx to + avoid double free of this property */ + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_TRANSPORT_IN, property); + + if(engine) + { + axis2_engine_free(engine, env); + engine = NULL; + } + return response; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_op_client_set_reuse( + axis2_op_client_t * op_client, + const axutil_env_t * env, + axis2_bool_t reuse) +{ + op_client->reuse = reuse; +} diff --git a/src/core/clientapi/options.c b/src/core/clientapi/options.c new file mode 100644 index 0000000..26c5d33 --- /dev/null +++ b/src/core/clientapi/options.c @@ -0,0 +1,1068 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +struct axis2_options +{ + + /** parent options */ + axis2_options_t *parent; + + axutil_hash_t *properties; + + axis2_char_t *soap_version_uri; + + int soap_version; + + long timeout_in_milli_seconds; + + axis2_bool_t use_separate_listener; + + /** addressing specific properties */ + axis2_msg_info_headers_t *msg_info_headers; + + axis2_transport_receiver_t *receiver; + + axis2_transport_in_desc_t *transport_in; + + AXIS2_TRANSPORT_ENUMS transport_in_protocol; + + /** for sending and receiving messages */ + axis2_transport_out_desc_t *transport_out; + AXIS2_TRANSPORT_ENUMS sender_transport_protocol; + + axis2_bool_t manage_session; + axis2_bool_t enable_mtom; + axutil_string_t *soap_action; + axis2_bool_t xml_parser_reset; +}; + +AXIS2_EXTERN axis2_options_t *AXIS2_CALL +axis2_options_create( + const axutil_env_t * env) +{ + axis2_options_t *options = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + options = AXIS2_MALLOC(env->allocator, sizeof(axis2_options_t)); + if(!options) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create options."); + return NULL; + } + + options->parent = NULL; + options->properties = NULL; + options->soap_version_uri = NULL; + options->timeout_in_milli_seconds = -1; + options->use_separate_listener = -1; + options->receiver = NULL; + options->transport_in = NULL; + options->transport_in_protocol = AXIS2_TRANSPORT_ENUM_MAX; + options->transport_out = NULL; + options->sender_transport_protocol = AXIS2_TRANSPORT_ENUM_MAX; + options->manage_session = -1; + options->soap_version = AXIOM_SOAP12; + options->enable_mtom = AXIS2_FALSE; + options->soap_action = NULL; + options->xml_parser_reset = AXIS2_TRUE; + + options->msg_info_headers = axis2_msg_info_headers_create(env, NULL, NULL); + if(!options->msg_info_headers) + { + axis2_options_free(options, env); + return NULL; + } + + options->properties = axutil_hash_make(env); + if(!options->properties) + { + axis2_options_free(options, env); + return NULL; + } + + return options; +} + +AXIS2_EXTERN axis2_options_t *AXIS2_CALL +axis2_options_create_with_parent( + const axutil_env_t * env, + axis2_options_t * parent) +{ + + axis2_options_t *options = NULL; + + options = axis2_options_create(env); + + if(options) + { + options->parent = parent; + } + return options; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_options_get_action( + const axis2_options_t * options, + const axutil_env_t * env) +{ + const axis2_char_t *action = NULL; + action = axis2_msg_info_headers_get_action(options->msg_info_headers, env); + + if(!action && options->parent) + { + return axis2_options_get_action(options->parent, env); + } + + return action; +} + +AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL +axis2_options_get_fault_to( + const axis2_options_t * options, + const axutil_env_t * env) +{ + axis2_endpoint_ref_t *fault_to = NULL; + + fault_to = axis2_msg_info_headers_get_fault_to(options->msg_info_headers, env); + + if(!fault_to && options->parent) + { + return axis2_options_get_fault_to(options->parent, env); + } + + return fault_to; +} + +AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL +axis2_options_get_from( + const axis2_options_t * options, + const axutil_env_t * env) +{ + axis2_endpoint_ref_t *from = NULL; + + from = axis2_msg_info_headers_get_from(options->msg_info_headers, env); + + if(!from && options->parent) + { + return axis2_options_get_from(options->parent, env); + } + + return from; +} + +AXIS2_EXTERN axis2_transport_receiver_t *AXIS2_CALL +axis2_options_get_transport_receiver( + const axis2_options_t * options, + const axutil_env_t * env) +{ + if(!options->receiver && options->parent) + { + return axis2_options_get_transport_receiver(options->parent, env); + } + + return options->receiver; +} + +AXIS2_EXTERN axis2_transport_in_desc_t *AXIS2_CALL +axis2_options_get_transport_in( + const axis2_options_t * options, + const axutil_env_t * env) +{ + if(!options->transport_in && options->parent) + { + return axis2_options_get_transport_in(options->parent, env); + } + + return options->transport_in; +} + +AXIS2_EXTERN AXIS2_TRANSPORT_ENUMS AXIS2_CALL +axis2_options_get_transport_in_protocol( + const axis2_options_t * options, + const axutil_env_t * env) +{ + if(options->parent) + { + return axis2_options_get_transport_in_protocol(options->parent, env); + } + + return options->transport_in_protocol; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_options_get_message_id( + const axis2_options_t * options, + const axutil_env_t * env) +{ + const axis2_char_t *message_id = NULL; + + message_id = axis2_msg_info_headers_get_message_id(options->msg_info_headers, env); + + if(!message_id && options->parent) + { + return axis2_options_get_message_id(options->parent, env); + } + + return message_id; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_options_get_properties( + const axis2_options_t * options, + const axutil_env_t * env) +{ + if(!axutil_hash_count(options->properties) && options->parent) + { + return axis2_options_get_properties(options->parent, env); + } + + return options->properties; +} + +AXIS2_EXTERN void *AXIS2_CALL +axis2_options_get_property( + const axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * key) +{ + void *property = NULL; + + property = axutil_hash_get(options->properties, key, AXIS2_HASH_KEY_STRING); + + if(!property && options->parent) + { + return axis2_options_get_property(options->parent, env, key); + } + + return property; +} + +AXIS2_EXTERN axis2_relates_to_t *AXIS2_CALL +axis2_options_get_relates_to( + const axis2_options_t * options, + const axutil_env_t * env) +{ + axis2_relates_to_t *relates_to = NULL; + + relates_to = axis2_msg_info_headers_get_relates_to(options->msg_info_headers, env); + + if(!relates_to && options->parent) + { + return axis2_options_get_relates_to(options->parent, env); + } + + return relates_to; +} + +AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL +axis2_options_get_reply_to( + const axis2_options_t * options, + const axutil_env_t * env) +{ + axis2_endpoint_ref_t *reply_to = NULL; + + reply_to = axis2_msg_info_headers_get_reply_to(options->msg_info_headers, env); + + if(!reply_to && options->parent) + { + return axis2_options_get_reply_to(options->parent, env); + } + + return reply_to; +} + +AXIS2_EXTERN axis2_transport_out_desc_t *AXIS2_CALL +axis2_options_get_transport_out( + const axis2_options_t * options, + const axutil_env_t * env) +{ + if(!options->transport_out && options->parent) + { + return axis2_options_get_transport_out(options->parent, env); + } + + return options->transport_out; +} + +AXIS2_EXTERN AXIS2_TRANSPORT_ENUMS AXIS2_CALL +axis2_options_get_sender_transport_protocol( + const axis2_options_t * options, + const axutil_env_t * env) +{ + if(options->parent) + { + return axis2_options_get_sender_transport_protocol(options->parent, env); + } + + return options->sender_transport_protocol; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_options_get_soap_version_uri( + const axis2_options_t * options, + const axutil_env_t * env) +{ + if(!options->soap_version_uri && options->parent) + { + return axis2_options_get_soap_version_uri(options->parent, env); + } + + if(options->soap_version_uri) + { + return options->soap_version_uri; + } + return AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + +} + +AXIS2_EXTERN long AXIS2_CALL +axis2_options_get_timeout_in_milli_seconds( + const axis2_options_t * options, + const axutil_env_t * env) +{ + if(options->timeout_in_milli_seconds == -1) + { + if(options->parent) + { + return axis2_options_get_timeout_in_milli_seconds(options->parent, env); + } + else + { + return AXIS2_DEFAULT_TIMEOUT_MILLISECONDS; + } + } + + return options->timeout_in_milli_seconds; +} + +AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL +axis2_options_get_to( + const axis2_options_t * options, + const axutil_env_t * env) +{ + axis2_endpoint_ref_t *to = NULL; + + to = axis2_msg_info_headers_get_to(options->msg_info_headers, env); + + if(!to && options->parent) + { + return axis2_options_get_to(options->parent, env); + } + + return to; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_options_get_use_separate_listener( + const axis2_options_t * options, + const axutil_env_t * env) +{ + if(options->use_separate_listener == -1) + { + if(options->parent) + { + return axis2_options_get_use_separate_listener(options->parent, env); + } + else + { + return AXIS2_FALSE; + } + } + + return options->use_separate_listener; +} + +AXIS2_EXTERN axis2_options_t *AXIS2_CALL +axis2_options_get_parent( + const axis2_options_t * options, + const axutil_env_t * env) +{ + return options->parent; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_parent( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_options_t * parent) +{ + options->parent = (axis2_options_t *)parent; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_action( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * action) +{ + axis2_msg_info_headers_set_action(options->msg_info_headers, env, action); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_fault_to( + axis2_options_t * options, + const axutil_env_t * env, + axis2_endpoint_ref_t * fault_to) +{ + axis2_msg_info_headers_set_fault_to(options->msg_info_headers, env, fault_to); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_from( + axis2_options_t * options, + const axutil_env_t * env, + axis2_endpoint_ref_t * from) +{ + axis2_msg_info_headers_set_from(options->msg_info_headers, env, from); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_to( + axis2_options_t * options, + const axutil_env_t * env, + axis2_endpoint_ref_t * to) +{ + axis2_msg_info_headers_set_to(options->msg_info_headers, env, to); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_transport_receiver( + axis2_options_t * options, + const axutil_env_t * env, + axis2_transport_receiver_t * receiver) +{ + options->receiver = receiver; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_transport_in( + axis2_options_t * options, + const axutil_env_t * env, + axis2_transport_in_desc_t * transport_in) +{ + options->transport_in = transport_in; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_transport_in_protocol( + axis2_options_t * options, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS transport_in_protocol) +{ + options->transport_in_protocol = transport_in_protocol; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_message_id( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * message_id) +{ + axis2_msg_info_headers_set_message_id(options->msg_info_headers, env, message_id); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_properties( + axis2_options_t * options, + const axutil_env_t * env, + axutil_hash_t * properties) +{ + if(options->properties) + { + axutil_hash_free(options->properties, env); + } + options->properties = properties; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_property( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * property_key, + const void *property) +{ + axutil_hash_set(options->properties, property_key, AXIS2_HASH_KEY_STRING, property); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_relates_to( + axis2_options_t * options, + const axutil_env_t * env, + axis2_relates_to_t * relates_to) +{ + axis2_msg_info_headers_set_relates_to(options->msg_info_headers, env, relates_to); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_reply_to( + axis2_options_t * options, + const axutil_env_t * env, + axis2_endpoint_ref_t * reply_to) +{ + axis2_msg_info_headers_set_reply_to(options->msg_info_headers, env, reply_to); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_transport_out( + axis2_options_t * options, + const axutil_env_t * env, + axis2_transport_out_desc_t * transport_out) +{ + options->transport_out = transport_out; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_sender_transport( + axis2_options_t * options, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS sender_transport, + axis2_conf_t * conf) +{ + options->transport_out = axis2_conf_get_transport_out(conf, env, sender_transport); + + if(!options->transport_out) + { + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_soap_version_uri( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * soap_version_uri) +{ + if(options->soap_version_uri) + { + AXIS2_FREE(env->allocator, options->soap_version_uri); + options->soap_version_uri = NULL; + } + + if(soap_version_uri) + { + options->soap_version_uri = axutil_strdup(env, soap_version_uri); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_timeout_in_milli_seconds( + axis2_options_t * options, + const axutil_env_t * env, + const long timeout_in_milli_seconds) +{ + options->timeout_in_milli_seconds = timeout_in_milli_seconds; + /* set the property AXIS2_HTTP_CONNECTION_TIMEOUT, + * to be picked up by http_sender + */ + if(options->timeout_in_milli_seconds > 0) + { + axis2_char_t time_str[19]; /* supports 18 digit timeout */ + axutil_property_t *property = axutil_property_create(env); + sprintf(time_str, "%ld", options->timeout_in_milli_seconds); + if(property) + { + axutil_property_set_scope(property, env, AXIS2_SCOPE_REQUEST); + axutil_property_set_value(property, env, axutil_strdup(env, time_str)); + axis2_options_set_property(options, env, AXIS2_HTTP_CONNECTION_TIMEOUT, property); + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_transport_info( + axis2_options_t * options, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS sender_transport, + const AXIS2_TRANSPORT_ENUMS receiver_transport, + const axis2_bool_t use_separate_listener) +{ + /* + here we check for the legal combination + */ + if(!use_separate_listener) + { + if(sender_transport != receiver_transport) + { + return AXIS2_FAILURE; + } + } + else + { + axis2_options_set_use_separate_listener(options, env, use_separate_listener); + } + axis2_options_set_transport_in_protocol(options, env, receiver_transport); + options->sender_transport_protocol = sender_transport; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_use_separate_listener( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_bool_t use_separate_listener) +{ + axutil_property_t *property = NULL; + + options->use_separate_listener = use_separate_listener; + + if(use_separate_listener) + { + property = axutil_property_create(env); + axutil_property_set_value(property, env, axutil_strdup(env, AXIS2_VALUE_TRUE)); + axis2_options_set_property(options, env, AXIS2_USE_SEPARATE_LISTENER, property); + } + else + { + property = axutil_property_create(env); + axutil_property_set_value(property, env, axutil_strdup(env, AXIS2_VALUE_FALSE)); + axis2_options_set_property(options, env, AXIS2_USE_SEPARATE_LISTENER, property); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_add_reference_parameter( + axis2_options_t * options, + const axutil_env_t * env, + axiom_node_t * reference_parameter) +{ + axis2_msg_info_headers_add_ref_param(options->msg_info_headers, env, reference_parameter); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_manage_session( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_bool_t manage_session) +{ + options->manage_session = manage_session; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_options_get_manage_session( + const axis2_options_t * options, + const axutil_env_t * env) +{ + if(options->manage_session == -1) + { + if(options->parent) + { + return axis2_options_get_manage_session(options->parent, env); + } + else + { + return AXIS2_FALSE; + } + } + + return options->manage_session; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_msg_info_headers( + axis2_options_t * options, + const axutil_env_t * env, + axis2_msg_info_headers_t * msg_info_headers) +{ + if(options->msg_info_headers) + { + axis2_msg_info_headers_free(options->msg_info_headers, env); + } + + options->msg_info_headers = msg_info_headers; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_msg_info_headers_t *AXIS2_CALL +axis2_options_get_msg_info_headers( + const axis2_options_t * options, + const axutil_env_t * env) +{ + return options->msg_info_headers; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_options_free( + axis2_options_t * options, + const axutil_env_t * env) +{ + if(options->properties) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + const void *key = NULL; + for(hi = axutil_hash_first(options->properties, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_property_t *property = NULL; + + axutil_hash_this(hi, &key, NULL, &val); + property = (axutil_property_t *)val; + + if(property) + { + axutil_property_free(property, env); + } + } + axutil_hash_free(options->properties, env); + } + + if(options->soap_version_uri) + { + AXIS2_FREE(env->allocator, options->soap_version_uri); + } + + if(options->msg_info_headers) + { + axis2_msg_info_headers_free(options->msg_info_headers, env); + } + + if(options->soap_action) + { + axutil_string_free(options->soap_action, env); + } + + AXIS2_FREE(env->allocator, options); +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_options_get_soap_version( + const axis2_options_t * options, + const axutil_env_t * env) +{ + return options->soap_version; + +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_soap_version( + axis2_options_t * options, + const axutil_env_t * env, + const int soap_version) +{ + if(soap_version == AXIOM_SOAP11) + { + options->soap_version = soap_version; + axis2_options_set_soap_version_uri(options, env, AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI); + } + else + { + options->soap_version = AXIOM_SOAP12; + axis2_options_set_soap_version_uri(options, env, AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_enable_mtom( + axis2_options_t * options, + const axutil_env_t * env, + axis2_bool_t enable_mtom) +{ + options->enable_mtom = enable_mtom; + + if(enable_mtom) + { + axutil_property_t *property = axutil_property_create(env); + if(property) + { + axutil_property_set_scope(property, env, AXIS2_SCOPE_REQUEST); + axutil_property_set_value(property, env, axutil_strdup(env, AXIS2_VALUE_TRUE)); + axis2_options_set_property(options, env, AXIS2_ENABLE_MTOM, property); + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_options_get_enable_mtom( + const axis2_options_t * options, + const axutil_env_t * env) +{ + return options->enable_mtom; +} + +AXIS2_EXTERN axutil_string_t *AXIS2_CALL +axis2_options_get_soap_action( + const axis2_options_t * options, + const axutil_env_t * env) +{ + return options->soap_action; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_soap_action( + axis2_options_t * options, + const axutil_env_t * env, + axutil_string_t * soap_action) +{ + if(options->soap_action) + { + axutil_string_free(options->soap_action, env); + options->soap_action = NULL; + } + + if(soap_action) + { + options->soap_action = axutil_string_clone(soap_action, env); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_options_get_xml_parser_reset( + const axis2_options_t * options, + const axutil_env_t * env) +{ + return options->xml_parser_reset; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_xml_parser_reset( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_bool_t xml_parser_reset) +{ + options->xml_parser_reset = xml_parser_reset; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_enable_rest( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_bool_t enable_rest) +{ + axutil_property_t *rest_property = NULL; + + if(enable_rest) + { + rest_property = axutil_property_create(env); + axutil_property_set_value(rest_property, env, axutil_strdup(env, AXIS2_VALUE_TRUE)); + axis2_options_set_property(options, env, AXIS2_ENABLE_REST, rest_property); + } + else + { + rest_property = axutil_property_create(env); + axutil_property_set_value(rest_property, env, axutil_strdup(env, AXIS2_VALUE_FALSE)); + axis2_options_set_property(options, env, AXIS2_ENABLE_REST, rest_property); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_test_http_auth( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_bool_t test_http_auth) +{ + axutil_property_t *test_auth_property = NULL; + + if(test_http_auth) + { + test_auth_property = axutil_property_create(env); + axutil_property_set_value(test_auth_property, env, axutil_strdup(env, AXIS2_VALUE_TRUE)); + axis2_options_set_property(options, env, AXIS2_TEST_HTTP_AUTH, test_auth_property); + } + else + { + test_auth_property = axutil_property_create(env); + axutil_property_set_value(test_auth_property, env, axutil_strdup(env, AXIS2_VALUE_FALSE)); + axis2_options_set_property(options, env, AXIS2_TEST_HTTP_AUTH, test_auth_property); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_test_proxy_auth( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_bool_t test_proxy_auth) +{ + axutil_property_t *test_auth_property = NULL; + + if(test_proxy_auth) + { + test_auth_property = axutil_property_create(env); + axutil_property_set_value(test_auth_property, env, axutil_strdup(env, AXIS2_VALUE_TRUE)); + axis2_options_set_property(options, env, AXIS2_TEST_PROXY_AUTH, test_auth_property); + } + else + { + test_auth_property = axutil_property_create(env); + axutil_property_set_value(test_auth_property, env, axutil_strdup(env, AXIS2_VALUE_FALSE)); + axis2_options_set_property(options, env, AXIS2_TEST_PROXY_AUTH, test_auth_property); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_http_method( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * http_method) +{ + axutil_property_t *method_property = NULL; + + method_property = axutil_property_create(env); + axutil_property_set_value(method_property, env, axutil_strdup(env, http_method)); + axis2_options_set_property(options, env, AXIS2_HTTP_METHOD, method_property); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_http_headers( + axis2_options_t * options, + const axutil_env_t * env, + axutil_array_list_t * http_header_list) +{ + axutil_property_t *headers_property = NULL; + + headers_property = axutil_property_create(env); + axutil_property_set_value(headers_property, env, http_header_list); + axis2_options_set_property(options, env, AXIS2_TRANSPORT_HEADER_PROPERTY, headers_property); + axutil_property_set_free_func(headers_property, env, axutil_array_list_free_void_arg); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_proxy_auth_info( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * username, + const axis2_char_t * password, + const axis2_char_t * auth_type) +{ + axis2_bool_t force_proxy_auth = AXIS2_FALSE; + axutil_property_t *prop_pw = NULL; + axutil_property_t *prop_un = NULL; + + prop_un = axutil_property_create(env); + axutil_property_set_value(prop_un, env, axutil_strdup(env, username)); + axis2_options_set_property(options, env, AXIS2_PROXY_AUTH_UNAME, prop_un); + + prop_pw = axutil_property_create(env); + axutil_property_set_value(prop_pw, env, axutil_strdup(env, password)); + axis2_options_set_property(options, env, AXIS2_PROXY_AUTH_PASSWD, prop_pw); + + if(auth_type) + { + if((axutil_strcasecmp(auth_type, AXIS2_PROXY_AUTH_TYPE_BASIC) == 0) || (axutil_strcasecmp( + auth_type, AXIS2_PROXY_AUTH_TYPE_DIGEST) == 0)) + { + force_proxy_auth = AXIS2_TRUE; + } + } + if(force_proxy_auth) + { + axutil_property_t *proxy_auth_property = axutil_property_create(env); + axutil_property_t *proxy_auth_type_property = axutil_property_create(env); + + axutil_property_set_value(proxy_auth_property, env, axutil_strdup(env, AXIS2_VALUE_TRUE)); + axis2_options_set_property(options, env, AXIS2_FORCE_PROXY_AUTH, proxy_auth_property); + + axutil_property_set_value(proxy_auth_type_property, env, axutil_strdup(env, auth_type)); + axis2_options_set_property(options, env, AXIS2_PROXY_AUTH_TYPE, proxy_auth_type_property); + } + else + { + axutil_property_t *proxy_auth_property = axutil_property_create(env); + axutil_property_set_value(proxy_auth_property, env, axutil_strdup(env, AXIS2_VALUE_FALSE)); + axis2_options_set_property(options, env, AXIS2_FORCE_PROXY_AUTH, proxy_auth_property); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_options_set_http_auth_info( + axis2_options_t * options, + const axutil_env_t * env, + const axis2_char_t * username, + const axis2_char_t * password, + const axis2_char_t * auth_type) +{ + axis2_bool_t force_http_auth = AXIS2_FALSE; + axutil_property_t *prop_un = NULL; + axutil_property_t *prop_pw = NULL; + + prop_un = axutil_property_create(env); + axutil_property_set_value(prop_un, env, axutil_strdup(env, username)); + axis2_options_set_property(options, env, AXIS2_HTTP_AUTH_UNAME, prop_un); + + prop_pw = axutil_property_create(env); + axutil_property_set_value(prop_pw, env, axutil_strdup(env, password)); + axis2_options_set_property(options, env, AXIS2_HTTP_AUTH_PASSWD, prop_pw); + + if(auth_type) + { + if((axutil_strcasecmp(auth_type, AXIS2_HTTP_AUTH_TYPE_BASIC) == 0) || (axutil_strcasecmp( + auth_type, AXIS2_HTTP_AUTH_TYPE_DIGEST) == 0)) + { + force_http_auth = AXIS2_TRUE; + } + } + if(force_http_auth) + { + axutil_property_t *http_auth_property = axutil_property_create(env); + axutil_property_t *http_auth_type_property = axutil_property_create(env); + + axutil_property_set_value(http_auth_property, env, axutil_strdup(env, AXIS2_VALUE_TRUE)); + axis2_options_set_property(options, env, AXIS2_FORCE_HTTP_AUTH, http_auth_property); + + axutil_property_set_value(http_auth_type_property, env, axutil_strdup(env, auth_type)); + axis2_options_set_property(options, env, AXIS2_HTTP_AUTH_TYPE, http_auth_type_property); + } + else + { + axutil_property_t *http_auth_property = axutil_property_create(env); + axutil_property_set_value(http_auth_property, env, axutil_strdup(env, AXIS2_VALUE_FALSE)); + axis2_options_set_property(options, env, AXIS2_FORCE_HTTP_AUTH, http_auth_property); + } + return AXIS2_SUCCESS; +} + diff --git a/src/core/clientapi/stub.c b/src/core/clientapi/stub.c new file mode 100644 index 0000000..2b27274 --- /dev/null +++ b/src/core/clientapi/stub.c @@ -0,0 +1,228 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct axis2_stub +{ + axis2_svc_client_t *svc_client; + axis2_options_t *options; +}; + +AXIS2_EXTERN axis2_stub_t *AXIS2_CALL +axis2_stub_create( + const axutil_env_t * env) +{ + axis2_stub_t *stub = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + stub = (axis2_stub_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_stub_t)); + + if(!stub) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create stub."); + return NULL; + } + stub->svc_client = NULL; + stub->options = NULL; + + return stub; +} + +AXIS2_EXTERN axis2_stub_t *AXIS2_CALL +axis2_stub_create_with_endpoint_ref_and_client_home( + const axutil_env_t * env, + axis2_endpoint_ref_t * endpoint_ref, + const axis2_char_t * client_home) +{ + axis2_stub_t *stub = NULL; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, endpoint_ref, NULL); + + stub = (axis2_stub_t *)axis2_stub_create(env); + + if(!stub) + { + return NULL; + } + + stub->svc_client = axis2_svc_client_create(env, client_home); + + if(!stub->svc_client) + { + axis2_stub_free(stub, env); + return NULL; + } + + stub->options = axis2_options_create(env); + if(!stub->options) + { + axis2_stub_free(stub, env); + return NULL; + } + + axis2_svc_client_set_options(stub->svc_client, env, stub->options); + + axis2_options_set_to(stub->options, env, endpoint_ref); + + return stub; +} + +AXIS2_EXTERN axis2_stub_t *AXIS2_CALL +axis2_stub_create_with_endpoint_uri_and_client_home( + const axutil_env_t * env, + const axis2_char_t * endpoint_uri, + const axis2_char_t * client_home) +{ + axis2_stub_t *stub = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, endpoint_uri, NULL); + + endpoint_ref = axis2_endpoint_ref_create(env, endpoint_uri); + if(!endpoint_ref) + { + return NULL; + } + stub = (axis2_stub_t *)axis2_stub_create_with_endpoint_ref_and_client_home(env, endpoint_ref, + client_home); + + if(!stub) + { + return NULL; + } + + return stub; +} + +void AXIS2_CALL +axis2_stub_free( + axis2_stub_t * stub, + const axutil_env_t * env) +{ + if(stub) + { + if(stub->svc_client) + { + axis2_svc_client_free(stub->svc_client, env); + } + + AXIS2_FREE(env->allocator, stub); + } +} + +axis2_status_t AXIS2_CALL +axis2_stub_set_endpoint_ref( + axis2_stub_t * stub, + const axutil_env_t * env, + axis2_endpoint_ref_t * endpoint_ref) +{ + AXIS2_PARAM_CHECK(env->error, endpoint_ref, AXIS2_FAILURE); + axis2_options_set_to(stub->options, env, endpoint_ref); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_stub_set_endpoint_uri( + axis2_stub_t * stub, + const axutil_env_t * env, + const axis2_char_t * endpoint_uri) +{ + axis2_endpoint_ref_t *endpoint_ref = NULL; + + AXIS2_PARAM_CHECK(env->error, endpoint_uri, AXIS2_FAILURE); + + endpoint_ref = axis2_endpoint_ref_create(env, endpoint_uri); + if(!endpoint_ref) + { + return AXIS2_FAILURE; + } + axis2_options_set_to(stub->options, env, endpoint_ref); + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_stub_set_use_separate_listener( + axis2_stub_t * stub, + const axutil_env_t * env, + const axis2_bool_t use_separate_listener) +{ + return axis2_options_set_use_separate_listener(stub->options, env, use_separate_listener); +} + +axis2_status_t AXIS2_CALL +axis2_stub_engage_module( + axis2_stub_t * stub, + const axutil_env_t * env, + const axis2_char_t * module_name) +{ + AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FAILURE); + + return axis2_svc_client_engage_module(stub->svc_client, env, module_name); +} + +axis2_status_t AXIS2_CALL +axis2_stub_set_soap_version( + axis2_stub_t * stub, + const axutil_env_t * env, + const int soap_version) +{ + if(!stub->options) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Cannot set soap version. Stub option is not valid."); + return AXIS2_FAILURE; + } + return axis2_options_set_soap_version(stub->options, env, soap_version); +} + +const axis2_char_t *AXIS2_CALL +axis2_stub_get_svc_ctx_id( + const axis2_stub_t * stub, + const axutil_env_t * env) +{ + const axis2_svc_ctx_t *svc_ctx = NULL; + const axis2_char_t *svc_ctx_id = NULL; + + AXIS2_PARAM_CHECK(env->error, stub, NULL); + + svc_ctx = axis2_svc_client_get_svc_ctx(stub->svc_client, env); + svc_ctx_id = axis2_svc_ctx_get_svc_id(svc_ctx, env); + return svc_ctx_id; +} + +axis2_svc_client_t *AXIS2_CALL +axis2_stub_get_svc_client( + const axis2_stub_t * stub, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, stub, NULL); + return stub->svc_client; +} + +axis2_options_t *AXIS2_CALL +axis2_stub_get_options( + const axis2_stub_t * stub, + const axutil_env_t * env) +{ + return stub->options; +} diff --git a/src/core/clientapi/svc_client.c b/src/core/clientapi/svc_client.c new file mode 100644 index 0000000..d25f340 --- /dev/null +++ b/src/core/clientapi/svc_client.c @@ -0,0 +1,1624 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include "axis2_callback_recv.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct axis2_svc_client +{ + axis2_svc_t *svc; + + axis2_conf_t *conf; + + axis2_conf_ctx_t *conf_ctx; + + axis2_svc_ctx_t *svc_ctx; + + axis2_options_t *options; + + axis2_options_t *override_options; + + /* SOAP Headers */ + axutil_array_list_t *headers; + + /* for receiving the async messages */ + axis2_callback_recv_t *callback_recv; + + axis2_listener_manager_t *listener_manager; + + axis2_op_client_t *op_client; + + axiom_soap_envelope_t *last_response_soap_envelope; + + axis2_bool_t last_response_has_fault; + + axis2_bool_t reuse; + + axis2_bool_t auth_failed; + + axis2_bool_t required_auth_is_http; + + axis2_char_t *auth_type; + + axutil_array_list_t *http_headers; + + int http_status_code; + + axis2_bool_t keep_externally_passed_ctx_and_svc; + +}; + +static void +axis2_svc_client_set_http_info( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + +static axis2_svc_t * +axis2_svc_client_create_annonymous_svc( + axis2_svc_client_t * svc_client, + const axutil_env_t * env); + +static axis2_bool_t +axis2_svc_client_init_transports_from_conf_ctx( + const axutil_env_t * env, + axis2_svc_client_t * svc_client, + axis2_conf_ctx_t * conf_ctx, + const axis2_char_t * client_home); + +static axis2_bool_t +axis2_svc_client_init_data( + const axutil_env_t * env, + axis2_svc_client_t * svc_client); + +static axis2_bool_t +axis2_svc_client_fill_soap_envelope( + const axutil_env_t * env, + axis2_svc_client_t * svc_client, + axis2_msg_ctx_t * msg_ctx, + const axiom_node_t * payload); + +AXIS2_EXTERN axis2_svc_client_t *AXIS2_CALL +axis2_svc_client_create( + const axutil_env_t * env, + const axis2_char_t * client_home) +{ + axis2_svc_client_t *svc_client = NULL; + + AXIS2_ENV_CHECK(env, NULL); + svc_client = axis2_svc_client_create_with_conf_ctx_and_svc(env, client_home, NULL, NULL); + + return svc_client; +} + +AXIS2_EXTERN axis2_svc_client_t *AXIS2_CALL +axis2_svc_client_create_with_conf_ctx_and_svc( + const axutil_env_t * env, + const axis2_char_t * client_home, + axis2_conf_ctx_t * conf_ctx, + axis2_svc_t * svc) +{ + axis2_svc_client_t *svc_client = NULL; + axis2_svc_grp_t *svc_grp = NULL; + axis2_svc_grp_ctx_t *svc_grp_ctx = NULL; + const axis2_char_t *svc_grp_name = NULL; + + svc_client = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_client_t)); + if(!svc_client) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create service client."); + return NULL; + } + + svc_client->svc = NULL; + svc_client->conf = NULL; + svc_client->conf_ctx = NULL; + svc_client->svc_ctx = NULL; + svc_client->options = NULL; + svc_client->override_options = NULL; + svc_client->headers = NULL; + svc_client->callback_recv = NULL; + svc_client->listener_manager = NULL; + svc_client->op_client = NULL; + svc_client->last_response_soap_envelope = NULL; + svc_client->last_response_has_fault = AXIS2_FALSE; + svc_client->reuse = AXIS2_FALSE; + svc_client->auth_failed = AXIS2_FALSE; + svc_client->required_auth_is_http = AXIS2_FALSE; + svc_client->auth_type = NULL; + svc_client->http_headers = NULL; + svc_client->keep_externally_passed_ctx_and_svc = AXIS2_FALSE; + + if(!axis2_svc_client_init_data(env, svc_client)) + { + axis2_svc_client_free(svc_client, env); + return NULL; + } + + /*create the default conf_ctx if it is NULL */ + if(!axis2_svc_client_init_transports_from_conf_ctx(env, svc_client, conf_ctx, client_home)) + { + axis2_svc_client_free(svc_client, env); + return NULL; + } + + svc_client->conf = axis2_conf_ctx_get_conf(svc_client->conf_ctx, env); + + if(svc) + { + svc_client->keep_externally_passed_ctx_and_svc = AXIS2_TRUE; + svc_client->svc = svc; + } + else + { + svc_client->svc = axis2_svc_client_create_annonymous_svc(svc_client, env); + if(!svc_client->svc) + { + axis2_svc_client_free(svc_client, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create annonymous service."); + return NULL; + } + } + + /** add the service to the config context if it isn't in there already */ + if(!axis2_conf_get_svc(svc_client->conf, env, axis2_svc_get_name(svc_client->svc, env))) + { + axis2_conf_add_svc(svc_client->conf, env, svc_client->svc); + } + + /** create a service context for myself: create a new service group + context and then get the service context for myself as I'll need that + later for stuff that I gotta do */ + svc_grp = axis2_svc_get_parent(svc_client->svc, env); + if(!svc_grp) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot access service group of service client."); + return NULL; + } + + svc_grp_ctx = axis2_svc_grp_get_svc_grp_ctx(svc_grp, env, svc_client->conf_ctx); + if(!svc_grp_ctx) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Cannot access service group context of service client."); + return NULL; + } + + svc_grp_name = axis2_svc_grp_get_name(svc_grp, env); + if(!svc_grp_name) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Cannot access service group name of service client."); + return NULL; /* service group name is mandatory */ + } + + axis2_conf_ctx_register_svc_grp_ctx(svc_client->conf_ctx, env, svc_grp_name, svc_grp_ctx); + + svc_client->svc_ctx = axis2_svc_grp_ctx_get_svc_ctx(svc_grp_ctx, env, axis2_svc_get_name( + svc_client->svc, env)); + + return svc_client; +} + +AXIS2_EXTERN axis2_svc_t *AXIS2_CALL +axis2_svc_client_get_svc( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, svc_client, NULL); + return svc_client->svc; +} + +AXIS2_EXTERN axis2_conf_ctx_t *AXIS2_CALL +axis2_svc_client_get_conf_ctx( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, svc_client, NULL); + return svc_client->conf_ctx; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_set_options( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axis2_options_t * options) +{ + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FAILURE); + if(svc_client->options) + { + axis2_options_free(svc_client->options, env); + } + svc_client->options = (axis2_options_t *)options; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_options_t *AXIS2_CALL +axis2_svc_client_get_options( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, svc_client, NULL); + return svc_client->options; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_set_override_options( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axis2_options_t * override_options) +{ + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FAILURE); + if(svc_client->override_options) + { + axis2_options_free(svc_client->override_options, env); + } + + svc_client->override_options = (axis2_options_t *)override_options; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_options_t *AXIS2_CALL +axis2_svc_client_get_override_options( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, svc_client, NULL); + return svc_client->override_options; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_engage_module( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axis2_char_t * module_name) +{ + axis2_module_desc_t *module = NULL; + axutil_qname_t *mod_qname = NULL; + + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FAILURE); + + mod_qname = axutil_qname_create(env, module_name, NULL, NULL); + + if(!mod_qname) + { + return AXIS2_FAILURE; + } + + module = axis2_conf_get_module(svc_client->conf, env, mod_qname); + + axutil_qname_free(mod_qname, env); + mod_qname = NULL; + + if(module) + { + return axis2_svc_engage_module(svc_client->svc, env, module, svc_client->conf); + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_disengage_module( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axis2_char_t * module_name) +{ + axis2_module_desc_t *module = NULL; + axutil_qname_t *mod_qname = NULL; + + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FAILURE); + + mod_qname = axutil_qname_create(env, module_name, NULL, NULL); + if(!mod_qname) + { + return AXIS2_FAILURE; + } + + module = axis2_conf_get_module(svc_client->conf, env, mod_qname); + axutil_qname_free(mod_qname, env); + mod_qname = NULL; + + if(module) + { + return axis2_svc_disengage_module(svc_client->svc, env, module, svc_client->conf); + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_add_header( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + axiom_node_t * header) +{ + + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FAILURE); + if(!svc_client->headers) + { + svc_client->headers = axutil_array_list_create(env, 0); + if(!svc_client->headers) + { + return AXIS2_FAILURE; + } + } + axutil_array_list_add(svc_client->headers, env, header); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_remove_all_headers( + axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + int i = 0; + int size = 0; + + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FAILURE); + + if(!svc_client->headers) + { + return AXIS2_SUCCESS; + } + + size = axutil_array_list_size(svc_client->headers, env); + + for(i = size - 1; i > -1; i--) + { + axutil_array_list_remove(svc_client->headers, env, i); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_send_robust_with_op_qname( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axutil_qname_t * op_qname, + const axiom_node_t * payload) +{ + axis2_msg_ctx_t *msg_ctx = NULL; + axis2_status_t status = AXIS2_FAILURE; + axis2_bool_t qname_free_flag = AXIS2_FALSE; + + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FAILURE); + + if(!op_qname) + { + op_qname = axutil_qname_create(env, AXIS2_ANON_ROBUST_OUT_ONLY_OP, NULL, NULL); + if(!op_qname) + { + return AXIS2_FAILURE; + } + qname_free_flag = AXIS2_TRUE; + } + else + { + axis2_op_t *op = NULL; + axis2_char_t *mep = NULL; + axis2_svc_t *svc = NULL; + svc = axis2_svc_client_get_svc(svc_client, env); + if(!svc) + { + return AXIS2_FAILURE; + } + op = axis2_svc_get_op_with_qname(svc, env, op_qname); + if(!op) + { + return AXIS2_FAILURE; + } + mep = (axis2_char_t *)axis2_op_get_msg_exchange_pattern(op, env); + if(!mep || axutil_strcmp(AXIS2_MEP_URI_OUT_ONLY, mep) != 0) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "%s%s", + "To use this method opeation uri should be", AXIS2_MEP_URI_OUT_ONLY); + return AXIS2_FAILURE; + } + } + + svc_client->auth_failed = AXIS2_FALSE; + svc_client->required_auth_is_http = AXIS2_FALSE; + if(svc_client->auth_type) + { + AXIS2_FREE(env->allocator, svc_client->auth_type); + } + svc_client->auth_type = NULL; + + msg_ctx = axis2_msg_ctx_create(env, axis2_svc_ctx_get_conf_ctx(svc_client->svc_ctx, env), NULL, + NULL); + if(!axis2_svc_client_fill_soap_envelope(env, svc_client, msg_ctx, payload)) + { + return AXIS2_FAILURE; + } + + if(!axis2_svc_client_create_op_client(svc_client, env, op_qname)) + { + return AXIS2_FAILURE; + } + + axis2_op_client_add_out_msg_ctx(svc_client->op_client, env, msg_ctx); + status = axis2_op_client_execute(svc_client->op_client, env, AXIS2_TRUE); + axis2_svc_client_set_http_info(svc_client, env, msg_ctx); + svc_client->auth_failed = axis2_msg_ctx_get_auth_failed(msg_ctx, env); + svc_client->required_auth_is_http = axis2_msg_ctx_get_required_auth_is_http(msg_ctx, env); + if(axis2_msg_ctx_get_auth_type(msg_ctx, env)) + { + svc_client->auth_type = axutil_strdup(env, axis2_msg_ctx_get_auth_type(msg_ctx, env)); + } + + if(qname_free_flag) + { + axutil_qname_free((axutil_qname_t *)op_qname, env); + } + + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_send_robust( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axiom_node_t * payload) +{ + return axis2_svc_client_send_robust_with_op_qname(svc_client, env, NULL, payload); +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_svc_client_fire_and_forget_with_op_qname( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axutil_qname_t * op_qname, + const axiom_node_t * payload) +{ + axis2_msg_ctx_t *msg_ctx = NULL; + axis2_bool_t qname_free_flag = AXIS2_FALSE; + + AXIS2_PARAM_CHECK_VOID(env->error, svc_client); + + if(!op_qname) + { + op_qname = axutil_qname_create(env, AXIS2_ANON_OUT_ONLY_OP, NULL, NULL); + if(!op_qname) + { + return; + } + qname_free_flag = AXIS2_TRUE; + } + + svc_client->auth_failed = AXIS2_FALSE; + svc_client->required_auth_is_http = AXIS2_FALSE; + if(svc_client->auth_type) + { + AXIS2_FREE(env->allocator, svc_client->auth_type); + } + svc_client->auth_type = NULL; + + msg_ctx = axis2_msg_ctx_create(env, axis2_svc_ctx_get_conf_ctx(svc_client->svc_ctx, env), NULL, + NULL); + if(!axis2_svc_client_fill_soap_envelope(env, svc_client, msg_ctx, payload)) + { + return; + } + + if(!axis2_svc_client_create_op_client(svc_client, env, op_qname)) + { + return; + } + + axis2_op_client_add_out_msg_ctx(svc_client->op_client, env, msg_ctx); + axis2_op_client_execute(svc_client->op_client, env, AXIS2_TRUE); + axis2_svc_client_set_http_info(svc_client, env, msg_ctx); + svc_client->auth_failed = axis2_msg_ctx_get_auth_failed(msg_ctx, env); + svc_client->required_auth_is_http = axis2_msg_ctx_get_required_auth_is_http(msg_ctx, env); + if(axis2_msg_ctx_get_auth_type(msg_ctx, env)) + { + svc_client->auth_type = axutil_strdup(env, axis2_msg_ctx_get_auth_type(msg_ctx, env)); + } + + if(qname_free_flag) + { + axutil_qname_free((axutil_qname_t *)op_qname, env); + } +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_svc_client_fire_and_forget( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axiom_node_t * payload) +{ + axis2_svc_client_fire_and_forget_with_op_qname(svc_client, env, NULL, payload); +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axis2_svc_client_send_receive_with_op_qname( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axutil_qname_t * op_qname, + const axiom_node_t * payload) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_body_t *soap_body = NULL; + axiom_node_t *soap_node = NULL; + axis2_op_t *op = NULL; + axutil_param_t *param = NULL; + axutil_uri_t *action_uri = NULL; + axis2_char_t *action_str = NULL; + axis2_bool_t qname_free_flag = AXIS2_FALSE; + + axis2_msg_ctx_t *res_msg_ctx = NULL; + axis2_msg_ctx_t *msg_ctx = NULL; + + AXIS2_PARAM_CHECK(env->error, svc_client, NULL); + + svc_client->last_response_soap_envelope = NULL; + svc_client->last_response_has_fault = AXIS2_FALSE; + svc_client->auth_failed = AXIS2_FALSE; + svc_client->required_auth_is_http = AXIS2_FALSE; + if(svc_client->auth_type) + { + AXIS2_FREE(env->allocator, svc_client->auth_type); + } + svc_client->auth_type = NULL; + + op = axis2_svc_get_op_with_qname(svc_client->svc, env, op_qname); + if(op) + { + param = axis2_op_get_param(op, env, AXIS2_SOAP_ACTION); + if(param) + { + action_uri = (axutil_uri_t *)axutil_param_get_value(param, env); + action_str = axutil_uri_to_string(action_uri, env, AXIS2_URI_UNP_OMITUSERINFO); + axis2_options_set_action(svc_client->options, env, action_str); + } + } + + if(!op_qname) + { + op_qname = axutil_qname_create(env, AXIS2_ANON_OUT_IN_OP, NULL, NULL); + if(!op_qname) + return NULL; + + qname_free_flag = AXIS2_TRUE; + } + + /* If dual channel blocking. We come to this block if the client indicate to use + * a separate listener but don't provide a callback function to acted upon when + * response is received in the listener thread. What we do here is we create a callback + * and call axis2_svc_client_send_receive_non_blocking_with_op_qname with it. */ + if(axis2_options_get_use_separate_listener(svc_client->options, env)) + { + axis2_callback_t *callback = NULL; + axis2_msg_ctx_t *msg_ctx = NULL; + long index = 0; + + /* This means doing a Request-Response invocation using two channels. + If the transport is a two way transport (e.g. http), only one channel is used + (e.g. in http cases 202 OK is sent to say no response available). + Axis2 gets blocked and return when the response is available. */ + + callback = axis2_callback_create(env); + if(!callback) + { + return NULL; + } + + /* Call two channel non blocking invoke to do the work and wait on the callback. We don't + * set a callback function for the callback. That functionality is handled here. + */ + axis2_svc_client_send_receive_non_blocking_with_op_qname(svc_client, env, op_qname, + payload, callback); + + index = axis2_options_get_timeout_in_milli_seconds(svc_client->options, env) / 10; + + while(!axis2_callback_get_complete(callback, env)) + { + if(index-- >= 0) + { + AXIS2_USLEEP(10000); + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_RESPONSE_TIMED_OUT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Response time out."); + return NULL; + } + } + + soap_envelope = axis2_callback_get_envelope(callback, env); + msg_ctx = axis2_callback_get_msg_ctx(callback, env); + axis2_op_client_add_in_msg_ctx(svc_client->op_client, env, msg_ctx); + + /* start of hack to get rid of memory leak */ + /*msg_ctx = axis2_msg_ctx_create(env, axis2_svc_ctx_get_conf_ctx(svc_client-> svc_ctx, env), + NULL, NULL); + if(!msg_ctx) + return NULL; + + axis2_op_client_add_in_msg_ctx(svc_client->op_client, env, msg_ctx); + + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, soap_envelope);*/ + /* end of hack to get rid of memory leak */ + + /* process the result of the invocation */ + if(!soap_envelope) + { + if(axis2_callback_get_error(callback, env) != AXIS2_ERROR_NONE) + { + AXIS2_ERROR_SET(env->error, axis2_callback_get_error(callback, env), AXIS2_FAILURE); + return NULL; + } + } + } + else + { + msg_ctx = axis2_msg_ctx_create(env, axis2_svc_ctx_get_conf_ctx(svc_client->svc_ctx, env), + NULL, NULL); + if(!msg_ctx) + return NULL; + + if(!axis2_svc_client_fill_soap_envelope(env, svc_client, msg_ctx, payload)) + { + return NULL; + } + + if(!axis2_svc_client_create_op_client(svc_client, env, op_qname)) + { + return NULL; + } + + axis2_op_client_add_msg_ctx(svc_client->op_client, env, msg_ctx); + axis2_op_client_execute(svc_client->op_client, env, AXIS2_TRUE); + axis2_svc_client_set_http_info(svc_client, env, msg_ctx); + svc_client->auth_failed = axis2_msg_ctx_get_auth_failed(msg_ctx, env); + svc_client->required_auth_is_http = axis2_msg_ctx_get_required_auth_is_http(msg_ctx, env); + if(axis2_msg_ctx_get_auth_type(msg_ctx, env)) + { + svc_client->auth_type = axutil_strdup(env, axis2_msg_ctx_get_auth_type(msg_ctx, env)); + } + res_msg_ctx = (axis2_msg_ctx_t *)axis2_op_client_get_msg_ctx(svc_client-> op_client, env, + AXIS2_WSDL_MESSAGE_LABEL_IN); + + if(res_msg_ctx) + { + soap_envelope = axis2_msg_ctx_get_soap_envelope(res_msg_ctx, env); + } + else + { + axis2_op_client_add_msg_ctx(svc_client->op_client, env, res_msg_ctx); + /* set in msg_ctx to be NULL to reset */ + } + } + + if(qname_free_flag) + { + axutil_qname_free((axutil_qname_t *)op_qname, env); + } + + if(!soap_envelope) + { + return NULL; + } + svc_client->last_response_soap_envelope = soap_envelope; + + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + + if(!soap_body) + { + axiom_node_t *node = axiom_soap_envelope_get_base_node(soap_envelope, env); + if(node) + { + axiom_element_t *envelope_element = (axiom_element_t *)axiom_node_get_data_element( + node, env); + axiom_util_get_first_child_element_with_localname(envelope_element, env, node, + AXIOM_SOAP_BODY_LOCAL_NAME, &soap_node); + if(soap_node) + { + return axiom_node_get_first_element(soap_node, env); + } + } + return NULL; + } + + if(axis2_msg_ctx_get_doing_rest(res_msg_ctx, env)) + { + /* All HTTP 4xx and 5xx status codes are treated as errors */ + if(axis2_msg_ctx_get_status_code(res_msg_ctx, env) >= 400) + { + svc_client->last_response_has_fault = AXIS2_TRUE; + } + else + { + svc_client->last_response_has_fault = AXIS2_FALSE; + } + } + else + { + svc_client->last_response_has_fault = axiom_soap_body_has_fault(soap_body, env); + } + + if(AXIOM_SOAP11 == axiom_soap_envelope_get_soap_version(soap_envelope, env)) + { + axiom_soap_body_convert_fault_to_soap11(soap_body, env); + } + + soap_node = axiom_soap_body_get_base_node(soap_body, env); + if(!soap_node) + { + return NULL; + } + return axiom_node_get_first_element(soap_node, env); +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axis2_svc_client_send_receive( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axiom_node_t * payload) +{ + return axis2_svc_client_send_receive_with_op_qname(svc_client, env, NULL, payload); +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_svc_client_send_receive_non_blocking_with_op_qname( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axutil_qname_t * op_qname, + const axiom_node_t * payload, + axis2_callback_t * callback) +{ + axis2_msg_ctx_t *msg_ctx = NULL; + AXIS2_TRANSPORT_ENUMS transport_in_protocol; + axis2_bool_t qname_free_flag = AXIS2_FALSE; + + AXIS2_PARAM_CHECK_VOID(env->error, svc_client); + + if(!op_qname) + { + op_qname = axutil_qname_create(env, AXIS2_ANON_OUT_IN_OP, NULL, NULL); + if(!op_qname) + return; + qname_free_flag = AXIS2_TRUE; + } + + svc_client->auth_failed = AXIS2_FALSE; + svc_client->required_auth_is_http = AXIS2_FALSE; + if(svc_client->auth_type) + { + AXIS2_FREE(env->allocator, svc_client->auth_type); + } + svc_client->auth_type = NULL; + + msg_ctx = axis2_msg_ctx_create(env, axis2_svc_ctx_get_conf_ctx(svc_client-> svc_ctx, env), + NULL, NULL); + if(!msg_ctx) + return; + + if(!axis2_svc_client_fill_soap_envelope(env, svc_client, msg_ctx, payload)) + { + return; + } + + if(!axis2_svc_client_create_op_client(svc_client, env, op_qname)) + { + return; + } + + axis2_op_client_set_callback(svc_client->op_client, env, callback); + axis2_op_client_add_out_msg_ctx(svc_client->op_client, env, msg_ctx); + + /* If dual channel */ + if(axis2_options_get_use_separate_listener(svc_client->options, env)) + { + axis2_op_t *op = NULL; + + transport_in_protocol = axis2_options_get_transport_in_protocol(svc_client->options, env); + if(transport_in_protocol == AXIS2_TRANSPORT_ENUM_MAX) + { + axis2_options_set_transport_in_protocol(svc_client->options, env, + AXIS2_TRANSPORT_ENUM_HTTP); + transport_in_protocol = AXIS2_TRANSPORT_ENUM_HTTP; + } + axis2_listener_manager_make_sure_started(svc_client->listener_manager, env, + transport_in_protocol, svc_client->conf_ctx); + /* Following sleep is required to ensure the listener is ready to receive response. + If it is missing, the response gets lost. - Samisa */ + AXIS2_USLEEP(1); + + op = axis2_svc_get_op_with_qname(svc_client->svc, env, op_qname); + /* At the end of the incoming flow this message receiver will be hit */ + axis2_op_set_msg_recv(op, env, + AXIS2_CALLBACK_RECV_GET_BASE(svc_client-> callback_recv, env)); + axis2_op_client_set_callback_recv(svc_client->op_client, env, svc_client->callback_recv); + } + + axis2_op_client_execute(svc_client->op_client, env, AXIS2_FALSE); + axis2_svc_client_set_http_info(svc_client, env, msg_ctx); + svc_client->auth_failed = axis2_msg_ctx_get_auth_failed(msg_ctx, env); + svc_client->required_auth_is_http = axis2_msg_ctx_get_required_auth_is_http(msg_ctx, env); + if(axis2_msg_ctx_get_auth_type(msg_ctx, env)) + { + svc_client->auth_type = axutil_strdup(env, axis2_msg_ctx_get_auth_type(msg_ctx, env)); + } + + if(qname_free_flag) + { + axutil_qname_free((axutil_qname_t *)op_qname, env); + op_qname = NULL; + } +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_svc_client_send_receive_non_blocking( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axiom_node_t * payload, + axis2_callback_t * callback) +{ + axis2_svc_client_send_receive_non_blocking_with_op_qname(svc_client, env, NULL, payload, + callback); +} + +AXIS2_EXTERN axis2_op_client_t *AXIS2_CALL +axis2_svc_client_create_op_client( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axutil_qname_t * op_qname) +{ + axis2_op_t *op = NULL; + + AXIS2_PARAM_CHECK(env->error, svc_client, NULL); + + op = axis2_svc_get_op_with_qname(svc_client->svc, env, op_qname); + + if(!op) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot find operation to create op client."); + return NULL; + } + + if(!(svc_client->op_client) || svc_client->reuse) + { + if((svc_client->reuse) && (svc_client->op_client)) + axis2_op_client_free(svc_client->op_client, env); + svc_client->op_client = axis2_op_client_create(env, op, svc_client->svc_ctx, + svc_client->options); + } + + /** + If override options have been set, that means we need to make sure + those options override the options of even the operation client. So, + what we do is switch the parents around to make that work. + */ + if(svc_client->override_options) + { + axis2_options_set_parent(svc_client->override_options, env, axis2_op_client_get_options( + svc_client-> op_client, env)); + axis2_op_client_set_options(svc_client->op_client, env, svc_client->override_options); + } + svc_client->reuse = AXIS2_TRUE; + axis2_op_client_set_reuse(svc_client->op_client, env, svc_client->reuse); + return svc_client->op_client; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_finalize_invoke( + axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + AXIS2_TRANSPORT_ENUMS transport_in_protocol; + + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FAILURE); + + transport_in_protocol = axis2_options_get_transport_in_protocol(svc_client->options, env); + + if(svc_client->listener_manager) + { + return axis2_listener_manager_stop(svc_client->listener_manager, env, transport_in_protocol); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_endpoint_ref_t *AXIS2_CALL +axis2_svc_client_get_own_endpoint_ref( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env, + const axis2_char_t * transport) +{ + return NULL; +} + +AXIS2_EXTERN const axis2_endpoint_ref_t *AXIS2_CALL +axis2_svc_client_get_target_endpoint_ref( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_set_target_endpoint_ref( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + axis2_endpoint_ref_t * target_endpoint_ref) +{ + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_svc_ctx_t *AXIS2_CALL +axis2_svc_client_get_svc_ctx( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, svc_client, NULL); + return svc_client->svc_ctx; +} + +static axis2_bool_t +axis2_svc_client_init_transports_from_conf_ctx( + const axutil_env_t * env, + axis2_svc_client_t * svc_client, + axis2_conf_ctx_t * conf_ctx, + const axis2_char_t * client_home) +{ + svc_client->conf_ctx = conf_ctx; + if(!svc_client->conf_ctx) + { + svc_client->conf_ctx = axis2_build_client_conf_ctx(env, client_home); + if(!svc_client->conf_ctx) + { + return AXIS2_FALSE; + } + } + else + { + svc_client->keep_externally_passed_ctx_and_svc = AXIS2_TRUE; + } + + if(!svc_client->listener_manager) + { + svc_client->listener_manager = axis2_listener_manager_create(env); + if(!svc_client->listener_manager) + { + return AXIS2_FALSE; + } + } + + return AXIS2_TRUE; +} + +static axis2_bool_t +axis2_svc_client_init_data( + const axutil_env_t * env, + axis2_svc_client_t * svc_client) +{ + svc_client->svc = NULL; + svc_client->conf_ctx = NULL; + svc_client->svc_ctx = NULL; + + svc_client->options = axis2_options_create(env); + if(!svc_client->options) + { + return AXIS2_FALSE; + } + + svc_client->override_options = NULL; + svc_client->headers = NULL; + + if(svc_client->callback_recv) + { + AXIS2_CALLBACK_RECV_FREE(svc_client->callback_recv, env); + svc_client->callback_recv = NULL; + } + + svc_client->callback_recv = axis2_callback_recv_create(env); + if(!svc_client->callback_recv) + { + return AXIS2_FALSE; + } + + return AXIS2_TRUE; +} + +static axis2_svc_t * +axis2_svc_client_create_annonymous_svc( + axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + + /** + now add anonymous operations to the axis2 service for use with the + shortcut client API. NOTE: We only add the ones we know we'll use + later in the convenience API; if you use + this constructor then you can't expect any magic! + */ + axutil_qname_t *tmp_qname; + axis2_svc_t *svc; + axis2_op_t *op_out_in, *op_out_only, *op_robust_out_only; + axis2_phases_info_t *info = NULL; + + tmp_qname = axutil_qname_create(env, AXIS2_ANON_SERVICE, NULL, NULL); + if(!tmp_qname) + { + return NULL; + } + + svc = axis2_svc_create_with_qname(env, tmp_qname); + axutil_qname_free(tmp_qname, env); + if(!svc) + { + return NULL; + } + + tmp_qname = axutil_qname_create(env, AXIS2_ANON_OUT_IN_OP, NULL, NULL); + if(!tmp_qname) + { + return NULL; + } + op_out_in = axis2_op_create_with_qname(env, tmp_qname); + axutil_qname_free(tmp_qname, env); + + tmp_qname = axutil_qname_create(env, AXIS2_ANON_OUT_ONLY_OP, NULL, NULL); + if(!tmp_qname) + { + return NULL; + } + op_out_only = axis2_op_create_with_qname(env, tmp_qname); + axutil_qname_free(tmp_qname, env); + + tmp_qname = axutil_qname_create(env, AXIS2_ANON_ROBUST_OUT_ONLY_OP, NULL, NULL); + if(!tmp_qname) + { + return NULL; + } + op_robust_out_only = axis2_op_create_with_qname(env, tmp_qname); + axutil_qname_free(tmp_qname, env); + + if(!op_out_in || !op_out_only || !op_robust_out_only) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + if(op_out_in) + { + axis2_op_free(op_out_in, env); + } + if(op_out_only) + { + axis2_op_free(op_out_only, env); + } + if(op_robust_out_only) + { + axis2_op_free(op_robust_out_only, env); + } + + return NULL; + } + + axis2_op_set_msg_exchange_pattern(op_out_in, env, AXIS2_MEP_URI_OUT_IN); + axis2_op_set_msg_exchange_pattern(op_out_only, env, AXIS2_MEP_URI_OUT_ONLY); + axis2_op_set_msg_exchange_pattern(op_robust_out_only, env, AXIS2_MEP_URI_ROBUST_OUT_ONLY); + + /* Setting operation phase */ + info = axis2_conf_get_phases_info(svc_client->conf, env); + axis2_phases_info_set_op_phases(info, env, op_out_in); + axis2_phases_info_set_op_phases(info, env, op_out_only); + axis2_phases_info_set_op_phases(info, env, op_robust_out_only); + axis2_svc_add_op(svc, env, op_out_in); + axis2_svc_add_op(svc, env, op_out_only); + axis2_svc_add_op(svc, env, op_robust_out_only); + return svc; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_svc_client_free( + axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + if(!svc_client) + { + return; + } + + if(svc_client->headers) + { + axis2_svc_client_remove_all_headers(svc_client, env); + axutil_array_list_free(svc_client->headers, env); + svc_client->headers = NULL; + } + + if(svc_client->svc && !svc_client->keep_externally_passed_ctx_and_svc) + { + axis2_svc_free(svc_client->svc, env); + } + + if(svc_client->callback_recv) + { + AXIS2_CALLBACK_RECV_FREE(svc_client->callback_recv, env); + } + + if(svc_client->op_client) + { + axis2_op_client_free(svc_client->op_client, env); + svc_client->op_client = NULL; + } + + if(svc_client->options) + { + axis2_options_free(svc_client->options, env); + } + + if(svc_client->listener_manager) + { + axis2_listener_manager_free(svc_client->listener_manager, env); + } + + if(svc_client->conf_ctx && !svc_client->keep_externally_passed_ctx_and_svc) + { + axis2_conf_ctx_free(svc_client->conf_ctx, env); + } + + if(svc_client->auth_type) + { + AXIS2_FREE(env->allocator, svc_client->auth_type); + } + + if(svc_client->http_headers) + { + axis2_svc_client_set_http_info(svc_client, env, NULL); + } + + AXIS2_FREE(env->allocator, svc_client); + + return; +} + +static axis2_bool_t +axis2_svc_client_fill_soap_envelope( + const axutil_env_t * env, + axis2_svc_client_t * svc_client, + axis2_msg_ctx_t * msg_ctx, + const axiom_node_t * payload) +{ + const axis2_char_t *soap_version_uri; + int soap_version; + axiom_soap_envelope_t *envelope = NULL; + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FAILURE); + + soap_version_uri = axis2_options_get_soap_version_uri(svc_client->options, env); + + if(!soap_version_uri) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot find soap version uri."); + return AXIS2_FALSE; + } + + if(axutil_strcmp(soap_version_uri, AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI) == 0) + { + soap_version = AXIOM_SOAP11; + } + else + { + soap_version = AXIOM_SOAP12; + } + + envelope = axiom_soap_envelope_create_default_soap_envelope(env, soap_version); + if(!envelope) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create default soap envelope."); + return AXIS2_FALSE; + } + + if(svc_client->headers) + { + axiom_soap_header_t *soap_header = NULL; + soap_header = axiom_soap_envelope_get_header(envelope, env); + + if(soap_header) + { + axiom_node_t *header_node = NULL; + header_node = axiom_soap_header_get_base_node(soap_header, env); + + if(header_node) + { + int size = 0; + int i = 0; + size = axutil_array_list_size(svc_client->headers, env); + while(i < size) + { + axiom_node_t *node = NULL; + node = axutil_array_list_remove(svc_client->headers, env, 0); + /* This removes and retrieves data. The order of the + * removal is chosen such that the headers are appended + * in the order they were added. + */ + size--; + if(node) + { + axiom_node_add_child(header_node, env, node); + } + } + } + } + } + + if(payload) + { + axiom_soap_body_t *soap_body = NULL; + soap_body = axiom_soap_envelope_get_body(envelope, env); + if(soap_body) + { + axiom_node_t *node = NULL; + node = axiom_soap_body_get_base_node(soap_body, env); + if(node) + { + axiom_node_add_child(node, env, (axiom_node_t *)payload); + } + } + } + + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, envelope); + + return AXIS2_TRUE; +} + +AXIS2_EXTERN axis2_op_client_t *AXIS2_CALL +axis2_svc_client_get_op_client( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, svc_client, NULL); + return svc_client->op_client; +} + +AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL +axis2_svc_client_get_last_response_soap_envelope( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, svc_client, NULL); + return svc_client->last_response_soap_envelope; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_svc_client_get_last_response_has_fault( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FALSE); + return svc_client->last_response_has_fault; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_svc_client_get_http_auth_required( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FALSE); + if(svc_client->auth_failed && svc_client->required_auth_is_http) + { + return AXIS2_TRUE; + } + return AXIS2_FALSE; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_svc_client_get_proxy_auth_required( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FALSE); + if(svc_client->auth_failed && !svc_client->required_auth_is_http) + { + return AXIS2_TRUE; + } + return AXIS2_FALSE; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_svc_client_get_auth_type( + const axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + return svc_client->auth_type; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_set_proxy_with_auth( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + axis2_char_t * proxy_host, + axis2_char_t * proxy_port, + axis2_char_t * username, + axis2_char_t * password) +{ + axis2_transport_out_desc_t *trans_desc = NULL; + axis2_conf_t *conf = NULL; + axutil_param_container_t *param_container; + axutil_param_t *param; + axis2_char_t *proxy = AXIS2_HTTP_PROXY_API; + axutil_hash_t *attribute; + axutil_generic_obj_t *host_obj = NULL; + axutil_generic_obj_t *port_obj = NULL; + axutil_generic_obj_t *username_obj = NULL; + axutil_generic_obj_t *password_obj = NULL; + axiom_attribute_t *host_attr = NULL; + axiom_attribute_t *port_attr = NULL; + axiom_attribute_t *username_attr = NULL; + axiom_attribute_t *password_attr = NULL; + + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, proxy_host, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, proxy_port, AXIS2_FAILURE); + + if(svc_client->conf) + { + conf = svc_client->conf; + trans_desc = axis2_conf_get_transport_out(conf, env, AXIS2_TRANSPORT_ENUM_HTTP); + if(!trans_desc) + { + return AXIS2_FAILURE; + } + param_container = axis2_transport_out_desc_param_container(trans_desc, env); + param = axutil_param_create(env, proxy, (void *)NULL); + + if(!param) + { + return AXIS2_FAILURE; + } + + attribute = axutil_hash_make(env); + host_obj = axutil_generic_obj_create(env); + port_obj = axutil_generic_obj_create(env); + host_attr = axiom_attribute_create(env, AXIS2_HTTP_PROXY_HOST, proxy_host, NULL); + port_attr = axiom_attribute_create(env, AXIS2_HTTP_PROXY_PORT, proxy_port, NULL); + axutil_generic_obj_set_value(host_obj, env, host_attr); + axutil_generic_obj_set_free_func(host_obj, env, axiom_attribute_free_void_arg); + axutil_generic_obj_set_value(port_obj, env, port_attr); + axutil_generic_obj_set_free_func(port_obj, env, axiom_attribute_free_void_arg); + + axutil_hash_set(attribute, AXIS2_HTTP_PROXY_HOST, AXIS2_HASH_KEY_STRING, host_obj); + axutil_hash_set(attribute, AXIS2_HTTP_PROXY_PORT, AXIS2_HASH_KEY_STRING, port_obj); + if(username && password) + { + username_obj = axutil_generic_obj_create(env); + password_obj = axutil_generic_obj_create(env); + username_attr = axiom_attribute_create(env, AXIS2_HTTP_PROXY_USERNAME, username, NULL); + password_attr = axiom_attribute_create(env, AXIS2_HTTP_PROXY_PASSWORD, password, NULL); + axutil_generic_obj_set_value(username_obj, env, username_attr); + axutil_generic_obj_set_value(password_obj, env, password_attr); + axutil_generic_obj_set_free_func(username_obj, env, axiom_attribute_free_void_arg); + axutil_generic_obj_set_free_func(password_obj, env, axiom_attribute_free_void_arg); + axutil_hash_set(attribute, AXIS2_HTTP_PROXY_USERNAME, AXIS2_HASH_KEY_STRING, + username_obj); + axutil_hash_set(attribute, AXIS2_HTTP_PROXY_PASSWORD, AXIS2_HASH_KEY_STRING, + password_obj); + } + axutil_param_set_attributes(param, env, attribute); + axutil_param_container_add_param(param_container, env, param); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_set_proxy( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + axis2_char_t * proxy_host, + axis2_char_t * proxy_port) +{ + return axis2_svc_client_set_proxy_with_auth(svc_client, env, proxy_host, proxy_port, NULL, NULL); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_set_policy_from_om( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + axiom_node_t * root_node) +{ + neethi_policy_t *neethi_policy = NULL; + + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FAILURE); + neethi_policy = neethi_util_create_policy_from_om(env, root_node); + + if(neethi_policy) + { + return axis2_svc_client_set_policy(svc_client, env, neethi_policy); + } + else + { + return AXIS2_FAILURE; + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_set_policy( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + neethi_policy_t * policy) +{ + + axis2_svc_t *svc = NULL; + axis2_desc_t *desc = NULL; + axis2_policy_include_t *policy_include = NULL; + + AXIS2_PARAM_CHECK(env->error, svc_client, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, policy, AXIS2_FAILURE); + + svc = axis2_svc_client_get_svc(svc_client, env); + + if(!svc) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Cannot find service of service client. Cannot set policy."); + return AXIS2_FAILURE; + } + + desc = axis2_svc_get_base(svc, env); + if(!desc) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Cannot find service description of service client. Cannot set policy."); + return AXIS2_FAILURE; + } + + policy_include = axis2_desc_get_policy_include(desc, env); + if(!policy_include) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot find policy include. Cannot set policy."); + return AXIS2_FAILURE; + } + + axis2_policy_include_add_policy_element(policy_include, env, AXIS2_SERVICE_POLICY, policy); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_svc_client_get_http_headers( + axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + return svc_client->http_headers; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_svc_client_get_http_status_code( + axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + return svc_client->http_status_code; +} + +void +axis2_svc_client_set_http_info( + axis2_svc_client_t * svc_client, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_transport_in_desc_t *transport_in = NULL; + axutil_param_t *expose_headers_param = NULL; + axis2_bool_t expose_headers = AXIS2_FALSE; + + if(msg_ctx) + { + transport_in = axis2_msg_ctx_get_transport_in_desc(msg_ctx, env); + if(transport_in) + { + expose_headers_param = axutil_param_container_get_param( + axis2_transport_in_desc_param_container(transport_in, env), env, + AXIS2_EXPOSE_HEADERS); + } + if(expose_headers_param) + { + axis2_char_t *expose_headers_value = NULL; + expose_headers_value = axutil_param_get_value(expose_headers_param, env); + if(expose_headers_value && 0 == axutil_strcasecmp(expose_headers_value, + AXIS2_VALUE_TRUE)) + { + expose_headers = AXIS2_TRUE; + } + } + } + if(expose_headers) + { + if(svc_client->http_headers == axis2_msg_ctx_get_http_output_headers(msg_ctx, env)) + { + svc_client->http_status_code = axis2_msg_ctx_get_status_code(msg_ctx, env); + return; + } + } + + if(svc_client->http_headers) + { + axis2_http_header_t *header = NULL; + while(axutil_array_list_size(svc_client->http_headers, env)) + { + header = (axis2_http_header_t *)axutil_array_list_remove(svc_client->http_headers, env, + 0); + if(header) + { + axis2_http_header_free(header, env); + } + } + axutil_array_list_free(svc_client->http_headers, env); + svc_client->http_headers = NULL; + } + svc_client->http_status_code = 0; + + if(msg_ctx) + { + if(expose_headers) + { + svc_client->http_headers = axis2_msg_ctx_extract_http_output_headers(msg_ctx, env); + } + svc_client->http_status_code = axis2_msg_ctx_get_status_code(msg_ctx, env); + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_client_close( + axis2_svc_client_t * svc_client, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + axutil_property_t *property = NULL; + axis2_endpoint_ref_t *replyto = NULL; + + property = axutil_property_create_with_args(env, 0, 0, 0, AXIS2_VALUE_TRUE); + axis2_options_set_property(svc_client->options, env, AXIS2_SVC_CLIENT_CLOSED, property); + replyto = axis2_options_get_reply_to(svc_client->options, env); + if(replyto) + { + axiom_node_t *reply = NULL; + + reply = axis2_svc_client_send_receive(svc_client, env, NULL); + if(reply) + { + status = AXIS2_SUCCESS; + } + } + else + { + status = axis2_svc_client_send_robust(svc_client, env, NULL); + } + + return status; +} + diff --git a/src/core/context/Makefile.am b/src/core/context/Makefile.am new file mode 100644 index 0000000..30184e0 --- /dev/null +++ b/src/core/context/Makefile.am @@ -0,0 +1,13 @@ +noinst_LTLIBRARIES = libaxis2_context.la + +libaxis2_context_la_SOURCES = ctx.c \ + msg_ctx.c \ + op_ctx.c \ + svc_ctx.c \ + svc_grp_ctx.c \ + conf_ctx.c + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include diff --git a/src/core/context/conf_ctx.c b/src/core/context/conf_ctx.c new file mode 100644 index 0000000..9922649 --- /dev/null +++ b/src/core/context/conf_ctx.c @@ -0,0 +1,599 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + + +struct axis2_conf_ctx +{ + + /** base context struct */ + axis2_ctx_t *base; + + /** engine configuration */ + axis2_conf_t *conf; + + /** root directory */ + /* should be handled as a URL string ? */ + axis2_char_t *root_dir; + + /** + * axutil_hash_t *containing message ID to + * operation context mapping. + */ + axutil_hash_t *op_ctx_map; + + axutil_hash_t *svc_ctx_map; + + axutil_hash_t *svc_grp_ctx_map; + + /* Mutex to synchronize the read/write operations */ + axutil_thread_mutex_t *mutex; +}; + +AXIS2_EXTERN axis2_conf_ctx_t *AXIS2_CALL +axis2_conf_ctx_create( + const axutil_env_t * env, + axis2_conf_t * conf) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + + conf_ctx = AXIS2_MALLOC(env->allocator, sizeof(axis2_conf_ctx_t)); + if(!conf_ctx) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + + conf_ctx->base = NULL; + conf_ctx->conf = NULL; + conf_ctx->root_dir = NULL; + conf_ctx->op_ctx_map = NULL; + conf_ctx->svc_ctx_map = NULL; + conf_ctx->svc_grp_ctx_map = NULL; + conf_ctx->mutex = axutil_thread_mutex_create(env->allocator, AXIS2_THREAD_MUTEX_DEFAULT); + if(!conf_ctx->mutex) + { + axis2_conf_ctx_free(conf_ctx, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Could not create thread mutex"); + return NULL; + } + + if(conf) + conf_ctx->conf = conf; + + conf_ctx->base = axis2_ctx_create(env); + if(!(conf_ctx->base)) + { + axis2_conf_ctx_free(conf_ctx, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Could not create base context"); + return NULL; + } + + conf_ctx->op_ctx_map = axutil_hash_make(env); + if(!(conf_ctx->op_ctx_map)) + { + axis2_conf_ctx_free(conf_ctx, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Could not create operation context map"); + return NULL; + } + + conf_ctx->svc_ctx_map = axutil_hash_make(env); + if(!(conf_ctx->svc_ctx_map)) + { + axis2_conf_ctx_free(conf_ctx, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Could not create service context map"); + return NULL; + } + + conf_ctx->svc_grp_ctx_map = axutil_hash_make(env); + if(!(conf_ctx->svc_grp_ctx_map)) + { + axis2_conf_ctx_free(conf_ctx, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Could not create service group context map"); + return NULL; + } + + return conf_ctx; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_ctx_set_conf( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + axis2_conf_t * conf) +{ + conf_ctx->conf = conf; /* We just maintain a shallow copy here */ + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_ctx_t *AXIS2_CALL +axis2_conf_ctx_get_base( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env) +{ + return conf_ctx->base; +} + +AXIS2_EXTERN axis2_conf_t *AXIS2_CALL +axis2_conf_ctx_get_conf( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env) +{ + return conf_ctx->conf; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_conf_ctx_get_op_ctx_map( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env) +{ + return conf_ctx->op_ctx_map; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_conf_ctx_get_svc_ctx_map( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env) +{ + return conf_ctx->svc_ctx_map; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_conf_ctx_get_svc_grp_ctx_map( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env) +{ + return conf_ctx->svc_grp_ctx_map; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_ctx_register_op_ctx( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * message_id, + axis2_op_ctx_t * op_ctx) +{ + axutil_thread_mutex_lock(conf_ctx->mutex); + if(conf_ctx->op_ctx_map) + { + axutil_hash_set(conf_ctx->op_ctx_map, message_id, AXIS2_HASH_KEY_STRING, op_ctx); + } + axutil_thread_mutex_unlock(conf_ctx->mutex); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_op_ctx_t *AXIS2_CALL +axis2_conf_ctx_get_op_ctx( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * message_id) +{ + axis2_op_ctx_t *rv = NULL; + + AXIS2_PARAM_CHECK(env->error, message_id, NULL); + + axutil_thread_mutex_lock(conf_ctx->mutex); + if(conf_ctx->op_ctx_map) + { + rv = (axis2_op_ctx_t *)axutil_hash_get(conf_ctx->op_ctx_map, message_id, + AXIS2_HASH_KEY_STRING); + } + axutil_thread_mutex_unlock(conf_ctx->mutex); + return rv; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_ctx_register_svc_ctx( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * svc_id, + axis2_svc_ctx_t * svc_ctx) +{ + axutil_thread_mutex_lock(conf_ctx->mutex); + if(conf_ctx->svc_ctx_map) + { + axutil_hash_set(conf_ctx->svc_ctx_map, svc_id, AXIS2_HASH_KEY_STRING, svc_ctx); + } + axutil_thread_mutex_unlock(conf_ctx->mutex); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_svc_ctx_t *AXIS2_CALL +axis2_conf_ctx_get_svc_ctx( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * svc_id) +{ + axis2_svc_ctx_t *rv = NULL; + + axutil_thread_mutex_lock(conf_ctx->mutex); + if(conf_ctx->svc_ctx_map) + { + rv = (axis2_svc_ctx_t *)axutil_hash_get(conf_ctx->svc_ctx_map, svc_id, + AXIS2_HASH_KEY_STRING); + } + axutil_thread_mutex_unlock(conf_ctx->mutex); + return rv; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_ctx_register_svc_grp_ctx( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * svc_grp_id, + axis2_svc_grp_ctx_t * svc_grp_ctx) +{ + axutil_thread_mutex_lock(conf_ctx->mutex); + if(conf_ctx->svc_grp_ctx_map) + { + axutil_hash_set(conf_ctx->svc_grp_ctx_map, svc_grp_id, AXIS2_HASH_KEY_STRING, svc_grp_ctx); + } + axutil_thread_mutex_unlock(conf_ctx->mutex); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_svc_grp_ctx_t *AXIS2_CALL +axis2_conf_ctx_get_svc_grp_ctx( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * svc_grp_id) +{ + axis2_svc_grp_ctx_t *rv = NULL; + axutil_thread_mutex_lock(conf_ctx->mutex); + if(conf_ctx->svc_grp_ctx_map) + { + rv = (axis2_svc_grp_ctx_t *)axutil_hash_get(conf_ctx->svc_grp_ctx_map, svc_grp_id, + AXIS2_HASH_KEY_STRING); + } + axutil_thread_mutex_unlock(conf_ctx->mutex); + return rv; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_conf_ctx_get_root_dir( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env) +{ + axis2_char_t *rv = NULL; + /* Do we need to lock here? - damitha */ + axutil_thread_mutex_lock(conf_ctx->mutex); + rv = conf_ctx->root_dir; + axutil_thread_mutex_unlock(conf_ctx->mutex); + return rv; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_ctx_set_root_dir( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * path) +{ + axutil_thread_mutex_lock(conf_ctx->mutex); + if(conf_ctx->root_dir) + { + AXIS2_FREE(env->allocator, conf_ctx->root_dir); + conf_ctx->root_dir = NULL; + } + + if(path) + { + conf_ctx->root_dir = axutil_strdup(env, path); + if(!(conf_ctx->root_dir)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + axutil_thread_mutex_unlock(conf_ctx->mutex); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return AXIS2_FAILURE; + } + } + axutil_thread_mutex_unlock(conf_ctx->mutex); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_ctx_init( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + axis2_conf_t * conf) +{ + axutil_hash_index_t *hi = NULL; + void *ctx = NULL; + + axutil_thread_mutex_lock(conf_ctx->mutex); + conf_ctx->conf = conf; + + for(hi = axutil_hash_first(conf_ctx->op_ctx_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &ctx); + if(ctx) + { + axis2_op_ctx_t *op_ctx = (axis2_op_ctx_t *)ctx; + axis2_op_ctx_init(op_ctx, env, conf); + } + } + + for(hi = axutil_hash_first(conf_ctx->svc_ctx_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &ctx); + if(ctx) + { + axis2_svc_ctx_t *svc_ctx = (axis2_svc_ctx_t *)ctx; + axis2_svc_ctx_init(svc_ctx, env, conf); + } + } + + for(hi = axutil_hash_first(conf_ctx->svc_grp_ctx_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &ctx); + if(ctx) + { + axis2_svc_grp_ctx_t *svc_grp_ctx = (axis2_svc_grp_ctx_t *)ctx; + axis2_svc_grp_ctx_init(svc_grp_ctx, env, conf); + } + } + axutil_thread_mutex_unlock(conf_ctx->mutex); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_conf_ctx_free( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env) +{ + if(conf_ctx->base) + { + axis2_ctx_free(conf_ctx->base, env); + } + + if(conf_ctx->op_ctx_map) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + for(hi = axutil_hash_first(conf_ctx->op_ctx_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axis2_op_ctx_t *op_ctx = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + op_ctx = (axis2_op_ctx_t *)val; + if(op_ctx) + axis2_op_ctx_free(op_ctx, env); + val = NULL; + op_ctx = NULL; + + } + axutil_hash_free(conf_ctx->op_ctx_map, env); + } + + if(conf_ctx->svc_ctx_map) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + for(hi = axutil_hash_first(conf_ctx->svc_ctx_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axis2_svc_ctx_t *svc_ctx = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + svc_ctx = (axis2_svc_ctx_t *)val; + if(svc_ctx) + axis2_svc_ctx_free(svc_ctx, env); + + val = NULL; + svc_ctx = NULL; + + } + axutil_hash_free(conf_ctx->svc_ctx_map, env); + } + + if(conf_ctx->svc_grp_ctx_map) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + for(hi = axutil_hash_first(conf_ctx->svc_grp_ctx_map, env); hi; hi = axutil_hash_next(env, + hi)) + { + axis2_svc_grp_ctx_t *svc_grp_ctx = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + svc_grp_ctx = (axis2_svc_grp_ctx_t *)val; + if(svc_grp_ctx) + axis2_svc_grp_ctx_free(svc_grp_ctx, env); + + val = NULL; + svc_grp_ctx = NULL; + + } + axutil_hash_free(conf_ctx->svc_grp_ctx_map, env); + } + if(conf_ctx->conf) + { + axis2_conf_free(conf_ctx->conf, env); + } + if(conf_ctx->mutex) + { + axutil_thread_mutex_destroy(conf_ctx->mutex); + } + + if(conf_ctx->root_dir) + { + AXIS2_FREE(env->allocator, conf_ctx->root_dir); + } + + AXIS2_FREE(env->allocator, conf_ctx); +} + +AXIS2_EXTERN axis2_svc_grp_ctx_t *AXIS2_CALL +axis2_conf_ctx_fill_ctxs( + axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_char_t *svc_grp_ctx_id = NULL; + axis2_svc_grp_ctx_t *svc_grp_ctx = NULL; + axis2_svc_ctx_t *svc_ctx = NULL; + axis2_svc_t *svc = NULL; + axis2_svc_grp_t *svc_grp = NULL; + const axutil_qname_t *qname = NULL; + axis2_char_t *svc_id = NULL; + axis2_op_ctx_t *op_ctx = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + + svc = axis2_msg_ctx_get_svc(msg_ctx, env); + if(!svc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SERVICE_NOT_YET_FOUND, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Service not yet found in message context. Cannot proceed"); + + return NULL; + } + + qname = axis2_svc_get_qname(svc, env); + if(!qname) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_SVC, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service found in message context has no name."); + return NULL; + } + + svc_id = axutil_qname_get_localpart(qname, env); + if(!svc_id) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_SVC, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service found in message context has no name."); + return NULL; + } + + svc_grp = axis2_svc_get_parent(svc, env); + if(svc_grp) + { + svc_grp_ctx_id = (axis2_char_t *)axis2_svc_grp_get_name(svc_grp, env); + } + + if(!svc_grp_ctx_id) + { + svc_grp_ctx_id = (axis2_char_t *)axutil_string_get_buffer(axis2_msg_ctx_get_svc_grp_ctx_id( + msg_ctx, env), env); + } + + /* By this time service group context id must have a value, either from transport or from + * addressing + */ + if(svc_grp_ctx_id) + { + svc_grp_ctx = (axis2_svc_grp_ctx_t *)axutil_hash_get(conf_ctx->svc_grp_ctx_map, + svc_grp_ctx_id, AXIS2_HASH_KEY_STRING); + + if(svc_grp_ctx) + { + svc_ctx = axis2_svc_grp_ctx_get_svc_ctx(svc_grp_ctx, env, svc_id); + if(!svc_ctx) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_SVC_GRP, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Service group context has no servie context set for service %s", svc_id); + + return NULL; + } + } + } + + if(!svc_grp_ctx_id) + { + svc_grp_ctx_id = axutil_uuid_gen(env); + if(svc_grp_ctx_id) + { + axutil_string_t *svc_grp_ctx_id_str = axutil_string_create_assume_ownership(env, + &svc_grp_ctx_id); + + axis2_msg_ctx_set_svc_grp_ctx_id(msg_ctx, env, svc_grp_ctx_id_str); + axutil_string_free(svc_grp_ctx_id_str, env); + } + } + + if(!svc_grp_ctx) + { + axis2_svc_grp_t *svc_grp = NULL; + svc_grp = axis2_svc_get_parent(svc, env); + svc_grp_ctx = axis2_svc_grp_get_svc_grp_ctx(svc_grp, env, conf_ctx); + svc_ctx = axis2_svc_grp_ctx_get_svc_ctx(svc_grp_ctx, env, svc_id); + if(!svc_ctx) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_SVC_GRP, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Service group context has no servie context set for service %s", svc_id); + + return NULL; + } + + axis2_svc_grp_ctx_set_id(svc_grp_ctx, env, svc_grp_ctx_id); + axis2_conf_ctx_register_svc_grp_ctx(conf_ctx, env, svc_grp_ctx_id, svc_grp_ctx); + } + + /* When you come here operation context MUST have already been assigned + to the message context */ + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + if(!op_ctx) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_MSG_CTX, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Operation context not set for message context"); + return NULL; + } + + axis2_op_ctx_set_parent(op_ctx, env, svc_ctx); + axis2_msg_ctx_set_svc_ctx(msg_ctx, env, svc_ctx); + axis2_msg_ctx_set_svc_grp_ctx(msg_ctx, env, svc_grp_ctx); + return svc_grp_ctx; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_ctx_set_property( + axis2_conf_ctx_t *conf_ctx, + const axutil_env_t * env, + const axis2_char_t * key, + axutil_property_t * value) +{ + axis2_status_t status = AXIS2_FAILURE; + AXIS2_PARAM_CHECK(env->error, conf_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, key, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + + axutil_thread_mutex_lock(conf_ctx->mutex); + status = axis2_ctx_set_property(conf_ctx->base, env, key, value); + axutil_thread_mutex_unlock(conf_ctx->mutex); + + return status; +} + +AXIS2_EXTERN axutil_property_t *AXIS2_CALL +axis2_conf_ctx_get_property( + const axis2_conf_ctx_t * conf_ctx, + const axutil_env_t * env, + const axis2_char_t * key) +{ + axutil_property_t* property = NULL; + AXIS2_PARAM_CHECK(env->error, conf_ctx, NULL); + AXIS2_PARAM_CHECK(env->error, key, NULL); + + axutil_thread_mutex_lock(conf_ctx->mutex); + property = axis2_ctx_get_property(conf_ctx->base, env, key); + axutil_thread_mutex_unlock(conf_ctx->mutex); + + return property; +} diff --git a/src/core/context/ctx.c b/src/core/context/ctx.c new file mode 100644 index 0000000..df39a9b --- /dev/null +++ b/src/core/context/ctx.c @@ -0,0 +1,197 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axis2_ctx +{ + + /** non persistent map */ + axutil_hash_t *property_map; + + /** non persistent map is a deep copy */ + axis2_bool_t property_map_deep_copy; +}; + +AXIS2_EXTERN axis2_ctx_t *AXIS2_CALL +axis2_ctx_create( + const axutil_env_t * env) +{ + axis2_ctx_t *ctx = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + ctx = AXIS2_MALLOC(env->allocator, sizeof(axis2_ctx_t)); + if(!ctx) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + ctx->property_map = NULL; + + ctx->property_map = axutil_hash_make(env); + ctx->property_map_deep_copy = AXIS2_TRUE; + if(!(ctx->property_map)) + { + axis2_ctx_free(ctx, env); + return NULL; + } + + return ctx; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_ctx_set_property( + struct axis2_ctx * ctx, + const axutil_env_t * env, + const axis2_char_t * key, + axutil_property_t * value) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(value) + { + /* handle the case where we are setting a new value with the + same key, we would have to free the existing value */ + axutil_property_t *temp_value = axutil_hash_get(ctx->property_map, key, + AXIS2_HASH_KEY_STRING); + if(temp_value) + { + void *temp_value_value = axutil_property_get_value(temp_value, env); + void *value_value = axutil_property_get_value(value, env); + if(temp_value_value != value_value) + { + axutil_property_free(temp_value, env); + } + } + } + if(ctx->property_map) + { + axutil_hash_set(ctx->property_map, key, AXIS2_HASH_KEY_STRING, value); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_property_t *AXIS2_CALL +axis2_ctx_get_property( + const axis2_ctx_t * ctx, + const axutil_env_t * env, + const axis2_char_t * key) +{ + axutil_property_t *ret = NULL; + + if(ctx->property_map) + { + ret = axutil_hash_get(ctx->property_map, key, AXIS2_HASH_KEY_STRING); + } + + /** it is the responsibility of the caller to look-up parent if key is not found here + Note that in C implementation it is the responsibility of the deriving struct to + handle the parent as we do not have the inheritance facility. In case of + context it is not worth trying to mimic inheritance. */ + + return ret; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_ctx_get_all_properties( + const axis2_ctx_t * ctx, + const axutil_env_t * env) +{ + return ctx->property_map; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_ctx_get_property_map( + const axis2_ctx_t * ctx, + const axutil_env_t * env) +{ + return ctx->property_map; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_ctx_free( + struct axis2_ctx *ctx, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(ctx->property_map && ctx->property_map_deep_copy) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + const void *key = NULL; + for(hi = axutil_hash_first(ctx->property_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_property_t *property = NULL; + + axutil_hash_this(hi, &key, NULL, &val); + property = (axutil_property_t *)val; + + if(property) + { + axutil_property_free(property, env); + } + } + axutil_hash_free(ctx->property_map, env); + } + + AXIS2_FREE(env->allocator, ctx); + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_ctx_set_property_map( + struct axis2_ctx * ctx, + const axutil_env_t * env, + axutil_hash_t * map) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(ctx->property_map && ctx->property_map_deep_copy) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + const void *key = NULL; + for(hi = axutil_hash_first(ctx->property_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_property_t *property = NULL; + + axutil_hash_this(hi, &key, NULL, &val); + property = (axutil_property_t *)val; + + if(property) + { + axutil_property_free(property, env); + } + } + if(ctx->property_map != map) /* handle repeated invocation case */ + { + axutil_hash_free(ctx->property_map, env); + } + } + + ctx->property_map = map; + ctx->property_map_deep_copy = AXIS2_FALSE; + + return AXIS2_SUCCESS; +} diff --git a/src/core/context/msg_ctx.c b/src/core/context/msg_ctx.c new file mode 100644 index 0000000..c2342c4 --- /dev/null +++ b/src/core/context/msg_ctx.c @@ -0,0 +1,2768 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +struct axis2_msg_ctx +{ + + /** base context struct */ + axis2_ctx_t *base; + + /** parent of message context is an op context instance */ + struct axis2_op_ctx *parent; + + /** process fault enabled? */ + axis2_bool_t process_fault; + + /** + * Addressing Information for Axis 2 + * Following Properties will be kept inside this, these fields will be initially filled by + * the transport. Then later an addressing handler will make relevant changes to this, if addressing + * information is present in the SOAP header. + */ + axis2_msg_info_headers_t *msg_info_headers; + axis2_bool_t msg_info_headers_deep_copy; + + struct axis2_op_ctx *op_ctx; + struct axis2_svc_ctx *svc_ctx; + struct axis2_svc_grp_ctx *svc_grp_ctx; + struct axis2_conf_ctx *conf_ctx; + + /** op */ + axis2_op_t *op; + + /** service */ + axis2_svc_t *svc; + + /** service group */ + axis2_svc_grp_t *svc_grp; + + axis2_transport_in_desc_t *transport_in_desc; + axis2_transport_out_desc_t *transport_out_desc; + + /** SOAP envelope */ + axiom_soap_envelope_t *soap_envelope; + + /** Response SOAP envelope */ + axiom_soap_envelope_t *response_soap_envelope; + + /** SOAP Fault envelope */ + axiom_soap_envelope_t *fault_soap_envelope; + + /** in fault flow? */ + axis2_bool_t in_fault_flow; + + /** is this server side? */ + axis2_bool_t server_side; + + /** message ID */ + axis2_char_t *message_id; + + /** new thread required? */ + axis2_bool_t new_thread_required; + + /** paused */ + axis2_bool_t paused; + axis2_bool_t keep_alive; + + /** output written? */ + axis2_bool_t output_written; + + /** service context ID */ + axis2_char_t *svc_ctx_id; + + /** paused phase name */ + axis2_char_t *paused_phase_name; + + /** paused handler name */ + axutil_string_t *paused_handler_name; + + /** SOAP action */ + axutil_string_t *soap_action; + + /** REST HTTP Method */ + axis2_char_t *rest_http_method; + + /** + * Supported REST HTTP Methods + * Made use of in a 405 Error Scenario + */ + axutil_array_list_t *supported_rest_http_methods; + + /** are we doing MTOM now? */ + axis2_bool_t doing_mtom; + + /** are we doing REST now? */ + axis2_bool_t doing_rest; + + /** Rest through HTTP POST? */ + axis2_bool_t do_rest_through_post; + + /** Session management enabled? */ + axis2_bool_t manage_session; + + /* http status code */ + int status_code; + + /** use SOAP 1.1? */ + axis2_bool_t is_soap_11; + + /** service group context id */ + axutil_string_t *svc_grp_ctx_id; + + /** qname of transport in */ + AXIS2_TRANSPORT_ENUMS transport_in_desc_enum; + + /** qname of transport out */ + AXIS2_TRANSPORT_ENUMS transport_out_desc_enum; + + /** service group id */ + axis2_char_t *svc_grp_id; + + /** service description qname */ + axutil_qname_t *svc_qname; + + /** op qname */ + axutil_qname_t *op_qname; + /* To keep track of the direction */ + int flow; + + /** The chain of Handlers/Phases for processing this message */ + axutil_array_list_t *execution_chain; + + /** Index into the execution chain of the currently executing handler */ + int current_handler_index; + + /** Index of the paused handler */ + int paused_handler_index; + + /** Index of the paused phase */ + int paused_phase_index; + + /** Index into the current Phase of the currently executing handler (if any)*/ + int current_phase_index; + + /* axis2 options container */ + + axis2_options_t *options; + + /** + * Finds the service to be invoked. This function is used by dispatchers + * to locate the service to be invoked. + * @param msg_ctx message context + * @param env pointer to environment struct + * @return pointer to service to be invoked + */ + struct axis2_svc * + ( + AXIS2_CALL * find_svc) + ( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + + /** + * Finds the operation to be invoked in the given service. This function + * is used by dispatchers to locate the operation to be invoked. + * @param msg_ctx message context + * @param env pointer to environment struct + * @param svc pointer to service to whom the operation belongs + * @return pointer to the operation to be invoked + */ + struct axis2_op * + ( + AXIS2_CALL * find_op) + ( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + struct axis2_svc * svc); + + axutil_string_t *charset_encoding; + axutil_stream_t *transport_out_stream; + axis2_out_transport_info_t *out_transport_info; + axutil_hash_t *transport_headers; + axutil_array_list_t *output_headers; + axutil_array_list_t *accept_record_list; + axutil_array_list_t *accept_charset_record_list; + axutil_array_list_t *accept_language_record_list; + axis2_char_t *transfer_encoding; + axis2_char_t *content_language; + axis2_char_t *transport_url; + axis2_bool_t is_auth_failure; + axis2_bool_t required_auth_is_http; + axis2_char_t *auth_type; + axis2_bool_t no_content; + + axutil_array_list_t *mime_parts; + int ref; +}; + +AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL +axis2_msg_ctx_create( + const axutil_env_t * env, + struct axis2_conf_ctx *conf_ctx, + struct axis2_transport_in_desc *transport_in_desc, + struct axis2_transport_out_desc *transport_out_desc) +{ + axis2_msg_ctx_t *msg_ctx = NULL; + + msg_ctx = AXIS2_MALLOC(env->allocator, sizeof(axis2_msg_ctx_t)); + if(!msg_ctx) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + memset((void *)msg_ctx, 0, sizeof(axis2_msg_ctx_t)); + msg_ctx->base = NULL; + msg_ctx->process_fault = AXIS2_FALSE; + msg_ctx->msg_info_headers = NULL; + msg_ctx->op_ctx = NULL; + msg_ctx->svc_ctx = NULL; + msg_ctx->svc_grp_ctx = NULL; + msg_ctx->conf_ctx = NULL; + msg_ctx->op = NULL; + msg_ctx->svc = NULL; + msg_ctx->svc_grp = NULL; + msg_ctx->transport_in_desc = NULL; + msg_ctx->transport_out_desc = NULL; + msg_ctx->soap_envelope = NULL; + msg_ctx->fault_soap_envelope = NULL; + msg_ctx->in_fault_flow = AXIS2_FALSE; + msg_ctx->server_side = AXIS2_FALSE; + msg_ctx->message_id = NULL; + msg_ctx->new_thread_required = AXIS2_FALSE; + msg_ctx->paused = AXIS2_FALSE; + msg_ctx->keep_alive = AXIS2_FALSE; + msg_ctx->output_written = AXIS2_FALSE; + msg_ctx->svc_ctx_id = NULL; + msg_ctx->paused_phase_name = NULL; + msg_ctx->paused_handler_name = NULL; + msg_ctx->soap_action = NULL; + msg_ctx->rest_http_method = NULL; + msg_ctx->supported_rest_http_methods = NULL; + msg_ctx->doing_mtom = AXIS2_FALSE; + msg_ctx->doing_rest = AXIS2_FALSE; + msg_ctx->do_rest_through_post = AXIS2_FALSE; + msg_ctx->manage_session = AXIS2_FALSE; + msg_ctx->is_soap_11 = AXIS2_FALSE; + msg_ctx->svc_grp_ctx_id = NULL; + msg_ctx->transport_in_desc_enum = AXIS2_TRANSPORT_ENUM_MAX; + msg_ctx->transport_out_desc_enum = AXIS2_TRANSPORT_ENUM_MAX; + msg_ctx->svc_grp_id = NULL; + msg_ctx->svc_qname = NULL; + msg_ctx->op_qname = NULL; + msg_ctx->flow = AXIS2_IN_FLOW; + msg_ctx->execution_chain = NULL; + msg_ctx->current_handler_index = -1; + msg_ctx->paused_handler_index = -1; + msg_ctx->current_phase_index = 0; + msg_ctx->paused_phase_index = 0; + msg_ctx->charset_encoding = NULL; + msg_ctx->transport_out_stream = NULL; + msg_ctx->out_transport_info = NULL; + msg_ctx->transport_headers = NULL; + msg_ctx->accept_record_list = NULL; + msg_ctx->accept_charset_record_list = NULL; + msg_ctx->output_headers = NULL; + msg_ctx->accept_language_record_list = NULL; + msg_ctx->transfer_encoding = NULL; + msg_ctx->content_language = NULL; + msg_ctx->transport_url = NULL; + msg_ctx->response_soap_envelope = NULL; + msg_ctx->is_auth_failure = AXIS2_FALSE; + msg_ctx->required_auth_is_http = AXIS2_FALSE; + msg_ctx->auth_type = NULL; + msg_ctx->no_content = AXIS2_FALSE; + msg_ctx->status_code = 0; + msg_ctx->options = NULL; + msg_ctx->mime_parts = NULL; + + msg_ctx->base = axis2_ctx_create(env); + if(!(msg_ctx->base)) + { + axis2_msg_ctx_free(msg_ctx, env); + return NULL; + } + + if(transport_in_desc) + msg_ctx->transport_in_desc = transport_in_desc; + if(transport_out_desc) + msg_ctx->transport_out_desc = transport_out_desc; + if(conf_ctx) + msg_ctx->conf_ctx = conf_ctx; + + if(msg_ctx->transport_in_desc) + msg_ctx->transport_in_desc_enum = axis2_transport_in_desc_get_enum(transport_in_desc, env); + if(msg_ctx->transport_out_desc) + msg_ctx->transport_out_desc_enum = axis2_transport_out_desc_get_enum(transport_out_desc, + env); + + msg_ctx->msg_info_headers = axis2_msg_info_headers_create(env, NULL, NULL); + if(!(msg_ctx->msg_info_headers)) + { + axis2_msg_ctx_free(msg_ctx, env); + return NULL; + } + msg_ctx->msg_info_headers_deep_copy = AXIS2_TRUE; + msg_ctx->ref = 1; + + return msg_ctx; +} + +/******************************************************************************/ +struct axis2_ctx *AXIS2_CALL +axis2_msg_ctx_get_base( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + return msg_ctx->base; +} + +struct axis2_op_ctx *AXIS2_CALL +axis2_msg_ctx_get_parent( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->parent; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_parent( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + struct axis2_op_ctx * parent) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(parent) + { + msg_ctx->parent = parent; + } + + return AXIS2_SUCCESS; +} + +void AXIS2_CALL +axis2_msg_ctx_free( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + if(--(msg_ctx->ref) > 0) + { + return; + } + + if(msg_ctx->keep_alive) + { + return; + } + + if(msg_ctx->base) + { + axis2_ctx_free(msg_ctx->base, env); + } + + if(msg_ctx->msg_info_headers && msg_ctx->msg_info_headers_deep_copy) + { + axis2_msg_info_headers_free(msg_ctx->msg_info_headers, env); + } + + if(msg_ctx->message_id) + { + AXIS2_FREE(env->allocator, msg_ctx->message_id); + } + + if(msg_ctx->svc_ctx_id) + { + AXIS2_FREE(env->allocator, msg_ctx->svc_ctx_id); + } + + if(msg_ctx->soap_action) + { + axutil_string_free(msg_ctx->soap_action, env); + } + + if(msg_ctx->rest_http_method) + { + AXIS2_FREE(env->allocator, msg_ctx->rest_http_method); + } + + if(msg_ctx->svc_grp_ctx_id) + { + axutil_string_free(msg_ctx->svc_grp_ctx_id, env); + } + + if(msg_ctx->soap_envelope) + { + axiom_soap_envelope_free(msg_ctx->soap_envelope, env); + } + + if(msg_ctx->fault_soap_envelope) + { + axiom_soap_envelope_free(msg_ctx->fault_soap_envelope, env); + } + + if(msg_ctx->charset_encoding) + { + axutil_string_free(msg_ctx->charset_encoding, env); + } + + if(msg_ctx->transport_out_stream) + { + axutil_stream_free(msg_ctx->transport_out_stream, env); + } + + if(msg_ctx->out_transport_info) + { + AXIS2_OUT_TRANSPORT_INFO_FREE(msg_ctx->out_transport_info, env); + } + + if(msg_ctx->transport_headers) + { + axutil_hash_free(msg_ctx->transport_headers, env); + } + + if(msg_ctx->accept_charset_record_list) + { + axis2_http_accept_record_t *rec = NULL; + while(axutil_array_list_size(msg_ctx->accept_charset_record_list, env)) + { + rec = (axis2_http_accept_record_t *)axutil_array_list_remove( + msg_ctx->accept_charset_record_list, env, 0); + if(rec) + { + axis2_http_accept_record_free(rec, env); + } + } + axutil_array_list_free(msg_ctx->accept_charset_record_list, env); + } + + if(msg_ctx->output_headers) + { + axis2_http_header_t *header = NULL; + while(axutil_array_list_size(msg_ctx->output_headers, env)) + { + header = (axis2_http_header_t *)axutil_array_list_remove(msg_ctx->output_headers, env, + 0); + if(header) + { + axis2_http_header_free(header, env); + } + } + axutil_array_list_free(msg_ctx->output_headers, env); + } + + if(msg_ctx->accept_language_record_list) + { + axis2_http_accept_record_t *rec = NULL; + while(axutil_array_list_size(msg_ctx->accept_language_record_list, env)) + { + rec = (axis2_http_accept_record_t *)axutil_array_list_remove( + msg_ctx->accept_language_record_list, env, 0); + if(rec) + { + axis2_http_accept_record_free(rec, env); + } + } + axutil_array_list_free(msg_ctx->accept_language_record_list, env); + } + + if(msg_ctx->accept_record_list) + { + axis2_http_accept_record_t *rec = NULL; + while(axutil_array_list_size(msg_ctx->accept_record_list, env)) + { + rec = (axis2_http_accept_record_t *)axutil_array_list_remove( + msg_ctx->accept_record_list, env, 0); + if(rec) + { + axis2_http_accept_record_free(rec, env); + } + } + axutil_array_list_free(msg_ctx->accept_record_list, env); + } + + if(msg_ctx->transfer_encoding) + { + AXIS2_FREE(env->allocator, msg_ctx->transfer_encoding); + } + + if(msg_ctx->content_language) + { + AXIS2_FREE(env->allocator, msg_ctx->content_language); + } + + if(msg_ctx->auth_type) + { + AXIS2_FREE(env->allocator, msg_ctx->auth_type); + } + + if(msg_ctx->supported_rest_http_methods) + { + int i = 0; + int size = 0; + + size = axutil_array_list_size(msg_ctx->supported_rest_http_methods, env); + for(i = 0; i < size; i++) + { + axis2_char_t *rest_http_method = NULL; + rest_http_method = axutil_array_list_get(msg_ctx->supported_rest_http_methods, env, i); + if(rest_http_method) + { + AXIS2_FREE(env->allocator, rest_http_method); + } + } + axutil_array_list_free(msg_ctx->supported_rest_http_methods, env); + } + + if(msg_ctx->options) + { + /* freeing only axis2_options_t allocated space, should not + * call axis2_options_free because it will free internal + * properties as well. */ + AXIS2_FREE(env->allocator, msg_ctx->options); + } + + AXIS2_FREE(env->allocator, msg_ctx); + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_increment_ref( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + msg_ctx->ref++; + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_init( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + struct axis2_conf * conf) +{ + AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + msg_ctx->transport_in_desc = axis2_conf_get_transport_in(conf, env, + msg_ctx-> transport_in_desc_enum); + + msg_ctx->transport_out_desc = axis2_conf_get_transport_out(conf, env, + msg_ctx-> transport_out_desc_enum); + + if(msg_ctx->svc_grp_id) + { + msg_ctx->svc_grp = axis2_conf_get_svc_grp(conf, env, msg_ctx->svc_grp_id); + } + + if(msg_ctx->svc_qname) + { + msg_ctx->svc = axis2_conf_get_svc(conf, env, axutil_qname_get_localpart( + msg_ctx-> svc_qname, env)); + } + + if(msg_ctx->op_qname) + { + if(msg_ctx->svc) + msg_ctx->op = axis2_svc_get_op_with_qname(msg_ctx->svc, env, msg_ctx->op_qname); + } + + return AXIS2_SUCCESS; +} + +axis2_endpoint_ref_t *AXIS2_CALL +axis2_msg_ctx_get_fault_to( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_get_fault_to(msg_ctx->msg_info_headers, env); + } + + return NULL; +} + +axis2_endpoint_ref_t *AXIS2_CALL +axis2_msg_ctx_get_from( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_get_from(msg_ctx->msg_info_headers, env); + } + + return NULL; +} + +axis2_bool_t AXIS2_CALL +axis2_msg_ctx_get_in_fault_flow( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + return msg_ctx->in_fault_flow; +} + +axiom_soap_envelope_t *AXIS2_CALL +axis2_msg_ctx_get_soap_envelope( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->soap_envelope; +} + +axiom_soap_envelope_t *AXIS2_CALL +axis2_msg_ctx_get_response_soap_envelope( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->response_soap_envelope; +} + +axiom_soap_envelope_t *AXIS2_CALL +axis2_msg_ctx_get_fault_soap_envelope( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->fault_soap_envelope; +} + +const axis2_char_t *AXIS2_CALL +axis2_msg_ctx_get_msg_id( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_get_message_id(msg_ctx->msg_info_headers, env); + } + + return NULL; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_msg_id( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_char_t * msg_id) +{ + AXIS2_PARAM_CHECK(env->error, msg_id, AXIS2_FAILURE); + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_set_message_id(msg_ctx->msg_info_headers, env, msg_id); + } + + return AXIS2_SUCCESS; +} + +axis2_bool_t AXIS2_CALL +axis2_msg_ctx_get_process_fault( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + return msg_ctx->process_fault; +} + +axis2_relates_to_t *AXIS2_CALL +axis2_msg_ctx_get_relates_to( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_get_relates_to(msg_ctx->msg_info_headers, env); + } + + return NULL; +} + +axis2_endpoint_ref_t *AXIS2_CALL +axis2_msg_ctx_get_reply_to( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_get_reply_to(msg_ctx->msg_info_headers, env); + } + + return NULL; +} + +axis2_bool_t AXIS2_CALL +axis2_msg_ctx_get_server_side( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + return msg_ctx->server_side; +} + +axis2_endpoint_ref_t *AXIS2_CALL +axis2_msg_ctx_get_to( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_get_to(msg_ctx->msg_info_headers, env); + } + + return NULL; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_fault_to( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + axis2_endpoint_ref_t * reference) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_set_to(msg_ctx->msg_info_headers, env, reference); + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_from( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + axis2_endpoint_ref_t * reference) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_set_from(msg_ctx->msg_info_headers, env, reference); + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_in_fault_flow( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t in_fault_flow) +{ + msg_ctx->in_fault_flow = in_fault_flow; + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_soap_envelope( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + axiom_soap_envelope_t * soap_envelope) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + if(soap_envelope) + { + int soap_v = AXIOM_SOAP12; + soap_v = axiom_soap_envelope_get_soap_version(soap_envelope, env); + msg_ctx->is_soap_11 = (soap_v == AXIOM_SOAP12) ? AXIS2_FALSE : AXIS2_TRUE; + msg_ctx->soap_envelope = soap_envelope; + } + else + { + msg_ctx->soap_envelope = NULL; + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_response_soap_envelope( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + axiom_soap_envelope_t * soap_envelope) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + if(soap_envelope) + { + int soap_v = AXIOM_SOAP12; + soap_v = axiom_soap_envelope_get_soap_version(soap_envelope, env); + msg_ctx->response_soap_envelope = soap_envelope; + } + else + { + msg_ctx->response_soap_envelope = NULL; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_fault_soap_envelope( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + axiom_soap_envelope_t * soap_envelope) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->fault_soap_envelope = soap_envelope; + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_message_id( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * message_id) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_set_message_id(msg_ctx->msg_info_headers, env, message_id); + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_process_fault( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t process_fault) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->process_fault = process_fault; + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_relates_to( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + axis2_relates_to_t * reference) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_set_relates_to(msg_ctx->msg_info_headers, env, reference); + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_reply_to( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + axis2_endpoint_ref_t * reference) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_set_reply_to(msg_ctx->msg_info_headers, env, reference); + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_server_side( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t server_side) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->server_side = server_side; + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_to( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + axis2_endpoint_ref_t * reference) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_set_to(msg_ctx->msg_info_headers, env, reference); + } + + return AXIS2_SUCCESS; +} + +axis2_bool_t AXIS2_CALL +axis2_msg_ctx_get_new_thread_required( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + return msg_ctx->new_thread_required; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_new_thread_required( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t new_thread_required) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->new_thread_required = new_thread_required; + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_wsa_action( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * action_uri) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_set_action(msg_ctx->msg_info_headers, env, action_uri); + } + + return AXIS2_SUCCESS; +} + +const axis2_char_t *AXIS2_CALL +axis2_msg_ctx_get_wsa_action( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_get_action(msg_ctx->msg_info_headers, env); + } + + return NULL; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_wsa_message_id( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * message_id) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_set_message_id(msg_ctx->msg_info_headers, env, message_id); + } + + return AXIS2_SUCCESS; +} + +const axis2_char_t *AXIS2_CALL +axis2_msg_ctx_get_wsa_message_id( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + + if(msg_ctx->msg_info_headers) + { + return axis2_msg_info_headers_get_message_id(msg_ctx->msg_info_headers, env); + } + + return NULL; + +} + +axis2_msg_info_headers_t *AXIS2_CALL +axis2_msg_ctx_get_msg_info_headers( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->msg_info_headers; +} + +axis2_bool_t AXIS2_CALL +axis2_msg_ctx_get_paused( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + return msg_ctx->paused; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_paused( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t paused) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->paused = paused; + msg_ctx->paused_phase_index = msg_ctx->current_phase_index; + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_keep_alive( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t keep_alive) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->keep_alive = keep_alive; + return AXIS2_SUCCESS; +} + +axis2_bool_t AXIS2_CALL +axis2_msg_ctx_is_keep_alive( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + return msg_ctx->keep_alive; +} + +struct axis2_transport_in_desc *AXIS2_CALL +axis2_msg_ctx_get_transport_in_desc( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->transport_in_desc; +} + +struct axis2_transport_out_desc *AXIS2_CALL +axis2_msg_ctx_get_transport_out_desc( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->transport_out_desc; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_transport_in_desc( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + struct axis2_transport_in_desc * transport_in_desc) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(transport_in_desc) + { + msg_ctx->transport_in_desc = transport_in_desc; + msg_ctx->transport_in_desc_enum = axis2_transport_in_desc_get_enum(transport_in_desc, env); + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_transport_out_desc( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + struct axis2_transport_out_desc * transport_out_desc) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(transport_out_desc) + { + msg_ctx->transport_out_desc = transport_out_desc; + msg_ctx->transport_out_desc_enum = axis2_transport_out_desc_get_enum(transport_out_desc, + env); + } + + return AXIS2_SUCCESS; +} + +struct axis2_op_ctx *AXIS2_CALL +axis2_msg_ctx_get_op_ctx( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->op_ctx; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_op_ctx( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + struct axis2_op_ctx * op_ctx) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(op_ctx) + { + msg_ctx->op_ctx = op_ctx; + + if(msg_ctx->svc_ctx) + { + if(!(axis2_op_ctx_get_parent(msg_ctx->op_ctx, env))) + { + axis2_op_ctx_set_parent(msg_ctx->op_ctx, env, msg_ctx->svc_ctx); + } + } + axis2_msg_ctx_set_parent(msg_ctx, env, op_ctx); + axis2_msg_ctx_set_op(msg_ctx, env, axis2_op_ctx_get_op(op_ctx, env)); + } + return AXIS2_SUCCESS; +} + +axis2_bool_t AXIS2_CALL +axis2_msg_ctx_get_output_written( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + return msg_ctx->output_written; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_output_written( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t output_written) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->output_written = output_written; + return AXIS2_SUCCESS; +} + +const axis2_char_t *AXIS2_CALL +axis2_msg_ctx_get_rest_http_method( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->rest_http_method; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_rest_http_method( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * rest_http_method) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(msg_ctx->rest_http_method) + { + AXIS2_FREE(env->allocator, msg_ctx->rest_http_method); + msg_ctx->rest_http_method = NULL; + } + + if(rest_http_method) + { + msg_ctx->rest_http_method = axutil_strdup(env, rest_http_method); + if(!(msg_ctx->rest_http_method)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + return AXIS2_SUCCESS; +} + +const axis2_char_t *AXIS2_CALL +axis2_msg_ctx_get_svc_ctx_id( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->svc_ctx_id; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_svc_ctx_id( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * svc_ctx_id) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(msg_ctx->svc_ctx_id) + { + AXIS2_FREE(env->allocator, msg_ctx->svc_ctx_id); + msg_ctx->svc_ctx_id = NULL; + } + + if(svc_ctx_id) + { + msg_ctx->svc_ctx_id = axutil_strdup(env, svc_ctx_id); + if(!(msg_ctx->svc_ctx_id)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + return AXIS2_SUCCESS; +} + +struct axis2_conf_ctx *AXIS2_CALL +axis2_msg_ctx_get_conf_ctx( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->conf_ctx; +} + +struct axis2_svc_ctx *AXIS2_CALL +axis2_msg_ctx_get_svc_ctx( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->svc_ctx; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_conf_ctx( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + struct axis2_conf_ctx * conf_ctx) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(conf_ctx) + { + msg_ctx->conf_ctx = conf_ctx; + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_svc_ctx( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + struct axis2_svc_ctx * svc_ctx) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(svc_ctx) + { + msg_ctx->svc_ctx = svc_ctx; + + if(msg_ctx->op_ctx) + { + if(!axis2_op_ctx_get_parent(msg_ctx->op_ctx, env)) + axis2_op_ctx_set_parent(msg_ctx->op_ctx, env, svc_ctx); + } + axis2_msg_ctx_set_svc(msg_ctx, env, axis2_svc_ctx_get_svc(svc_ctx, env)); + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_msg_info_headers( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + axis2_msg_info_headers_t * msg_info_headers) +{ + AXIS2_PARAM_CHECK(env->error, msg_info_headers, AXIS2_FAILURE); + + if(msg_info_headers) + { + if(msg_ctx->msg_info_headers && msg_ctx->msg_info_headers_deep_copy) + { + axis2_msg_info_headers_free(msg_ctx->msg_info_headers, env); + msg_ctx->msg_info_headers = NULL; + } + msg_ctx->msg_info_headers = msg_info_headers; + msg_ctx->msg_info_headers_deep_copy = AXIS2_FALSE; + } + + return AXIS2_SUCCESS; +} + +axutil_param_t *AXIS2_CALL +axis2_msg_ctx_get_parameter( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * key) +{ + axutil_param_t *param = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + + if(msg_ctx->op) + { + param = axis2_op_get_param(msg_ctx->op, env, key); + if(param) + { + return param; + } + } + + if(msg_ctx->svc) + { + param = axis2_svc_get_param(msg_ctx->svc, env, key); + if(param) + { + return param; + } + } + + if(msg_ctx->svc_grp) + { + param = axis2_svc_grp_get_param(msg_ctx->svc_grp, env, key); + if(param) + { + return param; + } + } + + if(msg_ctx->conf_ctx) + { + axis2_conf_t *conf = axis2_conf_ctx_get_conf(msg_ctx->conf_ctx, env); + param = axis2_conf_get_param(conf, env, key); + } + + return param; +} + +AXIS2_EXTERN void *AXIS2_CALL +axis2_msg_ctx_get_property_value( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * property_str) +{ + axutil_property_t *property; + void *property_value = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + property = axis2_msg_ctx_get_property(msg_ctx, env, property_str); + + if(!property) + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "%s not set in message context", property_str); + return NULL; + } + + property_value = axutil_property_get_value(property, env); + if(!property_value) + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "%s properties not set in message context", + property_str); + return NULL; + } + + return property_value; +} + +axutil_property_t *AXIS2_CALL +axis2_msg_ctx_get_property( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * key) +{ + void *obj = NULL; + axis2_ctx_t *ctx = NULL; + + /* Don't use AXIS2_PARAM_CHECK to verify msg_ctx, as it clobbers + env->error->status_code destroying the information therein that + an error has already occurred. */ + if(!msg_ctx) + { + if(axutil_error_get_status_code(env->error) == AXIS2_SUCCESS) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + } + return obj; + } + + /* search in message context */ + obj = axis2_ctx_get_property(msg_ctx->base, env, key); + if(obj) + { + return obj; + } + + if(msg_ctx->op_ctx) + { + ctx = axis2_op_ctx_get_base(msg_ctx->op_ctx, env); + if(ctx) + { + obj = axis2_ctx_get_property(ctx, env, key); + if(obj) + { + return obj; + } + } + } + + if(msg_ctx->svc_ctx) + { + ctx = axis2_svc_ctx_get_base(msg_ctx->svc_ctx, env); + if(ctx) + { + obj = axis2_ctx_get_property(ctx, env, key); + if(obj) + { + return obj; + } + } + } + + if(msg_ctx->svc_grp_ctx) + { + ctx = axis2_svc_grp_ctx_get_base(msg_ctx->svc_grp_ctx, env); + if(ctx) + { + obj = axis2_ctx_get_property(ctx, env, key); + if(obj) + { + return obj; + } + } + } + + if(msg_ctx->conf_ctx) + { + ctx = axis2_conf_ctx_get_base(msg_ctx->conf_ctx, env); + if(ctx) + { + obj = axis2_ctx_get_property(ctx, env, key); + if(obj) + { + return obj; + } + } + } + + return NULL; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_property( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * key, + axutil_property_t * value) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + return axis2_ctx_set_property(msg_ctx->base, env, key, value); +} + +const axutil_string_t *AXIS2_CALL +axis2_msg_ctx_get_paused_handler_name( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->paused_handler_name; +} + +const axis2_char_t *AXIS2_CALL +axis2_msg_ctx_get_paused_phase_name( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->paused_phase_name; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_paused_phase_name( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * paused_phase_name) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + /* a shallow copy is sufficient as phase lives beyond message */ + msg_ctx->paused_phase_name = (axis2_char_t *)paused_phase_name; + return AXIS2_SUCCESS; +} + +axutil_string_t *AXIS2_CALL +axis2_msg_ctx_get_soap_action( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->soap_action; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_soap_action( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + axutil_string_t * soap_action) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + if(msg_ctx->soap_action) + { + axutil_string_free(msg_ctx->soap_action, env); + } + + if(soap_action) + { + msg_ctx->soap_action = axutil_string_clone(soap_action, env); + if(!(msg_ctx->soap_action)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + return AXIS2_SUCCESS; +} + +axis2_bool_t AXIS2_CALL +axis2_msg_ctx_get_doing_mtom( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + + if(!(msg_ctx->doing_mtom) && msg_ctx->conf_ctx) + { + axis2_conf_t *conf = axis2_conf_ctx_get_conf(msg_ctx->conf_ctx, env); + msg_ctx->doing_mtom = axis2_conf_get_enable_mtom(conf, env); + } + + return msg_ctx->doing_mtom; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_doing_mtom( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t doing_mtom) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->doing_mtom = doing_mtom; + return AXIS2_SUCCESS; +} + +axis2_bool_t AXIS2_CALL +axis2_msg_ctx_get_doing_rest( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + /* Don't use AXIS2_PARAM_CHECK to verify msg_ctx, as it clobbers + env->error->status_code destroying the information therein that + an error has already occurred. */ + if(!msg_ctx) + { + if(axutil_error_get_status_code(env->error) == AXIS2_SUCCESS) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + } + return AXIS2_FALSE; + } + return msg_ctx->doing_rest; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_doing_rest( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t doing_rest) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->doing_rest = doing_rest; + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_do_rest_through_post( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t do_rest_through_post) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->do_rest_through_post = do_rest_through_post; + return AXIS2_SUCCESS; +} + +axis2_bool_t AXIS2_CALL +axis2_msg_ctx_get_do_rest_through_post( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + return msg_ctx->do_rest_through_post; +} + +axis2_bool_t AXIS2_CALL +axis2_msg_ctx_get_manage_session( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + return msg_ctx->manage_session; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_manage_session( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t manage_session) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->manage_session = manage_session; + return AXIS2_SUCCESS; +} + +axis2_bool_t AXIS2_CALL +axis2_msg_ctx_get_is_soap_11( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + return msg_ctx->is_soap_11; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_is_soap_11( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t is_soap11) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->is_soap_11 = is_soap11; + return AXIS2_SUCCESS; +} + +struct axis2_svc_grp_ctx *AXIS2_CALL +axis2_msg_ctx_get_svc_grp_ctx( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->svc_grp_ctx; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_svc_grp_ctx( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + struct axis2_svc_grp_ctx * svc_grp_ctx) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(svc_grp_ctx) + { + msg_ctx->svc_grp_ctx = svc_grp_ctx; + } + + return AXIS2_SUCCESS; +} + +axis2_op_t *AXIS2_CALL +axis2_msg_ctx_get_op( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->op; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_op( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + axis2_op_t * op) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(op) + { + msg_ctx->op = op; + msg_ctx->op_qname = (axutil_qname_t *)axis2_op_get_qname(op, env); + } + + return AXIS2_SUCCESS; +} + +axis2_svc_t *AXIS2_CALL +axis2_msg_ctx_get_svc( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->svc; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_svc( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + axis2_svc_t * svc) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(svc) + { + axis2_svc_grp_t *svc_grp = NULL; + msg_ctx->svc = svc; + msg_ctx->svc_qname = (axutil_qname_t *)axis2_svc_get_qname(svc, env); + + svc_grp = axis2_svc_get_parent(svc, env); + if(svc_grp) + { + msg_ctx->svc_grp = svc_grp; + msg_ctx->svc_grp_id = (axis2_char_t *)axis2_svc_grp_get_name(svc_grp, env); + } + } + + return AXIS2_SUCCESS; +} + +axis2_svc_grp_t *AXIS2_CALL +axis2_msg_ctx_get_svc_grp( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->svc_grp; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_svc_grp( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + axis2_svc_grp_t * svc_grp) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + if(svc_grp) + { + msg_ctx->svc_grp = svc_grp; + msg_ctx->svc_grp_id = (axis2_char_t *)axis2_svc_grp_get_name(svc_grp, env); + } + + return AXIS2_SUCCESS; +} + +const axutil_string_t *AXIS2_CALL +axis2_msg_ctx_get_svc_grp_ctx_id( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->svc_grp_ctx_id; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_svc_grp_ctx_id( + struct axis2_msg_ctx * msg_ctx, + const axutil_env_t * env, + axutil_string_t * svc_grp_ctx_id) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + if(msg_ctx->svc_grp_ctx_id) + { + axutil_string_free(msg_ctx->svc_grp_ctx_id, env); + msg_ctx->svc_grp_ctx_id = NULL; + } + + if(svc_grp_ctx_id) + { + msg_ctx->svc_grp_ctx_id = axutil_string_clone(svc_grp_ctx_id, env); + } + return AXIS2_SUCCESS; +} + +axis2_bool_t AXIS2_CALL +axis2_msg_ctx_is_paused( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + return msg_ctx->paused; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_find_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + AXIS2_MSG_CTX_FIND_SVC func) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->find_svc = func; + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_find_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + AXIS2_MSG_CTX_FIND_OP func) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->find_op = func; + return AXIS2_SUCCESS; +} + +axis2_options_t *AXIS2_CALL +axis2_msg_ctx_get_options( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + axutil_hash_t *properties = NULL; + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + + if(!msg_ctx->options) + { + msg_ctx->options = axis2_options_create(env); + + if(!msg_ctx->options) + { + return NULL; + } + } + + axis2_options_set_msg_info_headers(msg_ctx->options, env, msg_ctx->msg_info_headers); + properties = axis2_ctx_get_property_map(msg_ctx->base, env); + axis2_options_set_properties(msg_ctx->options, env, properties); + return msg_ctx->options; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_options( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_options_t * options) +{ + axutil_property_t *rest_val = NULL; + axis2_char_t *value; + axutil_string_t *soap_action = NULL; + ; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, options, AXIS2_FAILURE); + + if(msg_ctx->msg_info_headers && msg_ctx->msg_info_headers_deep_copy) + { + axis2_msg_info_headers_free(msg_ctx->msg_info_headers, env); + } + msg_ctx->msg_info_headers = axis2_options_get_msg_info_headers(options, env); + msg_ctx->msg_info_headers_deep_copy = AXIS2_FALSE; + + msg_ctx->doing_mtom = axis2_options_get_enable_mtom(options, env); + + msg_ctx->manage_session = axis2_options_get_manage_session(options, env); + + axis2_ctx_set_property_map(msg_ctx->base, env, axis2_options_get_properties(options, env)); + rest_val = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_ENABLE_REST); + if(rest_val) + { + value = (axis2_char_t *)axutil_property_get_value(rest_val, env); + if(value) + { + if(axutil_strcmp(value, AXIS2_VALUE_TRUE) == 0) + axis2_msg_ctx_set_doing_rest(msg_ctx, env, AXIS2_TRUE); + } + } + + if(msg_ctx->soap_action) + { + axutil_string_free(msg_ctx->soap_action, env); + } + + soap_action = axis2_options_get_soap_action(options, env); + if(soap_action) + { + msg_ctx->soap_action = axutil_string_clone(soap_action, env); + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_flow( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + int flow) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->flow = flow; + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +axis2_msg_ctx_get_flow( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, 0); + return msg_ctx->flow; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_execution_chain( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_array_list_t * execution_chain) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->execution_chain = execution_chain; + msg_ctx->current_handler_index = -1; + msg_ctx->paused_handler_index = -1; + msg_ctx->current_phase_index = 0; + + return AXIS2_SUCCESS; +} + +axutil_array_list_t *AXIS2_CALL +axis2_msg_ctx_get_execution_chain( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->execution_chain; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_supported_rest_http_methods( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_array_list_t * supported_rest_http_methods) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->supported_rest_http_methods = supported_rest_http_methods; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_msg_ctx_get_supported_rest_http_methods( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->supported_rest_http_methods; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_current_handler_index( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const int index) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->current_handler_index = index; + if(msg_ctx->execution_chain) + { + axis2_handler_t *handler = (axis2_handler_t *)axutil_array_list_get( + msg_ctx->execution_chain, env, index); + if(handler) + { + msg_ctx->paused_handler_name = (axutil_string_t *)axis2_handler_get_name(handler, env); + } + } + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +axis2_msg_ctx_get_current_handler_index( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, 0); + return msg_ctx->current_handler_index; +} + +int AXIS2_CALL +axis2_msg_ctx_get_paused_handler_index( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, 0); + return msg_ctx->paused_handler_index; +} + +axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_current_phase_index( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const int index) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->current_phase_index = index; + return AXIS2_SUCCESS; + +} + +int AXIS2_CALL +axis2_msg_ctx_get_current_phase_index( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, 0); + return msg_ctx->current_phase_index; +} + +int AXIS2_CALL +axis2_msg_ctx_get_paused_phase_index( + const axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, 0); + return msg_ctx->paused_phase_index; +} + +AXIS2_EXTERN axis2_svc_t *AXIS2_CALL +axis2_msg_ctx_find_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->find_svc(msg_ctx, env); +} + +AXIS2_EXTERN axis2_op_t *AXIS2_CALL +axis2_msg_ctx_find_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_svc_t * svc) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + return msg_ctx->find_op(msg_ctx, env, svc); +} + +AXIS2_EXTERN axutil_string_t *AXIS2_CALL +axis2_msg_ctx_get_charset_encoding( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + if(msg_ctx) + return msg_ctx->charset_encoding; + else + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_charset_encoding( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_string_t * str) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(msg_ctx) + { + if(msg_ctx->charset_encoding) + { + axutil_string_free(msg_ctx->charset_encoding, env); + msg_ctx->charset_encoding = NULL; + } + if(str) + { + msg_ctx->charset_encoding = axutil_string_clone(str, env); + } + } + else + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_stream_t *AXIS2_CALL +axis2_msg_ctx_get_transport_out_stream( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + if(msg_ctx) + { + return msg_ctx->transport_out_stream; + } + else + { + return NULL; + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_transport_out_stream( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_stream_t * stream) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(msg_ctx) + { + if(msg_ctx->transport_out_stream) + { + axutil_stream_free(msg_ctx->transport_out_stream, env); + } + + msg_ctx->transport_out_stream = stream; + } + else + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_reset_transport_out_stream( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(msg_ctx) + { + msg_ctx->transport_out_stream = NULL; + } + else + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_out_transport_info_t *AXIS2_CALL +axis2_msg_ctx_get_out_transport_info( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + if(msg_ctx) + { + return msg_ctx->out_transport_info; + } + else + { + return NULL; + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_out_transport_info( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_out_transport_info_t * out_transport_info) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(msg_ctx) + { + if(msg_ctx->out_transport_info) + { + AXIS2_OUT_TRANSPORT_INFO_FREE(msg_ctx->out_transport_info, env); + } + + msg_ctx->out_transport_info = out_transport_info; + } + else + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_reset_out_transport_info( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + if(msg_ctx) + { + msg_ctx->out_transport_info = NULL; + } + else + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_msg_ctx_get_transport_headers( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + if(msg_ctx) + { + return msg_ctx->transport_headers; + } + else + { + return NULL; + } +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_msg_ctx_extract_transport_headers( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + axutil_hash_t *temp = NULL; + if(msg_ctx) + { + temp = msg_ctx->transport_headers; + msg_ctx->transport_headers = NULL; + return temp; + } + else + { + return NULL; + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_transport_headers( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_hash_t * transport_headers) +{ + if(msg_ctx) + { + if(msg_ctx->transport_headers) + { + axutil_hash_free(msg_ctx->transport_headers, env); + } + + msg_ctx->transport_headers = transport_headers; + } + else + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_msg_ctx_get_http_accept_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + if(msg_ctx) + { + return msg_ctx->accept_record_list; + } + else + { + return NULL; + } +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_msg_ctx_extract_http_accept_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + axutil_array_list_t *temp = NULL; + if(msg_ctx) + { + temp = msg_ctx->accept_record_list; + msg_ctx->accept_record_list = NULL; + return temp; + } + else + { + return NULL; + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_http_accept_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_array_list_t * accept_record_list) +{ + if(msg_ctx) + { + if(msg_ctx->accept_record_list && msg_ctx->accept_record_list != accept_record_list) + { + axis2_http_accept_record_t *rec = NULL; + while(axutil_array_list_size(msg_ctx->accept_record_list, env)) + { + rec = (axis2_http_accept_record_t *)axutil_array_list_remove( + msg_ctx->accept_record_list, env, 0); + if(rec) + { + axis2_http_accept_record_free(rec, env); + } + } + axutil_array_list_free(msg_ctx->accept_record_list, env); + } + msg_ctx->accept_record_list = accept_record_list; + } + else + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_msg_ctx_get_http_accept_charset_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + if(msg_ctx) + { + return msg_ctx->accept_charset_record_list; + } + else + { + return NULL; + } +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_msg_ctx_extract_http_accept_charset_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + axutil_array_list_t *temp = NULL; + if(msg_ctx) + { + temp = msg_ctx->accept_charset_record_list; + msg_ctx->accept_charset_record_list = NULL; + return temp; + } + else + { + return NULL; + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_http_accept_charset_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_array_list_t * accept_charset_record_list) +{ + if(msg_ctx) + { + if(msg_ctx->accept_charset_record_list && msg_ctx->accept_charset_record_list + != accept_charset_record_list) + { + axis2_http_accept_record_t *rec = NULL; + while(axutil_array_list_size(msg_ctx->accept_charset_record_list, env)) + { + rec = (axis2_http_accept_record_t *)axutil_array_list_remove( + msg_ctx->accept_charset_record_list, env, 0); + if(rec) + { + axis2_http_accept_record_free(rec, env); + } + } + axutil_array_list_free(msg_ctx->accept_charset_record_list, env); + } + msg_ctx->accept_charset_record_list = accept_charset_record_list; + } + else + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_msg_ctx_get_http_output_headers( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + if(msg_ctx) + { + return msg_ctx->output_headers; + } + else + { + return NULL; + } +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_msg_ctx_extract_http_output_headers( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + if(msg_ctx) + { + axutil_array_list_t *temp = NULL; + temp = msg_ctx->output_headers; + msg_ctx->output_headers = NULL; + return temp; + } + else + { + return NULL; + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_http_output_headers( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_array_list_t * output_headers) +{ + if(msg_ctx) + { + if(msg_ctx->output_headers && msg_ctx->output_headers != output_headers) + { + axis2_http_header_t *header = NULL; + while(axutil_array_list_size(msg_ctx->output_headers, env)) + { + header = (axis2_http_header_t *)axutil_array_list_remove(msg_ctx->output_headers, + env, 0); + if(header) + { + axis2_http_header_free(header, env); + } + } + axutil_array_list_free(msg_ctx->output_headers, env); + } + msg_ctx->output_headers = output_headers; + } + else + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_msg_ctx_get_http_accept_language_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + if(msg_ctx) + { + return msg_ctx->accept_language_record_list; + } + else + { + return NULL; + } +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_msg_ctx_extract_http_accept_language_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + axutil_array_list_t *temp = NULL; + if(msg_ctx) + { + temp = msg_ctx->accept_language_record_list; + msg_ctx->accept_language_record_list = NULL; + return temp; + } + else + { + return NULL; + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_http_accept_language_record_list( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_array_list_t * accept_language_record_list) +{ + if(msg_ctx) + { + if(msg_ctx->accept_language_record_list && msg_ctx->accept_language_record_list + != accept_language_record_list) + { + axis2_http_accept_record_t *rec = NULL; + while(axutil_array_list_size(msg_ctx->accept_language_record_list, env)) + { + rec = (axis2_http_accept_record_t *)axutil_array_list_remove( + msg_ctx->accept_language_record_list, env, 0); + if(rec) + { + axis2_http_accept_record_free(rec, env); + } + } + axutil_array_list_free(msg_ctx->accept_language_record_list, env); + } + msg_ctx->accept_language_record_list = accept_language_record_list; + } + else + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_msg_ctx_get_transfer_encoding( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + if(msg_ctx) + return msg_ctx->transfer_encoding; + else + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_transfer_encoding( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_char_t * str) +{ + if(msg_ctx) + { + if(msg_ctx->transfer_encoding) + { + AXIS2_FREE(env->allocator, msg_ctx->transfer_encoding); + msg_ctx->transfer_encoding = NULL; + } + if(str) + { + msg_ctx->transfer_encoding = str; + } + } + else + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_msg_ctx_get_content_language( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + if(msg_ctx) + return msg_ctx->content_language; + else + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_content_language( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_char_t * str) +{ + if(msg_ctx) + { + if(msg_ctx->content_language) + { + AXIS2_FREE(env->allocator, msg_ctx->content_language); + msg_ctx->content_language = NULL; + } + if(str) + { + msg_ctx->content_language = str; + } + } + else + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_msg_ctx_get_transport_url( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + if(msg_ctx) + return msg_ctx->transport_url; + else + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_transport_url( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_char_t * str) +{ + if(msg_ctx) + { + /* this is a shallow copy, no need to free */ + msg_ctx->transport_url = str; + } + else + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_msg_ctx_get_status_code( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, 0); + return msg_ctx->status_code; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_status_code( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const int status_code) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->status_code = status_code; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_msg_ctx_get_auth_failed( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + return msg_ctx->is_auth_failure; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_auth_failed( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t status) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->is_auth_failure = status; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_msg_ctx_get_no_content( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + return msg_ctx->no_content; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_no_content( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t no_content) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->no_content = no_content; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_msg_ctx_get_required_auth_is_http( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + return msg_ctx->required_auth_is_http; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_required_auth_is_http( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_bool_t status) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + msg_ctx->required_auth_is_http = status; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_ctx_set_auth_type( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + const axis2_char_t * auth_type) +{ + if(msg_ctx->auth_type) + { + AXIS2_FREE(env->allocator, msg_ctx->auth_type); + } + msg_ctx->auth_type = NULL; + if(auth_type) + { + msg_ctx->auth_type = axutil_strdup(env, auth_type); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_msg_ctx_get_auth_type( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + return msg_ctx->auth_type; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_msg_ctx_get_mime_parts( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + return msg_ctx->mime_parts; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_msg_ctx_set_mime_parts( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axutil_array_list_t *mime_parts) +{ + if(msg_ctx->mime_parts) + { + axutil_array_list_free(mime_parts, env); + msg_ctx->mime_parts = NULL; + } + msg_ctx->mime_parts = mime_parts; +} diff --git a/src/core/context/op_ctx.c b/src/core/context/op_ctx.c new file mode 100644 index 0000000..30f0e3b --- /dev/null +++ b/src/core/context/op_ctx.c @@ -0,0 +1,420 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +struct axis2_op_ctx +{ + + /** base context struct */ + axis2_ctx_t *base; + + /** parent of operation context is a service context instance */ + struct axis2_svc_ctx *parent; + + /** message context map */ + axis2_msg_ctx_t *msg_ctx_array[AXIS2_WSDL_MESSAGE_LABEL_MAX]; + + /** + * the operation of which this is a running instance. The MEP of this + * operation must be one of the 8 predefined ones in WSDL 2.0. + */ + axis2_op_t *op; + + /** operation Message Exchange Pattern (MEP) */ + int op_mep; + + /** is complete? */ + axis2_bool_t is_complete; + + /** the global message_id -> op_ctx map which is stored in + * the axis2_conf_ctx. We are caching it here for faster access. + */ + axutil_hash_t *op_ctx_map; + + /** op qname */ + axutil_qname_t *op_qname; + + /** service qname */ + axutil_qname_t *svc_qname; + /* mutex to synchronize the read/write operations */ + axutil_thread_mutex_t *mutex; + axis2_bool_t response_written; + axis2_bool_t is_in_use; + + int ref; +}; + +AXIS2_EXTERN axis2_op_ctx_t *AXIS2_CALL +axis2_op_ctx_create( + const axutil_env_t * env, + axis2_op_t * op, + struct axis2_svc_ctx *svc_ctx) +{ + axis2_op_ctx_t *op_ctx = NULL; + int i = 0; + + op_ctx = AXIS2_MALLOC(env->allocator, sizeof(axis2_op_ctx_t)); + if(!op_ctx) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + op_ctx->base = NULL; + op_ctx->parent = NULL; + op_ctx->op = NULL; + op_ctx->op_mep = 0; + op_ctx->is_complete = AXIS2_FALSE; + op_ctx->is_in_use = AXIS2_FALSE; + op_ctx->op_ctx_map = NULL; + op_ctx->op_qname = NULL; + op_ctx->svc_qname = NULL; + op_ctx->response_written = AXIS2_FALSE; + op_ctx->mutex = axutil_thread_mutex_create(env->allocator, AXIS2_THREAD_MUTEX_DEFAULT); + + if(!op_ctx->mutex) + { + axis2_op_ctx_free(op_ctx, env); + return NULL; + } + + op_ctx->base = axis2_ctx_create(env); + if(!(op_ctx->base)) + { + axis2_op_ctx_free(op_ctx, env); + return NULL; + } + + if(op) + { + op_ctx->op = op; + } + + for(i = 0; i < AXIS2_WSDL_MESSAGE_LABEL_MAX; i++) + { + op_ctx->msg_ctx_array[i] = NULL; + } + + if(op_ctx->op) + { + op_ctx->op_qname = (axutil_qname_t *)axis2_op_get_qname(op_ctx->op, env); + op_ctx->op_mep = axis2_op_get_axis_specific_mep_const(op_ctx->op, env); + } + + axis2_op_ctx_set_parent(op_ctx, env, svc_ctx); + op_ctx->ref = 1; + + return op_ctx; +} + +AXIS2_EXTERN axis2_ctx_t *AXIS2_CALL +axis2_op_ctx_get_base( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env) +{ + return op_ctx->base; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_op_ctx_free( + struct axis2_op_ctx *op_ctx, + const axutil_env_t * env) +{ + int i = 0; + if(--(op_ctx->ref) > 0) + { + return; + } + if(op_ctx->is_in_use) + { + return; + } + + if(op_ctx->base) + { + axis2_ctx_free(op_ctx->base, env); + } + + for(i = 0; i < AXIS2_WSDL_MESSAGE_LABEL_MAX; i++) + { + if(op_ctx->msg_ctx_array[i]) + { + axis2_msg_ctx_free(op_ctx->msg_ctx_array[i], env); + op_ctx->msg_ctx_array[i] = NULL; + } + } + + if(op_ctx->mutex) + { + axutil_thread_mutex_destroy(op_ctx->mutex); + } + + AXIS2_FREE(env->allocator, op_ctx); + + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_op_ctx_destroy_mutex( + struct axis2_op_ctx *op_ctx, + const axutil_env_t * env) +{ + + if(op_ctx->mutex) + { + axutil_thread_mutex_destroy(op_ctx->mutex); + op_ctx->mutex = NULL; + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_ctx_init( + struct axis2_op_ctx *op_ctx, + const axutil_env_t * env, + struct axis2_conf *conf) +{ + int i = 0; + + if(op_ctx->op_qname && op_ctx->svc_qname) + { + axis2_svc_t *svc = NULL; + axis2_char_t *svc_name = NULL; + + svc_name = axutil_qname_get_localpart(op_ctx->svc_qname, env); + + if(svc_name) + { + svc = axis2_conf_get_svc(conf, env, svc_name); + + if(svc) + { + op_ctx->op = axis2_svc_get_op_with_qname(svc, env, op_ctx->op_qname); + } + } + } + + for(i = 0; i < AXIS2_WSDL_MESSAGE_LABEL_MAX; i++) + { + if(op_ctx->msg_ctx_array[i]) + { + axis2_msg_ctx_init(op_ctx->msg_ctx_array[i], env, conf); + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_op_t *AXIS2_CALL +axis2_op_ctx_get_op( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env) +{ + return op_ctx->op; +} + +AXIS2_EXTERN struct axis2_svc_ctx *AXIS2_CALL +axis2_op_ctx_get_parent( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env) +{ + return op_ctx->parent; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_ctx_add_msg_ctx( + struct axis2_op_ctx * op_ctx, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_msg_ctx_t *out_msg_ctx = NULL; + axis2_msg_ctx_t *in_msg_ctx = NULL; + + axutil_thread_mutex_lock(op_ctx->mutex); + + out_msg_ctx = op_ctx->msg_ctx_array[AXIS2_WSDL_MESSAGE_LABEL_OUT]; + in_msg_ctx = op_ctx->msg_ctx_array[AXIS2_WSDL_MESSAGE_LABEL_IN]; + + if(out_msg_ctx && in_msg_ctx) + { + axutil_thread_mutex_unlock(op_ctx->mutex); + return AXIS2_FAILURE; + } + + if(!out_msg_ctx) + { + op_ctx->msg_ctx_array[AXIS2_WSDL_MESSAGE_LABEL_OUT] = msg_ctx; + } + else + { + op_ctx->msg_ctx_array[AXIS2_WSDL_MESSAGE_LABEL_IN] = msg_ctx; + } + + axutil_thread_mutex_unlock(op_ctx->mutex); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL +axis2_op_ctx_get_msg_ctx( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env, + const axis2_wsdl_msg_labels_t message_id) +{ + axutil_thread_mutex_lock(op_ctx->mutex); + if(op_ctx->msg_ctx_array) + { + axis2_msg_ctx_t *rv = NULL; + rv = op_ctx->msg_ctx_array[message_id]; + axutil_thread_mutex_unlock(op_ctx->mutex); + return rv; + } + axutil_thread_mutex_unlock(op_ctx->mutex); + return NULL; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_op_ctx_get_is_complete( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env) +{ + return op_ctx->is_complete; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_ctx_set_complete( + struct axis2_op_ctx * op_ctx, + const axutil_env_t * env, + axis2_bool_t is_complete) +{ + op_ctx->is_complete = is_complete; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_op_ctx_is_in_use( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env) +{ + return op_ctx->is_in_use; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_ctx_set_in_use( + struct axis2_op_ctx * op_ctx, + const axutil_env_t * env, + axis2_bool_t is_in_use) +{ + op_ctx->is_in_use = is_in_use; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_ctx_cleanup( + struct axis2_op_ctx * op_ctx, + const axutil_env_t * env) +{ + int i = 0; + + for(i = 0; i < AXIS2_WSDL_MESSAGE_LABEL_MAX; i++) + { + if(op_ctx->msg_ctx_array[i]) + { + axis2_msg_ctx_free(op_ctx->msg_ctx_array[i], env); + op_ctx->msg_ctx_array[i] = NULL; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_ctx_set_parent( + struct axis2_op_ctx * op_ctx, + const axutil_env_t * env, + struct axis2_svc_ctx * svc_ctx) +{ + if(svc_ctx) + { + op_ctx->parent = svc_ctx; + } + + if(op_ctx->parent) /* that is if there is a service context associated */ + { + axis2_conf_ctx_t *conf_ctx = NULL; + conf_ctx = axis2_svc_ctx_get_conf_ctx(op_ctx->parent, env); + if(conf_ctx) + { + op_ctx->op_ctx_map = axis2_conf_ctx_get_op_ctx_map(conf_ctx, env); + } + op_ctx->svc_qname = (axutil_qname_t *)axis2_svc_get_qname(axis2_svc_ctx_get_svc( + op_ctx->parent, env), env); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_msg_ctx_t **AXIS2_CALL +axis2_op_ctx_get_msg_ctx_map( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env) +{ + return (axis2_msg_ctx_t **)(op_ctx->msg_ctx_array); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_op_ctx_get_response_written( + const axis2_op_ctx_t * op_ctx, + const axutil_env_t * env) +{ + if(op_ctx) + return op_ctx->response_written; + else + return AXIS2_FALSE; + +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_ctx_set_response_written( + axis2_op_ctx_t * op_ctx, + const axutil_env_t * env, + const axis2_bool_t written) +{ + if(op_ctx) + { + op_ctx->response_written = written; + } + else + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_ctx_increment_ref( + axis2_op_ctx_t * op_ctx, + const axutil_env_t * env) +{ + op_ctx->ref++; + return AXIS2_SUCCESS; +} + diff --git a/src/core/context/svc_ctx.c b/src/core/context/svc_ctx.c new file mode 100644 index 0000000..c9e19fe --- /dev/null +++ b/src/core/context/svc_ctx.c @@ -0,0 +1,200 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +struct axis2_svc_ctx +{ + + /** base context struct */ + axis2_ctx_t *base; + + /** parent of op context is a service context instance */ + struct axis2_svc_grp_ctx *parent; + + /** service associated with this service context */ + axis2_svc_t *svc; + + /** id of the service associated with this context */ + axis2_char_t *svc_id; + + /** service qname */ + axutil_qname_t *svc_qname; +}; + +AXIS2_EXTERN axis2_svc_ctx_t *AXIS2_CALL +axis2_svc_ctx_create( + const axutil_env_t * env, + axis2_svc_t * svc, + struct axis2_svc_grp_ctx *svc_grp_ctx) +{ + axis2_svc_ctx_t *svc_ctx = NULL; + + svc_ctx = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_ctx_t)); + if(!svc_ctx) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + svc_ctx->base = NULL; + svc_ctx->parent = NULL; + svc_ctx->svc = NULL; + svc_ctx->svc_id = NULL; + svc_ctx->svc_qname = NULL; + + svc_ctx->base = axis2_ctx_create(env); + if(!(svc_ctx->base)) + { + axis2_svc_ctx_free(svc_ctx, env); + return NULL; + } + + if(svc) + { + svc_ctx->svc = svc; + svc_ctx->svc_qname = (axutil_qname_t *)axis2_svc_get_qname(svc, env); + if(svc_ctx->svc_qname) + { + svc_ctx->svc_id = axutil_qname_get_localpart(svc_ctx->svc_qname, env); + } + } + + if(svc_grp_ctx) + { + svc_ctx->parent = svc_grp_ctx; + } + + return svc_ctx; +} + +axis2_ctx_t *AXIS2_CALL +axis2_svc_ctx_get_base( + const axis2_svc_ctx_t * svc_ctx, + const axutil_env_t * env) +{ + return svc_ctx->base; +} + +struct axis2_svc_grp_ctx *AXIS2_CALL +axis2_svc_ctx_get_parent( + const axis2_svc_ctx_t * svc_ctx, + const axutil_env_t * env) +{ + return svc_ctx->parent; +} + +axis2_status_t AXIS2_CALL +axis2_svc_ctx_set_parent( + axis2_svc_ctx_t * svc_ctx, + const axutil_env_t * env, + axis2_svc_grp_ctx_t * parent) +{ + svc_ctx->parent = parent; + return AXIS2_SUCCESS; +} + +void AXIS2_CALL +axis2_svc_ctx_free( + struct axis2_svc_ctx *svc_ctx, + const axutil_env_t * env) +{ + if(svc_ctx->base) + { + axis2_ctx_free(svc_ctx->base, env); + } + + AXIS2_FREE(env->allocator, svc_ctx); + return; +} + +axis2_status_t AXIS2_CALL +axis2_svc_ctx_init( + struct axis2_svc_ctx * svc_ctx, + const axutil_env_t * env, + axis2_conf_t * conf) +{ + if(svc_ctx->svc_qname) + { + axis2_char_t *svc_name = axutil_qname_get_localpart(svc_ctx->svc_qname, env); + svc_ctx->svc = axis2_conf_get_svc(conf, env, svc_name); + } + + return AXIS2_SUCCESS; +} + +const axis2_char_t *AXIS2_CALL +axis2_svc_ctx_get_svc_id( + const axis2_svc_ctx_t * svc_ctx, + const axutil_env_t * env) +{ + return svc_ctx->svc_id; +} + +axis2_svc_t *AXIS2_CALL +axis2_svc_ctx_get_svc( + const axis2_svc_ctx_t * svc_ctx, + const axutil_env_t * env) +{ + return svc_ctx->svc; +} + +axis2_status_t AXIS2_CALL +axis2_svc_ctx_set_svc( + axis2_svc_ctx_t * svc_ctx, + const axutil_env_t * env, + axis2_svc_t * svc) +{ + AXIS2_PARAM_CHECK(env->error, svc, AXIS2_FAILURE); + + svc_ctx->svc = svc; + svc_ctx->svc_qname = (axutil_qname_t *)axis2_svc_get_qname(svc, env); + if(svc_ctx->svc_qname) + { + svc_ctx->svc_id = axutil_qname_get_localpart(svc_ctx->svc_qname, env); + } + return AXIS2_SUCCESS; +} + +struct axis2_conf_ctx *AXIS2_CALL +axis2_svc_ctx_get_conf_ctx( + const axis2_svc_ctx_t * svc_ctx, + const axutil_env_t * env) +{ + return axis2_svc_grp_ctx_get_parent(svc_ctx->parent, env); +} + +axis2_op_ctx_t *AXIS2_CALL +axis2_svc_ctx_create_op_ctx( + struct axis2_svc_ctx * svc_ctx, + const axutil_env_t * env, + const axutil_qname_t * qname) +{ + axis2_op_t *op = NULL; + + if(svc_ctx->svc) + { + op = axis2_svc_get_op_with_qname(svc_ctx->svc, env, qname); + return axis2_op_ctx_create(env, op, svc_ctx); + } + + return NULL; +} + diff --git a/src/core/context/svc_grp_ctx.c b/src/core/context/svc_grp_ctx.c new file mode 100644 index 0000000..449c01b --- /dev/null +++ b/src/core/context/svc_grp_ctx.c @@ -0,0 +1,256 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +struct axis2_svc_grp_ctx +{ + + /** base context struct */ + axis2_ctx_t *base; + + /** parent of service group context is a configuration context instance */ + struct axis2_conf_ctx *parent; + + /** service group context ID */ + axis2_char_t *id; + + /** map of service contexts belonging to this service context group */ + axutil_hash_t *svc_ctx_map; + + /** service group associated with this service group context */ + axis2_svc_grp_t *svc_grp; + + /** name of the service group associated with this context */ + axis2_char_t *svc_grp_name; +}; + +AXIS2_EXTERN axis2_svc_grp_ctx_t *AXIS2_CALL +axis2_svc_grp_ctx_create( + const axutil_env_t * env, + axis2_svc_grp_t * svc_grp, + struct axis2_conf_ctx *conf_ctx) +{ + axis2_svc_grp_ctx_t *svc_grp_ctx = NULL; + + svc_grp_ctx = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_grp_ctx_t)); + if(!svc_grp_ctx) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + svc_grp_ctx->base = NULL; + svc_grp_ctx->parent = NULL; + svc_grp_ctx->id = NULL; + svc_grp_ctx->svc_ctx_map = NULL; + svc_grp_ctx->svc_grp = NULL; + svc_grp_ctx->svc_grp_name = NULL; + + svc_grp_ctx->base = axis2_ctx_create(env); + if(!(svc_grp_ctx->base)) + { + axis2_svc_grp_ctx_free(svc_grp_ctx, env); + return NULL; + } + + if(svc_grp) + { + svc_grp_ctx->svc_grp = svc_grp; + svc_grp_ctx->svc_grp_name = (axis2_char_t *)axis2_svc_grp_get_name(svc_grp_ctx->svc_grp, + env); + svc_grp_ctx->id = axutil_strdup(env, svc_grp_ctx->svc_grp_name); + } + + if(conf_ctx) + { + svc_grp_ctx->parent = conf_ctx; + } + + svc_grp_ctx->svc_ctx_map = axutil_hash_make(env); + if(!(svc_grp_ctx->svc_ctx_map)) + { + axis2_svc_grp_ctx_free(svc_grp_ctx, env); + return NULL; + } + + axis2_svc_grp_ctx_fill_svc_ctx_map((svc_grp_ctx), env); + + return svc_grp_ctx; +} + +AXIS2_EXTERN axis2_ctx_t *AXIS2_CALL +axis2_svc_grp_ctx_get_base( + const axis2_svc_grp_ctx_t * svc_grp_ctx, + const axutil_env_t * env) +{ + return svc_grp_ctx->base; +} + +AXIS2_EXTERN struct axis2_conf_ctx *AXIS2_CALL +axis2_svc_grp_ctx_get_parent( + const axis2_svc_grp_ctx_t * svc_grp_ctx, + const axutil_env_t * env) +{ + return svc_grp_ctx->parent; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_svc_grp_ctx_free( + struct axis2_svc_grp_ctx *svc_grp_ctx, + const axutil_env_t * env) +{ + if(svc_grp_ctx->id) + { + AXIS2_FREE(env->allocator, svc_grp_ctx->id); + } + + if(svc_grp_ctx->base) + { + axis2_ctx_free(svc_grp_ctx->base, env); + } + + if(svc_grp_ctx->svc_ctx_map) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + for(hi = axutil_hash_first(svc_grp_ctx->svc_ctx_map, env); hi; hi = axutil_hash_next(env, + hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + if(val) + { + axis2_svc_ctx_t *svc_ctx = NULL; + svc_ctx = (axis2_svc_ctx_t *)val; + axis2_svc_ctx_free(svc_ctx, env); + } + } + + axutil_hash_free(svc_grp_ctx->svc_ctx_map, env); + svc_grp_ctx->base = NULL; + } + + AXIS2_FREE(env->allocator, svc_grp_ctx); + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_grp_ctx_init( + struct axis2_svc_grp_ctx * svc_grp_ctx, + const axutil_env_t * env, + axis2_conf_t * conf) +{ + if(svc_grp_ctx->svc_grp_name) + { + svc_grp_ctx->svc_grp = axis2_conf_get_svc_grp(conf, env, svc_grp_ctx->svc_grp_name); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_svc_grp_ctx_get_id( + const axis2_svc_grp_ctx_t * svc_grp_ctx, + const axutil_env_t * env) +{ + return svc_grp_ctx->id; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_grp_ctx_set_id( + struct axis2_svc_grp_ctx * svc_grp_ctx, + const axutil_env_t * env, + const axis2_char_t * id) +{ + if(svc_grp_ctx->id) + { + AXIS2_FREE(env->allocator, svc_grp_ctx->id); + svc_grp_ctx->id = NULL; + } + + if(id) + { + svc_grp_ctx->id = axutil_strdup(env, id); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_svc_ctx_t *AXIS2_CALL +axis2_svc_grp_ctx_get_svc_ctx( + const axis2_svc_grp_ctx_t * svc_grp_ctx, + const axutil_env_t * env, + const axis2_char_t * svc_name) +{ + return (axis2_svc_ctx_t *)axutil_hash_get(svc_grp_ctx->svc_ctx_map, svc_name, + AXIS2_HASH_KEY_STRING); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_grp_ctx_fill_svc_ctx_map( + struct axis2_svc_grp_ctx * svc_grp_ctx, + const axutil_env_t * env) +{ + axutil_hash_index_t *hi = NULL; + void *next_svc = NULL; + + if(svc_grp_ctx->svc_grp) + { + axutil_hash_t *service_map = axis2_svc_grp_get_all_svcs(svc_grp_ctx->svc_grp, env); + if(service_map) + { + for(hi = axutil_hash_first(service_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &next_svc); + if(next_svc) + { + axis2_svc_t *svc = NULL; + axis2_svc_ctx_t *svc_ctx = NULL; + axis2_char_t *svc_name = NULL; + svc = (axis2_svc_t *)next_svc; + svc_ctx = axis2_svc_ctx_create(env, svc, svc_grp_ctx); + svc_name = axutil_qname_get_localpart(axis2_svc_get_qname(svc, env), env); + if(svc_name) + axutil_hash_set(svc_grp_ctx->svc_ctx_map, svc_name, AXIS2_HASH_KEY_STRING, + svc_ctx); + } + } + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_svc_grp_t *AXIS2_CALL +axis2_svc_grp_ctx_get_svc_grp( + const axis2_svc_grp_ctx_t * svc_grp_ctx, + const axutil_env_t * env) +{ + return svc_grp_ctx->svc_grp; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_svc_grp_ctx_get_svc_ctx_map( + const axis2_svc_grp_ctx_t * svc_grp_ctx, + const axutil_env_t * env) +{ + return svc_grp_ctx->svc_ctx_map; +} + diff --git a/src/core/deployment/Makefile.am b/src/core/deployment/Makefile.am new file mode 100644 index 0000000..7099839 --- /dev/null +++ b/src/core/deployment/Makefile.am @@ -0,0 +1,38 @@ +noinst_LTLIBRARIES = libaxis2_deployment.la + +noinst_HEADERS = axis2_deployment.h \ + axis2_arch_file_data.h \ + axis2_arch_reader.h \ + axis2_conf_builder.h \ + axis2_dep_engine.h \ + axis2_desc_builder.h \ + axis2_module_builder.h \ + axis2_repos_listener.h \ + axis2_svc_builder.h \ + axis2_svc_grp_builder.h \ + axis2_ws_info.h \ + axis2_ws_info_list.h + +libaxis2_deployment_la_SOURCES =phases_info.c \ + desc_builder.c \ + arch_reader.c \ + dep_engine.c \ + arch_file_data.c \ + ws_info.c \ + ws_info_list.c \ + svc_builder.c \ + svc_grp_builder.c \ + module_builder.c \ + conf_builder.c \ + repos_listener.c \ + conf_init.c + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/src/core/util \ + -I$(top_builddir)/axiom/include \ + -I$(top_builddir)/neethi/include \ + -I$(top_builddir)/util/include diff --git a/src/core/deployment/arch_file_data.c b/src/core/deployment/arch_file_data.c new file mode 100644 index 0000000..b785399 --- /dev/null +++ b/src/core/deployment/arch_file_data.c @@ -0,0 +1,369 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axis2_arch_file_data +{ + axutil_file_t *file; + int type; + axis2_char_t *msg_recv; + axis2_char_t *module_name; + axis2_char_t *module_dll_name; + axis2_char_t *name; + /* + * To store services in a service group. Those services are temporarily + * stored in this table + */ + axutil_hash_t *svc_map; + axutil_array_list_t *deployable_svcs; + +}; + +AXIS2_EXTERN axis2_arch_file_data_t *AXIS2_CALL +axis2_arch_file_data_create( + const axutil_env_t * env) +{ + axis2_arch_file_data_t *arch_file_data = NULL; + arch_file_data = (axis2_arch_file_data_t *)AXIS2_MALLOC(env-> allocator, + sizeof(axis2_arch_file_data_t)); + + if(!arch_file_data) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + memset((void *)arch_file_data, 0, sizeof(axis2_arch_file_data_t)); + + arch_file_data->deployable_svcs = axutil_array_list_create(env, 0); + if(!arch_file_data->deployable_svcs) + { + axis2_arch_file_data_free(arch_file_data, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + return arch_file_data; +} + +AXIS2_EXTERN axis2_arch_file_data_t *AXIS2_CALL +axis2_arch_file_data_create_with_type_and_file( + const axutil_env_t * env, + int type, + axutil_file_t * file) +{ + axis2_arch_file_data_t *arch_file_data = NULL; + arch_file_data = (axis2_arch_file_data_t *)axis2_arch_file_data_create(env); + if(!arch_file_data) + { + axis2_char_t *file_name = axutil_file_get_name(file, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Could not create arch_file_data for file %s", + file_name); + return NULL; + } + + arch_file_data->type = type; + arch_file_data->file = axutil_file_clone(file, env); + return arch_file_data; +} + +AXIS2_EXTERN axis2_arch_file_data_t *AXIS2_CALL +axis2_arch_file_data_create_with_type_and_name( + const axutil_env_t * env, + int type, + const axis2_char_t * name) +{ + axis2_arch_file_data_t *arch_file_data = NULL; + arch_file_data = (axis2_arch_file_data_t *)axis2_arch_file_data_create(env); + if(!arch_file_data) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Could not create arch_file_data for %s", name); + return NULL; + } + arch_file_data->type = type; + arch_file_data->name = axutil_strdup(env, name); + return arch_file_data; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_arch_file_data_free( + axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env) +{ + if(arch_file_data->file) + { + axutil_file_free(arch_file_data->file, env); + } + if(arch_file_data->msg_recv) + { + AXIS2_FREE(env->allocator, arch_file_data->msg_recv); + } + if(arch_file_data->module_name) + { + AXIS2_FREE(env->allocator, arch_file_data->module_name); + } + if(arch_file_data->module_dll_name) + { + AXIS2_FREE(env->allocator, arch_file_data->module_dll_name); + } + if(arch_file_data->name) + { + AXIS2_FREE(env->allocator, arch_file_data->name); + } + + if(arch_file_data->svc_map) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + + for(hi = axutil_hash_first(arch_file_data->svc_map, env); hi; hi + = axutil_hash_next(env, hi)) + { + axis2_svc_t *svc = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + svc = (axis2_svc_t *)val; + if(svc) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Service name :%s", axis2_svc_get_name(svc, + env)); + axis2_svc_free(svc, env); + } + } + axutil_hash_free(arch_file_data->svc_map, env); + } + if(arch_file_data->deployable_svcs) + { + axutil_array_list_free(arch_file_data->deployable_svcs, env); + } + + if(arch_file_data) + { + AXIS2_FREE(env->allocator, arch_file_data); + } + + return; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_arch_file_data_get_msg_recv( + const axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env) +{ + return arch_file_data->msg_recv; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_arch_file_data_set_msg_recv( + axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env, + axis2_char_t * msg_recv) +{ + AXIS2_PARAM_CHECK(env->error, msg_recv, AXIS2_FAILURE); + + if(arch_file_data->msg_recv) + { + AXIS2_FREE(env->allocator, arch_file_data->msg_recv); + arch_file_data->msg_recv = NULL; + } + arch_file_data->msg_recv = axutil_strdup(env, msg_recv); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_arch_file_data_get_name( + const axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env) +{ + return axutil_file_get_name(arch_file_data->file, env); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_arch_file_data_get_svc_name( + const axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env) +{ + axis2_char_t *svc_name = NULL; + + if(arch_file_data->file) + { + svc_name = axutil_file_get_name(arch_file_data->file, env); + } + else + { + svc_name = arch_file_data->name; + } + + return svc_name; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_arch_file_data_get_type( + const axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env) +{ + return arch_file_data->type; +} + +AXIS2_EXTERN axutil_file_t *AXIS2_CALL +axis2_arch_file_data_get_file( + const axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env) +{ + return arch_file_data->file; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_arch_file_data_get_module_name( + const axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env) +{ + axis2_char_t *module_name = NULL; + + if(arch_file_data->file) + { + module_name = axutil_file_get_name(arch_file_data->file, env); + } + else + { + module_name = arch_file_data->module_name; + } + return module_name; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_arch_file_data_set_module_name( + axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env, + axis2_char_t * module_name) +{ + AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FAILURE); + + if(arch_file_data->module_name) + { + AXIS2_FREE(env->allocator, arch_file_data->module_name); + arch_file_data->module_name = NULL; + } + arch_file_data->module_name = axutil_strdup(env, module_name); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_arch_file_data_get_module_dll_name( + const axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env) +{ + return arch_file_data->module_dll_name; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_arch_file_data_set_module_dll_name( + axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env, + axis2_char_t * module_dll_name) +{ + AXIS2_PARAM_CHECK(env->error, module_dll_name, AXIS2_FAILURE); + + if(arch_file_data->module_dll_name) + { + AXIS2_FREE(env->allocator, arch_file_data->module_dll_name); + arch_file_data->module_dll_name = NULL; + } + arch_file_data->module_dll_name = axutil_strdup(env, module_dll_name); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_arch_file_data_add_svc( + axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env, + axis2_svc_t * svc_desc) +{ + const axutil_qname_t *svc_qname = NULL; + axis2_char_t *svc_name = NULL; + AXIS2_PARAM_CHECK(env->error, svc_desc, AXIS2_FAILURE); + + svc_qname = axis2_svc_get_qname(svc_desc, env); + svc_name = axutil_qname_to_string((axutil_qname_t *)svc_qname, env); + if(!arch_file_data->svc_map) + { + arch_file_data->svc_map = axutil_hash_make(env); + if(!arch_file_data->svc_map) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + axutil_hash_set(arch_file_data->svc_map, svc_name, AXIS2_HASH_KEY_STRING, svc_desc); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN struct axis2_svc *AXIS2_CALL +axis2_arch_file_data_get_svc( + const axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env, + axis2_char_t * svc_name) +{ + axis2_svc_t *svc = NULL; + + AXIS2_PARAM_CHECK(env->error, svc_name, NULL); + + if(arch_file_data->svc_map) + { + svc = (axis2_svc_t *)axutil_hash_get(arch_file_data->svc_map, svc_name, + AXIS2_HASH_KEY_STRING); + } + else + { + return NULL; + } + return svc; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_arch_file_data_get_svc_map( + const axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env) +{ + return arch_file_data->svc_map; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_arch_file_data_get_deployable_svcs( + const axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env) +{ + return arch_file_data->deployable_svcs; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_arch_file_data_set_deployable_svcs( + axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env, + axutil_array_list_t * deployable_svcs) +{ + AXIS2_PARAM_CHECK(env->error, deployable_svcs, AXIS2_FAILURE); + if(arch_file_data->deployable_svcs) + { + AXIS2_FREE(env->allocator, arch_file_data->deployable_svcs); + arch_file_data->deployable_svcs = NULL; + } + arch_file_data->deployable_svcs = deployable_svcs; + return AXIS2_SUCCESS; +} + diff --git a/src/core/deployment/arch_reader.c b/src/core/deployment/arch_reader.c new file mode 100644 index 0000000..3403d8e --- /dev/null +++ b/src/core/deployment/arch_reader.c @@ -0,0 +1,313 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +struct axis2_arch_reader +{ + axis2_desc_builder_t *desc_builder; +}; + +AXIS2_EXTERN axis2_arch_reader_t *AXIS2_CALL +axis2_arch_reader_create( + const axutil_env_t * env) +{ + axis2_arch_reader_t *arch_reader = NULL; + + arch_reader = (axis2_arch_reader_t *)AXIS2_MALLOC(env-> allocator, sizeof(axis2_arch_reader_t)); + + if(!arch_reader) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + arch_reader->desc_builder = NULL; + + return arch_reader; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_arch_reader_free( + axis2_arch_reader_t * arch_reader, + const axutil_env_t * env) +{ + /* Description builder is owned by dep_engine, so do not free it here */ + + if(arch_reader) + { + AXIS2_FREE(env->allocator, arch_reader); + } + + return; +} + +AXIS2_EXTERN struct axis2_svc *AXIS2_CALL +axis2_arch_reader_create_svc( + const axutil_env_t * env, + struct axis2_arch_file_data *file) +{ + axis2_svc_t *svc = NULL; + svc = axis2_svc_create(env); + return svc; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_arch_reader_process_svc_grp( + axis2_arch_reader_t * arch_reader, + const axutil_env_t * env, + axis2_char_t * file_name, + struct axis2_dep_engine * dep_engine, + axis2_svc_grp_t * svc_grp) +{ + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *svc_grp_xml = NULL; + axis2_char_t *repos_path = NULL; + axis2_bool_t file_flag = AXIS2_FALSE; + AXIS2_PARAM_CHECK(env->error, file_name, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, svc_grp, AXIS2_FAILURE); + + file_flag = axis2_dep_engine_get_file_flag(dep_engine, env); + + if(!file_flag) + { + + repos_path = axis2_dep_engine_get_repos_path(dep_engine, env); + + svc_grp_xml = axutil_strcat(env, repos_path, AXIS2_PATH_SEP_STR, AXIS2_SERVICE_FOLDER, + AXIS2_PATH_SEP_STR, file_name, AXIS2_PATH_SEP_STR, AXIS2_SVC_XML, NULL); + } + else + { + repos_path = axis2_dep_engine_get_svc_dir(dep_engine, env); + svc_grp_xml = axutil_strcat(env, repos_path, AXIS2_PATH_SEP_STR, file_name, + AXIS2_PATH_SEP_STR, AXIS2_SVC_XML, NULL); + } + + if(!svc_grp_xml) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service xml file not found for %s", file_name); + return AXIS2_FAILURE; + } + status = axutil_file_handler_access(svc_grp_xml, AXIS2_F_OK); + if(AXIS2_SUCCESS == status) + { + struct axis2_arch_file_data *arch_file_data = NULL; + axis2_char_t *svc_name = NULL; + + status + = axis2_arch_reader_build_svc_grp(arch_reader, env, svc_grp_xml, dep_engine, svc_grp); + if(AXIS2_SUCCESS != status) + { + return status; + } + arch_file_data = axis2_dep_engine_get_current_file_item(dep_engine, env); + svc_name = axis2_arch_file_data_get_svc_name(arch_file_data, env); + axis2_svc_grp_set_name(svc_grp, env, svc_name); + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SERVICE_XML_NOT_FOUND, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Access to service configuration file %s failed", + file_name); + status = AXIS2_FAILURE; + } + AXIS2_FREE(env->allocator, svc_grp_xml); + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_arch_reader_build_svc_grp( + axis2_arch_reader_t * arch_reader, + const axutil_env_t * env, + axis2_char_t * svc_xml, + axis2_dep_engine_t * dep_engine, + axis2_svc_grp_t * svc_grp) +{ + axis2_char_t *root_element_name = NULL; + axiom_node_t *svc_grp_node = NULL; + axiom_element_t *svc_grp_element = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, svc_xml, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, svc_grp, AXIS2_FAILURE); + + arch_reader->desc_builder = axis2_desc_builder_create_with_file_and_dep_engine(env, svc_xml, + dep_engine); + if(!arch_reader->desc_builder) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating description builder for service file %s failed", svc_xml); + return AXIS2_FAILURE; + } + axis2_dep_engine_add_desc_builder(dep_engine, env, arch_reader->desc_builder); + + svc_grp_node = axis2_desc_builder_build_om(arch_reader->desc_builder, env); + + if(svc_grp_node) + { + svc_grp_element = axiom_node_get_data_element(svc_grp_node, env); + if(svc_grp_element) + { + root_element_name = axiom_element_get_localname(svc_grp_element, env); + } + } + + if(root_element_name && 0 == axutil_strcmp(AXIS2_SVC_ELEMENT, root_element_name)) + { + /* If service group is actually a service. In this case service group + * contain only single service */ + axis2_svc_t *svc = NULL; + axis2_svc_builder_t *svc_builder = NULL; + axis2_arch_file_data_t *file_data = NULL; + axutil_array_list_t *dep_svcs = NULL; + axis2_char_t *svc_name = NULL; + + file_data = axis2_dep_engine_get_current_file_item(dep_engine, env); + svc_name = axis2_arch_file_data_get_name(file_data, env); + svc = axis2_arch_file_data_get_svc(file_data, env, svc_name); + if(!svc) + { + axutil_qname_t *svc_qname = NULL; + + svc_qname = axutil_qname_create(env, svc_name, NULL, NULL); + svc = axis2_svc_create_with_qname(env, svc_qname); + status = axis2_arch_file_data_add_svc(file_data, env, svc); + axutil_qname_free(svc_qname, env); + if(AXIS2_SUCCESS != status) + { + axis2_svc_free(svc, env); + return status; + } + } + axis2_svc_set_parent(svc, env, svc_grp); + + svc_builder = axis2_svc_builder_create_with_dep_engine_and_svc(env, dep_engine, svc); + status = axis2_svc_builder_populate_svc(svc_builder, env, svc_grp_node); + axis2_dep_engine_add_svc_builder(dep_engine, env, svc_builder); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Populating service failed for %s", svc_name); + return AXIS2_FAILURE; + } + + dep_svcs = axis2_arch_file_data_get_deployable_svcs(file_data, env); + if(!dep_svcs) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Deployable services list is NULL within arch file data"); + return AXIS2_FAILURE; + } + status = axutil_array_list_add(dep_svcs, env, svc); + if(AXIS2_SUCCESS != status) + { + return AXIS2_FAILURE; + } + + } + else if(root_element_name && 0 == axutil_strcmp(AXIS2_SVC_GRP_ELEMENT, root_element_name)) + { + axis2_svc_grp_builder_t *grp_builder = NULL; + grp_builder = axis2_svc_grp_builder_create_with_svc_and_dep_engine(env, svc_grp_node, + dep_engine); + status = axis2_svc_grp_builder_populate_svc_grp(grp_builder, env, svc_grp); + axis2_dep_engine_add_svc_grp_builder(dep_engine, env, grp_builder); + } + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_arch_reader_read_module_arch( + const axutil_env_t * env, + axis2_char_t * file_name, + axis2_dep_engine_t * dep_engine, + axis2_module_desc_t * module_desc) +{ + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *module_xml = NULL; + axis2_char_t *repos_path = NULL; + axis2_bool_t file_flag; + + AXIS2_PARAM_CHECK(env->error, file_name, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, module_desc, AXIS2_FAILURE); + + file_flag = axis2_dep_engine_get_file_flag(dep_engine, env); + if(!file_flag) + { + repos_path = axis2_dep_engine_get_repos_path(dep_engine, env); + module_xml = axutil_strcat(env, repos_path, AXIS2_PATH_SEP_STR, AXIS2_MODULE_FOLDER, + AXIS2_PATH_SEP_STR, file_name, AXIS2_PATH_SEP_STR, AXIS2_MODULE_XML, NULL); + } + else + { + repos_path = axis2_dep_engine_get_module_dir(dep_engine, env); + module_xml = axutil_strcat(env, repos_path, AXIS2_PATH_SEP_STR, file_name, + AXIS2_PATH_SEP_STR, AXIS2_MODULE_XML, NULL); + } + + if(!module_xml) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return AXIS2_FAILURE; + } + status = axutil_file_handler_access(module_xml, AXIS2_F_OK); + + if(AXIS2_SUCCESS == status) + { + axis2_module_builder_t *module_builder = NULL; + module_builder = axis2_module_builder_create_with_file_and_dep_engine_and_module(env, + module_xml, dep_engine, module_desc); + status = axis2_module_builder_populate_module(module_builder, env); + axis2_dep_engine_add_module_builder(dep_engine, env, module_builder); + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MODULE_XML_NOT_FOUND_FOR_THE_MODULE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Module configuration file access failed for module file %s", module_xml); + status = AXIS2_FAILURE; + } + AXIS2_FREE(env->allocator, module_xml); + return status; +} + +AXIS2_EXTERN axutil_file_t *AXIS2_CALL +axis2_arch_reader_create_module_arch( + const axutil_env_t * env, + axis2_char_t * module_name) +{ + axutil_file_t *file = NULL; + + file = axutil_file_create(env); + if(!file) + { + return NULL; + } + axutil_file_set_name(file, env, module_name); + return file; +} + diff --git a/src/core/deployment/axis2_arch_file_data.h b/src/core/deployment/axis2_arch_file_data.h new file mode 100644 index 0000000..d27d065 --- /dev/null +++ b/src/core/deployment/axis2_arch_file_data.h @@ -0,0 +1,265 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_ARCH_FILE_DATA_H +#define AXIS2_ARCH_FILE_DATA_H + +/** @defgroup axis2_arch_file_data Arch File Data + * @ingroup axis2_deployment + * @{ + */ + +/** + * @file axis2_arch_file_data.h + * @brief Axis2 Arch File Data interface. arch_file_data construct contain + * deployment information retrieved from a module or service configuration file. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + struct axis2_conf; + + /** Type name for struct axis2_arch_fila_data */ + typedef struct axis2_arch_file_data axis2_arch_file_data_t; + + /** + * De-allocate memory + * @param arch_file_data pointer to arch_file_data + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_arch_file_data_free( + axis2_arch_file_data_t * arch_file_data, + const axutil_env_t * env); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_arch_file_data_get_msg_recv( + const axis2_arch_file_data_t * file_data, + const axutil_env_t * env); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + * @param msg_recv pointer to message receiver + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_arch_file_data_set_msg_recv( + axis2_arch_file_data_t * file_data, + const axutil_env_t * env, + axis2_char_t * msg_recv); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + * @return the name of the contained file. + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_arch_file_data_get_name( + const axis2_arch_file_data_t * file_data, + const axutil_env_t * env); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + * @return the service name. If contained file is not null this is the + * file name. else this is the name property + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_arch_file_data_get_svc_name( + const axis2_arch_file_data_t * file_data, + const axutil_env_t * env); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_arch_file_data_get_type( + const axis2_arch_file_data_t * file_data, + const axutil_env_t * env); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_file_t *AXIS2_CALL + axis2_arch_file_data_get_file( + const axis2_arch_file_data_t * file_data, + const axutil_env_t * env); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_arch_file_data_get_module_name( + const axis2_arch_file_data_t * file_data, + const axutil_env_t * env); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + * @param module_name pointer to module_name + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_arch_file_data_set_module_name( + axis2_arch_file_data_t * file_data, + const axutil_env_t * env, + axis2_char_t * module_name); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_arch_file_data_get_module_dll_name( + const axis2_arch_file_data_t * file_data, + const axutil_env_t * env); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_arch_file_data_set_module_dll_name( + axis2_arch_file_data_t * file_data, + const axutil_env_t * env, + axis2_char_t * module_dll_name); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_arch_file_data_add_svc( + axis2_arch_file_data_t * file_data, + const axutil_env_t * env, + struct axis2_svc *svc_desc); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + */ + AXIS2_EXTERN struct axis2_svc *AXIS2_CALL + axis2_arch_file_data_get_svc( + const axis2_arch_file_data_t * file_data, + const axutil_env_t * env, + axis2_char_t * svc_name); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axis2_arch_file_data_get_svc_map( + const axis2_arch_file_data_t * file_data, + const axutil_env_t * env); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axis2_arch_file_data_get_deployable_svcs( + const axis2_arch_file_data_t * file_data, + const axutil_env_t * env); + + /** + * @param file_data pointer to arch_file_data + * @param env pointer to environment struct + * @param deployable_svcs pointer to deployable services + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_arch_file_data_set_deployable_svcs( + axis2_arch_file_data_t * file_data, + const axutil_env_t * env, + axutil_array_list_t * deployable_svcs); + + /** + * Creates arch file data struct + * @param env pointer to environment struct + * @return pointer to newly created arch file data + */ + AXIS2_EXTERN axis2_arch_file_data_t *AXIS2_CALL + + axis2_arch_file_data_create( + const axutil_env_t * env); + + /** + * Creates arch file data struct + * @param env pointer to environment struct + * @param type type + * @param file folder name of service or module + * @return pointer to newly created arch file data + */ + AXIS2_EXTERN axis2_arch_file_data_t *AXIS2_CALL + + axis2_arch_file_data_create_with_type_and_file( + const axutil_env_t * env, + int type, + axutil_file_t * file); + + /** + * Creates arch file data struct + * @param env pointer to environment struct + * @param type type + * @param name pointer to name + * @return pointer to newly created arch file data + */ + AXIS2_EXTERN axis2_arch_file_data_t *AXIS2_CALL + + axis2_arch_file_data_create_with_type_and_name( + const axutil_env_t * env, + int type, + const axis2_char_t * name); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_ARCH_FILE_DATA_H */ diff --git a/src/core/deployment/axis2_arch_reader.h b/src/core/deployment/axis2_arch_reader.h new file mode 100644 index 0000000..274ded2 --- /dev/null +++ b/src/core/deployment/axis2_arch_reader.h @@ -0,0 +1,152 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_ARCH_READER_H +#define AXIS2_ARCH_READER_H + +/** @defgroup axis2_arch_reader Arch Reader + * @ingroup axis2_deployment + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + struct axis2_conf; + struct axis2_arch_file_data; + struct axis2_dep_engine; + + /** Type name for struct axis2_arch_reader */ + typedef struct axis2_arch_reader axis2_arch_reader_t; + + /** + * De-allocate memory + * @param arch_reader pointer to arch reader + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_arch_reader_free( + axis2_arch_reader_t * arch_reader, + const axutil_env_t * env); + + /** + * To create a service descrption axis2_svc_t using given + * deployment info file. + * @param env pointer to environment struct + * @param file pointer to file + */ + AXIS2_EXTERN struct axis2_svc *AXIS2_CALL + axis2_arch_reader_create_svc( + const axutil_env_t * env, + struct axis2_arch_file_data *file); + + /** + * Construct the path to the service group configuration file(services.xml) + * using the passed file name and populate the passed service group + * description. + * @param arch_reader pointer to arch reader + * @param env pointer to environment struct + * @param file_name pointer to service group configuration file. + * @param dep_engine pointer to deployment engine + * @param svc_grp pointer to service group to be populated. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_arch_reader_process_svc_grp( + axis2_arch_reader_t * arch_reader, + const axutil_env_t * env, + axis2_char_t * file_name, + struct axis2_dep_engine *dep_engine, + axis2_svc_grp_t * svc_grp); + + /** + * Populate the passed service group description using the service group + * configuration file(services.xml). + * @param arch_reader pointer to arch reader + * @param env pointer to environment struct + * @param file_path path to the service group configuration file(services.xml) + * @param dep_engine pointer to deployment engine + * @param svc_grp pointer to service group + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_arch_reader_build_svc_grp( + axis2_arch_reader_t * arch_reader, + const axutil_env_t * env, + axis2_char_t * file_path, + struct axis2_dep_engine *dep_engine, + struct axis2_svc_grp *svc_grp); + + /** + * Construct the path to the module configuration file(module.xml) + * using the passed file name and populate the passed module description. + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_arch_reader_read_module_arch( + const axutil_env_t * env, + axis2_char_t * file_path, + struct axis2_dep_engine *dep_engine, + axis2_module_desc_t * module); + + /** + * Create an axis2 file using the passed module name. + * @param env pointer to environment struct + * @param module_name pointer to module name + */ + AXIS2_EXTERN axutil_file_t *AXIS2_CALL + + axis2_arch_reader_create_module_arch( + const axutil_env_t * env, + axis2_char_t * module_name); + + /** + * Creates arch reader struct + * @param env pointer to environment struct + * @return pointer to newly created arch reader + */ + AXIS2_EXTERN axis2_arch_reader_t *AXIS2_CALL + axis2_arch_reader_create( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_ARCH_READER_H */ diff --git a/src/core/deployment/axis2_conf_builder.h b/src/core/deployment/axis2_conf_builder.h new file mode 100644 index 0000000..9a0aa91 --- /dev/null +++ b/src/core/deployment/axis2_conf_builder.h @@ -0,0 +1,116 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_CONF_BUILDER_H +#define AXIS2_CONF_BUILDER_H + +/** + * @defgroup axis2_conf_builder Conf Builder + * @ingroup axis2_deployment + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include "axis2_desc_builder.h" +#include +#include "axis2_dep_engine.h" +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + struct axis2_desc_builder; + struct axis2_dep_engine; + + /** Type name for struct axis2_conf_builder */ + typedef struct axis2_conf_builder axis2_conf_builder_t; + + /** + * De-allocate memory + * @param conf_builder pointer to configuration builder + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_conf_builder_free( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env); + + /** + * @param conf_builder pointer to configuration builder + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_conf_builder_populate_conf( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env); + + /** + * To get the list og modules that is requird to be engage globally + * @param conf_builder pointer to configuration builder + * @param env pointer to environment struct + * @param module_refs pointer to module refs + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_conf_builder_process_module_refs( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * module_refs); + + /** + * Creates conf builder struct + * @param env pointer to environment struct + * @return pointer to newly created conf builder + */ + AXIS2_EXTERN axis2_conf_builder_t *AXIS2_CALL + axis2_conf_builder_create( + const axutil_env_t * env); + + /** + * Creates conf builder struct + * @param env pointer to environment struct + * @param file This is the full path to the server xml file + * @param dep_engine pointer to dep engine + * @param conf pointer to conf + * @return pointer to newly created conf builder + */ + + AXIS2_EXTERN axis2_conf_builder_t *AXIS2_CALL + + axis2_conf_builder_create_with_file_and_dep_engine_and_conf( + const axutil_env_t * env, + axis2_char_t * file, + struct axis2_dep_engine *dep_engine, + axis2_conf_t * conf); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_CONF_BUILDER_H */ diff --git a/src/core/deployment/axis2_dep_engine.h b/src/core/deployment/axis2_dep_engine.h new file mode 100644 index 0000000..a9130af --- /dev/null +++ b/src/core/deployment/axis2_dep_engine.h @@ -0,0 +1,418 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_DEP_ENGINE_H +#define AXIS2_DEP_ENGINE_H + +/** + * @defgroup axis2_dep_engine Deployment Engine + * @ingroup axis2_deployment + * @{ + */ + +/** + * @file axis2_dep_engine.h + * @brief Axis2 Deployment Engine interface + */ + +#include +#include +#include +#include +#include +#include "axis2_arch_file_data.h" +#include "axis2_ws_info.h" +#include "axis2_conf_builder.h" +#include "axis2_repos_listener.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + struct axis2_arch_file_data; + struct axis2_arch_reader; + struct axis2_ws_info; + struct axis2_phases_info; + struct axis2_svc; + + /** Type name for struct axis2_dep_engine */ + typedef struct axis2_dep_engine axis2_dep_engine_t; + struct axis2_desc_builder; + struct axis2_module_builder; + struct axis2_svc_builder; + struct axis2_grp_builder; + struct axis2_svc_grp_builder; + + /** + * De-allocate memory + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_dep_engine_free( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + + /** + * while parsing the axis2.xml the module refferences have to be stored some + * where , since at that time none of module availble (they load after parsing + * the document) + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + * @param module_qname QName + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_dep_engine_add_module( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axutil_qname_t * module_qname); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + * @param module_name pointer to module name + */ + AXIS2_EXTERN struct axis2_module_desc *AXIS2_CALL + + axis2_dep_engine_get_module( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axutil_qname_t * module_name); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + */ + AXIS2_EXTERN struct axis2_arch_file_data *AXIS2_CALL + + axis2_dep_engine_get_current_file_item( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + * @param file pointer to file + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_dep_engine_add_ws_to_deploy( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + struct axis2_arch_file_data *file); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + * @param file pointer to file + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_dep_engine_add_ws_to_undeploy( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + struct axis2_ws_info *file); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + */ + AXIS2_EXTERN struct axis2_phases_info *AXIS2_CALL + axis2_dep_engine_get_phases_info( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + * @return AxisConfiguration AxisConfiguration + */ + AXIS2_EXTERN struct axis2_conf *AXIS2_CALL + axis2_dep_engine_get_axis_conf( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + */ + AXIS2_EXTERN struct axis2_conf *AXIS2_CALL + axis2_dep_engine_load( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + */ + AXIS2_EXTERN struct axis2_conf *AXIS2_CALL + axis2_dep_engine_load_client( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + const axis2_char_t * client_home); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + * @param dll_name pointer to dll_name + */ + AXIS2_EXTERN void *AXIS2_CALL + axis2_dep_engine_get_handler_dll( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_char_t * dll_name); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_dep_engine_do_deploy( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_dep_engine_undeploy( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_dep_engine_is_hot_update( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + * @param phases_info pointer to phases info + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_dep_engine_set_phases_info( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + struct axis2_phases_info *phases_info); + + /** + * This method is used to fill a axisservice object using services.xml , first it should create + * an axisservice object using WSDL and then fill that using given servic.xml and load all the requed + * class and build the chains , finally add the servicecontext to EngineContext and axisservice into + * EngineConfiguration + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + * @param svc pointer to service + * @param file_name pointer to file name + */ + AXIS2_EXTERN struct axis2_svc *AXIS2_CALL + axis2_dep_engine_build_svc( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + struct axis2_svc *svc, + axis2_char_t * file_name); + + /** + * This method can be used to build ModuleDescription for a given module archiev file + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + * @param module_archive pointer to module archive + * @param conf pointer to conf + */ + AXIS2_EXTERN struct axis2_module_desc *AXIS2_CALL + axis2_dep_engine_build_module( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axutil_file_t * module_archive, + struct axis2_conf *conf); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_dep_engine_get_repos_path( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + + /** + * @param dep_engine pointer to module directory + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_dep_engine_get_file_flag( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + + + /** + * @param dep_engine pointer to module directory + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_dep_engine_get_module_dir( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + + /** + * @param dep_engine pointer to module directory + * @param env pointer to environment struct + * @param module_dir pointer of the directory path + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_dep_engine_set_module_dir( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + const axis2_char_t *module_dir); + + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_dep_engine_get_svc_dir( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_dep_engine_set_svc_dir( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + const axis2_char_t *svc_dir); + + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + * @param file_data pointer to file data + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_dep_engine_set_current_file_item( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + struct axis2_arch_file_data *file_data); + + /** + * @param dep_engine pointer to deployment engine + * @param env pointer to environment struct + * @param arch_reader pointer to arch reader + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_dep_engine_set_arch_reader( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + struct axis2_arch_reader *arch_reader); + + /** + * No param constructor is need to deploye module and service programatically + * @param env pointer to environment struct + * @return pointer to newly created deployment engine + */ + AXIS2_EXTERN axis2_dep_engine_t *AXIS2_CALL + axis2_dep_engine_create( + const axutil_env_t * env); + + /** + * Creates description builder struct + * This the constructor which is used by Engine in order to start + * Deployment module, + * @param env pointer to environment struct + * @param repos_path is the path to which Repositary Listner should listen. + * @return pointer to newly created deployment engine + */ + AXIS2_EXTERN axis2_dep_engine_t *AXIS2_CALL + axis2_dep_engine_create_with_repos_name( + const axutil_env_t * env, + const axis2_char_t * repos_path); + + + /** + * Creates description builder struct using axis2 xml + * This the constructor which is used by Engine in order to start + * Deployment module, + * @param env pointer to environment struct + * @param axis2_xml is the path of the axis2.xml . + * @return pointer to newly created deployment engine + */ + AXIS2_EXTERN axis2_dep_engine_t *AXIS2_CALL + axis2_dep_engine_create_with_axis2_xml( + const axutil_env_t * env, + const axis2_char_t * axis2_xml); + + + /** + * Creates deployment engine struct + * @param env pointer to environment struct + * @param repos_path is the path to which Repositary Listner should listen. + * @param svr_xml_file pointer to service xml file + * @return pointer to newly created deployment engine + */ + AXIS2_EXTERN axis2_dep_engine_t *AXIS2_CALL + + axis2_dep_engine_create_with_repos_name_and_svr_xml_file( + const axutil_env_t * env, + const axis2_char_t * repos_path, + const axis2_char_t * svr_xml_file); + + AXIS2_EXTERN axis2_dep_engine_t *AXIS2_CALL + axis2_dep_engine_create_with_svr_xml_file( + const axutil_env_t * env, + const axis2_char_t * svr_xml_file); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_dep_engine_add_desc_builder( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + struct axis2_desc_builder *desc_builder); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_dep_engine_add_module_builder( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + struct axis2_module_builder *module_builder); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_dep_engine_add_svc_builder( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + struct axis2_svc_builder *svc_builder); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_dep_engine_add_svc_grp_builder( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + struct axis2_svc_grp_builder *svc_grp_builder); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_DEP_ENGINE_H */ diff --git a/src/core/deployment/axis2_deployment.h b/src/core/deployment/axis2_deployment.h new file mode 100644 index 0000000..044f10f --- /dev/null +++ b/src/core/deployment/axis2_deployment.h @@ -0,0 +1,119 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_DEPLOYMENT_H +#define AXIS2_DEPLOYMENT_H + +/** + * @file axis2_axis2_deployment.h + * @brief axis2 deployment + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +/*********************************** Constansts********************************/ + +/** + * DeployCons interface is to keep constent value required for Deployemnt + */ + +#define AXIS2_SVC 0 /* if it is a service */ +#define AXIS2_MODULE 1 /* if it is a module */ + +#define AXIS2_SVC_XML "services.xml" +#define AXIS2_MODULE_XML "module.xml" +#define AXIS2_PARAMETERST "parameter" /* paramater start tag */ +#define AXIS2_HANDLERST "handler" +#define AXIS2_MODULEST "module" +#define AXIS2_PHASEST "phase" +#define AXIS2_PHASE_ORDER "phaseOrder" +#define AXIS2_OPERATIONST "operation" /* operation start tag */ +#define AXIS2_IN_FLOW_START "inflow" /* inflow start tag */ +#define AXIS2_OUT_FLOW_START "outflow" /* outflowr start tag */ +#define AXIS2_IN_FAILTFLOW "INfaultflow" /* faultflow start tag */ +#define AXIS2_OUT_FAILTFLOW "Outfaultflow" /* faultflow start tag */ + +#define AXIS2_MODULE_PATH "modules" +#define AXIS2_SVC_PATH "services" + +/* for parameters */ +#define AXIS2_ATTNAME "name" +#define AXIS2_ATTLOCKED "locked" +#define AXIS2_TYPE "type" + +/* for operations */ +#define AXIS2_MEP "mep" + +/* for messages */ +#define AXIS2_MESSAGE "message" +#define AXIS2_LABEL "label" + +/* for handlers */ +#define AXIS2_REF "ref" +#define AXIS2_CLASSNAME "class" +#define AXIS2_BEFORE "before" +#define AXIS2_AFTER "after" +#define AXIS2_PHASE "phase" +#define AXIS2_PHASEFIRST "phaseFirst" +#define AXIS2_PHASELAST "phaseLast" +#define AXIS2_ORDER "order" /* to resolve the order tag */ +#define AXIS2_DESCRIPTION "description" + +#define AXIS2_TRANSPORTSENDER "transportSender" +#define AXIS2_TRANSPORTRECEIVER "transportReceiver" + +#define AXIS2_MESSAGERECEIVER "messageReceiver" + +#define AXIS2_HOTDEPLOYMENT "hotdeployment" +#define AXIS2_HOTUPDATE "hotupdate" +#define AXIS2_DISPATCH_ORDER "dispatchOrder" +#define AXIS2_DISPATCHER "dispatcher" + +/* element in a services.xml */ +#define AXIS2_SVC_ELEMENT "service" +#define AXIS2_SVC_WSDL_PATH "wsdl_path" +#define AXIS2_SVC_GRP_ELEMENT "serviceGroup" + +#define AXIS2_SERVER_XML_FILE "axis2.xml" + +#define AXIS2_MODULE_FOLDER "modules" +#define AXIS2_SERVICE_FOLDER "services" +#define AXIS2_LIB_FOLDER "lib" +#define AXIS2_LIB_DIR "libDir" + +#define AXIS2_ATTRIBUTE_DEFAULT_VERSION "version" +#define AXIS2_DEFAULT_MODULE_VERSION "defaultModuleVersions" + +/*********************************** Constants*********************************/ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_DEPLOYMENT_H */ diff --git a/src/core/deployment/axis2_desc_builder.h b/src/core/deployment/axis2_desc_builder.h new file mode 100644 index 0000000..347f592 --- /dev/null +++ b/src/core/deployment/axis2_desc_builder.h @@ -0,0 +1,292 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_DESC_BUILDER_H +#define AXIS2_DESC_BUILDER_H + +/** @defgroup axis2_desc_builder Description Builder + * @ingroup axis2_deployment + * @{ + */ + +#include +#include +#include +#include +#include +#include "axis2_deployment.h" +#include "axis2_dep_engine.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + struct axis2_flow; + struct axis2_phase; + struct axis2_dep_engine; + + /** Type name for struct axis2_desc_builder */ + typedef struct axis2_desc_builder axis2_desc_builder_t; + + /** + * De-allocate memory + * @param desc_builder pointer to desc builder + * @param env pointer to environment struct + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_desc_builder_free( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env); + + /** + * This will creat OMElemnt for a given descrition document (axis2.xml , + * services.xml and module.xml) + * @param desc_builder pointer to desc builder + * @param env pointer to environment struct + * @return OMElement OMElement + */ + AXIS2_EXTERN axiom_node_t *AXIS2_CALL + axis2_desc_builder_build_om( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env); + + /** + * To process Flow elements in services.xml + * @param desc_builder pointer to desc builder + * @param env pointer to environment struct + * @param flow_element axiom_element_t + * @param parent pointer to parent + * @param node pointer to node + * @return flow + */ + AXIS2_EXTERN axis2_flow_t *AXIS2_CALL + axis2_desc_builder_process_flow( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axiom_element_t * flow_element, + axutil_param_container_t * parent, + axiom_node_t * node); + + /** + * To process Handler element + * @param handler_element OMElement + * @param desc_builder pointer to desc builder + * @param env pointer to environment struct + * @param handler_element pointer to handler element + * @param parent pointer to parent + */ + AXIS2_EXTERN axis2_handler_desc_t *AXIS2_CALL + + axis2_desc_builder_process_handler( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axiom_node_t * handler_element, + axutil_param_container_t * parent); + + /** + * To get the Param out from the OM + * @param desc_builder pointer to desc builder + * @param env pointer to environment struct + * @param params axutil_param_t + * @param param_container axutil_param_container_t + * @param parent axutil_param_container_t + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_desc_builder_process_params( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * params, + axutil_param_container_t * param_container, + axutil_param_container_t * parent); + + /** + * @param desc_builder pointer to desc builder + * @param env pointer to environment struct + * @param module_refs pointer to module refs + * @param op pointer to op + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_desc_builder_process_op_module_refs( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * module_refs, + axis2_op_t * op); + + /** + * @param desc_builder pointer to desc builder + * @param env pointer to environment struct + * @param recv_element pointer to recv element + */ + AXIS2_EXTERN axis2_msg_recv_t *AXIS2_CALL + + axis2_desc_builder_load_msg_recv( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axiom_element_t * recv_element); + + /** + * This method is used to retrive service name form the arechive file name + * if the archive file name is service1.aar , then axis service name would be service1 + * @param desc_builder pointer to desc builder + * @param env pointer to environment struct + * @param file_name pointer to file name + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_desc_builder_get_short_file_name( + const axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axis2_char_t * file_name); + + /** + * @param desc_builder pointer to desc builder + * @param env pointer to environment struct + * @param short_file_name pointer to short file name + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_desc_builder_get_file_name_without_prefix( + const axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axis2_char_t * short_file_name); + + /** + * this method is to get the value of attribue + * eg xsd:anyVal --> anyVal + * @param desc_builder pointer to desc builder + * @param env pointer to environment struct + * @param in pointer to in + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_desc_builder_get_value( + const axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axis2_char_t * in); + + /** + * Populate the Axis2 Operation with details from the actionMapping, + * outputActionMapping and faultActionMapping elements from the operation + * element. + * @param operation + * @param op_desc + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_desc_builder_process_action_mappings( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axiom_node_t * op_node, + axis2_op_t * op_desc); + + /** + * Populate the Axis2 Operation with details from the RESTLocation, + * RESTMethod elements from the operation element. + * @param operation + * @param op_desc + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_desc_builder_process_rest_params( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axiom_node_t * op_node, + axis2_op_t * op_desc); + + /** + * @param env pointer to environment struct + */ + AXIS2_EXTERN struct axis2_msg_recv *AXIS2_CALL + axis2_desc_builder_load_default_msg_recv( + const axutil_env_t * env); + + AXIS2_EXTERN struct axis2_dep_engine *AXIS2_CALL + axis2_desc_builder_get_dep_engine( + const axis2_desc_builder_t * desc_builder, + const axutil_env_t * env); + + /** + * Creates description builder struct + * @param env pointer to environment struct + * @return pointer to newly created description builder + */ + AXIS2_EXTERN axis2_desc_builder_t *AXIS2_CALL + axis2_desc_builder_create( + const axutil_env_t * env); + + /** + * Creates description builder struct + * @param env pointer to environment struct + * @param engine pointer to engine + * @return pointer to newly created description builder + */ + AXIS2_EXTERN axis2_desc_builder_t *AXIS2_CALL + + axis2_desc_builder_create_with_dep_engine( + const axutil_env_t * env, + struct axis2_dep_engine *engine); + + /** + * Creates description builder struct + * @param env pointer to environment struct + * @param file_name pointer to file name + * @param engine pointer to engine + * @return pointer to newly created description builder + */ + AXIS2_EXTERN axis2_desc_builder_t *AXIS2_CALL + + axis2_desc_builder_create_with_file_and_dep_engine( + const axutil_env_t * env, + axis2_char_t * file_name, + struct axis2_dep_engine *engine); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_process_policy_elements( + const axutil_env_t * env, + int type, + axiom_children_qname_iterator_t * iterator, + axis2_policy_include_t * policy_include); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_process_policy_reference_elements( + const axutil_env_t * env, + int type, + axiom_children_qname_iterator_t * iterator, + axis2_policy_include_t * policy_include); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_DESC_BUILDER_H */ diff --git a/src/core/deployment/axis2_module_builder.h b/src/core/deployment/axis2_module_builder.h new file mode 100644 index 0000000..cd713d6 --- /dev/null +++ b/src/core/deployment/axis2_module_builder.h @@ -0,0 +1,101 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_MODULE_BUILDER_H +#define AXIS2_MODULE_BUILDER_H + +/** @defgroup axis2_module_builder Module Builder + * @ingroup axis2_deployment + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_module_builder */ + typedef struct axis2_module_builder axis2_module_builder_t; + + /** + * De-allocate memory + * @param module_builder pointer to module builder + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_module_builder_free( + axis2_module_builder_t * module_builder, + const axutil_env_t * env); + + /** + * @param module_builder pointer to module builder + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_module_builder_populate_module( + axis2_module_builder_t * module_builder, + const axutil_env_t * env); + + /** + * Creates module builder struct + * @param env pointer to environment struct + * @return pointer to newly created module builder + */ + AXIS2_EXTERN axis2_module_builder_t *AXIS2_CALL + + axis2_module_builder_create( + const axutil_env_t * env); + + /** + * Creates module builder struct + * @param env pointer to environment struct + * @param file_name pointer to file name + * @param dep_engine pointer to deployment engine + * @return pointer to newly created module builder + */ + AXIS2_EXTERN axis2_module_builder_t *AXIS2_CALL + + axis2_module_builder_create_with_file_and_dep_engine_and_module( + const axutil_env_t * env, + axis2_char_t * file_name, + struct axis2_dep_engine *dep_engine, + axis2_module_desc_t * module); + + /** Populates the module. + #define AXIS2_MODULE_BUILDER_POPULATE_MODULE(module_builder, env) \ + axis2_module_builder_populate_module (module_builder, env)*/ + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_MODULE_BUILDER_H */ diff --git a/src/core/deployment/axis2_repos_listener.h b/src/core/deployment/axis2_repos_listener.h new file mode 100644 index 0000000..56a37c8 --- /dev/null +++ b/src/core/deployment/axis2_repos_listener.h @@ -0,0 +1,144 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_REPOS_LISTENER_H +#define AXIS2_REPOS_LISTENER_H + +/** @defgroup axis2_repos_listener Repos Listener + * @ingroup axis2_deployment + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include +#include "axis2_ws_info_list.h" +#include "axis2_dep_engine.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + struct axis2_dep_engine; + + /** Type name for struct axis2_repos_listener */ + typedef struct axis2_repos_listener axis2_repos_listener_t; + + /** + * De-allocate memory + * @param repos_listener pointer to repos listener + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_repos_listener_free( + axis2_repos_listener_t * repos_listener, + const axutil_env_t * env); + + /** + * + * @param repos_listener pointer to repos listener + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_repos_listener_check_modules( + axis2_repos_listener_t * listener, + const axutil_env_t * env); + + /** + * + * @param repos_listener pointer to repos listener + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_repos_listener_check_svcs( + axis2_repos_listener_t * listener, + const axutil_env_t * env); + + /** + * + * @param repos_listener pointer to repos listener + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_repos_listener_update( + axis2_repos_listener_t * listener, + const axutil_env_t * env); + + /** + * + * then it call to check_modules to load all the modules. + * and then it call to update() method inorder to update the deployment engine and engine. + * @param repos_listener pointer to repos listener + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_repos_listener_init( + axis2_repos_listener_t * listener, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @return pointer to newly created deployment engine + */ + AXIS2_EXTERN axis2_repos_listener_t *AXIS2_CALL + axis2_repos_listener_create( + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @param folder_name this is the axis2 deployment root directory(repository path) + * @param dep_engine pointer to deployment engine + * @return pointer to newly created deployment engine + */ + AXIS2_EXTERN axis2_repos_listener_t *AXIS2_CALL + axis2_repos_listener_create_with_folder_name_and_dep_engine( + const axutil_env_t * env, + axis2_char_t * folder_name, + struct axis2_dep_engine *dep_engine); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_repos_listener_set_conf( + axis2_repos_listener_t *repo_listener, + const axutil_env_t * env, + axis2_conf_t *conf); + + AXIS2_EXTERN axis2_conf_t *AXIS2_CALL + axis2_repos_listener_get_conf( + axis2_repos_listener_t *repo_listener, + const axutil_env_t * env); + + + + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_REPOS_LISTENER_H */ diff --git a/src/core/deployment/axis2_svc_builder.h b/src/core/deployment/axis2_svc_builder.h new file mode 100644 index 0000000..c71e7dc --- /dev/null +++ b/src/core/deployment/axis2_svc_builder.h @@ -0,0 +1,149 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_SVC_BUILDER_H +#define AXIS2_SVC_BUILDER_H + +/** + * @defgroup axis2_svc_builder Service Builder + * @ingroup axis2_deployment + * @{ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + struct axis2_dep_engine; + + /** Type name for struct axis2_svc_builder */ + typedef struct axis2_svc_builder axis2_svc_builder_t; + + /** + * De-allocate memory + * @param svc_builder pointer to service builder + * @param env pointer to environment struct + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_svc_builder_free( + axis2_svc_builder_t * svc_builder, + const axutil_env_t * env); + + /** + * top most method that is used to populate service from corresponding OM + * @param svc_builder pointer to service builder + * @param env pointer to environment struct + * @param svc_node pointer to service node + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_svc_builder_populate_svc( + axis2_svc_builder_t * svc_builder, + const axutil_env_t * env, + axiom_node_t * svc_node); + + /** + * @param svc_builder pointer to service builder + * @param env pointer to environment struct + * @param module_confs pointer to module configurations + * @param parent pointer to parent + * @param svc pointer to service + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_builder_process_svc_module_conf( + axis2_svc_builder_t * svc_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * module_confs, + axutil_param_container_t * parent, + axis2_svc_t * svc); + + /** + * To get the list og modules that is requird to be engage globally + * @param svc_builder pointer to service builder + * @param env pointer to environment struct + * @param module_refs pointer to module refs + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_builder_process_module_refs( + axis2_svc_builder_t * svc_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * module_refs); + + AXIS2_EXTERN struct axis2_desc_builder *AXIS2_CALL + + axis2_svc_builder_get_desc_builder( + const axis2_svc_builder_t * svc_builder, + const axutil_env_t * env); + + /** + * Creates svc builder struct + * @param env pointer to environment struct + * @return pointer to newly created service builder + */ + AXIS2_EXTERN axis2_svc_builder_t *AXIS2_CALL + axis2_svc_builder_create( + const axutil_env_t * env); + + /** + * Creates svc builder struct + * @param env pointer to environment struct + * @param file_name pointer to file name + * @param dep_engine pointer to deployment engine + * @param svc pointer to service + * @return pointer to newly created service builder + */ + AXIS2_EXTERN axis2_svc_builder_t *AXIS2_CALL + + axis2_svc_builder_create_with_file_and_dep_engine_and_svc( + const axutil_env_t * env, + axis2_char_t * file_name, + struct axis2_dep_engine *dep_engine, + axis2_svc_t * svc); + + /** + * Creates svc builder struct + * @param env pointer to environment struct + * @param dep_engine pointer to deployment engine + * @param svc pointer to service + * @return pointer to newly created service builder + */ + AXIS2_EXTERN axis2_svc_builder_t *AXIS2_CALL + + axis2_svc_builder_create_with_dep_engine_and_svc( + const axutil_env_t * env, + struct axis2_dep_engine *dep_engine, + axis2_svc_t * svc); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_SVC_BUILDER_H */ diff --git a/src/core/deployment/axis2_svc_grp_builder.h b/src/core/deployment/axis2_svc_grp_builder.h new file mode 100644 index 0000000..852c9a7 --- /dev/null +++ b/src/core/deployment/axis2_svc_grp_builder.h @@ -0,0 +1,122 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not svc_grp this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_SVC_GRP_BUILDER_H +#define AXIS2_SVC_GRP_BUILDER_H + +/** @defgroup axis2_svc_grp_builder Service Group Builder + * @ingroup axis2_deployment + * @{ + */ + +/** + * @file axis2_svc_grp_builder.h + * @brief Axis2 Service Group Builder interface + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_svc_grp_builder */ + typedef struct axis2_svc_grp_builder axis2_svc_grp_builder_t; + + /** + * De-allocate memory + * @param svc_grp_builder pointer to service group builder + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_svc_grp_builder_free( + axis2_svc_grp_builder_t * svc_grp_builder, + const axutil_env_t * env); + + /** + * @param grp_builder pointer to group builder + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_grp_builder_populate_svc_grp( + axis2_svc_grp_builder_t * grp_builder, + const axutil_env_t * env, + axis2_svc_grp_t * svc_grp); + + /** + * To get the list og modules that is requird to be engage globally + * @param grp_builder pointer to group builder + * @param env pointer to environment struct + * @param module_refs axiom_children_qname_iterator_t + * @param svc_group pointer to service group + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_svc_grp_builder_process_module_refs( + axis2_svc_grp_builder_t * grp_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * module_refs, + axis2_svc_grp_t * svc_grp); + + AXIS2_EXTERN axis2_desc_builder_t *AXIS2_CALL + + axis2_svc_grp_builder_get_desc_builder( + const axis2_svc_grp_builder_t * svc_grp_builder, + const axutil_env_t * env); + + /** + * Creates svc_grp builder struct + * @param env pointer to environment struct + * @return pointer to newly created service group builder + */ + AXIS2_EXTERN axis2_svc_grp_builder_t *AXIS2_CALL + + axis2_svc_grp_builder_create( + const axutil_env_t * env); + + /** + * Creates svc_grp builder struct + * @param env pointer to environment strut + * @param svc pointer to service + * @param dep_engine pointer to deployment engine + * @return pointer to newly created service group builder + */ + AXIS2_EXTERN axis2_svc_grp_builder_t *AXIS2_CALL + + axis2_svc_grp_builder_create_with_svc_and_dep_engine( + const axutil_env_t * env, + axiom_node_t * svc, + axis2_dep_engine_t * dep_engine); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_SVC_GRP_BUILDER_H */ diff --git a/src/core/deployment/axis2_ws_info.h b/src/core/deployment/axis2_ws_info.h new file mode 100644 index 0000000..d6fd117 --- /dev/null +++ b/src/core/deployment/axis2_ws_info.h @@ -0,0 +1,144 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_WS_INFO_H +#define AXIS2_WS_INFO_H + +/** + * @defgroup axis2_ws_info Ws Info + * @ingroup axis2_deployment + * @{ + */ + +/** + * @file axis2_ws_info.h + * @brief Axis2 Ws Info interface. ws_info construct contain file information + * for module or service configuration file. + */ +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + struct axis2_conf; + + /** Type name for struct axis2_ws_info */ + typedef struct axis2_ws_info axis2_ws_info_t; + + /** + * De-allocate memory + * @param ws_info pointer to ws info + * @param env pointer to environment struct + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_ws_info_free( + axis2_ws_info_t * ws_info, + const axutil_env_t * env); + + /** + * @param ws_info pointer to ws info + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_ws_info_get_file_name( + const axis2_ws_info_t * ws_info, + const axutil_env_t * env); + + /** + * @param ws_info pointer to ws info + * @param env pointer to environment struct + * @param file_name pointer to file name + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_ws_info_set_file_name( + axis2_ws_info_t * ws_info, + const axutil_env_t * env, + axis2_char_t * file_name); + + /** + * @param ws_info pointer to ws info + * @param env pointer to environment struct + */ + AXIS2_EXTERN long AXIS2_CALL + axis2_ws_info_get_last_modified_date( + const axis2_ws_info_t * ws_info, + const axutil_env_t * env); + + /** + * @param ws_info pointer to ws info + * @param env pointer to environment struct + * @param modified_data pointer to modified date + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_ws_info_set_last_modified_date( + axis2_ws_info_t * ws_info, + const axutil_env_t * env, + long last_modified_date); + + /** + * @param ws_info pointer to ws info + * @param env pointer to environment struct + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_ws_info_get_type( + const axis2_ws_info_t * ws_info, + const axutil_env_t * env); + + /** + * Creates ws_info struct + * @param env pointer to environment struct + * @param file_name pointer to file name + * @param last_modified_date pointer to last modified date + * @return pointer to newly created ws info + */ + AXIS2_EXTERN axis2_ws_info_t *AXIS2_CALL + + axis2_ws_info_create_with_file_name_and_last_modified_date( + const axutil_env_t * env, + axis2_char_t * file_name, + long last_modified_date); + + /** + * @param env pointer to environment struct + * @param file_name pointer to file name + * @param last_modifile_date last modified date + * @param type type + */ + AXIS2_EXTERN axis2_ws_info_t *AXIS2_CALL + + axis2_ws_info_create_with_file_name_and_last_modified_date_and_type( + const axutil_env_t * env, + axis2_char_t * file_name, + long last_modified_date, + int type); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_WS_INFO_H */ diff --git a/src/core/deployment/axis2_ws_info_list.h b/src/core/deployment/axis2_ws_info_list.h new file mode 100644 index 0000000..3ffb68d --- /dev/null +++ b/src/core/deployment/axis2_ws_info_list.h @@ -0,0 +1,192 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_WS_INFO_LIST_H +#define AXIS2_WS_INFO_LIST_H + +/** @defgroup axis2_ws_info_list Ws Info List + * @ingroup axis2_deployment + * @{ + */ + +/** + * @file axis2_ws_info_list.h + * @brief Axis2 Ws Info List interface. Ws Info List is the list of ws_info structs. + * Each ws_info construct contain file information for module or service configuration file. + */ + +#include +#include +#include +#include +#include +#include +#include +#include "axis2_deployment.h" +#include +#include +#include "axis2_ws_info.h" +#include "axis2_arch_file_data.h" +#include "axis2_dep_engine.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + struct axis2_ws_info; + struct axis2_dep_engine; + + /** Type name for struct axis2_ws_info_list */ + typedef struct axis2_ws_info_list axis2_ws_info_list_t; + + /** + * De-allocate memory + * @param ws_info_list pointer to ws info list + * @param env pointer to environment struct + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_ws_info_list_free( + axis2_ws_info_list_t * ws_info_list, + const axutil_env_t * env); + + /** + * This method is used to initialize the ws info list. + * @param info_list pointer to ws info list + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_ws_info_list_init( + axis2_ws_info_list_t * info_list, + const axutil_env_t * env); + + /** + * This will add the deployment info struct(ws_info) into the deployment info + * list and deployment info file to the deployment engine as new + * service or module deployment info struct/file. + * In doing this, it first create an deployment info struct called ws_info + * to keep the file info that will be added to deployment info file + * list and then create deployment info file called arch_file_data that will + * be added to deployment engine for actual deployment of the service/module. + * + * This will add two entries to deployment engine one for new Deployment and + * other for undeployment. + * @param info_list pointer to ws info list + * @param env pointer to environment struct + * @param file actual axis2 configuration file for module/service. + * @param type indicate either service or module + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_ws_info_list_add_ws_info_item( + axis2_ws_info_list_t * info_list, + const axutil_env_t * env, + axutil_file_t * file, + int type); + + /** + * This method is used to check whether the service/module configuration + * file exist and if so it will return related ws_info object to the file, + * else return NULL; + * @param info_list pointer to ws info list + * @param env pointer to environment struct + * @param file_name pointer to file name + */ + AXIS2_EXTERN axis2_ws_info_t *AXIS2_CALL + + axis2_ws_info_list_get_file_item( + axis2_ws_info_list_t * info_list, + const axutil_env_t * env, + axis2_char_t * file_name); + + /** + * Compare the last update dates of both files and if those differ + * it will be assumed as the file has been modified. + * @param info_list pointer to ws info list + * @param env pointer to environment struct + * @param file pointer to servie/module configuration file. + * @param ws_info pointer to ws info struct. + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_ws_info_list_is_modified( + axis2_ws_info_list_t * info_list, + const axutil_env_t * env, + axutil_file_t * file, + struct axis2_ws_info *ws_info); + + /** + * To check whether the deployment info file is alredy in the list. + * @param info_list pointer to ws info list + * @param env pointer to environment struct + * @param file_name pointer to file name + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_ws_info_list_is_file_exist( + axis2_ws_info_list_t * info_list, + const axutil_env_t * env, + axis2_char_t * file_name); + + /** + * This is to check whether to undeploy ws info struct. + * What this realy does is, it check ws_info list and current deployment + * info name list. If ws_info exists in the ws_info_list but it's + * corresponding file name does not exist in the current deploymet file + * name list then, struct is deemed non existant. ie. that is hot + * undeployment. + * @param info_list pointer to ws info list + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_ws_info_list_check_for_undeploy( + axis2_ws_info_list_t * info_list, + const axutil_env_t * env); + + /** + * @param info_list pointer to ws info list + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_ws_info_list_update( + axis2_ws_info_list_t * info_list, + const axutil_env_t * env); + + /** + * Creates ws info list struct + * @param env pointer to environment struct + * @param dep_engine pointer to deployment engine + * @return pointer to newly created ws info list + */ + AXIS2_EXTERN axis2_ws_info_list_t *AXIS2_CALL + + axis2_ws_info_list_create_with_dep_engine( + const axutil_env_t * env, + struct axis2_dep_engine *dep_engine); + + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_WS_INFO_LIST_H */ diff --git a/src/core/deployment/conf_builder.c b/src/core/deployment/conf_builder.c new file mode 100644 index 0000000..15485b0 --- /dev/null +++ b/src/core/deployment/conf_builder.c @@ -0,0 +1,1337 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +struct axis2_conf_builder +{ + axis2_conf_t *conf; + struct axis2_desc_builder *desc_builder; +}; + +static axis2_status_t +axis2_conf_builder_process_disp_order( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env, + axiom_node_t * disp_order_node); + +static axis2_status_t +axis2_conf_builder_process_phase_orders( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * phase_orders); + +static axutil_array_list_t * +axis2_conf_builder_get_phase_list( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env, + axiom_node_t * phase_orders_node); + +static axis2_status_t +axis2_conf_builder_process_transport_senders( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * trs_senders); + +static axis2_status_t +axis2_conf_builder_process_transport_recvs( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * trs_recvs); + +static axis2_status_t AXIS2_CALL +axis2_conf_builder_process_default_module_versions( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * module_versions); + +AXIS2_EXTERN axis2_conf_builder_t *AXIS2_CALL +axis2_conf_builder_create( + const axutil_env_t * env) +{ + axis2_conf_builder_t *conf_builder = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + conf_builder = (axis2_conf_builder_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_conf_builder_t)); + + if(!conf_builder) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + conf_builder->conf = NULL; + + return conf_builder; +} + +AXIS2_EXTERN axis2_conf_builder_t *AXIS2_CALL +axis2_conf_builder_create_with_file_and_dep_engine_and_conf( + const axutil_env_t * env, + axis2_char_t * file, + axis2_dep_engine_t * engine, + axis2_conf_t * conf) +{ + axis2_conf_builder_t *conf_builder = NULL; + + conf_builder = (axis2_conf_builder_t *)axis2_conf_builder_create(env); + if(!conf_builder) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + conf_builder->desc_builder = axis2_desc_builder_create_with_file_and_dep_engine(env, file, + engine); + conf_builder->conf = conf; + + return conf_builder; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_conf_builder_free( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env) +{ + if(conf_builder->desc_builder) + { + axis2_desc_builder_free(conf_builder->desc_builder, env); + } + + if(conf_builder) + { + AXIS2_FREE(env->allocator, conf_builder); + } + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_builder_populate_conf( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env) +{ + axutil_qname_t *qparamst = NULL; + axutil_qname_t *qmsgrecv = NULL; + axutil_qname_t *qdisporder = NULL; + axutil_qname_t *qmodulest = NULL; + axutil_qname_t *qtransportsender = NULL; + axutil_qname_t *qtransportrecv = NULL; + axutil_qname_t *qphaseorder = NULL; + axutil_qname_t *qdefmodver = NULL; + axiom_children_qname_iterator_t *itr = NULL; + axiom_children_qname_iterator_t *msg_recvs = NULL; + axiom_children_qname_iterator_t *module_itr = NULL; + axiom_children_qname_iterator_t *trs_senders = NULL; + axiom_children_qname_iterator_t *trs_recvs = NULL; + axiom_children_qname_iterator_t *phase_orders = NULL; + axiom_children_qname_iterator_t *def_mod_versions = NULL; + axiom_element_t *conf_element = NULL; + axiom_node_t *conf_node = NULL; + axiom_element_t *disp_order_element = NULL; + axiom_node_t *disp_order_node = NULL; + axis2_status_t status = AXIS2_FAILURE; + axutil_param_t *param = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_conf_builder_populate_conf"); + conf_node = axis2_desc_builder_build_om(conf_builder->desc_builder, env); + if(!conf_node) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Building om tree failed. Unable to continue"); + return AXIS2_FAILURE; + } + conf_element = axiom_node_get_data_element(conf_node, env); + /* processing Paramters */ + /* Processing service level paramters */ + qparamst = axutil_qname_create(env, AXIS2_PARAMETERST, NULL, NULL); + itr = axiom_element_get_children_with_qname(conf_element, env, qparamst, conf_node); + axutil_qname_free(qparamst, env); + axis2_desc_builder_process_params(conf_builder->desc_builder, env, itr, + axis2_conf_get_param_container(conf_builder->conf, env), axis2_conf_get_param_container( + conf_builder->conf, env)); + /* process Message Reciver */ + qmsgrecv = axutil_qname_create(env, AXIS2_MESSAGERECEIVER, NULL, NULL); + msg_recvs = axiom_element_get_children_with_qname(conf_element, env, qmsgrecv, conf_node); + axutil_qname_free(qmsgrecv, env); + while(axiom_children_qname_iterator_has_next(msg_recvs, env)) + { + axiom_node_t *msg_recv_node = NULL; + axiom_element_t *msg_recv_element = NULL; + axis2_msg_recv_t *msg_recv = NULL; + axiom_attribute_t *recv_name = NULL; + axutil_qname_t *class_qname = NULL; + axis2_char_t *class_name = NULL; + + msg_recv_node = (axiom_node_t *)axiom_children_qname_iterator_next(msg_recvs, env); + msg_recv_element = (axiom_element_t *)axiom_node_get_data_element(msg_recv_node, env); + msg_recv = axis2_desc_builder_load_msg_recv(conf_builder->desc_builder, env, + msg_recv_element); + if(!msg_recv) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Message receiver loading failed. Unable to continue"); + return AXIS2_FAILURE; + } + + class_qname = axutil_qname_create(env, AXIS2_CLASSNAME, NULL, NULL); + recv_name = axiom_element_get_attribute(msg_recv_element, env, class_qname); + axutil_qname_free(class_qname, env); + class_name = axiom_attribute_get_value(recv_name, env); + axis2_conf_add_msg_recv(conf_builder->conf, env, class_name, msg_recv); + } + + /* processing Dispatching Order */ + qdisporder = axutil_qname_create(env, AXIS2_DISPATCH_ORDER, NULL, NULL); + disp_order_element = axiom_element_get_first_child_with_qname(conf_element, env, qdisporder, + conf_node, &disp_order_node); + axutil_qname_free(qdisporder, env); + if(disp_order_element) + { + axis2_conf_builder_process_disp_order(conf_builder, env, disp_order_node); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Found the custom disptaching" + " order and continue with that order"); + } + else + { + status = axis2_conf_set_default_dispatchers(conf_builder->conf, env); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting default dispatchers to configuration failed, " + "unable to continue."); + return AXIS2_FAILURE; + } + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "No custom dispatching order" + " found. Continue with the default dispatching order"); + } + + /* Process Module refs */ + qmodulest = axutil_qname_create(env, AXIS2_MODULEST, NULL, NULL); + module_itr = axiom_element_get_children_with_qname(conf_element, env, qmodulest, conf_node); + axutil_qname_free(qmodulest, env); + status = axis2_conf_builder_process_module_refs(conf_builder, env, module_itr); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Processing module ref's failed, unable to continue."); + return AXIS2_FAILURE; + } + /* Proccessing Transport Sennders */ + qtransportsender = axutil_qname_create(env, AXIS2_TRANSPORTSENDER, NULL, NULL); + trs_senders = axiom_element_get_children_with_qname(conf_element, env, qtransportsender, + conf_node); + axutil_qname_free(qtransportsender, env); + status = axis2_conf_builder_process_transport_senders(conf_builder, env, trs_senders); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Processing transport senders failed, unable to continue"); + return AXIS2_FAILURE; + } + + /* Proccessing Transport Recivers */ + qtransportrecv = axutil_qname_create(env, AXIS2_TRANSPORTRECEIVER, NULL, NULL); + trs_recvs = axiom_element_get_children_with_qname(conf_element, env, qtransportrecv, conf_node); + axutil_qname_free(qtransportrecv, env); + status = axis2_conf_builder_process_transport_recvs(conf_builder, env, trs_recvs); + + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Processing transport receivers failed, unable to continue"); + return AXIS2_FAILURE; + } + + /* processing Phase orders */ + qphaseorder = axutil_qname_create(env, AXIS2_PHASE_ORDER, NULL, NULL); + phase_orders = axiom_element_get_children_with_qname(conf_element, env, qphaseorder, conf_node); + axutil_qname_free(qphaseorder, env); + status = axis2_conf_builder_process_phase_orders(conf_builder, env, phase_orders); + + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Processing phase orders failed, unable to continue"); + return AXIS2_FAILURE; + } + + /* Processing default module versions */ + qdefmodver = axutil_qname_create(env, AXIS2_DEFAULT_MODULE_VERSION, NULL, NULL); + def_mod_versions = axiom_element_get_children_with_qname(conf_element, env, qdefmodver, + conf_node); + axutil_qname_free(qdefmodver, env); + if(def_mod_versions) + { + status = axis2_conf_builder_process_default_module_versions(conf_builder, env, + def_mod_versions); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Processing default module versions failed, unable to continue"); + return AXIS2_FAILURE; + } + } + + param = axutil_param_container_get_param( + axis2_conf_get_param_container(conf_builder->conf, env), env, AXIS2_ENABLE_MTOM); + if(param) + { + axis2_char_t *value = NULL; + value = axutil_param_get_value(param, env); + if(value) + { + axis2_conf_set_enable_mtom(conf_builder->conf, env, (!axutil_strcmp(value, + AXIS2_VALUE_TRUE))); + } + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_conf_builder_populate_conf"); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_builder_process_module_refs( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * module_refs) +{ + axis2_status_t status = AXIS2_SUCCESS; + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_conf_builder_process_module_refs"); + AXIS2_PARAM_CHECK(env->error, module_refs, AXIS2_FAILURE); + + while(axiom_children_qname_iterator_has_next(module_refs, env)) + { + axiom_node_t *module_ref_node = NULL; + axiom_element_t *module_ref_element = NULL; + axutil_qname_t *qref = NULL; + + axiom_attribute_t *module_ref_att = NULL; + module_ref_node = (axiom_node_t *)axiom_children_qname_iterator_next(module_refs, env); + if(!module_ref_node) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Module ref node is empty. Unable to continue"); + return AXIS2_FAILURE; + } + module_ref_element = axiom_node_get_data_element(module_ref_node, env); + qref = axutil_qname_create(env, AXIS2_REF, NULL, NULL); + module_ref_att = axiom_element_get_attribute(module_ref_element, env, qref); + if(qref) + { + axutil_qname_free(qref, env); + } + + if(module_ref_att) + { + axutil_qname_t *qrefname = NULL; + axis2_char_t *ref_name = NULL; + + ref_name = axiom_attribute_get_value(module_ref_att, env); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Module %s found in axis2.xml", ref_name); + qrefname = axutil_qname_create(env, ref_name, NULL, NULL); + status = axis2_dep_engine_add_module(axis2_desc_builder_get_dep_engine( + conf_builder->desc_builder, env), env, qrefname); + if(qrefname) + { + axutil_qname_free(qrefname, env); + } + } + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_conf_builder_process_module_refs"); + return status; +} + +static axis2_status_t +axis2_conf_builder_process_disp_order( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env, + axiom_node_t * disp_order_node) +{ + axiom_element_t *disp_order_element = NULL; + axiom_children_qname_iterator_t *disps = NULL; + axutil_qname_t *qdisp = NULL; + axis2_bool_t found_disp = AXIS2_FALSE; + axis2_phase_t *disp_phase = NULL; + int count = 0; + axis2_bool_t qname_itr_has_next = AXIS2_FALSE; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_conf_builder_process_disp_order"); + AXIS2_PARAM_CHECK(env->error, disp_order_node, AXIS2_FAILURE); + + disp_order_element = axiom_node_get_data_element(disp_order_node, env); + qdisp = axutil_qname_create(env, AXIS2_DISPATCHER, NULL, NULL); + disps = axiom_element_get_children_with_qname(disp_order_element, env, qdisp, disp_order_node); + axutil_qname_free(qdisp, env); + disp_phase = axis2_phase_create(env, AXIS2_PHASE_DISPATCH); + if(!disp_phase) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Dispatch phase creation failed. Unable to continue"); + return AXIS2_FAILURE; + } + if(disps) + { + qname_itr_has_next = axiom_children_qname_iterator_has_next(disps, env); + } + while(qname_itr_has_next) + { + axiom_node_t *disp_node = NULL; + axiom_element_t *disp_element = NULL; + axiom_attribute_t *disp_att = NULL; + axis2_char_t *class_name = NULL; + axis2_char_t *dll_name = NULL; + axutil_qname_t *class_qname = NULL; + axis2_disp_t *disp_dll = NULL; + axutil_dll_desc_t *dll_desc = NULL; + axutil_param_t *impl_info_param = NULL; + axis2_handler_desc_t *handler_desc = NULL; + axis2_handler_t *handler = NULL; + + found_disp = AXIS2_TRUE; + disp_node = (axiom_node_t *)axiom_children_qname_iterator_next(disps, env); + disp_element = (axiom_element_t *) axiom_node_get_data_element(disp_node, env); + class_qname = axutil_qname_create(env, AXIS2_CLASSNAME, NULL, NULL); + disp_att = axiom_element_get_attribute(disp_element, env, class_qname); + axutil_qname_free(class_qname, env); + if(!disp_att) + { + qname_itr_has_next = axiom_children_qname_iterator_has_next(disps, env); + continue; + } + class_name = axiom_attribute_get_value(disp_att, env); + dll_desc = axutil_dll_desc_create(env); + dll_name = axutil_dll_desc_create_platform_specific_dll_name(dll_desc, env, class_name); + axutil_dll_desc_set_name(dll_desc, env, dll_name); + axutil_dll_desc_set_type(dll_desc, env, AXIS2_HANDLER_DLL); + impl_info_param = axutil_param_create(env, class_name, NULL); + if(!impl_info_param) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Parameter creation failed for %s. Unable to continue", class_name); + + axis2_phase_free(disp_phase, env); + + return AXIS2_FAILURE; + } + + axutil_param_set_value(impl_info_param, env, dll_desc); + axutil_param_set_value_free(impl_info_param, env, axutil_dll_desc_free_void_arg); + axutil_class_loader_init(env); + disp_dll = (axis2_disp_t *)axutil_class_loader_create_dll(env, impl_info_param); + + handler = axis2_disp_get_base(disp_dll, env); + handler_desc = axis2_handler_get_handler_desc(handler, env); + axis2_handler_desc_add_param(handler_desc, env, impl_info_param); + + axis2_phase_add_handler_at(disp_phase, env, count, handler); + count++; + qname_itr_has_next = axiom_children_qname_iterator_has_next(disps, env); + + } + + if(!found_disp) + { + axis2_phase_free(disp_phase, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_DISPATCHER_FOUND, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No dispatcher found. Unable to continue"); + + return AXIS2_FAILURE; + } + else + { + status = axis2_conf_set_dispatch_phase(conf_builder->conf, env, disp_phase); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting dispatch phase failed. Unable to continue"); + + axis2_phase_free(disp_phase, env); + + return status; + } + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_conf_builder_process_disp_order"); + return AXIS2_SUCCESS; +} + +/** + * To process all the phase orders which are defined in axis2.xml retrieve each phase order node + * from the iterator passed as parameter and from each phase order node retrieve phases list + * defined for that phase order. Add the phases names into a array list and set it into the + * dep_engine->phases_info with the corresponding phase order name. + * @param phase_orders + */ +static axis2_status_t +axis2_conf_builder_process_phase_orders( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * phase_orders) +{ + axis2_phases_info_t *info = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_conf_builder_process_phase_orders"); + + AXIS2_PARAM_CHECK(env->error, phase_orders, AXIS2_FAILURE); + + info = axis2_dep_engine_get_phases_info(axis2_desc_builder_get_dep_engine( + conf_builder->desc_builder, env), env); + + while(axiom_children_qname_iterator_has_next(phase_orders, env)) + { + axiom_node_t *phase_orders_node = NULL; + axiom_element_t *phase_orders_element = NULL; + axiom_attribute_t *phase_orders_att = NULL; + axutil_qname_t *qtype = NULL; + axis2_char_t *flow_type = NULL; + axutil_array_list_t *phase_list = NULL; + + phase_orders_node = (axiom_node_t *)axiom_children_qname_iterator_next(phase_orders, env); + if(phase_orders_node) + { + phase_orders_element = axiom_node_get_data_element(phase_orders_node, env); + } + if(phase_orders_element) + { + qtype = axutil_qname_create(env, AXIS2_TYPE, NULL, NULL); + phase_orders_att = axiom_element_get_attribute(phase_orders_element, env, qtype); + axutil_qname_free(qtype, env); + } + + if(phase_orders_att) + { + flow_type = axiom_attribute_get_value(phase_orders_att, env); + } + + phase_list = axis2_conf_builder_get_phase_list(conf_builder, env, phase_orders_node); + if(!phase_list) + { + axis2_status_t status_code = AXIS2_FAILURE; + + status_code = AXIS2_ERROR_GET_STATUS_CODE(env->error); + if(AXIS2_SUCCESS != status_code) + { + return status_code; + } + + return AXIS2_SUCCESS; + } + + if(flow_type && !axutil_strcmp(AXIS2_IN_FLOW_START, flow_type)) + { + axis2_phases_info_set_in_phases(info, env, phase_list); + } + else if(flow_type && !axutil_strcmp(AXIS2_IN_FAILTFLOW, flow_type)) + { + axis2_phases_info_set_in_faultphases(info, env, phase_list); + } + else if(flow_type && !axutil_strcmp(AXIS2_OUT_FLOW_START, flow_type)) + { + axis2_phases_info_set_out_phases(info, env, phase_list); + } + else if(flow_type && !axutil_strcmp(AXIS2_OUT_FAILTFLOW, flow_type)) + { + axis2_phases_info_set_out_faultphases(info, env, phase_list); + } + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_conf_builder_process_phase_orders"); + + return AXIS2_SUCCESS; +} + +/* From the phase order node passed as parameter retrieve all phase element nodes. From them extract + * the phase name and add it to a array list. Return the array list. + */ +static axutil_array_list_t * +axis2_conf_builder_get_phase_list( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env, + axiom_node_t * phase_orders_node) +{ + axutil_array_list_t *phase_list = NULL; + axiom_children_qname_iterator_t *phases = NULL; + axutil_qname_t *qphase = NULL; + axiom_element_t *phase_orders_element; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_conf_builder_get_phase_list"); + + AXIS2_PARAM_CHECK(env->error, phase_orders_node, NULL); + + phase_orders_element = axiom_node_get_data_element(phase_orders_node, env); + if(!phase_orders_element) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_DATA_ELEMENT_IS_NULL, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Retrieving phase orders data element from phase orders node failed. Unable to continue"); + + return NULL; + } + + phase_list = axutil_array_list_create(env, 0); + qphase = axutil_qname_create(env, AXIS2_PHASE, NULL, NULL); + phases = axiom_element_get_children_with_qname(phase_orders_element, env, qphase, + phase_orders_node); + + axutil_qname_free(qphase, env); + if(!phases) + { + axutil_array_list_free(phase_list, env); + + /* I guess this is not an error. So adding debug message*/ + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "No phase node found in the phase orders node"); + + return NULL; + } + + while(axiom_children_qname_iterator_has_next(phases, env)) + { + axiom_node_t *phase_node = NULL; + axiom_element_t *phase_element = NULL; + axiom_attribute_t *phase_att = NULL; + axutil_qname_t *qattname = NULL; + axis2_char_t *att_value = NULL; + + phase_node = (axiom_node_t *)axiom_children_qname_iterator_next(phases, env); + if(phase_node) + { + phase_element = (axiom_element_t *)axiom_node_get_data_element(phase_node, env); + } + + qattname = axutil_qname_create(env, AXIS2_ATTNAME, NULL, NULL); + if(phase_element) + { + phase_att = axiom_element_get_attribute(phase_element, env, qattname); + } + + if(phase_att) + { + att_value = axiom_attribute_get_value(phase_att, env); + } + + if(att_value) + { + axutil_array_list_add(phase_list, env, att_value); + } + + axutil_qname_free(qattname, env); + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_conf_builder_get_phase_list"); + + return phase_list; +} + +static axis2_status_t +axis2_conf_builder_process_transport_senders( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * trs_senders) +{ + axis2_status_t status = AXIS2_FAILURE; + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_conf_builder_process_transport_senders"); + while(axiom_children_qname_iterator_has_next(trs_senders, env)) + { + axis2_transport_out_desc_t *transport_out = NULL; + axiom_node_t *transport_node = NULL; + axiom_element_t *transport_element = NULL; + axiom_attribute_t *trs_name = NULL; + axutil_qname_t *qattname = NULL; + + transport_node = (axiom_node_t *)axiom_children_qname_iterator_next(trs_senders, env); + + if(transport_node) + { + transport_element = (axiom_element_t *)axiom_node_get_data_element(transport_node, env); + if(!transport_element) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Retrieving data element failed from the transport node." + " Unable to continue"); + return AXIS2_FAILURE; + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Transport node is empty. Unable to continue"); + return AXIS2_FAILURE; + } + + /* getting trsnport Name */ + qattname = axutil_qname_create(env, AXIS2_ATTNAME, NULL, NULL); + if(transport_element) + { + trs_name = axiom_element_get_attribute(transport_element, env, qattname); + } + + axutil_qname_free(qattname, env); + if(trs_name) + { + axis2_char_t *name = NULL; + axiom_attribute_t *trs_dll_att = NULL; + axis2_char_t *dll_name = NULL; + axis2_char_t *class_name = NULL; + axiom_children_qname_iterator_t *itr = NULL; + axutil_qname_t *qparamst = NULL; + axutil_qname_t *qinflowst = NULL; + axutil_qname_t *qoutflowst = NULL; + axutil_qname_t *qinfaultflowst = NULL; + axutil_qname_t *qoutfaultflowst = NULL; + axutil_qname_t *qdllname = NULL; + axiom_element_t *in_flow_element = NULL; + axiom_node_t *in_flow_node = NULL; + axiom_element_t *out_flow_element = NULL; + axiom_node_t *out_flow_node = NULL; + axiom_element_t *in_fault_flow_element = NULL; + axiom_node_t *in_fault_flow_node = NULL; + axiom_element_t *out_fault_flow_element = NULL; + axiom_node_t *out_fault_flow_node = NULL; + axutil_dll_desc_t *dll_desc = NULL; + axutil_param_t *impl_info_param = NULL; + void *transport_sender = NULL; + axis2_char_t *path_qualified_dll_name = NULL; + axis2_char_t *repos_name = NULL; + axis2_char_t *temp_path = NULL; + axis2_char_t *temp_path2 = NULL; + axis2_char_t *temp_path3 = NULL; + AXIS2_TRANSPORT_ENUMS transport_enum = AXIS2_TRANSPORT_ENUM_HTTP; + /* AXIS2_TRANSPORT_ENUMS transport_enum = AXIS2_TRANSPORT_ENUM_HTTP + * set to avoid C4701 on Windows + */ + axis2_bool_t axis2_flag = AXIS2_FALSE; + axutil_param_t *libparam; + axis2_char_t *libdir = NULL; + axis2_conf_t *conf; + + conf = conf_builder->conf; + axis2_flag = axis2_conf_get_axis2_flag(conf, env); + + name = axiom_attribute_get_value(trs_name, env); + + if(name) + { + if(!axutil_strcmp(name, AXIS2_TRANSPORT_HTTP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_HTTP; + } + else if(!axutil_strcmp(name, AXIS2_TRANSPORT_SMTP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_SMTP; + } + else if(!axutil_strcmp(name, AXIS2_TRANSPORT_XMPP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_XMPP; + } + else if(!axutil_strcmp(name, AXIS2_TRANSPORT_TCP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_TCP; + } + else if(!axutil_strcmp(name, AXIS2_TRANSPORT_HTTPS)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_HTTPS; + } + else if(!axutil_strcmp(name, AXIS2_TRANSPORT_AMQP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_AMQP; + } + else if(!axutil_strcmp(name, AXIS2_TRANSPORT_UDP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_UDP; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Transport name %s doesn't match with transport enum. " + "Unable to continue", name); + return AXIS2_FAILURE; + } + + transport_out = axis2_transport_out_desc_create(env, transport_enum); + } + + if(!transport_out) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Transport_out value is NULL for transport %s", name); + return AXIS2_FAILURE; + } + + /* transport impl class */ + qdllname = axutil_qname_create(env, AXIS2_CLASSNAME, NULL, NULL); + trs_dll_att = axiom_element_get_attribute(transport_element, env, qdllname); + axutil_qname_free(qdllname, env); + if(!trs_dll_att) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_TRANSPORT_SENDER_ERROR, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Transport dll name attribute is not set in the " + "%s transport element node", name); + return AXIS2_FAILURE; + } + class_name = axiom_attribute_get_value(trs_dll_att, env); + impl_info_param = axutil_param_create(env, class_name, NULL); + if(!impl_info_param) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating module dll name parameter failed for %s. Unable " + "to continue", class_name); + axis2_transport_out_desc_free(transport_out, env); + return AXIS2_FAILURE; + } + dll_desc = axutil_dll_desc_create(env); + dll_name = axutil_dll_desc_create_platform_specific_dll_name(dll_desc, env, class_name); + if(!axis2_flag) + { + repos_name = axis2_dep_engine_get_repos_path(axis2_desc_builder_get_dep_engine( + conf_builder->desc_builder, env), env); + temp_path = axutil_stracat(env, repos_name, AXIS2_PATH_SEP_STR); + temp_path2 = axutil_stracat(env, temp_path, AXIS2_LIB_FOLDER); + temp_path3 = axutil_stracat(env, temp_path2, AXIS2_PATH_SEP_STR); + path_qualified_dll_name = axutil_stracat(env, temp_path3, dll_name); + AXIS2_FREE(env->allocator, temp_path); + AXIS2_FREE(env->allocator, temp_path2); + AXIS2_FREE(env->allocator, temp_path3); + } + else + { + libparam = axis2_conf_get_param(conf, env, AXIS2_LIB_DIR); + if(libparam) + { + libdir = axutil_param_get_value(libparam, env); + } + + if(!libdir) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Specifying" + "services and modules directories using axis2.xml but" + " path of the library directory is not present"); + return AXIS2_FAILURE; + } + path_qualified_dll_name = axutil_strcat(env, libdir, AXIS2_PATH_SEP_STR, dll_name, + NULL); + } + + axutil_dll_desc_set_name(dll_desc, env, path_qualified_dll_name); + AXIS2_FREE(env->allocator, path_qualified_dll_name); + + axutil_dll_desc_set_type(dll_desc, env, AXIS2_TRANSPORT_SENDER_DLL); + axutil_param_set_value(impl_info_param, env, dll_desc); + axutil_param_set_value_free(impl_info_param, env, axutil_dll_desc_free_void_arg); + axutil_class_loader_init(env); + transport_sender = axutil_class_loader_create_dll(env, impl_info_param); + axis2_transport_out_desc_add_param(transport_out, env, impl_info_param); + + if(!transport_sender) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Transport sender is NULL for transport %s, unable to " + "continue", name); + axis2_transport_out_desc_free(transport_out, env); + return status; + } + + status = axis2_transport_out_desc_set_sender(transport_out, env, transport_sender); + if(!status) + { + axis2_transport_out_desc_free(transport_out, env); + return status; + } + + /* Process Parameters */ + /* Processing service level paramters */ + qparamst = axutil_qname_create(env, AXIS2_PARAMETERST, NULL, NULL); + itr = axiom_element_get_children_with_qname(transport_element, env, qparamst, + transport_node); + axutil_qname_free(qparamst, env); + + if(itr) + { + status = axis2_desc_builder_process_params(conf_builder->desc_builder, env, itr, + axis2_transport_out_desc_param_container(transport_out, env), + axis2_conf_get_param_container(conf_builder->conf, env)); + } + if(!status) + { + axis2_transport_out_desc_free(transport_out, env); + return status; + } + /* process IN_FLOW */ + qinflowst = axutil_qname_create(env, AXIS2_IN_FLOW_START, NULL, NULL); + in_flow_element = axiom_element_get_first_child_with_qname(transport_element, env, + qinflowst, transport_node, &in_flow_node); + axutil_qname_free(qinflowst, env); + if(in_flow_element) + { + axis2_transport_out_desc_free(transport_out, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_IN_FLOW_NOT_ALLOWED_IN_TRS_OUT, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Transport in flow element is not allowed in the out path"); + return AXIS2_FAILURE; + } + qoutflowst = axutil_qname_create(env, AXIS2_OUT_FLOW_START, NULL, NULL); + out_flow_element = axiom_element_get_first_child_with_qname(transport_element, env, + qoutflowst, transport_node, &out_flow_node); + axutil_qname_free(qoutflowst, env); + if(out_flow_element) + { + axis2_flow_t *flow = NULL; + + flow = axis2_desc_builder_process_flow(conf_builder->desc_builder, env, + out_flow_element, axis2_conf_get_param_container(conf_builder->conf, env), + out_flow_node); + status = axis2_transport_out_desc_set_out_flow(transport_out, env, flow); + if(!status) + { + axis2_transport_out_desc_free(transport_out, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting the out flow failed on the trasnport out " + "description for the transport %s", name); + return status; + } + } + + /* process IN FAULT FLOW */ + qinfaultflowst = axutil_qname_create(env, AXIS2_IN_FAILTFLOW, NULL, NULL); + in_fault_flow_element = axiom_element_get_first_child_with_qname(transport_element, + env, qinfaultflowst, transport_node, &in_fault_flow_node); + axutil_qname_free(qinfaultflowst, env); + if(in_fault_flow_element) + { + axis2_transport_out_desc_free(transport_out, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_IN_FLOW_NOT_ALLOWED_IN_TRS_OUT, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "A soap fault has occured in the in flow while " + "processing transport senders. Unable to continue"); + return AXIS2_FAILURE; + } + + qoutfaultflowst = axutil_qname_create(env, AXIS2_OUT_FAILTFLOW, NULL, NULL); + out_fault_flow_element = axiom_element_get_first_child_with_qname(transport_element, + env, qoutfaultflowst, transport_node, &out_fault_flow_node); + axutil_qname_free(qoutfaultflowst, env); + if(out_fault_flow_element) + { + axis2_flow_t *flow = NULL; + + flow = axis2_desc_builder_process_flow(conf_builder->desc_builder, env, + out_fault_flow_element, + axis2_conf_get_param_container(conf_builder->conf, env), out_fault_flow_node); + status = axis2_transport_out_desc_set_fault_out_flow(transport_out, env, flow); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting the fault out flow into the transport out " + "failed"); + axis2_transport_out_desc_free(transport_out, env); + return status; + } + } + + /* adding to axis config */ + status = axis2_conf_add_transport_out(conf_builder->conf, env, transport_out, + transport_enum); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding transport out for %s into main configuration failed", name); + axis2_transport_out_desc_free(transport_out, env); + return status; + } + } + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_conf_builder_process_transport_senders"); + return AXIS2_SUCCESS; +} + +static axis2_status_t +axis2_conf_builder_process_transport_recvs( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * trs_recvs) +{ + axis2_status_t status = AXIS2_FAILURE; + axis2_conf_t *conf; + axis2_bool_t axis2_flag = AXIS2_FALSE; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_conf_builder_process_transport_recvs"); + AXIS2_PARAM_CHECK(env->error, trs_recvs, AXIS2_FAILURE); + + conf = conf_builder->conf; + axis2_flag = axis2_conf_get_axis2_flag(conf, env); + + while(axiom_children_qname_iterator_has_next(trs_recvs, env)) + { + axis2_transport_in_desc_t *transport_in = NULL; + axiom_node_t *transport_node = NULL; + axiom_element_t *transport_element = NULL; + axiom_attribute_t *trs_name = NULL; + axutil_qname_t *qattname = NULL; + + transport_node = (axiom_node_t *)axiom_children_qname_iterator_next(trs_recvs, env); + if(transport_node) + { + transport_element = axiom_node_get_data_element(transport_node, env); + if(!transport_element) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Retrieving data element from the transport node failed."); + return AXIS2_FAILURE; + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Transport node is NULL. Unable to continue"); + return AXIS2_FAILURE; + } + + /* getting transport Name */ + qattname = axutil_qname_create(env, AXIS2_ATTNAME, NULL, NULL); + trs_name = axiom_element_get_attribute(transport_element, env, qattname); + axutil_qname_free(qattname, env); + + if(trs_name) + { + axis2_char_t *name = NULL; + axiom_attribute_t *trs_class_name = NULL; + axiom_children_qname_iterator_t *itr = NULL; + axutil_qname_t *class_qname = NULL; + axutil_qname_t *qparamst = NULL; + axutil_qname_t *qinflowst = NULL; + axutil_qname_t *qoutflowst = NULL; + axutil_qname_t *qinfaultflowst = NULL; + axutil_qname_t *qoutfaultflowst = NULL; + axiom_element_t *in_flow_element = NULL; + axiom_node_t *in_flow_node = NULL; + axiom_element_t *out_flow_element = NULL; + axiom_node_t *out_flow_node = NULL; + axiom_element_t *in_fault_flow_element = NULL; + axiom_node_t *in_fault_flow_node = NULL; + axiom_element_t *out_fault_flow_element = NULL; + axiom_node_t *out_fault_flow_node = NULL; + AXIS2_TRANSPORT_ENUMS transport_enum = AXIS2_TRANSPORT_ENUM_HTTP; + /* AXIS2_TRANSPORT_ENUMS transport_enum = AXIS2_TRANSPORT_ENUM_HTTP + * set to avoid C4701 on Windows + */ + + name = axiom_attribute_get_value(trs_name, env); + if(name) + { + if(!axutil_strcmp(name, AXIS2_TRANSPORT_HTTP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_HTTP; + } + else if(!axutil_strcmp(name, AXIS2_TRANSPORT_SMTP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_SMTP; + } + else if(!axutil_strcmp(name, AXIS2_TRANSPORT_XMPP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_XMPP; + } + else if(!axutil_strcmp(name, AXIS2_TRANSPORT_TCP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_TCP; + } + else if(!axutil_strcmp(name, AXIS2_TRANSPORT_HTTPS)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_HTTPS; + } + else if(!axutil_strcmp(name, AXIS2_TRANSPORT_AMQP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_AMQP; + } + else if(!axutil_strcmp(name, AXIS2_TRANSPORT_UDP)) + { + transport_enum = AXIS2_TRANSPORT_ENUM_UDP; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Transport %s could not be recognized.", name); + return AXIS2_FAILURE; + } + + transport_in = axis2_transport_in_desc_create(env, transport_enum); + } + if(!transport_in) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating trasport_in_desc for transport %s failed", name); + return AXIS2_FAILURE; + } + + /* transport impl class */ + class_qname = axutil_qname_create(env, AXIS2_CLASSNAME, NULL, NULL); + trs_class_name = axiom_element_get_attribute(transport_element, env, class_qname); + axutil_qname_free(class_qname, env); + + if(trs_class_name) + { + axis2_char_t *class_name = NULL; + axis2_char_t *dll_name = NULL; + axutil_dll_desc_t *dll_desc = NULL; + axutil_param_t *impl_info_param = NULL; + axis2_transport_receiver_t *recv = NULL; + axis2_status_t stat = AXIS2_FAILURE; + axis2_char_t *path_qualified_dll_name = NULL; + axis2_char_t *repos_name = NULL; + axis2_char_t *temp_path = NULL; + axis2_char_t *temp_path2 = NULL; + axis2_char_t *temp_path3 = NULL; + + axutil_param_t *tnsparam; + axis2_char_t *libpath; + + class_name = axiom_attribute_get_value(trs_class_name, env); + impl_info_param = axutil_param_create(env, class_name, NULL); + dll_desc = axutil_dll_desc_create(env); + dll_name = axutil_dll_desc_create_platform_specific_dll_name(dll_desc, env, + class_name); + if(!axis2_flag) + { + /* Axis2 Configuration is not built using axis2.xml */ + repos_name = axis2_dep_engine_get_repos_path(axis2_desc_builder_get_dep_engine( + conf_builder->desc_builder, env), env); + temp_path = axutil_stracat(env, repos_name, AXIS2_PATH_SEP_STR); + temp_path2 = axutil_stracat(env, temp_path, AXIS2_LIB_FOLDER); + temp_path3 = axutil_stracat(env, temp_path2, AXIS2_PATH_SEP_STR); + path_qualified_dll_name = axutil_stracat(env, temp_path3, dll_name); + AXIS2_FREE(env->allocator, temp_path); + AXIS2_FREE(env->allocator, temp_path2); + AXIS2_FREE(env->allocator, temp_path3); + } + else + { + /* Axis2 Configuration is built using axis2.xml */ + tnsparam = axis2_conf_get_param(conf, env, AXIS2_LIB_DIR); + if(tnsparam) + { + libpath = (axis2_char_t *)axutil_param_get_value(tnsparam, env); + + if(libpath) + { + path_qualified_dll_name = axutil_strcat(env, libpath, + AXIS2_PATH_SEP_STR, dll_name, NULL); + } + } + } + + axutil_dll_desc_set_name(dll_desc, env, path_qualified_dll_name); + AXIS2_FREE(env->allocator, path_qualified_dll_name); + axutil_dll_desc_set_type(dll_desc, env, AXIS2_TRANSPORT_RECV_DLL); + + axutil_param_set_value(impl_info_param, env, dll_desc); + axutil_param_set_value_free(impl_info_param, env, axutil_dll_desc_free_void_arg); + axutil_class_loader_init(env); + recv = (axis2_transport_receiver_t *)axutil_class_loader_create_dll(env, + impl_info_param); + axis2_transport_in_desc_add_param(transport_in, env, impl_info_param); + + if(!recv) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Transport receiver loading failed for %s, " + "unable to continue", dll_name); + axis2_transport_in_desc_free(transport_in, env); + return status; + } + axis2_transport_receiver_set_is_application_client_side(recv, env, AXIS2_TRUE); + stat = axis2_transport_in_desc_set_recv(transport_in, env, recv); + + if(!stat) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting transport receiver for transport %s into " + "transport in description failed, unable to continue", name); + axis2_transport_in_desc_free(transport_in, env); + return stat; + } + + } + + /* process Parameters */ + /* processing Paramters */ + /* Processing service level paramters */ + qparamst = axutil_qname_create(env, AXIS2_PARAMETERST, NULL, NULL); + itr = axiom_element_get_children_with_qname(transport_element, env, qparamst, + transport_node); + axutil_qname_free(qparamst, env); + status = axis2_desc_builder_process_params(conf_builder->desc_builder, env, itr, + axis2_transport_in_desc_param_container(transport_in, env), + axis2_conf_get_param_container(conf_builder->conf, env)); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Processing transport receiver parameters failed. " + "Unable to continue"); + axis2_transport_in_desc_free(transport_in, env); + return status; + } + /* process OUT_FLOW */ + qoutflowst = axutil_qname_create(env, AXIS2_OUT_FLOW_START, NULL, NULL); + out_flow_element = axiom_element_get_first_child_with_qname(transport_element, env, + qoutflowst, transport_node, &out_flow_node); + axutil_qname_free(qoutflowst, env); + if(out_flow_element) + { + axis2_transport_in_desc_free(transport_in, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_OUT_FLOW_NOT_ALLOWED_IN_TRS_IN, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Out flow element not allowed in transport in path"); + return AXIS2_FAILURE; + } + + qinflowst = axutil_qname_create(env, AXIS2_IN_FLOW_START, NULL, NULL); + in_flow_element = axiom_element_get_first_child_with_qname(transport_element, env, + qinflowst, transport_node, &in_flow_node); + axutil_qname_free(qinflowst, env); + if(in_flow_element) + { + axis2_flow_t *flow = NULL; + + flow = axis2_desc_builder_process_flow(conf_builder->desc_builder, env, + in_flow_element, axis2_conf_get_param_container(conf_builder->conf, env), + in_flow_node); + status = axis2_transport_in_desc_set_in_flow(transport_in, env, flow); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting in flow into transport_in_desc of transport " + "%s failed", name); + axis2_transport_in_desc_free(transport_in, env); + return status; + } + } + + qinfaultflowst = axutil_qname_create(env, AXIS2_IN_FAILTFLOW, NULL, NULL); + in_fault_flow_element = axiom_element_get_first_child_with_qname(transport_element, + env, qinfaultflowst, transport_node, &in_fault_flow_node); + axutil_qname_free(qinfaultflowst, env); + if(in_fault_flow_element) + { + axis2_flow_t *flow = NULL; + + flow = axis2_desc_builder_process_flow(conf_builder->desc_builder, env, + in_fault_flow_element, axis2_conf_get_param_container(conf_builder->conf, env), + in_fault_flow_node); + status = axis2_transport_in_desc_set_fault_in_flow(transport_in, env, flow); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting in fault flow into transport_in_desc of " + "transport %s failed", name); + axis2_transport_in_desc_free(transport_in, env); + return status; + } + } + + qoutfaultflowst = axutil_qname_create(env, AXIS2_OUT_FAILTFLOW, NULL, NULL); + out_fault_flow_element = axiom_element_get_first_child_with_qname(transport_element, + env, qoutfaultflowst, transport_node, &out_fault_flow_node); + if(out_fault_flow_element) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_OUT_FLOW_NOT_ALLOWED_IN_TRS_IN, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Out flow element is not allowed in transport in path"); + return AXIS2_FAILURE; + } + + /* adding to axis config */ + status = axis2_conf_add_transport_in(conf_builder->conf, env, transport_in, + transport_enum); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding transport_in_desc for transport %s into main " + "configuration failed.", name); + axis2_transport_in_desc_free(transport_in, env); + return status; + } + + axutil_qname_free(qoutfaultflowst, env); + + } + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_conf_builder_process_transport_recvs"); + return AXIS2_SUCCESS; +} + +static axis2_status_t AXIS2_CALL +axis2_conf_builder_process_default_module_versions( + axis2_conf_builder_t * conf_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * module_versions) +{ + AXIS2_PARAM_CHECK(env->error, module_versions, AXIS2_FAILURE); + + while(axiom_children_qname_iterator_has_next(module_versions, env)) + { + axiom_element_t *om_element = NULL; + axis2_char_t *name = NULL; + axis2_char_t *default_version = NULL; + axutil_qname_t *attribute_qname = NULL; + + om_element = (axiom_element_t *)axiom_children_qname_iterator_next(module_versions, env); + if(!om_element) + { + continue; + } + attribute_qname = axutil_qname_create(env, AXIS2_ATTNAME, NULL, NULL); + if(!attribute_qname) + { + continue; + } + name = axiom_element_get_attribute_value(om_element, env, attribute_qname); + axutil_qname_free(attribute_qname, env); + attribute_qname = NULL; + if(!name) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Attribute value is NULL for " + "attribute %s", AXIS2_ATTNAME); + return AXIS2_FAILURE; + } + attribute_qname = axutil_qname_create(env, AXIS2_ATTRIBUTE_DEFAULT_VERSION, NULL, NULL); + if(!attribute_qname) + { + continue; + } + default_version = axiom_element_get_attribute_value(om_element, env, attribute_qname); + axutil_qname_free(attribute_qname, env); + attribute_qname = NULL; + if(!default_version) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Attribute value is NULL for " + "attribute %s", AXIS2_ATTRIBUTE_DEFAULT_VERSION); + return AXIS2_FAILURE; + } + axis2_conf_add_default_module_version(conf_builder->conf, env, name, default_version); + } + return AXIS2_SUCCESS; +} + diff --git a/src/core/deployment/conf_init.c b/src/core/deployment/conf_init.c new file mode 100644 index 0000000..6a622b4 --- /dev/null +++ b/src/core/deployment/conf_init.c @@ -0,0 +1,460 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DEFAULT_REPO_PATH "." + +axis2_status_t AXIS2_CALL +axis2_init_modules( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + +static axis2_status_t AXIS2_CALL +axis2_load_services( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + +axis2_status_t AXIS2_CALL +axis2_init_transports( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + +static axis2_conf_ctx_t *AXIS2_CALL +axis2_build_conf_ctx_with_dep_engine( + const axutil_env_t * env, + axis2_dep_engine_t *dep_engine, + axis2_char_t *is_server_side) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + axutil_property_t *property = NULL; + axis2_ctx_t *conf_ctx_base = NULL; + + conf = axis2_dep_engine_load(dep_engine, env); + if(!conf) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Loading deployment engine failed"); + axis2_dep_engine_free(dep_engine, env); + return NULL; + } + axis2_conf_set_dep_engine(conf, env, dep_engine); + + conf_ctx = axis2_conf_ctx_create(env, conf); + if(!conf_ctx) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating Axis2 configuration context failed."); + return NULL; + } + axis2_conf_ctx_set_root_dir(conf_ctx, env, axis2_dep_engine_get_repos_path(dep_engine, env)); + + conf_ctx_base = axis2_conf_ctx_get_base(conf_ctx, env); + property = axutil_property_create_with_args(env, 2, 0, 0, is_server_side); + axis2_ctx_set_property(conf_ctx_base, env, AXIS2_IS_SVR_SIDE, property); + + axis2_init_modules(env, conf_ctx); + axis2_init_transports(env, conf_ctx); + + if(!axutil_strcmp(is_server_side, AXIS2_VALUE_TRUE)) + { + axis2_load_services(env, conf_ctx); + } + + return conf_ctx; +} + +AXIS2_EXTERN axis2_conf_ctx_t *AXIS2_CALL +axis2_build_conf_ctx( + const axutil_env_t * env, + const axis2_char_t * repo_name) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_dep_engine_t *dep_engine = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_build_conf_ctx"); + dep_engine = axis2_dep_engine_create_with_repos_name(env, repo_name); + if(!dep_engine) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating deployment engine failed for repository %s", repo_name); + return NULL; + } + + conf_ctx = axis2_build_conf_ctx_with_dep_engine(env, dep_engine, AXIS2_VALUE_TRUE); + if(!conf_ctx) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Loading configuration context failed for repository %s.", repo_name); + return NULL; + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_build_conf_ctx"); + return conf_ctx; +} + +AXIS2_EXTERN axis2_conf_ctx_t *AXIS2_CALL +axis2_build_conf_ctx_with_file( + const axutil_env_t * env, + const axis2_char_t * file) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_dep_engine_t *dep_engine = NULL; + axis2_char_t *repos_path = NULL; + axis2_char_t *temp_path = NULL; + axis2_char_t *index = NULL; + axis2_char_t *xmlfile = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_build_conf_ctx_with_file"); + temp_path = axutil_strdup(env, file); + index = axutil_rindex(temp_path, AXIS2_PATH_SEP_CHAR); + if(!index) + {/* searching from windows specific path seperator */ + index = axutil_rindex(temp_path, '\\'); + } + + if(!index) + { + /** only the xml file name is provided. Assume the default repo path */ + repos_path = AXIS2_GETENV("AXIS2C_HOME"); + xmlfile = (axis2_char_t*)file; + }else + { + xmlfile = index+1; + temp_path[index-temp_path] = '\0'; + repos_path = temp_path; + } + + dep_engine = axis2_dep_engine_create_with_repos_name_and_svr_xml_file(env, repos_path, xmlfile); + if(!dep_engine) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating deployment engine for given Axis2 configuration file" + "(axis2.xml) failed"); + return NULL; + } + + conf_ctx = axis2_build_conf_ctx_with_dep_engine(env, dep_engine, AXIS2_VALUE_TRUE); + if(!conf_ctx) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Loading configuration context failed for given Axis2 configuration %s.", file); + return NULL; + } + AXIS2_FREE(env->allocator, temp_path); + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_build_conf_ctx_with_file"); + return conf_ctx; +} + +axis2_conf_ctx_t *AXIS2_CALL +axis2_build_client_conf_ctx( + const axutil_env_t * env, + const axis2_char_t * axis2_home) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_dep_engine_t *dep_engine = NULL; + axis2_conf_t *conf = NULL; + axutil_property_t *property = NULL; + axis2_ctx_t *conf_ctx_base = NULL; + + axis2_status_t status; + unsigned int len = 0; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_build_client_conf_ctx"); + /* Building conf using axis2.xml, in that case we check whether + * last 9 characters of the axis2_home equals to the "axis2.xml" + * else treat it as a directory + */ + + status = axutil_file_handler_access (axis2_home, AXIS2_R_OK); + if (status == AXIS2_SUCCESS) + { + len = (int)strlen (axis2_home); + /* We are sure that the difference lies within the int range */ + if ((len >= 9) && + !strcmp ((axis2_home + (len - 9)), "axis2.xml")) + { + dep_engine = axis2_dep_engine_create_with_axis2_xml (env, + axis2_home); + } + else + { + dep_engine = axis2_dep_engine_create(env); + } + } + else + { + AXIS2_LOG_WARNING (env->log, AXIS2_LOG_SI, + "Provided client repository path %s does not exsist or no "\ + "permission to read, therefore set axis2c home to DEFAULT_REPO_PATH.", + axis2_home); + axis2_home = DEFAULT_REPO_PATH; + dep_engine = axis2_dep_engine_create(env); + } + if (!dep_engine) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating deployment engine for client repository %s failed." , + axis2_home); + return NULL; + } + conf = axis2_dep_engine_load_client(dep_engine, env, axis2_home); + if (!conf) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Loading deployment engine failed for client repository %s", + axis2_home); + axis2_dep_engine_free(dep_engine, env); + return NULL; + } + axis2_conf_set_dep_engine(conf, env, dep_engine); + + conf_ctx = axis2_conf_ctx_create(env, conf); + if (!conf_ctx) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating Axis2 configuration context failed"); + return NULL; + } + axis2_conf_ctx_set_root_dir(conf_ctx, env, axis2_dep_engine_get_repos_path(dep_engine, env)); + + conf_ctx_base = axis2_conf_ctx_get_base(conf_ctx, env); + property = axutil_property_create_with_args(env, 2, 0, 0, AXIS2_VALUE_FALSE); + axis2_ctx_set_property(conf_ctx_base, env, AXIS2_IS_SVR_SIDE, property); + + axis2_init_modules(env, conf_ctx); + axis2_init_transports(env, conf_ctx); + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_build_client_conf_ctx"); + return conf_ctx; +} + +axis2_status_t AXIS2_CALL +axis2_init_modules( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + axis2_conf_t *conf = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_init_modules"); + AXIS2_PARAM_CHECK(env->error, conf_ctx, AXIS2_FAILURE); + + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + axutil_hash_t *module_map = axis2_conf_get_all_modules(conf, env); + if(module_map) + { + axutil_hash_index_t *hi = NULL; + void *module = NULL; + for(hi = axutil_hash_first(module_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &module); + if(module) + { + axis2_module_desc_t *mod_desc = (axis2_module_desc_t *)module; + if(mod_desc) + { + axis2_module_t *mod = axis2_module_desc_get_module(mod_desc, env); + if(mod) + { + axis2_module_init(mod, env, conf_ctx, mod_desc); + } + } + } + } + } + status = AXIS2_SUCCESS; + } + else + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, + "Retrieving Axis2 configuration from Axis2 configuration context " + "failed. Initializing modules failed"); + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_init_modules"); + return status; +} + +static axis2_status_t AXIS2_CALL +axis2_load_services( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + axis2_conf_t *conf = NULL; + axis2_status_t status = AXIS2_FAILURE; + axutil_hash_t *svc_map = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_load_services"); + AXIS2_PARAM_CHECK(env->error, conf_ctx, AXIS2_FAILURE); + + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(!conf) + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "Retrieving Axis2 configuration from Axis2 " + "configuration context failed, Loading services failed"); + return status; + } + + svc_map = axis2_conf_get_all_svcs_to_load(conf, env); + if(svc_map) + { + axutil_hash_index_t *hi = NULL; + void *svc = NULL; + for(hi = axutil_hash_first(svc_map, env); hi; hi = axutil_hash_next(env, hi)) + { + void *impl_class = NULL; + axutil_hash_t *ops_hash = NULL; + axis2_msg_recv_t *msg_recv = NULL; + axutil_hash_this(hi, NULL, NULL, &svc); + if(!svc) + { + continue; + } + impl_class = axis2_svc_get_impl_class(svc, env); + if(impl_class) + continue; + + ops_hash = axis2_svc_get_all_ops(svc, env); + if(ops_hash) + { + axutil_hash_index_t *op_hi = NULL; + void *op = NULL; + op_hi = axutil_hash_first(ops_hash, env); + if(op_hi) + { + axutil_hash_this(op_hi, NULL, NULL, &op); + if(op) + { + msg_recv = axis2_op_get_msg_recv(op, env); + if(msg_recv) + { + axis2_msg_recv_set_conf_ctx(msg_recv, env, conf_ctx); + axis2_msg_recv_load_and_init_svc(msg_recv, env, svc); + } + } + } + + } + /* + svc_desc = (axis2_svc_t *)svc; + if(!svc_desc) + { + continue; + } + + svc_name = axis2_svc_get_name(svc_desc, env); + impl_info_param = axis2_svc_get_param(svc_desc, env, AXIS2_SERVICE_CLASS); + + if(!impl_info_param) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_SVC, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid state of the service %s", svc_name); + return AXIS2_FAILURE; + } + axutil_class_loader_init(env); + impl_class = axutil_class_loader_create_dll(env, impl_info_param); + if(!impl_class) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service %s could not be loaded", svc_name); + return AXIS2_FAILURE; + } + + axis2_svc_set_impl_class(svc_desc, env, impl_class); + if(AXIS2_SVC_SKELETON_INIT_WITH_CONF((axis2_svc_skeleton_t *)impl_class, env, conf) + != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Initialization failed for the service %s. " + "Check the service's init_with_conf() function for errors and retry", svc_name); + } + */ + + } + } + status = AXIS2_SUCCESS; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_load_services"); + return status; +} + +axis2_status_t AXIS2_CALL +axis2_init_transports( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + axis2_conf_t *conf = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_init_transports"); + AXIS2_PARAM_CHECK(env->error, conf_ctx, AXIS2_FAILURE); + + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + axis2_transport_in_desc_t **transport_in_map = NULL; + axis2_transport_out_desc_t **transport_out_map = NULL; + int i = 0; + + transport_in_map = axis2_conf_get_all_in_transports(conf, env); + for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++) + { + if(transport_in_map[i]) + { + axis2_transport_receiver_t *listener = axis2_transport_in_desc_get_recv( + transport_in_map[i], env); + if(listener) + { + status = axis2_transport_receiver_init(listener, env, conf_ctx, + transport_in_map[i]); + } + } + } + + transport_out_map = axis2_conf_get_all_out_transports(conf, env); + for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++) + { + if(transport_out_map[i]) + { + axis2_transport_sender_t *sender = axis2_transport_out_desc_get_sender( + transport_out_map[i], env); + if(sender) + { + status = AXIS2_TRANSPORT_SENDER_INIT(sender, env, conf_ctx, + transport_out_map[i]); + } + } + } + status = AXIS2_SUCCESS; + } + else + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, + "Retrieving Axis2 configuration from Axis2 configuration context " + "failed. Initializing transports failed"); + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_init_transports"); + return status; +} + diff --git a/src/core/deployment/dep_engine.c b/src/core/deployment/dep_engine.c new file mode 100644 index 0000000..2c43380 --- /dev/null +++ b/src/core/deployment/dep_engine.c @@ -0,0 +1,1988 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_dep_engine.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct axis2_dep_engine +{ + axis2_arch_file_data_t *curr_file; + axis2_arch_reader_t *arch_reader; + + /** + * To keep a reference to engine configuration. + * This reference will pass to engine when it call start() + * function + */ + axis2_conf_t *conf; + axis2_char_t *axis2_repos; + axis2_bool_t hot_dep; /* to do hot deployment or not */ + axis2_bool_t hot_update; /* to do hot update or not */ + + /* Whether dep_engine built using axis2.xml */ + axis2_bool_t file_flag; + + /** + * This will store all the web services to deploy + */ + axutil_array_list_t *ws_to_deploy; + + /** + * This will store all the web services to undeploy + */ + axutil_array_list_t *ws_to_undeploy; + axis2_phases_info_t *phases_info; /* To store phases list in axis2.xml */ + + axis2_char_t *folder_name; + + /** + * Module directory, dep_engine holds in the module build scenario. + */ + axis2_char_t *module_dir; + + /** + * Services directory, services are avialble in services directory + */ + + axis2_char_t *svc_dir; + + /** + * Full path to the server xml file(axis2.xml) + */ + axis2_char_t *conf_name; + + /** + * To store the module specified in the server.xml(axis2.xml) at the + * document parsing time + */ + axutil_array_list_t *module_list; + axis2_repos_listener_t *repos_listener; /*Added this here to help with freeing + memory allocated for this - Samisa */ + axis2_conf_builder_t *conf_builder; + axis2_svc_builder_t *svc_builder; + axutil_array_list_t *desc_builders; + axutil_array_list_t *module_builders; + axutil_array_list_t *svc_builders; + axutil_array_list_t *svc_grp_builders; +}; + +static axis2_status_t +axis2_dep_engine_set_dep_features( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + +static axis2_status_t +axis2_dep_engine_check_client_home( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + const axis2_char_t * client_home); + +static axis2_status_t +axis2_dep_engine_engage_modules( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + +static axis2_status_t +axis2_dep_engine_validate_system_predefined_phases( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env); + +static axis2_status_t +axis2_dep_engine_add_new_svc( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_svc_grp_t * svc_metadata); + +static axis2_status_t +axis2_dep_engine_load_module_dll( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_module_desc_t * module_desc); + +static axis2_status_t +axis2_dep_engine_add_module_flow_handlers( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_flow_t * flow, + axutil_hash_t * handler_create_func_map); + +static axis2_status_t +axis2_dep_engine_add_new_module( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_module_desc_t * module_metadata); + +static axis2_char_t * +axis2_dep_engine_get_axis_svc_name( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_char_t * file_name); + +static axis2_status_t +axis2_dep_engine_set_svc_and_module_dir_path( + axis2_dep_engine_t *dep_engine, + const axutil_env_t *env); + +AXIS2_EXTERN axis2_dep_engine_t *AXIS2_CALL +axis2_dep_engine_create( + const axutil_env_t * env) +{ + axis2_dep_engine_t *dep_engine = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + dep_engine = (axis2_dep_engine_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_dep_engine_t)); + + if(!dep_engine) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + dep_engine = (axis2_dep_engine_t *)memset(dep_engine, 0, sizeof(axis2_dep_engine_t)); + dep_engine->curr_file = NULL; + dep_engine->arch_reader = NULL; + dep_engine->conf = NULL; + dep_engine->axis2_repos = NULL; + dep_engine->ws_to_deploy = NULL; + dep_engine->ws_to_undeploy = NULL; + dep_engine->phases_info = NULL; + dep_engine->folder_name = NULL; + dep_engine->module_dir = NULL; + dep_engine->svc_dir = NULL; + dep_engine->conf_name = NULL; + dep_engine->module_list = NULL; + dep_engine->repos_listener = NULL; + dep_engine->conf_builder = NULL; + dep_engine->svc_builder = NULL; + dep_engine->desc_builders = NULL; + dep_engine->module_builders = NULL; + dep_engine->svc_builders = NULL; + dep_engine->svc_grp_builders = NULL; + + dep_engine->ws_to_deploy = axutil_array_list_create(env, 0); + if(!(dep_engine->ws_to_deploy)) + { + axis2_dep_engine_free(dep_engine, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + + dep_engine->desc_builders = axutil_array_list_create(env, 0); + dep_engine->module_builders = axutil_array_list_create(env, 0); + dep_engine->svc_builders = axutil_array_list_create(env, 0); + dep_engine->svc_grp_builders = axutil_array_list_create(env, 0); + + dep_engine->phases_info = axis2_phases_info_create(env); + if(!(dep_engine->phases_info)) + { + axis2_dep_engine_free(dep_engine, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + + return dep_engine; +} + +AXIS2_EXTERN axis2_dep_engine_t *AXIS2_CALL +axis2_dep_engine_create_with_repos_name( + const axutil_env_t * env, + const axis2_char_t * repos_path) +{ + axis2_dep_engine_t *dep_engine = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + dep_engine = (axis2_dep_engine_t *)axis2_dep_engine_create_with_repos_name_and_svr_xml_file( + env, repos_path, AXIS2_SERVER_XML_FILE); + + if(!dep_engine) + { + return NULL; + } + + dep_engine->file_flag = AXIS2_FALSE; + + return dep_engine; +} + +AXIS2_EXTERN axis2_dep_engine_t *AXIS2_CALL +axis2_dep_engine_create_with_axis2_xml( + const axutil_env_t * env, + const axis2_char_t * axis2_xml) +{ + axis2_dep_engine_t *dep_engine = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + dep_engine = (axis2_dep_engine_t *)axis2_dep_engine_create_with_svr_xml_file(env, axis2_xml); + if(!dep_engine) + { + return NULL; + } + dep_engine->file_flag = AXIS2_TRUE; + + return dep_engine; +} + +AXIS2_EXTERN axis2_dep_engine_t *AXIS2_CALL +axis2_dep_engine_create_with_repos_name_and_svr_xml_file( + const axutil_env_t * env, + const axis2_char_t * repos_path, + const axis2_char_t * svr_xml_file) +{ + axis2_dep_engine_t *dep_engine = NULL; + axis2_char_t *conf_file_l = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, repos_path, NULL); + AXIS2_PARAM_CHECK(env->error, svr_xml_file, NULL); + if(!axutil_strcmp("", repos_path)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_REPO_CAN_NOT_BE_NULL, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Repository path cannot be empty"); + return NULL; + } + + dep_engine = (axis2_dep_engine_t *)axis2_dep_engine_create(env); + + if(!dep_engine) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + + status = axutil_file_handler_access(repos_path, AXIS2_F_OK); + if(AXIS2_SUCCESS != status) + { + axis2_dep_engine_free(dep_engine, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_REPOSITORY_NOT_EXIST, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Repository path %s does not exist", repos_path); + return NULL; + } + + dep_engine->folder_name = axutil_strdup(env, repos_path); + if(!dep_engine->folder_name) + { + axis2_dep_engine_free(dep_engine, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + + dep_engine->axis2_repos = axutil_strdup(env, repos_path); + if(!dep_engine->axis2_repos) + { + axis2_dep_engine_free(dep_engine, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + + conf_file_l = axutil_stracat(env, repos_path, AXIS2_PATH_SEP_STR); + dep_engine->conf_name = axutil_stracat(env, conf_file_l, svr_xml_file); + + AXIS2_FREE(env->allocator, conf_file_l); + if(!dep_engine->conf_name) + { + axis2_dep_engine_free(dep_engine, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_REPO_CAN_NOT_BE_NULL, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Axis2 Configuration file name cannot be NULL"); + return NULL; + } + + status = axutil_file_handler_access(dep_engine->conf_name, AXIS2_F_OK); + if(AXIS2_SUCCESS != status) + { + axis2_dep_engine_free(dep_engine, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CONFIG_NOT_FOUND, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Axis2 Configuration file name not found"); + return NULL; + } + + return dep_engine; +} + +AXIS2_EXTERN axis2_dep_engine_t *AXIS2_CALL +axis2_dep_engine_create_with_svr_xml_file( + const axutil_env_t * env, + const axis2_char_t * svr_xml_file) +{ + axis2_dep_engine_t *dep_engine = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, svr_xml_file, NULL); + + dep_engine = (axis2_dep_engine_t *)axis2_dep_engine_create(env); + + if(!dep_engine) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + + dep_engine->conf_name = axutil_strdup(env, (axis2_char_t *)svr_xml_file); + if(!dep_engine->conf_name) + { + axis2_dep_engine_free(dep_engine, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_REPO_CAN_NOT_BE_NULL, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Axis2 Configuration file name cannot be NULL"); + return NULL; + } + status = axutil_file_handler_access(dep_engine->conf_name, AXIS2_F_OK); + if(AXIS2_SUCCESS != status) + { + axis2_dep_engine_free(dep_engine, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CONFIG_NOT_FOUND, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Axis2 Configuration file name not found"); + return NULL; + } + + return dep_engine; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_dep_engine_free( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + if(!dep_engine) + { + return; + } + + if(dep_engine->curr_file) + { + axis2_arch_file_data_free(dep_engine->curr_file, env); + } + + if(dep_engine->phases_info) + { + axis2_phases_info_free(dep_engine->phases_info, env); + } + + if(dep_engine->conf_builder) + { + axis2_conf_builder_free(dep_engine->conf_builder, env); + } + + if(dep_engine->arch_reader) + { + axis2_arch_reader_free(dep_engine->arch_reader, env); + } + + if(dep_engine->svc_builder) + { + axis2_svc_builder_free(dep_engine->svc_builder, env); + } + + if(dep_engine->ws_to_deploy) + { + int i = 0; + int size = 0; + + size = axutil_array_list_size(dep_engine->ws_to_deploy, env); + for(i = 0; i < size; i++) + { + axis2_arch_file_data_t *file_data = NULL; + + file_data = (axis2_arch_file_data_t *)axutil_array_list_get(dep_engine->ws_to_deploy, + env, i); + + axis2_arch_file_data_free(file_data, env); + } + + axutil_array_list_free(dep_engine->ws_to_deploy, env); + dep_engine->ws_to_deploy = NULL; + } + + if(dep_engine->desc_builders) + { + int i = 0; + int size = 0; + + size = axutil_array_list_size(dep_engine->desc_builders, env); + for(i = 0; i < size; i++) + { + axis2_desc_builder_t *desc_builder = NULL; + + desc_builder = (axis2_desc_builder_t *)axutil_array_list_get(dep_engine->desc_builders, + env, i); + + axis2_desc_builder_free(desc_builder, env); + } + + axutil_array_list_free(dep_engine->desc_builders, env); + } + + if(dep_engine->module_builders) + { + int i = 0; + int size = 0; + + size = axutil_array_list_size(dep_engine->module_builders, env); + for(i = 0; i < size; i++) + { + axis2_module_builder_t *module_builder = NULL; + + module_builder = (axis2_module_builder_t *)axutil_array_list_get( + dep_engine->module_builders, env, i); + + axis2_module_builder_free(module_builder, env); + } + + axutil_array_list_free(dep_engine->module_builders, env); + } + + if(dep_engine->svc_builders) + { + int i = 0; + int size = 0; + + size = axutil_array_list_size(dep_engine->svc_builders, env); + for(i = 0; i < size; i++) + { + axis2_svc_builder_t *svc_builder = NULL; + + svc_builder = (axis2_svc_builder_t *)axutil_array_list_get(dep_engine->svc_builders, + env, i); + + axis2_svc_builder_free(svc_builder, env); + } + + axutil_array_list_free(dep_engine->svc_builders, env); + } + + if(dep_engine->svc_grp_builders) + { + int i = 0; + int size = 0; + + size = axutil_array_list_size(dep_engine->svc_grp_builders, env); + for(i = 0; i < size; i++) + { + axis2_svc_grp_builder_t *svc_grp_builder = NULL; + + svc_grp_builder = (axis2_svc_grp_builder_t *)axutil_array_list_get( + dep_engine->svc_grp_builders, env, i); + + axis2_svc_grp_builder_free(svc_grp_builder, env); + } + + axutil_array_list_free(dep_engine->svc_grp_builders, env); + } + + if(dep_engine->ws_to_undeploy) + { + int i = 0; + int size = 0; + + size = axutil_array_list_size(dep_engine->ws_to_undeploy, env); + + for(i = 0; i < size; i++) + { + axis2_arch_file_data_t *file_data = NULL; + + file_data = (axis2_arch_file_data_t *)axutil_array_list_get(dep_engine->ws_to_undeploy, + env, i); + + axis2_arch_file_data_free(file_data, env); + } + + axutil_array_list_free(dep_engine->ws_to_undeploy, env); + dep_engine->ws_to_undeploy = NULL; + } + + if(dep_engine->module_list) + { + int size = 0; + int i = 0; + + size = axutil_array_list_size(dep_engine->module_list, env); + + for(i = 0; i < size; i++) + { + axutil_qname_t *qname = NULL; + qname = axutil_array_list_get(dep_engine->module_list, env, i); + if(qname) + { + axutil_qname_free(qname, env); + } + } + + axutil_array_list_free(dep_engine->module_list, env); + } + + if(dep_engine->folder_name) + { + AXIS2_FREE(env->allocator, dep_engine->folder_name); + } + + if(dep_engine->conf_name) + { + AXIS2_FREE(env->allocator, dep_engine->conf_name); + } + + if(dep_engine->axis2_repos) + { + AXIS2_FREE(env->allocator, dep_engine->axis2_repos); + } + + if(dep_engine->repos_listener) + { + axis2_repos_listener_free(dep_engine->repos_listener, env); + } + + if(dep_engine) + { + AXIS2_FREE(env->allocator, dep_engine); + } + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_dep_engine_add_module( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axutil_qname_t * module_qname) +{ + axutil_qname_t *qname = NULL; + + AXIS2_PARAM_CHECK(env->error, module_qname, AXIS2_FAILURE); + + qname = axutil_qname_clone(module_qname, env); + if(!dep_engine->module_list) + { + dep_engine->module_list = axutil_array_list_create(env, 0); + if(!dep_engine->module_list) + { + axutil_qname_free(qname, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return AXIS2_FAILURE; + } + } + return axutil_array_list_add(dep_engine->module_list, env, qname); +} + +struct axis2_module_desc *AXIS2_CALL +axis2_dep_engine_get_module( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axutil_qname_t * module_qname) +{ + AXIS2_PARAM_CHECK(env->error, module_qname, NULL); + AXIS2_PARAM_CHECK(env->error, dep_engine, NULL); + + return axis2_conf_get_module(dep_engine->conf, env, module_qname); +} + +AXIS2_EXTERN struct axis2_arch_file_data *AXIS2_CALL +axis2_dep_engine_get_current_file_item( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, dep_engine, NULL); + return dep_engine->curr_file; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_dep_engine_add_ws_to_deploy( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_arch_file_data_t * file) +{ + AXIS2_PARAM_CHECK(env->error, file, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + return axutil_array_list_add(dep_engine->ws_to_deploy, env, file); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_dep_engine_add_ws_to_undeploy( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_ws_info_t * file) +{ + AXIS2_PARAM_CHECK(env->error, file, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + if(!(dep_engine->ws_to_undeploy)) + { + dep_engine->ws_to_undeploy = axutil_array_list_create(env, 0); + } + return axutil_array_list_add(dep_engine->ws_to_undeploy, env, file); +} + +AXIS2_EXTERN axis2_phases_info_t *AXIS2_CALL +axis2_dep_engine_get_phases_info( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, dep_engine, NULL); + return dep_engine->phases_info; +} + +AXIS2_EXTERN axis2_conf_t *AXIS2_CALL +axis2_dep_engine_get_axis_conf( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, dep_engine, NULL); + return dep_engine->conf; +} + +/** + * To set hot deployment and hot update + */ +static axis2_status_t +axis2_dep_engine_set_dep_features( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + axis2_char_t *value = NULL; + axutil_param_t *para_hot_dep = NULL; + axutil_param_t *para_hot_update = NULL; + + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + para_hot_dep = axis2_conf_get_param(dep_engine->conf, env, AXIS2_HOTDEPLOYMENT); + para_hot_update = axis2_conf_get_param(dep_engine->conf, env, AXIS2_HOTUPDATE); + + if(para_hot_dep) + { + value = (axis2_char_t *)axutil_param_get_value(para_hot_dep, env); + if(0 == axutil_strcasecmp(AXIS2_VALUE_FALSE, value)) + { + dep_engine->hot_dep = AXIS2_FALSE; + } + } + + if(para_hot_update) + { + value = (axis2_char_t *)axutil_param_get_value(para_hot_update, env); + if(0 == axutil_strcasecmp(AXIS2_VALUE_FALSE, value)) + { + dep_engine->hot_update = AXIS2_FALSE; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_conf_t *AXIS2_CALL +axis2_dep_engine_load( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + axutil_array_list_t *out_fault_phases = NULL; + + if(!dep_engine->conf_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_PATH_TO_CONFIG_CAN_NOT_BE_NULL, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Path to axis2 configuration file is NULL. Unable to continue"); + return NULL; + } + + dep_engine->conf = axis2_conf_create(env); + if(!dep_engine->conf) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Allocation to configuration failed"); + return NULL; + } + + /* Set a flag to mark that conf is created using axis2 xml. To find out that conf is build using + * axis2 xml , this flag can be used. + */ + axis2_conf_set_axis2_flag(dep_engine->conf, env, dep_engine->file_flag); + axis2_conf_set_axis2_xml(dep_engine->conf, env, dep_engine->conf_name); + + dep_engine->conf_builder = axis2_conf_builder_create_with_file_and_dep_engine_and_conf(env, + dep_engine->conf_name, dep_engine, dep_engine->conf); + if(!(dep_engine->conf_builder)) + { + axis2_conf_free(dep_engine->conf, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Configuration builder creation failed"); + dep_engine->conf = NULL; + } + + /* Populate the axis2 configuration from reading axis2.xml. + */ + status = axis2_conf_builder_populate_conf(dep_engine->conf_builder, env); + if(AXIS2_SUCCESS != status) + { + axis2_conf_free(dep_engine->conf, env); + dep_engine->conf = NULL; + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Populating Axis2 Configuration failed"); + return NULL; + } + + status = axis2_dep_engine_set_svc_and_module_dir_path(dep_engine, env); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting service and module directory paths failed"); + return NULL; + } + + status = axis2_dep_engine_set_dep_features(dep_engine, env); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting deployment features failed"); + return NULL; + } + + if(dep_engine->repos_listener) + { + axis2_repos_listener_free(dep_engine->repos_listener, env); + } + + dep_engine->repos_listener = axis2_repos_listener_create_with_folder_name_and_dep_engine(env, + dep_engine->folder_name, dep_engine); + if(!dep_engine->repos_listener) + { + axis2_conf_free(dep_engine->conf, env); + dep_engine->conf = NULL; + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "dep_engine repos listener creation failed, folder name is %s", dep_engine->folder_name); + return NULL; + } + + axis2_conf_set_repo(dep_engine->conf, env, dep_engine->axis2_repos); + axis2_core_utils_calculate_default_module_version(env, axis2_conf_get_all_modules( + dep_engine->conf, env), dep_engine->conf); + + status = axis2_dep_engine_validate_system_predefined_phases(dep_engine, env); + if(AXIS2_SUCCESS != status) + { + axis2_repos_listener_free(dep_engine->repos_listener, env); + axis2_conf_free(dep_engine->conf, env); + dep_engine->conf = NULL; + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MODULE_VALIDATION_FAILED, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Validating system predefined phases failed"); + return NULL; + } + + status = axis2_conf_set_phases_info(dep_engine->conf, env, dep_engine->phases_info); + if(AXIS2_SUCCESS != status) + { + axis2_repos_listener_free(dep_engine->repos_listener, env); + axis2_conf_free(dep_engine->conf, env); + dep_engine->conf = NULL; + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting phases info into Axis2 Configuration failed"); + return NULL; + } + + out_fault_phases = axis2_phases_info_get_op_out_faultphases(dep_engine->phases_info, env); + if(out_fault_phases) + { + status = axis2_conf_set_out_fault_phases(dep_engine->conf, env, out_fault_phases); + } + + if(AXIS2_SUCCESS != status) + { + axis2_repos_listener_free(dep_engine->repos_listener, env); + axis2_conf_free(dep_engine->conf, env); + dep_engine->conf = NULL; + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting out fault phases into Axis2 Configuratin failed"); + return NULL; + } + + status = axis2_dep_engine_engage_modules(dep_engine, env); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "dep engine failed to engaged_modules"); + axis2_conf_free(dep_engine->conf, env); + dep_engine->conf = NULL; + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MODULE_VALIDATION_FAILED, AXIS2_FAILURE); + return NULL; + } + + return dep_engine->conf; +} + +AXIS2_EXTERN axis2_conf_t *AXIS2_CALL +axis2_dep_engine_load_client( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + const axis2_char_t * client_home) +{ + axis2_bool_t is_repos_exist = AXIS2_FALSE; + axis2_status_t status = AXIS2_FAILURE; + axis2_bool_t flag = AXIS2_FALSE; + + AXIS2_PARAM_CHECK(env->error, client_home, NULL); + + flag = axis2_dep_engine_get_file_flag(dep_engine, env); + + if(!flag) + { + dep_engine->axis2_repos = axutil_strdup(env, client_home); + if(!dep_engine->axis2_repos) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + + if(client_home && axutil_strcmp("", client_home)) + { + status = axis2_dep_engine_check_client_home(dep_engine, env, client_home); + if(AXIS2_SUCCESS == status) + { + is_repos_exist = AXIS2_TRUE; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "axis2.xml is not available in client repo %s ", client_home); + + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CONFIG_NOT_FOUND, AXIS2_FAILURE); + + return NULL; + } + } + else + { + dep_engine->conf_name = axutil_strdup(env, AXIS2_CONFIGURATION_RESOURCE); + + if(!dep_engine->conf_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_REPO_CAN_NOT_BE_NULL, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Axis2 Configuration file name cannot be NULL"); + return NULL; + } + } + } + + else + { + is_repos_exist = AXIS2_TRUE; + } + + dep_engine->conf = axis2_conf_create(env); + if(!dep_engine->conf) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Allocation for Axis2 Configuration failed"); + return NULL; + } + dep_engine->conf_builder = axis2_conf_builder_create_with_file_and_dep_engine_and_conf(env, + dep_engine->conf_name, dep_engine, dep_engine->conf); + + if(!(dep_engine->conf_builder)) + { + axis2_conf_free(dep_engine->conf, env); + dep_engine->conf = NULL; + } + + /** + Very important: Only after populating we will be able to access + parameters in axis2 xml. + */ + + axis2_conf_set_axis2_flag(dep_engine->conf, env, dep_engine->file_flag); + axis2_conf_set_axis2_xml(dep_engine->conf, env, dep_engine->conf_name); + + status = axis2_conf_builder_populate_conf(dep_engine->conf_builder, env); + if(AXIS2_SUCCESS != status) + { + axis2_conf_free(dep_engine->conf, env); + dep_engine->conf = NULL; + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Populating Axis2 Configuration failed"); + return NULL; + } + + status = axis2_dep_engine_set_svc_and_module_dir_path(dep_engine, env); + if(AXIS2_SUCCESS != status) + { + axis2_conf_free(dep_engine->conf, env); + dep_engine->conf = NULL; + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting service and module paths failed"); + return NULL; + } + + if(is_repos_exist) + { + dep_engine->hot_dep = AXIS2_FALSE; + dep_engine->hot_update = AXIS2_FALSE; + if(dep_engine->repos_listener) + { + axis2_repos_listener_free(dep_engine->repos_listener, env); + } + + dep_engine->repos_listener = axis2_repos_listener_create_with_folder_name_and_dep_engine( + env, dep_engine->folder_name, dep_engine); + } + + axis2_conf_set_repo(dep_engine->conf, env, dep_engine->axis2_repos); + axis2_core_utils_calculate_default_module_version(env, axis2_conf_get_all_modules( + dep_engine->conf, env), dep_engine->conf); + + axis2_conf_set_phases_info(dep_engine->conf, env, dep_engine->phases_info); + status = axis2_dep_engine_engage_modules(dep_engine, env); + if(AXIS2_SUCCESS != status) + { + axis2_repos_listener_free(dep_engine->repos_listener, env); + axis2_conf_free(dep_engine->conf, env); + dep_engine->conf = NULL; + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MODULE_VALIDATION_FAILED, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Module engage failed for deployment engine"); + return NULL; + } + + return dep_engine->conf; +} + +static axis2_status_t +axis2_dep_engine_check_client_home( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + const axis2_char_t * client_home) +{ + axis2_char_t *path_l = NULL; + axis2_status_t status = AXIS2_FAILURE; + + dep_engine->folder_name = axutil_strdup(env, client_home); + if(!dep_engine->folder_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return AXIS2_FAILURE; + } + path_l = axutil_stracat(env, client_home, AXIS2_PATH_SEP_STR); + dep_engine->conf_name = axutil_stracat(env, path_l, AXIS2_SERVER_XML_FILE); + AXIS2_FREE(env->allocator, path_l); + + if(!dep_engine->conf_name) + { + dep_engine->conf_name = axutil_strdup(env, AXIS2_CONFIGURATION_RESOURCE); + if(!dep_engine->conf_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CONFIG_NOT_FOUND, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Axis2 Configuration file name cannot be NULL"); + return AXIS2_FAILURE; + } + } + + status = axutil_file_handler_access(dep_engine->conf_name, AXIS2_F_OK); + if(AXIS2_SUCCESS != status) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CONFIG_NOT_FOUND, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Axis2 Configuration file name not found"); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +static axis2_status_t +axis2_dep_engine_engage_modules( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + int size = 0; + int i = 0; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + if(!dep_engine->module_list) + { + /* There are no modules */ + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "No modules configured"); + return AXIS2_SUCCESS; + } + + size = axutil_array_list_size(dep_engine->module_list, env); + + for(i = 0; i < size; i++) + { + axutil_qname_t *qname = NULL; + qname = (axutil_qname_t *)axutil_array_list_get(dep_engine->module_list, env, i); + if(qname && dep_engine->conf) + { + status = axis2_conf_engage_module(dep_engine->conf, env, qname); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Engaging module %s to Axis2 Configuration failed", axutil_qname_get_localpart( + qname, env)); + + return status; + } + } + } + + return AXIS2_SUCCESS; +} + +static axis2_status_t +axis2_dep_engine_validate_system_predefined_phases( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + axutil_array_list_t *in_phases = NULL; + axis2_char_t *phase0 = NULL; + axis2_char_t *phase1 = NULL; + axis2_char_t *phase2 = NULL; + axis2_char_t *phase3 = NULL; + + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + in_phases = axis2_phases_info_get_in_phases(dep_engine->phases_info, env); + if(in_phases) + { + phase0 = (axis2_char_t *)axutil_array_list_get(in_phases, env, 0); + phase1 = (axis2_char_t *)axutil_array_list_get(in_phases, env, 1); + phase2 = (axis2_char_t *)axutil_array_list_get(in_phases, env, 2); + phase3 = (axis2_char_t *)axutil_array_list_get(in_phases, env, 3); + } + + if((phase0 && 0 != axutil_strcmp(phase0, AXIS2_PHASE_TRANSPORT_IN)) || (phase1 && 0 + != axutil_strcmp(phase1, AXIS2_PHASE_PRE_DISPATCH)) || (phase2 && 0 != axutil_strcmp( + phase2, AXIS2_PHASE_DISPATCH)) || (phase3 && 0 != axutil_strcmp(phase3, + AXIS2_PHASE_POST_DISPATCH))) + { + AXIS2_ERROR_SET(env->error, AXI2_ERROR_INVALID_PHASE, AXIS2_FAILURE); + return AXIS2_SUCCESS; + } + + return AXIS2_SUCCESS; +} + +/* For each searvices belonging to the service group passed as parameter, + * 1) Modules defined to be engaged to passed service group are engaged. + * 2) Modules defined to be engaged to service are engaged. + * + * Then for each service operation modules defined to be engaged to that operation are engaged. + */ +static axis2_status_t +axis2_dep_engine_add_new_svc( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_svc_grp_t * svc_metadata) +{ + axutil_array_list_t *svcs = NULL; + int sizei = 0; + int i = 0; + + AXIS2_PARAM_CHECK(env->error, svc_metadata, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + svcs = axis2_arch_file_data_get_deployable_svcs(dep_engine->curr_file, env); + if(svcs) + { + sizei = axutil_array_list_size(svcs, env); + } + + for(i = 0; i < sizei; i++) + { + axis2_svc_t *svc = NULL; + axutil_file_t *file = NULL; + axutil_array_list_t *grp_modules = NULL; + axutil_array_list_t *list = NULL; + int sizej = 0; + int j = 0; + axutil_hash_t *ops = NULL; + axutil_hash_index_t *index_i = NULL; + axis2_char_t *file_name = NULL; + + svc = (axis2_svc_t *)axutil_array_list_get(svcs, env, i); + + file = axis2_arch_file_data_get_file(dep_engine->curr_file, env); + file_name = axutil_file_get_name(file, env); + axis2_svc_set_file_name(svc, env, file_name); + + /* Modules from service group */ + grp_modules = axis2_svc_grp_get_all_module_qnames(svc_metadata, env); + if(grp_modules) + { + sizej = axutil_array_list_size(grp_modules, env); + } + for(j = 0; j < sizej; j++) + { + axis2_module_desc_t *module_desc = NULL; + axutil_qname_t *qmodulename = NULL; + + qmodulename = (axutil_qname_t *)axutil_array_list_get(grp_modules, env, j); + module_desc = axis2_conf_get_module(dep_engine->conf, env, qmodulename); + if(module_desc) + { + axis2_svc_engage_module(svc, env, module_desc, dep_engine->conf); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid module reference taken from conf"); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MODUELE_REF, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + /* Modules from service */ + list = axis2_svc_get_all_module_qnames(svc, env); + sizej = axutil_array_list_size(list, env); + for(j = 0; j < sizej; j++) + { + axis2_module_desc_t *module_desc = NULL; + axutil_qname_t *qmodulename = NULL; + + qmodulename = (axutil_qname_t *)axutil_array_list_get(list, env, j); + module_desc = axis2_conf_get_module(dep_engine->conf, env, qmodulename); + if(module_desc) + { + axis2_status_t status = AXIS2_FAILURE; + status = axis2_svc_engage_module(svc, env, module_desc, dep_engine->conf); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Engaging module %s to service %s failed", axutil_qname_get_localpart( + qmodulename, env), file_name); + return status; + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid module reference taken from conf"); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MODUELE_REF, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + ops = axis2_svc_get_all_ops(svc, env); + for(index_i = axutil_hash_first(ops, env); index_i; index_i + = axutil_hash_next(env, index_i)) + { + void *v = NULL; + axis2_op_t *op_desc = NULL; + axutil_array_list_t *modules = NULL; + int sizek = 0; + int k = 0; + + axutil_hash_this(index_i, NULL, NULL, &v); + op_desc = (axis2_op_t *)v; + + modules = axis2_op_get_all_module_qnames(op_desc, env); + if(modules) + { + sizek = axutil_array_list_size(modules, env); + } + for(k = 0; k < sizek; k++) + { + axutil_qname_t *module_qname = NULL; + axis2_module_desc_t *module = NULL; + + module_qname = (axutil_qname_t *)axutil_array_list_get(modules, env, k); + module = axis2_conf_get_module(dep_engine->conf, env, module_qname); + + if(module) + { + axis2_op_engage_module(op_desc, env, module, dep_engine->conf); + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MODUELE_REF_BY_OP, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Module %s is not added to the Axis2 Configuration", + axutil_qname_get_localpart(module_qname, env)); + + return AXIS2_FAILURE; + } + } + } + + axis2_svc_grp_add_svc(svc_metadata, env, svc); + } + + return axis2_conf_add_svc_grp(dep_engine->conf, env, svc_metadata); +} + +/* Here we will load the actual module implementation dll using the class loader and store it in + * module description. + */ +static axis2_status_t +axis2_dep_engine_load_module_dll( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_module_desc_t * module_desc) +{ + axis2_char_t *read_in_dll = NULL; + axis2_module_t *module = NULL; + axutil_dll_desc_t *dll_desc = NULL; + axutil_param_t *impl_info_param = NULL; + axutil_file_t *module_folder = NULL; + AXIS2_TIME_T timestamp = 0; + axis2_char_t *module_folder_path = NULL; + axis2_char_t *temp_path = NULL; + axis2_char_t *dll_path = NULL; + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *dll_name = NULL; + + AXIS2_PARAM_CHECK(env->error, module_desc, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + read_in_dll = axis2_arch_file_data_get_module_dll_name(dep_engine->curr_file, env); + dll_desc = axutil_dll_desc_create(env); + dll_name = axutil_dll_desc_create_platform_specific_dll_name(dll_desc, env, read_in_dll); + + module_folder = axis2_arch_file_data_get_file(dep_engine->curr_file, env); + timestamp = axutil_file_get_timestamp(module_folder, env); + axutil_dll_desc_set_timestamp(dll_desc, env, timestamp); + module_folder_path = axutil_file_get_path(module_folder, env); + temp_path = axutil_stracat(env, module_folder_path, AXIS2_PATH_SEP_STR); + dll_path = axutil_stracat(env, temp_path, dll_name); + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "axis2_dep_engine_load_module_dll: DLL path is : %s", + dll_path); + status = axutil_dll_desc_set_name(dll_desc, env, dll_path); + if(AXIS2_SUCCESS != status) + { + axutil_dll_desc_free(dll_desc, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting dll path %s to the dll description failed", dll_path); + + return AXIS2_FAILURE; + } + + /* Free all temp vars */ + AXIS2_FREE(env->allocator, temp_path); + temp_path = NULL; + AXIS2_FREE(env->allocator, dll_path); + dll_path = NULL; + + axutil_dll_desc_set_type(dll_desc, env, AXIS2_MODULE_DLL); + impl_info_param = axutil_param_create(env, read_in_dll, NULL); + axutil_param_set_value(impl_info_param, env, dll_desc); + axutil_param_set_value_free(impl_info_param, env, axutil_dll_desc_free_void_arg); + axutil_class_loader_init(env); + module = (axis2_module_t *)axutil_class_loader_create_dll(env, impl_info_param); + + /* We cannot free the created impl_info_param here because by freeing + * so, it will free dll_desc which in turn unload the module. So we + * add this as a param to module_desc + */ + axis2_module_desc_add_param(module_desc, env, impl_info_param); + + return axis2_module_desc_set_module(module_desc, env, module); +} + +/* For each handler description of the module flow take the corresponding handler create function + * from handler_create_func_map and create the handler instance for the handler description. + */ +static axis2_status_t +axis2_dep_engine_add_module_flow_handlers( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_flow_t * flow, + axutil_hash_t * handler_create_func_map) +{ + int count = 0; + int j = 0; + + AXIS2_PARAM_CHECK(env->error, flow, AXIS2_FAILURE); + + count = axis2_flow_get_handler_count(flow, env); + + for(j = 0; j < count; j++) + { + axis2_handler_desc_t *handlermd = NULL; + axis2_handler_t *handler = NULL; + const axutil_string_t *handler_name = NULL; + AXIS2_HANDLER_CREATE_FUNC handler_create_func = NULL; + + handlermd = axis2_flow_get_handler(flow, env, j); + handler_name = axis2_handler_desc_get_name(handlermd, env); + handler_create_func = axutil_hash_get(handler_create_func_map, axutil_string_get_buffer( + handler_name, env), AXIS2_HASH_KEY_STRING); + + handler = handler_create_func(env, handler_name); + axis2_handler_init(handler, env, handlermd); + axis2_handler_desc_set_handler(handlermd, env, handler); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void *AXIS2_CALL +axis2_dep_engine_get_handler_dll( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_char_t * class_name) +{ + axutil_dll_desc_t *dll_desc = NULL; + axutil_param_t *impl_info_param = NULL; + axis2_handler_t *handler = NULL; + axis2_char_t *dll_name = NULL; + + AXIS2_PARAM_CHECK(env->error, class_name, NULL); + AXIS2_PARAM_CHECK(env->error, dep_engine, NULL); + + dll_desc = axutil_dll_desc_create(env); + dll_name = axutil_dll_desc_create_platform_specific_dll_name(dll_desc, env, class_name); + axutil_dll_desc_set_name(dll_desc, env, dll_name); + axutil_dll_desc_set_type(dll_desc, env, AXIS2_HANDLER_DLL); + axutil_class_loader_init(env); + impl_info_param = axutil_param_create(env, NULL, NULL); + axutil_param_set_value(impl_info_param, env, dll_desc); + handler = (axis2_handler_t *)axutil_class_loader_create_dll(env, impl_info_param); + + return handler; +} + +/* Caller has module description filled with the information in module.xml by the time this + * function is called. Now it will load the actual module implementation and fill the module + * flows with the actual handler instances. Finally module description will be added into the + * configuration module list. + */ +static axis2_status_t +axis2_dep_engine_add_new_module( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_module_desc_t * module_metadata) +{ + axis2_flow_t *in_flow = NULL; + axis2_flow_t *out_flow = NULL; + axis2_flow_t *in_fault_flow = NULL; + axis2_flow_t *out_fault_flow = NULL; + axis2_module_t *module = NULL; + axis2_status_t status = AXIS2_FAILURE; + const axutil_qname_t *module_qname = NULL; + axis2_char_t *module_name = NULL; + + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + module_qname = axis2_module_desc_get_qname(module_metadata, env); + module_name = axutil_qname_get_localpart(module_qname, env); + status = axis2_dep_engine_load_module_dll(dep_engine, env, module_metadata); + + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Loading module description %s failed", module_name); + + return status; + } + + module = axis2_module_desc_get_module(module_metadata, env); + if(!module) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Retrieving module from module description %s failed", module_name); + + return AXIS2_FAILURE; + } + + /* Module implementor will provide functions for creating his handlers and by calling this + * function these function pointers will be stored in a hash map in the module. + */ + status = axis2_module_fill_handler_create_func_map(module, env); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Filling handler create function for module map %s failed", module_name); + return status; + } + + in_flow = axis2_module_desc_get_in_flow(module_metadata, env); + if(in_flow) + { + axis2_dep_engine_add_module_flow_handlers(dep_engine, env, in_flow, + module->handler_create_func_map); + } + + out_flow = axis2_module_desc_get_out_flow(module_metadata, env); + if(out_flow) + { + axis2_dep_engine_add_module_flow_handlers(dep_engine, env, out_flow, + module->handler_create_func_map); + } + + in_fault_flow = axis2_module_desc_get_fault_in_flow(module_metadata, env); + if(in_fault_flow) + { + axis2_dep_engine_add_module_flow_handlers(dep_engine, env, in_fault_flow, + module->handler_create_func_map); + } + + out_fault_flow = axis2_module_desc_get_fault_out_flow(module_metadata, env); + if(out_fault_flow) + { + axis2_dep_engine_add_module_flow_handlers(dep_engine, env, out_fault_flow, + module->handler_create_func_map); + } + + /* Add the module description into the axis2 configuration. Axis2 configuration will keep these + * handlers in a hash_map called all_modules. + */ + axis2_conf_add_module(dep_engine->conf, env, module_metadata); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_dep_engine_do_deploy( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + int size = 0; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + size = axutil_array_list_size(dep_engine->ws_to_deploy, env); + + if(size > 0) + { + int i = 0; + for(i = 0; i < size; i++) + { + int type = 0; + axis2_svc_grp_t *svc_grp = NULL; + axis2_char_t *file_name = NULL; + axis2_module_desc_t *meta_data = NULL; + + dep_engine->curr_file = (axis2_arch_file_data_t *)axutil_array_list_get( + dep_engine->ws_to_deploy, env, i); + + type = axis2_arch_file_data_get_type(dep_engine->curr_file, env); + switch(type) + { + case AXIS2_SVC: + { + if(dep_engine->arch_reader) + { + axis2_arch_reader_free(dep_engine->arch_reader, env); + dep_engine->arch_reader = NULL; + } + + dep_engine->arch_reader = axis2_arch_reader_create(env); + svc_grp = axis2_svc_grp_create_with_conf(env, dep_engine->conf); + file_name = axis2_arch_file_data_get_name(dep_engine->curr_file, env); + status = axis2_arch_reader_process_svc_grp(dep_engine->arch_reader, env, + file_name, dep_engine, svc_grp); + + if(AXIS2_SUCCESS != status) + { + axis2_arch_reader_free(dep_engine->arch_reader, env); + dep_engine->arch_reader = NULL; + dep_engine->curr_file = NULL; + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_SVC, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Processing service group %s failed", file_name); + + return status; + } + + status = axis2_dep_engine_add_new_svc(dep_engine, env, svc_grp); + if(AXIS2_SUCCESS != status) + { + axis2_arch_reader_free(dep_engine->arch_reader, env); + dep_engine->arch_reader = NULL; + dep_engine->curr_file = NULL; + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_SVC, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding new service %s to the deployment engine failed", file_name); + + return status; + } + + dep_engine->curr_file = NULL; + break; + } + + case AXIS2_MODULE: + { + if(dep_engine->arch_reader) + { + axis2_arch_reader_free(dep_engine->arch_reader, env); + dep_engine->arch_reader = NULL; + } + dep_engine->arch_reader = axis2_arch_reader_create(env); + meta_data = axis2_module_desc_create(env); + file_name = axis2_arch_file_data_get_name(dep_engine->curr_file, env); + status = axis2_arch_reader_read_module_arch(env, file_name, dep_engine, + meta_data); + if(AXIS2_SUCCESS != status) + { + axis2_arch_reader_free(dep_engine->arch_reader, env); + dep_engine->arch_reader = NULL; + dep_engine->curr_file = NULL; + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MODULE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Reading module archive for file %s failed", file_name); + + return AXIS2_FAILURE; + } + + status = axis2_dep_engine_add_new_module(dep_engine, env, meta_data); + if(AXIS2_SUCCESS != status) + { + axis2_arch_reader_free(dep_engine->arch_reader, env); + dep_engine->arch_reader = NULL; + dep_engine->curr_file = NULL; + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MODULE, AXIS2_FAILURE); + + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding new module %s to the deployment engine failed", file_name); + + return AXIS2_FAILURE; + } + + dep_engine->curr_file = NULL; + break; + } + }; + + axis2_arch_reader_free(dep_engine->arch_reader, env); + dep_engine->arch_reader = NULL; + dep_engine->curr_file = NULL; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_dep_engine_undeploy( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + int size = 0; + axis2_char_t *svc_name = NULL; + + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + size = axutil_array_list_size(dep_engine->ws_to_undeploy, env); + + if(size > 0) + { + int i = 0; + for(i = 0; i < size; i++) + { + int type = 0; + axis2_ws_info_t *ws_info = NULL; + axutil_hash_t *faulty_svcs = NULL; + + ws_info = (axis2_ws_info_t *)axutil_array_list_get(dep_engine->ws_to_undeploy, env, i); + type = axis2_ws_info_get_type(ws_info, env); + if(type == AXIS2_SVC) + { + axis2_char_t *file_name = NULL; + + file_name = axis2_ws_info_get_file_name(ws_info, env); + svc_name = axis2_dep_engine_get_axis_svc_name(dep_engine, env, file_name); + + axis2_conf_remove_svc(dep_engine->conf, env, svc_name); + } + + faulty_svcs = axis2_conf_get_all_faulty_svcs(dep_engine->conf, env); + axutil_hash_set(faulty_svcs, svc_name, AXIS2_HASH_KEY_STRING, NULL); + } + + } + + axutil_array_list_free(dep_engine->ws_to_undeploy, env); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_dep_engine_is_hot_update( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + return dep_engine->hot_update; +} + +static axis2_char_t * +axis2_dep_engine_get_axis_svc_name( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_char_t * file_name) +{ + axis2_char_t name_sep = '.'; + axis2_char_t *temp_name = NULL; + axis2_char_t *ptr = NULL; + axis2_char_t *file_name_l = NULL; + axis2_char_t *svc_name = NULL; + int len = 0; + + file_name_l = axutil_strdup(env, file_name); + ptr = AXIS2_STRRCHR(file_name_l, AXIS2_PATH_SEP_CHAR); + + temp_name = ptr + 1; + ptr = AXIS2_STRRCHR(temp_name, name_sep); + ptr[0] = '\0'; + len = (int)strlen(temp_name); + /* We are sure that the difference lies within the int range */ + svc_name = AXIS2_MALLOC(env->allocator, len + 1); + sscanf(temp_name, "%s", svc_name); + AXIS2_FREE(env->allocator, file_name_l); + + return svc_name; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_dep_engine_set_phases_info( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_phases_info_t * phases_info) +{ + AXIS2_PARAM_CHECK(env->error, phases_info, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + dep_engine->phases_info = phases_info; + return AXIS2_SUCCESS; +} + +/** + * This method is used to fill a axis2 service instance using services.xml , + * first it should create an axis service instance and then fill that using + * given service.xml and load all the required class and build the chains , + * finally add the service context to engine context and axis2 service into + * Engine Configuration. + */ +AXIS2_EXTERN axis2_svc_t *AXIS2_CALL +axis2_dep_engine_build_svc( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_svc_t * svc, + axis2_char_t * file_name) +{ + axiom_node_t *node = NULL; + + AXIS2_PARAM_CHECK(env->error, file_name, NULL); + AXIS2_PARAM_CHECK(env->error, dep_engine, NULL); + + dep_engine->curr_file = axis2_arch_file_data_create_with_type_and_name(env, AXIS2_SVC, ""); + + dep_engine->svc_builder = axis2_svc_builder_create_with_file_and_dep_engine_and_svc(env, + file_name, dep_engine, svc); + + node = axis2_desc_builder_build_om(axis2_svc_builder_get_desc_builder(dep_engine->svc_builder, + env), env); + + axis2_svc_builder_populate_svc(dep_engine->svc_builder, env, node); + + return svc; +} + +/** + * This function can be used to build Module Description for a given module + * archieve file. + */ +AXIS2_EXTERN axis2_module_desc_t *AXIS2_CALL +axis2_dep_engine_build_module( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axutil_file_t * module_archive, + axis2_conf_t * conf) +{ + axis2_module_desc_t *module_desc = NULL; + axis2_module_t *module = NULL; + axis2_phases_info_t *phases_info = NULL; + axis2_arch_reader_t *arch_reader = NULL; + axis2_flow_t *in_flow = NULL; + axis2_flow_t *out_flow = NULL; + axis2_flow_t *in_fault_flow = NULL; + axis2_flow_t *out_fault_flow = NULL; + axis2_char_t *file_name = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, module_archive, NULL); + AXIS2_PARAM_CHECK(env->error, conf, NULL); + AXIS2_PARAM_CHECK(env->error, dep_engine, NULL); + + phases_info = axis2_conf_get_phases_info(conf, env); + axis2_dep_engine_set_phases_info(dep_engine, env, phases_info); + dep_engine->curr_file = axis2_arch_file_data_create_with_type_and_file(env, AXIS2_MODULE, + module_archive); + + module_desc = axis2_module_desc_create(env); + arch_reader = axis2_arch_reader_create(env); + file_name = axutil_file_get_name(module_archive, env); + status = axis2_arch_reader_read_module_arch(env, file_name, dep_engine, module_desc); + axis2_arch_reader_free(arch_reader, env); + if(AXIS2_SUCCESS != status) + { + axis2_module_desc_free(module_desc, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Reading module archive for file %s failed", + file_name); + return NULL; + } + status = axis2_dep_engine_load_module_dll(dep_engine, env, module_desc); + if(AXIS2_SUCCESS != status) + { + axis2_module_desc_free(module_desc, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Loading module dll %s failed", file_name); + return NULL; + } + + module = axis2_module_desc_get_module(module_desc, env); + + /* Module implementor will provide functions for creating his handlers and by calling this + * function these function pointers will be stored in a hash map in the module. + */ + axis2_module_fill_handler_create_func_map(module, env); + + in_flow = axis2_module_desc_get_in_flow(module_desc, env); + if(in_flow) + { + axis2_dep_engine_add_module_flow_handlers(dep_engine, env, in_flow, + module->handler_create_func_map); + } + + out_flow = axis2_module_desc_get_out_flow(module_desc, env); + if(out_flow) + { + axis2_dep_engine_add_module_flow_handlers(dep_engine, env, out_flow, + module->handler_create_func_map); + } + + in_fault_flow = axis2_module_desc_get_fault_in_flow(module_desc, env); + if(in_fault_flow) + { + axis2_dep_engine_add_module_flow_handlers(dep_engine, env, in_fault_flow, + module->handler_create_func_map); + } + + out_fault_flow = axis2_module_desc_get_fault_out_flow(module_desc, env); + if(out_fault_flow) + { + axis2_dep_engine_add_module_flow_handlers(dep_engine, env, out_fault_flow, + module->handler_create_func_map); + } + + dep_engine->curr_file = NULL; + + return module_desc; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_dep_engine_get_repos_path( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, dep_engine, NULL); + return dep_engine->folder_name; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_dep_engine_set_current_file_item( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_arch_file_data_t * file_data) +{ + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + if(dep_engine->curr_file) + { + axis2_arch_file_data_free(dep_engine->curr_file, env); + dep_engine->curr_file = NULL; + } + dep_engine->curr_file = file_data; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_dep_engine_set_arch_reader( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_arch_reader_t * arch_reader) +{ + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + if(dep_engine->arch_reader) + { + axis2_arch_reader_free(dep_engine->arch_reader, env); + dep_engine->arch_reader = NULL; + } + dep_engine->arch_reader = arch_reader; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_dep_engine_add_module_builder( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_module_builder_t * module_builder) +{ + AXIS2_PARAM_CHECK(env->error, module_builder, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + return axutil_array_list_add(dep_engine->module_builders, env, module_builder); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_dep_engine_add_svc_builder( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_svc_builder_t * svc_builder) +{ + AXIS2_PARAM_CHECK(env->error, svc_builder, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + return axutil_array_list_add(dep_engine->svc_builders, env, svc_builder); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_dep_engine_add_svc_grp_builder( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + axis2_svc_grp_builder_t * svc_grp_builder) +{ + AXIS2_PARAM_CHECK(env->error, svc_grp_builder, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + return axutil_array_list_add(dep_engine->svc_grp_builders, env, svc_grp_builder); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_dep_engine_add_desc_builder( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + struct axis2_desc_builder * desc_builder) +{ + AXIS2_PARAM_CHECK(env->error, desc_builder, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + + return axutil_array_list_add(dep_engine->desc_builders, env, desc_builder); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_dep_engine_get_module_dir( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, dep_engine, NULL); + return axutil_strdup(env, dep_engine->module_dir); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_dep_engine_set_module_dir( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + const axis2_char_t *module_dir) +{ + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, module_dir, AXIS2_FAILURE); + dep_engine->module_dir = axutil_strdup(env, module_dir); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_dep_engine_get_file_flag( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FALSE); + return dep_engine->file_flag; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_dep_engine_get_svc_dir( + const axis2_dep_engine_t * dep_engine, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, dep_engine, NULL); + return axutil_strdup(env, dep_engine->svc_dir); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_dep_engine_set_svc_dir( + axis2_dep_engine_t * dep_engine, + const axutil_env_t * env, + const axis2_char_t *svc_dir) +{ + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, svc_dir, AXIS2_FAILURE); + dep_engine->svc_dir = axutil_strdup(env, svc_dir); + return AXIS2_SUCCESS; +} + +static axis2_status_t +axis2_dep_engine_set_svc_and_module_dir_path( + axis2_dep_engine_t *dep_engine, + const axutil_env_t *env) +{ + axis2_bool_t flag; + axis2_conf_t *conf; + axis2_char_t *dirpath; + axutil_param_t *dep_param; + AXIS2_PARAM_CHECK(env->error, dep_engine, AXIS2_FAILURE); + flag = dep_engine->file_flag; + if(!flag) + { + return AXIS2_SUCCESS; + } + else + { + conf = dep_engine->conf; + if(!conf) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Axis2 Configuration cannot be NULL"); + return AXIS2_FAILURE; + } + + dep_param = axis2_conf_get_param(conf, env, AXIS2_MODULE_DIR); + if(dep_param) + { + dirpath = (axis2_char_t *)axutil_param_get_value(dep_param, env); + if(dirpath) + { + dep_engine->module_dir = dirpath; + dirpath = NULL; + } + } + dep_param = NULL; + + dep_param = axis2_conf_get_param(conf, env, AXIS2_SERVICE_DIR); + if(dep_param) + { + dirpath = (axis2_char_t *)axutil_param_get_value(dep_param, env); + if(dirpath) + { + dep_engine->svc_dir = dirpath; + dirpath = NULL; + } + } + } + + return AXIS2_SUCCESS; +} + diff --git a/src/core/deployment/desc_builder.c b/src/core/deployment/desc_builder.c new file mode 100644 index 0000000..a6fde18 --- /dev/null +++ b/src/core/deployment/desc_builder.c @@ -0,0 +1,1148 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +struct axis2_desc_builder +{ + /** + * Store the full path to configuration file. + */ + axis2_char_t *file_name; + axiom_node_t *root; + struct axis2_dep_engine *engine; +}; + +static axis2_status_t +set_attrs_and_value( + axutil_param_t * param, + const axutil_env_t * env, + axiom_element_t * param_element, + axiom_node_t * param_node); + +AXIS2_EXTERN axis2_desc_builder_t *AXIS2_CALL +axis2_desc_builder_create( + const axutil_env_t * env) +{ + axis2_desc_builder_t *desc_builder = NULL; + + desc_builder = (axis2_desc_builder_t *)AXIS2_MALLOC(env-> allocator, + sizeof(axis2_desc_builder_t)); + + if(!desc_builder) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot allocate memory to desc_builder"); + return NULL; + } + desc_builder->file_name = NULL; + desc_builder->engine = NULL; + desc_builder->root = NULL; + + return desc_builder; +} + +AXIS2_EXTERN axis2_desc_builder_t *AXIS2_CALL +axis2_desc_builder_create_with_file_and_dep_engine( + const axutil_env_t * env, + axis2_char_t * file_name, + axis2_dep_engine_t * engine) +{ + axis2_desc_builder_t *desc_builder = NULL; + + AXIS2_PARAM_CHECK(env->error, file_name, NULL); + AXIS2_PARAM_CHECK(env->error, engine, NULL); + + desc_builder = (axis2_desc_builder_t *)axis2_desc_builder_create(env); + if(!desc_builder) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot allocate memory to desc_builder"); + return NULL; + } + + desc_builder->root = NULL; + + desc_builder->file_name = axutil_strdup(env, file_name); + if(!desc_builder->file_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot allocate memory to desc_builder->file_name"); + return NULL; + } + desc_builder->engine = engine; + + return desc_builder; +} + +AXIS2_EXTERN axis2_desc_builder_t *AXIS2_CALL +axis2_desc_builder_create_with_dep_engine( + const axutil_env_t * env, + struct axis2_dep_engine * engine) +{ + axis2_desc_builder_t *desc_builder = NULL; + + AXIS2_PARAM_CHECK(env->error, engine, NULL); + + desc_builder = (axis2_desc_builder_t *)axis2_desc_builder_create(env); + if(!desc_builder) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot allocate memory to desc_builder"); + return NULL; + } + + desc_builder->engine = engine; + + return desc_builder; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_desc_builder_free( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env) +{ + if(desc_builder->file_name) + { + AXIS2_FREE(env->allocator, desc_builder->file_name); + } + + if(desc_builder->root) + { + axiom_node_free_tree(desc_builder->root, env); + } + + /* we cannot free deployment engine here */ + desc_builder->engine = NULL; + + if(desc_builder) + { + AXIS2_FREE(env->allocator, desc_builder); + } + return; +} + +AXIS2_EXTERN axiom_node_t *AXIS2_CALL +axis2_desc_builder_build_om( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env) +{ + axiom_xml_reader_t *reader = NULL; + axiom_document_t *document = NULL; + axiom_stax_builder_t *builder = NULL; + + if(!desc_builder->file_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_DESC_BUILDER, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid state desc builder. Unable to continue"); + return NULL; + } + + /** create pull parser using the file path to configuration file */ + reader = axiom_xml_reader_create_for_file(env, desc_builder->file_name, NULL); + + if(!reader) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CREATING_XML_STREAM_READER, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Could not create xml reader for %s", + desc_builder->file_name); + return NULL; + }; + + /** create axiom_stax_builder by parsing pull_parser struct */ + builder = axiom_stax_builder_create(env, reader); + + if(!(builder)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CREATING_XML_STREAM_READER, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Could not create xml stream reader for desc builder %s. Unable " + "to continue", desc_builder->file_name); + return NULL; + } + + /** + get the om document form builder + document is the container of om model created using builder + */ + document = axiom_stax_builder_get_document(builder, env); + + /** + * In description building we don't want defferred building. So build + * the whole tree at once + */ + axiom_document_build_all(document, env); + + /** + get root element , building starts hear + */ + desc_builder->root = axiom_document_get_root_element(document, env); + /** + We have built the whole document. So no need of keeping the builder. + */ + axiom_stax_builder_free_self(builder, env); + + return desc_builder->root; +} + +AXIS2_EXTERN axis2_flow_t *AXIS2_CALL +axis2_desc_builder_process_flow( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axiom_element_t * flow_element, + axutil_param_container_t * parent, + axiom_node_t * flow_node) +{ + axis2_flow_t *flow = NULL; + axiom_children_qname_iterator_t *handlers = NULL; + axutil_qname_t *qchild = NULL; + + AXIS2_PARAM_CHECK(env->error, parent, NULL); + AXIS2_PARAM_CHECK(env->error, flow_node, NULL); + + flow = axis2_flow_create(env); + if(!flow) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Could not allocate to flow"); + return NULL; + } + + if(!flow_element) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "There is no flow element to process"); + return NULL; + } + + qchild = axutil_qname_create(env, AXIS2_HANDLERST, NULL, NULL); + handlers = axiom_element_get_children_with_qname(flow_element, env, qchild, flow_node); + if(qchild) + { + axutil_qname_free(qchild, env); + } + + while(axiom_children_qname_iterator_has_next(handlers, env)) + { + axiom_node_t *handler_node = NULL; + axis2_handler_desc_t *handler_desc = NULL; + axis2_status_t status = AXIS2_FAILURE; + + handler_node = (axiom_node_t *)axiom_children_qname_iterator_next(handlers, env); + + handler_desc = axis2_desc_builder_process_handler(desc_builder, env, handler_node, parent); + status = axis2_flow_add_handler(flow, env, handler_desc); + if(!status) + { + const axutil_string_t *handler_name = NULL; + const axis2_char_t *hname = NULL; + handler_name = axis2_handler_desc_get_name(handler_desc, env); + hname = axutil_string_get_buffer(handler_name, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Adding handler %s to flow failed", hname); + axis2_flow_free(flow, env); + return NULL; + } + } + return flow; +} + +struct axis2_handler_desc *AXIS2_CALL +axis2_desc_builder_process_handler( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axiom_node_t * handler_node, + struct axutil_param_container *parent) +{ + axis2_handler_desc_t *handler_desc = NULL; + axiom_attribute_t *name_attrib = NULL; + axutil_qname_t *attr_qname = NULL; + axiom_attribute_t *class_attrib = NULL; + axutil_qname_t *class_qname = NULL; + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *attrib_value = NULL; + axiom_element_t *handler_element = NULL; + axiom_node_t *order_node = NULL; + axiom_element_t *order_element = NULL; + axutil_qname_t *order_qname = NULL; + axutil_string_t *handler_name = NULL; + const axis2_char_t *hname = NULL; + + AXIS2_PARAM_CHECK(env->error, handler_node, NULL); + AXIS2_PARAM_CHECK(env->error, parent, NULL); + + handler_desc = axis2_handler_desc_create(env, NULL); + if(!handler_desc) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Could not create handler description"); + return NULL; + } + /* Setting Handler name */ + attr_qname = axutil_qname_create(env, AXIS2_ATTNAME, NULL, NULL); + handler_element = axiom_node_get_data_element(handler_node, env); + name_attrib = axiom_element_get_attribute(handler_element, env, attr_qname); + if(attr_qname) + { + axutil_qname_free(attr_qname, env); + } + + if(!name_attrib) + { + axis2_handler_desc_free(handler_desc, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Name attribute not fould for handler."); + return NULL; + } + else + { + axis2_char_t *value = NULL; + + value = axiom_attribute_get_value(name_attrib, env); + handler_name = axutil_string_create(env, value); + status = axis2_handler_desc_set_name(handler_desc, env, handler_name); + if(handler_name) + { + axutil_string_free(handler_name, env); + } + + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting name for handler description failed in %s", desc_builder->file_name); + axis2_handler_desc_free(handler_desc, env); + return NULL; + } + } + hname = axutil_string_get_buffer(handler_name, env); + /*Setting Handler Class name */ + class_qname = axutil_qname_create(env, AXIS2_CLASSNAME, NULL, NULL); + class_attrib = axiom_element_get_attribute(handler_element, env, class_qname); + if(class_qname) + { + axutil_qname_free(class_qname, env); + } + + if(!class_attrib) + { + axis2_handler_desc_free(handler_desc, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Library name attribute not found for handler %s", + hname); + return NULL; + } + else + { + attrib_value = axiom_attribute_get_value(class_attrib, env); + status = axis2_handler_desc_set_class_name(handler_desc, env, attrib_value); + } + + /*processing phase Rules (order) */ + + order_qname = axutil_qname_create(env, AXIS2_ORDER, NULL, NULL); + order_element = axiom_element_get_first_child_with_qname(handler_element, env, order_qname, + handler_node, &order_node); + if(order_qname) + { + axutil_qname_free(order_qname, env); + } + + if(!order_element || !order_node) + { + axis2_handler_desc_free(handler_desc, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Order node not found for handler description %s", + hname); + return NULL; + } + else + { + axutil_hash_t *order_itr = NULL; + axiom_children_qname_iterator_t *params = NULL; + axutil_qname_t *param_qname = NULL; + axutil_hash_index_t *index_i = NULL; + + order_itr = axiom_element_get_all_attributes(order_element, env); + if(!order_itr) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Order element for handler desc %s does not contain any " + "attribute", hname); + axis2_handler_desc_free(handler_desc, env); + return NULL; + } + + index_i = axutil_hash_first(order_itr, env); + + while(index_i) + { + axiom_attribute_t *order_attrib = NULL; + axutil_qname_t *qname = NULL; + axis2_char_t *name = NULL; + axis2_char_t *value = NULL; + void *v = NULL; + + axutil_hash_this(index_i, NULL, NULL, &v); + order_attrib = (axiom_attribute_t *)v; + qname = axiom_attribute_get_qname(order_attrib, env); + name = axutil_qname_get_localpart(qname, env); + + value = axiom_attribute_get_value(order_attrib, env); + if(!axutil_strcmp(AXIS2_AFTER, name)) + { + struct axis2_phase_rule *phase_rule = NULL; + + phase_rule = axis2_handler_desc_get_rules(handler_desc, env); + status = axis2_phase_rule_set_after(phase_rule, env, value); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting %s phase rule failed for handler %s", AXIS2_AFTER, hname); + axis2_handler_desc_free(handler_desc, env); + return NULL; + } + } + if(!axutil_strcmp(AXIS2_BEFORE, name)) + { + struct axis2_phase_rule *phase_rule = NULL; + phase_rule = axis2_handler_desc_get_rules(handler_desc, env); + status = axis2_phase_rule_set_before(phase_rule, env, value); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting %s phase rule failed for handler %s", AXIS2_BEFORE, hname); + axis2_handler_desc_free(handler_desc, env); + return NULL; + } + } + if(!axutil_strcmp(AXIS2_PHASE, name)) + { + struct axis2_phase_rule *phase_rule = NULL; + phase_rule = axis2_handler_desc_get_rules(handler_desc, env); + status = axis2_phase_rule_set_name(phase_rule, env, value); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting phase rule name failed for handler %s", hname); + axis2_handler_desc_free(handler_desc, env); + return NULL; + } + } + if(!axutil_strcmp(AXIS2_PHASEFIRST, name)) + { + axis2_char_t *bool_val = NULL; + + bool_val = axis2_desc_builder_get_value(desc_builder, env, value); + if(!axutil_strcmp(bool_val, AXIS2_VALUE_TRUE)) + { + struct axis2_phase_rule *phase_rule = NULL; + phase_rule = axis2_handler_desc_get_rules(handler_desc, env); + status = axis2_phase_rule_set_first(phase_rule, env, AXIS2_TRUE); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting %s property for phase rules for handler " + "%s failed", AXIS2_PHASEFIRST, hname); + axis2_handler_desc_free(handler_desc, env); + AXIS2_FREE(env->allocator, bool_val); + return NULL; + } + } + else if(!axutil_strcmp(bool_val, AXIS2_VALUE_FALSE)) + { + struct axis2_phase_rule *phase_rule = NULL; + phase_rule = axis2_handler_desc_get_rules(handler_desc, env); + status = axis2_phase_rule_set_first(phase_rule, env, AXIS2_FALSE); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting %s property for phase rules for handler " + "%s failed", AXIS2_PHASEFIRST, hname); + axis2_handler_desc_free(handler_desc, env); + AXIS2_FREE(env->allocator, bool_val); + return NULL; + } + } + AXIS2_FREE(env->allocator, bool_val); + } + index_i = axutil_hash_next(env, index_i); + } + + param_qname = axutil_qname_create(env, AXIS2_PARAMETERST, NULL, NULL); + params = axiom_element_get_children_with_qname(handler_element, env, param_qname, + handler_node); + axutil_qname_free(param_qname, env); + status = axis2_desc_builder_process_params(desc_builder, env, params, + axis2_handler_desc_get_param_container(handler_desc, env), parent); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Processing params failed for handler %s", + hname); + axis2_handler_desc_free(handler_desc, env); + return NULL; + } + } + + status = axis2_handler_desc_set_parent(handler_desc, env, parent); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting parent failed for handler %s", hname); + axis2_handler_desc_free(handler_desc, env); + return NULL; + } + + return handler_desc; +} + +static axis2_status_t +set_attrs_and_value( + axutil_param_t * param, + const axutil_env_t * env, + axiom_element_t * param_element, + axiom_node_t * param_node) +{ + axis2_status_t status = AXIS2_FAILURE; + axutil_hash_t *attrs = NULL; + axiom_child_element_iterator_t *childs = NULL; + + AXIS2_PARAM_CHECK(env->error, param, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, param_element, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, param_node, AXIS2_FAILURE); + + /* Setting attributes */ + attrs = axiom_element_extract_attributes(param_element, env, param_node); + if(attrs) + { + axutil_hash_index_t *i = NULL; + + for(i = axutil_hash_first(attrs, env); i; i = axutil_hash_next(env, i)) + { + void *v = NULL; + axiom_attribute_t *value = NULL; + axutil_generic_obj_t *obj = NULL; + axutil_qname_t *attr_qname = NULL; + axis2_char_t *attr_name = NULL; + + axutil_hash_this(i, NULL, NULL, &v); + if(!v) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Attibute missing in the parameter element"); + axutil_param_free(param, env); + return AXIS2_FAILURE; + } + obj = axutil_generic_obj_create(env); + if(!obj) + { + axutil_param_free(param, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return AXIS2_FAILURE; + } + value = (axiom_attribute_t *)v; + axutil_generic_obj_set_value(obj, env, value); + axutil_generic_obj_set_free_func(obj, env, axiom_attribute_free_void_arg); + attr_qname = axiom_attribute_get_qname(value, env); + attr_name = axutil_qname_to_string(attr_qname, env); + axutil_hash_set(attrs, attr_name, AXIS2_HASH_KEY_STRING, obj); + } + axutil_param_set_attributes(param, env, attrs); + } + + childs = axiom_element_get_child_elements(param_element, env, param_node); + if(childs) + { + axutil_array_list_t *value_list = NULL; + + value_list = axutil_array_list_create(env, 0); + axutil_param_set_value_list(param, env, value_list); + + while(AXIOM_CHILD_ELEMENT_ITERATOR_HAS_NEXT(childs, env)) + { + axiom_node_t *node = NULL; + axiom_element_t *element = NULL; + axutil_param_t *param = NULL; + axis2_char_t *pname = NULL; + + node = AXIOM_CHILD_ELEMENT_ITERATOR_NEXT(childs, env); + element = axiom_node_get_data_element(node, env); + param = axutil_param_create(env, NULL, NULL); + pname = axiom_element_get_localname(element, env); + status = axutil_param_set_name(param, env, pname); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting name to parameter failed"); + axutil_param_free(param, env); + return status; + } + axutil_param_set_param_type(param, env, AXIS2_DOM_PARAM); + set_attrs_and_value(param, env, element, node); + axutil_array_list_add(value_list, env, param); + } + } + else + { + axis2_char_t *para_test_value = NULL; + axis2_char_t *temp = NULL; + + temp = axiom_element_get_text(param_element, env, param_node); + para_test_value = axutil_strdup(env, temp); + status = axutil_param_set_value(param, env, para_test_value); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting value to parameter failed"); + axutil_param_free(param, env); + AXIS2_FREE(env->allocator, para_test_value); + return status; + } + axutil_param_set_param_type(param, env, AXIS2_TEXT_PARAM); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_desc_builder_process_rest_params( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axiom_node_t * op_node, + axis2_op_t * op_desc) +{ + axiom_element_t *op_element = NULL; + axutil_qname_t *qname = NULL; + axutil_qname_t *param_qname = NULL; + axiom_node_t *rest_node = NULL; + axiom_element_t *rest_element = NULL; + axiom_children_qname_iterator_t *rest_mappings = NULL; + + AXIS2_PARAM_CHECK(env->error, op_desc, AXIS2_FAILURE); + + op_element = axiom_node_get_data_element(op_node, env); + + param_qname = axutil_qname_create(env, AXIS2_PARAMETERST, NULL, NULL); + qname = axutil_qname_create(env, AXIS2_ATTNAME, NULL, NULL); + + if(op_element) + { + rest_mappings + = axiom_element_get_children_with_qname(op_element, env, param_qname, op_node); + } + + while(rest_mappings && axiom_children_qname_iterator_has_next(rest_mappings, env)) + { + axis2_char_t *param_value = NULL; + rest_node = (axiom_node_t *)axiom_children_qname_iterator_next(rest_mappings, env); + rest_element = axiom_node_get_data_element(rest_node, env); + param_value = axiom_element_get_attribute_value(rest_element, env, qname); + if(!strcmp(param_value, AXIS2_REST_HTTP_METHOD)) + { + axis2_op_set_rest_http_method(op_desc, env, axiom_element_get_text(rest_element, env, + rest_node)); + } + param_value = axiom_element_get_attribute_value(rest_element, env, qname); + if(!strcmp(param_value, AXIS2_REST_HTTP_LOCATION)) + { + axis2_op_set_rest_http_location(op_desc, env, axiom_element_get_text(rest_element, env, + rest_node)); + } + if(axis2_op_get_rest_http_method(op_desc, env) && axis2_op_get_rest_http_location(op_desc, + env)) + { + break; + } + } + + axutil_qname_free(qname, env); + axutil_qname_free(param_qname, env); + return AXIS2_SUCCESS; +} + +/** + * Populate the Axis2 Operation with details from the actionMapping, + * outputActionMapping and faultActionMapping elements from the operation + * element. + * + * @param operation + * @param op_desc + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_desc_builder_process_action_mappings( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axiom_node_t * op_node, + axis2_op_t * op_desc) +{ + axiom_element_t *op_element = NULL; + axutil_qname_t *qname = NULL; + axiom_children_qname_iterator_t *action_mappings = NULL; + axutil_array_list_t *mapping_list = axutil_array_list_create(env, 0); + AXIS2_PARAM_CHECK(env->error, op_desc, AXIS2_FAILURE); + + op_element = axiom_node_get_data_element(op_node, env); + qname = axutil_qname_create(env, AXIS2_ACTION_MAPPING, NULL, NULL); + if(op_element) + { + action_mappings = axiom_element_get_children_with_qname(op_element, env, qname, op_node); + } + + axutil_qname_free(qname, env); + qname = NULL; + if(!action_mappings) + { + if(mapping_list) + { + axutil_array_list_free(mapping_list, env); + mapping_list = NULL; + } + return AXIS2_SUCCESS; + } + while(axiom_children_qname_iterator_has_next(action_mappings, env)) + { + axiom_element_t *mapping_element = NULL; + axiom_node_t *mapping_node = NULL; + axis2_char_t *input_action_string = NULL; + axis2_char_t *temp_str = NULL; + + /* This is to check whether some one has locked the parmter at the top + * level + */ + mapping_node = (axiom_node_t *)axiom_children_qname_iterator_next(action_mappings, env); + mapping_element = axiom_node_get_data_element(mapping_node, env); + temp_str = axiom_element_get_text(mapping_element, env, mapping_node); + input_action_string = axutil_strtrim(env, temp_str, NULL); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Input action mapping found %s", + input_action_string); + if(axutil_strcmp("", input_action_string)) + { + axutil_array_list_add(mapping_list, env, input_action_string); + } + else + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Zero length " + "input_action_string found. Not added to the mapping list"); + } + } + axis2_op_set_wsamapping_list(op_desc, env, mapping_list); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_desc_builder_process_params( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * params, + axutil_param_container_t * param_container, + axutil_param_container_t * parent) +{ + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, params, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, param_container, AXIS2_FAILURE); + + while(axiom_children_qname_iterator_has_next(params, env)) + { + axiom_element_t *param_element = NULL; + axiom_node_t *param_node = NULL; + axutil_param_t *param = NULL; + axutil_param_t *parent_para = NULL; + axiom_attribute_t *para_name = NULL; + axiom_attribute_t *para_locked = NULL; + axutil_qname_t *att_locked = NULL; + axutil_qname_t *att_qname = NULL; + axis2_char_t *pname = NULL; + + /* This is to check whether some one has locked the parmter at the top + * level + */ + param_node = (axiom_node_t *)axiom_children_qname_iterator_next(params, env); + param_element = axiom_node_get_data_element(param_node, env); + param = axutil_param_create(env, NULL, NULL); + + /* Setting paramter name */ + att_qname = axutil_qname_create(env, AXIS2_ATTNAME, NULL, NULL); + para_name = axiom_element_get_attribute(param_element, env, att_qname); + axutil_qname_free(att_qname, env); + if(!para_name) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Parameter name attribute not found for parameter"); + axutil_param_free(param, env); + return AXIS2_FAILURE; + } + pname = axiom_attribute_get_value(para_name, env); + status = axutil_param_set_name(param, env, pname); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Could not set parameter name for parameter"); + axutil_param_free(param, env); + return status; + } + + /* Setting paramter Value (the chiled elemnt of the paramter) */ + set_attrs_and_value(param, env, param_element, param_node); + + /* Setting locking attrib */ + att_locked = axutil_qname_create(env, AXIS2_ATTLOCKED, NULL, NULL); + para_locked = axiom_element_get_attribute(param_element, env, att_locked); + axutil_qname_free(att_locked, env); + if(parent) + { + axis2_char_t *param_name = NULL; + + param_name = axutil_param_get_name(param, env); + parent_para = axutil_param_container_get_param(parent, env, param_name); + } + if(para_locked) + { + axis2_char_t *locked_value = NULL; + locked_value = axiom_attribute_get_value(para_locked, env); + if(!axutil_strcmp(AXIS2_VALUE_TRUE, locked_value)) + { + axis2_char_t *param_name = NULL; + axis2_bool_t is_param_locked = AXIS2_FALSE; + /*if the parameter is locked at some level parameter value replace + * by that + */ + param_name = axutil_param_get_name(param, env); + is_param_locked = axutil_param_container_is_param_locked(parent, env, param_name); + if(parent && is_param_locked) + { + axutil_param_free(param, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CONFIG_NOT_FOUND, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Parameter %s is locked", param_name); + return AXIS2_FAILURE; + } + else + { + axutil_param_set_locked(param, env, AXIS2_TRUE); + } + } + else + { + axutil_param_set_locked(param, env, AXIS2_FALSE); + } + } + + if(parent) + { + axis2_char_t *name = NULL; + axis2_bool_t bvalue = AXIS2_FALSE; + + name = axutil_param_get_name(param, env); + bvalue = axutil_param_container_is_param_locked(parent, env, name); + if(parent_para || !bvalue) + { + status = axutil_param_container_add_param(param_container, env, param); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Adding parameter %s failed", name); + axutil_param_free(param, env); + return status; + } + } + } + else + { + status = axutil_param_container_add_param(param_container, env, param); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Adding parameter %s failed", pname); + axutil_param_free(param, env); + return status; + } + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_desc_builder_process_op_module_refs( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * module_refs, + axis2_op_t * op) +{ + axiom_element_t *moduleref = NULL; + axiom_attribute_t *module_ref_attrib = NULL; + axutil_qname_t *qref = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, op, AXIS2_FAILURE); + + while(module_refs && axiom_children_qname_iterator_has_next(module_refs, env)) + { + axiom_node_t *moduleref_node = axiom_children_qname_iterator_next(module_refs, env); + moduleref = (axiom_element_t *)axiom_node_get_data_element(moduleref_node, env); + + qref = axutil_qname_create(env, AXIS2_REF, NULL, NULL); + module_ref_attrib = axiom_element_get_attribute(moduleref, env, qref); + axutil_qname_free(qref, env); + if(module_ref_attrib) + { + axis2_char_t *ref_name = NULL; + axutil_qname_t *ref_qname = NULL; + axis2_module_desc_t *module_desc = NULL; + + ref_name = axiom_attribute_get_value(module_ref_attrib, env); + ref_qname = axutil_qname_create(env, ref_name, NULL, NULL); + module_desc = axis2_dep_engine_get_module(desc_builder->engine, env, ref_qname); + if(!module_desc) + { + axutil_qname_free(ref_qname, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MODULE_NOT_FOUND, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Module %s not found in the deployment engine", ref_name); + + return AXIS2_FAILURE; + } + else + { + status = axis2_op_add_module_qname(op, env, ref_qname); + axutil_qname_free(ref_qname, env); + if(AXIS2_SUCCESS != status) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MODULE_NOT_FOUND, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding module ref %s to operation %s failed", ref_name, + axutil_qname_get_localpart(axis2_op_get_qname(op, env), env)); + + return AXIS2_FAILURE; + } + } + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_msg_recv_t *AXIS2_CALL +axis2_desc_builder_load_msg_recv( + axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + struct axiom_element * recv_element) +{ + axiom_attribute_t *recv_name = NULL; + axis2_char_t *class_name = NULL; + axis2_msg_recv_t *msg_recv = NULL; + axutil_qname_t *class_qname = NULL; + axutil_param_t *impl_info_param = NULL; + axutil_dll_desc_t *dll_desc = NULL; + axis2_char_t *repos_name = NULL; + axis2_char_t *dll_name = NULL; + axis2_char_t *temp_path = NULL; + axis2_char_t *temp_path2 = NULL; + axis2_char_t *temp_path3 = NULL; + axis2_conf_t *conf = NULL; + axis2_char_t *msg_recv_dll_name = NULL; + + AXIS2_PARAM_CHECK(env->error, recv_element, NULL); + + class_qname = axutil_qname_create(env, AXIS2_CLASSNAME, NULL, NULL); + recv_name = axiom_element_get_attribute(recv_element, env, class_qname); + axutil_qname_free(class_qname, env); + class_name = axiom_attribute_get_value(recv_name, env); + + conf = axis2_dep_engine_get_axis_conf(desc_builder->engine, env); + if(!conf) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Configuration not found in the deployment engine"); + return NULL; + } + impl_info_param = axis2_conf_get_param(conf, env, class_name); + + if(!impl_info_param) + { + dll_desc = axutil_dll_desc_create(env); + msg_recv_dll_name = axutil_dll_desc_create_platform_specific_dll_name(dll_desc, env, + class_name); + repos_name = axis2_dep_engine_get_repos_path(desc_builder->engine, env); + temp_path = axutil_stracat(env, repos_name, AXIS2_PATH_SEP_STR); + temp_path2 = axutil_stracat(env, temp_path, AXIS2_LIB_FOLDER); + temp_path3 = axutil_stracat(env, temp_path2, AXIS2_PATH_SEP_STR); + dll_name = axutil_stracat(env, temp_path3, msg_recv_dll_name); + AXIS2_FREE(env->allocator, temp_path); + AXIS2_FREE(env->allocator, temp_path2); + AXIS2_FREE(env->allocator, temp_path3); + axutil_dll_desc_set_name(dll_desc, env, dll_name); + AXIS2_FREE(env->allocator, dll_name); + axutil_dll_desc_set_type(dll_desc, env, AXIS2_MSG_RECV_DLL); + impl_info_param = axutil_param_create(env, class_name, NULL); + axutil_param_set_value(impl_info_param, env, dll_desc); + axutil_param_set_value_free(impl_info_param, env, axutil_dll_desc_free_void_arg); + /* set the impl_info_param(which contain dll_desc as value) so that + * loaded msg_recv loader lib can be re-used in future + */ + axis2_conf_add_param(conf, env, impl_info_param); + } + + axutil_class_loader_init(env); + msg_recv = (axis2_msg_recv_t *)axutil_class_loader_create_dll(env, impl_info_param); + return msg_recv; +} + +AXIS2_EXTERN struct axis2_msg_recv *AXIS2_CALL +axis2_desc_builder_load_default_msg_recv( + const axutil_env_t * env) +{ + axis2_msg_recv_t *msg_recv = NULL; + + msg_recv = axis2_raw_xml_in_out_msg_recv_create(env); + return msg_recv; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_desc_builder_get_short_file_name( + const axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axis2_char_t * file_name) +{ + const axis2_char_t *separator = NULL; + axis2_char_t *value = NULL; + axis2_char_t *file_name_l = NULL; + axis2_char_t *short_name = NULL; + + AXIS2_PARAM_CHECK(env->error, file_name, NULL); + + file_name_l = axutil_strdup(env, file_name); + if(!file_name_l) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, ""); + return NULL; + } + separator = "."; + + value = axutil_strstr(file_name_l, separator); + + value[0] = AXIS2_EOLN; + short_name = file_name_l; + + return short_name; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_desc_builder_get_file_name_without_prefix( + const axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axis2_char_t * short_file_name) +{ + axis2_char_t *file_name_l = NULL; + axis2_char_t *short_name = NULL; + int len = 0; + AXIS2_PARAM_CHECK(env->error, short_file_name, NULL); + file_name_l = axutil_strdup(env, short_file_name); + if(!file_name_l) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, ""); + return NULL; + } + len = axutil_strlen(AXIS2_LIB_PREFIX); + short_name = &file_name_l[len]; + return short_name; + +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_desc_builder_get_value( + const axis2_desc_builder_t * desc_builder, + const axutil_env_t * env, + axis2_char_t * in) +{ + const axis2_char_t *separator = ":"; + axis2_char_t *value = NULL; + axis2_char_t *in_l = NULL; + + AXIS2_PARAM_CHECK(env->error, in, NULL); + + in_l = axutil_strdup(env, in); + if(!in_l) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, ""); + return NULL; + } + value = axutil_strstr(in_l, separator); + value = value + 1; + + return value; +} + +AXIS2_EXTERN struct axis2_dep_engine *AXIS2_CALL +axis2_desc_builder_get_dep_engine( + const axis2_desc_builder_t * desc_builder, + const axutil_env_t * env) +{ + return desc_builder->engine; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_process_policy_elements( + const axutil_env_t * env, + int type, + axiom_children_qname_iterator_t * iterator, + axis2_policy_include_t * policy_include) +{ + while(axiom_children_qname_iterator_has_next(iterator, env)) + { + axiom_node_t *node = NULL; + node = axiom_children_qname_iterator_next(iterator, env); + if(node) + { + axiom_element_t *element = NULL; + neethi_policy_t *policy = NULL; + + element = axiom_node_get_data_element(node, env); + policy = neethi_engine_get_policy(env, node, element); + if(!policy) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, ""); + return AXIS2_FAILURE; + } + axis2_policy_include_add_policy_element(policy_include, env, type, policy); + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_process_policy_reference_elements( + const axutil_env_t * env, + int type, + axiom_children_qname_iterator_t * iterator, + axis2_policy_include_t * policy_include) +{ + while(axiom_children_qname_iterator_has_next(iterator, env)) + { + axiom_node_t *node = NULL; + node = axiom_children_qname_iterator_next(iterator, env); + if(node) + { + axiom_element_t *element = NULL; + neethi_reference_t *reference = NULL; + + element = axiom_node_get_data_element(node, env); + /* TODO: add neethi_engine_get_policy_reference + reference = neethi_engine_get_policy_reference(env, node, element); */ + axis2_policy_include_add_policy_reference_element(policy_include, env, type, reference); + } + } + return AXIS2_SUCCESS; +} + diff --git a/src/core/deployment/module_builder.c b/src/core/deployment/module_builder.c new file mode 100644 index 0000000..ad91866 --- /dev/null +++ b/src/core/deployment/module_builder.c @@ -0,0 +1,514 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axis2_module_builder +{ + axis2_module_desc_t *module_desc; + struct axis2_desc_builder *desc_builder; +}; + +static axutil_array_list_t *AXIS2_CALL axis2_module_builder_process_ops( + axis2_module_builder_t * module_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * op_itr); + +AXIS2_EXTERN axis2_module_builder_t *AXIS2_CALL +axis2_module_builder_create( + const axutil_env_t * env) +{ + axis2_module_builder_t *module_builder = NULL; + + module_builder = (axis2_module_builder_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_module_builder_t)); + + if(!module_builder) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory to create module builder"); + return NULL; + } + + return module_builder; +} + +AXIS2_EXTERN axis2_module_builder_t *AXIS2_CALL +axis2_module_builder_create_with_file_and_dep_engine_and_module( + const axutil_env_t * env, + axis2_char_t * file_name, + axis2_dep_engine_t * dep_engine, + axis2_module_desc_t * module_desc) +{ + axis2_module_builder_t *module_builder = NULL; + + module_builder = (axis2_module_builder_t *)axis2_module_builder_create(env); + if(!module_builder) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory to create module builder %s", file_name); + return NULL; + } + module_builder->desc_builder = axis2_desc_builder_create_with_file_and_dep_engine(env, + file_name, dep_engine); + if(!module_builder->desc_builder) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Description builder creation failed for module builder %s", file_name); + axis2_module_builder_free(module_builder, env); + return NULL; + } + module_builder->module_desc = module_desc; + return module_builder; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_module_builder_free( + axis2_module_builder_t * module_builder, + const axutil_env_t * env) +{ + if(module_builder->desc_builder) + { + axis2_desc_builder_free(module_builder->desc_builder, env); + } + + if(module_builder) + { + AXIS2_FREE(env->allocator, module_builder); + } + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_module_builder_populate_module( + axis2_module_builder_t * module_builder, + const axutil_env_t * env) +{ + axiom_element_t *module_element = NULL; + axiom_node_t *module_node = NULL; + axutil_qname_t *qdllname = NULL; + axutil_qname_t *qparamst = NULL; + axutil_qname_t *qinflowst = NULL; + axutil_qname_t *qoutflowst = NULL; + axutil_qname_t *qinfaultflow = NULL; + axutil_qname_t *qoutfaultflow = NULL; + axutil_qname_t *qopst = NULL; + axiom_attribute_t *module_dll_att = NULL; + axiom_children_qname_iterator_t *itr = NULL; + axiom_children_qname_iterator_t *op_itr = NULL; + axiom_element_t *in_flow_element = NULL; + axiom_node_t *in_flow_node = NULL; + axiom_element_t *out_flow_element = NULL; + axiom_node_t *out_flow_node = NULL; + axiom_element_t *in_fault_flow_element = NULL; + axiom_node_t *in_fault_flow_node = NULL; + axiom_element_t *out_fault_flow_element = NULL; + axiom_node_t *out_fault_flow_node = NULL; + axis2_conf_t *parent = NULL; + axutil_array_list_t *ops = NULL; + axutil_param_container_t *parent_container = NULL; + int size = 0; + int i = 0; + axis2_arch_file_data_t *file_data = NULL; + axis2_char_t *module_name = NULL; + axutil_qname_t *module_qname = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_module_builder_populate_module"); + + module_node = axis2_desc_builder_build_om(module_builder->desc_builder, env); + module_element = axiom_node_get_data_element(module_node, env); + if(!module_element) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Data element not found for the module node, Unable to proceed"); + return AXIS2_FAILURE; + } + file_data = axis2_dep_engine_get_current_file_item(axis2_desc_builder_get_dep_engine( + module_builder->desc_builder, env), env); + module_name = axis2_arch_file_data_get_module_name(file_data, env); + + module_qname = axutil_qname_create(env, module_name, NULL, NULL); + axis2_module_desc_set_qname(module_builder->module_desc, env, module_qname); + + if(module_qname) + { + axutil_qname_free(module_qname, env); + } + /* Setting Module Dll Name , if it is there */ + + qdllname = axutil_qname_create(env, AXIS2_CLASSNAME, NULL, NULL); + module_dll_att = axiom_element_get_attribute(module_element, env, qdllname); + if(qdllname) + { + axutil_qname_free(qdllname, env); + } + + if(module_dll_att) + { + axis2_char_t *class_name = NULL; + + class_name = axiom_attribute_get_value(module_dll_att, env); + if(class_name && (axutil_strcmp("", class_name))) + { + axis2_dep_engine_t *dep_engine = axis2_desc_builder_get_dep_engine( + module_builder->desc_builder, env); + if(dep_engine) + { + axis2_arch_file_data_t *file_data = NULL; + + file_data = axis2_dep_engine_get_current_file_item(dep_engine, env); + axis2_arch_file_data_set_module_dll_name(file_data, env, class_name); + } + } + } + + /* Processing Paramters */ + /* Processing service level paramters */ + + qparamst = axutil_qname_create(env, AXIS2_PARAMETERST, NULL, NULL); + itr = axiom_element_get_children_with_qname(module_element, env, qparamst, module_node); + if(qparamst) + { + axutil_qname_free(qparamst, env); + } + parent = axis2_module_desc_get_parent(module_builder->module_desc, env); + + if(parent) + { + parent_container = axis2_conf_get_param_container(parent, env); + } + axis2_desc_builder_process_params(module_builder->desc_builder, env, itr, + axis2_module_desc_get_param_container(module_builder->module_desc, env), parent_container); + + /* Process IN_FLOW */ + qinflowst = axutil_qname_create(env, AXIS2_IN_FLOW_START, NULL, NULL); + in_flow_element = axiom_element_get_first_child_with_qname(module_element, env, qinflowst, + module_node, &in_flow_node); + if(qinflowst) + { + axutil_qname_free(qinflowst, env); + } + + if(in_flow_element && in_flow_node) + { + axis2_flow_t *flow = NULL; + + flow = axis2_desc_builder_process_flow(module_builder->desc_builder, env, in_flow_element, + axis2_module_desc_get_param_container(module_builder->module_desc, env), in_flow_node); + status = axis2_module_desc_set_in_flow(module_builder->module_desc, env, flow); + + if(!status) + { + if(flow) + { + axis2_flow_free(flow, env); + } + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting in flow failed for module desc %s", + module_name); + return status; + } + } + + qoutflowst = axutil_qname_create(env, AXIS2_OUT_FLOW_START, NULL, NULL); + out_flow_element = axiom_element_get_first_child_with_qname(module_element, env, qoutflowst, + module_node, &out_flow_node); + if(qoutflowst) + { + axutil_qname_free(qoutflowst, env); + } + + if(out_flow_element && out_flow_node) + { + axis2_flow_t *flow = NULL; + + flow = axis2_desc_builder_process_flow(module_builder->desc_builder, env, out_flow_element, + axis2_module_desc_get_param_container(module_builder->module_desc, env), out_flow_node); + status = axis2_module_desc_set_out_flow(module_builder->module_desc, env, flow); + + if(!status) + { + axis2_flow_free(flow, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting out flow failed for module desc %s", + module_name); + return status; + } + } + + qinfaultflow = axutil_qname_create(env, AXIS2_IN_FAILTFLOW, NULL, NULL); + in_fault_flow_element = axiom_element_get_first_child_with_qname(module_element, env, + qinfaultflow, module_node, &in_fault_flow_node); + if(qinfaultflow) + { + axutil_qname_free(qinfaultflow, env); + } + + if(in_fault_flow_element && NULL != in_fault_flow_node) + { + axis2_flow_t *flow = NULL; + + flow = axis2_desc_builder_process_flow(module_builder->desc_builder, env, + in_fault_flow_element, axis2_module_desc_get_param_container( + module_builder->module_desc, env), in_fault_flow_node); + status = axis2_module_desc_set_fault_in_flow(module_builder->module_desc, env, flow); + + if(!status) + { + axis2_flow_free(flow, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting fault in flow failed for module desc %s", module_name); + return status; + } + } + + qoutfaultflow = axutil_qname_create(env, AXIS2_OUT_FAILTFLOW, NULL, NULL); + out_fault_flow_element = axiom_element_get_first_child_with_qname(module_element, env, + qoutfaultflow, module_node, &out_fault_flow_node); + if(qoutfaultflow) + { + axutil_qname_free(qoutfaultflow, env); + } + + if(out_fault_flow_element && NULL != out_fault_flow_node) + { + axis2_flow_t *flow = NULL; + + flow = axis2_desc_builder_process_flow(module_builder->desc_builder, env, + out_fault_flow_element, axis2_module_desc_get_param_container( + module_builder->module_desc, env), out_fault_flow_node); + status = axis2_module_desc_set_fault_out_flow(module_builder->module_desc, env, flow); + if(AXIS2_SUCCESS != status) + { + axis2_flow_free(flow, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting fault out flow failed for module desc %s", module_name); + return status; + } + } + + /* Processing Operations */ + qopst = axutil_qname_create(env, AXIS2_OPERATIONST, NULL, NULL); + op_itr = axiom_element_get_children_with_qname(module_element, env, qopst, module_node); + if(qopst) + { + axutil_qname_free(qopst, env); + } + ops = axis2_module_builder_process_ops(module_builder, env, op_itr); + size = axutil_array_list_size(ops, env); + for(i = 0; i < size; i++) + { + axis2_op_t *op_desc = NULL; + + op_desc = (axis2_op_t *)axutil_array_list_get(ops, env, i); + axis2_module_desc_add_op(module_builder->module_desc, env, op_desc); + } + axutil_array_list_free(ops, env); + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_module_builder_populate_module"); + return AXIS2_SUCCESS; +} + +static axutil_array_list_t *AXIS2_CALL +axis2_module_builder_process_ops( + axis2_module_builder_t * module_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * op_itr) +{ + axutil_array_list_t *ops = NULL; + + AXIS2_PARAM_CHECK(env->error, op_itr, NULL); + + ops = axutil_array_list_create(env, 0); + while(axiom_children_qname_iterator_has_next(op_itr, env)) + { + axiom_element_t *op_element = NULL; + axiom_node_t *op_node = NULL; + axiom_attribute_t *op_name_att = NULL; + axiom_attribute_t *op_mep_att = NULL; + axutil_qname_t *qattname = NULL; + axis2_char_t *mep_url = NULL; + axis2_char_t *op_name = NULL; + axutil_qname_t *qopname = NULL; + axutil_qname_t *qmsgrecv = NULL; + axutil_qname_t *qparamst = NULL; + axutil_qname_t *qmodulest = NULL; + axutil_qname_t *qmep = NULL; + axiom_children_qname_iterator_t *params = NULL; + axiom_children_qname_iterator_t *modules = NULL; + axiom_element_t *recv_element = NULL; + axiom_node_t *recv_node = NULL; + axis2_phases_info_t *info = NULL; + axis2_op_t *op_desc = NULL; + axutil_qname_t *qpolicy = NULL; + axiom_children_qname_iterator_t *itr = NULL; + axis2_desc_t *desc = NULL; + axis2_policy_include_t *policy_include = NULL; + + op_node = (axiom_node_t *)axiom_children_qname_iterator_next(op_itr, env); + op_element = axiom_node_get_data_element(op_node, env); + /* getting operation name */ + qattname = axutil_qname_create(env, AXIS2_ATTNAME, NULL, NULL); + op_name_att = axiom_element_get_attribute(op_element, env, qattname); + if(qattname) + { + axutil_qname_free(qattname, env); + } + + if(!op_name_att) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_OP_NAME_MISSING, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Operation name missing for module operation."); + return NULL; + } + qmep = axutil_qname_create(env, AXIS2_MEP, NULL, NULL); + op_mep_att = axiom_element_get_attribute(op_element, env, qmep); + if(qmep) + { + axutil_qname_free(qmep, env); + } + + if(op_mep_att) + { + mep_url = axiom_attribute_get_value(op_mep_att, env); + } + if(!mep_url) + { + /* Assuming in-out mep */ + op_desc = axis2_op_create_from_module(env); + } + else + { + op_desc = axis2_op_create_from_module(env); + axis2_op_set_msg_exchange_pattern(op_desc, env, mep_url); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "mep_url:%s", mep_url); + } + + op_name = axiom_attribute_get_value(op_name_att, env); + qopname = axutil_qname_create(env, op_name, NULL, NULL); + axis2_op_set_qname(op_desc, env, qopname); + if(qopname) + { + axutil_qname_free(qopname, env); + } + + /* Operation parameters */ + qparamst = axutil_qname_create(env, AXIS2_PARAMETERST, NULL, NULL); + params = axiom_element_get_children_with_qname(op_element, env, qparamst, op_node); + if(qparamst) + { + axutil_qname_free(qparamst, env); + } + + axis2_desc_builder_process_params(module_builder->desc_builder, env, params, + axis2_op_get_param_container(op_desc, env), axis2_module_desc_get_param_container( + module_builder->module_desc, env)); + /* To process wsamapping */ + axis2_desc_builder_process_action_mappings(module_builder->desc_builder, env, op_node, + op_desc); + + /* To process REST params */ + axis2_desc_builder_process_rest_params(module_builder->desc_builder, env, op_node, op_desc); + + /* setting the policy_include */ + + desc = axis2_op_get_base(op_desc, env); + policy_include = axis2_desc_get_policy_include(desc, env); + + /* processing .. elements */ + + qpolicy = axutil_qname_create(env, NEETHI_POLICY, NEETHI_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(op_element, env, qpolicy, op_node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + + if((!itr) || (!axiom_children_qname_iterator_has_next(itr, env))) + { + qpolicy = axutil_qname_create(env, NEETHI_POLICY, NEETHI_POLICY_15_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(op_element, env, qpolicy, op_node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + } + if(itr) + { + axis2_process_policy_elements(env, AXIS2_MODULE_OPERATION_POLICY, itr, policy_include); + } + + /* processing .. elements */ + qpolicy = axutil_qname_create(env, NEETHI_REFERENCE, NEETHI_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(op_element, env, qpolicy, op_node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + + if((!itr) || (!axiom_children_qname_iterator_has_next(itr, env))) + { + qpolicy = axutil_qname_create(env, NEETHI_REFERENCE, NEETHI_POLICY_15_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(op_element, env, qpolicy, op_node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + } + + if(itr) + { + axis2_process_policy_reference_elements(env, AXIS2_POLICY_REF, itr, policy_include); + } + + /* setting the mep of the operation */ + + /* loading the message receivers */ + qmsgrecv = axutil_qname_create(env, AXIS2_MESSAGERECEIVER, NULL, NULL); + recv_element = axiom_element_get_first_child_with_qname(op_element, env, qmsgrecv, op_node, + &recv_node); + if(qmsgrecv) + { + axutil_qname_free(qmsgrecv, env); + } + if(recv_element && NULL != recv_node) + { + axis2_msg_recv_t *msg_recv = NULL; + + msg_recv = axis2_desc_builder_load_msg_recv(module_builder-> desc_builder, env, + recv_element); + axis2_op_set_msg_recv(op_desc, env, msg_recv); + } + else + { + axis2_msg_recv_t *msg_recv = NULL; + /* setting default message reciver */ + msg_recv = axis2_desc_builder_load_default_msg_recv(env); + axis2_op_set_msg_recv(op_desc, env, msg_recv); + } + /* Process Module Refs */ + qmodulest = axutil_qname_create(env, AXIS2_MODULEST, NULL, NULL); + modules = axiom_element_get_children_with_qname(op_element, env, qmodulest, op_node); + if(qmodulest) + { + axutil_qname_free(qmodulest, env); + } + axis2_desc_builder_process_op_module_refs(module_builder->desc_builder, env, modules, + op_desc); + /* setting Operation phase */ + info = axis2_dep_engine_get_phases_info(axis2_desc_builder_get_dep_engine( + module_builder->desc_builder, env), env); + axis2_phases_info_set_op_phases(info, env, op_desc); + + /* adding operation */ + axutil_array_list_add(ops, env, op_desc); + } + return ops; +} + diff --git a/src/core/deployment/phases_info.c b/src/core/deployment/phases_info.c new file mode 100644 index 0000000..075fc8e --- /dev/null +++ b/src/core/deployment/phases_info.c @@ -0,0 +1,564 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct axis2_phases_info +{ + axutil_array_list_t *in_phases; + axutil_array_list_t *out_phases; + axutil_array_list_t *in_faultphases; + axutil_array_list_t *out_faultphases; + axutil_hash_t *op_in_phases; + axutil_hash_t *op_out_phases; + axutil_hash_t *op_in_faultphases; + axutil_hash_t *op_out_faultphases; + +}; + +AXIS2_EXTERN axis2_phases_info_t *AXIS2_CALL +axis2_phases_info_create( + const axutil_env_t * env) +{ + axis2_phases_info_t *phases_info = NULL; + + phases_info = (axis2_phases_info_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_phases_info_t)); + + if(!phases_info) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + memset((void *)phases_info, 0, sizeof(axis2_phases_info_t)); + phases_info->op_in_phases = axutil_hash_make(env); + phases_info->op_out_phases = axutil_hash_make(env); + phases_info->op_in_faultphases = axutil_hash_make(env); + phases_info->op_out_faultphases = axutil_hash_make(env); + + return phases_info; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_phases_info_free( + axis2_phases_info_t * phases_info, + const axutil_env_t * env) +{ + if(phases_info->in_phases) + { + axutil_array_list_free(phases_info->in_phases, env); + } + + if(phases_info->out_phases) + { + axutil_array_list_free(phases_info->out_phases, env); + } + + if(phases_info->in_faultphases) + { + axutil_array_list_free(phases_info->in_faultphases, env); + } + + if(phases_info->out_faultphases) + { + axutil_array_list_free(phases_info->out_faultphases, env); + } + + if(phases_info->op_in_phases) + { + axutil_hash_free(phases_info->op_in_phases, env); + } + + if(phases_info->op_out_phases) + { + axutil_hash_free(phases_info->op_out_phases, env); + } + + if(phases_info->op_in_faultphases) + { + axutil_hash_free(phases_info->op_in_faultphases, env); + } + + if(phases_info->op_out_faultphases) + { + axutil_hash_free(phases_info->op_out_faultphases, env); + } + + if(phases_info) + { + AXIS2_FREE(env->allocator, phases_info); + } + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phases_info_set_in_phases( + axis2_phases_info_t * phases_info, + const axutil_env_t * env, + axutil_array_list_t * in_phases) +{ + AXIS2_PARAM_CHECK(env->error, in_phases, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, phases_info, AXIS2_FAILURE); + + if(phases_info->in_phases) + { + axutil_array_list_free(phases_info->in_phases, env); + } + + phases_info->in_phases = in_phases; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phases_info_set_out_phases( + axis2_phases_info_t * phases_info, + const axutil_env_t * env, + axutil_array_list_t * out_phases) +{ + AXIS2_PARAM_CHECK(env->error, out_phases, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, phases_info, AXIS2_FAILURE); + + if(phases_info->out_phases) + { + axutil_array_list_free(phases_info->out_phases, env); + phases_info->out_phases = NULL; + } + phases_info->out_phases = out_phases; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phases_info_set_in_faultphases( + axis2_phases_info_t * phases_info, + const axutil_env_t * env, + axutil_array_list_t * in_faultphases) +{ + AXIS2_PARAM_CHECK(env->error, in_faultphases, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, phases_info, AXIS2_FAILURE); + + if(phases_info->in_faultphases) + { + axutil_array_list_free(phases_info->in_faultphases, env); + phases_info->in_faultphases = NULL; + } + phases_info->in_faultphases = in_faultphases; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phases_info_set_out_faultphases( + axis2_phases_info_t * phases_info, + const axutil_env_t * env, + axutil_array_list_t * out_faultphases) +{ + AXIS2_PARAM_CHECK(env->error, out_faultphases, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, phases_info, AXIS2_FAILURE); + + if(phases_info->out_faultphases) + { + axutil_array_list_free(phases_info->out_faultphases, env); + phases_info->out_faultphases = NULL; + } + phases_info->out_faultphases = out_faultphases; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_phases_info_get_in_phases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, phases_info, NULL); + return phases_info->in_phases; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_phases_info_get_out_phases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, phases_info, NULL); + return phases_info->out_phases; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_phases_info_get_in_faultphases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, phases_info, NULL); + return phases_info->in_faultphases; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_phases_info_get_out_faultphases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, phases_info, NULL); + return phases_info->out_faultphases; +} + +/* Here we create the operation inflow as an array list and create phases for phases defined in + * inflow of axis2.xml and add them into the array list. + */ +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_phases_info_get_op_in_phases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env) +{ + struct axis2_phase *phase = NULL; + int i = 0; + int size = 0; + axis2_char_t *phase_name = NULL; + axutil_array_list_t *op_in_phases = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, phases_info, NULL); + + op_in_phases = axutil_array_list_create(env, 0); + if(!op_in_phases) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + if(!phases_info->in_phases) + { + return op_in_phases; + } + + /* For each inflow phase name create a phase instance and add into the inflow. */ + size = axutil_array_list_size(phases_info->in_phases, env); + for(i = 0; i < size; i++) + { + phase_name = (axis2_char_t *)axutil_array_list_get(phases_info->in_phases, env, i); + + if(!axutil_strcmp(AXIS2_PHASE_TRANSPORT_IN, phase_name) || !axutil_strcmp( + AXIS2_PHASE_PRE_DISPATCH, phase_name) || !axutil_strcmp(AXIS2_PHASE_DISPATCH, + phase_name) || !axutil_strcmp(AXIS2_PHASE_POST_DISPATCH, phase_name)) + { + /* We are not concerned here with system phases. */ + } + else + { + /* This is the cause for jira AXIS2C-624. As solution I create new + * phases for each operation specific flow making the operation + * the owner of the flow and the phases contained within it*/ + /*phase = axutil_hash_get(phases_info->op_in_phases, phase_name, + AXIS2_HASH_KEY_STRING); + if(!phase) + { + phase = axis2_phase_create(env, phase_name); + axutil_hash_set(phases_info->op_in_phases, phase_name, + AXIS2_HASH_KEY_STRING, phase); + } */ + phase = axis2_phase_create(env, phase_name); + status = axutil_array_list_add(op_in_phases, env, phase); + if(AXIS2_SUCCESS != status) + { + int i = 0; + int size = 0; + + axis2_phase_free(phase, env); + phase = NULL; + size = axutil_array_list_size(op_in_phases, env); + for(i = 0; i < size; i++) + { + phase = axutil_array_list_get(op_in_phases, env, i); + axis2_phase_free(phase, env); + phase = NULL; + } + axutil_array_list_free(op_in_phases, env); + op_in_phases = NULL; + return NULL; + } + } + } + + return op_in_phases; +} + +/* Here we create the operation outflow as an array list and create phases for phases defined in + * outflow of axis2.xml and add them into the array list. + */ +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_phases_info_get_op_out_phases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env) +{ + struct axis2_phase *phase = NULL; + int i = 0; + int size = 0; + axis2_char_t *phase_name = NULL; + axutil_array_list_t *op_out_phases = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, phases_info, NULL); + + if(phases_info->out_phases) + { + size = axutil_array_list_size(phases_info->out_phases, env); + } + + op_out_phases = axutil_array_list_create(env, 0); + if(!op_out_phases) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + for(i = 0; i < size; i++) + { + phase_name = (axis2_char_t *)axutil_array_list_get(phases_info->out_phases, env, i); + + phase = axis2_phase_create(env, phase_name); + status = axutil_array_list_add(op_out_phases, env, phase); + if(AXIS2_SUCCESS != status) + { + int i = 0; + int size = 0; + + axis2_phase_free(phase, env); + phase = NULL; + size = axutil_array_list_size(op_out_phases, env); + for(i = 0; i < size; i++) + { + phase = axutil_array_list_get(op_out_phases, env, i); + axis2_phase_free(phase, env); + phase = NULL; + } + + axutil_array_list_free(op_out_phases, env); + op_out_phases = NULL; + return NULL; + } + } + + return op_out_phases; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_phases_info_get_op_in_faultphases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env) +{ + int i = 0; + int size = 0; + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *phase_name = NULL; + axutil_array_list_t *op_in_faultphases = NULL; + struct axis2_phase *phase = NULL; + + AXIS2_PARAM_CHECK(env->error, phases_info, NULL); + + if(!phases_info->in_faultphases) + { + return NULL; + } + + size = axutil_array_list_size(phases_info->in_faultphases, env); + if(0 == size) + { + return NULL; + } + + op_in_faultphases = axutil_array_list_create(env, 0); + if(!op_in_faultphases) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + for(i = 0; i < size; i++) + { + phase_name = (axis2_char_t *)axutil_array_list_get(phases_info->in_faultphases, env, i); + + phase = axis2_phase_create(env, phase_name); + status = axutil_array_list_add(op_in_faultphases, env, phase); + if(AXIS2_SUCCESS != status) + { + int i = 0; + int size = 0; + + axis2_phase_free(phase, env); + phase = NULL; + size = axutil_array_list_size(op_in_faultphases, env); + for(i = 0; i < size; i++) + { + phase = axutil_array_list_get(op_in_faultphases, env, i); + axis2_phase_free(phase, env); + phase = NULL; + } + axutil_array_list_free(op_in_faultphases, env); + op_in_faultphases = NULL; + return NULL; + + } + } + + return op_in_faultphases; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_phases_info_get_op_out_faultphases( + const axis2_phases_info_t * phases_info, + const axutil_env_t * env) +{ + int i = 0; + int size = 0; + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *phase_name = NULL; + axutil_array_list_t *op_out_faultphases = NULL; + struct axis2_phase *phase = NULL; + + AXIS2_PARAM_CHECK(env->error, phases_info, NULL); + + if(!phases_info->out_faultphases) + { + return NULL; + } + size = axutil_array_list_size(phases_info->out_faultphases, env); + + if(0 == size) + { + return NULL; + } + + op_out_faultphases = axutil_array_list_create(env, 0); + if(!op_out_faultphases) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + for(i = 0; i < size; i++) + { + phase_name = (axis2_char_t *)axutil_array_list_get(phases_info->out_faultphases, env, i); + phase = axis2_phase_create(env, phase_name); + status = axutil_array_list_add(op_out_faultphases, env, phase); + if(AXIS2_SUCCESS != status) + { + int i = 0; + int size = 0; + + axis2_phase_free(phase, env); + phase = NULL; + size = axutil_array_list_size(op_out_faultphases, env); + for(i = 0; i < size; i++) + { + phase = axutil_array_list_get(op_out_faultphases, env, i); + axis2_phase_free(phase, env); + phase = NULL; + } + axutil_array_list_free(op_out_faultphases, env); + op_out_faultphases = NULL; + return NULL; + + } + } + + return op_out_faultphases; +} + +/* + * Get user defined phase instances for each flow defined in axis2.xml in an array list and add it + * into operation. This is called service builder, module builder and service client to add phases + * into operations. + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phases_info_set_op_phases( + axis2_phases_info_t * phases_info, + const axutil_env_t * env, + axis2_op_t * op_desc) +{ + axis2_status_t status = AXIS2_FAILURE; + axutil_array_list_t *op_in_phases = NULL; + axutil_array_list_t *op_out_phases = NULL; + axutil_array_list_t *op_in_faultphases = NULL; + axutil_array_list_t *op_out_faultphases = NULL; + + AXIS2_PARAM_CHECK(env->error, op_desc, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, phases_info, AXIS2_FAILURE); + + op_in_phases = axis2_phases_info_get_op_in_phases(phases_info, env); + if(!op_in_phases) + { + status = AXIS2_ERROR_GET_STATUS_CODE(env->error); + /* op_in_phases cannot be NULL */ + return status; + } + + op_out_phases = axis2_phases_info_get_op_out_phases(phases_info, env); + if(!op_out_phases) + { + status = AXIS2_ERROR_GET_STATUS_CODE(env->error); + /* op_out_phases cannot be NULL */ + return status; + } + + op_in_faultphases = axis2_phases_info_get_op_in_faultphases(phases_info, env); + op_out_faultphases = axis2_phases_info_get_op_out_faultphases(phases_info, env); + + status = axis2_op_set_in_flow(op_desc, env, op_in_phases); + status = axis2_op_set_out_flow(op_desc, env, op_out_phases); + if(op_in_faultphases) + { + status = axis2_op_set_fault_in_flow(op_desc, env, op_in_faultphases); + } + + if(op_out_faultphases) + { + status = axis2_op_set_fault_out_flow(op_desc, env, op_out_faultphases); + } + + return status; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_phases_info_copy_flow( + const axutil_env_t * env, + const axutil_array_list_t * flow_to_copy) +{ + int size = 0, i = 0; + + axutil_array_list_t *new_flow = NULL; + if(flow_to_copy) + { + size = axutil_array_list_size((axutil_array_list_t *)flow_to_copy, env); + } + + if(size > 0) + { + new_flow = axutil_array_list_create(env, 0); + if(!new_flow) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + } + + for(i = 0; i < size; i++) + { + void *item = axutil_array_list_get((axutil_array_list_t *)flow_to_copy, env, i); + axis2_phase_increment_ref((axis2_phase_t *)item, env); + axutil_array_list_add(new_flow, env, item); + } + + return new_flow; +} + diff --git a/src/core/deployment/repos_listener.c b/src/core/deployment/repos_listener.c new file mode 100644 index 0000000..1df1325 --- /dev/null +++ b/src/core/deployment/repos_listener.c @@ -0,0 +1,398 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axis2_repos_listener +{ + + /** + * Referance to a ws info list + */ + axis2_ws_info_list_t *info_list; + + /** + * The parent directory of the modules and services directories + * that the listener should listen + */ + axis2_char_t *folder_name; + axis2_conf_t *conf; +}; + +static axis2_status_t +axis2_repos_listener_search( + axis2_repos_listener_t * repos_listener, + const axutil_env_t * env, + axis2_char_t * folder_name, + int type); + +AXIS2_EXTERN axis2_repos_listener_t *AXIS2_CALL +axis2_repos_listener_create( + const axutil_env_t * env) +{ + axis2_repos_listener_t *repos_listener = NULL; + + repos_listener = (axis2_repos_listener_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_repos_listener_t)); + + if(!repos_listener) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + repos_listener->folder_name = NULL; + repos_listener->info_list = NULL; + repos_listener->folder_name = AXIS2_FALSE; + + return repos_listener; +} + +/** + * This constructor take two argumnets, folder name and referance to + * deployment engine. Fisrt it initilize the sysetm , by loading all the + * modules in the /modules directory and also create a ws info list to + * keep info about available modules and services. + * @param folderName path to parent directory that the repos_listener + * should listens + * @param deploy_engine refearnce to engine registry inorder to + * inform the updates + */ + +AXIS2_EXTERN axis2_repos_listener_t *AXIS2_CALL +axis2_repos_listener_create_with_folder_name_and_dep_engine( + const axutil_env_t * env, + axis2_char_t * folder_name, + axis2_dep_engine_t * dep_engine) +{ + axis2_repos_listener_t *repos_listener = NULL; + axis2_status_t status = AXIS2_FAILURE; + + axis2_conf_t *conf; + axis2_bool_t file_flag; + + repos_listener = (axis2_repos_listener_t *)axis2_repos_listener_create(env); + + if(!repos_listener) + { + return NULL; + } + + file_flag = axis2_dep_engine_get_file_flag(dep_engine, env); + + if(!file_flag) + { + repos_listener->folder_name = axutil_strdup(env, folder_name); + if(!repos_listener->folder_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + } + + repos_listener->info_list = axis2_ws_info_list_create_with_dep_engine(env, dep_engine); + if(!repos_listener->info_list) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating ws info list failed"); + return NULL; + } + + /* Here dep_engine's conf will set to repo_listner. Then we could get + * details of the axis2.xml through axis2 configuration. + */ + + conf = axis2_dep_engine_get_axis_conf(dep_engine, env); + if(!conf) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Deployment engines axis2 configuration not available"); + + return NULL; + } + axis2_repos_listener_set_conf(repos_listener, env, conf); + + status = axis2_repos_listener_init(repos_listener, env); + if(AXIS2_SUCCESS != status) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_REPOS_LISTENER_INIT_FAILED, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Repository listener initialization failed"); + + return NULL; + } + return repos_listener; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_repos_listener_free( + axis2_repos_listener_t * repos_listener, + const axutil_env_t * env) +{ + if(!repos_listener) + return; + + if(repos_listener->folder_name) + { + AXIS2_FREE(env->allocator, repos_listener->folder_name); + } + + if(repos_listener->info_list) + { + axis2_ws_info_list_free(repos_listener->info_list, env); + } + + AXIS2_FREE(env->allocator, repos_listener); + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_repos_listener_check_modules( + axis2_repos_listener_t * repos_listener, + const axutil_env_t * env) +{ + axis2_char_t *module_path = NULL; + axis2_char_t *temp_path = NULL; + axis2_status_t status = AXIS2_FAILURE; + axis2_bool_t axis2_flag = AXIS2_FALSE; + axis2_conf_t *conf; + + axutil_param_t *module_param; + axis2_char_t *module_dir; + + AXIS2_PARAM_CHECK(env->error, repos_listener, AXIS2_FAILURE); + + conf = axis2_repos_listener_get_conf(repos_listener, env); + + /* Configuration is needed only to decide we are using axis2.xml. Other + * case we don't need. Hence even if conf is NULL we can continue. + */ + + if(conf) + { + axis2_flag = axis2_conf_get_axis2_flag(conf, env); + } + + if(!axis2_flag) + { + + temp_path = axutil_stracat(env, repos_listener->folder_name, AXIS2_PATH_SEP_STR); + module_path = axutil_stracat(env, temp_path, AXIS2_MODULE_PATH); + AXIS2_FREE(env->allocator, temp_path); + } + else + { + module_param = axis2_conf_get_param(conf, env, AXIS2_MODULE_DIR); + if(module_param) + { + module_dir = (axis2_char_t *)axutil_param_get_value(module_param, env); + module_path = axutil_strdup(env, module_dir); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "While creating axis2 configuration using " + "axis2.xml, modulesDir parameter not available."); + } + + } + + status = axis2_repos_listener_search(repos_listener, env, module_path, AXIS2_MODULE); + + AXIS2_FREE(env->allocator, module_path); + + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_repos_listener_check_svcs( + axis2_repos_listener_t * repos_listener, + const axutil_env_t * env) +{ + axis2_char_t *svc_path = NULL; + axis2_char_t *temp_path = NULL; + axis2_status_t status = AXIS2_FAILURE; + + axis2_conf_t *conf; + axis2_bool_t axis2_flag = AXIS2_FALSE; + + axutil_param_t *svc_param; + axis2_char_t *svc_dir; + + AXIS2_PARAM_CHECK(env->error, repos_listener, AXIS2_FAILURE); + + conf = axis2_repos_listener_get_conf(repos_listener, env); + + if(conf) + axis2_flag = axis2_conf_get_axis2_flag(conf, env); + + if(!axis2_flag) + { + temp_path = axutil_stracat(env, repos_listener->folder_name, AXIS2_PATH_SEP_STR); + svc_path = axutil_stracat(env, temp_path, AXIS2_SVC_PATH); + AXIS2_FREE(env->allocator, temp_path); + } + else + { + svc_param = axis2_conf_get_param(conf, env, AXIS2_SERVICE_DIR); + if(svc_param) + { + svc_dir = axutil_param_get_value(svc_param, env); + svc_path = axutil_strdup(env, svc_dir); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "While creating axis2 configuration using axis2.xml, servicesDir" + " parameter not available."); + } + } + + status = axis2_repos_listener_search(repos_listener, env, svc_path, AXIS2_SVC); + AXIS2_FREE(env->allocator, svc_path); + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_repos_listener_update( + axis2_repos_listener_t * repos_listener, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, repos_listener, AXIS2_FAILURE); + return axis2_ws_info_list_update(repos_listener->info_list, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_repos_listener_init( + axis2_repos_listener_t * repos_listener, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, repos_listener, AXIS2_FAILURE); + + status = axis2_ws_info_list_init(repos_listener->info_list, env); + if(AXIS2_SUCCESS != status) + { + return status; + } + /* if check_modules return AXIS2_FAILURE that means + * there are no modules to load + */ + axis2_repos_listener_check_modules(repos_listener, env); + + /* if check_svcs return AXIS2_FAILURE that means + * there are no services to load + */ + axis2_repos_listener_check_svcs(repos_listener, env); + return axis2_repos_listener_update(repos_listener, env); +} + +/** + * Folder name could be a repository modules or services folder. If it is modules + * folder then current_info_list contain the list of axis2 files corresponding to + * the modules within it. For services folder it should be understood similarly. + */ +static axis2_status_t +axis2_repos_listener_search( + axis2_repos_listener_t * repos_listener, + const axutil_env_t * env, + axis2_char_t * folder_name, + int type) +{ + int size = 0; + int i = 0; + axutil_array_list_t *current_info_list = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, repos_listener, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, folder_name, AXIS2_FAILURE); + current_info_list = axutil_dir_handler_list_service_or_module_dirs(env, folder_name); + if(!current_info_list) + { + axis2_status_t status_code = AXIS2_FAILURE; + + status_code = AXIS2_ERROR_GET_STATUS_CODE(env->error); + if(AXIS2_SUCCESS != status) + { + return status; + } + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "No %s in the folder.", folder_name); + return AXIS2_SUCCESS; + } + + size = axutil_array_list_size(current_info_list, env); + + for(i = 0; i < size; i++) /* Loop until empty */ + { + axutil_file_t *file = NULL; + file = axutil_array_list_get(current_info_list, env, i); + status = axis2_ws_info_list_add_ws_info_item(repos_listener->info_list, env, file, type); + if(AXIS2_SUCCESS != status) + { + int size_j = 0; + int j = 0; + axis2_char_t* file_name = axutil_file_get_name(file, env); + + size_j = axutil_array_list_size(current_info_list, env); + for(j = 0; j < size_j; j++) + { + axutil_file_t *del_file = NULL; + + del_file = axutil_array_list_get(current_info_list, env, j); + axutil_file_free(del_file, env); + } + axutil_array_list_free(current_info_list, env); + current_info_list = NULL; + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Adding file %s to ws info list failed", + file_name); + return status; + } + } + + for(i = 0; i < size; i++) + { + axutil_file_t *del_file = NULL; + + del_file = axutil_array_list_get(current_info_list, env, i); + axutil_file_free(del_file, env); + } + axutil_array_list_free(current_info_list, env); + current_info_list = NULL; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_repos_listener_set_conf( + axis2_repos_listener_t *repo_listener, + const axutil_env_t * env, + axis2_conf_t *conf) +{ + AXIS2_PARAM_CHECK(env->error, repo_listener, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE); + repo_listener->conf = conf; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_conf_t *AXIS2_CALL +axis2_repos_listener_get_conf( + axis2_repos_listener_t *repo_listener, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, repo_listener, NULL); + return repo_listener->conf; +} + diff --git a/src/core/deployment/svc_builder.c b/src/core/deployment/svc_builder.c new file mode 100644 index 0000000..7f55fb6 --- /dev/null +++ b/src/core/deployment/svc_builder.c @@ -0,0 +1,840 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +struct axis2_svc_builder +{ + axis2_svc_t *svc; + struct axis2_desc_builder *desc_builder; +}; + +static axutil_array_list_t * +axis2_svc_builder_process_ops( + axis2_svc_builder_t * svc_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * op_itr); + +static void +axis2_svc_builder_process_msgs( + axis2_svc_builder_t * svc_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * iterator, + axis2_op_t * op); + +AXIS2_EXTERN axis2_svc_builder_t *AXIS2_CALL +axis2_svc_builder_create( + const axutil_env_t * env) +{ + axis2_svc_builder_t *svc_builder = NULL; + + svc_builder = (axis2_svc_builder_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_builder_t)); + + if(!svc_builder) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Allocation to svc_builder failed"); + return NULL; + } + + svc_builder->desc_builder = NULL; + svc_builder->svc = NULL; + + return svc_builder; +} + +AXIS2_EXTERN axis2_svc_builder_t *AXIS2_CALL +axis2_svc_builder_create_with_file_and_dep_engine_and_svc( + const axutil_env_t * env, + axis2_char_t * file_name, + struct axis2_dep_engine * dep_engine, + axis2_svc_t * svc) +{ + axis2_svc_builder_t *svc_builder = NULL; + + AXIS2_PARAM_CHECK(env->error, file_name, NULL); + AXIS2_PARAM_CHECK(env->error, dep_engine, NULL); + AXIS2_PARAM_CHECK(env->error, svc, NULL); + svc_builder = (axis2_svc_builder_t *)axis2_svc_builder_create(env); + if(!svc_builder) + { + return NULL; + } + svc_builder->desc_builder = axis2_desc_builder_create_with_file_and_dep_engine(env, file_name, + dep_engine); + if(!svc_builder->desc_builder) + { + axis2_svc_builder_free(svc_builder, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating description builder for service builder %s failed", file_name); + return NULL; + } + svc_builder->svc = svc; + return svc_builder; +} + +AXIS2_EXTERN axis2_svc_builder_t *AXIS2_CALL +axis2_svc_builder_create_with_dep_engine_and_svc( + const axutil_env_t * env, + axis2_dep_engine_t * dep_engine, + axis2_svc_t * svc) +{ + axis2_svc_builder_t *svc_builder = NULL; + + AXIS2_PARAM_CHECK(env->error, dep_engine, NULL); + AXIS2_PARAM_CHECK(env->error, svc, NULL); + svc_builder = (axis2_svc_builder_t *)axis2_svc_builder_create(env); + if(!svc_builder) + { + return NULL; + } + svc_builder->desc_builder = axis2_desc_builder_create_with_dep_engine(env, dep_engine); + if(!svc_builder->desc_builder) + { + axis2_svc_builder_free(svc_builder, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating description builder for service builder failed"); + return NULL; + } + svc_builder->svc = svc; + return svc_builder; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_svc_builder_free( + axis2_svc_builder_t * svc_builder, + const axutil_env_t * env) +{ + if(svc_builder->desc_builder) + { + axis2_desc_builder_free(svc_builder->desc_builder, env); + } + + svc_builder->svc = NULL; + + if(svc_builder) + { + AXIS2_FREE(env->allocator, svc_builder); + } + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_builder_populate_svc( + axis2_svc_builder_t * svc_builder, + const axutil_env_t * env, + axiom_node_t * svc_node) +{ + axiom_element_t *svc_element = NULL; + axiom_children_qname_iterator_t *itr = NULL; + axiom_children_qname_iterator_t *operation_itr = NULL; + axutil_qname_t *qparamst = NULL; + axutil_qname_t *qdesc = NULL; + axutil_qname_t *qmodulest = NULL; + axutil_qname_t *qinflowst = NULL; + axutil_qname_t *qoutflowst = NULL; + axutil_qname_t *qin_faultflowst = NULL; + axutil_qname_t *qout_faultflowst = NULL; + axutil_qname_t *qopst = NULL; + axutil_qname_t *qattname = NULL; + axutil_qname_t *qpolicy = NULL; + axis2_status_t status = AXIS2_FAILURE; + axis2_svc_grp_t *parent = NULL; + axiom_element_t *desc_element = NULL; + axiom_node_t *desc_node = NULL; + axiom_children_qname_iterator_t *module_refs = NULL; + axiom_node_t *in_flow_node = NULL; + axiom_element_t *in_flow_element = NULL; + axiom_node_t *out_flow_node = NULL; + axiom_element_t *out_flow_element = NULL; + axiom_node_t *in_faultflow_node = NULL; + axiom_element_t *in_faultflow_element = NULL; + axiom_node_t *out_faultflow_node = NULL; + axiom_element_t *out_faultflow_element = NULL; + axiom_attribute_t *name_attr = NULL; + axutil_array_list_t *ops = NULL; + axis2_char_t *svc_name = NULL; + axis2_char_t *class_name = NULL; + axis2_char_t *svc_dll_name = NULL; + axutil_dll_desc_t *dll_desc = NULL; + axutil_param_t *impl_info_param = NULL; + axutil_param_t *wsdl_path_param = NULL; + axis2_char_t *wsdl_path = NULL; + axis2_arch_file_data_t *arch_file_data = NULL; + axutil_file_t *svc_folder = NULL; + axis2_char_t *dll_path = NULL; + axis2_char_t *svc_folder_path = NULL; + int i = 0; + int size = 0; + AXIS2_TIME_T timestamp = 0; + axis2_desc_t *desc = NULL; + axis2_policy_include_t *policy_include = NULL; + axutil_qname_t *qname_addressing = NULL; + axis2_bool_t addressing_engaged = AXIS2_FALSE; + axutil_array_list_t *svc_module_qnames = NULL; + int svc_module_qname_size = 0; + + AXIS2_PARAM_CHECK(env->error, svc_node, AXIS2_FAILURE); + + svc_element = axiom_node_get_data_element(svc_node, env); + /* Processing service level paramters */ + qparamst = axutil_qname_create(env, AXIS2_PARAMETERST, NULL, NULL); + if(!qparamst) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return AXIS2_FAILURE; + } + itr = axiom_element_get_children_with_qname(svc_element, env, qparamst, svc_node); + axutil_qname_free(qparamst, env); + qparamst = NULL; + + parent = axis2_svc_get_parent(svc_builder->svc, env); + + desc = axis2_svc_get_base(svc_builder->svc, env); + policy_include = axis2_desc_get_policy_include(desc, env); + + status = axis2_desc_builder_process_params(svc_builder->desc_builder, env, itr, + axis2_svc_get_param_container(svc_builder->svc, env), axis2_svc_grp_get_param_container( + parent, env)); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Processing parameters failed"); + return status; + } + + /* process service description */ + qdesc = axutil_qname_create(env, AXIS2_DESCRIPTION, NULL, NULL); + desc_element = axiom_element_get_first_child_with_qname(svc_element, env, qdesc, svc_node, + &desc_node); + axutil_qname_free(qdesc, env); + qdesc = NULL; + if(desc_element) + { + axiom_element_t *desc_value_element = NULL; + axiom_node_t *desc_value_node = NULL; + axis2_char_t *description_text = NULL; + + desc_value_element = axiom_element_get_first_element(desc_element, env, desc_node, + &desc_value_node); + description_text = axiom_element_get_text(desc_element, env, desc_node); + if(description_text) + { + axis2_svc_set_svc_desc(svc_builder->svc, env, description_text); + } + } + + /* wsdl path */ + wsdl_path_param = axutil_param_container_get_param(axis2_svc_get_param_container( + svc_builder->svc, env), env, AXIS2_SVC_WSDL_PATH); + + if(wsdl_path_param) + { + wsdl_path = axutil_param_get_value(wsdl_path_param, env); + } + + if(wsdl_path) + { + axis2_svc_set_svc_wsdl_path(svc_builder->svc, env, wsdl_path); + } + + qattname = axutil_qname_create(env, AXIS2_ATTNAME, NULL, NULL); + name_attr = axiom_element_get_attribute(svc_element, env, qattname); + svc_name = axiom_attribute_get_value(name_attr, env); + axis2_svc_set_name(svc_builder->svc, env, svc_name); + axutil_qname_free(qattname, env); + + /* create dll_desc and set it in a parameter. then set that param in param + * container taken from svc + */ + dll_desc = axutil_dll_desc_create(env); + impl_info_param = axutil_param_container_get_param(axis2_svc_get_param_container( + svc_builder->svc, env), env, AXIS2_SERVICE_CLASS); + if(!impl_info_param) + { + axutil_dll_desc_free(dll_desc, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "%s parameter not found", AXIS2_SERVICE_CLASS); + return AXIS2_FAILURE; + } + class_name = axutil_strtrim(env, axutil_param_get_value(impl_info_param, env), NULL); + svc_dll_name = axutil_dll_desc_create_platform_specific_dll_name(dll_desc, env, class_name); + + if(class_name) + { + AXIS2_FREE(env->allocator, class_name); + class_name = NULL; + } + + arch_file_data = axis2_dep_engine_get_current_file_item(axis2_desc_builder_get_dep_engine( + svc_builder->desc_builder, env), env); + svc_folder = axis2_arch_file_data_get_file(arch_file_data, env); + timestamp = axutil_file_get_timestamp(svc_folder, env); + axutil_dll_desc_set_timestamp(dll_desc, env, timestamp); + svc_folder_path = axutil_file_get_path(svc_folder, env); + axis2_svc_set_svc_folder_path(svc_builder->svc, env, svc_folder_path); + dll_path = axutil_strcat(env, svc_folder_path, AXIS2_PATH_SEP_STR, svc_dll_name, NULL); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "DLL path is : %s", dll_path); + status = axutil_dll_desc_set_name(dll_desc, env, dll_path); + if(AXIS2_SUCCESS != status) + { + axutil_dll_desc_free(dll_desc, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting name to %s dll description failed", + dll_path); + return status; + } + AXIS2_FREE(env->allocator, dll_path); + dll_path = NULL; + + axutil_dll_desc_set_type(dll_desc, env, AXIS2_SVC_DLL); + status = axutil_param_set_value(impl_info_param, env, dll_desc); + axutil_param_set_value_free(impl_info_param, env, axutil_dll_desc_free_void_arg); + if(AXIS2_SUCCESS != status) + { + axutil_dll_desc_free(dll_desc, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting dll_desc to parameter %s failed", + class_name); + return status; + } + /* processing service wide modules which required to engage globally */ + qmodulest = axutil_qname_create(env, AXIS2_MODULEST, NULL, NULL); + module_refs = axiom_element_get_children_with_qname(svc_element, env, qmodulest, svc_node); + axutil_qname_free(qmodulest, env); + qmodulest = NULL; + status = axis2_svc_builder_process_module_refs(svc_builder, env, module_refs); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Processing module references failed"); + return status; + } + + if(!addressing_engaged) + { + svc_module_qnames = axis2_svc_get_all_module_qnames(svc_builder->svc, env); + if(svc_module_qnames) + { + svc_module_qname_size = axutil_array_list_size(svc_module_qnames, env); + qname_addressing = axutil_qname_create(env, AXIS2_MODULE_ADDRESSING, NULL, NULL); + for(i = 0; i < svc_module_qname_size; i++) + { + if(axutil_qname_equals(axutil_array_list_get(svc_module_qnames, env, i), env, + qname_addressing)) + { + addressing_engaged = AXIS2_TRUE; + break; + } + } + axutil_qname_free(qname_addressing, env); + } + svc_module_qnames = NULL; + } + + /* process IN_FLOW */ + qinflowst = axutil_qname_create(env, AXIS2_IN_FLOW_START, NULL, NULL); + in_flow_element = axiom_element_get_first_child_with_qname( + svc_element, env, qinflowst, svc_node, &in_flow_node); + axutil_qname_free(qinflowst, env); + qinflowst = NULL; + + qoutflowst = axutil_qname_create(env, AXIS2_OUT_FLOW_START, NULL, NULL); + out_flow_element = axiom_element_get_first_child_with_qname( + svc_element, env, qoutflowst, svc_node, &out_flow_node); + axutil_qname_free(qoutflowst, env); + qoutflowst = NULL; + + qin_faultflowst = axutil_qname_create(env, AXIS2_IN_FAILTFLOW, NULL, NULL); + in_faultflow_element = axiom_element_get_first_child_with_qname( + svc_element, env, qin_faultflowst, svc_node, &in_faultflow_node); + axutil_qname_free(qin_faultflowst, env); + qin_faultflowst = NULL; + + qout_faultflowst = axutil_qname_create(env, AXIS2_OUT_FAILTFLOW, NULL, NULL); + out_faultflow_element = axiom_element_get_first_child_with_qname( + svc_element, env, qout_faultflowst, svc_node, &out_faultflow_node); + axutil_qname_free(qout_faultflowst, env); + qout_faultflowst = NULL; + + /* processing operations */ + qopst = axutil_qname_create(env, AXIS2_OPERATIONST, NULL, NULL); + operation_itr = axiom_element_get_children_with_qname(svc_element, env, qopst, svc_node); + axutil_qname_free(qopst, env); + qopst = NULL; + ops = axis2_svc_builder_process_ops(svc_builder, env, operation_itr); + if(ops) + { + size = axutil_array_list_size(ops, env); + } + for(i = 0; i < size; i++) + { + axis2_op_t *op_desc = NULL; + axutil_array_list_t *params = NULL; + int j = 0; + int sizej = 0; + + op_desc = (axis2_op_t *)axutil_array_list_get(ops, env, i); + if(addressing_engaged) + { + params = axis2_op_get_all_params(op_desc, env); + /* Adding wsa-mapping into service */ + sizej = axutil_array_list_size(params, env); + for(j = 0; j < sizej; j++) + { + axutil_param_t *param = NULL; + axis2_char_t *param_name = NULL; + + param = axutil_array_list_get(params, env, j); + param_name = axutil_param_get_name(param, env); + if(0 == axutil_strcmp(param_name, AXIS2_WSA_MAPPING)) + { + axis2_char_t *key = NULL; + + key = (axis2_char_t *)axutil_param_get_value(param, env); + axis2_svc_add_mapping(svc_builder->svc, env, key, op_desc); + } + } + } + axis2_svc_add_op(svc_builder->svc, env, op_desc); + if(axis2_op_get_rest_http_method(op_desc, env) && axis2_op_get_rest_http_location(op_desc, + env)) + { + axis2_svc_add_rest_mapping(svc_builder->svc, env, axis2_op_get_rest_http_method( + op_desc, env), axis2_op_get_rest_http_location(op_desc, env), op_desc); + } + } + axutil_array_list_free(ops, env); + + /* + + setting the PolicyInclude + processing .. elements + */ + qpolicy = axutil_qname_create(env, NEETHI_POLICY, NEETHI_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(svc_element, env, qpolicy, svc_node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + if((!itr) || (!axiom_children_qname_iterator_has_next(itr, env))) + { + qpolicy = axutil_qname_create(env, NEETHI_POLICY, NEETHI_POLICY_15_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(svc_element, env, qpolicy, svc_node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + } + + if(itr) + { + axis2_process_policy_elements(env, AXIS2_SERVICE_POLICY, itr, policy_include); + } + + /* processing .. elements */ + qpolicy = axutil_qname_create(env, NEETHI_REFERENCE, NEETHI_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(svc_element, env, qpolicy, svc_node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + + if((!itr) || (!axiom_children_qname_iterator_has_next(itr, env))) + { + qpolicy = axutil_qname_create(env, NEETHI_REFERENCE, NEETHI_POLICY_15_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(svc_element, env, qpolicy, svc_node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + } + if(itr) + { + axis2_process_policy_reference_elements(env, AXIS2_POLICY_REF, itr, policy_include); + } + + return AXIS2_SUCCESS; +} + +static axutil_array_list_t * +axis2_svc_builder_process_ops( + axis2_svc_builder_t * svc_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * op_itr) +{ + axutil_array_list_t *ops = NULL; + + AXIS2_PARAM_CHECK(env->error, op_itr, NULL); + + ops = axutil_array_list_create(env, 0); + while(AXIS2_TRUE == axiom_children_qname_iterator_has_next(op_itr, env)) + { + axiom_element_t *op_element = NULL; + axiom_node_t *op_node = NULL; + axiom_attribute_t *op_name_att = NULL; + axiom_attribute_t *op_mep_att = NULL; + axutil_qname_t *qmep = NULL; + axutil_qname_t *qopname = NULL; + axutil_qname_t *qparamst = NULL; + axutil_qname_t *qmsgrecv = NULL; + axutil_qname_t *qmodulest = NULL; + axutil_qname_t *qattname = NULL; + axis2_char_t *mep_url = NULL; + axis2_char_t *op_name = NULL; + axis2_op_t *op_desc = NULL; + axiom_children_qname_iterator_t *params_itr = NULL; + axiom_children_qname_iterator_t *module_itr = NULL; + axiom_element_t *recv_element = NULL; + axiom_node_t *recv_node = NULL; + axis2_status_t status = AXIS2_FAILURE; + struct axis2_dep_engine *dep_engine = NULL; + axis2_desc_t *desc = NULL; + axis2_policy_include_t *policy_include = NULL; + axiom_children_qname_iterator_t *itr = NULL; + axutil_qname_t *qpolicy = NULL; + axutil_qname_t *qmessage = NULL; + + op_node = axiom_children_qname_iterator_next(op_itr, env); + /* getting operation name */ + op_element = axiom_node_get_data_element(op_node, env); + qattname = axutil_qname_create(env, AXIS2_ATTNAME, NULL, NULL); + op_name_att = axiom_element_get_attribute(op_element, env, qattname); + axutil_qname_free(qattname, env); + qattname = NULL; + if(!op_name_att) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_OP_NAME_MISSING, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, ""); + return NULL; + } + + op_name = axiom_attribute_get_value(op_name_att, env); + qopname = axutil_qname_create(env, op_name, NULL, NULL); + op_desc = axis2_op_create(env); + axis2_op_set_qname(op_desc, env, qopname); + axutil_qname_free(qopname, env); + qopname = NULL; + + /* set the mep of the operation */ + qmep = axutil_qname_create(env, AXIS2_MEP, NULL, NULL); + op_mep_att = axiom_element_get_attribute(op_element, env, qmep); + axutil_qname_free(qmep, env); + qmep = NULL; + op_name = axiom_attribute_get_value(op_name_att, env); + + if(op_mep_att) + { + mep_url = axiom_attribute_get_value(op_mep_att, env); + if(mep_url) + { + axis2_op_set_msg_exchange_pattern(op_desc, env, mep_url); + } + } + + desc = axis2_op_get_base(op_desc, env); + policy_include = axis2_desc_get_policy_include(desc, env); + + /* operation parameters */ + qparamst = axutil_qname_create(env, AXIS2_PARAMETERST, NULL, NULL); + params_itr = axiom_element_get_children_with_qname(op_element, env, qparamst, op_node); + axutil_qname_free(qparamst, env); + qparamst = NULL; + status = axis2_desc_builder_process_params(svc_builder->desc_builder, env, params_itr, + axis2_op_get_param_container(op_desc, env), axis2_svc_get_param_container( + svc_builder->svc, env)); + /* To process wsamapping */ + axis2_desc_builder_process_action_mappings(svc_builder->desc_builder, env, op_node, op_desc); + + /* To process REST params */ + axis2_desc_builder_process_rest_params(svc_builder->desc_builder, env, op_node, op_desc); + + /* loading the message receivers */ + qmsgrecv = axutil_qname_create(env, AXIS2_MESSAGERECEIVER, NULL, NULL); + recv_element = axiom_element_get_first_child_with_qname(op_element, env, qmsgrecv, op_node, + &recv_node); + axutil_qname_free(qmsgrecv, env); + qmsgrecv = NULL; + if(recv_element && NULL != recv_node) + { + axis2_msg_recv_t *msg_recv = NULL; + msg_recv = axis2_desc_builder_load_msg_recv(svc_builder->desc_builder, env, + recv_element); + axis2_op_set_msg_recv(op_desc, env, msg_recv); + + } + else + { + axis2_msg_recv_t *msg_recv = NULL; + /* setting the default message receiver */ + msg_recv = axis2_desc_builder_load_default_msg_recv(env); + axis2_op_set_msg_recv(op_desc, env, msg_recv); + } + /* process module refs */ + qmodulest = axutil_qname_create(env, AXIS2_MODULEST, NULL, NULL); + module_itr = axiom_element_get_children_with_qname(op_element, env, qmodulest, op_node); + axutil_qname_free(qmodulest, env); + qmodulest = NULL; + status = axis2_desc_builder_process_op_module_refs(svc_builder-> desc_builder, env, + module_itr, op_desc); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Processing module operation references failed for operation %s", op_name); + return NULL; + } + + /* setting the policy_include */ + + /* processing .. elements */ + + qpolicy = axutil_qname_create(env, NEETHI_POLICY, NEETHI_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(op_element, env, qpolicy, op_node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + + if((!itr) || (!axiom_children_qname_iterator_has_next(itr, env))) + { + qpolicy = axutil_qname_create(env, NEETHI_POLICY, NEETHI_POLICY_15_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(op_element, env, qpolicy, op_node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + } + + if(itr) + { + axis2_process_policy_elements(env, AXIS2_SERVICE_POLICY, itr, policy_include); + } + + /* processing .. elements */ + qpolicy = axutil_qname_create(env, NEETHI_REFERENCE, NEETHI_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(op_element, env, qpolicy, op_node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + + if((!itr) || (!axiom_children_qname_iterator_has_next(itr, env))) + { + qpolicy = axutil_qname_create(env, NEETHI_REFERENCE, NEETHI_POLICY_15_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(op_element, env, qpolicy, op_node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + } + + if(itr) + { + axis2_process_policy_reference_elements(env, AXIS2_POLICY_REF, itr, policy_include); + } + + qmessage = axutil_qname_create(env, AXIS2_MESSAGE, NULL, NULL); + itr = axiom_element_get_children_with_qname(op_element, env, qmessage, op_node); + axutil_qname_free(qmessage, env); + qmessage = NULL; + + if(itr) + { + axis2_svc_builder_process_msgs(svc_builder, env, itr, op_desc); + } + + /* setting operation phase */ + dep_engine = axis2_desc_builder_get_dep_engine(svc_builder->desc_builder, env); + if(dep_engine) + { + axis2_phases_info_t *info = axis2_dep_engine_get_phases_info(dep_engine, env); + axis2_phases_info_set_op_phases(info, env, op_desc); + } + + /* adding operation */ + status = axutil_array_list_add(ops, env, op_desc); + } + + return ops; +} + +static void +axis2_svc_builder_process_msgs( + axis2_svc_builder_t * svc_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * iterator, + axis2_op_t * op) +{ + while(axiom_children_qname_iterator_has_next(iterator, env)) + { + axiom_node_t *node = NULL; + axiom_element_t *element = NULL; + axutil_qname_t *qname = NULL; + axis2_char_t *msg_label = NULL; + axis2_msg_t *msg = NULL; + axiom_children_qname_iterator_t *itr = NULL; + axutil_qname_t *qpolicy = NULL; + axis2_desc_t *desc = NULL; + axis2_policy_include_t *policy_include = NULL; + + node = axiom_children_qname_iterator_next(iterator, env); + element = axiom_node_get_data_element(node, env); + qname = axutil_qname_create(env, AXIS2_LABEL, NULL, NULL); + + if(element) + { + msg_label = axiom_element_get_attribute_value(element, env, qname); + } + + if(msg_label) + { + msg = axis2_op_get_msg(op, env, msg_label); + } + + if(msg) + { + /* operation parameters */ + axiom_children_qname_iterator_t *params_itr = NULL; + axutil_qname_t *qparamst = NULL; + qparamst = axutil_qname_create(env, AXIS2_PARAMETERST, NULL, NULL); + params_itr = axiom_element_get_children_with_qname(element, env, qparamst, node); + axutil_qname_free(qparamst, env); + qparamst = NULL; + axis2_desc_builder_process_params(svc_builder->desc_builder, env, params_itr, + axis2_msg_get_param_container(msg, env), axis2_op_get_param_container(op, env)); + + desc = axis2_msg_get_base(msg, env); + policy_include = axis2_desc_get_policy_include(desc, env); + + /* setting the policy_include */ + + /* processing .. elements */ + + qpolicy = axutil_qname_create(env, NEETHI_POLICY, NEETHI_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(element, env, qpolicy, node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + + if((!itr) || (!axiom_children_qname_iterator_has_next(itr, env))) + { + qpolicy = axutil_qname_create(env, NEETHI_POLICY, NEETHI_POLICY_15_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(element, env, qpolicy, node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + } + + if(itr) + { + axis2_process_policy_elements(env, AXIS2_SERVICE_POLICY, itr, policy_include); + /* axis2_process_policy_elements(env, AXIS2_MESSAGE_POLICY, itr, + policy_include); */ + + } + + /* processing .. elements */ + qpolicy = axutil_qname_create(env, NEETHI_REFERENCE, NEETHI_NAMESPACE, NULL); + itr = axiom_element_get_children_with_qname(element, env, qpolicy, node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + + if((!itr) || (!axiom_children_qname_iterator_has_next(itr, env))) + { + qpolicy = axutil_qname_create(env, NEETHI_REFERENCE, NEETHI_POLICY_15_NAMESPACE, + NULL); + itr = axiom_element_get_children_with_qname(element, env, qpolicy, node); + axutil_qname_free(qpolicy, env); + qpolicy = NULL; + } + + if(itr) + { + axis2_process_policy_reference_elements(env, AXIS2_POLICY_REF, itr, policy_include); + } + } + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_builder_process_svc_module_conf( + axis2_svc_builder_t * svc_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * module_confs, + axutil_param_container_t * parent, + axis2_svc_t * svc) +{ + while(axiom_children_qname_iterator_has_next(module_confs, env)) + { + axiom_element_t *module_conf_element = NULL; + axiom_node_t *module_conf_node = NULL; + axiom_attribute_t *module_name_att = NULL; + axutil_qname_t *qattname = NULL; + + module_conf_node = axiom_children_qname_iterator_next(module_confs, env); + module_conf_element = axiom_node_get_data_element(module_conf_node, env); + qattname = axutil_qname_create(env, AXIS2_ATTNAME, NULL, NULL); + module_name_att = axiom_element_get_attribute(module_conf_element, env, qattname); + axutil_qname_free(qattname, env); + qattname = NULL; + if(!module_name_att) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MODULE_CONF, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Module name attribute not found for module node"); + return AXIS2_FAILURE; + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_builder_process_module_refs( + axis2_svc_builder_t * svc_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * module_refs) +{ + AXIS2_PARAM_CHECK(env->error, module_refs, AXIS2_FAILURE); + + while(axiom_children_qname_iterator_has_next(module_refs, env)) + { + axiom_element_t *module_ref_element = NULL; + axiom_node_t *module_ref_node = NULL; + axiom_attribute_t *module_ref_att = NULL; + axutil_qname_t *qref = NULL; + + module_ref_node = axiom_children_qname_iterator_next(module_refs, env); + module_ref_element = axiom_node_get_data_element(module_ref_node, env); + qref = axutil_qname_create(env, AXIS2_REF, NULL, NULL); + module_ref_att = axiom_element_get_attribute(module_ref_element, env, qref); + axutil_qname_free(qref, env); + if(module_ref_att) + { + axis2_char_t *ref_name = NULL; + axutil_qname_t *qrefname = NULL; + + ref_name = axiom_attribute_get_value(module_ref_att, env); + qrefname = axutil_qname_create(env, ref_name, NULL, NULL); + if(!axis2_dep_engine_get_module(axis2_desc_builder_get_dep_engine( + svc_builder->desc_builder, env), env, qrefname)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MODULE_NOT_FOUND, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Unable to find " + "Module %s, in Service %s", ref_name, axis2_svc_get_name(svc_builder->svc, env)); + return AXIS2_FAILURE; + } + else + { + axis2_svc_add_module_qname(svc_builder->svc, env, qrefname); + } + axutil_qname_free(qrefname, env); + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN struct axis2_desc_builder *AXIS2_CALL +axis2_svc_builder_get_desc_builder( + const axis2_svc_builder_t * svc_builder, + const axutil_env_t * env) +{ + return svc_builder->desc_builder; +} + diff --git a/src/core/deployment/svc_grp_builder.c b/src/core/deployment/svc_grp_builder.c new file mode 100644 index 0000000..6aa07ad --- /dev/null +++ b/src/core/deployment/svc_grp_builder.c @@ -0,0 +1,264 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct axis2_svc_grp_builder +{ + axiom_node_t *svc_grp; + axis2_desc_builder_t *desc_builder; +}; + +AXIS2_EXTERN axis2_svc_grp_builder_t *AXIS2_CALL +axis2_svc_grp_builder_create( + const axutil_env_t * env) +{ + axis2_svc_grp_builder_t *svc_grp_builder = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + svc_grp_builder = (axis2_svc_grp_builder_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_svc_grp_builder_t)); + + if(!svc_grp_builder) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + svc_grp_builder->svc_grp = NULL; + svc_grp_builder->desc_builder = NULL; + + return svc_grp_builder; +} + +AXIS2_EXTERN axis2_svc_grp_builder_t *AXIS2_CALL +axis2_svc_grp_builder_create_with_svc_and_dep_engine( + const axutil_env_t * env, + axiom_node_t * svc_grp, + axis2_dep_engine_t * dep_engine) +{ + axis2_svc_grp_builder_t *svc_grp_builder = NULL; + + svc_grp_builder = (axis2_svc_grp_builder_t *)axis2_svc_grp_builder_create(env); + if(!svc_grp_builder) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + svc_grp_builder = NULL; + } + svc_grp_builder->desc_builder = axis2_desc_builder_create_with_dep_engine(env, dep_engine); + if(!svc_grp_builder->desc_builder) + { + axis2_svc_grp_builder_free(svc_grp_builder, env); + return NULL; + } + svc_grp_builder->svc_grp = svc_grp; + + return svc_grp_builder; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_svc_grp_builder_free( + axis2_svc_grp_builder_t * svc_grp_builder, + const axutil_env_t * env) +{ + if(svc_grp_builder->desc_builder) + { + axis2_desc_builder_free(svc_grp_builder->desc_builder, env); + } + if(svc_grp_builder) + { + AXIS2_FREE(env->allocator, svc_grp_builder); + } + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_grp_builder_populate_svc_grp( + axis2_svc_grp_builder_t * svc_grp_builder, + const axutil_env_t * env, + axis2_svc_grp_t * svc_grp) +{ + axiom_children_qname_iterator_t *itr = NULL; + axiom_children_qname_iterator_t *module_ref_itr = NULL; + axiom_children_qname_iterator_t *svc_itr = NULL; + axutil_qname_t *qparamst = NULL; + axutil_qname_t *qmodulest = NULL; + axutil_qname_t *qsvc_element = NULL; + axiom_element_t *svc_grp_element = NULL; + axis2_status_t status = AXIS2_FAILURE; + axis2_conf_t *parent = NULL; + + /* Processing service level paramters */ + svc_grp_element = axiom_node_get_data_element(svc_grp_builder->svc_grp, env); + qparamst = axutil_qname_create(env, AXIS2_PARAMETERST, NULL, NULL); + + itr = axiom_element_get_children_with_qname(svc_grp_element, env, qparamst, + svc_grp_builder->svc_grp); + + if(qparamst) + { + axutil_qname_free(qparamst, env); + qparamst = NULL; + } + + parent = axis2_svc_grp_get_parent(svc_grp, env); + status = axis2_desc_builder_process_params(svc_grp_builder->desc_builder, env, itr, + axis2_svc_grp_get_param_container(svc_grp, env), + axis2_conf_get_param_container(parent, env)); + + /* Processing service modules required to be engaged globally */ + qmodulest = axutil_qname_create(env, AXIS2_MODULEST, NULL, NULL); + module_ref_itr = axiom_element_get_children_with_qname(svc_grp_element, env, qmodulest, + svc_grp_builder-> svc_grp); + + if(qmodulest) + { + axutil_qname_free(qmodulest, env); + qmodulest = NULL; + } + + axis2_svc_grp_builder_process_module_refs(svc_grp_builder, env, module_ref_itr, svc_grp); + qsvc_element = axutil_qname_create(env, AXIS2_SVC_ELEMENT, NULL, NULL); + svc_itr = axiom_element_get_children_with_qname(svc_grp_element, env, qsvc_element, + svc_grp_builder->svc_grp); + + if(qsvc_element) + { + axutil_qname_free(qsvc_element, env); + qsvc_element = NULL; + } + + while(axiom_children_qname_iterator_has_next(svc_itr, env)) + { + axiom_node_t *svc_node = NULL; + axiom_element_t *svc_element = NULL; + axiom_attribute_t *svc_name_att = NULL; + axis2_char_t *svc_name = NULL; + axutil_qname_t *qattname = NULL; + + svc_node = (axiom_node_t *)axiom_children_qname_iterator_next(svc_itr, env); + svc_element = axiom_node_get_data_element(svc_node, env); + qattname = axutil_qname_create(env, AXIS2_ATTNAME, NULL, NULL); + svc_name_att = axiom_element_get_attribute(svc_element, env, qattname); + + if(qattname) + { + axutil_qname_free(qattname, env); + qattname = NULL; + } + + svc_name = axiom_attribute_get_value(svc_name_att, env); + if(!svc_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_NAME_ERROR, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service name attribute has no value"); + return AXIS2_FAILURE; + } + else + { + axis2_svc_t *axis_svc = NULL; + axis2_arch_file_data_t *file_data = NULL; + axutil_array_list_t *deployable_svcs = NULL; + axis2_svc_builder_t *svc_builder = NULL; + + file_data = axis2_dep_engine_get_current_file_item(axis2_desc_builder_get_dep_engine( + svc_grp_builder->desc_builder, env), env); + axis_svc = axis2_arch_file_data_get_svc(file_data, env, svc_name); + if(!axis_svc) + { + axutil_qname_t *qsvc_name = NULL; + + qsvc_name = axutil_qname_create(env, svc_name, NULL, NULL); + axis_svc = axis2_svc_create_with_qname(env, qsvc_name); + axutil_qname_free(qsvc_name, env); + axis2_arch_file_data_add_svc(file_data, env, axis_svc); + + } + /* Adding service to the deployable services list */ + deployable_svcs = axis2_arch_file_data_get_deployable_svcs(file_data, env); + axutil_array_list_add(deployable_svcs, env, axis_svc); + axis2_svc_set_parent(axis_svc, env, svc_grp); + svc_builder = axis2_svc_builder_create_with_dep_engine_and_svc(env, + axis2_desc_builder_get_dep_engine(svc_grp_builder-> desc_builder, env), axis_svc); + status = axis2_svc_builder_populate_svc(svc_builder, env, svc_node); + axis2_svc_builder_free(svc_builder, env); + + } + } + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_grp_builder_process_module_refs( + axis2_svc_grp_builder_t * svc_grp_builder, + const axutil_env_t * env, + axiom_children_qname_iterator_t * module_refs, + axis2_svc_grp_t * svc_grp) +{ + AXIS2_PARAM_CHECK(env->error, module_refs, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, svc_grp, AXIS2_FAILURE); + + while(axiom_children_qname_iterator_has_next(module_refs, env)) + { + axiom_node_t *module_ref_node = NULL; + axiom_element_t *module_ref_element = NULL; + axiom_attribute_t *module_ref_att = NULL; + axutil_qname_t *qref = NULL; + + module_ref_node = (axiom_node_t *)axiom_children_qname_iterator_next(module_refs, env); + module_ref_element = axiom_node_get_data_element(module_ref_node, env); + qref = axutil_qname_create(env, AXIS2_REF, NULL, NULL); + module_ref_att = axiom_element_get_attribute(module_ref_element, env, qref); + if(module_ref_att) + { + axis2_char_t *ref_name = NULL; + axutil_qname_t *qrefname = NULL; + axis2_module_desc_t *module = NULL; + + ref_name = axiom_attribute_get_value(module_ref_att, env); + qrefname = axutil_qname_create(env, ref_name, NULL, NULL); + module = axis2_dep_engine_get_module(axis2_desc_builder_get_dep_engine( + svc_grp_builder->desc_builder, env), env, qrefname); + if(!module) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MODULE_NOT_FOUND, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Module %s not found in deployment engine.", ref_name); + return AXIS2_FAILURE; + } + else + { + axis2_svc_grp_add_module_ref(svc_grp, env, qrefname); + } + axutil_qname_free(qrefname, env); + } + axutil_qname_free(qref, env); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_desc_builder_t *AXIS2_CALL +axis2_svc_grp_builder_get_desc_builder( + const axis2_svc_grp_builder_t * svc_grp_builder, + const axutil_env_t * env) +{ + return svc_grp_builder->desc_builder; +} + diff --git a/src/core/deployment/ws_info.c b/src/core/deployment/ws_info.c new file mode 100644 index 0000000..0f2fa37 --- /dev/null +++ b/src/core/deployment/ws_info.c @@ -0,0 +1,158 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_ws_info.h" +#include + +struct axis2_ws_info +{ + axis2_char_t *file_name; + long last_modified_date; + + /** + * To check whether the file is a module or a servise + */ + int type; +}; + +AXIS2_EXTERN axis2_ws_info_t *AXIS2_CALL +axis2_ws_info_create_with_file_name_and_last_modified_date( + const axutil_env_t * env, + axis2_char_t * file_name, + long last_modified_date) +{ + axis2_ws_info_t *ws_info = NULL; + + AXIS2_PARAM_CHECK(env->error, file_name, NULL); + + ws_info = (axis2_ws_info_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_ws_info_t)); + + if(!ws_info) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + ws_info->file_name = NULL; + ws_info->last_modified_date = 0; + ws_info->type = 0; + + ws_info->file_name = axutil_strdup(env, file_name); + if(!ws_info->file_name) + { + axis2_ws_info_free(ws_info, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + ws_info->last_modified_date = last_modified_date; + + return ws_info; +} + +AXIS2_EXTERN axis2_ws_info_t *AXIS2_CALL +axis2_ws_info_create_with_file_name_and_last_modified_date_and_type( + const axutil_env_t * env, + axis2_char_t * file_name, + long last_modified_date, + int type) +{ + axis2_ws_info_t *ws_info = NULL; + + AXIS2_PARAM_CHECK(env->error, file_name, NULL); + + ws_info = (axis2_ws_info_t *)axis2_ws_info_create_with_file_name_and_last_modified_date(env, + file_name, last_modified_date); + if(!ws_info) + { + axis2_ws_info_free(ws_info, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + ws_info->type = type; + return ws_info; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_ws_info_free( + axis2_ws_info_t * ws_info, + const axutil_env_t * env) +{ + if(ws_info->file_name) + { + AXIS2_FREE(env->allocator, ws_info->file_name); + } + + if(ws_info) + { + AXIS2_FREE(env->allocator, ws_info); + } + + return; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_ws_info_get_file_name( + const axis2_ws_info_t * ws_info, + const axutil_env_t * env) +{ + return ws_info->file_name; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_ws_info_set_file_name( + axis2_ws_info_t * ws_info, + const axutil_env_t * env, + axis2_char_t * file_name) +{ + AXIS2_PARAM_CHECK(env->error, file_name, AXIS2_FAILURE); + + if(ws_info->file_name) + { + AXIS2_FREE(env->allocator, ws_info->file_name); + ws_info->file_name = NULL; + } + ws_info->file_name = file_name; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN long AXIS2_CALL +axis2_ws_info_get_last_modified_date( + const axis2_ws_info_t * ws_info, + const axutil_env_t * env) +{ + return ws_info->last_modified_date; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_ws_info_set_last_modified_date( + axis2_ws_info_t * ws_info, + const axutil_env_t * env, + long last_modified_date) +{ + ws_info->last_modified_date = last_modified_date; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_ws_info_get_type( + const axis2_ws_info_t * ws_info, + const axutil_env_t * env) +{ + return ws_info->type; +} + diff --git a/src/core/deployment/ws_info_list.c b/src/core/deployment/ws_info_list.c new file mode 100644 index 0000000..41a85c7 --- /dev/null +++ b/src/core/deployment/ws_info_list.c @@ -0,0 +1,370 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axis2_ws_info_list +{ + /** + * This is to store all the deployment info about the deployment files + * for services or modules in a specified folder. + */ + axutil_array_list_t *ws_info_list; + + /** + * All the curently updated deployment info list. + */ + axutil_array_list_t *current_info_list; + + /** + * Referance to deployment engine to make update. + */ + struct axis2_dep_engine *dep_engine; + +}; + +AXIS2_EXTERN axis2_ws_info_list_t *AXIS2_CALL +axis2_ws_info_list_create_with_dep_engine( + const axutil_env_t * env, + struct axis2_dep_engine *dep_engine) +{ + axis2_ws_info_list_t *ws_info_list = NULL; + + ws_info_list = (axis2_ws_info_list_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_ws_info_list_t)); + + if(!ws_info_list) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + memset((void *)ws_info_list, 0, sizeof(axis2_ws_info_list_t)); + + ws_info_list->dep_engine = dep_engine; + + ws_info_list->ws_info_list = axutil_array_list_create(env, 0); + if(!(ws_info_list->ws_info_list)) + { + axis2_ws_info_list_free(ws_info_list, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + ws_info_list->current_info_list = axutil_array_list_create(env, 0); + if(!(ws_info_list->current_info_list)) + { + axis2_ws_info_list_free(ws_info_list, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + return ws_info_list; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_ws_info_list_free( + axis2_ws_info_list_t * ws_info_list, + const axutil_env_t * env) +{ + if(ws_info_list->current_info_list) + { + int list_size = 0; + int i = 0; + + list_size = axutil_array_list_size(ws_info_list->current_info_list, env); + for(i = 0; i < list_size; i++) + { + axis2_char_t *file_name = NULL; + + file_name = (axis2_char_t *)axutil_array_list_get(ws_info_list->current_info_list, env, + i); + AXIS2_FREE(env->allocator, file_name); + } + axutil_array_list_free(ws_info_list->current_info_list, env); + } + + if(ws_info_list->ws_info_list) + { + int list_size = 0; + int i = 0; + + list_size = axutil_array_list_size(ws_info_list->ws_info_list, env); + for(i = 0; i < list_size; i++) + { + axis2_ws_info_t *ws_info = NULL; + + ws_info = (axis2_ws_info_t *)axutil_array_list_get(ws_info_list-> ws_info_list, env, i); + axis2_ws_info_free(ws_info, env); + } + axutil_array_list_free(ws_info_list->ws_info_list, env); + } + + if(ws_info_list) + { + AXIS2_FREE(env->allocator, ws_info_list); + } + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_ws_info_list_init( + axis2_ws_info_list_t * ws_info_list, + const axutil_env_t * env) +{ + int size = 0; + int i = 0; + + size = axutil_array_list_size(ws_info_list->ws_info_list, env); + for(i = 0; i < size; i++) + { + axis2_ws_info_t *ws_info = NULL; + + ws_info = (axis2_ws_info_t *)axutil_array_list_get(ws_info_list->ws_info_list, env, i); + axis2_ws_info_free(ws_info, env); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_ws_info_list_add_ws_info_item( + axis2_ws_info_list_t * ws_info_list, + const axutil_env_t * env, + axutil_file_t * file, + int type) +{ + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *file_name = NULL; + axis2_char_t *temp_name = NULL; + + AXIS2_PARAM_CHECK(env->error, file, AXIS2_FAILURE); + + temp_name = axutil_file_get_name(file, env); + file_name = axutil_strdup(env, temp_name); + if(!file_name) + { + return AXIS2_FAILURE; + } + + switch(type) + { + case AXIS2_SVC: + { + axis2_ws_info_t *ws_info = NULL; + long last_modified_date = 0; + axis2_arch_file_data_t *file_data = NULL; + + last_modified_date = (long)axutil_file_get_timestamp(file, env); + /* We are sure that the difference lies within the long range */ + ws_info = axis2_ws_info_create_with_file_name_and_last_modified_date_and_type(env, + file_name, last_modified_date, AXIS2_SVC); + status = axutil_array_list_add(ws_info_list->ws_info_list, env, ws_info); + + if(AXIS2_SUCCESS != status) + { + return status; + } + file_data = axis2_arch_file_data_create_with_type_and_file(env, AXIS2_SVC, file); + /* To inform that new web service is to be deployed */ + status = axis2_dep_engine_add_ws_to_deploy(ws_info_list->dep_engine, env, file_data); + if(AXIS2_SUCCESS != status) + { + return status; + } + break; + } + case AXIS2_MODULE: + { + axis2_ws_info_t *ws_info = NULL; + long last_modified_date = 0; + axis2_arch_file_data_t *file_data = NULL; + + last_modified_date = (long)axutil_file_get_timestamp(file, env); + /* We are sure that the difference lies within the long range */ + ws_info = axis2_ws_info_create_with_file_name_and_last_modified_date_and_type(env, + file_name, last_modified_date, AXIS2_MODULE); + status = axutil_array_list_add(ws_info_list->ws_info_list, env, ws_info); + + if(AXIS2_SUCCESS != status) + { + return status; + } + file_data = axis2_arch_file_data_create_with_type_and_file(env, AXIS2_MODULE, file); + /* To inform that new module is to be deployed */ + status = axis2_dep_engine_add_ws_to_deploy(ws_info_list->dep_engine, env, file_data); + if(AXIS2_SUCCESS != status) + { + return status; + } + + break; + } + } + return axutil_array_list_add(ws_info_list->current_info_list, env, file_name); +} + +AXIS2_EXTERN axis2_ws_info_t *AXIS2_CALL +axis2_ws_info_list_get_file_item( + axis2_ws_info_list_t * ws_info_list, + const axutil_env_t * env, + axis2_char_t * file_name) +{ + int i = 0; + int size = 0; + AXIS2_PARAM_CHECK(env->error, file_name, NULL); + + size = axutil_array_list_size(ws_info_list->ws_info_list, env); + for(i = 0; i < size; i++) + { + axis2_ws_info_t *ws_info = NULL; + axis2_char_t *file_name_l = NULL; + + ws_info = (axis2_ws_info_t *)axutil_array_list_get(ws_info_list-> ws_info_list, env, i); + + file_name_l = axis2_ws_info_get_file_name(ws_info, env); + if(!axutil_strcmp(file_name_l, file_name)) + { + return ws_info; + } + } + return NULL; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_ws_info_list_is_modified( + axis2_ws_info_list_t * ws_info_list, + const axutil_env_t * env, + axutil_file_t * file, + axis2_ws_info_t * ws_info) +{ + long last_modified_date = 0; + + AXIS2_PARAM_CHECK(env->error, file, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, ws_info, AXIS2_FAILURE); + + last_modified_date = axis2_ws_info_get_last_modified_date(ws_info, env); + return (last_modified_date != axutil_file_get_timestamp(file, env)); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_ws_info_list_is_file_exist( + axis2_ws_info_list_t * ws_info_list, + const axutil_env_t * env, + axis2_char_t * file_name) +{ + axis2_ws_info_t *ws_info = NULL; + + AXIS2_PARAM_CHECK(env->error, file_name, AXIS2_FAILURE); + ws_info = axis2_ws_info_list_get_file_item(ws_info_list, env, file_name); + return !(ws_info == NULL); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_ws_info_list_check_for_undeploy( + axis2_ws_info_list_t * ws_info_list, + const axutil_env_t * env) +{ + int list_size = 0; + axutil_array_list_t *temp_list = NULL; + int i = 0; + + /* Create temp list */ + temp_list = axutil_array_list_create(env, 0); + if(!temp_list) + { + return AXIS2_FAILURE; + } + list_size = axutil_array_list_size(ws_info_list->ws_info_list, env); + + for(i = 0; i < list_size; i++) + { + /* For each ws_info item in the ws_info_list check whether it is also + * in the current_info_list. If not mark it to be undeployed by adding + * it to a temporarily list. Also add that item to the undeploy list of + * deployment engine.*/ + int current_lists_size = 0; + axis2_ws_info_t *file_item = NULL; + axis2_char_t *file_item_name = NULL; + axis2_bool_t exist = AXIS2_FALSE; + int j = 0; + + file_item = (axis2_ws_info_t *)axutil_array_list_get(ws_info_list-> ws_info_list, env, i); + + file_item_name = axis2_ws_info_get_file_name(file_item, env); + current_lists_size = axutil_array_list_size(ws_info_list->current_info_list, env); + for(j = 0; j < current_lists_size; j++) + { + axis2_char_t *file_name = NULL; + file_name = (axis2_char_t *)axutil_array_list_get(ws_info_list-> current_info_list, + env, j); + if(!axutil_strcmp(file_name, file_item_name)) + { + exist = AXIS2_TRUE; + break; + } + } + + if(!exist) + { + axis2_ws_info_t *ws_info = NULL; + long last_modified_date = 0; + + last_modified_date = axis2_ws_info_get_last_modified_date(file_item, env); + axutil_array_list_add(temp_list, env, file_item); + ws_info = axis2_ws_info_create_with_file_name_and_last_modified_date(env, + file_item_name, last_modified_date); + /* This ws_info is to be undeployed */ + axis2_dep_engine_add_ws_to_undeploy(ws_info_list->dep_engine, env, ws_info); + } + + } + + list_size = axutil_array_list_size(temp_list, env); + for(i = 0; i < list_size; i++) + { + /* Get each ws_info item from the temp list created and remove that + * item from the ws_info_list */ + axis2_ws_info_t *file_item = NULL; + int index = 0; + + file_item = (axis2_ws_info_t *)axutil_array_list_get(temp_list, env, i); + index = axutil_array_list_index_of(ws_info_list->ws_info_list, env, file_item); + axutil_array_list_remove(ws_info_list->ws_info_list, env, index); + } + axutil_array_list_free(temp_list, env); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_ws_info_list_update( + axis2_ws_info_list_t * ws_info_list, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + + status = axis2_ws_info_list_check_for_undeploy(ws_info_list, env); + if(AXIS2_SUCCESS != status) + { + return AXIS2_FAILURE; + } + + return axis2_dep_engine_do_deploy(ws_info_list->dep_engine, env); +} + diff --git a/src/core/description/Makefile.am b/src/core/description/Makefile.am new file mode 100644 index 0000000..5c3618c --- /dev/null +++ b/src/core/description/Makefile.am @@ -0,0 +1,24 @@ +noinst_LTLIBRARIES = libaxis2_description.la + +libaxis2_description_la_SOURCES =desc.c \ + op.c \ + policy_include.c \ + svc.c \ + module_desc.c \ + svc_grp.c \ + phase_rule.c \ + handler_desc.c \ + flow.c \ + flow_container.c \ + transport_in_desc.c \ + transport_out_desc.c \ + msg.c + +libaxis2_description_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include \ + -I$(top_builddir)/neethi/include + diff --git a/src/core/description/desc.c b/src/core/description/desc.c new file mode 100644 index 0000000..bd5a80a --- /dev/null +++ b/src/core/description/desc.c @@ -0,0 +1,261 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +struct axis2_desc +{ + + /** parameter container */ + axutil_param_container_t *param_container; + + /** children of this description */ + axutil_hash_t *children; + + axis2_desc_t *parent; + + axis2_policy_include_t *policy_include; +}; + +AXIS2_EXTERN axis2_desc_t *AXIS2_CALL +axis2_desc_create( + const axutil_env_t * env) +{ + axis2_desc_t *desc = NULL; + + desc = (axis2_desc_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_desc_t)); + + if(!desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + desc->param_container = NULL; + desc->children = NULL; + desc->parent = NULL; + desc->policy_include = NULL; + + desc->param_container = (axutil_param_container_t *)axutil_param_container_create(env); + if(!(desc->param_container)) + { + axis2_desc_free(desc, env); + return NULL; + } + + desc->children = axutil_hash_make(env); + if(!(desc->children)) + { + axis2_desc_free(desc, env); + return NULL; + } + + desc->policy_include = axis2_policy_include_create_with_desc(env, desc); + + return desc; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_desc_free( + axis2_desc_t * desc, + const axutil_env_t * env) +{ + if(desc->children) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + + for(hi = axutil_hash_first(desc->children, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + + if(val) + { + axis2_msg_free((axis2_msg_t *)val, env); + } + } + + axutil_hash_free(desc->children, env); + } + + if(desc->param_container) + { + axutil_param_container_free(desc->param_container, env); + } + + if(desc->policy_include) + { + axis2_policy_include_free(desc->policy_include, env); + } + + if(desc) + { + AXIS2_FREE(env->allocator, desc); + } + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_desc_add_param( + axis2_desc_t * desc, + const axutil_env_t * env, + axutil_param_t * param) +{ + AXIS2_PARAM_CHECK(env->error, param, AXIS2_FALSE); + + return axutil_param_container_add_param(desc->param_container, env, param); +} + +AXIS2_EXTERN axutil_param_t *AXIS2_CALL +axis2_desc_get_param( + const axis2_desc_t * desc, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + AXIS2_PARAM_CHECK(env->error, param_name, NULL); + return axutil_param_container_get_param(desc->param_container, env, param_name); +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_desc_get_all_params( + const axis2_desc_t * desc, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, desc->param_container, AXIS2_FALSE); + + return axutil_param_container_get_params(desc->param_container, env); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_desc_is_param_locked( + const axis2_desc_t * desc, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + axutil_param_t *param_l = NULL; + + AXIS2_PARAM_CHECK(env->error, param_name, AXIS2_FALSE); + + param_l = axis2_desc_get_param(desc, env, param_name); + + return (param_l && axutil_param_is_locked(param_l, env)); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_desc_add_child( + const axis2_desc_t * desc, + const axutil_env_t * env, + const axis2_char_t * key, + const axis2_msg_t *child) +{ + if(desc->children) + { + axis2_msg_t* msg = (axis2_msg_t *)axutil_hash_get(desc->children, key, + AXIS2_HASH_KEY_STRING); + if(msg != NULL) + { + axis2_msg_free(msg, env); + msg = NULL; + } + axutil_hash_set(desc->children, key, AXIS2_HASH_KEY_STRING, (void *)child); + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_desc_get_all_children( + const axis2_desc_t * desc, + const axutil_env_t * env) +{ + return desc->children; +} + +AXIS2_EXTERN void *AXIS2_CALL +axis2_desc_get_child( + const axis2_desc_t * desc, + const axutil_env_t * env, + const axis2_char_t * key) +{ + return axutil_hash_get(desc->children, key, AXIS2_HASH_KEY_STRING); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_desc_remove_child( + const axis2_desc_t * desc, + const axutil_env_t * env, + const axis2_char_t * key) +{ + if(desc->children) + { + axutil_hash_set(desc->children, key, AXIS2_HASH_KEY_STRING, NULL); + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_desc_t *AXIS2_CALL +axis2_desc_get_parent( + const axis2_desc_t * desc, + const axutil_env_t * env) +{ + return desc->parent; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_desc_set_parent( + axis2_desc_t * desc, + const axutil_env_t * env, + axis2_desc_t * parent) +{ + desc->parent = parent; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_desc_set_policy_include( + axis2_desc_t * desc, + const axutil_env_t * env, + axis2_policy_include_t * policy_include) +{ + if(desc->policy_include) + { + axis2_policy_include_free(desc->policy_include, env); + desc->policy_include = NULL; + } + + desc->policy_include = policy_include; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_policy_include_t *AXIS2_CALL +axis2_desc_get_policy_include( + axis2_desc_t * desc, + const axutil_env_t * env) +{ + if(!desc->policy_include) + { + /*desc->policy_include = axis2_policy_include_create(env); */ + desc->policy_include = axis2_policy_include_create_with_desc(env, desc); + } + return desc->policy_include; +} + diff --git a/src/core/description/flow.c b/src/core/description/flow.c new file mode 100644 index 0000000..554d666 --- /dev/null +++ b/src/core/description/flow.c @@ -0,0 +1,130 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct axis2_flow +{ + axutil_array_list_t *list; +}; + +AXIS2_EXTERN axis2_flow_t *AXIS2_CALL +axis2_flow_create( + const axutil_env_t * env) +{ + axis2_flow_t *flow = NULL; + + flow = (axis2_flow_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_flow_t)); + + if(!flow) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + flow->list = NULL; + + flow->list = axutil_array_list_create(env, 20); + if(!(flow->list)) + { + axis2_flow_free(flow, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + return flow; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_flow_free( + axis2_flow_t * flow, + const axutil_env_t * env) +{ + if(flow->list) + { + int i = 0; + int size = 0; + + size = axutil_array_list_size(flow->list, env); + for(i = 0; i < size; i++) + { + axis2_handler_desc_t *handler_desc = NULL; + + handler_desc = (axis2_handler_desc_t *)axutil_array_list_get(flow->list, env, i); + axis2_handler_desc_free(handler_desc, env); + } + axutil_array_list_free(flow->list, env); + } + + if(flow) + { + AXIS2_FREE(env->allocator, flow); + } + + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_flow_free_void_arg( + void *flow, + const axutil_env_t * env) +{ + axis2_flow_t *flow_l = NULL; + + flow_l = (axis2_flow_t *)flow; + axis2_flow_free(flow_l, env); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_flow_add_handler( + axis2_flow_t * flow, + const axutil_env_t * env, + axis2_handler_desc_t * handler) +{ + AXIS2_PARAM_CHECK(env->error, handler, AXIS2_FAILURE); + + if(!flow->list) + { + flow->list = axutil_array_list_create(env, 0); + if(!flow->list) + { + axis2_flow_free(flow, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + return axutil_array_list_add(flow->list, env, handler); +} + +AXIS2_EXTERN axis2_handler_desc_t *AXIS2_CALL +axis2_flow_get_handler( + const axis2_flow_t * flow, + const axutil_env_t * env, + const int index) +{ + return axutil_array_list_get(flow->list, env, index); +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_flow_get_handler_count( + const axis2_flow_t * flow, + const axutil_env_t * env) +{ + return axutil_array_list_size(flow->list, env); +} + diff --git a/src/core/description/flow_container.c b/src/core/description/flow_container.c new file mode 100644 index 0000000..e39be01 --- /dev/null +++ b/src/core/description/flow_container.c @@ -0,0 +1,173 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axis2_flow_container +{ + axis2_flow_t *in; + axis2_flow_t *out; + axis2_flow_t *in_fault; + axis2_flow_t *out_fault; +}; + +AXIS2_EXTERN axis2_flow_container_t *AXIS2_CALL +axis2_flow_container_create( + const axutil_env_t * env) +{ + axis2_flow_container_t *flow_container = NULL; + + flow_container = (axis2_flow_container_t *)AXIS2_MALLOC(env-> allocator, + sizeof(axis2_flow_container_t)); + + if(!flow_container) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + flow_container->in = NULL; + flow_container->out = NULL; + flow_container->in_fault = NULL; + flow_container->out_fault = NULL; + + return flow_container; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_flow_container_free( + axis2_flow_container_t * flow_container, + const axutil_env_t * env) +{ + if(flow_container->in) + { + axis2_flow_free(flow_container->in, env); + } + + if(flow_container->out) + { + axis2_flow_free(flow_container->out, env); + } + + if(flow_container->in_fault) + { + axis2_flow_free(flow_container->in_fault, env); + } + + if(flow_container->out_fault) + { + axis2_flow_free(flow_container->out_fault, env); + } + + if(flow_container) + { + AXIS2_FREE(env->allocator, flow_container); + } + + return; +} + +AXIS2_EXTERN axis2_flow_t *AXIS2_CALL +axis2_flow_container_get_in_flow( + const axis2_flow_container_t * flow_container, + const axutil_env_t * env) +{ + return flow_container->in; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_flow_container_set_in_flow( + axis2_flow_container_t * flow_container, + const axutil_env_t * env, + axis2_flow_t * in_flow) +{ + if(flow_container->in) + { + axis2_flow_free(flow_container->in, env); + } + flow_container->in = in_flow; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_flow_t *AXIS2_CALL +axis2_flow_container_get_out_flow( + const axis2_flow_container_t * flow_container, + const axutil_env_t * env) +{ + return flow_container->out; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_flow_container_set_out_flow( + axis2_flow_container_t * flow_container, + const axutil_env_t * env, + axis2_flow_t * out_flow) +{ + if(flow_container->out) + { + axis2_flow_free(flow_container->out, env); + } + flow_container->out = out_flow; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_flow_t *AXIS2_CALL +axis2_flow_container_get_fault_in_flow( + const axis2_flow_container_t * flow_container, + const axutil_env_t * env) +{ + return flow_container->in_fault; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_flow_container_set_fault_in_flow( + axis2_flow_container_t * flow_container, + const axutil_env_t * env, + axis2_flow_t * falut_in_flow) +{ + if(flow_container->in_fault) + { + axis2_flow_free(flow_container->in_fault, env); + } + flow_container->in_fault = falut_in_flow; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_flow_t *AXIS2_CALL +axis2_flow_container_get_fault_out_flow( + const axis2_flow_container_t * flow_container, + const axutil_env_t * env) +{ + return flow_container->out_fault; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_flow_container_set_fault_out_flow( + axis2_flow_container_t * flow_container, + const axutil_env_t * env, + axis2_flow_t * fault_out_flow) +{ + AXIS2_PARAM_CHECK(env->error, fault_out_flow, AXIS2_FAILURE); + if(flow_container->out_fault) + { + axis2_flow_free(flow_container->out_fault, env); + } + flow_container->out_fault = fault_out_flow; + return AXIS2_SUCCESS; +} + diff --git a/src/core/description/handler_desc.c b/src/core/description/handler_desc.c new file mode 100644 index 0000000..c3281f5 --- /dev/null +++ b/src/core/description/handler_desc.c @@ -0,0 +1,333 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +struct axis2_handler_desc +{ + + /** name */ + axutil_string_t *name; + + /** phase rules */ + axis2_phase_rule_t *rules; + + /** handler represented by meta information*/ + axis2_handler_t *handler; + + /** class name */ + axis2_char_t *class_name; + + /** parent param container */ + axutil_param_container_t *parent; + + /** parameter container */ + axutil_param_container_t *param_container; +}; + +AXIS2_EXTERN axis2_handler_desc_t *AXIS2_CALL +axis2_handler_desc_create( + const axutil_env_t * env, + axutil_string_t * name) +{ + axis2_handler_desc_t *handler_desc = NULL; + + handler_desc = AXIS2_MALLOC(env->allocator, sizeof(axis2_handler_desc_t)); + if(!handler_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + + handler_desc->param_container = NULL; + handler_desc->name = NULL; + handler_desc->rules = NULL; + handler_desc->handler = NULL; + handler_desc->class_name = NULL; + handler_desc->parent = NULL; + + handler_desc->param_container = axutil_param_container_create(env); + if(!handler_desc->param_container) + { + + /** error code is already set by last param container create */ + axis2_handler_desc_free(handler_desc, env); + return NULL; + } + + handler_desc->rules = axis2_phase_rule_create(env, NULL); + if(!handler_desc->rules) + { + + /** error code is already set by last param container create */ + axis2_handler_desc_free(handler_desc, env); + return NULL; + } + + if(name) + { + handler_desc->name = axutil_string_clone(name, env); + } + + return handler_desc; +} + +AXIS2_EXTERN const axutil_string_t *AXIS2_CALL +axis2_handler_desc_get_name( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env) +{ + return handler_desc->name; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_handler_desc_set_name( + axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + axutil_string_t * name) +{ + if(handler_desc->name) + { + axutil_string_free(handler_desc->name, env); + handler_desc->name = NULL; + } + + if(name) + { + handler_desc->name = axutil_string_clone(name, env); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_phase_rule_t *AXIS2_CALL +axis2_handler_desc_get_rules( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env) +{ + return handler_desc->rules; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_handler_desc_set_rules( + axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + axis2_phase_rule_t * phase_rule) +{ + const axutil_string_t *str_name = axis2_handler_desc_get_name(handler_desc, env); + const axis2_char_t *name = axutil_string_get_buffer(str_name, env); + if(handler_desc->rules) + { + axis2_phase_rule_free(handler_desc->rules, env); + } + + if(phase_rule) + { + handler_desc->rules = axis2_phase_rule_clone(phase_rule, env); + if(!(handler_desc->rules)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Phase rule cloning failed for handler description %s", name); + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_param_t *AXIS2_CALL +axis2_handler_desc_get_param( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + const axis2_char_t * name) +{ + return axutil_param_container_get_param(handler_desc->param_container, env, name); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_handler_desc_add_param( + axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + axutil_param_t * param) +{ + const axutil_string_t *str_name = axis2_handler_desc_get_name(handler_desc, env); + const axis2_char_t *name = axutil_string_get_buffer(str_name, env); + axis2_char_t *param_name = axutil_param_get_name(param, env); + if(axutil_param_container_is_param_locked(handler_desc->parent, env, param_name)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_PARAMETER_LOCKED_CANNOT_OVERRIDE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Parameter %s is locked for handler %s", + param_name, name); + return AXIS2_FAILURE; + } + + return axutil_param_container_add_param(handler_desc->param_container, env, param); +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_handler_desc_get_all_params( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env) +{ + return axutil_param_container_get_params(handler_desc->param_container, env); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_handler_desc_is_param_locked( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + /* See if it is locked in parent */ + if(axutil_param_container_is_param_locked(handler_desc->parent, env, param_name)) + { + return AXIS2_TRUE; + } + + return axutil_param_container_is_param_locked(handler_desc->param_container, env, param_name); +} + +AXIS2_EXTERN axis2_handler_t *AXIS2_CALL +axis2_handler_desc_get_handler( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env) +{ + return handler_desc->handler; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_handler_desc_set_handler( + axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + axis2_handler_t * handler) +{ + /* Handler description is the place where the handler really lives. + Hence this is a deep copy and should be freed by the free function. */ + + if(handler_desc->handler && (handler_desc->handler != handler)) + { + axis2_handler_free(handler_desc->handler, env); + } + + if(handler) + handler_desc->handler = handler; /* Shallow copy, but free method + should free this */ + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_handler_desc_get_class_name( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env) +{ + return handler_desc->class_name; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_handler_desc_set_class_name( + axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + const axis2_char_t * class_name) +{ + if(handler_desc->class_name) + { + AXIS2_FREE(env->allocator, handler_desc->class_name); + } + + if(class_name) + { + handler_desc->class_name = axutil_strdup(env, class_name); + if(!handler_desc->class_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL +axis2_handler_desc_get_parent( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env) +{ + return handler_desc->parent; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_handler_desc_set_parent( + axis2_handler_desc_t * handler_desc, + const axutil_env_t * env, + axutil_param_container_t * parent) +{ + handler_desc->parent = parent; /* Shallow copy, because + the parent lives somewhere else */ + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_handler_desc_free( + axis2_handler_desc_t * handler_desc, + const axutil_env_t * env) +{ + if(handler_desc->param_container) + { + axutil_param_container_free(handler_desc->param_container, env); + } + + if(handler_desc->name) + { + axutil_string_free(handler_desc->name, env); + } + + if(handler_desc->rules) + { + axis2_phase_rule_free(handler_desc->rules, env); + } + + if(handler_desc->handler) + { + axis2_handler_free(handler_desc->handler, env); + } + + if(handler_desc->class_name) + { + AXIS2_FREE(env->allocator, handler_desc->class_name); + } + if(handler_desc) + { + AXIS2_FREE(env->allocator, handler_desc); + } + + return; +} + +AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL +axis2_handler_desc_get_param_container( + const axis2_handler_desc_t * handler_desc, + const axutil_env_t * env) +{ + return handler_desc->param_container; +} + diff --git a/src/core/description/module_desc.c b/src/core/description/module_desc.c new file mode 100644 index 0000000..a5b27c7 --- /dev/null +++ b/src/core/description/module_desc.c @@ -0,0 +1,470 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axis2_module_desc +{ + axis2_module_t *module; + axutil_qname_t *qname; + axis2_conf_t *parent; + + /** + * To store module operations , which are supposed to be added to a service + * the module is engaged to a service + */ + axutil_hash_t *ops; + + /** + * flow container that encapsulates the flows associated with the + * module + */ + axis2_flow_container_t *flow_container; + + /** + * parameter container that stores all the parameters associated with + * the module + */ + axutil_param_container_t *params; +}; + +AXIS2_EXTERN axis2_module_desc_t *AXIS2_CALL +axis2_module_desc_create( + const axutil_env_t * env) +{ + axis2_module_desc_t *module_desc = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + module_desc = (axis2_module_desc_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_module_desc_t)); + + if(!module_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + module_desc->qname = NULL; + module_desc->module = NULL; + module_desc->parent = NULL; + module_desc->params = NULL; + module_desc->flow_container = NULL; + module_desc->ops = NULL; + + module_desc->params = axutil_param_container_create(env); + if(!module_desc->params) + { + axis2_module_desc_free(module_desc, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + module_desc->flow_container = axis2_flow_container_create(env); + if(!module_desc->flow_container) + { + axis2_module_desc_free(module_desc, env); +AXIS2_ERROR_SET (env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE) + return NULL; +} + +module_desc->ops = axutil_hash_make(env); +if (!module_desc->ops) +{ + axis2_module_desc_free(module_desc, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; +} + +return module_desc; +} + +AXIS2_EXTERN axis2_module_desc_t *AXIS2_CALL +axis2_module_desc_create_with_qname( + const axutil_env_t * env, + const axutil_qname_t * qname) +{ + axis2_module_desc_t *module_desc = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, qname, NULL); + + module_desc = axis2_module_desc_create(env); + if(!module_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + module_desc->qname = (axutil_qname_t *)qname; + + return module_desc; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_module_desc_free( + axis2_module_desc_t * module_desc, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(module_desc->module) + { + axis2_module_shutdown(module_desc->module, env); + } + + if(module_desc->params) + { + axutil_param_container_free(module_desc->params, env); + } + + if(module_desc->flow_container) + { + axis2_flow_container_free(module_desc->flow_container, env); + } + + module_desc->parent = NULL; + + if(module_desc->qname) + { + axutil_qname_free(module_desc->qname, env); + } + + if(module_desc->ops) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + for(hi = axutil_hash_first(module_desc->ops, env); hi; hi = axutil_hash_next(env, hi)) + { + struct axis2_op *op = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + op = (struct axis2_op *)val; + if(op) + axis2_op_free(op, env); + val = NULL; + op = NULL; + + } + axutil_hash_free(module_desc->ops, env); + } + + if(module_desc) + { + AXIS2_FREE(env->allocator, module_desc); + } + + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_module_desc_free_void_arg( + void *module_desc, + const axutil_env_t * env) +{ + axis2_module_desc_t *module_desc_l = NULL; + + AXIS2_ENV_CHECK(env, void); + module_desc_l = (axis2_module_desc_t *)module_desc; + axis2_module_desc_free(module_desc_l, env); + return; +} + +AXIS2_EXTERN axis2_flow_t *AXIS2_CALL +axis2_module_desc_get_in_flow( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env) +{ + return axis2_flow_container_get_in_flow(module_desc->flow_container, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_module_desc_set_in_flow( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + axis2_flow_t * in_flow) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, in_flow, AXIS2_FAILURE); + + return axis2_flow_container_set_in_flow(module_desc->flow_container, env, in_flow); +} + +AXIS2_EXTERN axis2_flow_t *AXIS2_CALL +axis2_module_desc_get_out_flow( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env) +{ + return axis2_flow_container_get_out_flow(module_desc->flow_container, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_module_desc_set_out_flow( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + axis2_flow_t * out_flow) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, out_flow, AXIS2_FAILURE); + + return axis2_flow_container_set_out_flow(module_desc->flow_container, env, out_flow); +} + +AXIS2_EXTERN axis2_flow_t *AXIS2_CALL +axis2_module_desc_get_fault_in_flow( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env) +{ + return axis2_flow_container_get_fault_in_flow(module_desc->flow_container, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_module_desc_set_fault_in_flow( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + axis2_flow_t * falut_in_flow) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, falut_in_flow, AXIS2_FAILURE); + + return axis2_flow_container_set_fault_in_flow(module_desc->flow_container, env, falut_in_flow); +} + +AXIS2_EXTERN axis2_flow_t *AXIS2_CALL +axis2_module_desc_get_fault_out_flow( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env) +{ + return axis2_flow_container_get_fault_out_flow(module_desc->flow_container, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_module_desc_set_fault_out_flow( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + axis2_flow_t * fault_out_flow) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, fault_out_flow, AXIS2_FAILURE); + + return axis2_flow_container_set_fault_out_flow(module_desc->flow_container, env, fault_out_flow); +} + +AXIS2_EXTERN const axutil_qname_t *AXIS2_CALL +axis2_module_desc_get_qname( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env) +{ + return module_desc->qname; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_module_desc_set_qname( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + const axutil_qname_t * qname) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, qname, AXIS2_FAILURE); + + if(module_desc->qname) + { + axutil_qname_free(module_desc->qname, env); + } + + module_desc->qname = axutil_qname_clone((axutil_qname_t *)qname, env); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_module_desc_add_op( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + axis2_op_t * op) +{ + const axutil_qname_t *op_qname = NULL; + axis2_char_t *op_name = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, op, AXIS2_FAILURE); + + if(!(module_desc->ops)) + { + module_desc->ops = axutil_hash_make(env); + if(!module_desc->ops) + return AXIS2_FAILURE; + } + + op_qname = axis2_op_get_qname(op, env); + + if(!op_qname) + { + return AXIS2_FAILURE; + } + op_name = axutil_qname_to_string((axutil_qname_t *)op_qname, env); + axutil_hash_set(module_desc->ops, op_name, AXIS2_HASH_KEY_STRING, op); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_module_desc_get_all_ops( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env) +{ + return module_desc->ops; +} + +AXIS2_EXTERN axis2_conf_t *AXIS2_CALL +axis2_module_desc_get_parent( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env) +{ + return module_desc->parent; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_module_desc_set_parent( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + axis2_conf_t * parent) +{ + AXIS2_PARAM_CHECK(env->error, parent, AXIS2_FAILURE); + + module_desc->parent = parent; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_module_desc_add_param( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + axutil_param_t * param) +{ + axis2_char_t *param_name_l = NULL; + axis2_status_t ret_status = AXIS2_FAILURE; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + param_name_l = axutil_param_get_name(param, env); + if(!param_name_l) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_PARAM, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + if(AXIS2_TRUE == axis2_module_desc_is_param_locked(module_desc, env, param_name_l)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_PARAMETER_LOCKED_CANNOT_OVERRIDE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + else + { + ret_status = axutil_param_container_add_param(module_desc->params, env, param); + } + return ret_status; +} + +AXIS2_EXTERN axutil_param_t *AXIS2_CALL +axis2_module_desc_get_param( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env, + const axis2_char_t * name) +{ + AXIS2_PARAM_CHECK(env->error, name, NULL); + + return axutil_param_container_get_param(module_desc->params, env, name); +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_module_desc_get_all_params( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env) +{ + return axutil_param_container_get_params(module_desc->params, env); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_module_desc_is_param_locked( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + axis2_bool_t locked = AXIS2_FALSE; + axis2_bool_t ret_state = AXIS2_FALSE; + axutil_param_t *param_l = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, param_name, AXIS2_FAILURE); + + /* checking the locked value of parent */ + if(!module_desc->parent) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_MODULE_DESC, AXIS2_FAILURE); + return AXIS2_FALSE; + } + locked = axis2_conf_is_param_locked(module_desc->parent, env, param_name); + + if(AXIS2_TRUE == locked) + { + ret_state = AXIS2_TRUE; + } + else + { + param_l = axis2_module_desc_get_param(module_desc, env, param_name); + if(param_l && AXIS2_TRUE == axutil_param_is_locked(param_l, env)) + ret_state = AXIS2_TRUE; + else + ret_state = AXIS2_FALSE; + + } + return ret_state; +} + +AXIS2_EXTERN axis2_module_t *AXIS2_CALL +axis2_module_desc_get_module( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env) +{ + return module_desc->module; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_module_desc_set_module( + axis2_module_desc_t * module_desc, + const axutil_env_t * env, + axis2_module_t * module) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, module, AXIS2_FAILURE); + module_desc->module = module; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL +axis2_module_desc_get_param_container( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env) +{ + return module_desc->params; +} + +AXIS2_EXTERN axis2_flow_container_t *AXIS2_CALL +axis2_module_desc_get_flow_container( + const axis2_module_desc_t * module_desc, + const axutil_env_t * env) +{ + return module_desc->flow_container; +} diff --git a/src/core/description/msg.c b/src/core/description/msg.c new file mode 100644 index 0000000..241253a --- /dev/null +++ b/src/core/description/msg.c @@ -0,0 +1,407 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axis2_msg +{ + + /** parent operation */ + axis2_op_t *parent; + + /** list of phases that represent the flow */ + axutil_array_list_t *flow; + + /** name of the message */ + axis2_char_t *name; + + /** XML schema element qname */ + axutil_qname_t *element_qname; + + /** direction of message */ + axis2_char_t *direction; + + /** parameter container to hold message parameters */ + struct axutil_param_container *param_container; + + /** base description struct */ + axis2_desc_t *base; + + /** reference count of this object*/ + int ref; + +}; + +AXIS2_EXTERN axis2_msg_t *AXIS2_CALL +axis2_msg_create( + const axutil_env_t * env) +{ + axis2_msg_t *msg = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + msg = (axis2_msg_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_msg_t)); + + if(!msg) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + msg->param_container = NULL; + msg->parent = NULL; + msg->flow = NULL; + msg->name = NULL; + msg->element_qname = NULL; + msg->direction = NULL; + msg->base = NULL; + msg->ref = 1; + + msg->param_container = (axutil_param_container_t *)axutil_param_container_create(env); + if(!msg->param_container) + { + axis2_msg_free(msg, env); + return NULL; + } + + msg->flow = axutil_array_list_create(env, 0); + if(!msg->flow) + { + axis2_msg_free(msg, env); + return NULL; + } + + msg->base = axis2_desc_create(env); + if(!msg->base) + { + axis2_msg_free(msg, env); + return NULL; + } + + return msg; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_msg_free( + axis2_msg_t * msg, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(--(msg->ref) > 0) + { + return; + } + + if(msg->flow) + { + int i = 0, size = 0; + size = axutil_array_list_size(msg->flow, env); + for(i = 0; i < size; i++) + { + axis2_phase_t *phase = NULL; + phase = axutil_array_list_get(msg->flow, env, i); + if(phase) + axis2_phase_free(phase, env); + } + axutil_array_list_free(msg->flow, env); + } + + if(msg->name) + { + AXIS2_FREE(env->allocator, msg->name); + } + + if(msg->element_qname) + { + axutil_qname_free(msg->element_qname, env); + } + + if(msg->direction) + { + AXIS2_FREE(env->allocator, msg->direction); + } + + if(msg->param_container) + { + axutil_param_container_free(msg->param_container, env); + } + + if(msg->base) + { + axis2_desc_free(msg->base, env); + } + + msg->parent = NULL; + + if(msg) + { + AXIS2_FREE(env->allocator, msg); + } + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_add_param( + axis2_msg_t * msg, + const axutil_env_t * env, + axutil_param_t * param) +{ + axis2_char_t *param_name = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + AXIS2_PARAM_CHECK(env->error, param, AXIS2_FALSE); + + param_name = axutil_param_get_name(param, env); + if(AXIS2_TRUE == axis2_msg_is_param_locked(msg, env, param_name)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_PARAMETER_LOCKED_CANNOT_OVERRIDE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return axutil_param_container_add_param(msg->param_container, env, param); +} + +AXIS2_EXTERN axutil_param_t *AXIS2_CALL +axis2_msg_get_param( + const axis2_msg_t * msg, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + AXIS2_PARAM_CHECK(env->error, param_name, NULL); + + return axutil_param_container_get_param(msg->param_container, env, param_name); +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_msg_get_all_params( + const axis2_msg_t * msg, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, msg->param_container, AXIS2_FALSE); + + return axutil_param_container_get_params(msg->param_container, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_set_parent( + axis2_msg_t * msg, + const axutil_env_t * env, + axis2_op_t * op) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + msg->parent = op; + if(op) + { + axis2_desc_set_parent(msg->base, env, axis2_op_get_base(op, env)); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_op_t *AXIS2_CALL +axis2_msg_get_parent( + const axis2_msg_t * msg, + const axutil_env_t * env) +{ + return msg->parent; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_msg_get_flow( + const axis2_msg_t * msg, + const axutil_env_t * env) +{ + return msg->flow; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_msg_is_param_locked( + axis2_msg_t * msg, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + axis2_op_t *parent_l = NULL; + axutil_param_t *param_l = NULL; + axis2_bool_t locked = AXIS2_FALSE; + + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + AXIS2_PARAM_CHECK(env->error, param_name, AXIS2_FALSE); + + /* checking the locked status in parent */ + parent_l = axis2_msg_get_parent(msg, env); + if(parent_l) + { + locked = axis2_op_is_param_locked(parent_l, env, param_name); + } + if(AXIS2_TRUE == locked) + { + return AXIS2_TRUE; + } + else + { + param_l = axis2_msg_get_param(msg, env, param_name); + } + return (param_l && axutil_param_is_locked(param_l, env)); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_set_flow( + axis2_msg_t * msg, + const axutil_env_t * env, + axutil_array_list_t * flow) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(msg->flow) + { + axutil_array_list_free(msg->flow, env); + msg->flow = NULL; + } + if(flow) + { + msg->flow = flow; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_msg_get_direction( + const axis2_msg_t * msg, + const axutil_env_t * env) +{ + return msg->direction; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_set_direction( + axis2_msg_t * msg, + const axutil_env_t * env, + const axis2_char_t * direction) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(msg->direction) + { + AXIS2_FREE(env->allocator, msg->direction); + msg->direction = NULL; + } + + if(direction) + { + msg->direction = axutil_strdup(env, direction); + if(!(msg->direction)) + { + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axutil_qname_t *AXIS2_CALL +axis2_msg_get_element_qname( + const axis2_msg_t * msg, + const axutil_env_t * env) +{ + return msg->element_qname; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_set_element_qname( + axis2_msg_t * msg, + const axutil_env_t * env, + const axutil_qname_t * element_qname) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(msg->element_qname) + { + axutil_qname_free(msg->element_qname, env); + msg->element_qname = NULL; + } + + if(element_qname) + { + msg->element_qname = axutil_qname_clone((axutil_qname_t *)element_qname, env); + if(!(msg->element_qname)) + { + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_msg_get_name( + const axis2_msg_t * msg, + const axutil_env_t * env) +{ + return msg->name; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_set_name( + axis2_msg_t * msg, + const axutil_env_t * env, + const axis2_char_t * name) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(msg->name) + { + AXIS2_FREE(env->allocator, msg->name); + msg->name = NULL; + } + + if(name) + { + msg->name = axutil_strdup(env, name); + if(!(msg->name)) + { + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_desc_t *AXIS2_CALL +axis2_msg_get_base( + const axis2_msg_t * msg, + const axutil_env_t * env) +{ + return msg->base; +} + +AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL +axis2_msg_get_param_container( + const axis2_msg_t * msg, + const axutil_env_t * env) +{ + return msg->param_container; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_msg_increment_ref( + axis2_msg_t * msg, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + msg->ref++; + return AXIS2_SUCCESS; +} diff --git a/src/core/description/op.c b/src/core/description/op.c new file mode 100644 index 0000000..0cf926c --- /dev/null +++ b/src/core/description/op.c @@ -0,0 +1,1383 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +struct axis2_op +{ + axis2_svc_t *parent; + axis2_desc_t *base; + axis2_msg_recv_t *msg_recv; + + int mep; + /* To store deploy time modules */ + axutil_array_list_t *module_qnames; + axutil_array_list_t *engaged_module_list; + axutil_array_list_t *wsamapping_list; + axis2_bool_t from_module; + axutil_qname_t *qname; + axis2_char_t *msg_exchange_pattern; + axis2_char_t *style; + + /* For REST support */ + axis2_char_t *rest_http_method; + axis2_char_t *rest_http_location; + + /** Parameter container to hold operation related parameters */ + struct axutil_param_container *param_container; +}; + +AXIS2_EXTERN axis2_op_t *AXIS2_CALL +axis2_op_create( + const axutil_env_t * env) +{ + axis2_op_t *op = NULL; + axis2_msg_t *msg = NULL; + + op = (axis2_op_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_op_t)); + + if(!op) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, ""); + return NULL; + } + + op->parent = NULL; + op->base = NULL; + op->msg_recv = NULL; + op->mep = AXIS2_MEP_CONSTANT_INVALID; + op->param_container = NULL; + op->module_qnames = axutil_array_list_create(env, 0); + op->engaged_module_list = NULL; + op->from_module = AXIS2_FALSE; + op->wsamapping_list = NULL; + op->qname = NULL; + op->msg_exchange_pattern = NULL; + op->style = NULL; + op->rest_http_method = NULL; + op->rest_http_location = NULL; + op->style = axutil_strdup(env, AXIS2_STYLE_DOC); + + op->param_container = (axutil_param_container_t *)axutil_param_container_create(env); + if(!op->param_container) + { + axis2_op_free(op, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Param container creation failed"); + return NULL; + } + + op->base = axis2_desc_create(env); + if(!op->base) + { + axis2_op_free(op, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Operation base creation failed"); + return NULL; + } + + /* Create and set up children messages */ + msg = axis2_msg_create(env); + if(!msg) + { + axis2_op_free(op, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Child message creation failed"); + return NULL; + } + axis2_msg_set_direction(msg, env, AXIS2_WSDL_MESSAGE_DIRECTION_IN); + axis2_msg_set_parent(msg, env, op); + axis2_op_add_msg(op, env, AXIS2_MSG_IN, msg); + + msg = axis2_msg_create(env); + if(!msg) + { + axis2_op_free(op, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Child message creation failed"); + return NULL; + } + axis2_msg_set_direction(msg, env, AXIS2_WSDL_MESSAGE_DIRECTION_OUT); + axis2_msg_set_parent(msg, env, op); + axis2_op_add_msg(op, env, AXIS2_MSG_OUT, msg); + + msg = axis2_msg_create(env); + if(!msg) + { + axis2_op_free(op, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Child message creation failed"); + return NULL; + } + axis2_msg_set_parent(msg, env, op); + axis2_msg_set_flow(msg, env, NULL); + axis2_op_add_msg(op, env, AXIS2_MSG_IN_FAULT, msg); + + msg = axis2_msg_create(env); + if(!msg) + { + axis2_op_free(op, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Child message creation failed"); + return NULL; + } + axis2_msg_set_parent(msg, env, op); + axis2_msg_set_flow(msg, env, NULL); + axis2_op_add_msg(op, env, AXIS2_MSG_OUT_FAULT, msg); + + axis2_op_set_msg_exchange_pattern(op, env, (axis2_char_t *)AXIS2_MEP_URI_IN_OUT); + + return op; +} + +AXIS2_EXTERN axis2_op_t *AXIS2_CALL +axis2_op_create_from_module( + const axutil_env_t * env) +{ + axis2_op_t *op = NULL; + + op = (axis2_op_t *)axis2_op_create(env); + op->from_module = AXIS2_TRUE; + return op; +} + +AXIS2_EXTERN axis2_op_t *AXIS2_CALL +axis2_op_create_with_qname( + const axutil_env_t * env, + const axutil_qname_t * qname) +{ + axis2_op_t *op = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, qname, NULL); + + op = (axis2_op_t *)axis2_op_create(env); + + if(!op) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Operation creation failed for %s", + axutil_qname_get_localpart(qname, env)); + return NULL; + } + + status = axis2_op_set_qname(op, env, qname); + if(AXIS2_SUCCESS != status) + { + axis2_op_free(op, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting name failed for operation %s", + axutil_qname_get_localpart(qname, env)); + return NULL; + } + + return op; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_op_free( + axis2_op_t * op, + const axutil_env_t * env) +{ + if(op->base) + { + axis2_desc_free(op->base, env); + } + if(op->param_container) + { + axutil_param_container_free(op->param_container, env); + } + + op->parent = NULL; + + if(op->msg_recv) + { + axis2_msg_recv_free(op->msg_recv, env); + } + if(op->module_qnames) + { + int i = 0; + for(i = 0; i < axutil_array_list_size(op->module_qnames, env); i++) + { + axutil_qname_t *module_ref = NULL; + module_ref = axutil_array_list_get(op->module_qnames, env, i); + + if(module_ref) + { + axutil_qname_free(module_ref, env); + } + } + axutil_array_list_free(op->module_qnames, env); + } + if(op->engaged_module_list) + { + axutil_array_list_free(op->engaged_module_list, env); + } + if(op->wsamapping_list) + { + int i = 0; + int size = 0; + size = axutil_array_list_size(op->wsamapping_list, env); + for(i = 0; i < size; i++) + { + axis2_char_t *temp_str = axutil_array_list_get(op->wsamapping_list, env, i); + if(temp_str) + AXIS2_FREE(env->allocator, temp_str); + } + axutil_array_list_free(op->wsamapping_list, env); + } + + if(op->qname) + { + axutil_qname_free(op->qname, env); + } + + if(op->msg_exchange_pattern) + { + AXIS2_FREE(env->allocator, op->msg_exchange_pattern); + } + + if(op->style) + { + AXIS2_FREE(env->allocator, op->style); + } + + if(op->rest_http_method) + { + AXIS2_FREE(env->allocator, op->rest_http_method); + } + + if(op->rest_http_location) + { + AXIS2_FREE(env->allocator, op->rest_http_location); + } + + if(op) + { + AXIS2_FREE(env->allocator, op); + } + + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_op_free_void_arg( + void *op, + const axutil_env_t * env) +{ + axis2_op_t *op_l = NULL; + + op_l = (axis2_op_t *)op; + axis2_op_free(op_l, env); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_add_param( + axis2_op_t * op, + const axutil_env_t * env, + axutil_param_t * param) +{ + axis2_char_t *param_name = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, param, AXIS2_FALSE); + + param_name = axutil_param_get_name(param, env); + if(AXIS2_TRUE == axis2_op_is_param_locked(op, env, param_name)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Parameter %s is locked, cannot override", + param_name); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_PARAMETER_LOCKED_CANNOT_OVERRIDE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + else + { + status = axutil_param_container_add_param(op->param_container, env, param); + } + + return status; +} + +AXIS2_EXTERN axutil_param_t *AXIS2_CALL +axis2_op_get_param( + const axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + axutil_param_t *param = NULL; + + AXIS2_PARAM_CHECK(env->error, param_name, NULL); + + param = axutil_param_container_get_param(op->param_container, env, param_name); + if(!param && op->parent) + { + param = axis2_svc_get_param(op->parent, env, param_name); + } + return param; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_remove_param + (axis2_op_t *op, + const axutil_env_t *env, + const axis2_char_t *param_name) +{ + axis2_status_t status = AXIS2_FAILURE; + status = axutil_param_container_delete_param(op->param_container, env, param_name); + return status; + + +} + + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_op_get_all_params( + const axis2_op_t * op, + const axutil_env_t * env) +{ + return axutil_param_container_get_params(op->param_container, env); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_op_is_param_locked( + axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + axis2_svc_t *parent = NULL; + axutil_param_t *param = NULL; + axis2_bool_t locked = AXIS2_FALSE; + + AXIS2_PARAM_CHECK(env->error, param_name, AXIS2_FALSE); + + /* Checking the locked value of parent */ + parent = axis2_op_get_parent(op, env); + if(parent) + { + locked = axis2_svc_is_param_locked(parent, env, param_name); + } + if(locked) + { + return AXIS2_TRUE; + } + param = axis2_op_get_param(op, env, param_name); + return (param && AXIS2_TRUE == axutil_param_is_locked(param, env)); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_set_rest_http_method( + axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * rest_http_method) +{ + AXIS2_PARAM_CHECK(env->error, rest_http_method, AXIS2_FAILURE); + + if(op->rest_http_method) + { + AXIS2_FREE(env->allocator, op->rest_http_method); + } + op->rest_http_method = NULL; + if(rest_http_method) + { + op->rest_http_method = axutil_strdup(env, rest_http_method); + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_op_get_rest_http_method( + const axis2_op_t * op, + const axutil_env_t * env) +{ + if(!op) + { + return NULL; + } + if(op->rest_http_method) + { + return op->rest_http_method; + } + else + { + axutil_param_t *param = NULL; + + param = axis2_op_get_param(op, env, AXIS2_DEFAULT_REST_HTTP_METHOD); + + if(!param) + { + return "POST"; /* Added hard-coded string to avoid inclusion of HTTP + * Transport header + */ + } + return (axis2_char_t *)axutil_param_get_value(param, env); + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_set_rest_http_location( + axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * rest_http_location) +{ + axis2_char_t *opname = NULL; + AXIS2_PARAM_CHECK(env->error, rest_http_location, AXIS2_FAILURE); + opname = axutil_qname_get_localpart(axis2_op_get_qname(op, env), env); + if(op->rest_http_location) + { + AXIS2_FREE(env->allocator, op->rest_http_location); + } + op->rest_http_location = NULL; + if(rest_http_location) + { + op->rest_http_location = axutil_strdup(env, rest_http_location); + return AXIS2_SUCCESS; + } + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting rest http location failed for operation %s", + opname); + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_op_get_rest_http_location( + const axis2_op_t * op, + const axutil_env_t * env) +{ + if(!op) + { + return NULL; + } + return op->rest_http_location; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_set_parent( + axis2_op_t * op, + const axutil_env_t * env, + axis2_svc_t * svc) +{ + AXIS2_PARAM_CHECK(env->error, svc, AXIS2_FAILURE); + + if(op->parent) + { + op->parent = NULL; + } + op->parent = svc; + if(svc) + { + axis2_desc_set_parent(op->base, env, axis2_svc_get_base(svc, env)); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_svc_t *AXIS2_CALL +axis2_op_get_parent( + const axis2_op_t * op, + const axutil_env_t * env) +{ + return op->parent; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_set_msg_recv( + axis2_op_t * op, + const axutil_env_t * env, + struct axis2_msg_recv * msg_recv) +{ + AXIS2_PARAM_CHECK(env->error, msg_recv, AXIS2_FAILURE); + + if(op->msg_recv == msg_recv) + { + return AXIS2_SUCCESS; + } + if(op->msg_recv) + { + axis2_msg_recv_free(op->msg_recv, env); + op->msg_recv = NULL; + } + + op->msg_recv = msg_recv; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN struct axis2_msg_recv *AXIS2_CALL +axis2_op_get_msg_recv( + const axis2_op_t * op, + const axutil_env_t * env) +{ + return op->msg_recv; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_set_qname( + axis2_op_t * op, + const axutil_env_t * env, + const axutil_qname_t * qname) +{ + if(op->qname) + { + axutil_qname_free(op->qname, env); + op->qname = NULL; + } + + if(qname) + { + op->qname = axutil_qname_clone((axutil_qname_t *)qname, env); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axutil_qname_t *AXIS2_CALL +axis2_op_get_qname( + void *op, + const axutil_env_t * env) +{ + return ((axis2_op_t *)op)->qname; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_set_msg_exchange_pattern( + axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * pattern) +{ + AXIS2_PARAM_CHECK(env->error, pattern, AXIS2_FAILURE); + + if(op->msg_exchange_pattern) + { + AXIS2_FREE(env->allocator, op->msg_exchange_pattern); + op->msg_exchange_pattern = NULL; + } + + op->msg_exchange_pattern = axutil_strdup(env, pattern); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_op_get_msg_exchange_pattern( + const axis2_op_t * op, + const axutil_env_t * env) +{ + return op->msg_exchange_pattern; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_op_get_style( + const axis2_op_t * op, + const axutil_env_t * env) +{ + return op->style; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_set_style( + axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * style) +{ + AXIS2_PARAM_CHECK(env->error, style, AXIS2_FAILURE); + + if(op->style) + { + AXIS2_FREE(env->allocator, op->style); + op->style = NULL; + } + + op->style = axutil_strdup(env, style); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_engage_module( + axis2_op_t * op, + const axutil_env_t * env, + axis2_module_desc_t * moduleref, + axis2_conf_t * conf) +{ + int index = 0; + int size = 0; + axutil_array_list_t *collection_module = NULL; + axis2_module_desc_t *module_desc = NULL; + axis2_phase_resolver_t *pr = NULL; + axis2_bool_t need_to_add = AXIS2_FALSE; + axis2_char_t *opname = NULL; + axis2_char_t *modname = NULL; + + AXIS2_PARAM_CHECK(env->error, moduleref, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE); + opname = axutil_qname_get_localpart(axis2_op_get_qname(op, env), env); + collection_module = op->engaged_module_list; + if(collection_module) + { + size = axutil_array_list_size(collection_module, env); + } + for(index = 0; index < size; index++) + { + const axutil_qname_t *qname1 = NULL; + const axutil_qname_t *qname2 = NULL; + + module_desc = (axis2_module_desc_t *)axutil_array_list_get(collection_module, env, index); + if(!module_desc) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Retrieving a module failed from operation %s engaged module" + " list", opname); + return AXIS2_FAILURE; + } + qname1 = axis2_module_desc_get_qname(module_desc, env); + qname2 = axis2_module_desc_get_qname(moduleref, env); + modname = axutil_qname_get_localpart(qname2, env); + if(axutil_qname_equals(qname1, env, qname2)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Module %s already engaged to operation %s", + modname, opname); + + need_to_add = AXIS2_FALSE; + return AXIS2_FAILURE; + } + + } + pr = axis2_phase_resolver_create_with_config(env, conf); + if(pr) + { + axis2_module_t *module = NULL; + axis2_status_t status = AXIS2_FAILURE; + + status = axis2_phase_resolver_engage_module_to_op(pr, env, op, moduleref); + if(AXIS2_SUCCESS != status) + { + /* Ignore the status */ + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_SUCCESS); + AXIS2_LOG_INFO(env->log, AXIS2_LOG_SI, + "Engaging module %s to operaion %s failed. But ignore this.", modname, opname); + } + module = axis2_module_desc_get_module(moduleref, env); + + if(need_to_add) + { + axutil_array_list_add(collection_module, env, moduleref); + } + } + else + { + return AXIS2_FAILURE; + } + axis2_phase_resolver_free(pr, env); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_add_to_engaged_module_list( + axis2_op_t * op, + const axutil_env_t * env, + axis2_module_desc_t * module_desc) +{ + axis2_module_desc_t *module_desc_l = NULL; + int size = 0; + int index = 0; + const axutil_qname_t *module_qname = NULL; + + AXIS2_PARAM_CHECK(env->error, module_desc, AXIS2_FAILURE); + + if(!op->engaged_module_list) + { + op->engaged_module_list = axutil_array_list_create(env, 0); + } + size = axutil_array_list_size(op->engaged_module_list, env); + + module_qname = axis2_module_desc_get_qname(module_desc, env); + for(index = 0; index < size; index++) + { + const axutil_qname_t *module_qname_l = NULL; + + module_desc_l = (axis2_module_desc_t *)axutil_array_list_get(op-> engaged_module_list, env, + index); + module_qname_l = axis2_module_desc_get_qname(module_desc_l, env); + + if(axutil_qname_equals(module_qname, env, module_qname_l)) + { + return AXIS2_SUCCESS; + } + + } + + return axutil_array_list_add(op->engaged_module_list, env, module_desc); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_remove_from_engaged_module_list( + axis2_op_t * op, + const axutil_env_t * env, + axis2_module_desc_t * module_desc) +{ + axis2_module_desc_t *module_desc_l = NULL; + int size = 0; + int index = 0; + const axutil_qname_t *module_qname = NULL; + + AXIS2_PARAM_CHECK(env->error, module_desc, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, op->engaged_module_list, AXIS2_FAILURE); + + size = axutil_array_list_size(op->engaged_module_list, env); + + module_qname = axis2_module_desc_get_qname(module_desc, env); + for(index = 0; index < size; index++) + { + const axutil_qname_t *module_qname_l = NULL; + + module_desc_l = (axis2_module_desc_t *)axutil_array_list_get(op-> engaged_module_list, env, + index); + module_qname_l = axis2_module_desc_get_qname(module_desc_l, env); + + if(axutil_qname_equals(module_qname, env, module_qname_l)) + { + axutil_array_list_remove(op->engaged_module_list, env, index); + return AXIS2_SUCCESS; + } + + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_op_get_all_modules( + const axis2_op_t * op, + const axutil_env_t * env) +{ + return op->engaged_module_list; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_op_get_axis_specific_mep_const( + axis2_op_t * op, + const axutil_env_t * env) +{ + int temp = 0; + axis2_char_t *opname = NULL; + + opname = axutil_qname_get_localpart(axis2_op_get_qname(op, env), env); + if(op->mep != AXIS2_MEP_CONSTANT_INVALID) + { + return op->mep; + } + + temp = AXIS2_MEP_CONSTANT_INVALID; + + if((axutil_strcmp(AXIS2_MEP_URI_IN_OUT, axis2_op_get_msg_exchange_pattern(op, env)) == 0) || + (axutil_strcmp(AXIS2_MEP_URI_IN_OUT_WSDL2, axis2_op_get_msg_exchange_pattern(op, env)) == 0)) + { + temp = AXIS2_MEP_CONSTANT_IN_OUT; + } + else if((axutil_strcmp(AXIS2_MEP_URI_IN_ONLY, axis2_op_get_msg_exchange_pattern(op, env)) == 0) + || (axutil_strcmp(AXIS2_MEP_URI_IN_ONLY_WSDL2, axis2_op_get_msg_exchange_pattern(op, env)) == 0)) + { + temp = AXIS2_MEP_CONSTANT_IN_ONLY; + } + else if((axutil_strcmp(AXIS2_MEP_URI_IN_OPTIONAL_OUT, axis2_op_get_msg_exchange_pattern(op, env))== 0) || + (axutil_strcmp(AXIS2_MEP_URI_IN_OPTIONAL_OUT_WSDL2, axis2_op_get_msg_exchange_pattern(op, env))== 0)) + { + temp = AXIS2_MEP_CONSTANT_IN_OPTIONAL_OUT; + } + else if((axutil_strcmp(AXIS2_MEP_URI_OUT_IN, axis2_op_get_msg_exchange_pattern(op, env)) == 0) || + (axutil_strcmp(AXIS2_MEP_URI_OUT_IN_WSDL2, axis2_op_get_msg_exchange_pattern(op, env)) == 0)) + { + temp = AXIS2_MEP_CONSTANT_OUT_IN; + } + else if((axutil_strcmp(AXIS2_MEP_URI_OUT_ONLY, axis2_op_get_msg_exchange_pattern(op, env)) == 0) || + (axutil_strcmp(AXIS2_MEP_URI_OUT_ONLY_WSDL2, axis2_op_get_msg_exchange_pattern(op, env)) == 0)) + { + temp = AXIS2_MEP_CONSTANT_OUT_ONLY; + } + else if((axutil_strcmp(AXIS2_MEP_URI_OUT_OPTIONAL_IN, axis2_op_get_msg_exchange_pattern(op, env)) == 0) || + (axutil_strcmp(AXIS2_MEP_URI_OUT_OPTIONAL_IN_WSDL2, axis2_op_get_msg_exchange_pattern(op, env)) == 0)) + { + temp = AXIS2_MEP_CONSTANT_OUT_OPTIONAL_IN; + } + else if((axutil_strcmp(AXIS2_MEP_URI_ROBUST_IN_ONLY, axis2_op_get_msg_exchange_pattern(op, env)) == 0) || + (axutil_strcmp(AXIS2_MEP_URI_ROBUST_IN_ONLY_WSDL2, axis2_op_get_msg_exchange_pattern(op, env)) == 0)) + { + temp = AXIS2_MEP_CONSTANT_ROBUST_IN_ONLY; + } + else if((axutil_strcmp(AXIS2_MEP_URI_ROBUST_OUT_ONLY, axis2_op_get_msg_exchange_pattern(op, env)) == 0) || + (axutil_strcmp(AXIS2_MEP_URI_ROBUST_OUT_ONLY_WSDL2, axis2_op_get_msg_exchange_pattern(op, env)) == 0)) + { + temp = AXIS2_MEP_CONSTANT_ROBUST_OUT_ONLY; + } + if(temp == AXIS2_MEP_CONSTANT_INVALID) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Could not map the MEP URI %s to an Axis2/C MEP constant value " + "in retrieving MEP for operation %s", axis2_op_get_msg_exchange_pattern(op, env), + opname); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_COULD_NOT_MAP_MEP_URI_TO_MEP_CONSTANT, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + op->mep = temp; + return op->mep; + +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_op_get_fault_in_flow( + const axis2_op_t * op, + const axutil_env_t * env) +{ + if(op->base) + { + axis2_msg_t *msg = NULL; + msg = axis2_desc_get_child(op->base, env, AXIS2_MSG_IN_FAULT); + if(msg) + { + return axis2_msg_get_flow(msg, env); + } + } + return NULL; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_op_get_fault_out_flow( + const axis2_op_t * op, + const axutil_env_t * env) +{ + if(op->base) + { + axis2_msg_t *msg = NULL; + msg = axis2_desc_get_child(op->base, env, AXIS2_MSG_OUT_FAULT); + if(msg) + { + return axis2_msg_get_flow(msg, env); + } + } + return NULL; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_op_get_out_flow( + const axis2_op_t * op, + const axutil_env_t * env) +{ + if(op->base) + { + axis2_msg_t *msg = NULL; + msg = axis2_desc_get_child(op->base, env, AXIS2_MSG_OUT); + if(msg) + { + return axis2_msg_get_flow(msg, env); + } + } + return NULL; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_op_get_in_flow( + const axis2_op_t * op, + const axutil_env_t * env) +{ + if(op->base) + { + axis2_msg_t *msg = NULL; + msg = axis2_desc_get_child(op->base, env, AXIS2_MSG_IN); + if(msg) + { + return axis2_msg_get_flow(msg, env); + } + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_set_fault_in_flow( + axis2_op_t * op, + const axutil_env_t * env, + axutil_array_list_t * list) +{ + AXIS2_PARAM_CHECK(env->error, list, AXIS2_FAILURE); + + if(op->base) + { + axis2_msg_t *msg = NULL; + msg = axis2_desc_get_child(op->base, env, AXIS2_MSG_IN_FAULT); + if(msg) + { + return axis2_msg_set_flow(msg, env, list); + } + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_set_fault_out_flow( + axis2_op_t * op, + const axutil_env_t * env, + axutil_array_list_t * list) +{ + AXIS2_PARAM_CHECK(env->error, list, AXIS2_FAILURE); + if(op->base) + { + axis2_msg_t *msg = NULL; + msg = axis2_desc_get_child(op->base, env, AXIS2_MSG_OUT_FAULT); + if(msg) + { + return axis2_msg_set_flow(msg, env, list); + } + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_set_out_flow( + axis2_op_t * op, + const axutil_env_t * env, + axutil_array_list_t * list) +{ + AXIS2_PARAM_CHECK(env->error, list, AXIS2_FAILURE); + + if(op->base) + { + axis2_msg_t *msg = NULL; + msg = axis2_desc_get_child(op->base, env, AXIS2_MSG_OUT); + if(msg) + { + return axis2_msg_set_flow(msg, env, list); + } + } + + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_set_in_flow( + axis2_op_t * op, + const axutil_env_t * env, + axutil_array_list_t * list) +{ + AXIS2_PARAM_CHECK(env->error, list, AXIS2_FAILURE); + + if(op->base) + { + axis2_msg_t *msg = NULL; + msg = axis2_desc_get_child(op->base, env, AXIS2_MSG_IN); + if(msg) + { + return axis2_msg_set_flow(msg, env, list); + } + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_add_module_qname( + axis2_op_t * op, + const axutil_env_t * env, + const axutil_qname_t * module_qname) +{ + axutil_qname_t *module_qname_l = NULL; + + AXIS2_PARAM_CHECK(env->error, module_qname, AXIS2_FAILURE); + module_qname_l = axutil_qname_clone((axutil_qname_t *)module_qname, env); + + return axutil_array_list_add(op->module_qnames, env, module_qname_l); +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_op_get_all_module_qnames( + const axis2_op_t * op, + const axutil_env_t * env) +{ + return op->module_qnames; +} + +AXIS2_EXTERN axis2_op_ctx_t *AXIS2_CALL +axis2_op_find_op_ctx( + axis2_op_t * op, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx, + struct axis2_svc_ctx * svc_ctx) +{ + axis2_op_ctx_t *op_ctx = NULL; + axis2_relates_to_t *relates_to = NULL; + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *opname = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + AXIS2_PARAM_CHECK(env->error, svc_ctx, NULL); + + opname = axutil_qname_get_localpart(axis2_op_get_qname(op, env), env); + relates_to = axis2_msg_ctx_get_relates_to(msg_ctx, env); + if(!relates_to) + { + op_ctx = axis2_op_ctx_create(env, op, svc_ctx); + if(!op_ctx) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating operation context failed for operation %s", opname); + return NULL; + } + } + else + { + axis2_conf_ctx_t *conf_ctx = NULL; + const axis2_char_t *value = NULL; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + value = axis2_relates_to_get_value(relates_to, env); + op_ctx = axis2_conf_ctx_get_op_ctx(conf_ctx, env, value); + if(!op_ctx) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Cannot correlate message to %s for operation %s", value, opname); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CANNOT_CORRELATE_MSG, AXIS2_FAILURE); + return NULL; + } + } + + status = axis2_op_register_op_ctx(op, env, msg_ctx, op_ctx); + if(AXIS2_FAILURE == status) + { + axis2_op_ctx_free(op_ctx, env); + return NULL; + } + else + { + return op_ctx; + } +} + +AXIS2_EXTERN axis2_op_ctx_t *AXIS2_CALL +axis2_op_find_existing_op_ctx( + axis2_op_t * op, + const axutil_env_t * env, + const axis2_msg_ctx_t * msg_ctx) +{ + axis2_op_ctx_t *op_ctx = NULL; + axis2_relates_to_t *relates_to = NULL; + axis2_char_t *opname = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + + opname = axutil_qname_get_localpart(axis2_op_get_qname(op, env), env); + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + if(op_ctx) + { + return op_ctx; + } + + relates_to = axis2_msg_ctx_get_relates_to(msg_ctx, env); + if(!relates_to) + { + return NULL; + } + else + { + axis2_conf_ctx_t *conf_ctx = NULL; + const axis2_char_t *value = NULL; + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + value = axis2_relates_to_get_value(relates_to, env); + op_ctx = axis2_conf_ctx_get_op_ctx(conf_ctx, env, value); + + if(!op_ctx) + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, + "Cannot correlate message to %s for operation %s", value, opname); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CANNOT_CORRELATE_MSG, AXIS2_FAILURE); + return NULL; + } + } + + return op_ctx; + +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_register_op_ctx( + axis2_op_t * op, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_op_ctx_t * op_ctx) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + const axis2_char_t *msg_id = NULL; + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *opname = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, op_ctx, AXIS2_FAILURE); + + opname = axutil_qname_get_localpart(axis2_op_get_qname(op, env), env); + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(!conf_ctx) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Configuration context not found for message context while " + "registering operation context for operation %s", opname); + return AXIS2_FAILURE; + } + + status = axis2_msg_ctx_set_op_ctx(msg_ctx, env, op_ctx); + + if(AXIS2_SUCCESS != status) + { + axutil_hash_t *op_ctx_map = NULL; + + msg_id = axis2_msg_ctx_get_msg_id(msg_ctx, env); + if(msg_id) + { + op_ctx_map = (axutil_hash_t *)axis2_conf_ctx_get_op_ctx_map(conf_ctx, env); + axutil_hash_set(op_ctx_map, msg_id, AXIS2_HASH_KEY_STRING, NULL); + } + else + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, + "Message id not found for message context while registering operation context " + "for operation %s. The reason could be that there is no addressing enabled for " + "communication", opname); + } + } + if(axis2_op_ctx_get_is_complete(op_ctx, env)) + { + axis2_op_ctx_cleanup(op_ctx, env); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_add_msg_ctx_in_only( + axis2_op_t * op, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_op_ctx_t * op_ctx) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, op_ctx, AXIS2_FAILURE); + + if(!axis2_op_ctx_get_is_complete(op_ctx, env)) + { + axis2_msg_ctx_t **msg_ctxs = NULL; + msg_ctxs = axis2_op_ctx_get_msg_ctx_map(op_ctx, env); + msg_ctxs[AXIS2_WSDL_MESSAGE_LABEL_IN] = msg_ctx; + axis2_op_ctx_set_complete(op_ctx, env, AXIS2_TRUE); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Invalid message; adding operation context for the " + "operation :%s is already completed", axutil_qname_get_localpart( + axis2_op_get_qname(op, env), env)); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MESSAGE_ADDITION, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_add_msg_ctx_out_only( + axis2_op_t * op, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_op_ctx_t * op_ctx) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, op_ctx, AXIS2_FAILURE); + + if(!axis2_op_ctx_get_is_complete(op_ctx, env)) + { + axis2_msg_ctx_t **msg_ctxs = NULL; + msg_ctxs = axis2_op_ctx_get_msg_ctx_map(op_ctx, env); + msg_ctxs[AXIS2_WSDL_MESSAGE_LABEL_OUT] = msg_ctx; + axis2_op_ctx_set_complete(op_ctx, env, AXIS2_TRUE); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Invalid message; adding operation context for the " + "operation :%s is already completed", axutil_qname_get_localpart( + axis2_op_get_qname(op, env), env)); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MESSAGE_ADDITION, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_add_msg_ctx_in_out( + axis2_op_t * op, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_op_ctx_t * op_ctx) +{ + axis2_msg_ctx_t **mep = NULL; + axis2_msg_ctx_t *in_msg_ctx = NULL; + axis2_msg_ctx_t *out_msg_ctx = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, op_ctx, AXIS2_FAILURE); + + mep = axis2_op_ctx_get_msg_ctx_map(op_ctx, env); + in_msg_ctx = mep[AXIS2_WSDL_MESSAGE_LABEL_IN]; + out_msg_ctx = mep[AXIS2_WSDL_MESSAGE_LABEL_OUT]; + + if(in_msg_ctx && out_msg_ctx) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Invalid message; adding operation context for the " + "operation :%s is invalid", axutil_qname_get_localpart(axis2_op_get_qname(op, env), + env)); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MESSAGE_ADDITION, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + if(!in_msg_ctx) + { + mep[AXIS2_WSDL_MESSAGE_LABEL_IN] = msg_ctx; + } + else + { + mep[AXIS2_WSDL_MESSAGE_LABEL_OUT] = msg_ctx; + axis2_op_ctx_set_complete(op_ctx, env, AXIS2_TRUE); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_add_msg_ctx_out_in( + axis2_op_t * op, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_op_ctx_t * op_ctx) +{ + axis2_msg_ctx_t **mep = NULL; + axis2_msg_ctx_t *in_msg_ctx = NULL; + axis2_msg_ctx_t *out_msg_ctx = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, op_ctx, AXIS2_FAILURE); + + mep = axis2_op_ctx_get_msg_ctx_map(op_ctx, env); + in_msg_ctx = mep[AXIS2_WSDL_MESSAGE_LABEL_IN]; + out_msg_ctx = mep[AXIS2_WSDL_MESSAGE_LABEL_OUT]; + if(in_msg_ctx && out_msg_ctx) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Invalid message; adding operation context for the " + "operation :%s is invalid", axutil_qname_get_localpart(axis2_op_get_qname(op, env), + env)); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MESSAGE_ADDITION, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + if(!out_msg_ctx) + { + mep[AXIS2_WSDL_MESSAGE_LABEL_OUT] = msg_ctx; + } + else + { + mep[AXIS2_WSDL_MESSAGE_LABEL_IN] = msg_ctx; + axis2_op_ctx_set_complete(op_ctx, env, AXIS2_TRUE); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_msg_t *AXIS2_CALL +axis2_op_get_msg( + const axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * label) +{ + AXIS2_PARAM_CHECK(env->error, label, NULL); + + return (axis2_msg_t *)axis2_desc_get_child(op->base, env, label); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_add_msg( + axis2_op_t * op, + const axutil_env_t * env, + const axis2_char_t * label, + const axis2_msg_t * msg) +{ + AXIS2_PARAM_CHECK(env->error, label, AXIS2_FAILURE); + + return axis2_desc_add_child(op->base, env, label, msg); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_op_is_from_module( + const axis2_op_t * op, + const axutil_env_t * env) +{ + return op->from_module; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_op_set_wsamapping_list( + axis2_op_t * op, + const axutil_env_t * env, + axutil_array_list_t * mapping_list) +{ + AXIS2_PARAM_CHECK(env->error, mapping_list, AXIS2_FAILURE); + + if(op->wsamapping_list) + { + int i = 0; + int size = 0; + size = axutil_array_list_size(op->wsamapping_list, env); + for(i = 0; i < size; i++) + { + axis2_char_t *temp_str = axutil_array_list_get(op->wsamapping_list, env, i); + if(temp_str) + AXIS2_FREE(env->allocator, temp_str); + } + axutil_array_list_free(op->wsamapping_list, env); + op->wsamapping_list = NULL; + } + op->wsamapping_list = mapping_list; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_op_get_wsamapping_list( + axis2_op_t * op, + const axutil_env_t * env) +{ + return op->wsamapping_list; +} + +AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL +axis2_op_get_param_container( + const axis2_op_t * op, + const axutil_env_t * env) +{ + return op->param_container; +} + +AXIS2_EXTERN axis2_desc_t *AXIS2_CALL +axis2_op_get_base( + const axis2_op_t * op, + const axutil_env_t * env) +{ + return op->base; +} + diff --git a/src/core/description/phase_rule.c b/src/core/description/phase_rule.c new file mode 100644 index 0000000..bb4cfea --- /dev/null +++ b/src/core/description/phase_rule.c @@ -0,0 +1,254 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axis2_phase_rule +{ + + /** name of phase or handler before */ + axis2_char_t *before; + + /** name of phase or handler after */ + axis2_char_t *after; + + /** phase name */ + axis2_char_t *name; + + /** Is this first in phase? */ + axis2_bool_t first; + + /** Is this last in phase? */ + axis2_bool_t last; + +}; + +AXIS2_EXTERN axis2_phase_rule_t *AXIS2_CALL +axis2_phase_rule_create( + const axutil_env_t * env, + const axis2_char_t * name) +{ + axis2_phase_rule_t *phase_rule = NULL; + + phase_rule = AXIS2_MALLOC(env->allocator, sizeof(axis2_phase_rule_t)); + if(!phase_rule) + { + AXIS2_ERROR_SET_ERROR_NUMBER(env->error, AXIS2_ERROR_NO_MEMORY); + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_FAILURE); + return NULL; + } + + phase_rule->before = NULL; + phase_rule->after = NULL; + phase_rule->name = NULL; + phase_rule->first = AXIS2_FALSE; + phase_rule->last = AXIS2_FALSE; + + if(name) + { + phase_rule->name = axutil_strdup(env, name); + } + + return phase_rule; +} + +const axis2_char_t *AXIS2_CALL +axis2_phase_rule_get_before( + const axis2_phase_rule_t * phase_rule, + const axutil_env_t * env) +{ + return phase_rule->before; +} + +axis2_status_t AXIS2_CALL +axis2_phase_rule_set_before( + axis2_phase_rule_t * phase_rule, + const axutil_env_t * env, + const axis2_char_t * before) +{ + if(phase_rule->before) + { + AXIS2_FREE(env->allocator, phase_rule->before); + } + + if(before) + { + phase_rule->before = axutil_strdup(env, before); + if(!phase_rule->before) + { + AXIS2_ERROR_SET_ERROR_NUMBER(env->error, AXIS2_ERROR_NO_MEMORY); + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +const axis2_char_t *AXIS2_CALL +axis2_phase_rule_get_after( + const axis2_phase_rule_t * phase_rule, + const axutil_env_t * env) +{ + return phase_rule->after; +} + +axis2_status_t AXIS2_CALL +axis2_phase_rule_set_after( + axis2_phase_rule_t * phase_rule, + const axutil_env_t * env, + const axis2_char_t * after) +{ + if(phase_rule->after) + { + AXIS2_FREE(env->allocator, phase_rule->after); + } + + if(after) + { + phase_rule->after = axutil_strdup(env, after); + if(!phase_rule->after) + { + AXIS2_ERROR_SET_ERROR_NUMBER(env->error, AXIS2_ERROR_NO_MEMORY); + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +const axis2_char_t *AXIS2_CALL +axis2_phase_rule_get_name( + const axis2_phase_rule_t * phase_rule, + const axutil_env_t * env) +{ + return phase_rule->name; +} + +axis2_status_t AXIS2_CALL +axis2_phase_rule_set_name( + axis2_phase_rule_t * phase_rule, + const axutil_env_t * env, + const axis2_char_t * name) +{ + if(phase_rule->name) + { + AXIS2_FREE(env->allocator, phase_rule->name); + } + + if(name) + { + phase_rule->name = axutil_strdup(env, name); + if(!phase_rule->name) + { + AXIS2_ERROR_SET_ERROR_NUMBER(env->error, AXIS2_ERROR_NO_MEMORY); + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +axis2_bool_t AXIS2_CALL +axis2_phase_rule_is_first( + const axis2_phase_rule_t * phase_rule, + const axutil_env_t * env) +{ + return phase_rule->first; +} + +axis2_status_t AXIS2_CALL +axis2_phase_rule_set_first( + axis2_phase_rule_t * phase_rule, + const axutil_env_t * env, + axis2_bool_t first) +{ + phase_rule->first = first; + return AXIS2_SUCCESS; +} + +axis2_bool_t AXIS2_CALL +axis2_phase_rule_is_last( + const axis2_phase_rule_t * phase_rule, + const axutil_env_t * env) +{ + return phase_rule->last; +} + +axis2_status_t AXIS2_CALL +axis2_phase_rule_set_last( + axis2_phase_rule_t * phase_rule, + const axutil_env_t * env, + axis2_bool_t last) +{ + phase_rule->last = last; + return AXIS2_SUCCESS; +} + +void AXIS2_CALL +axis2_phase_rule_free( + axis2_phase_rule_t * phase_rule, + const axutil_env_t * env) +{ + if(phase_rule->before) + { + AXIS2_FREE(env->allocator, phase_rule->before); + } + + if(phase_rule->after) + { + AXIS2_FREE(env->allocator, phase_rule->after); + } + + if(phase_rule->name) + { + AXIS2_FREE(env->allocator, phase_rule->name); + } + + AXIS2_FREE(env->allocator, phase_rule); + + return; +} + +axis2_phase_rule_t *AXIS2_CALL +axis2_phase_rule_clone( + axis2_phase_rule_t * phase_rule, + const axutil_env_t * env) +{ + axis2_phase_rule_t *phase_rule_new = NULL; + + phase_rule_new = axis2_phase_rule_create(env, NULL); + if(!phase_rule_new) + return NULL; + + axis2_phase_rule_set_before(phase_rule_new, env, axis2_phase_rule_get_before(phase_rule, env)); + + axis2_phase_rule_set_after(phase_rule_new, env, axis2_phase_rule_get_after(phase_rule, env)); + + axis2_phase_rule_set_name(phase_rule_new, env, axis2_phase_rule_get_name(phase_rule, env)); + + axis2_phase_rule_set_first(phase_rule_new, env, axis2_phase_rule_is_first(phase_rule, env)); + + axis2_phase_rule_set_last(phase_rule_new, env, axis2_phase_rule_is_last(phase_rule, env)); + + return phase_rule_new; +} + diff --git a/src/core/description/policy_include.c b/src/core/description/policy_include.c new file mode 100644 index 0000000..5ce93f8 --- /dev/null +++ b/src/core/description/policy_include.c @@ -0,0 +1,612 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axis2_policy_include +{ + neethi_policy_t *policy; + + neethi_policy_t *effective_policy; + + neethi_registry_t *registry; + + axis2_desc_t *desc; + + axutil_hash_t *wrapper_elements; +}; + +typedef struct axis2_policy_wrapper +{ + int type; + void *value; +} axis2_policy_wrapper_t; + +AXIS2_EXTERN axis2_policy_include_t *AXIS2_CALL +axis2_policy_include_create( + const axutil_env_t * env) +{ + axis2_policy_include_t *policy_include = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + policy_include = (axis2_policy_include_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_policy_include_t)); + + if(!policy_include) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + policy_include->policy = NULL; + policy_include->effective_policy = NULL; + policy_include->registry = NULL; + policy_include->desc = NULL; + policy_include->wrapper_elements = NULL; + + policy_include->registry = neethi_registry_create(env); + if(!policy_include->registry) + { + axis2_policy_include_free(policy_include, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + policy_include->wrapper_elements = axutil_hash_make(env); + if(!policy_include->wrapper_elements) + { + axis2_policy_include_free(policy_include, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + return policy_include; +} + +AXIS2_EXTERN axis2_policy_include_t *AXIS2_CALL +axis2_policy_include_create_with_desc( + const axutil_env_t * env, + axis2_desc_t * desc) +{ + axis2_policy_include_t *policy_include = NULL; + axis2_desc_t *parent_desc = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + policy_include = (axis2_policy_include_t *)axis2_policy_include_create(env); + + parent_desc = axis2_desc_get_parent(desc, env); + + if(policy_include->registry) + { + neethi_registry_free(policy_include->registry, env); + policy_include->registry = NULL; + } + + if(parent_desc) + { + axis2_policy_include_t *preant_policy_include = axis2_desc_get_policy_include(parent_desc, + env); + if(preant_policy_include) + { + policy_include->registry = neethi_registry_create_with_parent(env, + axis2_policy_include_get_registry(preant_policy_include, env)); + } + else + { + policy_include->registry = neethi_registry_create(env); + } + } + else + { + policy_include->registry = neethi_registry_create(env); + } + + policy_include->desc = desc; + + return policy_include; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_policy_include_free( + axis2_policy_include_t * policy_include, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(policy_include->registry) + { + neethi_registry_free(policy_include->registry, env); + } + + if(policy_include->wrapper_elements) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + for(hi = axutil_hash_first(policy_include->wrapper_elements, env); hi; hi + = axutil_hash_next(env, hi)) + { + axis2_policy_wrapper_t *wrapper = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + wrapper = (axis2_policy_wrapper_t *)val; + if(wrapper) + AXIS2_FREE(env->allocator, wrapper); + val = NULL; + wrapper = NULL; + } + axutil_hash_free(policy_include->wrapper_elements, env); + } + + if(policy_include) + { + AXIS2_FREE(env->allocator, policy_include); + } + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_policy_include_set_registry( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + neethi_registry_t * registry) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(policy_include->registry) + { + neethi_registry_free(policy_include->registry, env); + } + + policy_include->registry = registry; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN neethi_registry_t *AXIS2_CALL +axis2_policy_include_get_registry( + axis2_policy_include_t * policy_include, + const axutil_env_t * env) +{ + return policy_include->registry; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_policy_include_set_policy( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + neethi_policy_t * policy) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(policy_include->wrapper_elements) + { + axutil_hash_free(policy_include->wrapper_elements, env); + policy_include->wrapper_elements = NULL; + } + + policy_include->wrapper_elements = axutil_hash_make(env); + + if(!neethi_policy_get_name(policy, env) && !neethi_policy_get_id(policy, env)) + { + neethi_policy_set_id(policy, env, axutil_uuid_gen(env)); + } + + if(policy_include->wrapper_elements) + { + axis2_policy_wrapper_t *wrapper = NULL; + + wrapper = (axis2_policy_wrapper_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_policy_wrapper_t)); + if(wrapper) + { + axis2_char_t *policy_name = NULL; + wrapper->type = AXIS2_ANON_POLICY; + wrapper->value = policy; + + policy_name = neethi_policy_get_name(policy, env); + + if(policy_name) + { + axutil_hash_set(policy_include->wrapper_elements, policy_name, + AXIS2_HASH_KEY_STRING, wrapper); + } + else + { + axutil_hash_set(policy_include->wrapper_elements, + neethi_policy_get_id(policy, env), AXIS2_HASH_KEY_STRING, wrapper); + } + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_policy_include_update_policy( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + neethi_policy_t * policy) +{ + axis2_char_t *key; + axis2_policy_wrapper_t *wrapper = NULL; + + key = neethi_policy_get_name(policy, env); + if(!key) + key = neethi_policy_get_id(policy, env); + + if(!key) + { + return AXIS2_FAILURE; + } + + wrapper = axutil_hash_get(policy_include->wrapper_elements, key, AXIS2_HASH_KEY_STRING); + if(wrapper) + { + wrapper->value = policy; + return AXIS2_SUCCESS; + } + + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_policy_include_set_effective_policy( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + neethi_policy_t * effective_policy) +{ + policy_include->effective_policy = effective_policy; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_policy_include_set_desc( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + axis2_desc_t * desc) +{ + policy_include->desc = desc; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_desc_t *AXIS2_CALL +axis2_policy_include_get_desc( + axis2_policy_include_t * policy_include, + const axutil_env_t * env) +{ + return policy_include->desc; +} + +AXIS2_EXTERN axis2_policy_include_t *AXIS2_CALL +axis2_policy_include_get_parent( + axis2_policy_include_t * policy_include, + const axutil_env_t * env) +{ + if(policy_include->desc) + { + axis2_desc_t *parent = NULL; + parent = axis2_desc_get_parent(policy_include->desc, env); + if(parent) + { + return axis2_desc_get_policy_include(parent, env); + } + } + + return NULL; +} + +static axis2_status_t +axis2_policy_include_calculate_policy( + axis2_policy_include_t * policy_include, + const axutil_env_t * env) +{ + neethi_policy_t *result = NULL; + axutil_hash_index_t *hi = NULL; + void *val = NULL; + + for(hi = axutil_hash_first(policy_include->wrapper_elements, env); hi; hi = axutil_hash_next( + env, hi)) + { + axis2_policy_wrapper_t *wrapper = NULL; + + axutil_hash_this(hi, NULL, NULL, &val); + wrapper = (axis2_policy_wrapper_t *)val; + + if(wrapper) + { + neethi_policy_t *policy = NULL; + if(wrapper->type == AXIS2_POLICY_REF) + { + neethi_reference_t *reference = (neethi_reference_t *)wrapper->value; + if(reference) + { + /* TOOD add neethi_reference_normalize + policy = (neethi_policy_t*) neethi_reference_normalize( + reference, env, policy_include->registry, AXIS2_FALSE); + */ + } + } + else + { + policy = (neethi_policy_t *)wrapper->value; + } + + result = (result == NULL) ? (neethi_policy_t *)policy + : (neethi_policy_t *)neethi_engine_merge(env, result, policy); + } + } + + policy_include->policy = result; + return AXIS2_SUCCESS; +} + +static neethi_policy_t * +axis2_policy_include_calculate_effective_policy( + axis2_policy_include_t * policy_include, + const axutil_env_t * env) +{ + neethi_policy_t *result; + axis2_policy_include_t *parent = NULL; + + parent = axis2_policy_include_get_parent(policy_include, env); + + if(parent) + { + neethi_policy_t *parent_policy = axis2_policy_include_get_effective_policy(parent, env); + + if(!parent_policy) + { + result = axis2_policy_include_get_policy(policy_include, env); + + } + else + { + if(axis2_policy_include_get_policy(policy_include, env)) + { + neethi_policy_t *temp_policy = NULL; + parent_policy = (neethi_policy_t *)neethi_engine_get_normalize(env, AXIS2_FALSE, + parent_policy); + temp_policy = axis2_policy_include_get_policy(policy_include, env); + temp_policy = (neethi_policy_t *)neethi_engine_get_normalize(env, AXIS2_FALSE, + temp_policy); + /* result = (neethi_policy_t*) neethi_engine_merge(env, parent_policy, + axis2_policy_include_get_policy(policy_include, env)); */ + result = (neethi_policy_t *)neethi_engine_merge(env, parent_policy, temp_policy); + + } + else + { + result = parent_policy; + } + } + } + else + { + result = axis2_policy_include_get_policy(policy_include, env); + } + + return result; + /*policy_include->effective_policy = result; + return AXIS2_SUCCESS; */ +} + +AXIS2_EXTERN neethi_policy_t *AXIS2_CALL +axis2_policy_include_get_policy( + axis2_policy_include_t * policy_include, + const axutil_env_t * env) +{ + axis2_policy_include_calculate_policy(policy_include, env); + return policy_include->policy; +} + +AXIS2_EXTERN neethi_policy_t *AXIS2_CALL +axis2_policy_include_get_effective_policy( + axis2_policy_include_t * policy_include, + const axutil_env_t * env) +{ + /*if (policy_include->effective_policy) + return policy_include->effective_policy; + */ + return axis2_policy_include_calculate_effective_policy(policy_include, env); + /*return policy_include->effective_policy; */ +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_policy_include_get_policy_elements( + axis2_policy_include_t * policy_include, + const axutil_env_t * env) +{ + axutil_array_list_t *policy_elements_list = NULL; + axutil_hash_index_t *hi = NULL; + void *val = NULL; + + policy_elements_list = axutil_array_list_create(env, 10); + + for(hi = axutil_hash_first(policy_include->wrapper_elements, env); hi; hi = axutil_hash_next( + env, hi)) + { + axis2_policy_wrapper_t *wrapper = NULL; + + axutil_hash_this(hi, NULL, NULL, &val); + wrapper = (axis2_policy_wrapper_t *)val; + + if(wrapper) + { + axutil_array_list_add(policy_elements_list, env, wrapper->value); + } + } + return policy_elements_list; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_policy_include_get_policy_elements_with_type( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + int type) +{ + axutil_array_list_t *policy_elements_list = NULL; + axutil_hash_index_t *hi = NULL; + void *val = NULL; + + policy_elements_list = axutil_array_list_create(env, 10); + + for(hi = axutil_hash_first(policy_include->wrapper_elements, env); hi; hi = axutil_hash_next( + env, hi)) + { + axis2_policy_wrapper_t *wrapper = NULL; + + axutil_hash_this(hi, NULL, NULL, &val); + wrapper = (axis2_policy_wrapper_t *)val; + + if(wrapper && wrapper->type == type) + { + axutil_array_list_add(policy_elements_list, env, wrapper->value); + } + } + return policy_elements_list; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_policy_include_register_policy( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + axis2_char_t * key, + neethi_policy_t * policy) +{ + if(policy_include->registry) + { + return neethi_registry_register(policy_include->registry, env, key, policy); + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN neethi_policy_t *AXIS2_CALL +axis2_policy_include_get_policy_with_key( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + axis2_char_t * key) +{ + if(policy_include->registry) + { + return neethi_registry_lookup(policy_include->registry, env, key); + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_policy_include_add_policy_element( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + int type, + neethi_policy_t * policy) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(!neethi_policy_get_name(policy, env) && !neethi_policy_get_id(policy, env)) + { + axis2_char_t *uuid = axutil_uuid_gen(env); + neethi_policy_set_id(policy, env, uuid); + if(uuid) + { + AXIS2_FREE(env->allocator, uuid); + uuid = NULL; + } + } + + if(policy_include->wrapper_elements) + { + axis2_policy_wrapper_t *wrapper = NULL; + + wrapper = (axis2_policy_wrapper_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_policy_wrapper_t)); + if(wrapper) + { + axis2_char_t *policy_name = NULL; + wrapper->type = type; + wrapper->value = policy; + + policy_name = neethi_policy_get_name(policy, env); + if(!policy_name) + policy_name = neethi_policy_get_id(policy, env); + + if(policy_name) + { + axutil_hash_set(policy_include->wrapper_elements, policy_name, + AXIS2_HASH_KEY_STRING, wrapper); + if(policy_include->registry) + { + neethi_registry_register(policy_include->registry, env, policy_name, policy); + } + return AXIS2_SUCCESS; + } + } + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_policy_include_add_policy_reference_element( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + int type, + neethi_reference_t * reference) +{ + axis2_policy_wrapper_t *wrapper = NULL; + + wrapper + = (axis2_policy_wrapper_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_policy_wrapper_t)); + if(wrapper) + { + wrapper->type = type; + wrapper->value = reference; + axutil_hash_set(policy_include->wrapper_elements, neethi_reference_get_uri(reference, env), + AXIS2_HASH_KEY_STRING, wrapper); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_policy_include_remove_policy_element( + axis2_policy_include_t * policy_include, + const axutil_env_t * env, + axis2_char_t * policy_uri) +{ + if(policy_include->wrapper_elements) + { + axutil_hash_set(policy_include->wrapper_elements, policy_uri, AXIS2_HASH_KEY_STRING, NULL); + } + if(policy_include->registry) + { + neethi_registry_register(policy_include->registry, env, policy_uri, NULL); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_policy_include_remove_all_policy_element( + axis2_policy_include_t * policy_include, + const axutil_env_t * env) +{ + if(policy_include->wrapper_elements) + { + axutil_hash_free(policy_include->wrapper_elements, env); + } + return AXIS2_SUCCESS; +} diff --git a/src/core/description/svc.c b/src/core/description/svc.c new file mode 100644 index 0000000..72f4597 --- /dev/null +++ b/src/core/description/svc.c @@ -0,0 +1,1543 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include "../deployment/axis2_desc_builder.h" +#include +#include +#include + +struct axis2_svc +{ + axis2_svc_grp_t *parent; + axis2_char_t *axis_svc_name; + + /** To keep last update time of the service */ + long last_update; + axis2_char_t *filename; + + /** To store module descriptions at deploy time parsing */ + axutil_array_list_t *module_list; + + /** Service description */ + axis2_char_t *svc_desc; + + /** wsdl file path */ + axis2_char_t *wsdl_path; + + /** service folder path */ + axis2_char_t *folder_path; + + /** + * WSDL related stuff + */ + axutil_hash_t *ns_map; + /* Count of the entries in the namespace map */ + int ns_count; + /* To keep the XML scheama either from WSDL or + * C2WSDL(in the future) + */ + axutil_array_list_t *schema_list; + + /** + * A table that keeps a mapping of unique XSD names (Strings) + * against the schema objects. This is populated in the first + * instance the schemas are asked for and then used to serve + * the subsequent requests + */ + axutil_hash_t *schema_mapping_table; + + /** + * This is where operations are kept + */ + axutil_hash_t *op_alias_map; + + /** + * This is where action mappings are kept + */ + axutil_hash_t *op_action_map; + + /** + * This is where REST mappings are kept + */ + axutil_hash_t *op_rest_map; + + /** + * Keeps track whether the schema locations are adjusted + */ + axis2_bool_t schema_loc_adjusted; + + /** + * A custom schema name prefix. if set this will be used to + * modify the schema names + */ + axis2_char_t *custom_schema_name_prefix; + + /** + * A custom schema name suffix. will be attached to the + * schema file name when the files are uniquely named. + * A good place to add a file extension if needed + */ + axis2_char_t *custom_schema_name_suffix; + /* To store the target namespace for the schema */ + axis2_char_t *schema_target_ns; + axis2_char_t *schema_target_ns_prefix; + /* To keep the service target name space */ + axis2_char_t *target_ns; + axis2_char_t *target_ns_prefix; + /* Used for schema name calculations */ + int sc_calc_count; + + void *impl_class; + axutil_qname_t *qname; + axis2_char_t *style; + axutil_array_list_t *engaged_module_list; + + /** Parameter container to hold service related parameters */ + struct axutil_param_container *param_container; + + /** Flow container that encapsulates the flow related data */ + struct axis2_flow_container *flow_container; + + /** Base description struct */ + axis2_desc_t *base; + + /* Mutex to avoid loading the same service dll twice */ + axutil_thread_mutex_t *mutex; +}; + +AXIS2_EXTERN axis2_svc_t *AXIS2_CALL +axis2_svc_create( + const axutil_env_t * env) +{ + axis2_svc_t *svc = NULL; + + svc = (axis2_svc_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_t)); + if(!svc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + + svc->parent = NULL; + svc->axis_svc_name = NULL; + svc->filename = NULL; + svc->svc_desc = NULL; + svc->wsdl_path = NULL; + svc->folder_path = NULL; + svc->last_update = 0; + svc->param_container = NULL; + svc->flow_container = NULL; + svc->op_alias_map = NULL; + svc->op_action_map = NULL; + svc->op_rest_map = NULL; + svc->module_list = NULL; + svc->ns_map = NULL; + svc->ns_count = 0; + svc->schema_list = NULL; + svc->schema_mapping_table = NULL; + svc->schema_loc_adjusted = AXIS2_FALSE; + svc->custom_schema_name_prefix = NULL; + svc->custom_schema_name_suffix = NULL; + svc->schema_target_ns = NULL; + svc->schema_target_ns_prefix = NULL; + svc->target_ns = NULL; + svc->target_ns_prefix = NULL; + svc->sc_calc_count = 0; + svc->impl_class = NULL; + svc->qname = NULL; + svc->style = NULL; + svc->base = NULL; + + svc->param_container = axutil_param_container_create(env); + if(!svc->param_container) + { + axis2_svc_free(svc, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service param container creation failed"); + return NULL; + } + + svc->flow_container = axis2_flow_container_create(env); + if(!svc->flow_container) + { + axis2_svc_free(svc, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service flow container creation failed"); + return NULL; + } + + svc->op_alias_map = axutil_hash_make(env); + if(!svc->op_alias_map) + { + axis2_svc_free(svc, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service operation alias map creation failed"); + return NULL; + } + + svc->op_action_map = axutil_hash_make(env); + if(!svc->op_action_map) + { + axis2_svc_free(svc, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service operation action map creation failed"); + return NULL; + } + + svc->op_rest_map = axutil_hash_make(env); + if(!svc->op_rest_map) + { + axis2_svc_free(svc, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service operation rest map creation failed"); + return NULL; + } + + /** Create module list of default size */ + svc->module_list = axutil_array_list_create(env, 0); + if(!svc->module_list) + { + axis2_svc_free(svc, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service module list creation failed"); + return NULL; + } + + svc->schema_list = axutil_array_list_create(env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY); + if(!svc->schema_list) + { + axis2_svc_free(svc, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service schema list creation failed"); + return NULL; + } + + svc->engaged_module_list = axutil_array_list_create(env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY); + if(!svc->engaged_module_list) + { + axis2_svc_free(svc, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service engaged modules list creation failed"); + return NULL; + } + + svc->schema_loc_adjusted = AXIS2_FALSE; + if(svc->schema_target_ns_prefix) + { + AXIS2_FREE(env->allocator, svc->schema_target_ns_prefix); + svc->schema_target_ns_prefix = NULL; + } + svc->schema_target_ns_prefix = axutil_strdup(env, "ns"); + + if(svc->target_ns) + { + AXIS2_FREE(env->allocator, svc->target_ns); + svc->target_ns = NULL; + } + svc->target_ns = axutil_strdup(env, "http://ws.apache.org/axis2"); + + if(svc->target_ns_prefix) + { + AXIS2_FREE(env->allocator, svc->target_ns_prefix); + svc->target_ns_prefix = NULL; + } + svc->target_ns_prefix = axutil_strdup(env, "tns"); + svc->sc_calc_count = 0; + + svc->base = axis2_desc_create(env); + if(!svc->base) + { + axis2_svc_free(svc, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service base creation failed"); + return NULL; + } + svc->mutex = axutil_thread_mutex_create(env->allocator, AXIS2_THREAD_MUTEX_DEFAULT); + if(!svc->mutex) + { + axis2_svc_free(svc, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service mutex creation failed"); + return NULL; + } + return svc; +} + +AXIS2_EXTERN axis2_svc_t *AXIS2_CALL +axis2_svc_create_with_qname( + const axutil_env_t * env, + const axutil_qname_t * qname) +{ + axis2_svc_t *svc = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, qname, NULL); + + svc = axis2_svc_create(env); + if(!svc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service creation failed for name %s", + axutil_qname_get_localpart(qname, env)); + return NULL; + } + + status = axis2_svc_set_qname(svc, env, qname); + if(AXIS2_FAILURE == status) + { + axis2_svc_free(svc, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting name %s to service failed", + axutil_qname_get_localpart(qname, env)); + return NULL; + } + + return svc; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_svc_free( + axis2_svc_t * svc, + const axutil_env_t * env) +{ + if(svc->impl_class) + { + AXIS2_SVC_SKELETON_FREE((axis2_svc_skeleton_t *)svc->impl_class, env); + } + if(svc->param_container) + { + axutil_param_container_free(svc->param_container, env); + } + + if(svc->flow_container) + { + axis2_flow_container_free(svc->flow_container, env); + } + + if(svc->filename) + { + AXIS2_FREE(env->allocator, svc->filename); + svc->filename = NULL; + } + + if(svc->svc_desc) + { + AXIS2_FREE(env->allocator, svc->svc_desc); + svc->svc_desc = NULL; + } + + svc->parent = NULL; + + if(svc->module_list) + { + int i = 0; + int size = 0; + + size = axutil_array_list_size(svc->module_list, env); + for(i = 0; i < size; i++) + { + axutil_qname_t *qname = NULL; + qname = axutil_array_list_get(svc->module_list, env, i); + if(qname) + { + axutil_qname_free(qname, env); + } + } + axutil_array_list_free(svc->module_list, env); + } + + if(svc->schema_list) + { + axutil_array_list_free(svc->schema_list, env); + } + + if(svc->engaged_module_list) + { + axutil_array_list_free(svc->engaged_module_list, env); + } + + if(svc->axis_svc_name) + { + AXIS2_FREE(env->allocator, svc->axis_svc_name); + svc->axis_svc_name = NULL; + } + + if(svc->op_alias_map) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + + for(hi = axutil_hash_first(svc->op_alias_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + + if(val) + { + if(axis2_op_is_from_module((axis2_op_t *)val, env) == AXIS2_FALSE) + { + axis2_op_free((axis2_op_t *)val, env); + } + val = NULL; + } + } + + axutil_hash_free(svc->op_alias_map, env); + } + + if(svc->op_action_map) + { + axutil_hash_index_t *hi = NULL; + const void *key = NULL; + + for(hi = axutil_hash_first(svc->op_action_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, &key, NULL, NULL); + + if(key) + { + AXIS2_FREE(env->allocator, (axis2_char_t *)key); + key = NULL; + } + } + axutil_hash_free(svc->op_action_map, env); + } + + if(svc->op_rest_map) + { + axis2_core_utils_free_rest_map(env, svc->op_rest_map); + } + + if(svc->schema_target_ns_prefix) + { + AXIS2_FREE(env->allocator, svc->schema_target_ns_prefix); + svc->schema_target_ns_prefix = NULL; + } + + if(svc->target_ns) + { + AXIS2_FREE(env->allocator, svc->target_ns); + svc->target_ns = NULL; + } + + if(svc->wsdl_path) + { + AXIS2_FREE(env->allocator, svc->wsdl_path); + svc->wsdl_path = NULL; + } + + if(svc->folder_path) + { + AXIS2_FREE(env->allocator, svc->folder_path); + svc->folder_path = NULL; + } + + if(svc->target_ns_prefix) + { + AXIS2_FREE(env->allocator, svc->target_ns_prefix); + svc->target_ns_prefix = NULL; + } + + if(svc->qname) + { + axutil_qname_free(svc->qname, env); + } + + if(svc->style) + { + AXIS2_FREE(env->allocator, svc->style); + } + + if(svc->base) + { + axis2_desc_free(svc->base, env); + } + if(svc->mutex) + { + axutil_thread_mutex_destroy(svc->mutex); + } + if(svc) + { + AXIS2_FREE(env->allocator, svc); + svc = NULL; + } + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_add_op( + axis2_svc_t * svc, + const axutil_env_t * env, + axis2_op_t * op) +{ + axis2_status_t status = AXIS2_FAILURE; + axis2_msg_recv_t *msg_recv = NULL; + const axutil_qname_t *qname = NULL; + axis2_char_t *key = NULL; + const axis2_char_t *svcname = NULL; + axutil_array_list_t *mappings_list = NULL; + int size = 0; + int j = 0; + + AXIS2_PARAM_CHECK(env->error, op, AXIS2_FAILURE); + svcname = axis2_svc_get_name(svc, env); + qname = axis2_op_get_qname(op, env); + if(qname) + key = axutil_qname_get_localpart(qname, env); + mappings_list = axis2_op_get_wsamapping_list(op, env); + /* Adding action mappings into service */ + if(mappings_list) + size = axutil_array_list_size(mappings_list, env); + for(j = 0; j < size; j++) + { + axis2_char_t *mapping = NULL; + + mapping = (axis2_char_t *)axutil_array_list_get(mappings_list, env, j); + status = axis2_svc_add_mapping(svc, env, mapping, op); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding operation %s to service %s mapping list failed", svcname, key); + return status; + } + } + + status = axis2_op_set_parent(op, env, svc); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting service %s as operation %s parent failed", + svcname, key); + return status; + } + msg_recv = axis2_op_get_msg_recv(op, env); + if(msg_recv == NULL) + { + msg_recv = axis2_desc_builder_load_default_msg_recv(env); + axis2_op_set_msg_recv(op, env, msg_recv); + } + if(key) + { + /* If service defines the operation, then we should not override with module level + * operation. Module operations are global. If any setting to be modified, those operations + * can be defined in service */ + if(!axutil_hash_get(svc->op_alias_map, key, AXIS2_HASH_KEY_STRING)) + { + axutil_hash_set(svc->op_alias_map, key, AXIS2_HASH_KEY_STRING, op); + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_op_t *AXIS2_CALL +axis2_svc_get_op_with_qname( + const axis2_svc_t * svc, + const axutil_env_t * env, + const axutil_qname_t * op_qname) +{ + axis2_op_t *op = NULL; + axis2_char_t *nc_name = NULL; + + axis2_char_t *nc_tmp = NULL; + /* This is just for the sake of comparison, + * and must not be used to change the passed value + */ + axis2_bool_t is_matched = AXIS2_FALSE; + + AXIS2_PARAM_CHECK(env->error, op_qname, NULL); + + nc_name = axutil_qname_get_localpart(op_qname, env); + nc_tmp = nc_name; + + op = axutil_hash_get(svc->op_alias_map, nc_tmp, AXIS2_HASH_KEY_STRING); + if(op) + { + return op; + } + op = axutil_hash_get(svc->op_action_map, nc_tmp, AXIS2_HASH_KEY_STRING); + if(op) + { + return op; + } + + if(*nc_tmp && svc->op_action_map) + { + axutil_hash_index_t *hi = NULL; + const void *key = NULL; + + for(hi = axutil_hash_first(svc->op_action_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, &key, NULL, NULL); + + nc_tmp = nc_name; + + if(key) + { + axis2_char_t *search = NULL; + axis2_bool_t match_start = AXIS2_TRUE; + axis2_char_t *search_tmp = NULL; + + search = (axis2_char_t *)key; + + if(!axutil_strchr(search, '*')) + { + if(axutil_strstr(nc_tmp, search)) + { + axis2_char_t *comp_tmp = NULL; + + comp_tmp = axutil_strstr(nc_tmp, search); + if(strlen(comp_tmp) == strlen(search)) + { + nc_tmp = (axis2_char_t *)key; + is_matched = AXIS2_TRUE; + break; + } + } + continue; + } + + if(search[0] == '*') + { + search++; + if(!*search) + { + nc_tmp = (axis2_char_t *)key; + is_matched = AXIS2_TRUE; + break; + } + else if(axutil_strchr(search, '*')) + { + continue; + } + match_start = AXIS2_FALSE; + } + while(search && *search) + { + int length = 0; + axis2_char_t *loc_tmp = NULL; + + if(search_tmp) + { + AXIS2_FREE(env->allocator, search_tmp); + search_tmp = NULL; + } + loc_tmp = axutil_strchr(search, '*'); + if(loc_tmp && *loc_tmp) + { + if(!loc_tmp[1]) + { + is_matched = AXIS2_TRUE; + break; + } + length = (int)(loc_tmp - search); + /* We are sure that the difference lies within the int range */ + search_tmp = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * (length + 1))); + strncpy(search_tmp, search, length); + search_tmp[length] = '\0'; + } + else if(axutil_strstr(nc_tmp, search)) + { + axis2_char_t *comp_tmp = NULL; + + comp_tmp = axutil_strstr(nc_tmp, search); + if(strlen(comp_tmp) == strlen(search)) + { + nc_tmp = (axis2_char_t *)key; + is_matched = AXIS2_TRUE; + break; + } + break; + } + else + { + break; + } + if(search_tmp && axutil_strstr(nc_tmp, search_tmp)) + { + if(match_start && !(axutil_strncmp(nc_tmp, search, length) == 0)) + { + break; + } + else if(!match_start) + { + match_start = AXIS2_TRUE; + } + } + else + { + break; + } + search += axutil_strlen(search_tmp) + 1; + nc_tmp = axutil_strstr(nc_tmp, search_tmp) + axutil_strlen(search_tmp); + } + if(search_tmp) + { + AXIS2_FREE(env->allocator, search_tmp); + search_tmp = NULL; + } + if(is_matched || !*search) + { + nc_tmp = (axis2_char_t *)key; + is_matched = AXIS2_TRUE; + break; + } + } + } + } + if(!is_matched) + { + nc_tmp = nc_name; + } + + op = axutil_hash_get(svc->op_alias_map, nc_tmp, AXIS2_HASH_KEY_STRING); + if(op) + { + return op; + } + return (axis2_op_t *)axutil_hash_get(svc->op_action_map, nc_tmp, AXIS2_HASH_KEY_STRING); +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_svc_get_rest_op_list_with_method_and_location( + const axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * method, + const axis2_char_t * location) +{ + axutil_array_list_t *op_list = NULL; + axis2_char_t *key = NULL; + axis2_char_t *loc_str = NULL; + axis2_char_t *loc_str_tmp = NULL; + axis2_char_t *rindex = NULL; + int plen; + + AXIS2_PARAM_CHECK(env->error, method, NULL); + AXIS2_PARAM_CHECK(env->error, location, NULL); + + loc_str_tmp = (axis2_char_t *)location; /* Casted to facilitate loop */ + if(loc_str_tmp[1] == '/') + { + loc_str_tmp++; + } /* ignore any '/' at the beginning */ + if(strchr(loc_str_tmp, '?')) + { + axis2_char_t *temp = NULL; + + temp = strchr(loc_str_tmp, '?'); + temp[0] = '\0'; + } /* ignore block after '?' */ + do + { + axis2_char_t *temp = NULL; + temp = strchr(loc_str_tmp, '{'); + if(temp) + { + loc_str_tmp = temp; + } + else + { + loc_str_tmp += strlen(loc_str_tmp); + break; + } + } + while(loc_str_tmp[1] && loc_str_tmp[1] == '{'); + + loc_str = (axis2_char_t *)axutil_strmemdup(location, (loc_str_tmp - location), env); + + rindex = axutil_rindex(loc_str, '/'); + if(rindex && *rindex) + { + loc_str_tmp = axutil_string_substring_ending_at(loc_str, (int)(rindex - loc_str)); + /* We are sure that the difference lies within the int range */ + } + else + { + loc_str_tmp = loc_str; + } + + plen = axutil_strlen(method) + axutil_strlen(loc_str_tmp) + 2; + key = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * plen)); + sprintf(key, "%s:%s", method, loc_str_tmp); + AXIS2_FREE(env->allocator, loc_str); + op_list = (axutil_array_list_t *)axutil_hash_get(svc->op_rest_map, key, AXIS2_HASH_KEY_STRING); + AXIS2_FREE(env->allocator, key); + return op_list; +} + +AXIS2_EXTERN axis2_op_t *AXIS2_CALL +axis2_svc_get_op_with_name( + const axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * nc_name) +{ + AXIS2_PARAM_CHECK(env->error, nc_name, NULL); + + return (axis2_op_t *)axutil_hash_get(svc->op_alias_map, nc_name, AXIS2_HASH_KEY_STRING); +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_svc_get_all_ops( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->op_alias_map; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_set_parent( + axis2_svc_t * svc, + const axutil_env_t * env, + axis2_svc_grp_t * svc_grp) +{ + AXIS2_PARAM_CHECK(env->error, svc_grp, AXIS2_FAILURE); + + svc->parent = svc_grp; + if(svc_grp) + { + axis2_desc_set_parent(svc->base, env, axis2_svc_grp_get_base(svc_grp, env)); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_svc_grp_t *AXIS2_CALL +axis2_svc_get_parent( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->parent; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_set_qname( + axis2_svc_t * svc, + const axutil_env_t * env, + const axutil_qname_t * qname) +{ + AXIS2_PARAM_CHECK(env->error, qname, AXIS2_FAILURE); + if(svc->qname) + { + axutil_qname_free(svc->qname, env); + } + + if(qname) + { + svc->qname = axutil_qname_clone((axutil_qname_t *)qname, env); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axutil_qname_t *AXIS2_CALL +axis2_svc_get_qname( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->qname; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_add_param( + axis2_svc_t * svc, + const axutil_env_t * env, + axutil_param_t * param) +{ + axis2_char_t *paramname = NULL; + const axis2_char_t *svcname = axis2_svc_get_name(svc, env); + AXIS2_PARAM_CHECK(env->error, param, AXIS2_FAILURE); + paramname = axutil_param_get_name(param, env); + + if(axis2_svc_is_param_locked(svc, env, axutil_param_get_name(param, env))) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_PARAMETER_LOCKED_CANNOT_OVERRIDE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Parameter %s is locked for service %s", paramname, + svcname); + return AXIS2_FAILURE; + } + return axutil_param_container_add_param(svc->param_container, env, param); +} + +AXIS2_EXTERN axutil_param_t *AXIS2_CALL +axis2_svc_get_param( + const axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * name) +{ + axutil_param_t *param = NULL; + AXIS2_PARAM_CHECK(env->error, name, NULL); + + param = axutil_param_container_get_param(svc->param_container, env, name); + if(!param && svc->parent) + { + param = axis2_svc_grp_get_param(svc->parent, env, name); + } + return param; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_remove_param( + const axis2_svc_t *svc, + const axutil_env_t *env, + const axis2_char_t *param_name) +{ + axis2_status_t status = AXIS2_FAILURE; + status = axutil_param_container_delete_param(svc->param_container, env, param_name); + return status; +} + + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_svc_get_all_params( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return axutil_param_container_get_params(svc->param_container, env); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_svc_is_param_locked( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + axis2_bool_t locked = AXIS2_FALSE; + axutil_param_t *param = NULL; + axis2_svc_grp_t *parent = NULL; + axis2_bool_t ret = AXIS2_FALSE; + + AXIS2_PARAM_CHECK(env->error, param_name, AXIS2_FALSE); + + /* Checking the locked value of parent */ + + parent = axis2_svc_get_parent(svc, env); + if(parent) + locked = axis2_svc_grp_is_param_locked(parent, env, param_name); + if(parent && locked) + { + return AXIS2_TRUE; + } + param = axis2_svc_get_param(svc, env, param_name); + if(param) + { + ret = axutil_param_is_locked(param, env); + } + return ret; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_engage_module( + axis2_svc_t * svc, + const axutil_env_t * env, + axis2_module_desc_t * module_desc, + axis2_conf_t * conf) +{ + axis2_phase_resolver_t *phase_resolver = NULL; + axis2_status_t status = AXIS2_FAILURE; + const axis2_char_t *svcname = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_svc_engage_module"); + + AXIS2_PARAM_CHECK(env->error, module_desc, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE); + + svcname = axis2_svc_get_name(svc, env); + phase_resolver = axis2_phase_resolver_create_with_config(env, conf); + if(!phase_resolver) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase resolver failed for service %s", + svcname); + + return AXIS2_FAILURE; + } + + status = axis2_phase_resolver_engage_module_to_svc(phase_resolver, env, svc, module_desc); + if(status) + { + const axutil_qname_t *qname = NULL; + status = axutil_array_list_add(svc->engaged_module_list, env, module_desc); + qname = axis2_module_desc_get_qname(module_desc, env); + axis2_svc_add_module_qname(svc, env, qname); + } + + if(phase_resolver) + { + axis2_phase_resolver_free(phase_resolver, env); + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_svc_engage_module"); + + return status; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_svc_is_module_engaged( + axis2_svc_t * svc, + const axutil_env_t * env, + axutil_qname_t * module_qname) +{ + int i = 0, size = 0; + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_svc_is_module_engaged"); + size = axutil_array_list_size(svc->engaged_module_list, env); + for(i = 0; i < size; i++) + { + const axutil_qname_t *module_qname_l = NULL; + axis2_module_desc_t *module_desc_l = NULL; + + module_desc_l = (axis2_module_desc_t *)axutil_array_list_get(svc->engaged_module_list, env, + i); + module_qname_l = axis2_module_desc_get_qname(module_desc_l, env); + + if(axutil_qname_equals(module_qname, env, module_qname_l)) + { + return AXIS2_TRUE; + } + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_svc_is_module_engaged"); + return AXIS2_FALSE; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_svc_get_engaged_module_list( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->engaged_module_list; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_disengage_module( + axis2_svc_t * svc, + const axutil_env_t * env, + axis2_module_desc_t * module_desc, + axis2_conf_t * conf) +{ + axis2_phase_resolver_t *phase_resolver = NULL; + axis2_status_t status = AXIS2_FAILURE; + const axis2_char_t *svcname = NULL; + + AXIS2_PARAM_CHECK(env->error, module_desc, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE); + svcname = axis2_svc_get_name(svc, env); + + phase_resolver = axis2_phase_resolver_create_with_config(env, conf); + if(!phase_resolver) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase resolver failed for service %s", + svcname); + return AXIS2_FAILURE; + } + status = axis2_phase_resolver_disengage_module_from_svc(phase_resolver, env, svc, module_desc); + + axis2_phase_resolver_free(phase_resolver, env); + + return status; +} + +/** + * Here we extract all operations defined in module.xml and built execution + * chains for them by calling axis2_phase_resolver_build_execution_chains_for_module_op() + * function. Within that function handlers of the modules defined for that + * operation are added to module operation chains appropriately. + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_add_module_ops( + axis2_svc_t * svc, + const axutil_env_t * env, + axis2_module_desc_t * module_desc, + axis2_conf_t * conf) +{ + axutil_hash_t *map = NULL; + axutil_hash_index_t *index = NULL; + axis2_phase_resolver_t *phase_resolver = NULL; + axis2_op_t *op_desc = NULL; + axis2_status_t status = AXIS2_FAILURE; + const axis2_char_t *svcname = NULL; + axis2_char_t *modname = NULL; + axis2_char_t *opname = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_svc_add_module_ops"); + AXIS2_PARAM_CHECK(env->error, module_desc, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE); + svcname = axis2_svc_get_name(svc, env); + modname = axutil_qname_get_localpart(axis2_module_desc_get_qname(module_desc, env), env); + map = axis2_module_desc_get_all_ops(module_desc, env); + phase_resolver = axis2_phase_resolver_create_with_config_and_svc(env, conf, svc); + if(!phase_resolver) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase resolver failed for service %s", + svcname); + return AXIS2_FAILURE; + } + for(index = axutil_hash_first(map, env); index; index = axutil_hash_next(env, index)) + { + void *v = NULL; + axutil_hash_this(index, NULL, NULL, &v); + op_desc = (axis2_op_t *)v; + opname = axutil_qname_get_localpart(axis2_op_get_qname(op_desc, env), env); + status = axis2_phase_resolver_build_execution_chains_for_module_op(phase_resolver, env, + op_desc); + + if(AXIS2_SUCCESS != status) + { + if(phase_resolver) + { + axis2_phase_resolver_free(phase_resolver, env); + } + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Builidng module operation %s failed for module %s", opname, modname); + return status; + } + + status = axis2_svc_add_op(svc, env, op_desc); + if(AXIS2_SUCCESS != status) + { + if(phase_resolver) + { + axis2_phase_resolver_free(phase_resolver, env); + } + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Adding operation %s to service %s failed", + opname, svcname); + return status; + } + + } + + if(phase_resolver) + { + axis2_phase_resolver_free(phase_resolver, env); + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_svc_add_module_ops"); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_svc_get_name( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + if(svc->qname) + { + return axutil_qname_get_localpart(svc->qname, env); + } + + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_set_name( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * axis_svc_name) +{ + AXIS2_PARAM_CHECK(env->error, axis_svc_name, AXIS2_FAILURE); + + if(svc->axis_svc_name) + { + AXIS2_FREE(env->allocator, svc->axis_svc_name); + svc->axis_svc_name = NULL; + } + svc->axis_svc_name = axutil_strdup(env, axis_svc_name); + if(!svc->axis_svc_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_set_last_update( + axis2_svc_t * svc, + const axutil_env_t * env) +{ + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN long AXIS2_CALL +axis2_svc_get_last_update( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->last_update; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_svc_get_file_name( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->filename; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_set_file_name( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * filename) +{ + AXIS2_PARAM_CHECK(env->error, filename, AXIS2_FAILURE); + + if(svc->filename) + { + AXIS2_FREE(env->allocator, svc->filename); + svc->filename = NULL; + } + svc->filename = (axis2_char_t *)axutil_strdup(env, filename); + if(!svc->filename) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_svc_get_svc_desc( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->svc_desc; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_set_svc_desc( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * svc_desc) +{ + AXIS2_PARAM_CHECK(env->error, svc_desc, AXIS2_FAILURE); + + if(svc->svc_desc) + { + AXIS2_FREE(env->allocator, svc->svc_desc); + svc->svc_desc = NULL; + } + svc->svc_desc = (axis2_char_t *)axutil_strdup(env, svc_desc); + if(!svc->svc_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_add_mapping( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * mapping_key, + axis2_op_t * op_desc) +{ + AXIS2_PARAM_CHECK(env->error, mapping_key, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, op_desc, AXIS2_FAILURE); + + axutil_hash_set(svc->op_action_map, axutil_strdup(env, mapping_key), AXIS2_HASH_KEY_STRING, + op_desc); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_add_rest_mapping( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * method, + const axis2_char_t * location, + axis2_op_t * op_desc) +{ + + axis2_char_t *mapping_url = NULL; + int key_len = 0; + axis2_char_t* question_char = NULL; + axis2_char_t* local_location_str = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + local_location_str = (axis2_char_t *)location; /* Casted to facilitate loop */ + + /* skip the beginning '/' */ + if(*local_location_str == '/') + { + local_location_str++; + } + question_char = axutil_strchr(local_location_str, '?'); + if(question_char) + { + *question_char = '\0'; + } + + key_len = axutil_strlen(method) + axutil_strlen(local_location_str) + 2; + + mapping_url = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * key_len)); + if(!mapping_url) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create the rest mapping url"); + return AXIS2_FAILURE; + } + + sprintf(mapping_url, "%s:%s", method, local_location_str); + + status = axis2_core_utils_prepare_rest_mapping(env, mapping_url, svc->op_rest_map, op_desc); + + if(mapping_url) + { + AXIS2_FREE(env->allocator, mapping_url); + } + + /* restore the question character */ + if(question_char) + { + *question_char = '?'; + } + + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_add_module_qname( + axis2_svc_t * svc, + const axutil_env_t * env, + const axutil_qname_t * module_qname) +{ + axutil_qname_t *qmodule_qname_l = NULL; + + AXIS2_PARAM_CHECK(env->error, module_qname, AXIS2_FAILURE); + + qmodule_qname_l = axutil_qname_clone((axutil_qname_t *)module_qname, env); + return axutil_array_list_add(svc->module_list, env, qmodule_qname_l); +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_svc_get_all_module_qnames( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->module_list; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_svc_get_target_ns( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->target_ns; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_set_target_ns( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * ns) +{ + AXIS2_PARAM_CHECK(env->error, ns, AXIS2_FAILURE); + + if(svc->target_ns) + { + AXIS2_FREE(env->allocator, svc->target_ns); + svc->target_ns = NULL; + } + svc->target_ns = axutil_strdup(env, ns); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_svc_get_target_ns_prefix( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->target_ns_prefix; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_set_target_ns_prefix( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * prefix) +{ + AXIS2_PARAM_CHECK(env->error, prefix, AXIS2_FAILURE); + + if(svc->target_ns_prefix) + { + AXIS2_FREE(env->allocator, svc->target_ns_prefix); + svc->target_ns_prefix = NULL; + } + svc->target_ns_prefix = axutil_strdup(env, prefix); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_svc_get_ns_map( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->ns_map; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_set_ns_map( + axis2_svc_t * svc, + const axutil_env_t * env, + axutil_hash_t * ns_map) +{ + axutil_hash_index_t *hi = NULL; + + AXIS2_PARAM_CHECK(env->error, ns_map, AXIS2_FAILURE); + + if(svc->ns_map) + { + for(hi = axutil_hash_first(svc->ns_map, env); hi; hi = axutil_hash_next(env, hi)) + { + void *value = NULL; + void *key = NULL; + axutil_hash_this(hi, (const void **)&key, NULL, (void **)&value); + if(key) + { + AXIS2_FREE(env->allocator, key); + key = NULL; + } + if(value) + { + AXIS2_FREE(env->allocator, value); + value = NULL; + } + } + axutil_hash_free(svc->ns_map, env); + } + svc->ns_map = ns_map; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_svc_swap_mapping_table( + axis2_svc_t * svc, + const axutil_env_t * env, + axutil_hash_t * orig_table) +{ + axutil_hash_t *new_table = NULL; + axutil_hash_index_t *hi = NULL; + + AXIS2_PARAM_CHECK(env->error, orig_table, NULL); + + new_table = axutil_hash_make(env); + + for(hi = axutil_hash_first(orig_table, env); env; hi = axutil_hash_next(env, hi)) + { + void *value = NULL; + void *key = NULL; + + axutil_hash_this(hi, (const void **)&key, NULL, (void **)&value); + axutil_hash_set(new_table, value, AXIS2_HASH_KEY_STRING, key); + } + return new_table; +} + +AXIS2_EXTERN void *AXIS2_CALL +axis2_svc_get_impl_class( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->impl_class; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_set_impl_class( + axis2_svc_t * svc, + const axutil_env_t * env, + void *impl_class) +{ + svc->impl_class = impl_class; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL +axis2_svc_get_param_container( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->param_container; +} + +AXIS2_EXTERN axis2_flow_container_t *AXIS2_CALL +axis2_svc_get_flow_container( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->flow_container; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_svc_get_svc_wsdl_path( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->wsdl_path; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_set_svc_wsdl_path( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * wsdl_path) +{ + AXIS2_PARAM_CHECK(env->error, wsdl_path, AXIS2_FAILURE); + svc->wsdl_path = (axis2_char_t *)axutil_strdup(env, wsdl_path); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_svc_get_svc_folder_path( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->folder_path; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_set_svc_folder_path( + axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * folder_path) +{ + AXIS2_PARAM_CHECK(env->error, folder_path, AXIS2_FAILURE); + svc->folder_path = (axis2_char_t *)axutil_strdup(env, folder_path); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_desc_t *AXIS2_CALL +axis2_svc_get_base( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->base; +} + +AXIS2_EXTERN axutil_thread_mutex_t * AXIS2_CALL +axis2_svc_get_mutex( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->mutex; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_svc_get_rest_map( + const axis2_svc_t * svc, + const axutil_env_t * env) +{ + return svc->op_rest_map; +} + diff --git a/src/core/description/svc_grp.c b/src/core/description/svc_grp.c new file mode 100644 index 0000000..157b77a --- /dev/null +++ b/src/core/description/svc_grp.c @@ -0,0 +1,600 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axis2_svc_grp +{ + + /** service group name */ + axis2_char_t *svc_grp_name; + + /** map of services */ + axutil_hash_t *svcs; + + /** to store service group modules QNames */ + axutil_array_list_t *module_qname_list; + + /** to store module ref at deploy time parsing */ + axis2_conf_t *parent; + + /** list of module references */ + axutil_array_list_t *module_list; + + /** parameter container to hold service related parameters */ + axutil_param_container_t *param_container; + + /** base description struct */ + axis2_desc_t *base; +}; + +AXIS2_EXTERN axis2_svc_grp_t *AXIS2_CALL +axis2_svc_grp_create( + const axutil_env_t * env) +{ + axis2_svc_grp_t *svc_grp = NULL; + svc_grp = (axis2_svc_grp_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_grp_t)); + + if(!svc_grp) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + + svc_grp->param_container = NULL; + svc_grp->module_qname_list = NULL; + svc_grp->svcs = NULL; + svc_grp->parent = NULL; + svc_grp->svc_grp_name = NULL; + svc_grp->module_list = NULL; + svc_grp->base = NULL; + + svc_grp->param_container = axutil_param_container_create(env); + if(!svc_grp->param_container) + { + axis2_svc_grp_free(svc_grp, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating parameter container failed"); + return NULL; + } + + svc_grp->module_qname_list = axutil_array_list_create(env, 20); + if(!svc_grp->module_qname_list) + { + axis2_svc_grp_free(svc_grp, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating module qnames list failed"); + return NULL; + } + + svc_grp->module_list = axutil_array_list_create(env, 0); + if(!svc_grp->module_list) + { + axis2_svc_grp_free(svc_grp, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating modules list failed"); + return NULL; + } + + svc_grp->svcs = axutil_hash_make(env); + if(!svc_grp->svcs) + { + axis2_svc_grp_free(svc_grp, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating services map failed"); + return NULL; + } + + svc_grp->base = axis2_desc_create(env); + if(!svc_grp->base) + { + axis2_svc_grp_free(svc_grp, env); + return NULL; + } + + return svc_grp; +} + +AXIS2_EXTERN axis2_svc_grp_t *AXIS2_CALL +axis2_svc_grp_create_with_conf( + const axutil_env_t * env, + axis2_conf_t * conf) +{ + axis2_svc_grp_t *svc_grp = NULL; + + AXIS2_PARAM_CHECK(env->error, conf, NULL); + + svc_grp = (axis2_svc_grp_t *)axis2_svc_grp_create(env); + if(svc_grp) + svc_grp->parent = conf; + if(conf) + { + axis2_desc_set_parent(svc_grp->base, env, axis2_conf_get_base(conf, env)); + } + + return svc_grp; + +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_svc_grp_free( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env) +{ + if(svc_grp->param_container) + { + axutil_param_container_free(svc_grp->param_container, env); + } + + if(svc_grp->svc_grp_name) + { + AXIS2_FREE(env->allocator, svc_grp->svc_grp_name); + } + + if(svc_grp->svcs) + { + /* services are freed by arch_file_data */ + axutil_hash_free(svc_grp->svcs, env); + } + + if(svc_grp->module_qname_list) + { + axutil_array_list_free(svc_grp->module_qname_list, env); + } + + if(svc_grp->module_list) + { + axutil_array_list_free(svc_grp->module_list, env); + } + + if(svc_grp->base) + { + axis2_desc_free(svc_grp->base, env); + } + + if(svc_grp) + { + AXIS2_FREE(env->allocator, svc_grp); + } + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_grp_set_name( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axis2_char_t * name) +{ + if(svc_grp->svc_grp_name) + AXIS2_FREE(env->allocator, svc_grp->svc_grp_name); + svc_grp->svc_grp_name = axutil_strdup(env, name); + if(!svc_grp->svc_grp_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No Memory"); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_svc_grp_get_name( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env) +{ + return svc_grp->svc_grp_name; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_grp_add_svc( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + axis2_svc_t * svc) +{ + axis2_status_t status = AXIS2_FAILURE; + const axutil_qname_t *svc_qname = NULL; + axis2_char_t *svc_name = NULL; + + AXIS2_PARAM_CHECK(env->error, svc, AXIS2_FAILURE); + + if(!svc_grp->svcs) + { + svc_grp->svcs = axutil_hash_make(env); + if(!svc_grp->svcs) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating services list failed"); + return AXIS2_FAILURE; + } + } + + svc_qname = axis2_svc_get_qname(svc, env); + svc_name = axutil_qname_to_string((axutil_qname_t *)svc_qname, env); + axutil_hash_set(svc_grp->svcs, svc_name, AXIS2_HASH_KEY_STRING, svc); + + status = axis2_svc_set_last_update(svc, env); + + if(AXIS2_SUCCESS != status) + { + /* remove the previously added service */ + axutil_hash_set(svc_grp->svcs, svc_name, AXIS2_HASH_KEY_STRING, NULL); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting last update failed for service %s", + svc_name); + + return status; + } + + status = axis2_svc_set_parent(svc, env, svc_grp); + if(AXIS2_SUCCESS != status) + { + /* remove the previously added service */ + axutil_hash_set(svc_grp->svcs, svc_name, AXIS2_HASH_KEY_STRING, NULL); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting parent failed for service %s", svc_name); + + return status; + } + + return status; +} + +AXIS2_EXTERN axis2_svc_t *AXIS2_CALL +axis2_svc_grp_get_svc( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axutil_qname_t * qname) +{ + axis2_char_t *name = NULL; + + AXIS2_PARAM_CHECK(env->error, qname, NULL); + + name = axutil_qname_to_string((axutil_qname_t *)qname, env); + return (axis2_svc_t *)axutil_hash_get(svc_grp->svcs, name, AXIS2_HASH_KEY_STRING); +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_svc_grp_get_all_svcs( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env) +{ + return svc_grp->svcs; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_grp_remove_svc( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axutil_qname_t * svc_qname) +{ + axis2_svc_t *svc = NULL; + axis2_char_t *svc_name = NULL; + + AXIS2_PARAM_CHECK(env->error, svc_name, AXIS2_FAILURE); + + svc = axis2_svc_grp_get_svc(svc_grp, env, svc_qname); + + svc_name = axutil_qname_to_string((axutil_qname_t *)svc_qname, env); + axutil_hash_set(svc_grp->svcs, svc_name, AXIS2_HASH_KEY_STRING, NULL); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_grp_add_param( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + axutil_param_t * param) +{ + const axis2_char_t *svc_grp_name = axis2_svc_grp_get_name(svc_grp, env); + axis2_char_t *param_name = axutil_param_get_name(param, env); + AXIS2_PARAM_CHECK(env->error, param, AXIS2_FAILURE); + if(axis2_svc_grp_is_param_locked(svc_grp, env, param_name)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_PARAMETER_LOCKED_CANNOT_OVERRIDE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Parameter %s is locked for service group %s", + param_name, svc_grp_name); + return AXIS2_FAILURE; + } + return axutil_param_container_add_param(svc_grp->param_container, env, param); +} + +AXIS2_EXTERN axutil_param_t *AXIS2_CALL +axis2_svc_grp_get_param( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axis2_char_t * name) +{ + axutil_param_t *param = NULL; + AXIS2_PARAM_CHECK(env->error, name, NULL); + + param = axutil_param_container_get_param(svc_grp->param_container, env, name); + if(!param && svc_grp->parent) + { + param = axis2_conf_get_param(svc_grp->parent, env, name); + } + return param; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_grp_remove_param( + const axis2_svc_grp_t *svc_grp, + const axutil_env_t *env, + const axis2_char_t *param_name) +{ + axis2_status_t status = AXIS2_FAILURE; + status = axutil_param_container_delete_param(svc_grp->param_container, env, param_name); + return status; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_svc_grp_get_all_params( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env) +{ + return axutil_param_container_get_params(svc_grp->param_container, env); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_svc_grp_is_param_locked( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + axis2_bool_t locked = AXIS2_FALSE; + axis2_conf_t *parent = NULL; + axutil_param_t *param = NULL; + axis2_bool_t ret = AXIS2_FALSE; + + AXIS2_PARAM_CHECK(env->error, param_name, AXIS2_FALSE); + + parent = axis2_svc_grp_get_parent(svc_grp, env); + /* Checking the locked value of parent */ + if(parent) + { + locked = axis2_conf_is_param_locked(parent, env, param_name); + } + if(locked) + { + ret = AXIS2_TRUE; + } + param = axis2_svc_grp_get_param(svc_grp, env, param_name); + if(param && axutil_param_is_locked(param, env)) + { + ret = AXIS2_TRUE; + } + else + { + ret = AXIS2_FALSE; + } + return ret; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_grp_add_module_qname( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axutil_qname_t * module_qname) +{ + return axutil_array_list_add(svc_grp->module_qname_list, env, module_qname); +} + +AXIS2_EXTERN axis2_conf_t *AXIS2_CALL +axis2_svc_grp_get_parent( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env) +{ + return svc_grp->parent; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_grp_set_parent( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + axis2_conf_t * parent) +{ + AXIS2_PARAM_CHECK(env->error, parent, AXIS2_FAILURE); + + if(svc_grp->parent) + axis2_conf_free(svc_grp->parent, env); + svc_grp->parent = parent; + if(parent) + { + axis2_desc_set_parent(svc_grp->base, env, axis2_conf_get_base(parent, env)); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_grp_engage_module( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axutil_qname_t * module_name) +{ + int i = 0; + axis2_status_t status = AXIS2_FAILURE; + axutil_qname_t *modu = NULL; + axis2_char_t *modu_local = NULL; + axis2_char_t *module_name_local = NULL; + axutil_hash_t *svc_map = NULL; + axis2_phase_resolver_t *phase_resolver = NULL; + axis2_module_desc_t *module = NULL; + const axis2_char_t *svc_grp_name = axis2_svc_grp_get_name(svc_grp, env); + + int size = 0; + + AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FAILURE); + + size = axutil_array_list_size(svc_grp->module_qname_list, env); + for(i = 0; size; i++) + { + modu = axutil_array_list_get(svc_grp->module_qname_list, env, i); + modu_local = axutil_qname_get_localpart(modu, env); + module_name_local = axutil_qname_get_localpart(module_name, env); + if(!axutil_strcmp(modu_local, module_name_local)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MODULE_ALREADY_ENGAGED_TO_SVC_GRP, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Module %s is already engaged to service group %s", module_name_local, svc_grp_name); + + return AXIS2_FAILURE; + } + } + + svc_map = axis2_svc_grp_get_all_svcs(svc_grp, env); + if(!svc_map) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service map not found for service group %s", + svc_grp_name); + + return AXIS2_FAILURE; + } + + phase_resolver = axis2_phase_resolver_create_with_config(env, svc_grp->parent); + + if(!phase_resolver) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating phase resolver failed for service group %s", svc_grp_name); + + return AXIS2_FAILURE; + } + + module = axis2_conf_get_module(svc_grp->parent, env, module_name); + if(module) + { + axis2_svc_t *axis_svc = NULL; + axutil_hash_index_t *index = NULL; + + index = axutil_hash_first(svc_map, env); + while(index) + { + const axis2_char_t *svc_name = NULL; + void *v = NULL; + /* engage in per each service */ + axutil_hash_this(index, NULL, NULL, &v); + axis_svc = (axis2_svc_t *)v; + svc_name = axis2_svc_get_name(axis_svc, env); + status = axis2_phase_resolver_engage_module_to_svc(phase_resolver, env, axis_svc, + module); + + if(!status) + { + if(phase_resolver) + { + axis2_phase_resolver_free(phase_resolver, env); + } + + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Engaging module %s to service %s failed", + module_name_local, svc_name); + + return status; + } + + index = axutil_hash_next(env, index); + } + } + + if(phase_resolver) + { + axis2_phase_resolver_free(phase_resolver, env); + } + + return axis2_svc_grp_add_module_qname(svc_grp, env, module_name); +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_svc_grp_get_all_module_qnames( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env) +{ + return svc_grp->module_qname_list; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_svc_grp_add_module_ref( + axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + const axutil_qname_t * moduleref) +{ + const axis2_char_t *svc_grp_name = NULL; + + AXIS2_PARAM_CHECK(env->error, moduleref, AXIS2_FAILURE); + svc_grp_name = axis2_svc_grp_get_name(svc_grp, env); + + if(!svc_grp->module_list) + { + svc_grp->module_list = axutil_array_list_create(env, 0); + if(!svc_grp->module_list) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating module list failed for service group %s", svc_grp_name); + return AXIS2_FAILURE; + } + } + + return axutil_array_list_add(svc_grp->module_list, env, moduleref); +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_svc_grp_get_all_module_refs( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env) +{ + return svc_grp->module_list; +} + +AXIS2_EXTERN axis2_svc_grp_ctx_t *AXIS2_CALL +axis2_svc_grp_get_svc_grp_ctx( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env, + axis2_conf_ctx_t * parent) +{ + axis2_svc_grp_ctx_t *svc_grp_ctx = NULL; + const axis2_char_t *svc_grp_name = NULL; + + AXIS2_PARAM_CHECK(env->error, parent, NULL); + svc_grp_name = axis2_svc_grp_get_name(svc_grp, env); + + svc_grp_ctx = axis2_svc_grp_ctx_create(env, (axis2_svc_grp_t *)svc_grp, parent); + if(!svc_grp_ctx) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating service group context failed for service group %s", svc_grp_name); + return NULL; + } + + return svc_grp_ctx; +} + +AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL +axis2_svc_grp_get_param_container( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env) +{ + return svc_grp->param_container; +} + +AXIS2_EXTERN axis2_desc_t *AXIS2_CALL +axis2_svc_grp_get_base( + const axis2_svc_grp_t * svc_grp, + const axutil_env_t * env) +{ + return svc_grp->base; +} + diff --git a/src/core/description/transport_in_desc.c b/src/core/description/transport_in_desc.c new file mode 100644 index 0000000..85885b6 --- /dev/null +++ b/src/core/description/transport_in_desc.c @@ -0,0 +1,305 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axis2_transport_in_desc +{ + axis2_flow_t *in_flow; + axis2_flow_t *fault_in_flow; + AXIS2_TRANSPORT_ENUMS trans_enum; + + /** + * transport receiver will have a shallow copy, but will be freed by + * free function. + */ + axis2_transport_receiver_t *recv; + axis2_phase_t *in_phase; + axis2_phase_t *fault_phase; + + /** parameter container to hold transport in related parameters */ + axutil_param_container_t *param_container; +}; + +AXIS2_EXTERN axis2_transport_in_desc_t *AXIS2_CALL +axis2_transport_in_desc_create( + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS trans_enum) +{ + axis2_transport_in_desc_t *transport_in = NULL; + + transport_in = (axis2_transport_in_desc_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_transport_in_desc_t)); + + if(!transport_in) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + transport_in->trans_enum = trans_enum; + transport_in->in_phase = NULL; + transport_in->fault_phase = NULL; + transport_in->in_flow = NULL; + transport_in->fault_in_flow = NULL; + transport_in->recv = NULL; + transport_in->param_container = NULL; + + transport_in->param_container = axutil_param_container_create(env); + if(!transport_in->param_container) + { + axis2_transport_in_desc_free(transport_in, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + return transport_in; +} + +void AXIS2_CALL +axis2_transport_in_desc_free( + axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env) +{ + if(transport_in->recv) + { + axis2_transport_receiver_free(transport_in->recv, env); + } + + if(transport_in->param_container) + { + axutil_param_container_free(transport_in->param_container, env); + } + + if(transport_in->in_flow) + { + axis2_flow_free(transport_in->in_flow, env); + } + + if(transport_in->fault_in_flow) + { + axis2_flow_free(transport_in->fault_in_flow, env); + } + + if(transport_in->in_phase) + { + axis2_phase_free(transport_in->in_phase, env); + } + + if(transport_in->fault_phase) + { + axis2_phase_free(transport_in->fault_phase, env); + } + + AXIS2_FREE(env->allocator, transport_in); + + return; +} + +void AXIS2_CALL +axis2_transport_in_desc_free_void_arg( + void *transport_in, + const axutil_env_t * env) +{ + axis2_transport_in_desc_t *transport_in_l = NULL; + + transport_in_l = (axis2_transport_in_desc_t *)transport_in; + axis2_transport_in_desc_free(transport_in_l, env); + return; +} + +AXIS2_TRANSPORT_ENUMS AXIS2_CALL +axis2_transport_in_desc_get_enum( + const axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env) +{ + return transport_in->trans_enum; +} + +axis2_status_t AXIS2_CALL +axis2_transport_in_desc_set_enum( + axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS trans_enum) +{ + transport_in->trans_enum = trans_enum; + return AXIS2_SUCCESS; +} + +axis2_flow_t *AXIS2_CALL +axis2_transport_in_desc_get_in_flow( + const axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env) +{ + return transport_in->in_flow; +} + +axis2_status_t AXIS2_CALL +axis2_transport_in_desc_set_in_flow( + axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env, + axis2_flow_t * in_flow) +{ + AXIS2_PARAM_CHECK(env->error, in_flow, AXIS2_FAILURE); + + if(transport_in->in_flow) + { + axis2_flow_free(transport_in->in_flow, env); + } + transport_in->in_flow = in_flow; + return AXIS2_SUCCESS; +} + +axis2_flow_t *AXIS2_CALL +axis2_transport_in_desc_get_fault_in_flow( + const axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env) +{ + return transport_in->fault_in_flow; +} + +axis2_status_t AXIS2_CALL +axis2_transport_in_desc_set_fault_in_flow( + axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env, + axis2_flow_t * fault_in_flow) +{ + AXIS2_PARAM_CHECK(env->error, fault_in_flow, AXIS2_FAILURE); + + if(transport_in->fault_in_flow) + { + axis2_flow_free(transport_in->fault_in_flow, env); + } + transport_in->fault_in_flow = fault_in_flow; + return AXIS2_SUCCESS; +} + +axis2_transport_receiver_t *AXIS2_CALL +axis2_transport_in_desc_get_recv( + const axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env) +{ + return transport_in->recv; +} + +axis2_status_t AXIS2_CALL +axis2_transport_in_desc_set_recv( + axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env, + axis2_transport_receiver_t * recv) +{ + AXIS2_PARAM_CHECK(env->error, recv, AXIS2_FAILURE); + + if(transport_in->recv) + { + axis2_transport_receiver_free(transport_in->recv, env); + } + + transport_in->recv = recv; + return AXIS2_SUCCESS; +} + +axis2_phase_t *AXIS2_CALL +axis2_transport_in_desc_get_in_phase( + const axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env) +{ + return transport_in->in_phase; +} + +axis2_status_t AXIS2_CALL +axis2_transport_in_desc_set_in_phase( + axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env, + axis2_phase_t * in_phase) +{ + AXIS2_PARAM_CHECK(env->error, in_phase, AXIS2_FAILURE); + + if(transport_in->in_phase) + { + axis2_phase_free(transport_in->in_phase, env); + } + transport_in->in_phase = in_phase; + return AXIS2_SUCCESS; +} + +axis2_phase_t *AXIS2_CALL +axis2_transport_in_desc_get_fault_phase( + const axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env) +{ + return transport_in->fault_phase; +} + +axis2_status_t AXIS2_CALL +axis2_transport_in_desc_set_fault_phase( + axis2_transport_in_desc_t * transport_in, + const axutil_env_t * env, + axis2_phase_t * fault_phase) +{ + AXIS2_PARAM_CHECK(env->error, fault_phase, AXIS2_FAILURE); + + if(transport_in->fault_phase) + { + axis2_phase_free(transport_in->fault_phase, env); + } + transport_in->fault_phase = fault_phase; + return AXIS2_SUCCESS; + +} + +axis2_status_t AXIS2_CALL +axis2_transport_in_desc_add_param( + axis2_transport_in_desc_t * transport_in_desc, + const axutil_env_t * env, + axutil_param_t * param) +{ + AXIS2_PARAM_CHECK(env->error, param, AXIS2_FAILURE); + + return axutil_param_container_add_param(transport_in_desc-> param_container, env, param); +} + +axutil_param_t *AXIS2_CALL +axis2_transport_in_desc_get_param( + const axis2_transport_in_desc_t * transport_in_desc, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + return axutil_param_container_get_param(transport_in_desc->param_container, env, param_name); +} + +axis2_bool_t AXIS2_CALL +axis2_transport_in_desc_is_param_locked( + axis2_transport_in_desc_t * transport_in_desc, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + AXIS2_PARAM_CHECK(env->error, param_name, AXIS2_FAILURE); + + return axutil_param_container_is_param_locked(transport_in_desc-> param_container, env, + param_name); +} + +AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL +axis2_transport_in_desc_param_container( + const axis2_transport_in_desc_t * transport_in_desc, + const axutil_env_t * env) +{ + return transport_in_desc->param_container; +} + diff --git a/src/core/description/transport_out_desc.c b/src/core/description/transport_out_desc.c new file mode 100644 index 0000000..ec69f56 --- /dev/null +++ b/src/core/description/transport_out_desc.c @@ -0,0 +1,299 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct axis2_transport_out_desc +{ + axis2_flow_t *out_flow; + axis2_flow_t *fault_out_flow; + AXIS2_TRANSPORT_ENUMS trans_enum; + axis2_transport_sender_t *sender; + axis2_phase_t *out_phase; + axis2_phase_t *fault_phase; + + /** parameter container that holds parameter */ + axutil_param_container_t *param_container; +}; + +AXIS2_EXTERN axis2_transport_out_desc_t *AXIS2_CALL +axis2_transport_out_desc_create( + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS trans_enum) +{ + axis2_transport_out_desc_t *transport_out = NULL; + + transport_out = (axis2_transport_out_desc_t *)AXIS2_MALLOC(env-> allocator, + sizeof(axis2_transport_out_desc_t)); + + if(!transport_out) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + transport_out->trans_enum = trans_enum; + transport_out->out_phase = NULL; + transport_out->fault_phase = NULL; + transport_out->out_flow = NULL; + transport_out->fault_out_flow = NULL; + transport_out->sender = NULL; + transport_out->param_container = NULL; + + transport_out->param_container = axutil_param_container_create(env); + if(!transport_out->param_container) + { + axis2_transport_out_desc_free(transport_out, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + return transport_out; +} + +void AXIS2_CALL +axis2_transport_out_desc_free( + axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env) +{ + if(transport_out->sender) + { + AXIS2_TRANSPORT_SENDER_FREE(transport_out->sender, env); + } + + if(transport_out->param_container) + { + axutil_param_container_free(transport_out->param_container, env); + } + + if(transport_out->out_flow) + { + axis2_flow_free(transport_out->out_flow, env); + } + + if(transport_out->fault_out_flow) + { + axis2_flow_free(transport_out->fault_out_flow, env); + } + + if(transport_out->out_phase) + { + axis2_phase_free(transport_out->out_phase, env); + } + + if(transport_out->fault_phase) + { + axis2_phase_free(transport_out->fault_phase, env); + } + + AXIS2_FREE(env->allocator, transport_out); + + return; +} + +void AXIS2_CALL +axis2_transport_out_desc_free_void_arg( + void *transport_out, + const axutil_env_t * env) +{ + axis2_transport_out_desc_t *transport_out_l = NULL; + + transport_out_l = (axis2_transport_out_desc_t *)transport_out; + axis2_transport_out_desc_free(transport_out_l, env); + return; +} + +AXIS2_TRANSPORT_ENUMS AXIS2_CALL +axis2_transport_out_desc_get_enum( + const axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env) +{ + return transport_out->trans_enum; +} + +axis2_status_t AXIS2_CALL +axis2_transport_out_desc_set_enum( + axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS trans_enum) +{ + transport_out->trans_enum = trans_enum; + return AXIS2_SUCCESS; +} + +axis2_flow_t *AXIS2_CALL +axis2_transport_out_desc_get_out_flow( + const axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env) +{ + return transport_out->out_flow; +} + +axis2_status_t AXIS2_CALL +axis2_transport_out_desc_set_out_flow( + axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env, + axis2_flow_t * out_flow) +{ + AXIS2_PARAM_CHECK(env->error, out_flow, AXIS2_FAILURE); + + if(transport_out->out_flow) + { + axis2_flow_free(transport_out->out_flow, env); + } + transport_out->out_flow = out_flow; + return AXIS2_SUCCESS; +} + +axis2_flow_t *AXIS2_CALL +axis2_transport_out_desc_get_fault_out_flow( + const axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env) +{ + return transport_out->fault_out_flow; +} + +axis2_status_t AXIS2_CALL +axis2_transport_out_desc_set_fault_out_flow( + axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env, + axis2_flow_t * fault_out_flow) +{ + AXIS2_PARAM_CHECK(env->error, fault_out_flow, AXIS2_FAILURE); + + if(transport_out->fault_out_flow) + { + axis2_flow_free(transport_out->fault_out_flow, env); + } + transport_out->fault_out_flow = fault_out_flow; + return AXIS2_SUCCESS; +} + +axis2_transport_sender_t *AXIS2_CALL +axis2_transport_out_desc_get_sender( + const axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env) +{ + return transport_out->sender; +} + +axis2_status_t AXIS2_CALL +axis2_transport_out_desc_set_sender( + axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env, + axis2_transport_sender_t * sender) +{ + AXIS2_PARAM_CHECK(env->error, sender, AXIS2_FAILURE); + + if(transport_out->sender) + { + AXIS2_TRANSPORT_SENDER_FREE(transport_out->sender, env); + } + + transport_out->sender = sender; + return AXIS2_SUCCESS; +} + +axis2_phase_t *AXIS2_CALL +axis2_transport_out_desc_get_out_phase( + const axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env) +{ + return transport_out->out_phase; +} + +axis2_status_t AXIS2_CALL +axis2_transport_out_desc_set_out_phase( + axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env, + axis2_phase_t * out_phase) +{ + AXIS2_PARAM_CHECK(env->error, out_phase, AXIS2_FAILURE); + + if(transport_out->out_phase) + { + axis2_phase_free(transport_out->out_phase, env); + } + transport_out->out_phase = out_phase; + return AXIS2_SUCCESS; +} + +axis2_phase_t *AXIS2_CALL +axis2_transport_out_desc_get_fault_phase( + const axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env) +{ + return transport_out->fault_phase; +} + +axis2_status_t AXIS2_CALL +axis2_transport_out_desc_set_fault_phase( + axis2_transport_out_desc_t * transport_out, + const axutil_env_t * env, + axis2_phase_t * fault_phase) +{ + AXIS2_PARAM_CHECK(env->error, fault_phase, AXIS2_FAILURE); + + if(transport_out->fault_phase) + { + axis2_phase_free(transport_out->fault_phase, env); + } + transport_out->fault_phase = fault_phase; + return AXIS2_SUCCESS; + +} + +axis2_status_t AXIS2_CALL +axis2_transport_out_desc_add_param( + axis2_transport_out_desc_t * transport_out_desc, + const axutil_env_t * env, + axutil_param_t * param) +{ + AXIS2_PARAM_CHECK(env->error, param, AXIS2_FAILURE); + + return axutil_param_container_add_param(transport_out_desc-> param_container, env, param); +} + +axutil_param_t *AXIS2_CALL +axis2_transport_out_desc_get_param( + const axis2_transport_out_desc_t * transport_out_desc, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + return axutil_param_container_get_param(transport_out_desc->param_container, env, param_name); +} + +axis2_bool_t AXIS2_CALL +axis2_transport_out_desc_is_param_locked( + axis2_transport_out_desc_t * transport_out_desc, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + AXIS2_PARAM_CHECK(env->error, param_name, AXIS2_FAILURE); + + return axutil_param_container_is_param_locked(transport_out_desc-> param_container, env, + param_name); +} + +AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL +axis2_transport_out_desc_param_container( + const axis2_transport_out_desc_t * transport_out_desc, + const axutil_env_t * env) +{ + return transport_out_desc->param_container; +} + diff --git a/src/core/engine/Makefile.am b/src/core/engine/Makefile.am new file mode 100644 index 0000000..7b9598c --- /dev/null +++ b/src/core/engine/Makefile.am @@ -0,0 +1,47 @@ +lib_LTLIBRARIES=libaxis2_engine.la + +libaxis2_engine_la_SOURCES= ../transport/transport_receiver.c handler.c \ + conf.c \ + phase.c \ + disp_checker.c \ + addr_disp.c \ + rest_disp.c \ + req_uri_disp.c \ + disp.c \ + soap_action_disp.c \ + soap_body_disp.c \ + ctx_handler.c \ + engine.c + +libaxis2_engine_la_LDFLAGS = -version-info $(VERSION_NO) + +libaxis2_engine_la_LIBADD=$(top_builddir)/src/core/description/libaxis2_description.la \ + $(top_builddir)/src/core/receivers/libaxis2_receivers.la \ + $(top_builddir)/src/core/deployment/libaxis2_deployment.la \ + $(top_builddir)/src/core/context/libaxis2_context.la \ + $(top_builddir)/src/core/addr/libaxis2_addr.la \ + $(top_builddir)/src/core/clientapi/libaxis2_clientapi.la \ + $(top_builddir)/src/core/phaseresolver/libaxis2_phaseresolver.la \ + $(top_builddir)/src/core/util/libaxis2_core_utils.la \ + $(top_builddir)/util/src/libaxutil.la \ + $(top_builddir)/neethi/src/libneethi.la \ + $(top_builddir)/axiom/src/om/libaxis2_axiom.la +libaxis2_engine_la_LIBADD+=$(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la \ + $(top_builddir)/src/core/transport/http/util/libaxis2_http_util.la + + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/wsdl \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/util \ + -I$(top_builddir)/src/core/clientapi \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/neethi/include \ + -I$(top_builddir)/axiom/include + +EXTRA_DIST=axis2_disp_checker.h + diff --git a/src/core/engine/addr_disp.c b/src/core/engine/addr_disp.c new file mode 100644 index 0000000..a928e7a --- /dev/null +++ b/src/core/engine/addr_disp.c @@ -0,0 +1,255 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const axis2_char_t *AXIS2_ADDR_DISP_NAME = "addressing_based_dispatcher"; + +static axis2_status_t AXIS2_CALL axis2_addr_disp_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx *msg_ctx); + +static axis2_svc_t *AXIS2_CALL axis2_addr_disp_find_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + +static axis2_op_t *AXIS2_CALL axis2_addr_disp_find_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_svc_t * svc); + +axis2_disp_t *AXIS2_CALL +axis2_addr_disp_create( + const axutil_env_t * env) +{ + axis2_disp_t *disp = NULL; + axis2_handler_t *handler = NULL; + axutil_string_t *name = NULL; + + name = axutil_string_create_const(env, (axis2_char_t **)&AXIS2_ADDR_DISP_NAME); + if(!name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + disp = axis2_disp_create(env, name); + if(!disp) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + axutil_string_free(name, env); + return NULL; + } + + handler = axis2_disp_get_base(disp, env); + if(!handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + axutil_string_free(name, env); + return NULL; + } + + axis2_handler_set_invoke(handler, env, axis2_addr_disp_invoke); + + axutil_string_free(name, env); + + return disp; +} + +static axis2_svc_t *AXIS2_CALL +axis2_addr_disp_find_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_svc_t *svc = NULL; + + if(axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + return NULL; + + endpoint_ref = axis2_msg_ctx_get_to(msg_ctx, env); + + if(endpoint_ref) + { + const axis2_char_t *address = NULL; + + address = axis2_endpoint_ref_get_address(endpoint_ref, env); + if(address) + { + axis2_char_t **url_tokens = NULL; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Checking for service using WSA enpoint address : %s", address); + + if((axutil_strcmp(AXIS2_WSA_ANONYMOUS_URL, address) == 0) || (axutil_strcmp( + AXIS2_WSA_NAMESPACE_SUBMISSION, address) == 0)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Endpoint address cannot be the same as WSA namespace : %s", address); + return NULL; + } + + url_tokens = axutil_parse_request_url_for_svc_and_op(env, address); + + if(url_tokens) + { + if(url_tokens[0]) + { + axis2_conf_ctx_t *conf_ctx = NULL; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + axis2_conf_t *conf = NULL; + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + svc = axis2_conf_get_svc(conf, env, url_tokens[0]); + + if(svc) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Service found using WSA enpoint address"); + } + } + } + AXIS2_FREE(env->allocator, url_tokens[0]); + } + if(url_tokens[1]) + { + AXIS2_FREE(env->allocator, url_tokens[1]); + } + AXIS2_FREE(env->allocator, url_tokens); + url_tokens = NULL; + } + } + } + + return svc; +} + +static axis2_op_t *AXIS2_CALL +axis2_addr_disp_find_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_svc_t * svc) +{ + const axis2_char_t *action = NULL; + axutil_qname_t *name = NULL; + axis2_op_t *op = NULL; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, svc, NULL); + + if(axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + return NULL; + + action = axis2_msg_ctx_get_wsa_action(msg_ctx, env); + + if(action) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Checking for operation using WSA Action : %s", + action); + + name = axutil_qname_create(env, action, NULL, NULL); + op = axis2_svc_get_op_with_qname(svc, env, name); + if(op) + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Operation found using WSA Action"); + axutil_qname_free(name, env); + } + + return op; +} + +static axis2_status_t AXIS2_CALL +axis2_addr_disp_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx *msg_ctx) +{ + axis2_relates_to_t *relates_to = NULL; + + relates_to = axis2_msg_ctx_get_relates_to(msg_ctx, env); + + /** first check if we can dispatch using the relates_to */ + if(relates_to) + { + const axis2_char_t *relates_to_value = NULL; + relates_to_value = axis2_relates_to_get_value(relates_to, env); + if(relates_to_value && axutil_strcmp(relates_to_value, "") != 0) + { + axis2_conf_ctx_t *conf_ctx = NULL; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + axis2_op_ctx_t *op_ctx = NULL; + const axis2_char_t *msg_id = axis2_msg_ctx_get_msg_id(msg_ctx, env); + op_ctx = axis2_conf_ctx_get_op_ctx(conf_ctx, env, msg_id); + if(op_ctx) + { + axis2_op_t *op = NULL; + op = axis2_op_ctx_get_op(op_ctx, env); + if(op) + { + axis2_svc_ctx_t *svc_ctx = NULL; + axis2_msg_ctx_set_op_ctx(msg_ctx, env, op_ctx); + axis2_msg_ctx_set_op(msg_ctx, env, op); + axis2_op_register_op_ctx(op, env, msg_ctx, op_ctx); + + svc_ctx = axis2_op_ctx_get_parent(op_ctx, env); + if(svc_ctx) + { + axis2_svc_t *svc = NULL; + axis2_svc_grp_ctx_t *svc_grp_ctx = NULL; + axis2_msg_ctx_set_svc_ctx(msg_ctx, env, svc_ctx); + svc = axis2_svc_ctx_get_svc(svc_ctx, env); + if(svc) + { + axis2_msg_ctx_set_svc(msg_ctx, env, svc); + } + svc_grp_ctx = axis2_svc_ctx_get_parent(svc_ctx, env); + if(svc_grp_ctx) + { + axutil_string_t *svc_grp_ctx_id_str = axutil_string_create(env, + axis2_svc_grp_ctx_get_id(svc_grp_ctx, env)); + axis2_msg_ctx_set_svc_grp_ctx_id(msg_ctx, env, svc_grp_ctx_id_str); + axutil_string_free(svc_grp_ctx_id_str, env); + } + return AXIS2_SUCCESS; + } + } + } + } + } + + } + + axis2_msg_ctx_set_find_svc(msg_ctx, env, axis2_addr_disp_find_svc); + axis2_msg_ctx_set_find_op(msg_ctx, env, axis2_addr_disp_find_op); + + return axis2_disp_find_svc_and_op(handler, env, msg_ctx); +} + diff --git a/src/core/engine/axis2_disp_checker.h b/src/core/engine/axis2_disp_checker.h new file mode 100644 index 0000000..a93ac51 --- /dev/null +++ b/src/core/engine/axis2_disp_checker.h @@ -0,0 +1,105 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_DISP_CHECKER_H +#define AXIS2_DISP_CHECKER_H + +/** + * @defgroup axis2_disp_checker dispatcher checker + * @ingroup axis2_engine + * dispatcher checker is responsible of checking the status of the dispatchers. + * @{ + */ + +/** + * @file axis2_disp_checker.h + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_disp_checker */ + typedef struct axis2_disp_checker axis2_disp_checker_t; + + /** + * Gets the base handler. + * @param disp_checker pointer to dispatcher checker + * @param env pointer to environment struct + * @return pointer to base handler, returns a reference not a cloned copy + */ + AXIS2_EXTERN axis2_handler_t *AXIS2_CALL + axis2_disp_checker_get_base( + const axis2_disp_checker_t * disp_checker, + const axutil_env_t * env); + + /** + * Gets QName. + * @param disp_checker pointer to dispatcher checker + * @param env pointer to environment struct + * @return returns a pointer to the QName, returns a reference not a + * cloned copy + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + axis2_disp_checker_get_name( + const axis2_disp_checker_t * disp_checker, + const axutil_env_t * env); + + /** + * Sets QName. + * @param disp_checker pointer to dispatcher checker + * @param env pointer to environment struct + * @param name pointer to QName. A clone would be created within the method + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_disp_checker_set_name( + axis2_disp_checker_t * disp_checker, + const axutil_env_t * env, + const axutil_string_t * name); + + /** + * Frees dispatcher checker. + * @param disp_checker pointer to dispatcher checker + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_disp_checker_free( + axis2_disp_checker_t * disp_checker, + const axutil_env_t * env); + + /** + * Creates a dispatcher checker struct instance. + * @param env pointer to environment struct + * @return pointer to newly created dispatcher checker struct + */ + AXIS2_EXTERN axis2_disp_checker_t *AXIS2_CALL + axis2_disp_checker_create( + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_DISP_CHECKER_H */ diff --git a/src/core/engine/conf.c b/src/core/engine/conf.c new file mode 100644 index 0000000..6e81392 --- /dev/null +++ b/src/core/engine/conf.c @@ -0,0 +1,1835 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "axis2_disp_checker.h" +#include +#include +#include +#include +#include + +struct axis2_conf +{ + axutil_hash_t *svc_grps; + axis2_transport_in_desc_t *transports_in[AXIS2_TRANSPORT_ENUM_MAX]; + axis2_transport_out_desc_t *transports_out[AXIS2_TRANSPORT_ENUM_MAX]; + + /** + * All the modules already engaged can be found here. + */ + axutil_array_list_t *engaged_module_list; + + /*To store all the available modules (including version) */ + axutil_hash_t *all_modules; + + /*To store mapping between default version to module name */ + axutil_hash_t *name_to_version_map; + axutil_array_list_t *out_phases; + axutil_array_list_t *in_fault_phases; + axutil_array_list_t *out_fault_phases; + + /* All the system specific phases are stored here */ + axutil_array_list_t *in_phases_upto_and_including_post_dispatch; + + axis2_phases_info_t *phases_info; + axutil_hash_t *all_svcs; + axutil_hash_t *all_init_svcs; + axutil_hash_t *msg_recvs; + axutil_hash_t *faulty_svcs; + axutil_hash_t *faulty_modules; + axis2_char_t *axis2_repo; + axis2_char_t *axis2_xml; + axis2_dep_engine_t *dep_engine; + axutil_array_list_t *handlers; + axis2_bool_t enable_mtom; + /*This is used in rampart */ + axis2_bool_t enable_security; + + /** Configuration parameter container */ + axutil_param_container_t *param_container; + + /** Base description struct */ + axis2_desc_t *base; + + /** Mark whether conf is built using axis2 XML*/ + axis2_bool_t axis2_flag; + +#if 0 +/* this seemed to be not used after 1.6.0 */ +/* This is a hack to keep rampart_context at client side */ +void *security_context; +#endif +}; + +AXIS2_EXTERN axis2_conf_t *AXIS2_CALL +axis2_conf_create( + const axutil_env_t * env) +{ + axis2_conf_t *conf = NULL; + axis2_status_t status = AXIS2_FAILURE; + axis2_phase_t *phase = NULL; + int i = 0; + + AXIS2_ENV_CHECK(env, NULL); + + conf = (axis2_conf_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_conf_t)); + if(!conf) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + + memset((void *)conf, 0, sizeof(axis2_conf_t)); + + conf->param_container = (axutil_param_container_t *)axutil_param_container_create(env); + if(!conf->param_container) + { + axis2_conf_free(conf, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating parameter container failed"); + return NULL; + } + + conf->svc_grps = axutil_hash_make(env); + if(!conf->svc_grps) + { + axis2_conf_free(conf, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating service group map failed"); + return NULL; + } + + for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++) + { + conf->transports_in[i] = NULL; + } + + for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++) + { + conf->transports_out[i] = NULL; + } + + conf->engaged_module_list = axutil_array_list_create(env, 0); + if(!conf->engaged_module_list) + { + axis2_conf_free(conf, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating engaged module list failed"); + return NULL; + } + + conf->handlers = axutil_array_list_create(env, 0); + if(!conf->handlers) + { + axis2_conf_free(conf, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating handler list failed"); + return NULL; + } + + conf->in_phases_upto_and_including_post_dispatch = axutil_array_list_create(env, 0); + if(!conf->in_phases_upto_and_including_post_dispatch) + { + axis2_conf_free(conf, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating in phases list upto and including post dispatch failed"); + return NULL; + } + else + { + axis2_disp_t *uri_dispatch = NULL; + axis2_disp_t *addr_dispatch = NULL; + + phase = axis2_phase_create(env, AXIS2_PHASE_TRANSPORT_IN); + if(!phase) + { + axis2_conf_free(conf, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed", + AXIS2_PHASE_TRANSPORT_IN); + return NULL; + } + + /* In case of using security we need to find the service/operation parameters before the + * dispatch phase. This is required to give parameters to the security inflow.*/ + uri_dispatch = axis2_req_uri_disp_create(env); + if(uri_dispatch) + { + axis2_handler_t *handler = NULL; + handler = axis2_disp_get_base(uri_dispatch, env); + axis2_disp_free(uri_dispatch, env); + axis2_phase_add_handler_at(phase, env, 0, handler); + axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env)); + } + + addr_dispatch = axis2_addr_disp_create(env); + if(addr_dispatch) + { + axis2_handler_t *handler = NULL; + handler = axis2_disp_get_base(addr_dispatch, env); + axis2_disp_free(addr_dispatch, env); + axis2_phase_add_handler_at(phase, env, 1, handler); + axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env)); + } + + status + = axutil_array_list_add(conf->in_phases_upto_and_including_post_dispatch, env, phase); + if(AXIS2_SUCCESS != status) + { + axis2_conf_free(conf, env); + axis2_phase_free(phase, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding phase %s into in phases upto and including post dispatch list failed", + AXIS2_PHASE_TRANSPORT_IN); + return NULL; + } + + phase = axis2_phase_create(env, AXIS2_PHASE_PRE_DISPATCH); + if(!phase) + { + axis2_conf_free(conf, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed", + AXIS2_PHASE_PRE_DISPATCH); + return NULL; + } + + status + = axutil_array_list_add(conf->in_phases_upto_and_including_post_dispatch, env, phase); + if(AXIS2_SUCCESS != status) + { + axis2_conf_free(conf, env); + axis2_phase_free(phase, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding phase %s into in phases upto and including post dispatch list failed", + AXIS2_PHASE_PRE_DISPATCH); + return NULL; + } + } + + conf->all_svcs = axutil_hash_make(env); + if(!conf->all_svcs) + { + axis2_conf_free(conf, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating all services map failed"); + return NULL; + } + + conf->all_init_svcs = axutil_hash_make(env); + if(!conf->all_init_svcs) + { + axis2_conf_free(conf, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating all init services map failed"); + return NULL; + } + + conf->msg_recvs = axutil_hash_make(env); + if(!conf->msg_recvs) + { + axis2_conf_free(conf, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating message receivers map failed."); + return NULL; + } + + conf->faulty_svcs = axutil_hash_make(env); + if(!conf->faulty_svcs) + { + axis2_conf_free(conf, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating fault services map failed"); + return NULL; + } + + conf->faulty_modules = axutil_hash_make(env); + if(!conf->faulty_modules) + { + axis2_conf_free(conf, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating fault modules map failed"); + return NULL; + } + + conf->all_modules = axutil_hash_make(env); + if(!conf->all_modules) + { + axis2_conf_free(conf, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating all modules map failed"); + return NULL; + } + + conf->name_to_version_map = axutil_hash_make(env); + if(!conf->name_to_version_map) + { + axis2_conf_free(conf, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating name to version map failed"); + return NULL; + } + + conf->base = axis2_desc_create(env); + if(!conf->base) + { + axis2_conf_free(conf, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating Axis2 configuration base description failed"); + return NULL; + } + + return conf; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_conf_free( + axis2_conf_t * conf, + const axutil_env_t * env) +{ + int i = 0; + + if(!conf) + { + /* nothing to free */ + return; + } + + if(conf->param_container) + { + axutil_param_container_free(conf->param_container, env); + } + + if(conf->svc_grps) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + for(hi = axutil_hash_first(conf->svc_grps, env); hi; hi = axutil_hash_next(env, hi)) + { + axis2_svc_grp_t *svc_grp = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + svc_grp = (axis2_svc_grp_t *)val; + if(svc_grp) + { + axis2_svc_grp_free(svc_grp, env); + } + } + axutil_hash_free(conf->svc_grps, env); + } + + for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++) + { + if(conf->transports_in[i]) + { + axis2_transport_in_desc_free(conf->transports_in[i], env); + } + } + + for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++) + { + if(conf->transports_out[i]) + { + axis2_transport_out_desc_free(conf->transports_out[i], env); + } + } + + if(conf->dep_engine) + { + axis2_dep_engine_free(conf->dep_engine, env); + } + + if(conf->all_modules) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + for(hi = axutil_hash_first(conf->all_modules, env); hi; hi = axutil_hash_next(env, hi)) + { + axis2_module_desc_t *module_desc = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + module_desc = (axis2_module_desc_t *)val; + if(module_desc) + { + axis2_module_desc_free(module_desc, env); + } + } + axutil_hash_free(conf->all_modules, env); + } + + if(conf->name_to_version_map) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + for(hi = axutil_hash_first(conf->name_to_version_map, env); hi; hi = axutil_hash_next(env, + hi)) + { + axis2_char_t *module_ver = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + module_ver = (axis2_char_t *)val; + if(module_ver) + { + AXIS2_FREE(env->allocator, module_ver); + } + } + axutil_hash_free(conf->name_to_version_map, env); + } + + if(conf->engaged_module_list) + { + for(i = 0; i < axutil_array_list_size(conf->engaged_module_list, env); i++) + { + axutil_qname_t *module_desc_qname = NULL; + module_desc_qname = (axutil_qname_t *)axutil_array_list_get(conf->engaged_module_list, + env, i); + if(module_desc_qname) + { + axutil_qname_free(module_desc_qname, env); + } + } + axutil_array_list_free(conf->engaged_module_list, env); + } + + if(conf->out_phases) + { + for(i = 0; i < axutil_array_list_size(conf->out_phases, env); i++) + { + axis2_phase_t *phase = NULL; + phase = (axis2_phase_t *)axutil_array_list_get(conf->out_phases, env, i); + if(phase) + { + axis2_phase_free(phase, env); + } + } + axutil_array_list_free(conf->out_phases, env); + } + + if(conf->in_fault_phases) + { + for(i = 0; i < axutil_array_list_size(conf->in_fault_phases, env); i++) + { + axis2_phase_t *phase = NULL; + phase = (axis2_phase_t *)axutil_array_list_get(conf->in_fault_phases, env, i); + if(phase) + { + axis2_phase_free(phase, env); + } + } + axutil_array_list_free(conf->in_fault_phases, env); + } + + if(conf->out_fault_phases) + { + for(i = 0; i < axutil_array_list_size(conf->out_fault_phases, env); i++) + { + axis2_phase_t *phase = NULL; + phase = (axis2_phase_t *)axutil_array_list_get(conf->out_fault_phases, env, i); + if(phase) + { + axis2_phase_free(phase, env); + } + } + axutil_array_list_free(conf->out_fault_phases, env); + } + + if(conf->in_phases_upto_and_including_post_dispatch) + { + for(i = 0; i < axutil_array_list_size(conf-> in_phases_upto_and_including_post_dispatch, + env); i++) + { + axis2_phase_t *phase = NULL; + phase = (axis2_phase_t *)axutil_array_list_get( + conf-> in_phases_upto_and_including_post_dispatch, env, i); + if(phase) + { + axis2_phase_free(phase, env); + } + } + axutil_array_list_free(conf-> in_phases_upto_and_including_post_dispatch, env); + } + + if(conf->all_svcs) + { + axutil_hash_free(conf->all_svcs, env); + } + + if(conf->all_init_svcs) + { + axutil_hash_free(conf->all_init_svcs, env); + } + + if(conf->msg_recvs) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + for(hi = axutil_hash_first(conf->msg_recvs, env); hi; hi = axutil_hash_next(env, hi)) + { + axis2_msg_recv_t *msg_recv = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + msg_recv = (axis2_msg_recv_t *)val; + if(msg_recv) + { + axis2_msg_recv_free(msg_recv, env); + msg_recv = NULL; + } + } + axutil_hash_free(conf->msg_recvs, env); + } + + if(conf->faulty_svcs) + { + axutil_hash_free(conf->faulty_svcs, env); + } + + if(conf->faulty_modules) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + for(hi = axutil_hash_first(conf->faulty_modules, env); hi; hi = axutil_hash_next(env, hi)) + { + axis2_module_desc_t *module_desc = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + module_desc = (axis2_module_desc_t *)val; + if(module_desc) + { + axis2_module_desc_free(module_desc, env); + } + } + axutil_hash_free(conf->faulty_modules, env); + } + + if(conf->handlers) + { + int i = 0; + for(i = 0; i < axutil_array_list_size(conf->handlers, env); i++) + { + axis2_handler_desc_t *handler_desc = NULL; + handler_desc = (axis2_handler_desc_t *)axutil_array_list_get(conf->handlers, env, i); + if(handler_desc) + { + axis2_handler_desc_free(handler_desc, env); + } + } + axutil_array_list_free(conf->handlers, env); + } + + if(conf->axis2_repo) + { + AXIS2_FREE(env->allocator, conf->axis2_repo); + } + + if(conf->base) + { + axis2_desc_free(conf->base, env); + } + + if(conf->axis2_xml) + { + AXIS2_FREE(env->allocator, conf->axis2_xml); + } + + AXIS2_FREE(env->allocator, conf); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_add_svc_grp( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_svc_grp_t * svc_grp) +{ + axutil_hash_t *svcs = NULL; + axutil_hash_index_t *index_i = NULL; + axis2_char_t *svc_name = NULL; + const axis2_char_t *svc_grp_name = NULL; + + AXIS2_PARAM_CHECK(env->error, svc_grp, AXIS2_FAILURE); + + svcs = axis2_svc_grp_get_all_svcs(svc_grp, env); + if(!conf->all_svcs) + { + conf->all_svcs = axutil_hash_make(env); + if(!conf->all_svcs) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating all services map failed"); + return AXIS2_FAILURE; + } + } + + index_i = axutil_hash_first(svcs, env); + while(index_i) + { + void *value = NULL; + axis2_svc_t *desc = NULL; + axis2_svc_t *temp_svc = NULL; + const axutil_qname_t *svc_qname = NULL; + + axutil_hash_this(index_i, NULL, NULL, &value); + desc = (axis2_svc_t *)value; + svc_qname = axis2_svc_get_qname(desc, env); + svc_name = axutil_qname_get_localpart(svc_qname, env); + temp_svc = axutil_hash_get(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING); + + /* No two service names deployed in the engine can be same */ + if(temp_svc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_TWO_SVCS_CANNOT_HAVE_SAME_NAME, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "There is already a service called %s in the " + "all services list of axis2 configuration.", svc_name); + return AXIS2_FAILURE; + } + + index_i = axutil_hash_next(env, index_i); + } + + svcs = axis2_svc_grp_get_all_svcs(svc_grp, env); + index_i = axutil_hash_first(svcs, env); + + while(index_i) + { + void *value = NULL; + axis2_svc_t *desc = NULL; + + axutil_hash_this(index_i, NULL, NULL, &value); + desc = (axis2_svc_t *)value; + svc_name = axutil_qname_get_localpart(axis2_svc_get_qname(desc, env), env); + axutil_hash_set(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING, desc); + index_i = axutil_hash_next(env, index_i); + } + + svc_grp_name = axis2_svc_grp_get_name(svc_grp, env); + if(!conf->svc_grps) + { + conf->svc_grps = axutil_hash_make(env); + if(!conf->svc_grps) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating service group map failed"); + return AXIS2_FAILURE; + } + } + + axutil_hash_set(conf->svc_grps, svc_grp_name, AXIS2_HASH_KEY_STRING, svc_grp); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_svc_grp_t *AXIS2_CALL +axis2_conf_get_svc_grp( + const axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * svc_grp_name) +{ + AXIS2_PARAM_CHECK(env->error, svc_grp_name, NULL); + + if(!conf->svc_grps) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_CONF, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Axis2 configuration does not contain a service group map"); + return NULL; + } + return (axis2_svc_grp_t *)(axutil_hash_get(conf->svc_grps, svc_grp_name, AXIS2_HASH_KEY_STRING)); +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_conf_get_all_svc_grps( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->svc_grps; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_add_svc( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_svc_t * svc) +{ + axis2_phase_resolver_t *phase_resolver = NULL; + axis2_svc_grp_t *svc_grp = NULL; + const axis2_char_t *svc_grp_name = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, svc, AXIS2_FAILURE); + + /* We need to first create a service group with the same name as the + * service and make it the parent of service */ + svc_grp_name = axis2_svc_get_name(svc, env); + if(!svc_grp_name) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service has no name set"); + return AXIS2_FAILURE; + } + + svc_grp = axis2_svc_grp_create(env); + if(!svc_grp) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Creating service group as parent of service %s failed", svc_grp_name); + return AXIS2_FAILURE; + } + + status = axis2_svc_grp_set_name(svc_grp, env, svc_grp_name); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting name to service group failed"); + return status; + } + + status = axis2_svc_grp_set_parent(svc_grp, env, conf); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting parent to service group %s failed", + svc_grp_name); + return status; + } + + phase_resolver = axis2_phase_resolver_create_with_config_and_svc(env, conf, svc); + if(!phase_resolver) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase resolver failed for service %s", + axis2_svc_get_name(svc, env)); + return AXIS2_FAILURE; + } + + status = axis2_phase_resolver_build_execution_chains_for_svc(phase_resolver, env); + axis2_phase_resolver_free(phase_resolver, env); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Building chains failed within phase resolver " + "for service %s", axis2_svc_get_name(svc, env)); + return status; + } + + status = axis2_svc_grp_add_svc(svc_grp, env, svc); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Adding service %s to service group %s failed", + svc_grp_name, svc_grp_name); + return status; + } + + status = axis2_conf_add_svc_grp(conf, env, svc_grp); + return status; +} + +AXIS2_EXTERN axis2_svc_t *AXIS2_CALL +axis2_conf_get_svc( + const axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * svc_name) +{ + AXIS2_PARAM_CHECK(env->error, svc_name, NULL); + + return axutil_hash_get(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_remove_svc( + axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * svc_name) +{ + AXIS2_PARAM_CHECK(env->error, svc_name, AXIS2_FAILURE); + + axutil_hash_set(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING, NULL); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_add_param( + axis2_conf_t * conf, + const axutil_env_t * env, + axutil_param_t * param) +{ + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *param_name = axutil_param_get_name(param, env); + + AXIS2_PARAM_CHECK(env->error, param, AXIS2_FAILURE); + + if(axis2_conf_is_param_locked(conf, env, param_name)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_PARAMETER_LOCKED_CANNOT_OVERRIDE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Parameter %s is locked for Axis2 configuration", + param_name); + return AXIS2_FAILURE; + } + else + { + status = axutil_param_container_add_param(conf->param_container, env, param); + } + return status; +} + +AXIS2_EXTERN axutil_param_t *AXIS2_CALL +axis2_conf_get_param( + const axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * name) +{ + AXIS2_PARAM_CHECK(env->error, name, NULL); + + if(!conf->param_container) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_PARAM_CONTAINER, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Param container is not set in axis2 configuraion"); + return NULL; + } + + return axutil_param_container_get_param(conf->param_container, env, name); + +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_conf_get_all_params( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return axutil_param_container_get_params(conf->param_container, env); + +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_conf_is_param_locked( + const axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * param_name) +{ + axutil_param_t *param = NULL; + + AXIS2_PARAM_CHECK(env->error, param_name, AXIS2_FALSE); + + param = axis2_conf_get_param(conf, env, param_name); + return (param && axutil_param_is_locked(param, env)); +} + +AXIS2_EXTERN axis2_transport_in_desc_t *AXIS2_CALL +axis2_conf_get_transport_in( + const axis2_conf_t * conf, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS trans_enum) +{ + return (axis2_transport_in_desc_t *)conf->transports_in[trans_enum]; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_add_transport_in( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_transport_in_desc_t * transport, + const AXIS2_TRANSPORT_ENUMS trans_enum) +{ + AXIS2_PARAM_CHECK(env->error, transport, AXIS2_FAILURE); + + conf->transports_in[trans_enum] = transport; + + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN axis2_transport_out_desc_t *AXIS2_CALL +axis2_conf_get_transport_out( + const axis2_conf_t * conf, + const axutil_env_t * env, + const AXIS2_TRANSPORT_ENUMS trans_enum) +{ + return conf->transports_out[trans_enum]; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_add_transport_out( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_transport_out_desc_t * transport, + const AXIS2_TRANSPORT_ENUMS trans_enum) +{ + AXIS2_PARAM_CHECK(env->error, transport, AXIS2_FAILURE); + + conf->transports_out[trans_enum] = transport; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_transport_in_desc_t **AXIS2_CALL +axis2_conf_get_all_in_transports( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return (axis2_transport_in_desc_t **)conf->transports_in; +} + +AXIS2_EXTERN axis2_module_desc_t *AXIS2_CALL +axis2_conf_get_module( + const axis2_conf_t * conf, + const axutil_env_t * env, + const axutil_qname_t * qname) +{ + axis2_char_t *name = NULL; + axis2_module_desc_t *ret = NULL; + axis2_char_t *module_name = NULL; + axutil_qname_t *mod_qname = NULL; + const axis2_char_t *def_mod_ver = NULL; + + AXIS2_PARAM_CHECK(env->error, qname, NULL); + + name = axutil_qname_to_string((axutil_qname_t *)qname, env); + ret = (axis2_module_desc_t *)axutil_hash_get(conf->all_modules, name, AXIS2_HASH_KEY_STRING); + if(ret) + { + return ret; + } + module_name = axutil_qname_get_localpart(qname, env); + if(!module_name) + { + return NULL; + } + def_mod_ver = axis2_conf_get_default_module_version(conf, env, module_name); + mod_qname = axis2_core_utils_get_module_qname(env, name, def_mod_ver); + if(!mod_qname) + { + return NULL; + } + name = axutil_qname_to_string(mod_qname, env); + ret = (axis2_module_desc_t *)axutil_hash_get(conf->all_modules, name, AXIS2_HASH_KEY_STRING); + axutil_qname_free(mod_qname, env); + mod_qname = NULL; + return ret; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_conf_get_all_engaged_modules( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->engaged_module_list; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_conf_get_in_phases_upto_and_including_post_dispatch( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->in_phases_upto_and_including_post_dispatch; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_conf_get_out_flow( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->out_phases; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_conf_get_in_fault_flow( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->in_fault_phases; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_conf_get_out_fault_flow( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->out_fault_phases; +} + +AXIS2_EXTERN axis2_transport_out_desc_t **AXIS2_CALL +axis2_conf_get_all_out_transports( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return (axis2_transport_out_desc_t **)conf->transports_out; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_conf_get_all_faulty_svcs( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->faulty_svcs; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_conf_get_all_faulty_modules( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->faulty_modules; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_conf_get_all_svcs( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + /*axutil_hash_t *sgs = NULL; + axutil_hash_index_t *index_i = NULL; + axutil_hash_index_t *index_j = NULL; + void *value = NULL; + void *value2 = NULL; + axis2_svc_grp_t *axis_svc_grp = NULL; + axutil_hash_t *svcs = NULL; + axis2_svc_t *svc = NULL; + axis2_char_t *svc_name = NULL; + */ + + /* Do we need to do all the following of retrieving all service groups and + * then add all services from each group to conf->all_svcs and then finally + * return conf->all_svcs?. We have already done this when + * adding each service group to the conf, so just returning conf->all_svcs + * here would be enough - Damitha */ + /*sgs = axis2_conf_get_all_svc_grps(conf, env); + index_i = axutil_hash_first(sgs, env); + while(index_i) + { + axutil_hash_this(index_i, NULL, NULL, &value); + axis_svc_grp = (axis2_svc_grp_t *)value; + svcs = axis2_svc_grp_get_all_svcs(axis_svc_grp, env); + index_j = axutil_hash_first(svcs, env); + while(index_j) + { + axutil_hash_this(index_j, NULL, NULL, &value2); + svc = (axis2_svc_t *)value2; + svc_name = axutil_qname_get_localpart(axis2_svc_get_qname(svc, env), env); + axutil_hash_set(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING, svc); + + index_j = axutil_hash_next(env, index_j); + } + + index_i = axutil_hash_next(env, index_i); + }*/ + return conf->all_svcs; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_conf_get_all_svcs_to_load( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + axutil_hash_t *sgs = NULL; + axutil_hash_index_t *index_i = NULL; + axutil_hash_index_t *index_j = NULL; + void *value = NULL; + void *value2 = NULL; + axis2_svc_grp_t *axis_svc_grp = NULL; + axutil_hash_t *svcs = NULL; + axis2_svc_t *svc = NULL; + axis2_char_t *svc_name = NULL; + + sgs = axis2_conf_get_all_svc_grps(conf, env); + index_i = axutil_hash_first(sgs, env); + while(index_i) + { + axutil_hash_this(index_i, NULL, NULL, &value); + axis_svc_grp = (axis2_svc_grp_t *)value; + svcs = axis2_svc_grp_get_all_svcs(axis_svc_grp, env); + index_j = axutil_hash_first(svcs, env); + while(index_j) + { + axutil_param_t *param = NULL; + axutil_hash_this(index_j, NULL, NULL, &value2); + svc = (axis2_svc_t *)value2; + svc_name = axutil_qname_get_localpart(axis2_svc_get_qname(svc, env), env); + param = axis2_svc_get_param(svc, env, AXIS2_LOAD_SVC_STARTUP); + if(param) + { + axutil_hash_set(conf->all_init_svcs, svc_name, AXIS2_HASH_KEY_STRING, svc); + } + + index_j = axutil_hash_next(env, index_j); + } + + index_i = axutil_hash_next(env, index_i); + } + return conf->all_init_svcs; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_conf_is_engaged( + axis2_conf_t * conf, + const axutil_env_t * env, + const axutil_qname_t * module_name) +{ + const axutil_qname_t *def_mod_qname = NULL; + axis2_module_desc_t *def_mod = NULL; + int i = 0; + int size = 0; + + AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FALSE); + + def_mod + = axis2_conf_get_default_module(conf, env, axutil_qname_get_localpart(module_name, env)); + if(def_mod) + { + def_mod_qname = axis2_module_desc_get_qname(def_mod, env); + } + + size = axutil_array_list_size(conf->engaged_module_list, env); + for(i = 0; i < size; i++) + { + axutil_qname_t *qname = NULL; + qname = (axutil_qname_t *)axutil_array_list_get(conf->engaged_module_list, env, i); + if(axutil_qname_equals(module_name, env, qname) || (def_mod_qname && axutil_qname_equals( + def_mod_qname, env, qname))) + { + return AXIS2_TRUE; + } + } + + return AXIS2_FALSE; +} + +AXIS2_EXTERN axis2_phases_info_t *AXIS2_CALL +axis2_conf_get_phases_info( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->phases_info; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_set_phases_info( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_phases_info_t * phases_info) +{ + AXIS2_PARAM_CHECK(env->error, phases_info, AXIS2_FAILURE); + + if(conf->phases_info) + { + axis2_phases_info_free(phases_info, env); + conf->phases_info = NULL; + } + conf->phases_info = phases_info; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_add_msg_recv( + axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * key, + axis2_msg_recv_t * msg_recv) +{ + AXIS2_PARAM_CHECK(env->error, key, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_recv, AXIS2_FAILURE); + if(!conf->msg_recvs) + { + conf->msg_recvs = axutil_hash_make(env); + if(!conf->msg_recvs) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating message receiver map failed"); + return AXIS2_FAILURE; + } + } + axutil_hash_set(conf->msg_recvs, key, AXIS2_HASH_KEY_STRING, msg_recv); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_msg_recv_t *AXIS2_CALL +axis2_conf_get_msg_recv( + const axis2_conf_t * conf, + const axutil_env_t * env, + axis2_char_t * key) +{ + return (axis2_msg_recv_t *)axutil_hash_get(conf->msg_recvs, key, AXIS2_HASH_KEY_STRING); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_set_out_phases( + axis2_conf_t * conf, + const axutil_env_t * env, + axutil_array_list_t * out_phases) +{ + AXIS2_PARAM_CHECK(env->error, out_phases, AXIS2_FAILURE); + + if(conf->out_phases) + { + axutil_array_list_free(conf->out_phases, env); + conf->out_phases = NULL; + } + conf->out_phases = out_phases; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_conf_get_out_phases( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->out_phases; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_set_in_fault_phases( + axis2_conf_t * conf, + const axutil_env_t * env, + axutil_array_list_t * list) +{ + AXIS2_PARAM_CHECK(env->error, list, AXIS2_FAILURE); + + if(conf->in_fault_phases) + { + axutil_array_list_free(conf->in_fault_phases, env); + conf->in_fault_phases = NULL; + } + conf->in_fault_phases = list; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_set_out_fault_phases( + axis2_conf_t * conf, + const axutil_env_t * env, + axutil_array_list_t * list) +{ + AXIS2_PARAM_CHECK(env->error, list, AXIS2_FAILURE); + + if(conf->out_fault_phases) + { + axutil_array_list_free(conf->out_fault_phases, env); + conf->out_fault_phases = NULL; + } + conf->out_fault_phases = list; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_conf_get_all_modules( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->all_modules; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_add_module( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_module_desc_t * module) +{ + const axutil_qname_t *module_qname = NULL; + + AXIS2_PARAM_CHECK(env->error, module, AXIS2_FAILURE); + + axis2_module_desc_set_parent(module, env, conf); + + module_qname = axis2_module_desc_get_qname(module, env); + if(module_qname) + { + axis2_char_t *module_name = NULL; + module_name = axutil_qname_to_string((axutil_qname_t *)module_qname, env); + axutil_hash_set(conf->all_modules, module_name, AXIS2_HASH_KEY_STRING, module); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_set_default_dispatchers( + axis2_conf_t * conf, + const axutil_env_t * env) +{ + axis2_phase_t *dispatch = NULL; + axis2_status_t status = AXIS2_FAILURE; + axis2_disp_t *rest_dispatch = NULL; + axis2_disp_t *soap_action_based_dispatch = NULL; + axis2_disp_t *soap_msg_body_based_dispatch = NULL; + axis2_handler_t *handler = NULL; + axis2_phase_t *post_dispatch = NULL; + axis2_disp_checker_t *disp_checker = NULL; + + dispatch = axis2_phase_create(env, AXIS2_PHASE_DISPATCH); + if(!dispatch) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed", AXIS2_PHASE_DISPATCH); + return AXIS2_FAILURE; + } + + rest_dispatch = axis2_rest_disp_create(env); + if(!rest_dispatch) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating rest dispatcher failed"); + return AXIS2_FAILURE; + } + + handler = axis2_disp_get_base(rest_dispatch, env); + axis2_disp_free(rest_dispatch, env); + axis2_phase_add_handler_at(dispatch, env, 0, handler); + axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env)); + + soap_msg_body_based_dispatch = axis2_soap_body_disp_create(env); + if(!soap_msg_body_based_dispatch) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating soap body based dispatcher failed"); + return AXIS2_FAILURE; + } + + handler = axis2_disp_get_base(soap_msg_body_based_dispatch, env); + axis2_disp_free(soap_msg_body_based_dispatch, env); + axis2_phase_add_handler_at(dispatch, env, 1, handler); + axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env)); + + soap_action_based_dispatch = axis2_soap_action_disp_create(env); + if(!soap_action_based_dispatch) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating soap action based dispatcher failed"); + return AXIS2_FAILURE; + } + + handler = axis2_disp_get_base(soap_action_based_dispatch, env); + axis2_disp_free(soap_action_based_dispatch, env); + axis2_phase_add_handler_at(dispatch, env, 2, handler); + axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env)); + + status + = axutil_array_list_add(conf-> in_phases_upto_and_including_post_dispatch, env, dispatch); + if(AXIS2_SUCCESS != status) + { + axis2_phase_free(dispatch, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding dispatcher into in phases upto and including post dispatch list failed"); + return status; + } + + post_dispatch = axis2_phase_create(env, AXIS2_PHASE_POST_DISPATCH); + if(!post_dispatch) + { + axis2_phase_free(dispatch, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed", + AXIS2_PHASE_POST_DISPATCH); + return AXIS2_FAILURE; + } + + disp_checker = axis2_disp_checker_create(env); + handler = axis2_disp_checker_get_base(disp_checker, env); + axis2_disp_checker_free(disp_checker, env); + axis2_phase_add_handler_at(post_dispatch, env, 0, handler); + axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env)); + handler = axis2_ctx_handler_create(env, NULL); + axis2_phase_add_handler_at(post_dispatch, env, 1, handler); + axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env)); + + status = axutil_array_list_add(conf-> in_phases_upto_and_including_post_dispatch, env, + post_dispatch); + if(AXIS2_SUCCESS != status) + { + axis2_phase_free(dispatch, env); + axis2_phase_free(post_dispatch, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding post dispatcher into in phases upto and including post dispatch list failed"); + return status; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_set_dispatch_phase( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_phase_t * dispatch) +{ + axis2_status_t status = AXIS2_FAILURE; + axis2_handler_t *handler = NULL; + axis2_phase_t *post_dispatch = NULL; + axis2_disp_checker_t *disp_checker = NULL; + + AXIS2_PARAM_CHECK(env->error, dispatch, AXIS2_FAILURE); + + status + = axutil_array_list_add(conf-> in_phases_upto_and_including_post_dispatch, env, dispatch); + if(AXIS2_FAILURE == status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding dispatcher into in phases upto and including post dispatch list failed"); + return AXIS2_FAILURE; + } + + post_dispatch = axis2_phase_create(env, AXIS2_PHASE_POST_DISPATCH); + if(!post_dispatch) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed", + AXIS2_PHASE_POST_DISPATCH); + axis2_phase_free(dispatch, env); + return AXIS2_FAILURE; + } + + disp_checker = axis2_disp_checker_create(env); + + handler = axis2_disp_checker_get_base(disp_checker, env); + axis2_phase_add_handler_at(post_dispatch, env, 0, handler); + + status = axutil_array_list_add(conf-> in_phases_upto_and_including_post_dispatch, env, + post_dispatch); + if(AXIS2_FAILURE == status) + { + axis2_phase_free(dispatch, env); + axis2_phase_free(post_dispatch, env); + axis2_disp_checker_free(disp_checker, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding post dispatcher into in phases upto and including post dispatch list failed"); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +/** + * For each module reference qname stored in dep_engine this function is called. + * All module_desc instances are stored in axis2_conf. So each module_desc + * is retrieved from there by giving module_qname and engaged globally by + * calling phase_resolvers engage_module_globally function. Modules are added + * to axis2_conf's engaged module list. + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_engage_module( + axis2_conf_t * conf, + const axutil_env_t * env, + const axutil_qname_t * module_ref) +{ + axis2_module_desc_t *module_desc = NULL; + axis2_bool_t is_new_module = AXIS2_FALSE; + axis2_bool_t to_be_engaged = AXIS2_TRUE; + axis2_dep_engine_t *dep_engine = NULL; + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t *file_name = NULL; + + AXIS2_PARAM_CHECK(env->error, module_ref, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE); + + module_desc = axis2_conf_get_module(conf, env, module_ref); + if(!module_desc) + { + axutil_file_t *file = NULL; + const axis2_char_t *repos_path = NULL; + axis2_arch_file_data_t *file_data = NULL; + axis2_char_t *temp_path1 = NULL; + axis2_char_t *temp_path2 = NULL; + axis2_char_t *temp_path3 = NULL; + axis2_char_t *path = NULL; + axutil_param_t *module_dir_param = NULL; + axis2_char_t *module_dir = NULL; + axis2_bool_t flag; + axis2_char_t *axis2_xml = NULL; + + file_name = axutil_qname_get_localpart(module_ref, env); + file = (axutil_file_t *)axis2_arch_reader_create_module_arch(env, file_name); + /* This flag is to check whether conf is built using axis2 + * xml configuration file instead of a repository. */ + flag = axis2_conf_get_axis2_flag(conf, env); + + if(!flag) + { + repos_path = axis2_conf_get_repo(conf, env); + temp_path1 = axutil_stracat(env, repos_path, AXIS2_PATH_SEP_STR); + temp_path2 = axutil_stracat(env, temp_path1, AXIS2_MODULE_FOLDER); + temp_path3 = axutil_stracat(env, temp_path2, AXIS2_PATH_SEP_STR); + path = axutil_stracat(env, temp_path3, file_name); + AXIS2_FREE(env->allocator, temp_path1); + AXIS2_FREE(env->allocator, temp_path2); + AXIS2_FREE(env->allocator, temp_path3); + } + else + { + /** + * This case is to obtain module path from the axis2.xml + */ + axis2_xml = (axis2_char_t *)axis2_conf_get_axis2_xml(conf, env); + module_dir_param = axis2_conf_get_param(conf, env, AXIS2_MODULE_DIR); + + if(module_dir_param) + { + module_dir = (axis2_char_t *)axutil_param_get_value(module_dir_param, env); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "moduleDir parameter not available in axis2.xml."); + + return AXIS2_FAILURE; + } + + temp_path1 = axutil_strcat(env, module_dir, AXIS2_PATH_SEP_STR, NULL); + path = axutil_strcat(env, temp_path1, file_name, NULL); + } + + axutil_file_set_path(file, env, path); + file_data = axis2_arch_file_data_create_with_type_and_file(env, AXIS2_MODULE, file); + if(!flag) + { + dep_engine = axis2_dep_engine_create_with_repos_name(env, repos_path); + } + else + { + dep_engine = axis2_dep_engine_create_with_axis2_xml(env, axis2_xml); + } + + axis2_dep_engine_set_current_file_item(dep_engine, env, file_data); + + /* this module_dir set the path of the module directory + * Pertaining to this module. This value will use inside the + * axis2_dep_engine_build_module function + */ + + axis2_dep_engine_set_module_dir(dep_engine, env, path); + + if(path) + { + AXIS2_FREE(env->allocator, path); + } + + if(file_data) + { + axis2_arch_file_data_free(file_data, env); + } + + module_desc = axis2_dep_engine_build_module(dep_engine, env, file, conf); + axutil_file_free(file, env); + is_new_module = AXIS2_TRUE; + } + + if(module_desc) + { + int size = 0; + int i = 0; + const axutil_qname_t *module_qname = NULL; + + size = axutil_array_list_size(conf->engaged_module_list, env); + module_qname = axis2_module_desc_get_qname(module_desc, env); + for(i = 0; i < size; i++) + { + axutil_qname_t *qname = NULL; + + qname = (axutil_qname_t *)axutil_array_list_get(conf->engaged_module_list, env, i); + if(axutil_qname_equals(module_qname, env, qname)) + { + to_be_engaged = AXIS2_FALSE; + } + } + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MODULE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Either module description not set or building" + "module description failed for module %s", file_name); + + return AXIS2_FAILURE; + } + + if(to_be_engaged) + { + axis2_phase_resolver_t *phase_resolver = NULL; + axutil_qname_t *module_qref_l = NULL; + const axutil_qname_t *module_qname = NULL; + axis2_char_t *module_name = NULL; + + module_qname = axis2_module_desc_get_qname(module_desc, env); + module_name = axutil_qname_get_localpart(module_qname, env); + phase_resolver = axis2_phase_resolver_create_with_config(env, conf); + if(!phase_resolver) + { + return AXIS2_FAILURE; + } + + status = axis2_phase_resolver_engage_module_globally(phase_resolver, env, module_desc); + axis2_phase_resolver_free(phase_resolver, env); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Engaging module %s globally failed", + module_name); + return status; + } + module_qref_l = axutil_qname_clone((axutil_qname_t *)module_qname, env); + status = axutil_array_list_add(conf->engaged_module_list, env, module_qref_l); + } + + if(is_new_module) + { + status = axis2_conf_add_module(conf, env, module_desc); + } + + return status; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_conf_get_repo( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->axis2_repo; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_set_repo( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_char_t * repos_path) +{ + if(conf->axis2_repo) + { + AXIS2_FREE(env->allocator, conf->axis2_repo); + conf->axis2_repo = NULL; + } + conf->axis2_repo = axutil_strdup(env, repos_path); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_conf_get_axis2_xml( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return axutil_strdup(env, conf->axis2_xml); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_set_axis2_xml( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_char_t * axis2_xml) +{ + AXIS2_PARAM_CHECK(env->error, axis2_xml, AXIS2_FAILURE); + conf->axis2_xml = axutil_strdup(env, axis2_xml); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_set_dep_engine( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_dep_engine_t * dep_engine) +{ + conf->dep_engine = dep_engine; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_conf_get_default_module_version( + const axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * module_name) +{ + axutil_hash_t *def_ver_map = NULL; + AXIS2_PARAM_CHECK(env->error, module_name, NULL); + + def_ver_map = conf->name_to_version_map; + if(!def_ver_map) + { + return NULL; + } + return axutil_hash_get(def_ver_map, module_name, AXIS2_HASH_KEY_STRING); +} + +AXIS2_EXTERN axis2_module_desc_t *AXIS2_CALL +axis2_conf_get_default_module( + const axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * module_name) +{ + axis2_module_desc_t *ret_mod = NULL; + axis2_char_t *mod_name = NULL; + const axis2_char_t *mod_ver = NULL; + axutil_hash_t *all_modules = NULL; + axutil_qname_t *mod_qname = NULL; + + AXIS2_PARAM_CHECK(env->error, module_name, NULL); + + all_modules = conf->all_modules; + mod_ver = axis2_conf_get_default_module_version(conf, env, module_name); + + if(!mod_ver) + { + mod_name = axutil_strdup(env, module_name); + } + else + { + axis2_char_t *tmp_name = NULL; + tmp_name = axutil_stracat(env, module_name, "-"); + mod_name = axutil_stracat(env, tmp_name, mod_ver); + AXIS2_FREE(env->allocator, tmp_name); + } + mod_qname = axutil_qname_create(env, mod_name, NULL, NULL); + AXIS2_FREE(env->allocator, mod_name); + mod_name = NULL; + + if(!mod_qname) + { + return NULL; + } + ret_mod = (axis2_module_desc_t *)axutil_hash_get(all_modules, axutil_qname_to_string(mod_qname, + env), AXIS2_HASH_KEY_STRING); + + return ret_mod; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_add_default_module_version( + axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * module_name, + const axis2_char_t * module_version) +{ + axutil_hash_t *name_to_ver_map = NULL; + + AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, module_version, AXIS2_FAILURE); + /* + * If we already have a default module version we don't put + * it again + */ + name_to_ver_map = conf->name_to_version_map; + + if(!axutil_hash_get(name_to_ver_map, module_name, AXIS2_HASH_KEY_STRING)) + { + axis2_char_t *new_entry = axutil_strdup(env, module_version); + if(!new_entry) + { + return AXIS2_FAILURE; + } + axutil_hash_set(name_to_ver_map, module_name, AXIS2_HASH_KEY_STRING, new_entry); + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_engage_module_with_version( + axis2_conf_t * conf, + const axutil_env_t * env, + const axis2_char_t * module_name, + const axis2_char_t * version_id) +{ + axutil_qname_t *module_qname = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FAILURE); + + module_qname = axis2_core_utils_get_module_qname(env, module_name, version_id); + if(!module_qname) + { + return AXIS2_FAILURE; + } + status = axis2_conf_engage_module(conf, env, module_qname); + axutil_qname_free(module_qname, env); + return status; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_conf_get_enable_mtom( + axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->enable_mtom; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_set_enable_mtom( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_bool_t enable_mtom) +{ + conf->enable_mtom = enable_mtom; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_conf_get_axis2_flag( + axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->axis2_flag; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_set_axis2_flag( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_bool_t axis2_flag) +{ + conf->axis2_flag = axis2_flag; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_conf_get_enable_security( + axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->enable_security; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_set_enable_security( + axis2_conf_t * conf, + const axutil_env_t * env, + axis2_bool_t enable_security) +{ + AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE); + + conf->enable_security = enable_security; + return AXIS2_SUCCESS; +} + +#if 0 +/* this seemed to be not used after 1.6.0 */ +AXIS2_EXTERN void *AXIS2_CALL +axis2_conf_get_security_context( + axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->security_context; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_conf_set_security_context( + axis2_conf_t * conf, + const axutil_env_t * env, + void *security_context) +{ + AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE); + + conf->security_context = (void *) security_context; + return AXIS2_SUCCESS; +} +#endif + +AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL +axis2_conf_get_param_container( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->param_container; +} + +AXIS2_EXTERN axis2_desc_t *AXIS2_CALL +axis2_conf_get_base( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->base; +} + +AXIS2_EXTERN axutil_array_list_t * AXIS2_CALL +axis2_conf_get_handlers( + const axis2_conf_t * conf, + const axutil_env_t * env) +{ + return conf->handlers; +} + diff --git a/src/core/engine/ctx_handler.c b/src/core/engine/ctx_handler.c new file mode 100644 index 0000000..4cafaf5 --- /dev/null +++ b/src/core/engine/ctx_handler.c @@ -0,0 +1,204 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +const axis2_char_t *AXIS2_CTX_HANDLER_NAME = "context_handler"; + +/** + * By the time the control comes to this handler, the dispatching must have + * happened so that the message context contains the service group, service and + * operation. This will then try to find the contexts for service group, service + * and the operation. + */ + +axis2_status_t AXIS2_CALL +axis2_ctx_handler_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx *msg_ctx); + +axis2_handler_t *AXIS2_CALL +axis2_ctx_handler_create( + const axutil_env_t * env, + const axutil_string_t * string) +{ + axis2_handler_t *handler = NULL; + axis2_handler_desc_t *handler_desc = NULL; + axutil_string_t *handler_string = NULL; + + if(string) + { + handler_string = axutil_string_clone((axutil_string_t *)string, env); + if(!(handler_string)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + } + else + { + /* create default string */ + handler_string = axutil_string_create_const(env, (axis2_char_t **)&AXIS2_CTX_HANDLER_NAME); + if(!handler_string) + { + return NULL; + } + } + + handler = axis2_handler_create(env); + if(!handler) + { + return NULL; + } + + /* handler desc of base handler */ + handler_desc = axis2_handler_desc_create(env, handler_string); + axutil_string_free(handler_string, env); + if(!handler_desc) + { + axis2_handler_free(handler, env); + return NULL; + } + + axis2_handler_init(handler, env, handler_desc); + + /* set the base struct's invoke op */ + axis2_handler_set_invoke(handler, env, axis2_ctx_handler_invoke); + + return handler; +} + +axis2_status_t AXIS2_CALL +axis2_ctx_handler_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx) +{ + axis2_op_t *op = NULL; + axis2_svc_ctx_t *svc_ctx = NULL; + axis2_op_ctx_t *op_ctx = NULL; + axis2_svc_grp_ctx_t *svc_grp_ctx = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_ctx_handler_invoke"); + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + svc_ctx = axis2_msg_ctx_get_svc_ctx(msg_ctx, env); + + if(op_ctx && svc_ctx) + { + svc_grp_ctx = axis2_svc_ctx_get_parent(svc_ctx, env); + if(svc_grp_ctx) + { + axutil_string_t *svc_grp_ctx_id_str = axutil_string_create(env, + axis2_svc_grp_ctx_get_id(svc_grp_ctx, env)); + axis2_msg_ctx_set_svc_grp_ctx_id(msg_ctx, env, svc_grp_ctx_id_str); + axutil_string_free(svc_grp_ctx_id_str, env); + } + return AXIS2_SUCCESS; + } + + op = axis2_msg_ctx_get_op(msg_ctx, env); + if(op) + { + op_ctx = axis2_op_find_existing_op_ctx(op, env, msg_ctx); + } + + if(op_ctx) + { + axis2_op_register_op_ctx(op, env, msg_ctx, op_ctx); + svc_ctx = axis2_op_ctx_get_parent(op_ctx, env); + if(svc_ctx) + { + axutil_string_t *svc_grp_ctx_id_str = NULL; + const axis2_char_t *grp_ctx_id = NULL; + + svc_grp_ctx = axis2_svc_ctx_get_parent(svc_ctx, env); + axis2_msg_ctx_set_svc_ctx(msg_ctx, env, svc_ctx); + axis2_msg_ctx_set_svc_grp_ctx(msg_ctx, env, svc_grp_ctx); + grp_ctx_id = axis2_svc_grp_ctx_get_id(svc_grp_ctx, env); + svc_grp_ctx_id_str = axutil_string_create(env, grp_ctx_id); + axis2_msg_ctx_set_svc_grp_ctx_id(msg_ctx, env, svc_grp_ctx_id_str); + axutil_string_free(svc_grp_ctx_id_str, env); + } + + return AXIS2_SUCCESS; + } + else if(op) /* 2. if no op_ctx, create new op_ctx */ + { + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_bool_t use_pools = AXIS2_FALSE; + axutil_param_t *param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_PERSIST_OP_CTX); + + use_pools = (param && 0 == axutil_strcmp(AXIS2_VALUE_TRUE, axutil_param_get_value(param, + env))); + + if(use_pools) + { + axutil_allocator_switch_to_global_pool(env->allocator); + } + op_ctx = axis2_op_ctx_create(env, op, NULL); + if(!op_ctx) + { + axis2_char_t *op_name = axutil_qname_get_localpart(axis2_op_get_qname(op, env), env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Could not create Operation context for operatoin %s", op_name); + + return AXIS2_FAILURE; + } + + axis2_msg_ctx_set_op_ctx(msg_ctx, env, op_ctx); + + axis2_op_register_op_ctx(op, env, msg_ctx, op_ctx); + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + if(!use_pools) + { + axutil_allocator_switch_to_global_pool(env->allocator); + } + + svc_grp_ctx = axis2_conf_ctx_fill_ctxs(conf_ctx, env, msg_ctx); + + if(!use_pools) + { + axutil_allocator_switch_to_local_pool(env->allocator); + } + } + + if(use_pools) + { + axutil_allocator_switch_to_local_pool(env->allocator); + } + } + + if(!svc_grp_ctx && (axis2_msg_ctx_get_server_side(msg_ctx, env))) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service group context not found"); + return AXIS2_FAILURE; + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_ctx_handler_invoke"); + + return AXIS2_SUCCESS; +} + diff --git a/src/core/engine/disp.c b/src/core/engine/disp.c new file mode 100644 index 0000000..51cb56d --- /dev/null +++ b/src/core/engine/disp.c @@ -0,0 +1,185 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +const axis2_char_t *AXIS2_DISP_NAME = "abstract_dispatcher"; + +struct axis2_disp +{ + + /** base class, inherits from handler */ + axis2_handler_t *base; + + /** phase name */ + axutil_string_t *name; + + /** derived struct */ + void *derived; /* deep copy */ + int derived_type; +}; + +axis2_disp_t *AXIS2_CALL +axis2_disp_create( + const axutil_env_t * env, + const axutil_string_t * name) +{ + axis2_disp_t *disp = NULL; + axis2_handler_desc_t *handler_desc = NULL; + + disp = AXIS2_MALLOC(env->allocator, sizeof(axis2_disp_t)); + if(!disp) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + disp->name = NULL; + disp->base = NULL; + + if(name) + { + disp->name = axutil_string_clone((axutil_string_t *)name, env); + if(!(disp->name)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + axis2_disp_free(disp, env); + return NULL; + } + } + else + { + /* create default name */ + disp->name = axutil_string_create_const(env, (axis2_char_t **)&AXIS2_DISP_NAME); + if(!(disp->name)) + { + axis2_disp_free(disp, env); + return NULL; + } + } + + disp->base = axis2_handler_create(env); + if(!disp->base) + { + axis2_disp_free(disp, env); + return NULL; + } + + /* handler desc of base handler */ + handler_desc = axis2_handler_desc_create(env, disp->name); + if(!handler_desc) + { + axis2_disp_free(disp, env); + return NULL; + } + + axis2_handler_init(disp->base, env, handler_desc); + + return disp; +} + +axis2_handler_t *AXIS2_CALL +axis2_disp_get_base( + const axis2_disp_t * disp, + const axutil_env_t * env) +{ + return disp->base; +} + +axutil_string_t *AXIS2_CALL +axis2_disp_get_name( + const axis2_disp_t * disp, + const axutil_env_t * env) +{ + return disp->name; +} + +axis2_status_t AXIS2_CALL +axis2_disp_set_name( + struct axis2_disp * disp, + const axutil_env_t * env, + axutil_string_t * name) +{ + if(disp->name) + { + axutil_string_free(disp->name, env); + } + + if(name) + { + disp->name = axutil_string_clone(name, env); + if(!(disp->name)) + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_disp_find_svc_and_op( + struct axis2_handler * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx) +{ + axis2_svc_t *axis_service = NULL; + axis2_op_t *op = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + axis_service = axis2_msg_ctx_get_svc(msg_ctx, env); + + if(!axis_service) + { + axis_service = axis2_msg_ctx_find_svc(msg_ctx, env); + if(axis_service) + { + axis2_msg_ctx_set_svc(msg_ctx, env, axis_service); + } + } + op = axis2_msg_ctx_get_op(msg_ctx, env); + if(!op) + { + op = axis2_msg_ctx_find_op(msg_ctx, env, axis_service); + + if(op) + { + axis2_msg_ctx_set_op(msg_ctx, env, op); + } + } + + return AXIS2_SUCCESS; +} + +void AXIS2_CALL +axis2_disp_free( + struct axis2_disp *disp, + const axutil_env_t * env) +{ + if(disp->name) + { + axutil_string_free(disp->name, env); + } + AXIS2_FREE(env->allocator, disp); + return; +} + diff --git a/src/core/engine/disp_checker.c b/src/core/engine/disp_checker.c new file mode 100644 index 0000000..b668a9a --- /dev/null +++ b/src/core/engine/disp_checker.c @@ -0,0 +1,284 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_disp_checker.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const axis2_char_t *AXIS2_DISP_CHECKER_NAME = "dispatch_post_conditions_evaluator"; + +struct axis2_disp_checker +{ + + /** base class, inherits from handler */ + axis2_handler_t *base; + + /** phase name */ + axutil_string_t *name; +}; + +axis2_status_t AXIS2_CALL +axis2_disp_checker_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + +axis2_disp_checker_t *AXIS2_CALL +axis2_disp_checker_create( + const axutil_env_t * env) +{ + axis2_disp_checker_t *disp_checker = NULL; + axis2_handler_desc_t *handler_desc = NULL; + + disp_checker = AXIS2_MALLOC(env->allocator, sizeof(axis2_disp_checker_t)); + if(!disp_checker) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + disp_checker->name = NULL; + disp_checker->base = NULL; + + /* create default name */ + disp_checker->name = axutil_string_create_const(env, (axis2_char_t **)&AXIS2_DISP_CHECKER_NAME); + + if(!(disp_checker->name)) + { + axis2_disp_checker_free(disp_checker, env); + return NULL; + } + + disp_checker->base = axis2_handler_create(env); + if(!disp_checker->base) + { + axis2_disp_checker_free(disp_checker, env); + return NULL; + } + axis2_handler_set_invoke(disp_checker->base, env, axis2_disp_checker_invoke); + + /* handler desc of base handler */ + handler_desc = axis2_handler_desc_create(env, disp_checker->name); + if(!handler_desc) + { + axis2_disp_checker_free(disp_checker, env); + return NULL; + } + + axis2_handler_init(disp_checker->base, env, handler_desc); + return disp_checker; +} + +axis2_handler_t *AXIS2_CALL +axis2_disp_checker_get_base( + const axis2_disp_checker_t * disp_checker, + const axutil_env_t * env) +{ + return disp_checker->base; +} + +axutil_string_t *AXIS2_CALL +axis2_disp_checker_get_name( + const axis2_disp_checker_t * disp_checker, + const axutil_env_t * env) +{ + return disp_checker->name; +} + +axis2_status_t AXIS2_CALL +axis2_disp_checker_set_name( + axis2_disp_checker_t * disp_checker, + const axutil_env_t * env, + const axutil_string_t * name) +{ + if(disp_checker->name) + { + axutil_string_free(disp_checker->name, env); + disp_checker->name = NULL; + } + + if(name) + { + disp_checker->name = axutil_string_clone((axutil_string_t *)name, env); + if(!(disp_checker->name)) + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +void AXIS2_CALL +axis2_disp_checker_free( + axis2_disp_checker_t * disp_checker, + const axutil_env_t * env) +{ + if(disp_checker->name) + { + axutil_string_free(disp_checker->name, env); + } + + AXIS2_FREE(env->allocator, disp_checker); + + return; +} + +axis2_status_t AXIS2_CALL +axis2_disp_checker_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_op_t *op = NULL; + axis2_op_ctx_t *op_ctx = NULL; + axis2_svc_t *svc = NULL; + axis2_svc_ctx_t *svc_ctx = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + const axis2_char_t *address = NULL; + axiom_soap_fault_t *soap_fault; + axiom_soap_envelope_t *soap_envelope; + axiom_soap_body_t *soap_body; + int soap_version = AXIOM_SOAP12; + axis2_char_t *fault_code = NULL; + + axis2_char_t exception[1024]; + axis2_char_t *wsa_action; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + /*if is client side, no point in proceeding */ + if(!(axis2_msg_ctx_get_server_side(msg_ctx, env))) + return AXIS2_SUCCESS; + + op = axis2_msg_ctx_get_op(msg_ctx, env); + + if(!op) + { + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + if(op_ctx) + { + axis2_op_t *op = axis2_op_ctx_get_op(op_ctx, env); + if(op) + axis2_msg_ctx_set_op(msg_ctx, env, op); + } + } + + svc = axis2_msg_ctx_get_svc(msg_ctx, env); + + if(!svc) + { + svc_ctx = axis2_msg_ctx_get_svc_ctx(msg_ctx, env); + if(svc_ctx) + { + axis2_svc_t *tsvc = axis2_svc_ctx_get_svc(svc_ctx, env); + if(tsvc) + axis2_msg_ctx_set_svc(msg_ctx, env, tsvc); + } + } + endpoint_ref = axis2_msg_ctx_get_to(msg_ctx, env); + + if(endpoint_ref) + { + address = axis2_endpoint_ref_get_address(endpoint_ref, env); + } + + svc = axis2_msg_ctx_get_svc(msg_ctx, env); + if(!svc) + { + AXIS2_LOG_INFO(env->log, "Service Not found. Endpoint reference is : %s", + (address) ? address : "NULL"); + if(axis2_msg_ctx_get_is_soap_11(msg_ctx, env)) + { + soap_version = AXIOM_SOAP11; +fault_code = + AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX ":" + AXIOM_SOAP11_FAULT_CODE_RECEIVER; + } + else + { + fault_code = + AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX ":" + AXIOM_SOAP12_SOAP_FAULT_VALUE_RECEIVER; + + } + + soap_envelope = + axiom_soap_envelope_create_default_soap_envelope(env, soap_version); + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + soap_fault = + axiom_soap_fault_create_default_fault(env, soap_body, fault_code, + "Service Not Found", + soap_version); + + wsa_action = (axis2_char_t *)axis2_msg_ctx_get_wsa_action (msg_ctx, + env); + sprintf (exception, "Service Not Found, Endpoint referance address is %s and wsa\ + actions is %s", address, wsa_action); + + axiom_soap_fault_set_exception (soap_fault, env, exception); + axis2_msg_ctx_set_fault_soap_envelope(msg_ctx, env, soap_envelope); + return AXIS2_FAILURE; +} + +op = axis2_msg_ctx_get_op(msg_ctx, env); +if (!op) +{ + AXIS2_LOG_INFO(env->log, + "Operation Not found. Endpoint reference is : %s", + (address) ? address : "NULL"); + if (axis2_msg_ctx_get_is_soap_11(msg_ctx, env)) + { + soap_version = AXIOM_SOAP11; + fault_code = + AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX ":" + AXIOM_SOAP11_FAULT_CODE_RECEIVER; + } + else + { + fault_code = + AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX ":" + AXIOM_SOAP12_SOAP_FAULT_VALUE_RECEIVER; + } + + soap_envelope = + axiom_soap_envelope_create_default_soap_envelope(env, soap_version); + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + soap_fault = + axiom_soap_fault_create_default_fault(env, soap_body, fault_code, + "Operation Not Found", + soap_version); + + wsa_action = (axis2_char_t *)axis2_msg_ctx_get_wsa_action (msg_ctx, + env); + sprintf (exception, "Operation Not Found, Endpoint referance address is %s and wsa\ + actions is %s", address, wsa_action); + + axiom_soap_fault_set_exception (soap_fault, env, exception); + axis2_msg_ctx_set_fault_soap_envelope(msg_ctx, env, soap_envelope); + return AXIS2_FAILURE; +} +return AXIS2_SUCCESS; +} + diff --git a/src/core/engine/engine.c b/src/core/engine/engine.c new file mode 100644 index 0000000..a098ea1 --- /dev/null +++ b/src/core/engine/engine.c @@ -0,0 +1,915 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct axis2_engine +{ + /** Configuration context */ + axis2_conf_ctx_t *conf_ctx; +}; + +axis2_status_t +axis2_engine_check_must_understand_headers( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + +AXIS2_EXTERN axis2_engine_t * AXIS2_CALL +axis2_engine_create( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + axis2_engine_t *engine = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + engine = AXIS2_MALLOC(env->allocator, sizeof(axis2_engine_t)); + if(!engine) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + + engine->conf_ctx = NULL; + + if(conf_ctx) + { + engine->conf_ctx = conf_ctx; + } + + return engine; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_engine_free( + axis2_engine_t * engine, + const axutil_env_t * env) +{ + AXIS2_FREE(env->allocator, engine); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_engine_send( + axis2_engine_t * engine, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_status_t status = AXIS2_SUCCESS; + axis2_op_ctx_t *op_ctx = NULL; + axutil_array_list_t *phases = NULL; + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "axis2_engine_send start"); + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + /* Find and invoke the phases */ + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + if(op_ctx) + { + axis2_op_t *op = axis2_op_ctx_get_op(op_ctx, env); + if(op) + { + phases = axis2_op_get_out_flow(op, env); + } + } + + if(axis2_msg_ctx_is_paused(msg_ctx, env)) + { + /* Message has paused, so rerun it from the position it stopped. + The handler which paused the message will be the first one to resume + invocation + */ + status = axis2_engine_resume_invocation_phases(engine, env, phases, msg_ctx); + if(status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Resuming invocation of phases failed"); + return status; + } + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + axutil_array_list_t *global_out_phase = axis2_conf_get_out_phases(conf, env); + if(global_out_phase) + { + axis2_engine_invoke_phases(engine, env, global_out_phase, msg_ctx); + } + } + } + } + else + { + status = axis2_engine_invoke_phases(engine, env, phases, msg_ctx); + if(status != AXIS2_SUCCESS) + { + return status; + } + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + axutil_array_list_t *global_out_phase = axis2_conf_get_out_phases(conf, env); + if(global_out_phase) + { + axis2_engine_invoke_phases(engine, env, global_out_phase, msg_ctx); + } + } + } + } + + if(!(axis2_msg_ctx_is_paused(msg_ctx, env))) + { + /* Write the message to wire */ + axis2_transport_sender_t *transport_sender = NULL; + axis2_transport_out_desc_t *transport_out = axis2_msg_ctx_get_transport_out_desc(msg_ctx, + env); + + if(transport_out) + { + transport_sender = axis2_transport_out_desc_get_sender(transport_out, env); + if(!transport_sender) + return AXIS2_FAILURE; + + status = AXIS2_TRANSPORT_SENDER_INVOKE(transport_sender, env, msg_ctx); + if(status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Transport sender invoke failed"); + return status; + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Transport out is not set in message context"); + return AXIS2_FAILURE; + } + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "axis2_engine_send end successfully"); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_engine_receive( + axis2_engine_t * engine, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + axis2_op_ctx_t *op_ctx = NULL; + axis2_op_t *op = NULL; + axutil_array_list_t *pre_calculated_phases = NULL; + axutil_array_list_t *op_specific_phases = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Start:axis2_engine_receive"); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + + pre_calculated_phases = axis2_conf_get_in_phases_upto_and_including_post_dispatch(conf, env); + + if(axis2_msg_ctx_is_paused(msg_ctx, env)) + { + /* The message has paused, so re-run them from the position they stopped. */ + axis2_engine_resume_invocation_phases(engine, env, pre_calculated_phases, msg_ctx); + if(axis2_msg_ctx_is_paused(msg_ctx, env)) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Message context is paused. So return here."); + return AXIS2_SUCCESS; + } + + /* Resume op specific phases */ + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + if(op_ctx) + { + op = axis2_op_ctx_get_op(op_ctx, env); + op_specific_phases = axis2_op_get_in_flow(op, env); + axis2_engine_resume_invocation_phases(engine, env, op_specific_phases, msg_ctx); + if(axis2_msg_ctx_is_paused(msg_ctx, env)) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Message context is paused. So return here."); + return AXIS2_SUCCESS; + } + } + } + else + { + status = axis2_engine_invoke_phases(engine, env, pre_calculated_phases, msg_ctx); + if(status != AXIS2_SUCCESS) + { + if(axis2_msg_ctx_get_server_side(msg_ctx, env)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invoking pre-calculated phases failed"); + return status; + } + } + + if(axis2_msg_ctx_is_paused(msg_ctx, env)) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Message context is paused. So return here."); + return AXIS2_SUCCESS; + } + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + if(op_ctx) + { + op = axis2_op_ctx_get_op(op_ctx, env); + op_specific_phases = axis2_op_get_in_flow(op, env); + status = axis2_engine_invoke_phases(engine, env, op_specific_phases, msg_ctx); + if(status != AXIS2_SUCCESS) + { + axis2_char_t *op_name = NULL; + op_name = axutil_qname_get_localpart(axis2_op_get_qname(op, env), env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Invoking operation specific phases failed for operation %s", op_name); + return status; + } + + if(axis2_msg_ctx_is_paused(msg_ctx, env)) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Message context is paused. So return here."); + return AXIS2_SUCCESS; + } + } + } + + if((axis2_msg_ctx_get_server_side(msg_ctx, env)) && !(axis2_msg_ctx_is_paused(msg_ctx, env))) + { + axis2_msg_recv_t *receiver = NULL; + + status = axis2_engine_check_must_understand_headers(env, msg_ctx); + if(status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Check for must understand headers failed"); + return status; + } + + /* Invoke the message receivers */ + if(!op) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Operation not found"); + return AXIS2_FAILURE; + } + receiver = axis2_op_get_msg_recv(op, env); + if(!receiver) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Message receiver not set in operation description"); + return AXIS2_FAILURE; + } + status = axis2_msg_recv_receive(receiver, env, msg_ctx, axis2_msg_recv_get_derived( + receiver, env)); + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_engine_receive"); + + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_engine_send_fault( + axis2_engine_t * engine, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_op_ctx_t *op_ctx = NULL; + axis2_status_t status = AXIS2_SUCCESS; + axutil_array_list_t *phases = NULL; + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + if(op_ctx) + { + axis2_op_t *op = axis2_op_ctx_get_op(op_ctx, env); + if(op) + { + phases = axis2_op_get_fault_out_flow(op, env); + } + } + + if(axis2_msg_ctx_is_paused(msg_ctx, env)) + { + /* Message has paused, so rerun it from the position it stopped. + The handler which paused the message will be the first one to resume + invocation + */ + status = axis2_engine_resume_invocation_phases(engine, env, phases, msg_ctx); + if(status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Resuming invoking the phases failed"); + return status; + } + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + axutil_array_list_t *global_out_fault_phase = axis2_conf_get_out_fault_flow(conf, + env); + if(global_out_fault_phase) + { + axis2_engine_invoke_phases(engine, env, global_out_fault_phase, msg_ctx); + } + } + } + } + else + { + status = axis2_engine_invoke_phases(engine, env, phases, msg_ctx); + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + axutil_array_list_t *global_out_fault_phase = axis2_conf_get_out_fault_flow(conf, + env); + if(global_out_fault_phase) + { + axis2_engine_invoke_phases(engine, env, global_out_fault_phase, msg_ctx); + } + } + } + } + + if(!(axis2_msg_ctx_is_paused(msg_ctx, env))) + { + /* Write the message to wire */ + axis2_transport_sender_t *transport_sender = NULL; + axis2_transport_out_desc_t *transport_out = axis2_msg_ctx_get_transport_out_desc(msg_ctx, + env); + + if(transport_out) + { + transport_sender = axis2_transport_out_desc_get_sender(transport_out, env); + + if(transport_sender) + { + AXIS2_TRANSPORT_SENDER_INVOKE(transport_sender, env, msg_ctx); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Transport sender not found"); + return AXIS2_FAILURE; + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Transport out is not set in message context"); + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_engine_receive_fault( + axis2_engine_t * engine, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_op_ctx_t *op_ctx = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Start:axis2_engine_receive_fault"); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + + if(!op_ctx) + { + /* If we do not have an op context that means this may be an incoming + dual channel response. So try to dispatch the service */ + axis2_conf_ctx_t *conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + axis2_conf_t *conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + axutil_array_list_t *phases = + axis2_conf_get_in_phases_upto_and_including_post_dispatch(conf, env); + if(phases) + { + if(axis2_msg_ctx_is_paused(msg_ctx, env)) + { + axis2_engine_resume_invocation_phases(engine, env, phases, msg_ctx); + } + else + { + axis2_engine_invoke_phases(engine, env, phases, msg_ctx); + } + } + } + } + } + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + /* Find and execute the fault in flow handlers */ + if(op_ctx) + { + axis2_op_t *op = axis2_op_ctx_get_op(op_ctx, env); + axutil_array_list_t *phases = axis2_op_get_fault_in_flow(op, env); + if(axis2_msg_ctx_is_paused(msg_ctx, env)) + { + axis2_engine_resume_invocation_phases(engine, env, phases, msg_ctx); + } + else + { + axis2_engine_invoke_phases(engine, env, phases, msg_ctx); + } + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_engine_receive_fault"); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_msg_ctx_t * AXIS2_CALL +axis2_engine_create_fault_msg_ctx( + axis2_engine_t * engine, + const axutil_env_t * env, + axis2_msg_ctx_t * processing_context, + const axis2_char_t * code_value, + const axis2_char_t * reason_text) +{ + axis2_msg_ctx_t *fault_ctx = NULL; + axis2_endpoint_ref_t *fault_to = NULL; + axis2_endpoint_ref_t *reply_to = NULL; + axutil_stream_t *stream = NULL; + axiom_soap_envelope_t *envelope = NULL; + const axis2_char_t *wsa_action = NULL; + const axis2_char_t *msg_id = NULL; + axis2_relates_to_t *relates_to = NULL; + axis2_char_t *msg_uuid = NULL; + axis2_msg_info_headers_t *msg_info_headers = NULL; + axis2_bool_t doing_rest = AXIS2_FALSE; + + AXIS2_PARAM_CHECK(env->error, processing_context, NULL); + + if(axis2_msg_ctx_get_process_fault(processing_context, env)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_PROCESSING_FAULT_ALREADY, + AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating fault message contex failed"); + return NULL; + } + + fault_ctx = axis2_msg_ctx_create(env, engine->conf_ctx, axis2_msg_ctx_get_transport_in_desc( + processing_context, env), axis2_msg_ctx_get_transport_out_desc(processing_context, env)); + + axis2_msg_ctx_set_process_fault(fault_ctx, env, AXIS2_TRUE); + + fault_to = axis2_msg_ctx_get_fault_to(processing_context, env); + if(fault_to) + { + const axis2_char_t *address = axis2_endpoint_ref_get_address(fault_to, env); + if(!address) + { + fault_to = NULL; + } + else if(axutil_strcmp(AXIS2_WSA_NONE_URL, address) == 0 || axutil_strcmp( + AXIS2_WSA_NONE_URL_SUBMISSION, address) == 0) + { + reply_to = axis2_msg_ctx_get_reply_to(processing_context, env); + if(reply_to) + { + axis2_msg_ctx_set_fault_to(fault_ctx, env, reply_to); + } + else + { + axis2_msg_ctx_set_fault_to(fault_ctx, env, fault_to); + } + } + else + { + axis2_msg_ctx_set_fault_to(fault_ctx, env, fault_to); + } + + } + + stream = axis2_msg_ctx_get_transport_out_stream(processing_context, env); + + if(stream) + { + axis2_msg_ctx_set_transport_out_stream(fault_ctx, env, stream); + } + + if(!fault_to && !stream) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NOWHERE_TO_SEND_FAULT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Soap fault target destination not found"); + return NULL; + } + + /* Set WSA action */ + msg_info_headers = axis2_msg_ctx_get_msg_info_headers(processing_context, env); + if(msg_info_headers) + { + wsa_action = axis2_msg_info_headers_get_action(msg_info_headers, env); + if(wsa_action) + { + /* + We have to use the action set by user, + cannot use the default always. + wsa_action = "http://www.w3.org/2005/08/addressing/fault"; */ + axis2_msg_ctx_set_wsa_action(fault_ctx, env, wsa_action); + } + } + + /* Set relates to */ + msg_id = axis2_msg_ctx_get_msg_id(processing_context, env); + + /* we can create with default Relates to namespace. + Actual namespace based on addressing version will be created in addressing out handler */ + relates_to = axis2_relates_to_create(env, msg_id, + AXIS2_WSA_RELATES_TO_RELATIONSHIP_TYPE_DEFAULT_VALUE); + axis2_msg_ctx_set_relates_to(fault_ctx, env, relates_to); + + /* Set msg id */ + msg_uuid = axutil_uuid_gen(env); + axis2_msg_ctx_set_message_id(fault_ctx, env, msg_uuid); + if(msg_uuid) + { + AXIS2_FREE(env->allocator, msg_uuid); + msg_uuid = NULL; + } + + /** Copy the property map from the current message context to the newly created fault message + context. */ + { + axis2_ctx_t *ctx = axis2_msg_ctx_get_base(processing_context, env); + axis2_ctx_t *fault_base_ctx = axis2_msg_ctx_get_base(fault_ctx, env); + + if(ctx && fault_ctx) + { + axis2_ctx_set_property_map(fault_base_ctx, env, axis2_ctx_get_property_map(ctx, env)); + } + + } + + + axis2_msg_ctx_set_op_ctx(fault_ctx, env, axis2_msg_ctx_get_op_ctx(processing_context, env)); + axis2_msg_ctx_set_process_fault(fault_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_server_side(fault_ctx, env, AXIS2_TRUE); + + envelope = axis2_msg_ctx_get_fault_soap_envelope(processing_context, env); + + if(!envelope) + { + if(axis2_msg_ctx_get_is_soap_11(processing_context, env)) + { + envelope = axiom_soap_envelope_create_default_soap_fault_envelope(env, code_value, + reason_text, AXIOM_SOAP11, NULL, NULL); + + } + else + { + envelope = axiom_soap_envelope_create_default_soap_fault_envelope(env, code_value, + reason_text, AXIOM_SOAP12, NULL, NULL); + } + + if(!envelope) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Creating default soap envelope failed"); + return NULL; + } + } + + doing_rest = axis2_msg_ctx_get_doing_rest(processing_context, env); + axis2_msg_ctx_set_doing_rest(fault_ctx, env, doing_rest); + + axis2_msg_ctx_set_soap_envelope(fault_ctx, env, envelope); + axis2_msg_ctx_set_out_transport_info(fault_ctx, env, axis2_msg_ctx_get_out_transport_info( + processing_context, env)); + return fault_ctx; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_engine_invoke_phases( + axis2_engine_t * engine, + const axutil_env_t * env, + axutil_array_list_t * phases, + axis2_msg_ctx_t * msg_ctx) +{ + int i = 0; + int count = 0; + axis2_status_t status = AXIS2_SUCCESS; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Start:axis2_engine_invoke_phases"); + AXIS2_PARAM_CHECK(env->error, phases, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + if(phases) + count = axutil_array_list_size(phases, env); + for(i = 0; (i < count && !(axis2_msg_ctx_is_paused(msg_ctx, env))); i++) + { + axis2_phase_t *phase = (axis2_phase_t *)axutil_array_list_get(phases, env, i); + + status = axis2_phase_invoke(phase, env, msg_ctx); + + if(status != AXIS2_SUCCESS) + { + const axis2_char_t *phase_name = axis2_phase_get_name(phase, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invoking phase %s failed", phase_name); + return status; + } + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "End:axis2_engine_invoke_phases"); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_engine_resume_invocation_phases( + axis2_engine_t * engine, + const axutil_env_t * env, + axutil_array_list_t * phases, + axis2_msg_ctx_t * msg_ctx) +{ + int i = 0; + int count = 0; + axis2_bool_t found_match = AXIS2_FALSE; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Start:axis2_engine_resume_invocation_phases"); + AXIS2_PARAM_CHECK(env->error, phases, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + axis2_msg_ctx_set_paused(msg_ctx, env, AXIS2_FALSE); + + count = axutil_array_list_size(phases, env); + + for(i = 0; i < count && !(axis2_msg_ctx_is_paused(msg_ctx, env)); i++) + { + axis2_phase_t *phase = (axis2_phase_t *)axutil_array_list_get(phases, env, i); + const axis2_char_t *phase_name = axis2_phase_get_name(phase, env); + const axis2_char_t *paused_phase_name = axis2_msg_ctx_get_paused_phase_name(msg_ctx, env); + /* Skip invoking handlers until we find the paused phase */ + if(phase_name && paused_phase_name && 0 == axutil_strcmp(phase_name, paused_phase_name)) + { + int paused_handler_i = -1; + found_match = AXIS2_TRUE; + + paused_handler_i = axis2_msg_ctx_get_current_handler_index(msg_ctx, env); + /* Invoke the paused handler and rest of the handlers of the paused + * phase */ + axis2_phase_invoke_start_from_handler(phase, env, paused_handler_i, msg_ctx); + } + else + { + /* Now we have found the paused phase and invoked the rest of the + * handlers of that phase, invoke all the phases after that */ + if(found_match) + { + axis2_phase_invoke(phase, env, msg_ctx); + } + } + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "End:axis2_engine_resume_invocation_phases"); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t * AXIS2_CALL +axis2_engine_get_receiver_fault_code( + const axis2_engine_t * engine, + const axutil_env_t * env, + const axis2_char_t * soap_namespace) +{ + if(axutil_strcmp(AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI, soap_namespace)) + return AXIOM_SOAP12_FAULT_CODE_RECEIVER; + return AXIOM_SOAP11_FAULT_CODE_RECEIVER; +} + +axis2_status_t +axis2_engine_check_must_understand_headers( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_header_t *soap_header = NULL; + axutil_hash_t *header_block_ht = NULL; + axutil_hash_index_t *hash_index = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + soap_envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + if(!soap_envelope) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Soap envelope not found in message context"); + return AXIS2_FAILURE; + } + + soap_header = axiom_soap_envelope_get_header(soap_envelope, env); + if(!soap_header) + return AXIS2_SUCCESS; + + header_block_ht = axiom_soap_header_get_all_header_blocks(soap_header, env); + if(!header_block_ht) + return AXIS2_SUCCESS; + + for(hash_index = axutil_hash_first(header_block_ht, env); hash_index; hash_index + = axutil_hash_next(env, hash_index)) + { + void *hb = NULL; + axiom_soap_header_block_t *header_block = NULL; + axis2_char_t *role = NULL; + + axutil_hash_this(hash_index, NULL, NULL, &hb); + header_block = (axiom_soap_header_block_t *)hb; + + if(header_block) + { + if(axiom_soap_header_block_is_processed(header_block, env) + || !axiom_soap_header_block_get_must_understand(header_block, env)) + { + continue; + } + + /* If this header block is not targeted to me then its not my + problem. Currently this code only supports the "next" role; we + need to fix this to allow the engine/service to be in one or more + additional roles and then to check that any headers targeted for + that role too have been dealt with. */ + role = axiom_soap_header_block_get_role(header_block, env); + + if(axis2_msg_ctx_get_is_soap_11(msg_ctx, env) != AXIS2_TRUE) + { + /* SOAP 1.2 */ + if(!role || axutil_strcmp(role, AXIOM_SOAP12_SOAP_ROLE_NEXT) != 0) + { + axiom_soap_envelope_t *temp_env = + axiom_soap_envelope_create_default_soap_fault_envelope(env, + "soapenv:MustUnderstand", "Header not understood", AXIOM_SOAP12, NULL, + NULL); + axis2_msg_ctx_set_fault_soap_envelope(msg_ctx, env, temp_env); + axis2_msg_ctx_set_wsa_action(msg_ctx, env, + "http://www.w3.org/2005/08/addressing/fault"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Must understand soap fault occured"); + return AXIS2_FAILURE; + } + } + else + { + /* SOAP 1.1 */ + if(!role || axutil_strcmp(role, AXIOM_SOAP11_SOAP_ACTOR_NEXT) != 0) + { + axiom_soap_envelope_t *temp_env = + axiom_soap_envelope_create_default_soap_fault_envelope(env, + "soapenv:MustUnderstand", "Header not understood", AXIOM_SOAP11, NULL, + NULL); + axis2_msg_ctx_set_fault_soap_envelope(msg_ctx, env, temp_env); + axis2_msg_ctx_set_wsa_action(msg_ctx, env, + "http://www.w3.org/2005/08/addressing/fault"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Must understand soap fault occured"); + return AXIS2_FAILURE; + } + + } + + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_engine_resume_receive( + axis2_engine_t * engine, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_status_t status = AXIS2_FAILURE; + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + axutil_array_list_t *phases = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Start:axis2_engine_resume_receive"); + /* Find and invoke the phases */ + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + phases = axis2_conf_get_in_phases_upto_and_including_post_dispatch(conf, env); + + axis2_engine_resume_invocation_phases(engine, env, phases, msg_ctx); + /* Invoking the message receiver */ + if(axis2_msg_ctx_get_server_side(msg_ctx, env) && !axis2_msg_ctx_is_paused(msg_ctx, env)) + { + /* Invoke the message receivers */ + axis2_op_ctx_t *op_ctx = NULL; + + status = axis2_engine_check_must_understand_headers(env, msg_ctx); + + if(status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Checking for must understand headers failed"); + return status; + } + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + if(op_ctx) + { + axis2_op_t *op = axis2_op_ctx_get_op(op_ctx, env); + if(op) + { + axis2_msg_recv_t *receiver = NULL; + receiver = axis2_op_get_msg_recv(op, env); + if(!receiver) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Message receiver not set in operation description"); + return AXIS2_FAILURE; + } + status = axis2_msg_recv_receive(receiver, env, msg_ctx, axis2_msg_recv_get_derived( + receiver, env)); + } + } + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_engine_resume_receive"); + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_engine_resume_send( + axis2_engine_t * engine, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_op_ctx_t *op_ctx = NULL; + axutil_array_list_t *phases = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Start:axis2_engine_resume_send"); + /* Invoke the phases */ + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + if(op_ctx) + { + axis2_op_t *op = axis2_op_ctx_get_op(op_ctx, env); + if(op) + { + phases = axis2_op_get_out_flow(op, env); + } + } + axis2_engine_resume_invocation_phases(engine, env, phases, msg_ctx); + + /* Invoking transport sender */ + if(!axis2_msg_ctx_is_paused(msg_ctx, env)) + { + /* Write the message to the wire */ + axis2_transport_out_desc_t *transport_out = NULL; + axis2_transport_sender_t *sender = NULL; + transport_out = axis2_msg_ctx_get_transport_out_desc(msg_ctx, env); + if(transport_out) + { + sender = axis2_transport_out_desc_get_sender(transport_out, env); + if(sender) + { + status = AXIS2_TRANSPORT_SENDER_INVOKE(sender, env, msg_ctx); + } + } + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_engine_resume_send"); + return status; +} + diff --git a/src/core/engine/handler.c b/src/core/engine/handler.c new file mode 100644 index 0000000..e9edf24 --- /dev/null +++ b/src/core/engine/handler.c @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axis2_handler +{ + + /** handler description. This is a reference, hence a shallow copy. */ + axis2_handler_desc_t *handler_desc; + + /** + * Invoke is called to do the actual work assigned to the handler. + * The phase that owns the handler is responsible for calling invoke + * on top of the handler. Those structs that implement the interface + * of the handler should implement the logic for invoke and assign the + * respective function pointer to invoke operation. + * @param handler pointer to handler + * @param env pointer to environment struct + * @param msg_ctx pointer to message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + axis2_status_t(AXIS2_CALL * invoke)( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx); +}; + +AXIS2_EXTERN axis2_handler_t *AXIS2_CALL +axis2_handler_create( + const axutil_env_t * env) +{ + axis2_handler_t *handler = NULL; + + handler = AXIS2_MALLOC(env->allocator, sizeof(axis2_handler_t)); + if(!handler) + { + AXIS2_ERROR_SET_ERROR_NUMBER(env->error, AXIS2_ERROR_NO_MEMORY); + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_FAILURE); + return NULL; + } + + handler->handler_desc = NULL; + + return handler; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_handler_free( + axis2_handler_t * handler, + const axutil_env_t * env) +{ + AXIS2_FREE(env->allocator, handler); + return; +} + +AXIS2_EXTERN const axutil_string_t *AXIS2_CALL +axis2_handler_get_name( + const axis2_handler_t * handler, + const axutil_env_t * env) +{ + if(!(handler->handler_desc)) + return NULL; + + return axis2_handler_desc_get_name(handler->handler_desc, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_handler_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx) +{ + return handler->invoke(handler, env, msg_ctx); +} + +AXIS2_EXTERN axutil_param_t *AXIS2_CALL +axis2_handler_get_param( + const axis2_handler_t * handler, + const axutil_env_t * env, + const axis2_char_t * name) +{ + if(!(handler->handler_desc)) + return NULL; + + return axis2_handler_desc_get_param(handler->handler_desc, env, name); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_handler_init( + axis2_handler_t * handler, + const axutil_env_t * env, + axis2_handler_desc_t * handler_desc) +{ + handler->handler_desc = handler_desc; + axis2_handler_desc_set_handler(handler_desc, env, handler); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_handler_desc_t *AXIS2_CALL +axis2_handler_get_handler_desc( + const axis2_handler_t * handler, + const axutil_env_t * env) +{ + return handler->handler_desc; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_handler_set_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + AXIS2_HANDLER_INVOKE func) +{ + handler->invoke = func; + return AXIS2_SUCCESS; +} + diff --git a/src/core/engine/phase.c b/src/core/engine/phase.c new file mode 100644 index 0000000..a37ff95 --- /dev/null +++ b/src/core/engine/phase.c @@ -0,0 +1,1275 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +static axis2_status_t +axis2_phase_add_unique( + const axutil_env_t * env, + axutil_array_list_t * list, + axis2_handler_t * handler); + +static axis2_status_t +axis2_phase_remove_unique( + const axutil_env_t * env, + axutil_array_list_t * list, + axis2_handler_t * handler); + +struct axis2_phase +{ + + /** phase name */ + axis2_char_t *name; + + /** array list of handlers */ + axutil_array_list_t *handlers; + + /** first handler of phase */ + axis2_handler_t *first_handler; + + /** first handler of phase set? */ + axis2_bool_t first_handler_set; + + /** last handler of phase */ + axis2_handler_t *last_handler; + + /** last handler of phase set? */ + axis2_bool_t last_handler_set; + + /** + * handler_first and handler_last are the same handler + * that is for this phase there is only one handler + */ + axis2_bool_t is_one_handler; + + int ref; +}; + +AXIS2_EXTERN axis2_phase_t *AXIS2_CALL +axis2_phase_create( + const axutil_env_t * env, + const axis2_char_t * phase_name) +{ + axis2_phase_t *phase = NULL; + + phase = AXIS2_MALLOC(env->allocator, sizeof(axis2_phase_t)); + if(!phase) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return NULL; + } + + phase->name = NULL; + phase->handlers = NULL; + phase->first_handler = NULL; + phase->first_handler_set = AXIS2_FALSE; + phase->last_handler = NULL; + phase->last_handler_set = AXIS2_FALSE; + phase->is_one_handler = AXIS2_FALSE; + phase->ref = 1; + + phase->handlers = axutil_array_list_create(env, 10); + if(!(phase->handlers)) + { + + /** error is already set by last method array list container create */ + axis2_phase_free(phase, env); + return NULL; + } + + if(phase_name) + { + phase->name = axutil_strdup(env, phase_name); + if(!(phase->name)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + axis2_phase_free(phase, env); + return NULL; + } + } + + return phase; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_add_handler_at( + axis2_phase_t * phase, + const axutil_env_t * env, + const int index, + axis2_handler_t * handler) +{ + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "axis2_handler_t *%s added to the index %d of the phase %s", axutil_string_get_buffer( + axis2_handler_get_name(handler, env), env), index, phase->name); + + return axutil_array_list_add_at(phase->handlers, env, index, handler); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_add_handler( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler) +{ + AXIS2_LOG_INFO(env->log, "Handler %s added to phase %s", axutil_string_get_buffer( + axis2_handler_get_name(handler, env), env), phase->name); + + return axis2_phase_add_unique(env, phase->handlers, handler); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_remove_handler( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler) +{ + AXIS2_LOG_INFO(env->log, "Handler %s romoved from phase %s", axutil_string_get_buffer( + axis2_handler_get_name(handler, env), env), phase->name); + + return axis2_phase_remove_unique(env, phase->handlers, handler); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_invoke( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + int index = 0, size = 0; + axis2_status_t status = AXIS2_SUCCESS; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_phase_invoke"); + axis2_msg_ctx_set_paused_phase_name(msg_ctx, env, phase->name); + if(phase->first_handler) + { + if(axis2_msg_ctx_is_paused(msg_ctx, env)) + { + AXIS2_LOG_INFO(env->log, "Message context is paused in the phase %s", phase->name); + return AXIS2_SUCCESS; + } + else + { + const axis2_char_t *handler_name = axutil_string_get_buffer(axis2_handler_get_name( + phase->first_handler, env), env); + AXIS2_LOG_INFO(env->log, "Invoke the first handler %s within the phase %s", + handler_name, phase->name); + + status = axis2_handler_invoke(phase->first_handler, env, msg_ctx); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Handler %s invoke failed within phase %s", + handler_name, phase->name); + return status; + } + } + } + /* Invoking the rest of handlers except first_handler and last_handler */ + size = axutil_array_list_size(phase->handlers, env); + while(index < size) + { + if(axis2_msg_ctx_is_paused(msg_ctx, env)) + { + break; + } + else + { + axis2_handler_t *handler = (axis2_handler_t *)axutil_array_list_get(phase->handlers, + env, index); + if(handler) + { + const axis2_char_t *handler_name = axutil_string_get_buffer(axis2_handler_get_name( + handler, env), env); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Invoke the handler %s within the phase %s", handler_name, phase->name); + + /* Test code. This is used when valgrind is used to find leaks in Axis2/C modules.*/ + /*if(!axutil_strcmp(handler_name, "SandeshaGlobalInHandler") || !axutil_strcmp( + handler_name, "SandeshaInHandler")) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "dam_handler_name %s. dam_phase_name %s", handler_name, phase->name); + if(!axutil_strcmp(handler_name, "SandeshaGlobalInHandler")) + { + status = sandesha2_global_in_handler_invoke(phase->first_handler, env, msg_ctx); + } + if(!axutil_strcmp(handler_name, "SandeshaInHandler")) + { + status = sandesha2_in_handler_invoke(phase->first_handler, env, msg_ctx); + } + } + else*/ + status = axis2_handler_invoke(handler, env, msg_ctx); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler %s invoke failed within phase %s", handler_name, phase->name); + return status; + } + /* index increment should be done after the invoke function. If the invocation + failed this handler is taken care of and no need to revoke again */ + index++; + axis2_msg_ctx_set_current_handler_index(msg_ctx, env, index); + } + } + } + + /* If phase last handler is there invoke it here */ + if(phase->last_handler) + { + if(axis2_msg_ctx_is_paused(msg_ctx, env)) + { + AXIS2_LOG_INFO(env->log, "Message context is paused in the phase %s", phase->name); + return AXIS2_SUCCESS; + } + else + { + const axis2_char_t *handler_name = axutil_string_get_buffer(axis2_handler_get_name( + phase->last_handler, env), env); + AXIS2_LOG_INFO(env->log, "Invoke the last handler %s within the phase %s", + handler_name, phase->name); + + status = axis2_handler_invoke(phase->last_handler, env, msg_ctx); + if(!status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler %s invoke failed within phase %s", handler_name, phase->name); + return status; + } + } + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_phase_invoke"); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_phase_get_name( + const axis2_phase_t * phase, + const axutil_env_t * env) +{ + return phase->name; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_phase_get_handler_count( + const axis2_phase_t * phase, + const axutil_env_t * env) +{ + return axutil_array_list_size(phase->handlers, env); +} + +AXIS2_EXTERN int AXIS2_CALL +_axis2_phase_get_before_after( + axis2_handler_t * handler, + const axutil_env_t * env) +{ + const axis2_char_t *before = NULL, *after = NULL; + axis2_handler_desc_t *handler_desc = NULL; + axis2_phase_rule_t *rules = NULL; + const axis2_char_t *name = axutil_string_get_buffer(axis2_handler_get_name(handler, env), env); + + handler_desc = axis2_handler_get_handler_desc(handler, env); + if(!handler_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler description is not set for the Handler %s", name); + return AXIS2_FAILURE; + } + + rules = axis2_handler_desc_get_rules(handler_desc, env); + if(!rules) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler rules are not set for the Handler Description %s", name); + return AXIS2_FAILURE; + } + + before = axis2_phase_rule_get_before(rules, env); + after = axis2_phase_rule_get_after(rules, env); + + if(before && after) + { + if(!axutil_strcmp(before, after)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_BEFORE_AFTER_HANDLERS_SAME, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Both before and after handlers cannot be the same"); + return AXIS2_FAILURE; + } + return AXIS2_PHASE_BOTH_BEFORE_AFTER; + } + else if(before) + { + return AXIS2_PHASE_BEFORE; + } + else if(after) + { + return AXIS2_PHASE_AFTER; + } + else + { + return AXIS2_PHASE_ANYWHERE; + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_set_first_handler( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler) +{ + const axis2_char_t *handler_name = axutil_string_get_buffer( + axis2_handler_get_name(handler, env), env); + const axis2_char_t *phase_name = axis2_phase_get_name(phase, env); + if(phase->first_handler_set) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_PHASE_FIRST_HANDLER_ALREADY_SET, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "First handler of phase already set, so cannot set handler %s " + "in to the phase %s as first handler", handler_name, phase_name); + return AXIS2_FAILURE; + } + else + { + if(_axis2_phase_get_before_after(handler, env) != AXIS2_PHASE_ANYWHERE) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_PHASE_FIRST_HANDLER, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Invalid first handler %s set for the Phase %s", handler_name, phase_name); + return AXIS2_FAILURE; + } + phase->first_handler = handler; + phase->first_handler_set = AXIS2_TRUE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_set_last_handler( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler) +{ + const axis2_char_t *handler_name = axutil_string_get_buffer( + axis2_handler_get_name(handler, env), env); + const axis2_char_t *phase_name = axis2_phase_get_name(phase, env); + if(phase->last_handler_set) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_PHASE_LAST_HANDLER_ALREADY_SET, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Last handler of phase already set, so cannot set handler %s " + "in to the phase %s as last handler", handler_name, phase_name); + return AXIS2_FAILURE; + } + else + { + if(_axis2_phase_get_before_after(handler, env) != AXIS2_PHASE_ANYWHERE) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_PHASE_LAST_HANDLER, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid last handler %s set for the Phase %s", + handler_name, phase_name); + return AXIS2_FAILURE; + } + phase->last_handler = handler; + phase->last_handler_set = AXIS2_TRUE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_add_handler_desc( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_desc_t * handler_desc) +{ + axis2_phase_rule_t *rules = NULL; + axis2_handler_t *handler = NULL; + axis2_status_t status = AXIS2_SUCCESS; + axis2_bool_t first = AXIS2_FALSE, last = AXIS2_FALSE; + const axis2_char_t *handler_desc_name = axutil_string_get_buffer(axis2_handler_desc_get_name( + handler_desc, env), env); + if(phase->is_one_handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_PHASE_ADD_HANDLER_INVALID, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Only one handler allowed for phase %s, adding handler %s is not " + "allowed", phase->name, handler_desc_name); + return AXIS2_FAILURE; + } + else + { + rules = axis2_handler_desc_get_rules(handler_desc, env); + if(!rules) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler rules are not set for the Hanlder Description %s " + "within phase %s", handler_desc_name, phase->name); + return AXIS2_FAILURE; + } + + first = axis2_phase_rule_is_first(rules, env); + last = axis2_phase_rule_is_last(rules, env); + + if(first && last) + { + if(axutil_array_list_size(phase->handlers, env) > 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_RULES, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Invalid handler rules, so unable to add handler %s to " + "phase %s", handler_desc_name, phase->name); + return AXIS2_FAILURE; + } + + handler = axis2_handler_desc_get_handler(handler_desc, env); + if(!handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler is not set for the Handler Description %s " + "within phase %s", handler_desc_name, phase->name); + return AXIS2_FAILURE; + } + + /*status = axutil_array_list_add(phase->handlers, env, handler); */ + status = axis2_phase_add_unique(env, phase->handlers, handler); + if(status) + phase->is_one_handler = AXIS2_TRUE; + return status; + } + else if(first) + { + handler = axis2_handler_desc_get_handler(handler_desc, env); + if(!handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler is not set for the Handler Description %s " + "within phase %s", handler_desc_name, phase->name); + return AXIS2_FAILURE; + } + return axis2_phase_set_first_handler(phase, env, handler); + } + else if(last) + { + handler = axis2_handler_desc_get_handler(handler_desc, env); + if(!handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler is not set for the Handler Description %s " + "within phase %s", handler_desc_name, phase->name); + return AXIS2_FAILURE; + } + return axis2_phase_set_last_handler(phase, env, handler); + } + else + { + handler = axis2_handler_desc_get_handler(handler_desc, env); + if(!handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler is not set for the Handler Description %s " + "within phase %s", handler_desc_name, phase->name); + return AXIS2_FAILURE; + } + + return axis2_phase_insert_handler_desc(phase, env, handler_desc); + } + } +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +_axis2_phase_is_valid_before( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler) +{ + axis2_phase_rule_t *rules = NULL; + axis2_handler_desc_t *handler_desc = NULL; + const axis2_char_t *first_handler_name = NULL, *before = NULL; + + if(phase->first_handler) + { + handler_desc = axis2_handler_get_handler_desc(phase->first_handler, env); + if(!handler_desc) + return AXIS2_TRUE; + + first_handler_name = axutil_string_get_buffer( + axis2_handler_desc_get_name(handler_desc, env), env); + + if(!first_handler_name) + return AXIS2_TRUE; + + handler_desc = axis2_handler_get_handler_desc(handler, env); + if(!handler_desc) + return AXIS2_TRUE; + + rules = axis2_handler_desc_get_rules(handler_desc, env); + if(!rules) + return AXIS2_TRUE; + + before = axis2_phase_rule_get_before(rules, env); + if(!before) + return AXIS2_TRUE; + + if(!axutil_strcmp(first_handler_name, before)) + return AXIS2_FALSE; + else + return AXIS2_TRUE; + + } + return AXIS2_TRUE; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +_axis2_phase_is_valid_after( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler) +{ + axis2_phase_rule_t *rules = NULL; + axis2_handler_desc_t *handler_desc = NULL; + const axis2_char_t *last_handler_name = NULL, *after = NULL; + + if(phase->last_handler) + { + handler_desc = axis2_handler_get_handler_desc(phase->last_handler, env); + if(!handler_desc) + return AXIS2_TRUE; + + last_handler_name = axutil_string_get_buffer( + axis2_handler_desc_get_name(handler_desc, env), env); + + if(!last_handler_name) + return AXIS2_TRUE; + + handler_desc = axis2_handler_get_handler_desc(handler, env); + if(!handler_desc) + return AXIS2_TRUE; + + rules = axis2_handler_desc_get_rules(handler_desc, env); + if(!rules) + return AXIS2_TRUE; + + after = axis2_phase_rule_get_after(rules, env); + if(!after) + return AXIS2_TRUE; + + if(!axutil_strcmp(last_handler_name, after)) + return AXIS2_FALSE; + else + return AXIS2_TRUE; + + } + return AXIS2_TRUE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_insert_before( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler) +{ + axis2_phase_rule_t *rules = NULL; + axis2_handler_desc_t *handler_desc = NULL; + const axis2_char_t *handler_name = NULL, *before = NULL; + int i = 0; + int size = 0; + const axis2_char_t *name = axutil_string_get_buffer(axis2_handler_get_name(handler, env), env); + const axis2_char_t *handler_desc_name = NULL; + + handler_desc = axis2_handler_get_handler_desc(handler, env); + if(!handler_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler description is not set in the handler %s within phase %s", name, phase->name); + return AXIS2_FAILURE; + } + handler_desc_name = axutil_string_get_buffer(axis2_handler_desc_get_name(handler_desc, env), + env); + + rules = axis2_handler_desc_get_rules(handler_desc, env); + if(!rules) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler rules are not set in the handler description %s within " + "phase %s", handler_desc_name, phase->name); + return AXIS2_FAILURE; + } + + before = axis2_phase_rule_get_before(rules, env); + if(!before) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Rule `before` is not set in the handler rules for handler %s " + "within phase %s", name, phase->name); + return AXIS2_FAILURE; + } + + if(phase->last_handler) + { + const axis2_char_t *last_handler_name = axutil_string_get_buffer(axis2_handler_get_name( + phase->last_handler, env), env); + handler_desc = axis2_handler_get_handler_desc(phase->last_handler, env); + if(!handler_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler description is not set in the last handler %s of " + "phase %s", last_handler_name, phase->name); + return AXIS2_FAILURE; + } + + handler_name + = axutil_string_get_buffer(axis2_handler_desc_get_name(handler_desc, env), env); + if(!handler_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler name is not set in the handler description for " + "last handler %s within phase %s", last_handler_name, phase->name); + return AXIS2_FAILURE; + } + + if(!axutil_strcmp(before, handler_name)) + { + /*return axutil_array_list_add(phase->handlers, env, handler); */ + return axis2_phase_add_unique(env, phase->handlers, handler); + } + } + + size = axutil_array_list_size(phase->handlers, env); + + for(i = 0; i < size; i++) + { + axis2_handler_t *temp_handler = (axis2_handler_t *)axutil_array_list_get(phase->handlers, + env, i); + if(temp_handler) + { + const axis2_char_t *temp_handler_name = axutil_string_get_buffer( + axis2_handler_get_name(temp_handler, env), env); + handler_desc = axis2_handler_get_handler_desc(temp_handler, env); + if(!handler_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler Description is not set for the Handler %s " + "within phase %s", temp_handler_name, phase->name); + return AXIS2_FAILURE; + } + + handler_name = axutil_string_get_buffer(axis2_handler_desc_get_name(handler_desc, env), + env); + if(!handler_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler name is not set in the handler description for " + "handler %s within phase %s", temp_handler_name, phase->name); + return AXIS2_FAILURE; + } + + if(!axutil_strcmp(before, handler_name)) + { + return axutil_array_list_add_at(phase->handlers, env, i, handler); + } + } + } + /* add as the last handler */ + /* return axutil_array_list_add(phase->handlers, env, handler); */ + return axis2_phase_add_unique(env, phase->handlers, handler); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_insert_after( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler) +{ + axis2_phase_rule_t *rules = NULL; + axis2_handler_desc_t *handler_desc = NULL; + const axis2_char_t *handler_name = NULL; + const axis2_char_t *after = NULL; + int i = 0; + int size = 0; + const axis2_char_t *name = axutil_string_get_buffer(axis2_handler_get_name(handler, env), env); + const axis2_char_t *handler_desc_name = NULL; + + handler_desc = axis2_handler_get_handler_desc(handler, env); + if(!handler_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler description is not set in the handler %s within phase %s", name, phase->name); + return AXIS2_FAILURE; + } + handler_desc_name = axutil_string_get_buffer(axis2_handler_desc_get_name(handler_desc, env), + env); + rules = axis2_handler_desc_get_rules(handler_desc, env); + if(!rules) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler rules are not set in the handler description %s within " + "phase %s", handler_desc_name, phase->name); + return AXIS2_FAILURE; + } + + after = axis2_phase_rule_get_after(rules, env); + if(!after) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Rule `after` is not set in the handler rules for handler desc " + "%s within phase %s", handler_desc_name, phase->name); + return AXIS2_FAILURE; + } + + if(phase->first_handler) + { + const axis2_char_t *first_handler_name = axutil_string_get_buffer(axis2_handler_get_name( + phase->first_handler, env), env); + handler_desc = axis2_handler_get_handler_desc(phase->first_handler, env); + if(!handler_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler description is not set in the first handler %s " + "within phase %s", first_handler_name, phase->name); + return AXIS2_FAILURE; + } + + handler_name + = axutil_string_get_buffer(axis2_handler_desc_get_name(handler_desc, env), env); + if(!handler_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler name is not set in the handler description for " + "handler %s within phase %s", name, phase->name); + return AXIS2_FAILURE; + } + + if(!axutil_strcmp(after, handler_name)) + { + return axutil_array_list_add_at(phase->handlers, env, 0, handler); + } + } + + size = axutil_array_list_size(phase->handlers, env); + + for(i = 0; i < size; i++) + { + axis2_handler_t *temp_handler = (axis2_handler_t *)axutil_array_list_get(phase->handlers, + env, i); + if(temp_handler) + { + const axis2_char_t *temp_handler_name = axutil_string_get_buffer( + axis2_handler_get_name(temp_handler, env), env); + handler_desc = axis2_handler_get_handler_desc(temp_handler, env); + if(!handler_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler description is not set in the handler %s within" + " phase %s", temp_handler_name, phase->name); + return AXIS2_FAILURE; + } + + handler_name = axutil_string_get_buffer(axis2_handler_desc_get_name(handler_desc, env), + env); + if(!handler_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler name is not set in the handler description %s " + "within phase %s", temp_handler_name, phase->name); + return AXIS2_FAILURE; + } + + if(!axutil_strcmp(after, handler_name)) + { + if(i == (size - 1)) + { + return axis2_phase_add_unique(env, phase->handlers, handler); + } + else + return axutil_array_list_add_at(phase->handlers, env, i + 1, handler); + } + } + } + + if(size > 0) + return axutil_array_list_add_at(phase->handlers, env, 0, handler); + else + { + return axis2_phase_add_unique(env, phase->handlers, handler); + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_insert_before_and_after( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_t * handler) +{ + int before = -1; + int after = -1; + axis2_phase_rule_t *rules = NULL; + axis2_handler_desc_t *handler_desc = NULL; + const axis2_char_t *before_handler_name = NULL, *after_handler_name = NULL, *after_name = NULL, + *before_name = NULL, *handler_name = NULL; + int i = 0; + int size = 0; + const axis2_char_t *name = axutil_string_get_buffer(axis2_handler_get_name(handler, env), env); + const axis2_char_t *handler_desc_name = NULL; + + handler_desc = axis2_handler_get_handler_desc(handler, env); + if(!handler_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler description is not set in the handler %s within phase %s", name, phase->name); + return AXIS2_FAILURE; + } + handler_desc_name = axutil_string_get_buffer(axis2_handler_desc_get_name(handler_desc, env), + env); + + rules = axis2_handler_desc_get_rules(handler_desc, env); + if(!rules) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler rules are not set in the handler description %s within " + "phase %s", handler_desc_name, phase->name); + return AXIS2_FAILURE; + } + + before_name = axis2_phase_rule_get_before(rules, env); + if(!before_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Rule `before` is not set in the handler rules for handler desc " + " %s within phase %s", handler_desc_name, phase->name); + return AXIS2_FAILURE; + } + + after_name = axis2_phase_rule_get_after(rules, env); + if(!after_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Rule `after` is not set in the handler rules for handler desc " + "%s within phase %s", handler_desc_name, phase->name); + return AXIS2_FAILURE; + } + + if(phase->first_handler) + { + const axis2_char_t *first_handler_name = axutil_string_get_buffer(axis2_handler_get_name( + phase->first_handler, env), env); + handler_desc = axis2_handler_get_handler_desc(phase->first_handler, env); + if(!handler_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler description is not set in the first handler %s " + "within phase %s", first_handler_name, phase->name); + return AXIS2_FAILURE; + } + + before_handler_name = axutil_string_get_buffer(axis2_handler_desc_get_name(handler_desc, + env), env); + if(!before_handler_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler name is not set in the handler description for the " + "first handler %s within phase %s", first_handler_name, phase->name); + return AXIS2_FAILURE; + } + } + + if(phase->last_handler) + { + const axis2_char_t *last_handler_name = axutil_string_get_buffer(axis2_handler_get_name( + phase->last_handler, env), env); + handler_desc = axis2_handler_get_handler_desc(phase->last_handler, env); + if(!handler_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler description is not set in the last handler %s " + "within phase %s", last_handler_name, phase->name); + return AXIS2_FAILURE; + } + + after_handler_name = axutil_string_get_buffer( + axis2_handler_desc_get_name(handler_desc, env), env); + if(!after_handler_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler name is not set in the handler description for the " + "last handler %s within phase %s", last_handler_name, phase->name); + return AXIS2_FAILURE; + } + } + + if(before_handler_name && after_handler_name) + { + if(!axutil_strcmp(before_handler_name, before_name) && !axutil_strcmp(after_handler_name, + after_name)) + { + return axis2_phase_add_unique(env, phase->handlers, handler); + } + } + + if(after_handler_name) + { + if(!axutil_strcmp(after_handler_name, after_name)) + after = 0; + } + + size = axutil_array_list_size(phase->handlers, env); + + if(after_handler_name) + { + if(!axutil_strcmp(before_handler_name, before_name)) + before = size; + } + + for(i = 0; i < size; i++) + { + axis2_handler_t *temp_handler = (axis2_handler_t *)axutil_array_list_get(phase->handlers, + env, i); + if(temp_handler) + { + const axis2_char_t *temp_handler_name = axutil_string_get_buffer( + axis2_handler_get_name(temp_handler, env), env); + handler_desc = axis2_handler_get_handler_desc(temp_handler, env); + if(!handler_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler Description is not set for the Handler %s " + "within phase %s", temp_handler_name, phase->name); + return AXIS2_FAILURE; + } + + handler_name = axutil_string_get_buffer(axis2_handler_desc_get_name(handler_desc, env), + env); + if(!handler_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler name is not set in the handler Description for " + "handler %s within phase %s", temp_handler_name, phase->name); + return AXIS2_FAILURE; + } + + if(!axutil_strcmp(handler_name, after_name)) + after = i; + if(!axutil_strcmp(handler_name, before_name)) + before = i; + } + + if((after >= 0) && (before >= 0)) + { + /*both the before and after indexes have been found */ + if(after > before) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Both the before and after indexes have been found and " + "`after` comes before `before` which is wrong within " + "phase %s", phase->name); + return AXIS2_FAILURE; + } + else + { + if(after + 1 < size) + { + return axutil_array_list_add_at(phase->handlers, env, after + 1, handler); + } + else + { + return axis2_phase_add_unique(env, phase->handlers, handler); + } + } + } + } + return axis2_phase_add_unique(env, phase->handlers, handler); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_insert_handler_desc( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_desc_t * handler_desc) +{ + int type = 0; + axis2_handler_t *handler = NULL; + axis2_status_t status = AXIS2_FAILURE; + const axis2_char_t *handler_desc_name = axutil_string_get_buffer(axis2_handler_desc_get_name( + handler_desc, env), env); + const axis2_char_t *handler_name = NULL; + handler = axis2_handler_desc_get_handler(handler_desc, env); + + if(!handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Handler is not set in the handler description %s", + handler_desc_name); + return AXIS2_FAILURE; + } + handler_name = axutil_string_get_buffer(axis2_handler_get_name(handler, env), env); + + if(!_axis2_phase_is_valid_after(phase, env, handler)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Invalid Handler State for the handler %s within the phase %s", handler_name, + phase->name); + return AXIS2_FAILURE; + } + + if(!_axis2_phase_is_valid_before(phase, env, handler)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Invalid Handler State for the handler %s within the phase %s", handler_name, + phase->name); + return AXIS2_FAILURE; + } + + type = _axis2_phase_get_before_after(handler, env); + + switch(type) + { + case 0: /*AXIS2_BOTH_BEFORE_AFTER: */ + status = axis2_phase_insert_before_and_after(phase, env, handler); + break; + case 1: /*AXIS2_BEFORE: */ + status = axis2_phase_insert_before(phase, env, handler); + break; + case 2: /*AXIS2_AFTER: */ + status = axis2_phase_insert_after(phase, env, handler); + break; + case 3: /*AXIS2_ANYWHERE: */ + status = axis2_phase_add_unique(env, phase->handlers, handler); + break; + default: + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler description %s insertion failed within the phase %s", handler_desc_name, + phase->name); + status = AXIS2_FAILURE; + break; + } + return status; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_phase_get_all_handlers( + const axis2_phase_t * phase, + const axutil_env_t * env) +{ + return phase->handlers; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_invoke_start_from_handler( + axis2_phase_t * phase, + const axutil_env_t * env, + const int paused_handler_index, + axis2_msg_ctx_t * msg_ctx) +{ + int i = 0, size = 0; + axis2_status_t status = AXIS2_SUCCESS; + + axis2_msg_ctx_set_paused_phase_name(msg_ctx, env, phase->name); + + size = axutil_array_list_size(phase->handlers, env); + for(i = paused_handler_index; i < size; i++) + { + axis2_handler_t *handler = + (axis2_handler_t *)axutil_array_list_get(phase->handlers, env, i); + if(handler) + { + const axis2_char_t *handler_name = axutil_string_get_buffer(axis2_handler_get_name( + handler, env), env); + int index = -1; + + axis2_handler_desc_t *handler_desc = axis2_handler_get_handler_desc(handler, env); + if(!handler_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Invalid Handler State for the handler %s within phase %s", handler_name, + phase->name); + return AXIS2_FAILURE; + } + + axis2_handler_invoke(handler, env, msg_ctx); + index = axis2_msg_ctx_get_current_handler_index(msg_ctx, env); + axis2_msg_ctx_set_current_handler_index(msg_ctx, env, (index + 1)); + } + } + return status; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_phase_free( + axis2_phase_t * phase, + const axutil_env_t * env) +{ + if(--(phase->ref) > 0) + { + return; + } + + if(phase->name) + { + AXIS2_FREE(env->allocator, phase->name); + } + + if(phase->handlers) + { + axutil_array_list_free(phase->handlers, env); + } + AXIS2_FREE(env->allocator, phase); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_remove_handler_desc( + axis2_phase_t * phase, + const axutil_env_t * env, + axis2_handler_desc_t * handler_desc) +{ + axis2_handler_t *handler; + const axis2_char_t *handler_desc_name = axutil_string_get_buffer(axis2_handler_desc_get_name( + handler_desc, env), env); + handler = axis2_handler_desc_get_handler(handler_desc, env); + if(!handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler is not set in the Handler Description %s within phase %s", handler_desc_name, + phase->name); + return AXIS2_FAILURE; + } + return axis2_phase_remove_unique(env, phase->handlers, handler); +} + +static axis2_status_t +axis2_phase_add_unique( + const axutil_env_t * env, + axutil_array_list_t * list, + axis2_handler_t * handler) +{ + int i = 0, size = 0; + axis2_bool_t add_handler = AXIS2_TRUE; + const axutil_string_t *handler_name = NULL; + + handler_name = axis2_handler_get_name(handler, env); + size = axutil_array_list_size(list, env); + for(i = 0; i < size; i++) + { + axis2_handler_t *obj = NULL; + const axutil_string_t *obj_name = NULL; + + obj = (axis2_handler_t *)axutil_array_list_get(list, env, i); + obj_name = axis2_handler_get_name(obj, env); + if(obj == handler) + { + add_handler = AXIS2_FALSE; + break; + } + else if(!axutil_strcmp(axutil_string_get_buffer(handler_name, env), + axutil_string_get_buffer(obj_name, env))) + { + add_handler = AXIS2_FALSE; + break; + } + } + if(add_handler) + axutil_array_list_add(list, env, handler); + return AXIS2_SUCCESS; +} + +static axis2_status_t +axis2_phase_remove_unique( + const axutil_env_t * env, + axutil_array_list_t * list, + axis2_handler_t * handler) +{ + int i = 0, size = 0; + axis2_bool_t remove_handler = AXIS2_FALSE; + const axutil_string_t *handler_name = NULL; + + handler_name = axis2_handler_get_name(handler, env); + size = axutil_array_list_size(list, env); + for(i = 0; i < size; i++) + { + axis2_handler_t *obj = NULL; + const axutil_string_t *obj_name = NULL; + + obj = (axis2_handler_t *)axutil_array_list_get(list, env, i); + obj_name = axis2_handler_get_name(obj, env); + if(obj == handler) + { + remove_handler = AXIS2_TRUE; + break; + } + else if(!axutil_strcmp(axutil_string_get_buffer(handler_name, env), + axutil_string_get_buffer(obj_name, env))) + { + remove_handler = AXIS2_TRUE; + break; + } + } + if(remove_handler) + axutil_array_list_remove(list, env, i); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_increment_ref( + axis2_phase_t * phase, + const axutil_env_t * env) +{ + phase->ref++; + return AXIS2_SUCCESS; +} + diff --git a/src/core/engine/req_uri_disp.c b/src/core/engine/req_uri_disp.c new file mode 100644 index 0000000..dbc89b7 --- /dev/null +++ b/src/core/engine/req_uri_disp.c @@ -0,0 +1,206 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const axis2_char_t *AXIS2_REQ_URI_DISP_NAME = "request_uri_based_dispatcher"; + +axis2_status_t AXIS2_CALL +axis2_req_uri_disp_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx *msg_ctx); + +axis2_svc_t *AXIS2_CALL axis2_req_uri_disp_find_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + +axis2_op_t *AXIS2_CALL axis2_req_uri_disp_find_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_svc_t * svc); + +AXIS2_EXTERN axis2_disp_t *AXIS2_CALL +axis2_req_uri_disp_create( + const axutil_env_t * env) +{ + axis2_disp_t *disp = NULL; + axis2_handler_t *handler = NULL; + axutil_string_t *name = NULL; + + name = axutil_string_create_const(env, (axis2_char_t **)&AXIS2_REQ_URI_DISP_NAME); + + disp = axis2_disp_create(env, name); + if(!disp) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + handler = axis2_disp_get_base(disp, env); + if(!handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + return NULL; + } + + axis2_handler_set_invoke(handler, env, axis2_req_uri_disp_invoke); + + axutil_string_free(name, env); + + return disp; +} + +axis2_svc_t *AXIS2_CALL +axis2_req_uri_disp_find_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_svc_t *svc = NULL; + + if(axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + return NULL; + + endpoint_ref = axis2_msg_ctx_get_to(msg_ctx, env); + + if(endpoint_ref) + { + const axis2_char_t *address = NULL; + + address = axis2_endpoint_ref_get_address(endpoint_ref, env); + if(address) + { + axis2_char_t **url_tokens = NULL; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Checking for service using target endpoint address : %s", address); + + url_tokens = axutil_parse_request_url_for_svc_and_op(env, address); + + if(url_tokens) + { + if(url_tokens[0]) + { + axis2_conf_ctx_t *conf_ctx = NULL; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + axis2_conf_t *conf = NULL; + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + svc = axis2_conf_get_svc(conf, env, url_tokens[0]); + if(svc) + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Service found using target endpoint address"); + } + } + AXIS2_FREE(env->allocator, url_tokens[0]); + + if(url_tokens[1]) + { + AXIS2_FREE(env->allocator, url_tokens[1]); + } + + } + AXIS2_FREE(env->allocator, url_tokens); + url_tokens = NULL; + } + } + } + + return svc; +} + +axis2_op_t *AXIS2_CALL +axis2_req_uri_disp_find_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_svc_t * svc) +{ + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_op_t *op = NULL; + + AXIS2_PARAM_CHECK(env->error, svc, NULL); + + if(axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + return NULL; + + endpoint_ref = axis2_msg_ctx_get_to(msg_ctx, env); + + if(endpoint_ref) + { + const axis2_char_t *address = NULL; + + address = axis2_endpoint_ref_get_address(endpoint_ref, env); + if(address) + { + axis2_char_t **url_tokens = NULL; + + url_tokens = axutil_parse_request_url_for_svc_and_op(env, address); + + if(url_tokens) + { + if(url_tokens[1]) + { + axutil_qname_t *op_qname = NULL; + AXIS2_LOG_DEBUG( + env->log, + AXIS2_LOG_SI, + "Checking for operation using \ + target endpoint uri fragment : %s", + url_tokens[1]); + op_qname = axutil_qname_create(env, url_tokens[1], NULL, NULL); + op = axis2_svc_get_op_with_name(svc, env, axutil_qname_get_localpart(op_qname, + env)); + axutil_qname_free(op_qname, env); + if(op) + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Operation found using target endpoint uri fragment"); + } + if(url_tokens[0]) + AXIS2_FREE(env->allocator, url_tokens[0]); + if(url_tokens[1]) + AXIS2_FREE(env->allocator, url_tokens[1]); + AXIS2_FREE(env->allocator, url_tokens); + } + } + } + + return op; +} + +axis2_status_t AXIS2_CALL +axis2_req_uri_disp_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx) +{ + axis2_msg_ctx_set_find_svc(msg_ctx, env, axis2_req_uri_disp_find_svc); + axis2_msg_ctx_set_find_op(msg_ctx, env, axis2_req_uri_disp_find_op); + return axis2_disp_find_svc_and_op(handler, env, msg_ctx); +} + diff --git a/src/core/engine/rest_disp.c b/src/core/engine/rest_disp.c new file mode 100644 index 0000000..4782568 --- /dev/null +++ b/src/core/engine/rest_disp.c @@ -0,0 +1,350 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +const axis2_char_t *AXIS2_REST_DISP_NAME = "rest_dispatcher"; + +axis2_status_t AXIS2_CALL +axis2_rest_disp_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx *msg_ctx); + +axis2_svc_t *AXIS2_CALL axis2_rest_disp_find_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + +axis2_op_t *AXIS2_CALL axis2_rest_disp_find_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_svc_t * svc); + +axis2_op_t *AXIS2_CALL +axis2_rest_disp_get_rest_op_with_method_and_location( + const axis2_svc_t * svc, + const axutil_env_t * env, + const axis2_char_t * method, + const axis2_char_t * location, + int * param_count, + axis2_char_t **** params); + +AXIS2_EXTERN axis2_disp_t *AXIS2_CALL +axis2_rest_disp_create( + const axutil_env_t * env) +{ + axis2_disp_t *disp = NULL; + axis2_handler_t *handler = NULL; + axutil_string_t *name = NULL; + + name = axutil_string_create_const(env, (axis2_char_t **)&AXIS2_REST_DISP_NAME); + + disp = axis2_disp_create(env, name); + if(!disp) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + handler = axis2_disp_get_base(disp, env); + if(!handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + return NULL; + } + + axis2_handler_set_invoke(handler, env, axis2_rest_disp_invoke); + + axutil_string_free(name, env); + + return disp; +} + +axis2_svc_t *AXIS2_CALL +axis2_rest_disp_find_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_svc_t *svc = NULL; + + if(!axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + return NULL; + + endpoint_ref = axis2_msg_ctx_get_to(msg_ctx, env); + + if(endpoint_ref) + { + const axis2_char_t *address = NULL; + + address = axis2_endpoint_ref_get_address(endpoint_ref, env); + if(address) + { + axis2_char_t **url_tokens = NULL; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Checking for service using target endpoint address : %s", address); + + url_tokens = axutil_parse_request_url_for_svc_and_op(env, address); + + if(url_tokens) + { + if(url_tokens[0]) + { + axis2_conf_ctx_t *conf_ctx = NULL; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + axis2_conf_t *conf = NULL; + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + svc = axis2_conf_get_svc(conf, env, url_tokens[0]); + if(svc) + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Service found using target endpoint address"); + } + } + AXIS2_FREE(env->allocator, url_tokens[0]); + + if(url_tokens[1]) + { + AXIS2_FREE(env->allocator, url_tokens[1]); + } + + } + AXIS2_FREE(env->allocator, url_tokens); + url_tokens = NULL; + } + } + } + + return svc; +} + +axis2_op_t *AXIS2_CALL +axis2_rest_disp_find_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_svc_t * svc) +{ + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_op_t *op = NULL; + axiom_soap_envelope_t *soap_env = NULL; + axiom_soap_body_t *soap_body = NULL; + axiom_element_t *body_child = NULL; + axiom_node_t *body_child_node = NULL; + axiom_node_t *body_element_node = NULL; + axis2_bool_t soap_env_exists = AXIS2_TRUE; + int i = 0; + + axutil_array_list_t *param_keys = NULL; + axutil_array_list_t *param_values = NULL; + + AXIS2_PARAM_CHECK(env->error, svc, NULL); + + if(!axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + return NULL; + + endpoint_ref = axis2_msg_ctx_get_to(msg_ctx, env); + + if(endpoint_ref) + { + const axis2_char_t *address = NULL; + + address = axis2_endpoint_ref_get_address(endpoint_ref, env); + if(address) + { + axis2_char_t **url_tokens = NULL; + + url_tokens = axutil_parse_request_url_for_svc_and_op(env, address); + + if(url_tokens) + { + if(url_tokens[0]) + { + axis2_char_t *location = NULL; + + location = strstr(address, url_tokens[0]); + if(location) + { + const axis2_char_t *method = NULL; + + location += strlen(url_tokens[0]); + param_keys = axutil_array_list_create(env, 10); + if(!param_keys) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create the live rest parameter maps"); + return NULL; + } + param_values = axutil_array_list_create(env, 10); + + if(!param_values) + { + axutil_array_list_free(param_keys, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create the live rest parameter maps"); + return NULL; + } + method = axis2_msg_ctx_get_rest_http_method(msg_ctx, env); + op = axis2_core_utils_get_rest_op_with_method_and_location(svc, env, + method, location, param_keys, param_values); + } + } + if(url_tokens[0]) + AXIS2_FREE(env->allocator, url_tokens[0]); + if(url_tokens[1]) + AXIS2_FREE(env->allocator, url_tokens[1]); + AXIS2_FREE(env->allocator, url_tokens); + } + } + } + + if(!op) + { + if(param_keys) + { + for(i = 0; i < axutil_array_list_size(param_keys, env); i++) + { + void *value = axutil_array_list_get(param_keys, env, i); + AXIS2_FREE(env->allocator, value); + } + axutil_array_list_free(param_keys, env); + } + if(param_values) + { + for(i = 0; i < axutil_array_list_size(param_values, env); i++) + { + void *value = axutil_array_list_get(param_values, env, i); + AXIS2_FREE(env->allocator, value); + } + axutil_array_list_free(param_values, env); + } + return NULL; + } + + soap_env = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + + if(!soap_env) + { + soap_env_exists = AXIS2_FALSE; + soap_env = axiom_soap_envelope_create_default_soap_envelope(env, AXIOM_SOAP11); + } + if(soap_env) + { + soap_body = axiom_soap_envelope_get_body(soap_env, env); + } + if(!soap_body) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL, AXIS2_FAILURE); + + if(param_keys) + { + for(i = 0; i < axutil_array_list_size(param_keys, env); i++) + { + void *value = axutil_array_list_get(param_keys, env, i); + AXIS2_FREE(env->allocator, value); + } + axutil_array_list_free(param_keys, env); + } + if(param_values) + { + for(i = 0; i < axutil_array_list_size(param_values, env); i++) + { + void *value = axutil_array_list_get(param_values, env, i); + AXIS2_FREE(env->allocator, value); + } + axutil_array_list_free(param_values, env); + } + return NULL; + } + + body_element_node = axiom_soap_body_get_base_node(soap_body, env); + + if(body_element_node) + { + body_child_node = axiom_node_get_first_child(body_element_node, env); + } + + if(!body_child_node) + { + body_child = axiom_element_create_with_qname(env, NULL, axis2_op_get_qname(op, env), + &body_child_node); + axiom_soap_body_add_child(soap_body, env, body_child_node); + } + + if(param_keys && param_values) + { + for(i = 0; i < axutil_array_list_size(param_keys, env); i++) + { + axis2_char_t *param_key = NULL; + axis2_char_t *param_value = NULL; + + axiom_node_t *node = NULL; + axiom_element_t *element = NULL; + + param_key = axutil_array_list_get(param_keys, env, i); + param_value = axutil_array_list_get(param_values, env, i); + + element = axiom_element_create(env, NULL, param_key, NULL, &node); + axiom_element_set_text(element, env, param_value, node); + axiom_node_add_child(body_child_node, env, node); + + AXIS2_FREE(env->allocator, param_key); + AXIS2_FREE(env->allocator, param_value); + } + + axutil_array_list_free(param_keys, env); + axutil_array_list_free(param_values, env); + } + + if(!soap_env_exists) + { + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, soap_env); + } + + return op; +} + +axis2_status_t AXIS2_CALL +axis2_rest_disp_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx) +{ + axis2_msg_ctx_set_find_svc(msg_ctx, env, axis2_rest_disp_find_svc); + axis2_msg_ctx_set_find_op(msg_ctx, env, axis2_rest_disp_find_op); + return axis2_disp_find_svc_and_op(handler, env, msg_ctx); +} + diff --git a/src/core/engine/soap_action_disp.c b/src/core/engine/soap_action_disp.c new file mode 100644 index 0000000..10d6fa4 --- /dev/null +++ b/src/core/engine/soap_action_disp.c @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const axis2_char_t *AXIS2_SOAP_ACTION_DISP_NAME = "soap_action_based_dispatcher"; + +axis2_status_t AXIS2_CALL +axis2_soap_action_disp_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx *msg_ctx); + +axis2_svc_t *AXIS2_CALL axis2_soap_action_disp_find_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + +axis2_op_t *AXIS2_CALL axis2_soap_action_disp_find_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_svc_t * svc); + +axis2_disp_t *AXIS2_CALL +axis2_soap_action_disp_create( + const axutil_env_t * env) +{ + axis2_disp_t *disp = NULL; + axis2_handler_t *handler = NULL; + axutil_string_t *name = NULL; + + name = axutil_string_create_const(env, (axis2_char_t **)&AXIS2_SOAP_ACTION_DISP_NAME); + + disp = axis2_disp_create(env, name); + if(!disp) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + handler = axis2_disp_get_base(disp, env); + if(!handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + return NULL; + } + + axis2_handler_set_invoke(handler, env, axis2_soap_action_disp_invoke); + + axutil_string_free(name, env); + + return disp; +} + +axis2_svc_t *AXIS2_CALL +axis2_soap_action_disp_find_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + if(axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + return NULL; + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Checking for service using SOAPAction is not implemented"); + return NULL; +} + +axis2_op_t *AXIS2_CALL +axis2_soap_action_disp_find_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_svc_t * svc) +{ + const axis2_char_t *action = NULL; + axutil_qname_t *name = NULL; + axis2_op_t *op = NULL; + + AXIS2_PARAM_CHECK(env->error, svc, NULL); + + if(axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + return NULL; + + action = axutil_string_get_buffer(axis2_msg_ctx_get_soap_action(msg_ctx, env), env); + + if(action) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Checking for operation using SOAPAction : %s", + action); + + if(!op) + { + const axis2_char_t *op_name = NULL; + op_name = axutil_rindex(action, '/'); + + if(op_name) + { + op_name += 1; + } + else + { + op_name = action; + } + + if(op_name) + { + op = axis2_svc_get_op_with_name(svc, env, op_name); + } + } + + if(!op) + { + name = axutil_qname_create(env, action, NULL, NULL); + op = axis2_svc_get_op_with_qname(svc, env, name); + axutil_qname_free(name, env); + } + + if(op) + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Operation found using SOAPAction"); + } + return op; +} + +axis2_status_t AXIS2_CALL +axis2_soap_action_disp_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx) +{ + axis2_msg_ctx_set_find_svc(msg_ctx, env, axis2_soap_action_disp_find_svc); + axis2_msg_ctx_set_find_op(msg_ctx, env, axis2_soap_action_disp_find_op); + + return axis2_disp_find_svc_and_op(handler, env, msg_ctx); +} + diff --git a/src/core/engine/soap_body_disp.c b/src/core/engine/soap_body_disp.c new file mode 100644 index 0000000..702a988 --- /dev/null +++ b/src/core/engine/soap_body_disp.c @@ -0,0 +1,231 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const axis2_char_t *AXIS2_SOAP_MESSAGE_BODY_DISP_NAME = "soap_message_body_based_dispatcher"; + +axis2_status_t AXIS2_CALL +axis2_soap_body_disp_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx *msg_ctx); + +axis2_svc_t *AXIS2_CALL axis2_soap_body_disp_find_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env); + +axis2_op_t *AXIS2_CALL axis2_soap_body_disp_find_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_svc_t * svc); + +axis2_disp_t *AXIS2_CALL +axis2_soap_body_disp_create( + const axutil_env_t * env) +{ + axis2_disp_t *disp = NULL; + axis2_handler_t *handler = NULL; + axutil_string_t *name = NULL; + + name = axutil_string_create_const(env, (axis2_char_t **)&AXIS2_SOAP_MESSAGE_BODY_DISP_NAME); + + disp = axis2_disp_create(env, name); + if(!disp) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + handler = axis2_disp_get_base(disp, env); + if(!handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_HANDLER_STATE, AXIS2_FAILURE); + return NULL; + } + + axis2_handler_set_invoke(handler, env, axis2_soap_body_disp_invoke); + + axutil_string_free(name, env); + + return disp; +} + +axis2_svc_t *AXIS2_CALL +axis2_soap_body_disp_find_svc( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axis2_svc_t *svc = NULL; + + if(axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + return NULL; + + soap_envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + if(soap_envelope) + { + axiom_soap_body_t *soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + if(soap_body) + { + axiom_node_t *body_node = axiom_soap_body_get_base_node(soap_body, env); + if(body_node) + { + axiom_node_t *body_first_child_node = axiom_node_get_first_element(body_node, env); + + if(body_first_child_node) + { + if(axiom_node_get_node_type(body_first_child_node, env) == AXIOM_ELEMENT) + { + axiom_element_t *element = NULL; + element = (axiom_element_t *)axiom_node_get_data_element( + body_first_child_node, env); + if(element) + { + axiom_namespace_t *ns = axiom_element_get_namespace(element, env, + body_first_child_node); + if(ns) + { + axis2_char_t *uri = axiom_namespace_get_uri(ns, env); + if(uri) + { + axis2_char_t **url_tokens = NULL; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Checking for service " + "using SOAP message body's " + "first child's namespace " + "URI : %s", uri); + + url_tokens = axutil_parse_request_url_for_svc_and_op(env, uri); + + if(url_tokens) + { + if(url_tokens[0]) + { + axis2_conf_ctx_t *conf_ctx = NULL; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + axis2_conf_t *conf = NULL; + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + svc = axis2_conf_get_svc(conf, env, + url_tokens[0]); + if(svc) + AXIS2_LOG_DEBUG(env-> log, AXIS2_LOG_SI, + "Service found " + "using SOAP message" + "body's first " + "child's namespace URI"); + } + } + AXIS2_FREE(env->allocator, url_tokens[0]); + } + + AXIS2_FREE(env->allocator, url_tokens); + url_tokens = NULL; + } + } + } + } + } + } + } + } + } + + return svc; +} + +axis2_op_t *AXIS2_CALL +axis2_soap_body_disp_find_op( + axis2_msg_ctx_t * msg_ctx, + const axutil_env_t * env, + axis2_svc_t * svc) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axis2_op_t *op = NULL; + + AXIS2_PARAM_CHECK(env->error, svc, NULL); + + if(axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + return NULL; + + soap_envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + if(soap_envelope) + { + axiom_soap_body_t *soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + if(soap_body) + { + axiom_node_t *body_node = axiom_soap_body_get_base_node(soap_body, env); + if(body_node) + { + axiom_node_t *body_first_child_node = axiom_node_get_first_element(body_node, env); + + if(body_first_child_node) + { + if(axiom_node_get_node_type(body_first_child_node, env) == AXIOM_ELEMENT) + { + axiom_element_t *element = NULL; + element = (axiom_element_t *)axiom_node_get_data_element( + body_first_child_node, env); + if(element) + { + axis2_char_t *element_name = axiom_element_get_localname(element, env); + if(element_name) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Checking for operation using SOAP message" + "body's first child's local name : %s", element_name); + + op = axis2_svc_get_op_with_name(svc, env, element_name); + + if(op) + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Operation found using SOAP message " + "body's first child's local name"); + + } + } + } + } + } + } + } + return op; +} + +axis2_status_t AXIS2_CALL +axis2_soap_body_disp_invoke( + axis2_handler_t * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx) +{ + axis2_msg_ctx_set_find_svc(msg_ctx, env, axis2_soap_body_disp_find_svc); + axis2_msg_ctx_set_find_op(msg_ctx, env, axis2_soap_body_disp_find_op); + return axis2_disp_find_svc_and_op(handler, env, msg_ctx); +} + diff --git a/src/core/phaseresolver/Makefile.am b/src/core/phaseresolver/Makefile.am new file mode 100644 index 0000000..62724f2 --- /dev/null +++ b/src/core/phaseresolver/Makefile.am @@ -0,0 +1,9 @@ +noinst_LTLIBRARIES = libaxis2_phaseresolver.la + +libaxis2_phaseresolver_la_SOURCES = phase_holder.c \ + phase_resolver.c + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/axiom/include \ + -I$(top_builddir)/util/include diff --git a/src/core/phaseresolver/phase_holder.c b/src/core/phaseresolver/phase_holder.c new file mode 100644 index 0000000..f371dd4 --- /dev/null +++ b/src/core/phaseresolver/phase_holder.c @@ -0,0 +1,243 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct axis2_phase_holder +{ + axutil_array_list_t *phase_list; +}; + +AXIS2_EXTERN axis2_phase_holder_t *AXIS2_CALL +axis2_phase_holder_create( + const axutil_env_t * env) +{ + axis2_phase_holder_t *phase_holder = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + phase_holder = (axis2_phase_holder_t *)AXIS2_MALLOC(env-> allocator, + sizeof(axis2_phase_holder_t)); + + if(!phase_holder) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + phase_holder->phase_list = NULL; + + return phase_holder; +} + +AXIS2_EXTERN axis2_phase_holder_t *AXIS2_CALL +axis2_phase_holder_create_with_phases( + const axutil_env_t * env, + axutil_array_list_t * phases) +{ + axis2_phase_holder_t *phase_holder = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + if(!phases) + { + return NULL; + } + + phase_holder = (axis2_phase_holder_t *)axis2_phase_holder_create(env); + phase_holder->phase_list = phases; + + return phase_holder; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_phase_holder_free( + axis2_phase_holder_t * phase_holder, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(phase_holder) + { + AXIS2_FREE(env->allocator, phase_holder); + } + + return; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_phase_holder_is_phase_exist( + axis2_phase_holder_t * phase_holder, + const axutil_env_t * env, + const axis2_char_t * phase_name) +{ + int size = 0; + int i = 0; + axis2_phase_t *phase = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + AXIS2_PARAM_CHECK(env->error, phase_name, AXIS2_FALSE); + + size = axutil_array_list_size(phase_holder->phase_list, env); + + for(i = 0; i < size; i++) + { + const axis2_char_t *phase_name_l = NULL; + + phase = (axis2_phase_t *)axutil_array_list_get(phase_holder-> phase_list, env, i); + phase_name_l = axis2_phase_get_name(phase, env); + if(0 == axutil_strcmp(phase_name_l, phase_name)) + { + return AXIS2_TRUE; + } + } + return AXIS2_FALSE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_holder_add_handler( + axis2_phase_holder_t * phase_holder, + const axutil_env_t * env, + axis2_handler_desc_t * handler) +{ + const axis2_char_t *phase_name = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "axis2_phase_holder_add_handler start"); + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, handler, AXIS2_FAILURE); + + phase_name = axis2_phase_rule_get_name(axis2_handler_desc_get_rules(handler, env), env); + if(AXIS2_TRUE == axis2_phase_holder_is_phase_exist(phase_holder, env, phase_name)) + { + axis2_phase_t *phase = NULL; + + phase = axis2_phase_holder_get_phase(phase_holder, env, phase_name); + status = axis2_phase_add_handler_desc(phase, env, handler); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Add handler %s to phase %s", + axutil_string_get_buffer(axis2_handler_desc_get_name(handler, env), env), phase_name); + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_PHASE, AXIS2_FAILURE); + status = AXIS2_FAILURE; + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "axis2_phase_holder_add_handler end status = %s", + status ? "SUCCESS" : "FAILURE"); + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_holder_remove_handler( + axis2_phase_holder_t * phase_holder, + const axutil_env_t * env, + axis2_handler_desc_t * handler) +{ + const axis2_char_t *phase_name = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "axis2_phase_holder_remove_handler start"); + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, handler, AXIS2_FAILURE); + + phase_name = axis2_phase_rule_get_name(axis2_handler_desc_get_rules(handler, env), env); + if(AXIS2_TRUE == axis2_phase_holder_is_phase_exist(phase_holder, env, phase_name)) + { + axis2_phase_t *phase = NULL; + + phase = axis2_phase_holder_get_phase(phase_holder, env, phase_name); + status = axis2_phase_remove_handler_desc(phase, env, handler); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Remove handler %s from phase %s", + axutil_string_get_buffer(axis2_handler_desc_get_name(handler, env), env), phase_name); + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_PHASE, AXIS2_FAILURE); + status = AXIS2_FAILURE; + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "axis2_phase_holder_remove_handler end status = %s", + status ? "SUCCESS" : "FAILURE"); + return status; +} + +AXIS2_EXTERN axis2_phase_t *AXIS2_CALL +axis2_phase_holder_get_phase( + const axis2_phase_holder_t * phase_holder, + const axutil_env_t * env, + const axis2_char_t * phase_name) +{ + int size = 0; + int i = 0; + axis2_phase_t *phase = NULL; + + AXIS2_PARAM_CHECK(env->error, phase_name, NULL); + + size = axutil_array_list_size(phase_holder->phase_list, env); + + for(i = 0; i < size; i++) + { + const axis2_char_t *phase_name_l = NULL; + phase = (axis2_phase_t *)axutil_array_list_get(phase_holder-> phase_list, env, i); + phase_name_l = axis2_phase_get_name(phase, env); + if(0 == axutil_strcmp(phase_name_l, phase_name)) + { + return phase; + } + } + + return NULL; +} + +/* This function is deprecated */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_holder_build_transport_handler_chain( + axis2_phase_holder_t * phase_holder, + const axutil_env_t * env, + axis2_phase_t * phase, + axutil_array_list_t * handlers) +{ + axis2_handler_t *handler = NULL; + int size = 0; + int status = AXIS2_FAILURE; + int i = 0; + axis2_handler_desc_t *handler_desc = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, phase, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, handlers, AXIS2_FAILURE); + + size = axutil_array_list_size(handlers, env); + + for(i = 0; i < size; i++) + { + handler_desc = (axis2_handler_desc_t *)axutil_array_list_get(handlers, env, i); + status = axis2_handler_init(handler, env, handler_desc); + if(AXIS2_FAILURE == status) + { + return status; + } + + status = axis2_handler_desc_set_handler(handler_desc, env, handler); + if(AXIS2_FAILURE == status) + { + return status; + } + + status = axis2_phase_add_handler(phase, env, handler); + } + return status; +} diff --git a/src/core/phaseresolver/phase_resolver.c b/src/core/phaseresolver/phase_resolver.c new file mode 100644 index 0000000..c291456 --- /dev/null +++ b/src/core/phaseresolver/phase_resolver.c @@ -0,0 +1,2016 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +/* + * It is important to understand the following relationships between the + * functions defined here and else where. + * axis2_phase_resolver_engage_module_globally->axis2_svc_add_module_ops-> + * ->axis2_phase_resolver_build_execution_chains_for_module_op->axis2_phase_resolver_build_execution_chains_for_op + * and + * axis2_phase_resolver_engage_module_to_svc->axis2_svc_add_module_ops-> + * ->axis2_phase_resolver_build_execution_chains_for_module_op->axis2_phase_resolver_build_execution_chains_for_op + */ +struct axis2_phase_resolver +{ + + /** axis2 configuration */ + axis2_conf_t *axis2_config; + + /** service */ + axis2_svc_t *svc; +}; + +static axis2_status_t +axis2_phase_resolver_build_execution_chains_for_op( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + int type, + axis2_op_t * op); + +static axis2_status_t +axis2_phase_resolver_add_module_handlers_to_system_defined_phases( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + axis2_module_desc_t * module_desc); + +static axis2_status_t +axis2_phase_resolver_add_module_handlers_to_user_defined_phases( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + struct axis2_svc *svc, + struct axis2_module_desc *module_desc); + +/* Deprecated and no longer used */ +static axis2_status_t +axis2_phase_resolver_build_in_transport_chains( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + axis2_transport_in_desc_t * transport); + +/* Deprecated and no longer used */ +static axis2_status_t +axis2_phase_resolver_build_out_transport_chains( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + axis2_transport_out_desc_t * transport); + +static axis2_status_t +axis2_phase_resolver_add_to_handler_list( + const axutil_env_t * env, + axutil_array_list_t *handler_list, + axis2_op_t *op, + axis2_module_desc_t * module_desc, + int type); + +AXIS2_EXTERN axis2_phase_resolver_t *AXIS2_CALL +axis2_phase_resolver_create( + const axutil_env_t * env) +{ + axis2_phase_resolver_t *phase_resolver = NULL; + + phase_resolver = (axis2_phase_resolver_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_phase_resolver_t)); + + if(!phase_resolver) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory."); + return NULL; + } + + phase_resolver->axis2_config = NULL; + phase_resolver->svc = NULL; + + return phase_resolver; +} + +AXIS2_EXTERN axis2_phase_resolver_t *AXIS2_CALL +axis2_phase_resolver_create_with_config( + const axutil_env_t * env, + axis2_conf_t * axis2_config) +{ + axis2_phase_resolver_t *phase_resolver = NULL; + + AXIS2_PARAM_CHECK(env->error, axis2_config, NULL); + + phase_resolver = (axis2_phase_resolver_t *)axis2_phase_resolver_create(env); + + phase_resolver->axis2_config = axis2_config; + + return phase_resolver; +} + +AXIS2_EXTERN axis2_phase_resolver_t *AXIS2_CALL +axis2_phase_resolver_create_with_config_and_svc( + const axutil_env_t * env, + axis2_conf_t * axis2_config, + axis2_svc_t * svc) +{ + axis2_phase_resolver_t *phase_resolver = NULL; + + AXIS2_PARAM_CHECK(env->error, axis2_config, NULL); + + phase_resolver = (axis2_phase_resolver_t *)axis2_phase_resolver_create(env); + + if(!phase_resolver) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No Memory."); + return NULL; + } + phase_resolver->axis2_config = axis2_config; + + phase_resolver->svc = svc; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Service name is : %s", axis2_svc_get_name( + phase_resolver->svc, env)); + + return phase_resolver; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_phase_resolver_free( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env) +{ + if(phase_resolver) + { + AXIS2_FREE(env->allocator, phase_resolver); + } + + return; +} + +/** + * This is in general called to engage a module to the axis2 engine. In other words modules handlers + * are added into all global and operation specific phases appropriately. Where these handlers + * should go is determined by the module handler specific descriptions in module.xml file. Also + * module operations are added to service and built exeuction chains for those operations as well. + * First add all the handlers defined for system phases are added into system phases. Then module + * operations are added into each service. At the same time execution chains for these module + * operations are built as well. Then handlers defined for user phases are added into user defined + * pahses. + */ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_resolver_engage_module_globally( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + axis2_module_desc_t * module_desc) +{ + axis2_status_t status = AXIS2_FAILURE; + axutil_qname_t *qname_addressing = NULL; + axutil_hash_t *svcs = NULL; + + const axutil_qname_t *mod_qname = NULL; + axis2_char_t *mod_name = NULL; + axutil_hash_t *all_ops = NULL; + axutil_hash_index_t *index_j = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_phase_resolver_engage_module_globally"); + + AXIS2_PARAM_CHECK(env->error, module_desc, AXIS2_FAILURE); + + mod_qname = axis2_module_desc_get_qname(module_desc, env); + mod_name = axutil_qname_get_localpart(mod_qname, env); + + /* Add module handlers into global phases */ + status = axis2_phase_resolver_add_module_handlers_to_system_defined_phases(phase_resolver, env, + module_desc); + + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Engaging module %s to global chain failed", + mod_name); + return status; + } + + /* Module is engaged to all the services */ + svcs = axis2_conf_get_all_svcs(phase_resolver->axis2_config, env); + if(!svcs) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "There are no services in the axis2 configuration"); + return AXIS2_FAILURE; + } + + qname_addressing = axutil_qname_create(env, AXIS2_MODULE_ADDRESSING, NULL, NULL); + + for(index_j = axutil_hash_first(svcs, env); index_j; index_j = axutil_hash_next(env, index_j)) + { + axis2_svc_t *svc = NULL; + void *w = NULL; + axis2_svc_grp_t *parent = NULL; + const axis2_char_t *svc_name = NULL; + const axis2_char_t *svc_grp_name = NULL; + + axutil_hash_this(index_j, NULL, NULL, &w); + svc = (axis2_svc_t *)w; + svc_name = axis2_svc_get_name(svc, env); + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "svc name is:%s", svc_name); + + /* Module operations are added to service and built execution chains for operations. */ + status = axis2_svc_add_module_ops(svc, env, module_desc, phase_resolver->axis2_config); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding module operations for module %s to service %s failed", mod_name, svc_name); + axutil_qname_free(qname_addressing, env); + return status; + } + + /* Call this function to add module handlers into service operation phases */ + status = axis2_phase_resolver_add_module_handlers_to_user_defined_phases(phase_resolver, + env, svc, module_desc); + + if(AXIS2_SUCCESS != status) + { + axutil_qname_free(qname_addressing, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Engaging module %s to service %s failed", + mod_name, svc_name); + + return status; + } + + if(axutil_qname_equals(mod_qname, env, qname_addressing)) + { + /* If addressing module then all operations which are not module + * operations with a wsa mapping parameter is added to the + * service's wsa-mapping list*/ + all_ops = axis2_svc_get_all_ops(svc, env); + if(all_ops) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + + for(hi = axutil_hash_first(all_ops, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &val); + + if(val) + { + if(!axis2_op_is_from_module((axis2_op_t *)val, env)) + { + axis2_op_t *op_desc = NULL; + axutil_array_list_t *params = NULL; + int j = 0; + int sizej = 0; + + op_desc = (axis2_op_t *)val; + params = axis2_op_get_all_params(op_desc, env); + /* Adding wsa-mapping into service */ + sizej = axutil_array_list_size(params, env); + for(j = 0; j < sizej; j++) + { + axutil_param_t *param = NULL; + axis2_char_t *param_name = NULL; + + param = axutil_array_list_get(params, env, j); + param_name = axutil_param_get_name(param, env); + if(!axutil_strcmp(param_name, AXIS2_WSA_MAPPING)) + { + axis2_char_t *key = NULL; + key = (axis2_char_t *)axutil_param_get_value(param, env); + axis2_svc_add_mapping(svc, env, key, op_desc); + } + } + } + val = NULL; + } + } + } + } + + parent = axis2_svc_get_parent(svc, env); + if(parent) + { + axutil_array_list_t *modules = NULL; + int j = 0; + int sizej = 0; + axis2_bool_t add_to_group = AXIS2_TRUE; + svc_grp_name = axis2_svc_grp_get_name(parent, env); + + modules = axis2_svc_grp_get_all_module_qnames(parent, env); + sizej = axutil_array_list_size(modules, env); + for(j = 0; j < sizej; j++) + { + axutil_qname_t *module = NULL; + + module = (axutil_qname_t *)axutil_array_list_get(modules, env, j); + if(axutil_qname_equals(mod_qname, env, module)) + { + add_to_group = AXIS2_FALSE; + break; + } + } + + if(add_to_group) + { + status = axis2_svc_grp_add_module_qname(parent, env, mod_qname); + } + } + + if(AXIS2_SUCCESS != status) + { + axutil_qname_free(qname_addressing, env); + + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Adding module %s to service group %s failed", + mod_name, svc_grp_name); + + return status; + } + } + + axutil_qname_free(qname_addressing, env); + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_phase_resolver_engage_module_globally"); + + return status; +} + +/** + * This function is called to engage a module to a service specifically. In other words all module + * handlers defined for user phases are added into user defined phases and all module handlers + * defined for system defined phases are added into system defined phases. Note that user defined + * phases are in the flows taken from operation and system defined phases are in the flows taken + * from conf. Where each module handler should go is determined by module handler descriptions in + * module.xml file. + * First we add the operations defined in the module into the service and built execution chains for + * them. Then for all the operations of the service we check whether the module + * already engaged to operation. If not engage it to service operation. Also if the module is newly + * engaged to operation add the module qnname to the engaged module list of the operation. + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_resolver_engage_module_to_svc( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + axis2_svc_t * svc, + axis2_module_desc_t * module_desc) +{ + axutil_hash_t *ops = NULL; + axutil_hash_index_t *index_i = NULL; + axis2_status_t status = AXIS2_FAILURE; + const axutil_qname_t *module_d_qname = NULL; + axis2_char_t *modname_d = NULL; + const axis2_char_t *svcname = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_phase_resolver_engage_module_to_svc"); + + module_d_qname = axis2_module_desc_get_qname(module_desc, env); + modname_d = axutil_qname_get_localpart(module_d_qname, env); + svcname = axis2_svc_get_name(svc, env); + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Module %s will be engaged to %s", modname_d, svcname); + + ops = axis2_svc_get_all_ops(svc, env); + if(!ops) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service %s has no operation", svcname); + + return AXIS2_FAILURE; + } + + /* Module operations are added to service and built execution chains */ + status = axis2_svc_add_module_ops(svc, env, module_desc, phase_resolver->axis2_config); + + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding module operations from module %s into service %s failed", modname_d, svcname); + + return status; + } + + for(index_i = axutil_hash_first(ops, env); index_i; index_i = axutil_hash_next(env, index_i)) + { + axutil_array_list_t *modules = NULL; + axis2_op_t *op_desc = NULL; + int size = 0; + int j = 0; + void *v = NULL; + axis2_bool_t engaged = AXIS2_FALSE; + axis2_char_t *opname = NULL; + + axutil_hash_this(index_i, NULL, NULL, &v); + op_desc = (axis2_op_t *)v; + + opname = axutil_qname_get_localpart(axis2_op_get_qname(op_desc, env), env); + + modules = axis2_op_get_all_modules(op_desc, env); + if(modules) + { + size = axutil_array_list_size(modules, env); + } + + for(j = 0; j < size; j++) + { + axis2_module_desc_t *module_desc_l = NULL; + const axutil_qname_t *module_d_qname_l = NULL; + + module_desc_l = axutil_array_list_get(modules, env, j); + module_d_qname_l = axis2_module_desc_get_qname(module_desc_l, env); + if(axutil_qname_equals(module_d_qname, env, module_d_qname_l)) + { + engaged = AXIS2_TRUE; + status = AXIS2_SUCCESS; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Module %s already engaged to operation %s of service %s", modname_d, opname, + svcname); + + break; + } + } + + if(!engaged) + { + status = axis2_phase_resolver_engage_module_to_op(phase_resolver, env, op_desc, + module_desc); + + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Engaging module %s to operation %s failed.", modname_d, opname); + + return status; + } + + status = axis2_op_add_to_engaged_module_list(op_desc, env, module_desc); + } + + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_phase_resolver_engage_module_to_svc"); + + return status; +} + +/** + * In this function all the handlers in each flow of the module description are added to the phases + * of the operation(user define phases) and phases of the conf(system defined phases). First handlers + * for system defined phases are added. Then handlers for operation specific phases are added. + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_resolver_engage_module_to_op( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + axis2_op_t * axis_op, + axis2_module_desc_t * module_desc) +{ + int type = 0; + axis2_phase_holder_t *phase_holder = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_phase_resolver_engage_module_to_op"); + AXIS2_PARAM_CHECK(env->error, axis_op, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, module_desc, AXIS2_FAILURE); + + for(type = 1; type < 5; type++) + { + axis2_flow_t *flow = NULL; + axis2_char_t *flowname = NULL; + axutil_array_list_t *phases = NULL; + + switch(type) + { + case AXIS2_IN_FLOW: + { + phases = axis2_op_get_in_flow(axis_op, env); + break; + } + case AXIS2_OUT_FLOW: + { + phases = axis2_op_get_out_flow(axis_op, env); + break; + } + case AXIS2_FAULT_IN_FLOW: + { + phases = axis2_op_get_fault_in_flow(axis_op, env); + break; + } + case AXIS2_FAULT_OUT_FLOW: + { + phases = axis2_op_get_fault_out_flow(axis_op, env); + break; + } + } + + if(phases) + { + phase_holder = axis2_phase_holder_create_with_phases(env, phases); + } + + switch(type) + { + case AXIS2_IN_FLOW: + { + flow = axis2_module_desc_get_in_flow(module_desc, env); + flowname = "in flow"; + break; + } + case AXIS2_OUT_FLOW: + { + flow = axis2_module_desc_get_out_flow(module_desc, env); + flowname = "out flow"; + break; + } + case AXIS2_FAULT_IN_FLOW: + { + flow = axis2_module_desc_get_fault_in_flow(module_desc, env); + flowname = "fault in flow"; + break; + } + case AXIS2_FAULT_OUT_FLOW: + { + flow = axis2_module_desc_get_fault_out_flow(module_desc, env); + flowname = "fault out flow"; + break; + } + } + + if(flow && phase_holder) + { + int j = 0; + int handler_count = 0; + + handler_count = axis2_flow_get_handler_count(flow, env); + for(j = 0; j < handler_count; j++) + { + /* For all handlers in the flow from the module description */ + axis2_handler_desc_t *metadata = NULL; + const axis2_char_t *phase_name = NULL; + axis2_phase_rule_t *phase_rule = NULL; + const axutil_string_t *handlersname = NULL; + const axis2_char_t *handlername = NULL; + axis2_status_t status = AXIS2_FAILURE; + + metadata = axis2_flow_get_handler(flow, env, j); + handlersname = axis2_handler_desc_get_name(metadata, env); + handlername = axutil_string_get_buffer(handlersname, env); + phase_rule = axis2_handler_desc_get_rules(metadata, env); + phase_name = axis2_phase_rule_get_name(phase_rule, env); + + /* For user/operation specific phases */ + if((axutil_strcmp(AXIS2_PHASE_TRANSPORT_IN, phase_name)) && (axutil_strcmp( + AXIS2_PHASE_DISPATCH, phase_name)) && (axutil_strcmp(AXIS2_PHASE_POST_DISPATCH, + phase_name)) && (axutil_strcmp(AXIS2_PHASE_PRE_DISPATCH, phase_name))) + { + status = axis2_phase_holder_add_handler(phase_holder, env, metadata); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Handler %s inclusion failed for %s phase within flow %s. Phase might" + "not available in axis2.xml", handlername, phase_name, phase_name, + flowname); + + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, ""); + axis2_phase_holder_free(phase_holder, env); + return status; + } + + } + + /* For System defined phases */ + if((!axutil_strcmp(AXIS2_PHASE_TRANSPORT_IN, phase_name)) || (!axutil_strcmp( + AXIS2_PHASE_DISPATCH, phase_name)) || (!axutil_strcmp( + AXIS2_PHASE_POST_DISPATCH, phase_name)) || (!axutil_strcmp( + AXIS2_PHASE_PRE_DISPATCH, phase_name))) + { + axutil_array_list_t *phase_list = NULL; + axis2_phase_holder_t *phase_holder = NULL; + + phase_list = axis2_conf_get_in_phases_upto_and_including_post_dispatch( + phase_resolver->axis2_config, env); + + if(phase_holder) + { + axis2_phase_holder_free(phase_holder, env); + phase_holder = NULL; + } + + phase_holder = axis2_phase_holder_create_with_phases(env, phase_list); + + status = axis2_phase_holder_add_handler(phase_holder, env, metadata); + axis2_phase_holder_free(phase_holder, env); + phase_holder = NULL; + + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding handler %s to phase %s within flow %s failed", handlername, + phase_name, flowname); + + return status; + } + } + } + } + + if(phase_holder) + { + axis2_phase_holder_free(phase_holder, env); + phase_holder = NULL; + } + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_phase_resolver_engage_module_to_op"); + + return AXIS2_SUCCESS; +} + +/** + * The caller function first set the service into the phase resolver. Then call this function to + * build execution chains for that services operations. Within this function it just call + * axis2_phase_resolver_build_execution_chains_for_op() function to build exection chains for + * each operation. + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_resolver_build_execution_chains_for_svc( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env) +{ + axutil_hash_index_t *index_i = 0; + axis2_status_t status = AXIS2_FAILURE; + axis2_op_t *op = NULL; + axutil_hash_t *ops = NULL; + + if(!(phase_resolver->svc)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No service set to phase resolver"); + return AXIS2_FAILURE; + } + + ops = axis2_svc_get_all_ops(phase_resolver->svc, env); + + for(index_i = axutil_hash_first(ops, env); index_i; index_i = axutil_hash_next(env, index_i)) + { + void *v = NULL; + int j = 0; + + axutil_hash_this(index_i, NULL, NULL, &v); + op = (axis2_op_t *)v; + for(j = 1; j < 5; j++) + { + status = axis2_phase_resolver_build_execution_chains_for_op(phase_resolver, env, j, op); + } + } + + return status; +} + +/** + * For operation passed as parameter, build execution chains. To do this get all engaged modules + * from the axis2 configuration and for each module get the all handlers to be add to the operation + * specific phases. Then for each operation specific phases add those handlers. It should be noted + * that by the time this function is called the module handlers are already added to system specific + * phases. This function is called from axis2_phase_resolver_build_execution_chains_for_svc() + * function and axis2_phase_resolver_build_execution_chains_for_module_op() function. + */ +static axis2_status_t +axis2_phase_resolver_build_execution_chains_for_op( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + int type, + axis2_op_t *op) +{ + axutil_array_list_t *handler_list = NULL; + axutil_array_list_t *moduleqnames = NULL; + int i = 0; + int size = 0; + int status = AXIS2_FAILURE; + axis2_char_t *flowname = NULL; + axis2_phase_holder_t *phase_holder = NULL; + axutil_array_list_t *engaged_module_list_for_parent_svc = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, + "Entry:axis2_phase_resolver_build_execution_chains_for_op"); + + handler_list = axutil_array_list_create(env, 0); + if(!handler_list) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return AXIS2_FAILURE; + } + + /* Engage handlers from axis2.xml and from modules */ + moduleqnames = axis2_conf_get_all_engaged_modules(phase_resolver->axis2_config, env); + + size = axutil_array_list_size(moduleqnames, env); + + for(i = 0; i < size; i++) + { + axis2_char_t *modulename = NULL; + axutil_qname_t *moduleqname = NULL; + axis2_module_desc_t *module_desc = NULL; + + moduleqname = (axutil_qname_t *)axutil_array_list_get(moduleqnames, env, i); + modulename = axutil_qname_get_localpart(moduleqname, env); + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Module name is:%s", modulename); + + module_desc = axis2_conf_get_module(phase_resolver->axis2_config, env, moduleqname); + if(!module_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MODULE_REF, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Module description not found in axis2 configuration for name %s", modulename); + + if(handler_list) + { + axutil_array_list_free(handler_list, env); + } + + return AXIS2_FAILURE; + } + + status = axis2_phase_resolver_add_to_handler_list(env, handler_list, op, module_desc, type); + if(AXIS2_SUCCESS != status) + { + if(handler_list) + { + axutil_array_list_free(handler_list, env); + } + return AXIS2_FAILURE; + } + + axis2_op_add_to_engaged_module_list(op, env, module_desc); + } + + engaged_module_list_for_parent_svc + = axis2_svc_get_engaged_module_list(phase_resolver->svc, env); + size = axutil_array_list_size(engaged_module_list_for_parent_svc, env); + + for(i = 0; i < size; i++) + { + axis2_char_t *modulename = NULL; + axutil_qname_t *moduleqname = NULL; + axis2_module_desc_t *module_desc = NULL; + + module_desc = axutil_array_list_get(engaged_module_list_for_parent_svc, env, i); + if(!module_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MODULE_REF, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Module description not found in engaged module list for service %s", + axis2_svc_get_name(phase_resolver->svc, env)); + + if(handler_list) + { + axutil_array_list_free(handler_list, env); + } + + return AXIS2_FAILURE; + } + + moduleqname = (axutil_qname_t *)axis2_module_desc_get_qname(module_desc, env); + modulename = axutil_qname_get_localpart(moduleqname, env); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Module name is:%s", modulename); + + status = axis2_phase_resolver_add_to_handler_list(env, handler_list, op, module_desc, type); + if(AXIS2_SUCCESS != status) + { + if(handler_list) + { + axutil_array_list_free(handler_list, env); + } + return AXIS2_FAILURE; + } + + axis2_op_add_to_engaged_module_list(op, env, module_desc); + } + + if(0 == axutil_array_list_size(handler_list, env)) + { + /* No flows configured */ + if(handler_list) + { + axutil_array_list_free(handler_list, env); + } + + return AXIS2_SUCCESS; + } + + switch(type) + { + case AXIS2_IN_FLOW: + { + axutil_array_list_t *phase_list = NULL; + + phase_list = axis2_op_get_in_flow(op, env); + phase_holder = axis2_phase_holder_create_with_phases(env, phase_list); + flowname = "in flow"; + break; + } + case AXIS2_OUT_FLOW: + { + axutil_array_list_t *phase_list = NULL; + + phase_list = axis2_op_get_out_flow(op, env); + phase_holder = axis2_phase_holder_create_with_phases(env, phase_list); + flowname = "out flow"; + break; + } + case AXIS2_FAULT_IN_FLOW: + { + axutil_array_list_t *phase_list = NULL; + + phase_list = axis2_op_get_fault_in_flow(op, env); + phase_holder = axis2_phase_holder_create_with_phases(env, phase_list); + flowname = "fault in flow"; + break; + } + case AXIS2_FAULT_OUT_FLOW: + { + axutil_array_list_t *phase_list = NULL; + + phase_list = axis2_op_get_fault_out_flow(op, env); + phase_holder = axis2_phase_holder_create_with_phases(env, phase_list); + flowname = "fault out flow"; + break; + } + } + + size = axutil_array_list_size(handler_list, env); + for(i = 0; i < size; i++) + { + axis2_handler_desc_t *metadata = NULL; + + metadata = (axis2_handler_desc_t *)axutil_array_list_get(handler_list, env, i); + if(phase_holder) + { + status = axis2_phase_holder_add_handler(phase_holder, env, metadata); + if(!status) + { + break; + } + } + } + + /* Free the locally created handler_list*/ + if(handler_list) + { + axutil_array_list_free(handler_list, env); + } + + if(phase_holder) + { + axis2_phase_holder_free(phase_holder, env); + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, + "Exit:axis2_phase_resolver_build_execution_chains_for_op"); + + return status; +} + +/** + * For module operation build execution chains. This is called by axis2_svc_add_module_ops() function. + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_resolver_build_execution_chains_for_module_op( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + axis2_op_t * op) +{ + int i = 0; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, + "Entry:axis2_phase_resolver_build_execution_chains_for_module_op"); + AXIS2_PARAM_CHECK(env->error, op, AXIS2_FAILURE); + + for(i = 1; i < 5; i++) + { + status = axis2_phase_resolver_build_execution_chains_for_op(phase_resolver, env, i, op); + if(!status) + { + break; + } + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, + "Exit:axis2_phase_resolver_build_execution_chains_for_module_op"); + return status; +} + +/** + * Take the phases for each flow from the axis2 configuration, take all the handlers of each flow + * from the module description and then each handler is added into the corresponding global phase. + * This function is called from function axis2_phase_resolver_engage_module_globally() to add + * module handlers into global phases. + */ +static axis2_status_t +axis2_phase_resolver_add_module_handlers_to_system_defined_phases( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + axis2_module_desc_t * module_desc) +{ + int type = 0; + axis2_status_t status = AXIS2_FAILURE; + axis2_phase_holder_t *phase_holder = NULL; + const axutil_qname_t *modqname = NULL; + axis2_char_t *modname = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, + "Entry:axis2_phase_resolver_add_module_handlers_to_system_defined_phases"); + + modqname = axis2_module_desc_get_qname(module_desc, env); + modname = axutil_qname_get_localpart(modqname, env); + for(type = 1; type < 5; type++) + { + axis2_flow_t *flow = NULL; + axis2_char_t *flow_name = NULL; + + switch(type) + { + case AXIS2_IN_FLOW: + { + axutil_array_list_t *phase_list = NULL; + + phase_list = axis2_conf_get_in_phases_upto_and_including_post_dispatch( + phase_resolver->axis2_config, env); + phase_holder = axis2_phase_holder_create_with_phases(env, phase_list); + if(!phase_holder) + continue; + break; + } + case AXIS2_OUT_FLOW: + { + axutil_array_list_t *phase_list = NULL; + + phase_list = axis2_conf_get_out_flow(phase_resolver->axis2_config, env); + phase_holder = axis2_phase_holder_create_with_phases(env, phase_list); + if(!phase_holder) + continue; + break; + } + case AXIS2_FAULT_IN_FLOW: + { + axutil_array_list_t *phase_list = NULL; + + phase_list = axis2_conf_get_in_fault_flow(phase_resolver-> axis2_config, env); + phase_holder = axis2_phase_holder_create_with_phases(env, phase_list); + if(!phase_holder) + continue; + break; + } + case AXIS2_FAULT_OUT_FLOW: + { + axutil_array_list_t *phase_list = NULL; + + phase_list = axis2_conf_get_out_fault_flow(phase_resolver-> axis2_config, env); + phase_holder = axis2_phase_holder_create_with_phases(env, phase_list); + if(!phase_holder) + continue; + break; + } + } + + /* Modules referred by axis2.xml */ + switch(type) + { + case AXIS2_IN_FLOW: + { + flow = axis2_module_desc_get_in_flow(module_desc, env); + flow_name = "in flow"; + break; + } + case AXIS2_OUT_FLOW: + { + flow = axis2_module_desc_get_out_flow(module_desc, env); + flow_name = "out flow"; + break; + } + case AXIS2_FAULT_IN_FLOW: + { + flow = axis2_module_desc_get_fault_in_flow(module_desc, env); + flow_name = "fault in flow"; + break; + } + case AXIS2_FAULT_OUT_FLOW: + { + flow = axis2_module_desc_get_fault_out_flow(module_desc, env); + flow_name = "fault out flow"; + break; + } + } + if(flow) + { + int j = 0; + for(j = 0; j < axis2_flow_get_handler_count(flow, env); j++) + { + axis2_handler_desc_t *metadata = NULL; + const axis2_char_t *phase_name = NULL; + axis2_phase_rule_t *phase_rule = NULL; + const axutil_string_t *handlersname = NULL; + const axis2_char_t *handlername = NULL; + + metadata = axis2_flow_get_handler(flow, env, j); + handlersname = axis2_handler_desc_get_name(metadata, env); + handlername = axutil_string_get_buffer(handlersname, env); + phase_rule = axis2_handler_desc_get_rules(metadata, env); + if(phase_rule) + { + phase_name = axis2_phase_rule_get_name(phase_rule, env); + } + if(!phase_name) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Phase rules for handler %s has no name", handlername); + return AXIS2_FAILURE; + } + if((!axutil_strcmp(AXIS2_PHASE_TRANSPORT_IN, phase_name)) || (!axutil_strcmp( + AXIS2_PHASE_DISPATCH, phase_name)) || (!axutil_strcmp( + AXIS2_PHASE_POST_DISPATCH, phase_name)) || (!axutil_strcmp( + AXIS2_PHASE_PRE_DISPATCH, phase_name))) + { + /* If a global phase add the module handler*/ + status = axis2_phase_holder_add_handler(phase_holder, env, metadata); + if(!status) + { + axis2_phase_holder_free(phase_holder, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding handler %s of module %s to phase %s of " + "flow %s failed", handlername, modname, phase_name, flow_name); + return status; + } + } + } + } + if(phase_holder) + { + axis2_phase_holder_free(phase_holder, env); + } + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, + "Exit:axis2_phase_resolver_add_module_handlers_to_system_defined_phases"); + return AXIS2_SUCCESS; +} + +/** + * For each operation of the service first check whether module is already engaged to operation. + * If not take each operations flows and add the module handlers into them appropriately. This + * function is called from function axis2_phase_resolver_engage_module_globally() to add handlers + * from module into each services all operations. + */ +static axis2_status_t +axis2_phase_resolver_add_module_handlers_to_user_defined_phases( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + axis2_svc_t * svc, + axis2_module_desc_t * module_desc) +{ + axutil_hash_t *ops = NULL; + axis2_bool_t engaged = AXIS2_FALSE; + axutil_hash_index_t *index_i = NULL; + int type = 0; + axis2_status_t status = AXIS2_FAILURE; + axis2_phase_holder_t *phase_holder = NULL; + const axis2_char_t *svc_name = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, + "Entry:axis2_phase_resolver_add_module_handlers_to_user_defined_phases"); + + AXIS2_PARAM_CHECK(env->error, svc, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, module_desc, AXIS2_FAILURE); + svc_name = axis2_svc_get_name(svc, env); + ops = axis2_svc_get_all_ops(svc, env); + if(!ops) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No operations for the service %s", svc_name); + return AXIS2_FAILURE; + } + + for(index_i = axutil_hash_first(ops, env); index_i; index_i = axutil_hash_next(env, index_i)) + { + void *v = NULL; + axis2_op_t *op_desc = NULL; + int j = 0; + axutil_array_list_t *modules = NULL; + axis2_flow_t *flow = NULL; + axis2_char_t *flowname = NULL; + const axutil_qname_t *module_desc_qname = NULL; + axis2_char_t *module_desc_name = NULL; + int size = 0; + axis2_char_t *op_name = NULL; + + axutil_hash_this(index_i, NULL, NULL, &v); + op_desc = (axis2_op_t *)v; + op_name = axutil_qname_get_localpart(axis2_op_get_qname(op_desc, env), env); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Operation name is : %s", op_name); + + /* Get all modules engaged to the operation */ + modules = axis2_op_get_all_modules(op_desc, env); + module_desc_qname = axis2_module_desc_get_qname(module_desc, env); + module_desc_name = axutil_qname_get_localpart(module_desc_qname, env); + if(modules) + { + size = axutil_array_list_size(modules, env); + } + + /* Checking whether module is already engaged to operation */ + for(j = 0; j < size; j++) + { + axis2_module_desc_t *module_desc_l = NULL; + const axutil_qname_t *module_desc_qname_l = NULL; + + module_desc_l = (axis2_module_desc_t *)axutil_array_list_get(modules, env, j); + + module_desc_qname_l = axis2_module_desc_get_qname(module_desc_l, env); + if(axutil_qname_equals(module_desc_qname_l, env, module_desc_qname)) + { + engaged = AXIS2_TRUE; + break; + } + } + + if(engaged) + { + continue; + } + + for(type = 1; type < 5; type++) + { + switch(type) + { + case AXIS2_IN_FLOW: + { + axutil_array_list_t *phase_list = NULL; + + phase_list = axis2_op_get_in_flow(op_desc, env); + phase_holder = axis2_phase_holder_create_with_phases(env, phase_list); + break; + } + case AXIS2_OUT_FLOW: + { + axutil_array_list_t *phase_list = NULL; + + phase_list = axis2_op_get_out_flow(op_desc, env); + phase_holder = axis2_phase_holder_create_with_phases(env, phase_list); + break; + } + case AXIS2_FAULT_IN_FLOW: + { + axutil_array_list_t *phase_list = NULL; + + phase_list = axis2_op_get_fault_in_flow(op_desc, env); + phase_holder = axis2_phase_holder_create_with_phases(env, phase_list); + break; + } + case AXIS2_FAULT_OUT_FLOW: + { + axutil_array_list_t *phase_list = NULL; + + phase_list = axis2_op_get_fault_out_flow(op_desc, env); + phase_holder = axis2_phase_holder_create_with_phases(env, phase_list); + break; + } + } + + /* Process modules referred by axis2.xml */ + + switch(type) + { + case AXIS2_IN_FLOW: + { + flow = axis2_module_desc_get_in_flow(module_desc, env); + flowname = "in flow"; + break; + } + case AXIS2_OUT_FLOW: + { + flow = axis2_module_desc_get_out_flow(module_desc, env); + flowname = "out flow"; + break; + } + case AXIS2_FAULT_IN_FLOW: + { + flow = axis2_module_desc_get_fault_in_flow(module_desc, env); + flowname = "fault in flow"; + break; + } + case AXIS2_FAULT_OUT_FLOW: + { + flow = axis2_module_desc_get_fault_out_flow(module_desc, env); + flowname = "fault out flow"; + break; + } + } + + if(flow) + { + int handler_count = 0; + + handler_count = axis2_flow_get_handler_count(flow, env); + for(j = 0; j < handler_count; j++) + { + axis2_handler_desc_t *metadata = NULL; + const axis2_char_t *phase_name = NULL; + axis2_phase_rule_t *phase_rule = NULL; + const axutil_string_t *handlersname = NULL; + const axis2_char_t *handlername = NULL; + + metadata = axis2_flow_get_handler(flow, env, j); + handlersname = axis2_handler_desc_get_name(metadata, env); + handlername = axutil_string_get_buffer(handlersname, env); + phase_rule = axis2_handler_desc_get_rules(metadata, env); + if(phase_rule) + { + phase_name = axis2_phase_rule_get_name(phase_rule, env); + } + if(!phase_name) + { + AXIS2_LOG_ERROR( + env->log, + AXIS2_LOG_SI, + "Handler rules for the handler description %s within flow %s has no name", + handlername, flowname); + + return AXIS2_FAILURE; + } + + /* If phase is not a system defined phase, add module handler to it */ + if((axutil_strcmp(AXIS2_PHASE_TRANSPORT_IN, phase_name)) && (axutil_strcmp( + AXIS2_PHASE_DISPATCH, phase_name)) && (axutil_strcmp( + AXIS2_PHASE_POST_DISPATCH, phase_name)) && (axutil_strcmp( + AXIS2_PHASE_PRE_DISPATCH, phase_name))) + { + if(phase_holder) + { + status = axis2_phase_holder_add_handler(phase_holder, env, metadata); + if(!status) + { + axis2_phase_holder_free(phase_holder, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Adding handler desc %s to" + "phase %s within flow %s failed", handlername, phase_name, + flowname); + + return status; + } + } + } + } + } + + if(phase_holder) + { + axis2_phase_holder_free(phase_holder, env); + } + } + status = axis2_op_add_to_engaged_module_list(op_desc, env, module_desc); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Adding module description %s to engaged " + "module list of operation %s failed", module_desc_name, op_name); + + return status; + } + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, + "Exit:axis2_phase_resolver_add_module_handlers_to_user_defined_phases"); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_resolver_disengage_module_from_svc( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + axis2_svc_t * svc, + axis2_module_desc_t * module_desc) +{ + axutil_hash_t *ops = NULL; + axutil_hash_index_t *index_i = NULL; + axis2_status_t status = AXIS2_FAILURE; + const axutil_qname_t *module_d_qname = NULL; + const axis2_char_t *svc_name = axis2_svc_get_name(svc, env); + axis2_char_t *modname_d = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_phase_resolver_disengage_module_from_svc"); + + ops = axis2_svc_get_all_ops(svc, env); + if(!ops) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service %s has no operation", svc_name); + return AXIS2_FAILURE; + } + + module_d_qname = axis2_module_desc_get_qname(module_desc, env); + modname_d = axutil_qname_get_localpart(module_d_qname, env); + for(index_i = axutil_hash_first(ops, env); index_i; index_i = axutil_hash_next(env, index_i)) + { + axutil_array_list_t *modules = NULL; + axis2_op_t *op_desc = NULL; + int size = 0; + int j = 0; + void *v = NULL; + axis2_bool_t engaged = AXIS2_FALSE; + const axutil_qname_t *opqname = NULL; + axis2_char_t *opname = NULL; + + axutil_hash_this(index_i, NULL, NULL, &v); + op_desc = (axis2_op_t *)v; + opqname = axis2_op_get_qname(op_desc, env); + opname = axutil_qname_get_localpart(opqname, env); + modules = axis2_op_get_all_modules(op_desc, env); + if(modules) + { + size = axutil_array_list_size(modules, env); + } + for(j = 0; j < size; j++) + { + axis2_module_desc_t *module_desc_l = NULL; + const axutil_qname_t *module_d_qname_l = NULL; + + module_desc_l = axutil_array_list_get(modules, env, j); + module_d_qname_l = axis2_module_desc_get_qname(module_desc_l, env); + if(axutil_qname_equals(module_d_qname, env, module_d_qname_l)) + { + engaged = AXIS2_TRUE; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Module %s already engaged.", modname_d); + break; + } + } + + if(engaged) + { + status = axis2_phase_resolver_disengage_module_from_op(phase_resolver, env, op_desc, + module_desc); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Disengaging module %s from operation %s failed", modname_d, opname); + return status; + } + + status = axis2_op_remove_from_engaged_module_list(op_desc, env, module_desc); + } + + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_phase_resolver_disengage_module_from_svc"); + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_resolver_disengage_module_from_op( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + axis2_op_t * axis_op, + axis2_module_desc_t * module_desc) +{ + int type = 0; + axis2_phase_holder_t *phase_holder = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_phase_resolver_disengage_module_from_op"); + AXIS2_PARAM_CHECK(env->error, axis_op, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, module_desc, AXIS2_FAILURE); + + for(type = 1; type < 5; type++) + { + axis2_flow_t *flow = NULL; + axis2_char_t *flowname = NULL; + axutil_array_list_t *phases = NULL; + + switch(type) + { + case AXIS2_IN_FLOW: + { + phases = axis2_op_get_in_flow(axis_op, env); + break; + } + case AXIS2_OUT_FLOW: + { + phases = axis2_op_get_out_flow(axis_op, env); + break; + } + case AXIS2_FAULT_IN_FLOW: + { + phases = axis2_op_get_fault_in_flow(axis_op, env); + break; + } + case AXIS2_FAULT_OUT_FLOW: + { + phases = axis2_op_get_fault_out_flow(axis_op, env); + break; + } + } + + if(phases) + { + phase_holder = axis2_phase_holder_create_with_phases(env, phases); + } + + switch(type) + { + case AXIS2_IN_FLOW: + { + flow = axis2_module_desc_get_in_flow(module_desc, env); + flowname = "in flow"; + break; + } + case AXIS2_OUT_FLOW: + { + flow = axis2_module_desc_get_out_flow(module_desc, env); + flowname = "out flow"; + break; + } + case AXIS2_FAULT_IN_FLOW: + { + flow = axis2_module_desc_get_fault_in_flow(module_desc, env); + flowname = "fault in flow"; + break; + } + case AXIS2_FAULT_OUT_FLOW: + { + flow = axis2_module_desc_get_fault_out_flow(module_desc, env); + flowname = "fault out flow"; + break; + } + } + + if(flow && phase_holder) + { + int j = 0; + int handler_count = 0; + + handler_count = axis2_flow_get_handler_count(flow, env); + for(j = 0; j < handler_count; j++) + { + axis2_handler_desc_t *metadata = NULL; + const axis2_char_t *phase_name = NULL; + axis2_phase_rule_t *phase_rule = NULL; + const axutil_string_t *handlersname = NULL; + const axis2_char_t *handlername = NULL; + axis2_status_t status = AXIS2_FAILURE; + + metadata = axis2_flow_get_handler(flow, env, j); + handlersname = axis2_handler_desc_get_name(metadata, env); + handlername = axutil_string_get_buffer(handlersname, env); + phase_rule = axis2_handler_desc_get_rules(metadata, env); + phase_name = axis2_phase_rule_get_name(phase_rule, env); + if((axutil_strcmp(AXIS2_PHASE_TRANSPORT_IN, phase_name)) && (axutil_strcmp( + AXIS2_PHASE_DISPATCH, phase_name)) && (axutil_strcmp(AXIS2_PHASE_POST_DISPATCH, + phase_name)) && (axutil_strcmp(AXIS2_PHASE_PRE_DISPATCH, phase_name))) + { + status = axis2_phase_holder_remove_handler(phase_holder, env, metadata); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Handler %s Removal failed for %s phase within flow %s", handlername, + phase_name, flowname); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, ""); + axis2_phase_holder_free(phase_holder, env); + return status; + } + + } + if((!axutil_strcmp(AXIS2_PHASE_TRANSPORT_IN, phase_name)) || (!axutil_strcmp( + AXIS2_PHASE_DISPATCH, phase_name)) || (!axutil_strcmp( + AXIS2_PHASE_POST_DISPATCH, phase_name)) || (!axutil_strcmp( + AXIS2_PHASE_PRE_DISPATCH, phase_name))) + { + axutil_array_list_t *phase_list = NULL; + axis2_phase_holder_t *phase_holder = NULL; + + phase_list = axis2_conf_get_in_phases_upto_and_including_post_dispatch( + phase_resolver->axis2_config, env); + if(phase_holder) + { + axis2_phase_holder_free(phase_holder, env); + phase_holder = NULL; + } + phase_holder = axis2_phase_holder_create_with_phases(env, phase_list); + + status = axis2_phase_holder_remove_handler(phase_holder, env, metadata); + axis2_phase_holder_free(phase_holder, env); + phase_holder = NULL; + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Removing handler %s from phase %s within flow %s failed", handlername, + phase_name, flowname); + return status; + } + } + } + } + + if(phase_holder) + { + axis2_phase_holder_free(phase_holder, env); + phase_holder = NULL; + } + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_phase_resolver_disengage_module_from_op"); + return AXIS2_SUCCESS; +} + +/* This function is deprecated and no longer used */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_phase_resolver_build_transport_chains( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env) +{ + axis2_transport_in_desc_t **transports_in = NULL; + axis2_transport_out_desc_t **transports_out = NULL; + int index_i = 0; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_phase_resolver_build_transport_chains"); + + transports_in = axis2_conf_get_all_in_transports(phase_resolver->axis2_config, env); + if(!transports_in) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_TRANSPORT_IN_CONFIGURED, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No transport in descriptions configured"); + return AXIS2_SUCCESS; + } + + transports_out = axis2_conf_get_all_out_transports(phase_resolver->axis2_config, env); + if(!transports_out) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_TRANSPORT_OUT_CONFIGURED, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No transport out descriptions configured"); + return AXIS2_SUCCESS; + } + + for(index_i = 0; index_i < AXIS2_TRANSPORT_ENUM_MAX; index_i++) + { + if(transports_in[index_i]) + { + status = axis2_phase_resolver_build_in_transport_chains(phase_resolver, env, + transports_in[index_i]); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Building transport in chains failed"); + return status; + } + } + } + + for(index_i = 0; index_i < AXIS2_TRANSPORT_ENUM_MAX; index_i++) + { + if(transports_out[index_i]) + { + status = axis2_phase_resolver_build_out_transport_chains(phase_resolver, env, + transports_out[index_i]); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Building transport out chains failed"); + return status; + } + } + } + + /* If transport in or transport out maps are not null but still they don't + * have chains configured then we return success, because there are no + * chains to process. + */ + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_phase_resolver_build_transport_chains"); + return AXIS2_SUCCESS; +} + +/** + * This function is called from function + * axis2_phase_resolver_build_transport_chains(). + * This function is deprecated and no longer used. + */ +static axis2_status_t +axis2_phase_resolver_build_in_transport_chains( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + axis2_transport_in_desc_t * transport) +{ + int type = 0; + int j = 0; + axis2_status_t status = AXIS2_FAILURE; + axutil_array_list_t *handlers = NULL; + AXIS2_TRANSPORT_ENUMS transport_enum = axis2_transport_in_desc_get_enum(transport, env); + ; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_phase_resolver_build_in_transport_chains"); + AXIS2_PARAM_CHECK(env->error, transport, AXIS2_FAILURE); + + for(type = 1; type < 4; type++) + { + axis2_flow_t *flow = NULL; + axis2_char_t *flowname = NULL; + axis2_phase_t *phase = NULL; + + switch(type) + { + case AXIS2_IN_FLOW: + { + flow = axis2_transport_in_desc_get_in_flow(transport, env); + phase = axis2_transport_in_desc_get_in_phase(transport, env); + flowname = "in flow"; + break; + } + case AXIS2_FAULT_IN_FLOW: + { + flow = axis2_transport_in_desc_get_fault_in_flow(transport, env); + phase = axis2_transport_in_desc_get_fault_phase(transport, env); + flowname = "fault in flow"; + break; + } + } + if(flow) + { + axis2_phase_holder_t *phase_holder = NULL; + int size = 0; + + size = axis2_flow_get_handler_count(flow, env); + handlers = axutil_array_list_create(env, 0); + for(j = 0; j < size; j++) + { + axis2_handler_desc_t *metadata = NULL; + axis2_phase_rule_t *rule = NULL; + const axis2_char_t *handlername = NULL; + const axutil_string_t *handlersname = NULL; + + metadata = axis2_flow_get_handler(flow, env, j); + handlersname = axis2_handler_desc_get_name(metadata, env); + handlername = axutil_string_get_buffer(handlersname, env); + rule = axis2_handler_desc_get_rules(metadata, env); + if(rule) + { + status = axis2_phase_rule_set_name(rule, env, AXIS2_TRANSPORT_PHASE); + } + if(AXIS2_SUCCESS != status) + { + if(handlers) + { + axis2_handler_desc_t *handler_d = NULL; + int i = 0; + int size = 0; + + size = axutil_array_list_size(handlers, env); + for(i = 0; i < size; i++) + { + handler_d = axutil_array_list_get(handlers, env, i); + axis2_handler_desc_free(handler_d, env); + } + axutil_array_list_free(handlers, env); + } + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting name %s to phase rules for handler %s failed" + "for in transport %d within flow %s", AXIS2_TRANSPORT_PHASE, + handlername, transport_enum, flowname); + return status; + } + status = axutil_array_list_add(handlers, env, metadata); + if(AXIS2_SUCCESS != status) + { + if(handlers) + { + axis2_handler_desc_t *handler_d = NULL; + int i = 0; + int size = 0; + + size = axutil_array_list_size(handlers, env); + for(i = 0; i < size; i++) + { + handler_d = axutil_array_list_get(handlers, env, i); + axis2_handler_desc_free(handler_d, env); + } + axutil_array_list_free(handlers, env); + } + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding handler %s from in transport %d to handler " + "list failed within flow %s", handlername, transport_enum, flowname); + return status; + } + } + phase_holder = axis2_phase_holder_create(env); + if(!phase_holder) + { + if(handlers) + { + axis2_handler_desc_t *handler_d = NULL; + int i = 0; + int size = 0; + + size = axutil_array_list_size(handlers, env); + for(i = 0; i < size; i++) + { + handler_d = axutil_array_list_get(handlers, env, i); + axis2_handler_desc_free(handler_d, env); + } + axutil_array_list_free(handlers, env); + } + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return AXIS2_FAILURE; + } + + status = axis2_phase_holder_build_transport_handler_chain(phase_holder, env, phase, + handlers); + if(phase_holder) + { + axis2_phase_holder_free(phase_holder, env); + } + } + else + { + /* Do nothing */ + } + } + if(handlers) + { + axutil_array_list_free(handlers, env); + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_phase_resolver_build_in_transport_chains"); + return status; +} + +/** + * This function is called from function + * axis2_phase_resolver_build_transport_chains(). + * This is deprecated and no longer used. + */ +static axis2_status_t +axis2_phase_resolver_build_out_transport_chains( + axis2_phase_resolver_t * phase_resolver, + const axutil_env_t * env, + axis2_transport_out_desc_t * transport) +{ + int type = 0; + axis2_status_t status = AXIS2_FAILURE; + axutil_array_list_t *handlers = NULL; + AXIS2_TRANSPORT_ENUMS transport_enum = axis2_transport_out_desc_get_enum(transport, env); + ; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_phase_resolver_build_out_transport_chains"); + AXIS2_PARAM_CHECK(env->error, transport, AXIS2_FAILURE); + for(type = 1; type < 5; type++) + { + axis2_flow_t *flow = NULL; + axis2_char_t *flowname = NULL; + axis2_phase_t *phase = NULL; + + switch(type) + { + case AXIS2_OUT_FLOW: + { + flow = axis2_transport_out_desc_get_out_flow(transport, env); + phase = axis2_transport_out_desc_get_out_phase(transport, env); + flowname = "out flow"; + break; + } + case AXIS2_FAULT_OUT_FLOW: + { + flow = axis2_transport_out_desc_get_fault_out_flow(transport, env); + phase = axis2_transport_out_desc_get_fault_phase(transport, env); + flowname = "fault out flow"; + break; + } + } + + if(flow) + { + axis2_phase_holder_t *phase_holder = NULL; + int hndlr_count = 0; + int j = 0; + hndlr_count = axis2_flow_get_handler_count(flow, env); + if(AXIS2_SUCCESS != AXIS2_ERROR_GET_STATUS_CODE(env->error)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, ""); + return AXIS2_ERROR_GET_STATUS_CODE(env->error); + } + handlers = axutil_array_list_create(env, 0); + + for(j = 0; j < hndlr_count; j++) + { + axis2_handler_desc_t *metadata = NULL; + axis2_phase_rule_t *rule = NULL; + const axis2_char_t *handlername = NULL; + const axutil_string_t *handlersname = NULL; + + metadata = axis2_flow_get_handler(flow, env, j); + handlersname = axis2_handler_desc_get_name(metadata, env); + handlername = axutil_string_get_buffer(handlersname, env); + + rule = axis2_handler_desc_get_rules(metadata, env); + if(rule) + { + status = axis2_phase_rule_set_name(rule, env, AXIS2_TRANSPORT_PHASE); + } + if(AXIS2_SUCCESS != status) + { + if(handlers) + { + axis2_handler_desc_t *handler_d = NULL; + int i = 0; + int size = 0; + + size = axutil_array_list_size(handlers, env); + for(i = 0; i < size; i++) + { + handler_d = axutil_array_list_get(handlers, env, i); + axis2_handler_desc_free(handler_d, env); + } + axutil_array_list_free(handlers, env); + } + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Setting name %s to phase rules for handler %s failed" + "for out transport %d within flow %s", AXIS2_TRANSPORT_PHASE, + handlername, transport_enum, flowname); + return status; + } + + status = axutil_array_list_add(handlers, env, metadata); + if(AXIS2_FAILURE == status) + { + if(handlers) + { + axis2_handler_desc_t *handler_d = NULL; + int i = 0; + int size = 0; + + size = axutil_array_list_size(handlers, env); + for(i = 0; i < size; i++) + { + handler_d = axutil_array_list_get(handlers, env, i); + axis2_handler_desc_free(handler_d, env); + } + axutil_array_list_free(handlers, env); + } + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding handler %s from out transport %d to handler " + "list failed within flow %s", handlername, transport_enum, flowname); + return status; + } + } + phase_holder = axis2_phase_holder_create(env); + if(!phase_holder) + { + if(handlers) + { + axis2_handler_desc_t *handler_d = NULL; + int i = 0; + int size = 0; + + size = axutil_array_list_size(handlers, env); + for(i = 0; i < size; i++) + { + handler_d = axutil_array_list_get(handlers, env, i); + axis2_handler_desc_free(handler_d, env); + } + axutil_array_list_free(handlers, env); + } + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory"); + return AXIS2_FAILURE; + } + + status = axis2_phase_holder_build_transport_handler_chain(phase_holder, env, phase, + handlers); + if(phase_holder) + { + axis2_phase_holder_free(phase_holder, env); + } + } + else + { + /* Do nothing */ + } + } + if(handlers) + { + axutil_array_list_free(handlers, env); + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_phase_resolver_build_out_transport_chains"); + return status; +} + +/** + * This function is called from axis2_phase_resolver_build_execution_chains_for_op() function. + */ +static axis2_status_t +axis2_phase_resolver_add_to_handler_list( + const axutil_env_t * env, + axutil_array_list_t *handler_list, + axis2_op_t *op, + axis2_module_desc_t * module_desc, + int type) +{ + axis2_flow_t *flow = NULL; + axis2_char_t *flowname = NULL; + const axutil_qname_t *opqname = NULL; + axis2_char_t *opname = NULL; + axis2_status_t status = AXIS2_FAILURE; + + opqname = axis2_op_get_qname(op, env); + opname = axutil_qname_get_localpart(opqname, env); + + switch(type) + { + case AXIS2_IN_FLOW: + { + flow = axis2_module_desc_get_in_flow(module_desc, env); + flowname = "in flow"; + break; + } + case AXIS2_OUT_FLOW: + { + flow = axis2_module_desc_get_out_flow(module_desc, env); + flowname = "out flow"; + break; + } + case AXIS2_FAULT_IN_FLOW: + { + flow = axis2_module_desc_get_fault_in_flow(module_desc, env); + flowname = "fault in flow"; + break; + } + case AXIS2_FAULT_OUT_FLOW: + { + flow = axis2_module_desc_get_fault_out_flow(module_desc, env); + flowname = "fault out flow"; + break; + } + } + + if(flow) + { + int j = 0; + int count = 0; + + /* Ignore all the errors upto now */ + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_SUCCESS); + + count = axis2_flow_get_handler_count(flow, env); + /*if(AXIS2_SUCCESS != AXIS2_ERROR_GET_STATUS_CODE(env->error)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Getting hanlder count for the flow %s failed", + flowname); + + return AXIS2_ERROR_GET_STATUS_CODE(env->error); + }*/ + + for(j = 0; j < count; j++) + { + axis2_handler_desc_t *metadata = NULL; + const axis2_char_t *phase_name = NULL; + axis2_phase_rule_t *phase_rule = NULL; + const axutil_string_t *handlername = NULL; + const axis2_char_t *handlername_buff = NULL; + + metadata = axis2_flow_get_handler(flow, env, j); + handlername = axis2_handler_desc_get_name(metadata, env); + handlername_buff = axutil_string_get_buffer(handlername, env); + phase_rule = axis2_handler_desc_get_rules(metadata, env); + phase_name = axis2_phase_rule_get_name(phase_rule, env); + if(!phase_name) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Phase rules name null for the handler description %s within flow %s", + handlername_buff, flowname); + + return AXIS2_FAILURE; + } + + /* If user defined phases */ + if((axutil_strcmp(AXIS2_PHASE_TRANSPORT_IN, phase_name)) && (axutil_strcmp( + AXIS2_PHASE_DISPATCH, phase_name)) && (axutil_strcmp(AXIS2_PHASE_POST_DISPATCH, + phase_name)) && (axutil_strcmp(AXIS2_PHASE_PRE_DISPATCH, phase_name))) + { + status = axutil_array_list_add(handler_list, env, metadata); + if(AXIS2_SUCCESS != status) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Adding handler description %s failed for phase %s within flow %s", + handlername_buff, phase_name, flowname); + + return status; + } + } + else + { + AXIS2_LOG_DEBUG( + env->log, + AXIS2_LOG_SI, + "Trying to add this handler %s to system pre defined phases , but those " + "handlers are already added to global chain which run irrespective of the service", + handlername_buff); + } + } + } + + return AXIS2_SUCCESS; +} + diff --git a/src/core/receivers/Makefile.am b/src/core/receivers/Makefile.am new file mode 100644 index 0000000..8b12372 --- /dev/null +++ b/src/core/receivers/Makefile.am @@ -0,0 +1,11 @@ +noinst_LTLIBRARIES = libaxis2_receivers.la + +libaxis2_receivers_la_SOURCES = msg_recv.c \ + raw_xml_in_out_msg_recv.c \ + svr_callback.c + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/util \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include diff --git a/src/core/receivers/msg_recv.c b/src/core/receivers/msg_recv.c new file mode 100644 index 0000000..87bcc1d --- /dev/null +++ b/src/core/receivers/msg_recv.c @@ -0,0 +1,560 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct axis2_msg_recv +{ + axis2_char_t *scope; + /** + * conf ctx is added to pass for the load_and_init_svc method + */ + axis2_conf_ctx_t *conf_ctx; + + void *derived; + + /** + * This contain in out synchronous business invoke logic + * @param msg_recv pointer to message receiver + * @param env pointer to environment struct + * @param in_msg_ctx pointer to in message context + * @param out_msg_ctx pointer to out message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + axis2_status_t + ( + AXIS2_CALL * invoke_business_logic) + ( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + struct axis2_msg_ctx * in_msg_ctx, + struct axis2_msg_ctx * out_msg_ctx); + + /** + * This method is called from axis2_engine_receive method. This method's + * actual implementation is decided from the create method of the + * extended message receiver object. There depending on the synchronous or + * asynchronous type, receive method is assigned with the synchronous or + * asynchronous implementation of receive. + * @see raw_xml_in_out_msg_recv_create method where receive is assigned + * to receive_sync + * @param msg_recv pointer to message receiver + * @param env pointer to environment struct + * @param in_msg_ctx pointer to in message context + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + axis2_status_t + ( + AXIS2_CALL * receive) + ( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + struct axis2_msg_ctx * in_msg_ctx, + void *callback_recv_param); + + axis2_status_t + ( + AXIS2_CALL *load_and_init_svc) +( axis2_msg_recv_t *msg_recv, +const axutil_env_t *env, +struct axis2_svc *svc); + +}; + +static axis2_status_t AXIS2_CALL +axis2_msg_recv_receive_impl( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + void *callback_recv_param); + +static axis2_status_t AXIS2_CALL +axis2_msg_recv_load_and_init_svc_impl( + axis2_msg_recv_t *msg_recv, + const axutil_env_t *env, + struct axis2_svc *svc) +{ + axutil_param_t *impl_info_param = NULL; + void *impl_class = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + if(!svc) + { + return AXIS2_FAILURE; + } + + impl_class = axis2_svc_get_impl_class(svc, env); + if(impl_class) + { + return AXIS2_SUCCESS; + } + /* When we load the DLL we have to make sure that only one thread will load it */ + axutil_thread_mutex_lock(axis2_svc_get_mutex(svc, env)); + /* If more than one thread tries to acquires the lock, first thread loads the DLL. + Others should not load the DLL */ + impl_class = axis2_svc_get_impl_class(svc, env); + if(impl_class) + { + axutil_thread_mutex_unlock(axis2_svc_get_mutex(svc, env)); + return AXIS2_SUCCESS; + } + impl_info_param = axis2_svc_get_param(svc, env, AXIS2_SERVICE_CLASS); + if(!impl_info_param) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_SVC, AXIS2_FAILURE); + axutil_thread_mutex_unlock(axis2_svc_get_mutex(svc, env)); + return AXIS2_FAILURE; + } + + axutil_allocator_switch_to_global_pool(env->allocator); + + axutil_class_loader_init(env); + + impl_class = axutil_class_loader_create_dll(env, impl_info_param); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "loading the services from msg_recv_load_and_init_svc"); + + if(impl_class) + { + axis2_conf_t *conf = NULL; + conf = axis2_conf_ctx_get_conf(msg_recv->conf_ctx, env); + AXIS2_SVC_SKELETON_INIT((axis2_svc_skeleton_t *)impl_class, env); + } + + axis2_svc_set_impl_class(svc, env, impl_class); + + axutil_allocator_switch_to_local_pool(env->allocator); + axutil_thread_mutex_unlock(axis2_svc_get_mutex(svc, env)); + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT axis2_msg_recv_t *AXIS2_CALL +axis2_msg_recv_create( + const axutil_env_t * env) +{ + axis2_msg_recv_t *msg_recv = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + msg_recv = (axis2_msg_recv_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_msg_recv_t)); + + if(!msg_recv) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + msg_recv->conf_ctx = NULL; + msg_recv->scope = axutil_strdup(env, "app*"); + msg_recv->derived = NULL; + msg_recv->load_and_init_svc = axis2_msg_recv_load_and_init_svc_impl; + msg_recv->receive = axis2_msg_recv_receive_impl; + return msg_recv; +} + +AXIS2_EXPORT void AXIS2_CALL +axis2_msg_recv_free( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(msg_recv->scope) + { + AXIS2_FREE(env->allocator, msg_recv->scope); + } + + if(msg_recv) + { + AXIS2_FREE(env->allocator, msg_recv); + } + + return; +} + +AXIS2_EXPORT axis2_svc_skeleton_t *AXIS2_CALL +axis2_msg_recv_make_new_svc_obj( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx) +{ + struct axis2_svc *svc = NULL; + struct axis2_op_ctx *op_ctx = NULL; + struct axis2_svc_ctx *svc_ctx = NULL; + axutil_param_t *impl_info_param = NULL; + void *impl_class = NULL; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + svc_ctx = axis2_op_ctx_get_parent(op_ctx, env); + svc = axis2_svc_ctx_get_svc(svc_ctx, env); + if(!svc) + { + return NULL; + } + + impl_class = axis2_svc_get_impl_class(svc, env); + if(impl_class) + { + return impl_class; + } + else + { + /* When we load the DLL we have to make sure that only one thread will load it */ + axutil_thread_mutex_lock(axis2_svc_get_mutex(svc, env)); + /* If more than one thread tries to acquires the lock, first thread loads the DLL. + Others should not load the DLL */ + impl_class = axis2_svc_get_impl_class(svc, env); + if(impl_class) + { + axutil_thread_mutex_unlock(axis2_svc_get_mutex(svc, env)); + return impl_class; + } + impl_info_param = axis2_svc_get_param(svc, env, AXIS2_SERVICE_CLASS); + if(!impl_info_param) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_SVC, AXIS2_FAILURE); + axutil_thread_mutex_unlock(axis2_svc_get_mutex(svc, env)); + return NULL; + } + + axutil_allocator_switch_to_global_pool(env->allocator); + + axutil_class_loader_init(env); + + impl_class = axutil_class_loader_create_dll(env, impl_info_param); + + if(impl_class) + { + AXIS2_SVC_SKELETON_INIT((axis2_svc_skeleton_t *)impl_class, env); + } + + axis2_svc_set_impl_class(svc, env, impl_class); + + axutil_allocator_switch_to_local_pool(env->allocator); + axutil_thread_mutex_unlock(axis2_svc_get_mutex(svc, env)); + return impl_class; + } +} + +/*AXIS2_EXPORT axis2_svc_skeleton_t *AXIS2_CALL +axis2_msg_recv_get_impl_obj( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx) +{ + struct axis2_svc *svc = NULL; + struct axis2_op_ctx *op_ctx = NULL; + struct axis2_svc_ctx *svc_ctx = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + svc_ctx = axis2_op_ctx_get_parent(op_ctx, env); + svc = axis2_svc_ctx_get_svc(svc_ctx, env); + if(!svc) + { + return NULL; + } + + return axis2_msg_recv_make_new_svc_obj(msg_recv, env, msg_ctx); +}*/ + +AXIS2_EXPORT axis2_status_t AXIS2_CALL +axis2_msg_recv_set_scope( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + const axis2_char_t * scope) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, scope, AXIS2_FAILURE); + + if(msg_recv->scope) + { + AXIS2_FREE(env->allocator, msg_recv->scope); + } + msg_recv->scope = axutil_strdup(env, scope); + if(!msg_recv->scope) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT axis2_char_t *AXIS2_CALL +axis2_msg_recv_get_scope( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env) +{ + return msg_recv->scope; +} + +AXIS2_EXPORT axis2_status_t AXIS2_CALL +axis2_msg_recv_delete_svc_obj( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_svc_t *svc = NULL; + axis2_op_ctx_t *op_ctx = NULL; + axis2_svc_ctx_t *svc_ctx = NULL; + axutil_param_t *impl_info_param = NULL; + axutil_param_t *scope_param = NULL; + axis2_char_t *param_value = NULL; + axutil_dll_desc_t *dll_desc = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + svc_ctx = axis2_op_ctx_get_parent(op_ctx, env); + svc = axis2_svc_ctx_get_svc(svc_ctx, env); + if(!svc) + { + return AXIS2_FAILURE; + } + + scope_param = axis2_svc_get_param(svc, env, AXIS2_SCOPE); + if(scope_param) + { + param_value = axutil_param_get_value(scope_param, env); + } + if(param_value && (0 == axutil_strcmp(AXIS2_APPLICATION_SCOPE, param_value))) + { + return AXIS2_SUCCESS; + } + + impl_info_param = axis2_svc_get_param(svc, env, AXIS2_SERVICE_CLASS); + if(!impl_info_param) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_SVC, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + dll_desc = axutil_param_get_value(impl_info_param, env); + return axutil_class_loader_delete_dll(env, dll_desc); +} + +static axis2_status_t AXIS2_CALL +axis2_msg_recv_receive_impl( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + void *callback_recv_param) +{ + axis2_msg_ctx_t *out_msg_ctx = NULL; + axis2_engine_t *engine = NULL; + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_op_ctx_t *op_ctx = NULL; + axis2_svc_ctx_t *svc_ctx = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[axis2]Entry:axis2_msg_recv_receive_impl"); + out_msg_ctx = axis2_core_utils_create_out_msg_ctx(env, msg_ctx); + if(!out_msg_ctx) + { + return AXIS2_FAILURE; + } + op_ctx = axis2_msg_ctx_get_op_ctx(out_msg_ctx, env); + if(!op_ctx) + { + axis2_core_utils_reset_out_msg_ctx(env, out_msg_ctx); + axis2_msg_ctx_free(out_msg_ctx, env); + return AXIS2_FAILURE; + } + + status = axis2_op_ctx_add_msg_ctx(op_ctx, env, out_msg_ctx); + if(!status) + { + axis2_core_utils_reset_out_msg_ctx(env, out_msg_ctx); + axis2_msg_ctx_free(out_msg_ctx, env); + return status; + } + status = axis2_op_ctx_add_msg_ctx(op_ctx, env, msg_ctx); + + if(!status) + { + return status; + } + + status = axis2_msg_recv_invoke_business_logic(msg_recv, env, msg_ctx, out_msg_ctx); + if(AXIS2_SUCCESS != status) + { + axis2_core_utils_reset_out_msg_ctx(env, out_msg_ctx); + axis2_msg_ctx_free(out_msg_ctx, env); + return status; + } + svc_ctx = axis2_op_ctx_get_parent(op_ctx, env); + conf_ctx = axis2_svc_ctx_get_conf_ctx(svc_ctx, env); + engine = axis2_engine_create(env, conf_ctx); + if(!engine) + { + axis2_msg_ctx_free(out_msg_ctx, env); + return AXIS2_FAILURE; + } + if(axis2_msg_ctx_get_soap_envelope(out_msg_ctx, env)) + { + axiom_soap_envelope_t *soap_envelope = axis2_msg_ctx_get_soap_envelope(out_msg_ctx, env); + if(soap_envelope) + { + axiom_soap_body_t *body = axiom_soap_envelope_get_body(soap_envelope, env); + if(body) + { + /* in case of a SOAP fault, we got to return failure so that + transport gets to know that it should send 500 */ + if(axiom_soap_body_has_fault(body, env)) + { + status = AXIS2_FAILURE; + axis2_msg_ctx_set_fault_soap_envelope(msg_ctx, env, soap_envelope); + axis2_msg_ctx_set_soap_envelope(out_msg_ctx, env, NULL); + } + else + { + /* if it is two way and not a fault then send through engine. + if it is one way we do not need to do an engine send */ + status = axis2_engine_send(engine, env, out_msg_ctx); + } + } + } + } + axis2_engine_free(engine, env); + + /* Reset the out message context to avoid double freeing at http worker. For example if this is + * not done here both in and out message context will try to free the transport out stream + * which will result in memory corruption. + */ + if(!axis2_msg_ctx_is_paused(out_msg_ctx, env) && !axis2_msg_ctx_is_keep_alive(out_msg_ctx, env)) + { + axis2_core_utils_reset_out_msg_ctx(env, out_msg_ctx); + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[axis2]Exit:axis2_msg_recv_receive_impl"); + return status; +} + +AXIS2_EXPORT axis2_status_t AXIS2_CALL +axis2_msg_recv_set_invoke_business_logic( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + AXIS2_MSG_RECV_INVOKE_BUSINESS_LOGIC func) +{ + msg_recv->invoke_business_logic = func; + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT axis2_status_t AXIS2_CALL +axis2_msg_recv_invoke_business_logic( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + struct axis2_msg_ctx * in_msg_ctx, + struct axis2_msg_ctx * out_msg_ctx) +{ + return msg_recv->invoke_business_logic(msg_recv, env, in_msg_ctx, out_msg_ctx); +} + +AXIS2_EXPORT axis2_status_t AXIS2_CALL +axis2_msg_recv_set_derived( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + void *derived) +{ + msg_recv->derived = derived; + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT void *AXIS2_CALL +axis2_msg_recv_get_derived( + const axis2_msg_recv_t * msg_recv, + const axutil_env_t * env) +{ + return msg_recv->derived; +} + +AXIS2_EXPORT axis2_status_t AXIS2_CALL +axis2_msg_recv_set_receive( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + AXIS2_MSG_RECV_RECEIVE func) +{ + msg_recv->receive = func; + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT axis2_status_t AXIS2_CALL +axis2_msg_recv_receive( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + void *callback_recv_param) +{ + return msg_recv->receive(msg_recv, env, msg_ctx, callback_recv_param); +} + +AXIS2_EXPORT axis2_status_t AXIS2_CALL +axis2_msg_recv_set_load_and_init_svc( + axis2_msg_recv_t *msg_recv, + const axutil_env_t *env, + AXIS2_MSG_RECV_LOAD_AND_INIT_SVC func) +{ + msg_recv->load_and_init_svc = func; + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT axis2_status_t AXIS2_CALL +axis2_msg_recv_load_and_init_svc( + axis2_msg_recv_t *msg_recv, + const axutil_env_t *env, + struct axis2_svc *svc) +{ + if(msg_recv->load_and_init_svc) + { + return msg_recv->load_and_init_svc(msg_recv, env, svc); + } + else + { + /* message receivers without physical service (e.g : programatical service injection) */ + return AXIS2_SUCCESS; + } +} +AXIS2_EXPORT void AXIS2_CALL + axis2_msg_recv_set_conf_ctx(axis2_msg_recv_t *msg_recv, + const axutil_env_t *env, + struct axis2_conf_ctx *conf_ctx) +{ + msg_recv->conf_ctx = conf_ctx; +} + +AXIS2_EXPORT struct axis2_conf_ctx* AXIS2_CALL +axis2_msg_recv_get_conf_ctx( + axis2_msg_recv_t *msg_recv, + const axutil_env_t *env) +{ + if(msg_recv) + return msg_recv->conf_ctx; + return NULL; +} diff --git a/src/core/receivers/raw_xml_in_out_msg_recv.c b/src/core/receivers/raw_xml_in_out_msg_recv.c new file mode 100644 index 0000000..4bb2de8 --- /dev/null +++ b/src/core/receivers/raw_xml_in_out_msg_recv.c @@ -0,0 +1,442 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +static axis2_status_t AXIS2_CALL +axis2_raw_xml_in_out_msg_recv_invoke_business_logic_sync( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_msg_ctx_t * new_msg_ctx); + +AXIS2_EXTERN axis2_msg_recv_t *AXIS2_CALL +axis2_raw_xml_in_out_msg_recv_create( + const axutil_env_t * env) +{ + axis2_msg_recv_t *msg_recv = NULL; + axis2_status_t status = AXIS2_FAILURE; + + msg_recv = axis2_msg_recv_create(env); + if(!msg_recv) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + status = axis2_msg_recv_set_scope(msg_recv, env, AXIS2_APPLICATION_SCOPE); + if(!status) + { + axis2_msg_recv_free(msg_recv, env); + return NULL; + } + + axis2_msg_recv_set_invoke_business_logic(msg_recv, env, + axis2_raw_xml_in_out_msg_recv_invoke_business_logic_sync); + + return msg_recv; +} + +static axis2_status_t AXIS2_CALL +axis2_raw_xml_in_out_msg_recv_invoke_business_logic_sync( + axis2_msg_recv_t * msg_recv, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_msg_ctx_t * new_msg_ctx) +{ + axis2_svc_skeleton_t *svc_obj = NULL; + axis2_op_ctx_t *op_ctx = NULL; + axis2_op_t *op_desc = NULL; + const axis2_char_t *style = NULL; + axiom_node_t *om_node = NULL; + axiom_element_t *om_element = NULL; + axis2_char_t *local_name = NULL; + axiom_node_t *result_node = NULL; + axiom_node_t *body_content_node = NULL; + axiom_element_t *body_content_element = NULL; + axiom_soap_envelope_t *default_envelope = NULL; + axiom_soap_body_t *out_body = NULL; + axiom_soap_header_t *out_header = NULL; + axiom_soap_fault_t *soap_fault = NULL; + axiom_node_t *out_node = NULL; + axis2_status_t status = AXIS2_SUCCESS; + axis2_bool_t skel_invoked = AXIS2_FALSE; + const axis2_char_t *soap_ns = AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + int soap_version = AXIOM_SOAP12; + axiom_namespace_t *env_ns = NULL; + axiom_node_t *fault_node = NULL; + axiom_soap_fault_detail_t *fault_detail; + axis2_bool_t is_fault = AXIS2_FALSE; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, new_msg_ctx, AXIS2_FAILURE); + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, + "[axis2]Entry:axis2_raw_xml_in_out_msg_recv_invoke_business_logic_sync"); + + /* get the implementation class for the Web Service */ + svc_obj = axis2_msg_recv_make_new_svc_obj(msg_recv, env, msg_ctx); + + if(!svc_obj) + { + const axis2_char_t *svc_name = NULL; + axis2_svc_t *svc = axis2_msg_ctx_get_svc(msg_ctx, env); + + if(svc) + { + svc_name = axis2_svc_get_name(svc, env); + } + else + { + svc_name = "unknown"; + } + + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Impl object for service '%s' not set in message receiver. %d :: %s", svc_name, + env->error->error_number, AXIS2_ERROR_GET_MESSAGE(env->error)); + + status = AXIS2_FAILURE; + } + else + { + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + op_desc = axis2_op_ctx_get_op(op_ctx, env); + + style = axis2_op_get_style(op_desc, env); + if(0 == axutil_strcmp(AXIS2_STYLE_DOC, style)) + { + axiom_soap_envelope_t *envelope = NULL; + axiom_soap_body_t *body = NULL; + + envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + body = axiom_soap_envelope_get_body(envelope, env); + om_node = axiom_soap_body_get_base_node(body, env); + om_element = axiom_node_get_data_element(om_node, env); + om_node = axiom_node_get_first_element(om_node, env); + } + else if(0 == axutil_strcmp(AXIS2_STYLE_RPC, style)) + { + axiom_soap_envelope_t *envelope = NULL; + axiom_soap_body_t *body = NULL; + axiom_node_t *op_node = NULL; + axiom_element_t *op_element = NULL; + + envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + body = axiom_soap_envelope_get_body(envelope, env); + op_node = axiom_soap_body_get_base_node(body, env); + op_element = axiom_node_get_data_element(op_node, env); + if(op_element) + { + local_name = axiom_element_get_localname(op_element, env); + if(local_name) + { + axutil_array_list_t *function_arr = NULL; + int i = 0; + int size = 0; + axis2_bool_t matches = AXIS2_FALSE; + + function_arr = svc_obj->func_array; + if(function_arr) + { + size = axutil_array_list_size(function_arr, env); + } + + for(i = 0; i < size; i++) + { + axis2_char_t *function_name = NULL; + + function_name = (axis2_char_t *)axutil_array_list_get(function_arr, env, i); + if(!axutil_strcmp(function_name, local_name)) + { + matches = AXIS2_TRUE; + + } + } + + if(matches) + { + om_node = axiom_node_get_first_child(op_node, env); + om_element = axiom_node_get_data_element(om_node, env); + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_OM_ELEMENT_MISMATCH, AXIS2_FAILURE); + status = AXIS2_FAILURE; + } + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_OM_ELEMENT_INVALID_STATE, AXIS2_FAILURE); + status = AXIS2_FAILURE; + } + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_RPC_NEED_MATCHING_CHILD, AXIS2_FAILURE); + status = AXIS2_FAILURE; + } + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_UNKNOWN_STYLE, AXIS2_FAILURE); + status = AXIS2_FAILURE; + } + + if(status == AXIS2_SUCCESS) + { + skel_invoked = AXIS2_TRUE; + result_node = AXIS2_SVC_SKELETON_INVOKE(svc_obj, env, om_node, new_msg_ctx); + } + + if(result_node) + { + if(0 == axutil_strcmp(style, AXIS2_STYLE_RPC)) + { + axiom_namespace_t *ns = NULL; + axis2_char_t *res_name = NULL; + + res_name = axutil_stracat(env, local_name, "Response"); + ns = axiom_namespace_create(env, "http://soapenc/", "res"); + if(!ns) + { + status = AXIS2_FAILURE; + } + else + { + body_content_element = axiom_element_create(env, NULL, res_name, ns, + &body_content_node); + axiom_node_add_child(body_content_node, env, result_node); + } + } + else + { + body_content_node = result_node; + } + } + else + { + axis2_char_t *mep = (axis2_char_t *)axis2_op_get_msg_exchange_pattern(op_desc, env); + if(axutil_strcmp(mep, AXIS2_MEP_URI_IN_ONLY) && axutil_strcmp(mep, + AXIS2_MEP_URI_ROBUST_IN_ONLY)) + { + status = AXIS2_ERROR_GET_STATUS_CODE(env->error); + if(status == AXIS2_SUCCESS) + { + axis2_msg_ctx_set_no_content(new_msg_ctx, env, AXIS2_TRUE); + } + else + { + axis2_msg_ctx_set_status_code(msg_ctx, env, axis2_msg_ctx_get_status_code( + new_msg_ctx, env)); + } + /* The new_msg_ctx is passed to the service. The status code must + * be taken from here and set to the old message context which is + * used by the worker when the request processing fails. + */ + if(svc_obj->ops->on_fault) + { + fault_node = AXIS2_SVC_SKELETON_ON_FAULT(svc_obj, env, om_node); + } + is_fault = AXIS2_TRUE; + } + else + { + /* If we have a in only message result node is NULL. We create fault only if + * an error is set + */ + status = AXIS2_ERROR_GET_STATUS_CODE(env->error); + if(status == AXIS2_SUCCESS) + { + axis2_msg_ctx_set_no_content(new_msg_ctx, env, AXIS2_TRUE); + } + else + { + axis2_msg_ctx_set_status_code(msg_ctx, env, axis2_msg_ctx_get_status_code( + new_msg_ctx, env)); + if(!axutil_strcmp(mep, AXIS2_MEP_URI_ROBUST_IN_ONLY)) + { + /* The new_msg_ctx is passed to the service. The status code must + * be taken from here and set to the old message context which is + * used by the worker when the request processing fails. + */ + if(svc_obj->ops->on_fault) + { + fault_node = AXIS2_SVC_SKELETON_ON_FAULT(svc_obj, env, om_node); + } + is_fault = AXIS2_TRUE; + } + } + } + } + } + + if(msg_ctx && axis2_msg_ctx_get_is_soap_11(msg_ctx, env)) + { + soap_ns = AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI; /* default is 1.2 */ + soap_version = AXIOM_SOAP11; + } + + if(axis2_msg_ctx_get_soap_envelope(new_msg_ctx, env)) + { + /* service implementation has set the envelope, + useful when setting a SOAP fault. + No need to further process */ + return AXIS2_SUCCESS; + } + + /* create the soap envelope here */ + env_ns = axiom_namespace_create(env, soap_ns, "soapenv"); + if(!env_ns) + { + return AXIS2_FAILURE; + } + + default_envelope = axiom_soap_envelope_create(env, env_ns); + + if(!default_envelope) + { + return AXIS2_FAILURE; + } + + out_header = axiom_soap_header_create_with_parent(env, default_envelope); + if(!out_header) + { + return AXIS2_FAILURE; + } + + out_body = axiom_soap_body_create_with_parent(env, default_envelope); + if(!out_body) + { + return AXIS2_FAILURE; + } + + out_node = axiom_soap_body_get_base_node(out_body, env); + if(!out_node) + { + return AXIS2_FAILURE; + } + + if(status != AXIS2_SUCCESS || is_fault) + { + /* something went wrong. set a SOAP Fault */ + const axis2_char_t *fault_value_str = "soapenv:Sender"; + const axis2_char_t *fault_reason_str = NULL; + const axis2_char_t *err_msg = NULL; + + if(!skel_invoked) + { + if(axis2_msg_ctx_get_is_soap_11(msg_ctx, env)) + { +fault_value_str = + AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX ":" + AXIOM_SOAP11_FAULT_CODE_RECEIVER; + } + else + { + fault_value_str = + AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX ":" + AXIOM_SOAP12_SOAP_FAULT_VALUE_RECEIVER; + } + } + + err_msg = AXIS2_ERROR_GET_MESSAGE(env->error); + if (err_msg && axutil_strcmp(err_msg, "")) + { + if(!axutil_strcmp(err_msg, "No Error")) + { + fault_reason_str = "An error has occurred, but could not determine exact details"; + } + else + { + fault_reason_str = err_msg; + } + } + else + { + fault_reason_str = "An error has occurred, but could not determine exact details"; + } + + soap_fault = axiom_soap_fault_create_default_fault(env, out_body, fault_value_str, + fault_reason_str, soap_version); + + if (fault_node) + { + axiom_node_t *fault_detail_node = NULL; + + fault_detail = axiom_soap_fault_detail_create_with_parent(env, soap_fault); + fault_detail_node = axiom_soap_fault_detail_get_base_node(fault_detail, env); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "fault_detail:%s", axiom_node_to_string( + fault_detail_node, env)); + + axiom_soap_fault_detail_add_detail_entry(fault_detail, env, fault_node); + } +} + +if (body_content_node) +{ + axiom_node_add_child(out_node, env, body_content_node); + status = axis2_msg_ctx_set_soap_envelope(new_msg_ctx, env, default_envelope); +} +else if (soap_fault) +{ + axis2_msg_ctx_set_soap_envelope(new_msg_ctx, env, default_envelope); + status = AXIS2_SUCCESS; +} +else +{ + /* we should free the memory as the envelope is not used, one way case */ + axiom_soap_envelope_free(default_envelope, env); + default_envelope = NULL; +} + +AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, + "[axis2]Exit:axis2_raw_xml_in_out_msg_recv_invoke_business_logic_sync"); + +return status; +} + +AXIS2_EXPORT int +axis2_get_instance( + struct axis2_msg_recv **inst, + const axutil_env_t * env) +{ + *inst = axis2_raw_xml_in_out_msg_recv_create(env); + if(!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + struct axis2_msg_recv *inst, + const axutil_env_t * env) +{ + if(inst) + { + axis2_msg_recv_free(inst, env); + } + return AXIS2_SUCCESS; +} diff --git a/src/core/receivers/svr_callback.c b/src/core/receivers/svr_callback.c new file mode 100644 index 0000000..2fe68b1 --- /dev/null +++ b/src/core/receivers/svr_callback.c @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axis2_svr_callback +{ + axis2_char_t *scope; +}; + +AXIS2_EXPORT axis2_svr_callback_t *AXIS2_CALL +axis2_svr_callback_create( + const axutil_env_t * env) +{ + axis2_svr_callback_t *svr_callback = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + svr_callback = (axis2_svr_callback_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_svr_callback_t)); + + if(!svr_callback) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + return svr_callback; +} + +AXIS2_EXPORT void AXIS2_CALL +axis2_svr_callback_free( + axis2_svr_callback_t * svr_callback, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(svr_callback) + { + AXIS2_FREE(env->allocator, svr_callback); + } + + return; +} + +AXIS2_EXPORT axis2_status_t AXIS2_CALL +axis2_svr_callback_handle_result( + axis2_svr_callback_t * svr_callback, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_engine_t *engine = NULL; + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_svc_ctx_t *svc_ctx = NULL; + axis2_op_ctx_t *op_ctx = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + svc_ctx = axis2_op_ctx_get_parent(op_ctx, env); + conf_ctx = axis2_svc_ctx_get_conf_ctx(svc_ctx, env); + engine = axis2_engine_create(env, conf_ctx); + if(!engine) + { + return AXIS2_FAILURE; + } + return axis2_engine_send(engine, env, msg_ctx); +} + +AXIS2_EXPORT axis2_status_t AXIS2_CALL +axis2_svr_callback_handle_fault( + axis2_svr_callback_t * svr_callback, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_engine_t *engine = NULL; + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_svc_ctx_t *svc_ctx = NULL; + axis2_op_ctx_t *op_ctx = NULL; + axis2_msg_ctx_t *fault_ctx = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + svc_ctx = axis2_op_ctx_get_parent(op_ctx, env); + conf_ctx = axis2_svc_ctx_get_conf_ctx(svc_ctx, env); + engine = axis2_engine_create(env, conf_ctx); + if(!engine) + { + return AXIS2_FAILURE; + } + + fault_ctx = axis2_engine_create_fault_msg_ctx(engine, env, msg_ctx, NULL, NULL); + return axis2_engine_send_fault(engine, env, fault_ctx); +} diff --git a/src/core/transport/Makefile.am b/src/core/transport/Makefile.am new file mode 100644 index 0000000..eff5f72 --- /dev/null +++ b/src/core/transport/Makefile.am @@ -0,0 +1,8 @@ +SUBDIRS=http $(TCP_DIR) $(AMQP_DIR) +DIST_SUBDIRS=http tcp amqp +EXTRA_DIST=Makefile.am amqp/server/axis2_amqp_server/axis2_amqp_server.h \ +amqp/receiver/axis2_amqp_receiver.h amqp/receiver/qpid_receiver/axis2_qpid_receiver.h \ +amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.h amqp/receiver/qpid_receiver/request_processor/axis2_amqp_request_processor.h \ +amqp/util/axis2_amqp_defines.h amqp/util/axis2_amqp_util.h amqp/sender/qpid_sender/axis2_qpid_sender_interface.h \ +amqp/sender/qpid_sender/axis2_qpid_sender.h amqp/sender/axis2_amqp_sender.h + diff --git a/src/core/transport/amqp/Makefile.am b/src/core/transport/amqp/Makefile.am new file mode 100644 index 0000000..ca5e58d --- /dev/null +++ b/src/core/transport/amqp/Makefile.am @@ -0,0 +1,4 @@ +SUBDIRS = util \ + receiver \ + server \ + sender diff --git a/src/core/transport/amqp/receiver/Makefile.am b/src/core/transport/amqp/receiver/Makefile.am new file mode 100644 index 0000000..4e16b0f --- /dev/null +++ b/src/core/transport/amqp/receiver/Makefile.am @@ -0,0 +1,25 @@ +SUBDIRS = qpid_receiver + +lib_LTLIBRARIES = libaxis2_amqp_receiver.la + +libaxis2_amqp_receiver_la_SOURCES = axis2_amqp_receiver.c + +libaxis2_amqp_receiver_la_LIBADD = $(top_builddir)/util/src/libaxutil.la \ + $(top_builddir)/src/core/transport/amqp/util/libaxis2_amqp_util.la \ + $(top_builddir)/src/core/transport/amqp/receiver/qpid_receiver/libaxis2_qpid_receiver.la + +libaxis2_amqp_receiver_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/transport/amqp/util \ + -I$(top_builddir)/src/core/transport/amqp/receiver \ + -I$(top_builddir)/src/core/transport/amqp/sender/qpid_sender \ + -I$(top_builddir)/src/core/transport/amqp/receiver/qpid_receiver \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include + diff --git a/src/core/transport/amqp/receiver/axis2_amqp_receiver.c b/src/core/transport/amqp/receiver/axis2_amqp_receiver.c new file mode 100644 index 0000000..5ff69af --- /dev/null +++ b/src/core/transport/amqp/receiver/axis2_amqp_receiver.c @@ -0,0 +1,275 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +static const axis2_transport_receiver_ops_t amqp_receiver_ops = +{ + axis2_amqp_receiver_init, + axis2_amqp_receiver_start, + axis2_amqp_receiver_get_reply_to_epr, + axis2_amqp_receiver_get_conf_ctx, + axis2_amqp_receiver_is_running, + axis2_amqp_receiver_stop, + axis2_amqp_receiver_free +}; + +AXIS2_EXTERN axis2_transport_receiver_t* AXIS2_CALL +axis2_amqp_receiver_create( + const axutil_env_t* env, + const axis2_char_t* repo, + const axis2_char_t* qpid_broker_ip, + int qpid_broker_port) +{ + AXIS2_ENV_CHECK(env, NULL); + + axis2_amqp_receiver_resource_pack_t* receiver_resource_pack = NULL; + + receiver_resource_pack = (axis2_amqp_receiver_resource_pack_t*)AXIS2_MALLOC(env->allocator, + sizeof(axis2_amqp_receiver_resource_pack_t)); + + if(!receiver_resource_pack) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + receiver_resource_pack->receiver.ops = &amqp_receiver_ops; + receiver_resource_pack->qpid_receiver = NULL; + receiver_resource_pack->conf_ctx = NULL; + receiver_resource_pack->conf_ctx_private = NULL; + + if(repo) + { + /** + * 1. We first create a private conf ctx which is owned by this server + * we only free this private conf context. We should never free the + * receiver_impl->conf_ctx because it may be owned by any other object which + * may lead to double free. + * + * 2. The Qpid broker IP and port are set in conf_ctx at two different places. + * If the repo is specified, they are set here. Otherwise, they are set + * in axis2_amqp_receiver_init method. + */ + axutil_property_t* property = NULL; + const axis2_char_t* broker_ip = NULL; + int* broker_port = (int*)AXIS2_MALLOC(env->allocator, sizeof(int)); + *broker_port = AXIS2_QPID_NULL_CONF_INT; + + receiver_resource_pack->conf_ctx_private = axis2_build_conf_ctx(env, repo); + if(!receiver_resource_pack->conf_ctx_private) + { + axis2_amqp_receiver_free((axis2_transport_receiver_t *)receiver_resource_pack, env); + return NULL; + } + + /* Set broker IP */ + broker_ip = qpid_broker_ip ? qpid_broker_ip : AXIS2_QPID_DEFAULT_BROKER_IP; + property = axutil_property_create_with_args(env, AXIS2_SCOPE_APPLICATION, 0, 0, + (void*)broker_ip); + axis2_conf_ctx_set_property(receiver_resource_pack->conf_ctx_private, env, + AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_IP, property); + + /* Set broker port */ + *broker_port = (qpid_broker_port != AXIS2_QPID_NULL_CONF_INT) ? qpid_broker_port + : AXIS2_QPID_DEFAULT_BROKER_PORT; + property = axutil_property_create_with_args(env, AXIS2_SCOPE_APPLICATION, 0, 0, + (void*)broker_port); + axis2_conf_ctx_set_property(receiver_resource_pack->conf_ctx_private, env, + AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_PORT, property); + + receiver_resource_pack->conf_ctx = receiver_resource_pack->conf_ctx_private; + } + + return &(receiver_resource_pack->receiver); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_amqp_receiver_init( + axis2_transport_receiver_t* receiver, + const axutil_env_t* env, + axis2_conf_ctx_t* conf_ctx, + axis2_transport_in_desc_t* in_desc) +{ + axis2_amqp_receiver_resource_pack_t* receiver_resource_pack = NULL; + axutil_property_t* property = NULL; + const axis2_char_t* broker_ip = NULL; + int* broker_port = (int*)AXIS2_MALLOC(env->allocator, sizeof(int)); + *broker_port = AXIS2_QPID_NULL_CONF_INT; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + receiver_resource_pack = AXIS2_AMQP_RECEIVER_TO_RESOURCE_PACK(receiver); + receiver_resource_pack->conf_ctx = conf_ctx; + + /* Set broker IP */ + broker_ip = axis2_amqp_util_get_in_desc_conf_value_string(in_desc, env, + AXIS2_AMQP_CONF_QPID_BROKER_IP); + if(!broker_ip) + { + broker_ip = AXIS2_QPID_DEFAULT_BROKER_IP; + } + property = axutil_property_create_with_args(env, AXIS2_SCOPE_APPLICATION, 0, 0, + (void*)broker_ip); + axis2_conf_ctx_set_property(receiver_resource_pack->conf_ctx, env, + AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_IP, property); + + /* Set broker port */ + *broker_port = axis2_amqp_util_get_in_desc_conf_value_int(in_desc, env, + AXIS2_AMQP_CONF_QPID_BROKER_PORT); + if(*broker_port == AXIS2_QPID_NULL_CONF_INT) + { + *broker_port = AXIS2_QPID_DEFAULT_BROKER_PORT; + } + property = axutil_property_create_with_args(env, AXIS2_SCOPE_APPLICATION, 0, 0, + (void*)broker_port); + axis2_conf_ctx_set_property(receiver_resource_pack->conf_ctx, env, + AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_PORT, property); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_amqp_receiver_start( + axis2_transport_receiver_t* receiver, + const axutil_env_t* env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + axis2_status_t status = AXIS2_FAILURE; + + axis2_amqp_receiver_resource_pack_t* amqp_receiver_resource_pack = NULL; + axis2_qpid_receiver_resource_pack_t* qpid_receiver_resource_pack = NULL; + + amqp_receiver_resource_pack = AXIS2_AMQP_RECEIVER_TO_RESOURCE_PACK(receiver); + + /* Create Qpid Receiver */ + qpid_receiver_resource_pack = axis2_qpid_receiver_create(env, + amqp_receiver_resource_pack->conf_ctx); + + if(qpid_receiver_resource_pack) + { + amqp_receiver_resource_pack->qpid_receiver = qpid_receiver_resource_pack; + + status = axis2_qpid_receiver_start(qpid_receiver_resource_pack, env); + } + + return status; +} + +AXIS2_EXTERN axis2_endpoint_ref_t* AXIS2_CALL +axis2_amqp_receiver_get_reply_to_epr( + axis2_transport_receiver_t* receiver, + const axutil_env_t* env, + const axis2_char_t* svc_name) +{ + return NULL; +} + +AXIS2_EXTERN axis2_conf_ctx_t* AXIS2_CALL +axis2_amqp_receiver_get_conf_ctx( + axis2_transport_receiver_t* receiver, + const axutil_env_t* env) +{ + AXIS2_ENV_CHECK(env, NULL); + + return AXIS2_AMQP_RECEIVER_TO_RESOURCE_PACK(receiver)->conf_ctx; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_amqp_receiver_is_running( + axis2_transport_receiver_t* receiver, + const axutil_env_t* env) +{ + return AXIS2_TRUE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_amqp_receiver_stop( + axis2_transport_receiver_t* receiver, + const axutil_env_t* env) +{ + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_amqp_receiver_free( + axis2_transport_receiver_t* receiver, + const axutil_env_t* env) +{ + AXIS2_ENV_CHECK(env, void); + + axis2_amqp_receiver_resource_pack_t* receiver_resource_pack = NULL; + receiver_resource_pack = AXIS2_AMQP_RECEIVER_TO_RESOURCE_PACK(receiver); + + if(receiver_resource_pack->qpid_receiver) + { + axis2_qpid_receiver_free(receiver_resource_pack->qpid_receiver, env); + receiver_resource_pack->qpid_receiver = NULL; + } + + if(receiver_resource_pack->conf_ctx_private) + { + axis2_conf_ctx_free(receiver_resource_pack->conf_ctx_private, env); + receiver_resource_pack->conf_ctx_private = NULL; + } + + receiver_resource_pack->conf_ctx = NULL; /* Do not free this. It may be owned by some other object */ + + AXIS2_FREE(env->allocator, receiver_resource_pack); +} + +/* Library Exports */ + +AXIS2_EXPORT int +#ifndef AXIS2_STATIC_DEPLOY +axis2_get_instance( +#else + axis2_amqp_receiver_get_instance( +#endif + struct axis2_transport_receiver** inst, + const axutil_env_t* env) +{ + int status = AXIS2_SUCCESS; + + *inst = axis2_amqp_receiver_create(env, NULL, NULL, AXIS2_QPID_NULL_CONF_INT); + if(!(*inst)) + { + status = AXIS2_FAILURE; + } + + return status; +} + +AXIS2_EXPORT int +#ifndef AXIS2_STATIC_DEPLOY +axis2_remove_instance( +#else + axis2_amqp_receiver_remove_instance( +#endif + axis2_transport_receiver_t* inst, + const axutil_env_t* env) +{ + if(inst) + { + axis2_transport_receiver_free(inst, env); + } + + return AXIS2_SUCCESS; +} diff --git a/src/core/transport/amqp/receiver/axis2_amqp_receiver.h b/src/core/transport/amqp/receiver/axis2_amqp_receiver.h new file mode 100644 index 0000000..209e2bb --- /dev/null +++ b/src/core/transport/amqp/receiver/axis2_amqp_receiver.h @@ -0,0 +1,82 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_AMQP_RECEIVER_H +#define AXIS2_AMQP_RECEIVER_H + +#include +#include +#include + +typedef struct axis2_amqp_receiver_resource_pack +{ + axis2_transport_receiver_t receiver; + axis2_qpid_receiver_resource_pack_t* qpid_receiver; + axis2_conf_ctx_t* conf_ctx; + axis2_conf_ctx_t* conf_ctx_private; +} +axis2_amqp_receiver_resource_pack_t; + +#define AXIS2_AMQP_RECEIVER_TO_RESOURCE_PACK(amqp_receiver) \ + ((axis2_amqp_receiver_resource_pack_t*)(amqp_receiver)) + +AXIS2_EXTERN axis2_transport_receiver_t* AXIS2_CALL +axis2_amqp_receiver_create( + const axutil_env_t* env, + const axis2_char_t* repo, + const axis2_char_t* qpid_broker_ip, + int qpid_broker_port); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_amqp_receiver_init( + axis2_transport_receiver_t* receiver, + const axutil_env_t* env, + axis2_conf_ctx_t* conf_ctx, + axis2_transport_in_desc_t* in_desc); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_amqp_receiver_start( + axis2_transport_receiver_t* receiver, + const axutil_env_t* env); + +AXIS2_EXTERN axis2_endpoint_ref_t* AXIS2_CALL +axis2_amqp_receiver_get_reply_to_epr( + axis2_transport_receiver_t* receiver, + const axutil_env_t* env, + const axis2_char_t* svc_name); + +AXIS2_EXTERN axis2_conf_ctx_t* AXIS2_CALL +axis2_amqp_receiver_get_conf_ctx( + axis2_transport_receiver_t* receiver, + const axutil_env_t* env); + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_amqp_receiver_is_running( + axis2_transport_receiver_t* receiver, + const axutil_env_t* env); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_amqp_receiver_stop( + axis2_transport_receiver_t* receiver, + const axutil_env_t* env); + +AXIS2_EXTERN void AXIS2_CALL +axis2_amqp_receiver_free( + axis2_transport_receiver_t* receiver, + const axutil_env_t* env); + +#endif diff --git a/src/core/transport/amqp/receiver/qpid_receiver/Makefile.am b/src/core/transport/amqp/receiver/qpid_receiver/Makefile.am new file mode 100644 index 0000000..3ecdf34 --- /dev/null +++ b/src/core/transport/amqp/receiver/qpid_receiver/Makefile.am @@ -0,0 +1,29 @@ +SUBDIRS = request_processor + +lib_LTLIBRARIES = libaxis2_qpid_receiver.la + +libaxis2_qpid_receiver_la_SOURCES = axis2_qpid_receiver.cpp \ + axis2_qpid_receiver_interface.cpp \ + axis2_qpid_receiver_listener.cpp + +libaxis2_qpid_receiver_la_LIBADD = $(top_builddir)/util/src/libaxutil.la \ + $(QPID_HOME)/lib/libqpidclient.la \ + $(top_builddir)/src/core/transport/amqp/util/libaxis2_amqp_util.la \ + $(top_builddir)/src/core/transport/amqp/receiver/qpid_receiver/request_processor/libaxis2_amqp_request_processor.la + +libaxis2_qpid_receiver_la_LDFLAGS = g++ -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/transport/amqp/receiver/qpid_receiver \ + -I$(top_builddir)/src/core/transport/amqp/receiver/qpid_receiver/request_processor \ + -I$(top_builddir)/src/core/transport/amqp/util \ + -I$(top_builddir)/src/core/transport/amqp/sender/qpid_sender \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include \ + -I$(QPID_HOME)/include + diff --git a/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.cpp b/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.cpp new file mode 100644 index 0000000..140ab0e --- /dev/null +++ b/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.cpp @@ -0,0 +1,167 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * tcp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +Axis2QpidReceiver::Axis2QpidReceiver( + const axutil_env_t* env, + axis2_conf_ctx_t* conf_ctx) +{ + this->env = env; + this->conf_ctx = conf_ctx; +} + +Axis2QpidReceiver::~Axis2QpidReceiver( + void) +{ +} + +bool +Axis2QpidReceiver::start( + void) +{ + if(!conf_ctx) + return false; + + Connection connection; + axis2_bool_t serverSide = AXIS2_TRUE; + + serverSide = axis2_amqp_util_conf_ctx_get_server_side(conf_ctx, env); + + while(true) + { + try + { + std::list queueNameList; + string qpidBrokerIP = axis2_amqp_util_conf_ctx_get_qpid_broker_ip(conf_ctx, env); + int qpidBrokerPort = axis2_amqp_util_conf_ctx_get_qpid_broker_port(conf_ctx, env); + + /* Check if Client Side and Resolve Dynamic Queue Name */ + if(serverSide == AXIS2_TRUE) /* Server side */ + { + std::cout << "Connecting to Qpid Broker on " << qpidBrokerIP << ":" + << qpidBrokerPort << " ... "; + } + + /* Create Connection to Qpid Broker */ + connection.open(qpidBrokerIP, qpidBrokerPort); + + if(serverSide == AXIS2_TRUE) /* Server side */ + { + /* Create queue for each service. Queue name is equal to service name */ + axis2_conf_t* conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(!conf) + return false; + + axutil_hash_t* serviceMap = axis2_conf_get_all_svcs(conf, env); + if(!serviceMap) + return false; + + axutil_hash_index_t* serviceHI = NULL; + void* serviceValue = NULL; + + for(serviceHI = axutil_hash_first(serviceMap, env); serviceHI; serviceHI + = axutil_hash_next(env, serviceHI)) + { + axutil_hash_this(serviceHI, NULL, NULL, &serviceValue); + + axis2_svc_t* service = (axis2_svc_t*)serviceValue; + if(!service) + return false; + + axis2_char_t* serviceName = axutil_qname_get_localpart(axis2_svc_get_qname( + service, env), env); + if(!serviceName) + return false; + + queueNameList.push_back(serviceName); + } + + std::cout << "CONNECTED" << std::endl; + } + else /* Client side separate listener in dual-channel case */ + { + string queueName = axis2_amqp_util_conf_ctx_get_dual_channel_queue_name(conf_ctx, + env); + + queueNameList.push_back(queueName); + } + + /* Create new session */ + Session session = connection.newSession(); + + /* Create Subscription manager */ + SubscriptionManager subscriptionManager(session); + + Axis2QpidReceiverListener qpidReceiverListener(env, conf_ctx); + + /* Subscribe to queues */ + while(!queueNameList.empty()) + { + string queueName = queueNameList.front(); + + session.queueDeclare(arg::queue = queueName, arg::autoDelete = true); + session.exchangeBind(arg::exchange = AXIS2_AMQP_EXCHANGE_DIRECT, arg::queue + = queueName, arg::bindingKey = queueName); + + subscriptionManager.subscribe(qpidReceiverListener, queueName); + + queueNameList.pop_front(); + } + + /* Listen and Wait */ + if(serverSide == AXIS2_TRUE) /* Server side */ + { + std::cout << "Started Axis2 AMQP Server ..." << std::endl; + } + + subscriptionManager.run(); + + return true; + } + catch(const std::exception& e) + { + connection.close(); + + if(serverSide == AXIS2_TRUE) /* Server side */ + { + std::cout << "FAILED" << std::endl; + } + + sleep(5); + } + } + + connection.close(); + + return false; +} + +bool +Axis2QpidReceiver::shutdown( + void) +{ + return true; +} diff --git a/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.h b/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.h new file mode 100644 index 0000000..66108d5 --- /dev/null +++ b/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.h @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * tcp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_QPID_RECEIVER_H +#define AXIS2_QPID_RECEIVER_H + +#include +#include + +class Axis2QpidReceiver +{ + public: + Axis2QpidReceiver(const axutil_env_t* env, + axis2_conf_ctx_t* conf_ctx); + ~Axis2QpidReceiver(void); + + bool start(void); + bool shutdown(void); + + private: + const axutil_env_t* env; + axis2_conf_ctx_t* conf_ctx; +}; + +#endif diff --git a/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.cpp b/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.cpp new file mode 100644 index 0000000..79faa86 --- /dev/null +++ b/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.cpp @@ -0,0 +1,102 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +AXIS2_EXTERN axis2_qpid_receiver_resource_pack_t* AXIS2_CALL +axis2_qpid_receiver_create( + const axutil_env_t* env, + axis2_conf_ctx_t* conf_ctx) +{ + AXIS2_ENV_CHECK(env, NULL); + + axis2_qpid_receiver_resource_pack_t* resource_pack = NULL; + + resource_pack = (axis2_qpid_receiver_resource_pack_t*)AXIS2_MALLOC + (env->allocator, sizeof(axis2_qpid_receiver_resource_pack_t)); + + if (!resource_pack) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + /* Create Qpid Receiver */ + Axis2QpidReceiver* qpid_receiver = new Axis2QpidReceiver(env, conf_ctx); + + resource_pack->qpid_receiver = qpid_receiver; + + return resource_pack; +} + + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_qpid_receiver_start( + axis2_qpid_receiver_resource_pack_t* receiver_resource_pack, + const axutil_env_t* env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + axis2_status_t status = AXIS2_FAILURE; + + /* Start Qpid Receiver */ + Axis2QpidReceiver* qpid_receiver = (Axis2QpidReceiver*)receiver_resource_pack->qpid_receiver; + + if ((qpid_receiver) && (qpid_receiver->start())) + { + status = AXIS2_SUCCESS; + } + + return status; +} + + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_qpid_receiver_is_running( + axis2_qpid_receiver_resource_pack_t* receiver_resource_pack, + const axutil_env_t* env) +{ + return AXIS2_TRUE; +} + + +AXIS2_EXTERN void AXIS2_CALL +axis2_qpid_receiver_free( + axis2_qpid_receiver_resource_pack_t* receiver_resource_pack, + const axutil_env_t* env) +{ + AXIS2_ENV_CHECK(env, void); + + if (receiver_resource_pack) + { + Axis2QpidReceiver* qpid_receiver = (Axis2QpidReceiver*)receiver_resource_pack->qpid_receiver; + if (qpid_receiver) + delete qpid_receiver; + + AXIS2_FREE(env->allocator, receiver_resource_pack); + } +} + +#ifdef __cplusplus +} +#endif diff --git a/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.h b/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.h new file mode 100644 index 0000000..d141dfc --- /dev/null +++ b/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.h @@ -0,0 +1,58 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_QPID_RECEIVER_INTERFACE_H +#define AXIS2_QPID_RECEIVER_INTERFACE_H + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axis2_qpid_receiver_resource_pack + { + void* qpid_receiver; + }axis2_qpid_receiver_resource_pack_t; + + AXIS2_EXTERN axis2_qpid_receiver_resource_pack_t* AXIS2_CALL + axis2_qpid_receiver_create( + const axutil_env_t* env, + axis2_conf_ctx_t* conf_ctx); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_qpid_receiver_start( + axis2_qpid_receiver_resource_pack_t* receiver_resource_pack, + const axutil_env_t* env); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_qpid_receiver_is_running( + axis2_qpid_receiver_resource_pack_t* receiver_resource_pack, + const axutil_env_t* env); + + AXIS2_EXTERN void AXIS2_CALL + axis2_qpid_receiver_free( + axis2_qpid_receiver_resource_pack_t* receiver_resource_pack, + const axutil_env_t* env); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_listener.cpp b/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_listener.cpp new file mode 100644 index 0000000..63717ca --- /dev/null +++ b/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_listener.cpp @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * tcp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +Axis2QpidReceiverListener::Axis2QpidReceiverListener( + const axutil_env_t* env, + axis2_conf_ctx_t* conf_ctx) +{ + this->env = env; + this->conf_ctx = conf_ctx; +} + +Axis2QpidReceiverListener::~Axis2QpidReceiverListener( + void) +{ +} + +void +Axis2QpidReceiverListener::received( + Message& message) +{ + AXIS2_ENV_CHECK(env, void); + + axis2_amqp_request_processor_resource_pack_t* request_data = NULL; +#ifdef AXIS2_SVR_MULTI_THREADED + axutil_thread_t* worker_thread = NULL; +#endif + + request_data = (axis2_amqp_request_processor_resource_pack_t*)AXIS2_MALLOC(env->allocator, + sizeof(axis2_amqp_request_processor_resource_pack_t)); + + if(!request_data) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Memory Allocation Error"); + return; + } + + request_data->env = (axutil_env_t*)env; + request_data->conf_ctx = conf_ctx; + + /* Create a Local Copy of Request Content */ + std::string message_data = message.getData(); + axis2_char_t* request_content = + (axis2_char_t*)AXIS2_MALLOC(env->allocator, message_data.size()); + memcpy(request_content, message_data.c_str(), message_data.size()); + + request_data->request_content = request_content; + request_data->content_length = message_data.size(); + + /* Set ReplyTo */ + request_data->reply_to = NULL; + if(message.getMessageProperties().hasReplyTo()) + { + /* Create a Local Copy of ReplyTo */ + std::string reply_to_tmp = message.getMessageProperties().getReplyTo().getRoutingKey(); + axis2_char_t* reply_to = (axis2_char_t*)AXIS2_MALLOC(env->allocator, reply_to_tmp.size() + + 1); + strcpy(reply_to, reply_to_tmp.c_str()); + + request_data->reply_to = reply_to; + } + + /* Copy AMQP headers */ + /* Content-Type */ + request_data->content_type = NULL; + std::string content_type_tmp = message.getHeaders().getAsString(AXIS2_AMQP_HEADER_CONTENT_TYPE); + if(!content_type_tmp.empty()) + { + axis2_char_t* content_type = (axis2_char_t*)AXIS2_MALLOC(env->allocator, + content_type_tmp.size() + 1); + strcpy(content_type, content_type_tmp.c_str()); + + request_data->content_type = content_type; + } + + /* SOAPAction */ + request_data->soap_action = NULL; + std::string soap_action_tmp = message.getHeaders().getAsString(AXIS2_AMQP_HEADER_SOAP_ACTION); + if(!soap_action_tmp.empty()) + { + axis2_char_t* soap_action = (axis2_char_t*)AXIS2_MALLOC(env->allocator, + soap_action_tmp.size() + 1); + strcpy(soap_action, soap_action_tmp.c_str()); + + request_data->soap_action = soap_action; + } + +#ifdef AXIS2_SVR_MULTI_THREADED + worker_thread = axutil_thread_pool_get_thread(env->thread_pool, + axis2_amqp_request_processor_thread_function, + (void*)request_data); + + if (!worker_thread) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to Create Thread"); + return; + } + + axutil_thread_pool_thread_detach(env->thread_pool, worker_thread); +#else + axis2_amqp_request_processor_thread_function(NULL, (void*)request_data); +#endif +} diff --git a/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_listener.h b/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_listener.h new file mode 100644 index 0000000..d5923db --- /dev/null +++ b/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_listener.h @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * tcp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_QPID_RECEIVER_LISTENER_H +#define AXIS2_QPID_RECEIVER_LISTENER_H + +#include +#include +#include +#include + +using namespace qpid::client; +using namespace qpid::framing; + +class Axis2QpidReceiverListener : public MessageListener +{ + public: + Axis2QpidReceiverListener(const axutil_env_t* env, + axis2_conf_ctx_t* conf_ctx); + ~Axis2QpidReceiverListener(void); + + private: + virtual void received(Message& message); + + const axutil_env_t* env; + axis2_conf_ctx_t* conf_ctx; +}; + +#endif diff --git a/src/core/transport/amqp/receiver/qpid_receiver/request_processor/Makefile.am b/src/core/transport/amqp/receiver/qpid_receiver/request_processor/Makefile.am new file mode 100644 index 0000000..77cac4a --- /dev/null +++ b/src/core/transport/amqp/receiver/qpid_receiver/request_processor/Makefile.am @@ -0,0 +1,20 @@ +lib_LTLIBRARIES = libaxis2_amqp_request_processor.la + +libaxis2_amqp_request_processor_la_SOURCES = axis2_amqp_request_processor.c + +libaxis2_amqp_request_processor_la_LIBADD = $(top_builddir)/util/src/libaxutil.la \ + $(top_builddir)/src/core/transport/amqp/util/libaxis2_amqp_util.la + +libaxis2_amqp_request_processor_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/transport/amqp/receiver/qpid_receiver/request_processor \ + -I$(top_builddir)/src/core/transport/amqp/util \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include + diff --git a/src/core/transport/amqp/receiver/qpid_receiver/request_processor/axis2_amqp_request_processor.c b/src/core/transport/amqp/receiver/qpid_receiver/request_processor/axis2_amqp_request_processor.c new file mode 100644 index 0000000..0e0c9f8 --- /dev/null +++ b/src/core/transport/amqp/receiver/qpid_receiver/request_processor/axis2_amqp_request_processor.c @@ -0,0 +1,334 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void* AXIS2_THREAD_FUNC +axis2_amqp_request_processor_thread_function( + axutil_thread_t* thread, + void* request_data) +{ + axis2_status_t status = AXIS2_FAILURE; + axutil_env_t* env = NULL; + axutil_env_t* thread_env = NULL; + axis2_amqp_request_processor_resource_pack_t* request_resource_pack = NULL; + +#ifndef WIN32 +#ifdef AXIS2_SVR_MULTI_THREADED + signal(SIGPIPE, SIG_IGN); +#endif +#endif + + request_resource_pack = (axis2_amqp_request_processor_resource_pack_t*)request_data; + + env = request_resource_pack->env; + thread_env = axutil_init_thread_env(env); + + /* Process Request */ + status = axis2_amqp_process_request(thread_env, request_resource_pack); + + if(status == AXIS2_SUCCESS) + { + AXIS2_LOG_INFO(thread_env->log, "Request Processed Successfully"); + } + else + { + AXIS2_LOG_WARNING(thread_env->log, AXIS2_LOG_SI, "Error while Processing Request"); + } + + AXIS2_FREE(thread_env->allocator, request_resource_pack->request_content); + AXIS2_FREE(thread_env->allocator, request_resource_pack->reply_to); + AXIS2_FREE(thread_env->allocator, request_resource_pack->content_type); + AXIS2_FREE(thread_env->allocator, request_resource_pack->soap_action); + + AXIS2_FREE(thread_env->allocator, request_resource_pack); + + if(thread_env) + { + thread_env = NULL; + } + +#ifdef AXIS2_SVR_MULTI_THREADED + axutil_thread_pool_exit_thread(env->thread_pool, thread); +#endif + + return NULL; +} + +axis2_status_t +axis2_amqp_process_request( + const axutil_env_t* env, + axis2_amqp_request_processor_resource_pack_t* request_resource_pack) +{ + axiom_xml_reader_t* xml_reader = NULL; + axiom_stax_builder_t* stax_builder = NULL; + axiom_soap_builder_t* soap_builder = NULL; + axis2_transport_out_desc_t* out_desc = NULL; + axis2_transport_in_desc_t* in_desc = NULL; + axis2_msg_ctx_t* msg_ctx = NULL; + axiom_soap_envelope_t* soap_envelope = NULL; + axis2_engine_t* engine = NULL; + const axis2_char_t* soap_ns_uri = NULL; + axis2_bool_t is_soap_11 = AXIS2_FALSE; + axis2_char_t *soap_body_str = NULL; + int soap_body_len = 0; + axis2_bool_t is_mtom = AXIS2_FALSE; + axis2_status_t status = AXIS2_FAILURE; + axutil_hash_t *binary_data_map = NULL; + axiom_soap_body_t *soap_body = NULL; + axutil_property_t* reply_to_property = NULL; + + /* Create msg_ctx */ + if(!request_resource_pack->conf_ctx) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Conf Context not Available"); + return AXIS2_FAILURE; + } + + out_desc = axis2_conf_get_transport_out(axis2_conf_ctx_get_conf( + request_resource_pack->conf_ctx, env), env, AXIS2_TRANSPORT_ENUM_AMQP); + if(!out_desc) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Transport Out Descriptor not Found"); + return AXIS2_FAILURE; + } + + in_desc = axis2_conf_get_transport_in(axis2_conf_ctx_get_conf(request_resource_pack->conf_ctx, + env), env, AXIS2_TRANSPORT_ENUM_AMQP); + if(!in_desc) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Transport In Descriptor not Found"); + return AXIS2_FAILURE; + } + + /* Create msg_ctx */ + msg_ctx = axis2_msg_ctx_create(env, request_resource_pack->conf_ctx, in_desc, out_desc); + + axis2_msg_ctx_set_server_side(msg_ctx, env, AXIS2_TRUE); + + /* Handle MTOM */ + if(strstr(request_resource_pack->content_type, AXIS2_AMQP_HEADER_ACCEPT_MULTIPART_RELATED)) + { + axis2_char_t* mime_boundary = axis2_amqp_util_get_value_from_content_type(env, + request_resource_pack->content_type, AXIS2_AMQP_HEADER_CONTENT_TYPE_MIME_BOUNDARY); + + if(mime_boundary) + { + axiom_mime_parser_t *mime_parser = NULL; + int soap_body_len = 0; + axutil_param_t *buffer_size_param = NULL; + axutil_param_t *max_buffers_param = NULL; + axutil_param_t *attachment_dir_param = NULL; + axis2_char_t *value_size = NULL; + axis2_char_t *value_num = NULL; + axis2_char_t *value_dir = NULL; + int size = 0; + int num = 0; + + mime_parser = axiom_mime_parser_create(env); + + buffer_size_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_MTOM_BUFFER_SIZE); + if(buffer_size_param) + { + value_size = (axis2_char_t*)axutil_param_get_value(buffer_size_param, env); + if(value_size) + { + size = atoi(value_size); + axiom_mime_parser_set_buffer_size(mime_parser, env, size); + } + } + + max_buffers_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_MTOM_MAX_BUFFERS); + if(max_buffers_param) + { + value_num = (axis2_char_t*)axutil_param_get_value(max_buffers_param, env); + if(value_num) + { + num = atoi(value_num); + axiom_mime_parser_set_max_buffers(mime_parser, env, num); + } + } + + /* If this paramter is there mime_parser will cached the attachment + * using to the directory for large attachments. */ + attachment_dir_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_ATTACHMENT_DIR); + if(attachment_dir_param) + { + value_dir = (axis2_char_t*)axutil_param_get_value(attachment_dir_param, env); + if(value_dir) + { + axiom_mime_parser_set_attachment_dir(mime_parser, env, value_dir); + } + } + + if(mime_parser) + { + axis2_callback_info_t *callback_ctx = NULL; + axutil_stream_t *stream = NULL; + + callback_ctx = AXIS2_MALLOC(env->allocator, sizeof(axis2_callback_info_t)); + + stream = axutil_stream_create_basic(env); + if(stream) + { + axutil_stream_write(stream, env, request_resource_pack->request_content, + request_resource_pack->content_length); + callback_ctx->env = env; + callback_ctx->in_stream = stream; + callback_ctx->content_length = request_resource_pack->content_length; + callback_ctx->unread_len = request_resource_pack->content_length; + callback_ctx->chunked_stream = NULL; + } + + /*binary_data_map = + axiom_mime_parser_parse(mime_parser, env, + axis2_amqp_util_on_data_request, + (void*)callback_ctx, + mime_boundary);*/ + if(!binary_data_map) + { + return AXIS2_FAILURE; + } + + soap_body_str = axiom_mime_parser_get_soap_body_str(mime_parser, env); + soap_body_len = axiom_mime_parser_get_soap_body_len(mime_parser, env); + + axutil_stream_free(stream, env); + AXIS2_FREE(env->allocator, callback_ctx); + axiom_mime_parser_free(mime_parser, env); + } + + AXIS2_FREE(env->allocator, mime_boundary); + } + + is_mtom = AXIS2_TRUE; + } + else + { + soap_body_str = request_resource_pack->request_content; + soap_body_len = request_resource_pack->content_length; + } + + soap_body_len = axutil_strlen(soap_body_str); + + xml_reader = axiom_xml_reader_create_for_memory(env, soap_body_str, soap_body_len, NULL, + AXIS2_XML_PARSER_TYPE_BUFFER); + if(!xml_reader) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to Create XML Reader"); + return AXIS2_FAILURE; + } + + stax_builder = axiom_stax_builder_create(env, xml_reader); + if(!stax_builder) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to Create StAX Builder"); + return AXIS2_FAILURE; + } + + soap_ns_uri = AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + + if(request_resource_pack->content_type) + { + if(strstr(request_resource_pack->content_type, AXIS2_AMQP_HEADER_ACCEPT_TEXT_XML)) + { + is_soap_11 = AXIS2_TRUE; + soap_ns_uri = AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI; + } + /*if (strstr(request_resource_pack->content_type, AXIS2_AMQP_HEADER_ACCEPT_APPL_SOAP)) + { + is_soap_11 = AXIS2_FALSE; + soap_ns_uri = AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + } + else if (strstr(request_resource_pack->content_type, AXIS2_AMQP_HEADER_ACCEPT_TEXT_XML)) + { + is_soap_11 = AXIS2_TRUE; + soap_ns_uri = AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI; + }*/ + } + + soap_builder = axiom_soap_builder_create(env, stax_builder, soap_ns_uri); + if(!soap_builder) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to Create SOAP Builder"); + return AXIS2_FAILURE; + } + + if(binary_data_map) + { + axiom_soap_builder_set_mime_body_parts(soap_builder, env, binary_data_map); + } + + soap_envelope = axiom_soap_builder_get_soap_envelope(soap_builder, env); + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, soap_envelope); + + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + + if(!soap_body) + { + return AXIS2_FAILURE; + } + + /* SOAPAction */ + if(request_resource_pack->soap_action) + { + axis2_msg_ctx_set_soap_action(msg_ctx, env, axutil_string_create(env, + request_resource_pack->soap_action)); + } + + /* SOAP version */ + axis2_msg_ctx_set_is_soap_11(msg_ctx, env, is_soap_11); + + /* Set ReplyTo in the msg_ctx as a property. This is used by the server when + * 1. WS-A is not in use + * 2. ReplyTo is an anonymous EPR - Sandesha2/Dual-channel */ + reply_to_property = axutil_property_create_with_args(env, AXIS2_SCOPE_REQUEST, 0, 0, + (void*)request_resource_pack->reply_to); + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_AMQP_MSG_CTX_PROPERTY_REPLY_TO, + reply_to_property); + + engine = axis2_engine_create(env, request_resource_pack->conf_ctx); + + if(AXIS2_TRUE == axiom_soap_body_has_fault(soap_body, env)) + { + status = axis2_engine_receive_fault(engine, env, msg_ctx); + } + else + { + status = axis2_engine_receive(engine, env, msg_ctx); + } + + if(engine) + { + axis2_engine_free(engine, env); + } + + if(soap_body_str && is_mtom) + { + AXIS2_FREE(env->allocator, soap_body_str); + } + + return status; +} diff --git a/src/core/transport/amqp/receiver/qpid_receiver/request_processor/axis2_amqp_request_processor.h b/src/core/transport/amqp/receiver/qpid_receiver/request_processor/axis2_amqp_request_processor.h new file mode 100644 index 0000000..97f13b2 --- /dev/null +++ b/src/core/transport/amqp/receiver/qpid_receiver/request_processor/axis2_amqp_request_processor.h @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_AMQP_REQUEST_PROCESSOR_H +#define AXIS2_AMQP_REQUEST_PROCESSOR_H + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axis2_amqp_request_processor_resource_pack + { + axutil_env_t* env; + axis2_conf_ctx_t* conf_ctx; + axis2_char_t* request_content; + int content_length; + axis2_char_t* reply_to; + axis2_char_t* content_type; + axis2_char_t* soap_action; + } axis2_amqp_request_processor_resource_pack_t; + + /* The worker thread function */ + void* AXIS2_THREAD_FUNC + axis2_amqp_request_processor_thread_function( + axutil_thread_t* thread, + void* request_data); + + axis2_status_t + axis2_amqp_process_request( + const axutil_env_t* env, + axis2_amqp_request_processor_resource_pack_t* request_resource_pack); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/core/transport/amqp/sender/Makefile.am b/src/core/transport/amqp/sender/Makefile.am new file mode 100644 index 0000000..8af0c7b --- /dev/null +++ b/src/core/transport/amqp/sender/Makefile.am @@ -0,0 +1,26 @@ +SUBDIRS = qpid_sender + +lib_LTLIBRARIES = libaxis2_amqp_sender.la + +libaxis2_amqp_sender_la_SOURCES = axis2_amqp_sender.c + +libaxis2_amqp_sender_la_LIBADD = $(top_builddir)/util/src/libaxutil.la \ + $(top_builddir)/src/core/transport/amqp/util/libaxis2_amqp_util.la \ + $(top_builddir)/src/core/transport/amqp/sender/qpid_sender/libaxis2_qpid_sender.la + +libaxis2_amqp_sender_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/transport/amqp/util \ + -I$(top_builddir)/src/core/transport/amqp/receiver \ + -I$(top_builddir)/src/core/transport/amqp/receiver/qpid_receiver \ + -I$(top_builddir)/src/core/transport/amqp/sender \ + -I$(top_builddir)/src/core/transport/amqp/sender/qpid_sender \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include + diff --git a/src/core/transport/amqp/sender/axis2_amqp_sender.c b/src/core/transport/amqp/sender/axis2_amqp_sender.c new file mode 100644 index 0000000..aae5496 --- /dev/null +++ b/src/core/transport/amqp/sender/axis2_amqp_sender.c @@ -0,0 +1,344 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +static const axis2_transport_sender_ops_t amqp_sender_ops = +{ + axis2_amqp_sender_init, + axis2_amqp_sender_invoke, + axis2_amqp_sender_clean_up, + axis2_amqp_sender_free +}; + +AXIS2_EXTERN axis2_transport_sender_t* AXIS2_CALL +axis2_amqp_sender_create( + const axutil_env_t* env) +{ + AXIS2_ENV_CHECK(env, NULL); + + axis2_amqp_sender_resource_pack_t* sender_resource_pack = NULL; + + sender_resource_pack = (axis2_amqp_sender_resource_pack_t*)AXIS2_MALLOC(env->allocator, + sizeof(axis2_amqp_sender_resource_pack_t)); + + if(!sender_resource_pack) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + sender_resource_pack->sender.ops = &amqp_sender_ops; + sender_resource_pack->conf_ctx = NULL; + + return &(sender_resource_pack->sender); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_amqp_sender_init( + axis2_transport_sender_t* sender, + const axutil_env_t* env, + axis2_conf_ctx_t* conf_ctx, + axis2_transport_out_desc_t* out_desc) +{ + axis2_amqp_sender_resource_pack_t* sender_resource_pack = NULL; + axutil_property_t* property = NULL; + int* request_timeout = (int*)AXIS2_MALLOC(env->allocator, sizeof(int)); + *request_timeout = AXIS2_QPID_NULL_CONF_INT; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + sender_resource_pack = AXIS2_AMQP_SENDER_TO_RESOURCE_PACK(sender); + sender_resource_pack->conf_ctx = conf_ctx; + + /* Set request timeout */ + *request_timeout = axis2_amqp_util_get_out_desc_conf_value_int(out_desc, env, + AXIS2_AMQP_CONF_QPID_REQUEST_TIMEOUT); + if(*request_timeout == AXIS2_QPID_NULL_CONF_INT) + { + *request_timeout = AXIS2_QPID_DEFAULT_REQUEST_TIMEOUT; + } + property = axutil_property_create_with_args(env, AXIS2_SCOPE_APPLICATION, 0, 0, + (void*)request_timeout); + axis2_conf_ctx_set_property(sender_resource_pack->conf_ctx, env, + AXIS2_AMQP_CONF_CTX_PROPERTY_REQUEST_TIMEOUT, property); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_amqp_sender_invoke( + axis2_transport_sender_t* sender, + const axutil_env_t* env, + axis2_msg_ctx_t* msg_ctx) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + axiom_soap_envelope_t* request_soap_envelope = NULL; + axiom_xml_writer_t* xml_writer = NULL; + axiom_output_t* request_om_output = NULL; + axis2_char_t* request_content = NULL; + axis2_bool_t is_server = AXIS2_TRUE; + axis2_bool_t is_soap_11 = AXIS2_FALSE; + axutil_string_t* content_type = NULL; + const axis2_char_t* soap_action = NULL; + axis2_bool_t do_mtom = AXIS2_FALSE; + axis2_bool_t status = AXIS2_FAILURE; + + request_soap_envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + + xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + if(!xml_writer) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to Create XML Writer"); + return AXIS2_FAILURE; + } + + request_om_output = axiom_output_create(env, xml_writer); + if(!request_om_output) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to Create OM Output"); + axiom_xml_writer_free(xml_writer, env); + xml_writer = NULL; + return AXIS2_FAILURE; + } + + is_soap_11 = axis2_msg_ctx_get_is_soap_11(msg_ctx, env); + + /* Set SOAP version */ + axiom_output_set_soap11(request_om_output, env, is_soap_11); + + /* Content-Type */ + if(AXIS2_TRUE == is_soap_11) + { + /* SOAP1.1 */ + content_type = axutil_string_create(env, AXIS2_AMQP_HEADER_ACCEPT_TEXT_XML); + } + else + { + /* SOAP1.2 */ + content_type = axutil_string_create(env, AXIS2_AMQP_HEADER_ACCEPT_APPL_SOAP); + } + + /* SOAP action */ + soap_action = axutil_string_get_buffer(axis2_msg_ctx_get_soap_action(msg_ctx, env), env); + + if(!soap_action) + soap_action = ""; + + /* Handle MTOM */ + do_mtom = axis2_msg_ctx_get_doing_mtom(msg_ctx, env); + + axiom_output_set_do_optimize(request_om_output, env, do_mtom); + axiom_soap_envelope_serialize(request_soap_envelope, env, request_om_output, AXIS2_FALSE); + + if(do_mtom) + { + axis2_status_t mtom_status = AXIS2_FAILURE; + axutil_array_list_t* mime_parts = NULL; + + mtom_status = axiom_output_flush(request_om_output, env); + + if(mtom_status == AXIS2_SUCCESS) + { + mime_parts = axiom_output_get_mime_parts(request_om_output, env); + if(!mime_parts) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Unable to create the mime part list from request_om_output"); + + return AXIS2_FAILURE; + } + else + { + axis2_msg_ctx_set_mime_parts(msg_ctx, env, mime_parts); + } + } + + content_type = axutil_string_create(env, axiom_output_get_content_type(request_om_output, + env)); + } + + request_content = (axis2_char_t*)axiom_xml_writer_get_xml(xml_writer, env); + if(!request_content) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to Serialize the SOAP Envelope"); + return AXIS2_FAILURE; + } + + is_server = axis2_amqp_util_msg_ctx_get_server_side(msg_ctx, env); + + if(is_server) + { + status = axis2_qpid_send(request_content, env, axutil_string_get_buffer(content_type, env), + soap_action, msg_ctx); + } + else + { + if(AXIS2_TRUE == axis2_amqp_util_msg_ctx_get_use_separate_listener(msg_ctx, env)) /* Dual Channel */ + { + status = axis2_qpid_send(request_content, env, axutil_string_get_buffer(content_type, + env), soap_action, msg_ctx); + } + else + { + axis2_op_t* op = NULL; + const axis2_char_t* mep = NULL; + + op = axis2_msg_ctx_get_op(msg_ctx, env); + + if(op) + { + mep = axis2_op_get_msg_exchange_pattern(op, env); + } + + axis2_amqp_response_t* response = NULL; + response = axis2_qpid_send_receive(request_content, env, axutil_string_get_buffer( + content_type, env), soap_action, msg_ctx); + + if(response) + { + /* Create in stream */ + if(response->data) + { + axutil_stream_t* in_stream = NULL; + axutil_property_t* property = NULL; + + in_stream = axutil_stream_create_basic(env); + axutil_stream_write(in_stream, env, response->data, response->length); + + property = axutil_property_create(env); + axutil_property_set_scope(property, env, AXIS2_SCOPE_REQUEST); + axutil_property_set_free_func(property, env, axutil_stream_free_void_arg); + axutil_property_set_value(property, env, in_stream); + + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_TRANSPORT_IN, property); + } + + if(mep) + { + if(0 == axutil_strcmp(mep, AXIS2_MEP_URI_OUT_IN)) /* Out-In */ + { + axiom_soap_envelope_t* response_soap_envelope = NULL; + + response_soap_envelope = axis2_amqp_util_get_soap_envelope(response, env, + msg_ctx); + if(response_soap_envelope) + { + axis2_msg_ctx_set_response_soap_envelope(msg_ctx, env, + response_soap_envelope); + } + } + } + + status = AXIS2_SUCCESS; + + axis2_msg_ctx_set_status_code(msg_ctx, env, status); + + axis2_amqp_response_free(response, env); + } + else + { + if(mep) + { + if(axutil_strcmp(mep, AXIS2_MEP_URI_OUT_ONLY) == 0 || axutil_strcmp(mep, + AXIS2_MEP_URI_ROBUST_OUT_ONLY) == 0) /* One-way */ + { + status = AXIS2_SUCCESS; + + /* Set status code in msg_ctx */ + axis2_msg_ctx_set_status_code(msg_ctx, env, status); + } + } + } + } + } + + if(content_type) + axutil_string_free(content_type, env); + + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_amqp_sender_clean_up( + axis2_transport_sender_t* sender, + const axutil_env_t* env, + axis2_msg_ctx_t* msg_ctx) +{ + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_amqp_sender_free( + axis2_transport_sender_t* sender, + const axutil_env_t* env) +{ + AXIS2_ENV_CHECK(env, void); + + axis2_amqp_sender_resource_pack_t* sender_resource_pack = NULL; + sender_resource_pack = AXIS2_AMQP_SENDER_TO_RESOURCE_PACK(sender); + + AXIS2_FREE(env->allocator, sender_resource_pack); +} + +/* Library Exports */ + +AXIS2_EXPORT int +#ifndef AXIS2_STATIC_DEPLOY +axis2_get_instance( +#else + axis2_amqp_sender_get_instance( +#endif + struct axis2_transport_sender** inst, + const axutil_env_t* env) +{ + int status = AXIS2_SUCCESS; + + *inst = axis2_amqp_sender_create(env); + if(!(*inst)) + { + status = AXIS2_FAILURE; + } + + return status; +} + +AXIS2_EXPORT int +#ifndef AXIS2_STATIC_DEPLOY +axis2_remove_instance( +#else + axis2_amqp_sender_remove_instance( +#endif + axis2_transport_sender_t* inst, + const axutil_env_t* env) +{ + if(inst) + { + axis2_transport_sender_free(inst, env); + } + + return AXIS2_SUCCESS; +} + diff --git a/src/core/transport/amqp/sender/axis2_amqp_sender.h b/src/core/transport/amqp/sender/axis2_amqp_sender.h new file mode 100644 index 0000000..b523347 --- /dev/null +++ b/src/core/transport/amqp/sender/axis2_amqp_sender.h @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_AMQP_SENDER_H +#define AXIS2_AMQP_SENDER_H + +#include +#include +#include +#include + +typedef struct axis2_amqp_sender_resource_pack +{ + axis2_transport_sender_t sender; + axis2_conf_ctx_t* conf_ctx; +} +axis2_amqp_sender_resource_pack_t; + +#define AXIS2_AMQP_SENDER_TO_RESOURCE_PACK(amqp_sender) \ + ((axis2_amqp_sender_resource_pack_t*)(amqp_sender)) + +AXIS2_EXTERN axis2_transport_sender_t* AXIS2_CALL +axis2_amqp_sender_create(const axutil_env_t* env); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_amqp_sender_init( + axis2_transport_sender_t* sender, + const axutil_env_t* env, + axis2_conf_ctx_t* conf_ctx, + axis2_transport_out_desc_t* out_desc); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_amqp_sender_invoke( + axis2_transport_sender_t* sender, + const axutil_env_t* env, + axis2_msg_ctx_t* msg_ctx); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_amqp_sender_clean_up( + axis2_transport_sender_t* sender, + const axutil_env_t* env, + axis2_msg_ctx_t* msg_ctx); + +AXIS2_EXTERN void AXIS2_CALL +axis2_amqp_sender_free( + axis2_transport_sender_t* sender, + const axutil_env_t* env); + +#endif diff --git a/src/core/transport/amqp/sender/qpid_sender/Makefile.am b/src/core/transport/amqp/sender/qpid_sender/Makefile.am new file mode 100644 index 0000000..46dcb5e --- /dev/null +++ b/src/core/transport/amqp/sender/qpid_sender/Makefile.am @@ -0,0 +1,23 @@ +lib_LTLIBRARIES = libaxis2_qpid_sender.la + +libaxis2_qpid_sender_la_SOURCES = axis2_qpid_sender.cpp \ + axis2_qpid_sender_interface.cpp + +libaxis2_qpid_sender_la_LIBADD = $(top_builddir)/util/src/libaxutil.la \ + $(top_builddir)/src/core/transport/amqp/util/libaxis2_amqp_util.la \ + $(QPID_HOME)/lib/libqpidclient.la + +libaxis2_qpid_sender_la_LDFLAGS = g++ -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/transport/amqp/sender/qpid_sender \ + -I$(top_builddir)/src/core/transport/amqp/util \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include \ + -I$(QPID_HOME)/include + diff --git a/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender.cpp b/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender.cpp new file mode 100644 index 0000000..7f0799b --- /dev/null +++ b/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender.cpp @@ -0,0 +1,242 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * tcp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace qpid::client; +using namespace qpid::framing; + +Axis2QpidSender::Axis2QpidSender( + string qpidBrokerIP, + int qpidBrokerPort, + const axutil_env_t* env) +{ + this->qpidBrokerIP = qpidBrokerIP; + this->qpidBrokerPort = qpidBrokerPort; + this->env = env; + this->responseContent = ""; + this->responseContentType = ""; +} + +Axis2QpidSender::~Axis2QpidSender( + void) +{ +} + +bool +Axis2QpidSender::SendReceive( + string messageContent, + string toQueueName, + bool isSOAP11, + string contentType, + string soapAction, + axutil_array_list_t* mime_parts, + int timeout) +{ + bool status = false; + this->responseContent = ""; + this->responseContentType = ""; + + try + { + Connection connection; + connection.open(qpidBrokerIP, qpidBrokerPort); + + Session session = connection.newSession(); + + /* Declare Private Queue */ + string replyToQueueName = AXIS2_AMQP_TEMP_QUEUE_NAME_PREFIX; + replyToQueueName.append(axutil_uuid_gen(env)); + + session.queueDeclare(arg::queue = replyToQueueName, arg::autoDelete = true); + session.exchangeBind(arg::exchange = AXIS2_AMQP_EXCHANGE_DIRECT, arg::queue + = replyToQueueName, arg::bindingKey = replyToQueueName); + + /* Create Message */ + Message reqMessage; + + reqMessage.getDeliveryProperties().setRoutingKey(toQueueName); + reqMessage.getMessageProperties().setReplyTo(ReplyTo(AXIS2_AMQP_EXCHANGE_DIRECT, + replyToQueueName)); + + reqMessage.getHeaders().setString(AXIS2_AMQP_HEADER_CONTENT_TYPE, contentType); + reqMessage.getHeaders().setString(AXIS2_AMQP_HEADER_SOAP_ACTION, soapAction); + + if(mime_parts) + { + string mimeBody; + GetMimeBody(mime_parts, mimeBody); + + messageContent.clear();/* MIME parts include SOAP envelop */ + + messageContent.append(mimeBody); + } + + reqMessage.setData(messageContent); + + session.messageTransfer(arg::content = reqMessage, arg::destination + = AXIS2_AMQP_EXCHANGE_DIRECT); + + /* Create subscription manager */ + SubscriptionManager subscriptionManager(session); + + Message resMessage; + qpid::sys::Duration reqTimeout(timeout * AXIS2_AMQP_NANOSEC_PER_MILLISEC); + + if(subscriptionManager.get(resMessage, replyToQueueName, reqTimeout)) + { + responseContent = resMessage.getData(); + responseContentType = resMessage.getHeaders().getAsString( + AXIS2_AMQP_HEADER_CONTENT_TYPE); + + status = true; + } + + connection.close(); + } + catch(const std::exception& e) + { + } + + return status; +} + +bool +Axis2QpidSender::Send( + string messageContent, + string toQueueName, + string replyToQueueName, + bool isSOAP11, + string contentType, + string soapAction, + axutil_array_list_t* mime_parts) +{ + bool status = false; + + try + { + Connection connection; + connection.open(qpidBrokerIP, qpidBrokerPort); + + Session session = connection.newSession(); + + /* Create Message */ + Message message; + + message.getDeliveryProperties().setRoutingKey(toQueueName); + + if(!replyToQueueName.empty()) /* Client dual-channel */ + { + message.getMessageProperties().setReplyTo(ReplyTo(AXIS2_AMQP_EXCHANGE_DIRECT, + replyToQueueName)); + + session.queueDeclare(arg::queue = replyToQueueName); + session.exchangeBind(arg::exchange = AXIS2_AMQP_EXCHANGE_DIRECT, arg::queue + = replyToQueueName, arg::bindingKey = replyToQueueName); + } + + message.getHeaders().setString(AXIS2_AMQP_HEADER_CONTENT_TYPE, contentType); + message.getHeaders().setString(AXIS2_AMQP_HEADER_SOAP_ACTION, soapAction); + + if(mime_parts) + { + string mimeBody; + GetMimeBody(mime_parts, mimeBody); + + messageContent.clear();/* MIME parts include SOAP envelop */ + + messageContent.append(mimeBody); + } + + message.setData(messageContent); + + session.messageTransfer(arg::content = message, arg::destination + = AXIS2_AMQP_EXCHANGE_DIRECT); + + connection.close(); + + status = true; + } + catch(const std::exception& e) + { + } + + return status; +} + +void +Axis2QpidSender::GetMimeBody( + axutil_array_list_t* mime_parts, + string& mimeBody) +{ + int i = 0; + axiom_mime_part_t *mime_part = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + if(!mime_parts) + return; + + for(i = 0; i < axutil_array_list_size(mime_parts, env); i++) + { + mime_part = (axiom_mime_part_t *)axutil_array_list_get(mime_parts, env, i); + + if(mime_part->type == AXIOM_MIME_PART_BUFFER) + { + mimeBody.append(mime_part->part, mime_part->part_size); + } + else if(mime_part->type == AXIOM_MIME_PART_FILE) + { + int length; + char* buffer; + + ifstream file; + file.open(mime_part->file_name, ios::binary); + + file.seekg(0, ios::end); + length = file.tellg(); + file.seekg(0, ios::beg); + + buffer = new char[length]; + + file.read(buffer, length); + file.close(); + + mimeBody.append(buffer, length); + + delete[] buffer; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Unknown mime type"); + return; + } + + if(status == AXIS2_FAILURE) + { + break; + } + } +} diff --git a/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender.h b/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender.h new file mode 100644 index 0000000..8c94cfa --- /dev/null +++ b/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender.h @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * tcp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_QPID_SENDER_H +#define AXIS2_QPID_SENDER_H + +#include +#include +#include + +using std::string; + +class Axis2QpidSender +{ + public: + Axis2QpidSender(string qpidBrokerIP, int qpidBrokerPort, const axutil_env_t* env); + ~Axis2QpidSender(void); + + bool SendReceive(string messageContent, string toQueueName, bool isSOAP11, + string contentType, string soapAction, axutil_array_list_t* mime_parts, int timeout); + bool Send(string messageContent, string toQueueName, string replyToQueueName, bool isSOAP11, + string contentType, string soapAction, axutil_array_list_t* mime_parts); + + string responseContent; + string responseContentType; + + private: + void GetMimeBody(axutil_array_list_t* mime_parts, string& mimeBody); + + string qpidBrokerIP; + int qpidBrokerPort; + const axutil_env_t* env; +}; + +#endif diff --git a/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender_interface.cpp b/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender_interface.cpp new file mode 100644 index 0000000..ac4f51e --- /dev/null +++ b/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender_interface.cpp @@ -0,0 +1,130 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +AXIS2_EXTERN axis2_amqp_response_t* AXIS2_CALL +axis2_qpid_send_receive( + const axis2_char_t* request_content, + const axutil_env_t* env, + const axis2_char_t* content_type, + const axis2_char_t* soap_action, + axis2_msg_ctx_t* msg_ctx) +{ + axis2_amqp_destination_info_t* destination_info = NULL; + destination_info = axis2_amqp_util_msg_ctx_get_destination_info(msg_ctx, env); + + if (!destination_info || !destination_info->broker_ip || + !destination_info->broker_port || !destination_info->queue_name) + { + return NULL; + } + + axis2_bool_t is_soap_11 = axis2_msg_ctx_get_is_soap_11(msg_ctx, env); + axutil_array_list_t* mime_parts = axis2_msg_ctx_get_mime_parts(msg_ctx, env); + int timeout = axis2_amqp_util_msg_ctx_get_request_timeout(msg_ctx, env); + + /* Get Response */ + Axis2QpidSender qpid_sender(destination_info->broker_ip, + destination_info->broker_port, env); + + bool status = qpid_sender.SendReceive(request_content, destination_info->queue_name, + is_soap_11, content_type, soap_action, mime_parts, timeout); + + axis2_amqp_destination_info_free(destination_info, env); + + if (!status) + { + return NULL; + } + + /* Create response */ + axis2_amqp_response_t* response = (axis2_amqp_response_t*)AXIS2_MALLOC( + env->allocator, sizeof(axis2_amqp_response_t)); + + /* Data */ + response->data = AXIS2_MALLOC(env->allocator, qpid_sender.responseContent.size()); + memcpy(response->data, qpid_sender.responseContent.c_str(), + qpid_sender.responseContent.size()); + + /* Length */ + response->length = qpid_sender.responseContent.size(); + + /* ContentType */ + response->content_type = (axis2_char_t*)AXIS2_MALLOC( + env->allocator, qpid_sender.responseContentType.size() + 1); + strcpy(response->content_type, qpid_sender.responseContentType.c_str()); + + return response; +} + + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_qpid_send( + const axis2_char_t* request_content, + const axutil_env_t* env, + const axis2_char_t* content_type, + const axis2_char_t* soap_action, + axis2_msg_ctx_t* msg_ctx) +{ + axis2_amqp_destination_info_t* destination_info = NULL; + axis2_status_t status = AXIS2_FAILURE; + string reply_to_queue_name = ""; + + destination_info = axis2_amqp_util_msg_ctx_get_destination_info(msg_ctx, env); + + if (!destination_info || !destination_info->broker_ip || + !destination_info->broker_port || !destination_info->queue_name) + { + return AXIS2_FAILURE; + } + + axis2_bool_t is_soap_11 = axis2_msg_ctx_get_is_soap_11(msg_ctx, env); + axutil_array_list_t* mime_parts = axis2_msg_ctx_get_mime_parts(msg_ctx, env); + + /* If client side, find reply_to_queue_name */ + if (!axis2_msg_ctx_get_server_side(msg_ctx, env)) + { + axis2_conf_ctx_t* conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + + axis2_char_t* queue_name = + axis2_amqp_util_conf_ctx_get_dual_channel_queue_name(conf_ctx, env); + if (queue_name) + reply_to_queue_name = queue_name; + } + + Axis2QpidSender qpid_sender(destination_info->broker_ip, + destination_info->broker_port, env); + + status = qpid_sender.Send(request_content, destination_info->queue_name, + reply_to_queue_name, is_soap_11, content_type, soap_action, mime_parts); + + axis2_amqp_destination_info_free(destination_info, env); + + return status; +} + +#ifdef __cplusplus +} +#endif diff --git a/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender_interface.h b/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender_interface.h new file mode 100644 index 0000000..94e232f --- /dev/null +++ b/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender_interface.h @@ -0,0 +1,50 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_QPID_SENDER_INTERFACE_H +#define AXIS2_QPID_SENDER_INTERFACE_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +AXIS2_EXTERN axis2_amqp_response_t* AXIS2_CALL +axis2_qpid_send_receive( + const axis2_char_t* request_content, + const axutil_env_t* env, + const axis2_char_t* content_type, + const axis2_char_t* soap_action, + axis2_msg_ctx_t* msg_ctx); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_qpid_send( + const axis2_char_t* request_content, + const axutil_env_t* env, + const axis2_char_t* content_type, + const axis2_char_t* soap_action, + axis2_msg_ctx_t* msg_ctx); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/core/transport/amqp/server/Makefile.am b/src/core/transport/amqp/server/Makefile.am new file mode 100644 index 0000000..2de6967 --- /dev/null +++ b/src/core/transport/amqp/server/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = axis2_amqp_server diff --git a/src/core/transport/amqp/server/axis2_amqp_server/Makefile.am b/src/core/transport/amqp/server/axis2_amqp_server/Makefile.am new file mode 100644 index 0000000..643827f --- /dev/null +++ b/src/core/transport/amqp/server/axis2_amqp_server/Makefile.am @@ -0,0 +1,33 @@ +prgbindir = $(bindir) + +prgbin_PROGRAMS = axis2_amqp_server + +AM_CFLAGS = -g -pthread + +axis2_amqp_server_SOURCES = axis2_amqp_server.c + +axis2_amqp_server_LDADD = $(LDFLAGS) \ + $(top_builddir)/axiom/src/om/libaxis2_axiom.la \ + $(top_builddir)/util/src/libaxutil.la \ + $(top_builddir)/axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + $(top_builddir)/src/core/description/libaxis2_description.la \ + $(top_builddir)/src/core/deployment/libaxis2_deployment.la \ + $(top_builddir)/src/core/context/libaxis2_context.la \ + $(top_builddir)/src/core/clientapi/libaxis2_clientapi.la \ + $(top_builddir)/src/core/engine/libaxis2_engine.la \ + $(top_builddir)/neethi/src/libneethi.la \ + $(top_builddir)/src/core/transport/amqp/receiver/libaxis2_amqp_receiver.la \ + $(top_builddir)/src/core/transport/amqp/util/libaxis2_amqp_util.la \ + -lpthread + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/deploymenti \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/transport/amqp/receiver \ + -I$(top_builddir)/src/core/transport/amqp/receiver/qpid_receiver \ + -I$(top_builddir)/src/core/transport/amqp/util \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include diff --git a/src/core/transport/amqp/server/axis2_amqp_server/axis2_amqp_server.c b/src/core/transport/amqp/server/axis2_amqp_server/axis2_amqp_server.c new file mode 100644 index 0000000..9f69283 --- /dev/null +++ b/src/core/transport/amqp/server/axis2_amqp_server/axis2_amqp_server.c @@ -0,0 +1,232 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * tcp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +axis2_transport_receiver_t* receiver = NULL; +axutil_env_t* server_env = NULL; + +axutil_env_t* +init_server_env( + axutil_allocator_t* allocator, + const axis2_char_t* log_file_name) +{ + axutil_error_t* error = axutil_error_create(allocator); + axutil_log_t* log = axutil_log_create(allocator, NULL, log_file_name); + axutil_thread_pool_t* thread_pool = axutil_thread_pool_init(allocator); + axutil_env_t* env = axutil_env_create_with_error_log_thread_pool(allocator, error, log, + thread_pool); + + axiom_xml_reader_init(); + + return env; +} + +void +server_exit( + int status) +{ + if(receiver) + { + axis2_transport_receiver_free(receiver, server_env); + } + + if(server_env) + { + axutil_env_free(server_env); + } + + axiom_xml_reader_cleanup(); + + exit(status); +} + +void +show_usage( + axis2_char_t* prog_name) +{ + fprintf(stdout, "\n Usage : %s", prog_name); + fprintf(stdout, " [-i QPID_BROKER_IP]"); + fprintf(stdout, " [-p QPID_BROKER_PORT]"); + fprintf(stdout, " [-r REPO_PATH]"); + fprintf(stdout, " [-l LOG_LEVEL]"); + fprintf(stdout, " [-f LOG_FILE]\n"); + fprintf(stdout, " [-s LOG_FILE_SIZE]\n"); + fprintf(stdout, " Options :\n"); + fprintf(stdout, "\t-i QPID_BROKER_IP \t Qpid broker IP, default is 127.0.0.1\n"); + fprintf(stdout, + "\t-p QPID_BROKER_PORT \t the port on which the Qpid broker listens, default is 5672\n"); + fprintf(stdout, "\t-r REPO_PATH \t\t repository path, default is ../\n"); + fprintf(stdout, "\t-l LOG_LEVEL\t\t log level, available log levels:" + "\n\t\t\t\t\t 0 - critical 1 - errors 2 - warnings" + "\n\t\t\t\t\t 3 - information 4 - debug 5- user 6 - trace" + "\n\t\t\t\t\t Default log level is 4(debug).\n"); +#ifndef WIN32 + fprintf(stdout, "\t-f LOG_FILE\t\t log file, default is $AXIS2C_HOME/logs/axis2.log" + "\n\t\t\t\t or axis2.log in current folder if AXIS2C_HOME not set\n"); +#else + fprintf(stdout, + "\t-f LOG_FILE\t\t log file, default is %%AXIS2C_HOME%%\\logs\\axis2.log" + "\n\t\t\t\t or axis2.log in current folder if AXIS2C_HOME not set\n"); +#endif + fprintf(stdout, + "\t-s LOG_FILE_SIZE\t Maximum log file size in mega bytes, default maximum size is 1MB.\n"); + fprintf(stdout, " Help :\n\t-h \t\t\t display this help screen.\n\n"); +} + +#ifndef WIN32 + +void +sig_handler( + int signal) +{ + switch(signal) + { + case SIGINT: + AXIS2_LOG_INFO(server_env->log, "Received signal SIGINT.Server shutting down"); + axis2_amqp_receiver_stop(receiver, server_env); + AXIS2_LOG_INFO(server_env->log, "Shutdown complete ..."); + + server_exit(0); + + case SIGPIPE: + AXIS2_LOG_INFO(server_env->log, "Received signal SIGPIPE.Client request serve aborted"); + return; + + case SIGSEGV: + fprintf(stderr, "Received deadly signal SIGSEGV. Terminating ...\n"); + _exit(-1); + } +} + +#endif + +int +main( + int argc, + char* argv[]) +{ + axutil_allocator_t* allocator = NULL; + extern char* optarg; + extern int optopt; + int c; + const axis2_char_t* qpid_broker_ip = NULL; + int qpid_broker_port = AXIS2_QPID_NULL_CONF_INT; + const axis2_char_t* repo_path = AXIS2_AMQP_SERVER_REPO_PATH; + axutil_log_levels_t log_level = AXIS2_LOG_LEVEL_DEBUG; + const axis2_char_t* log_file_name = AXIS2_AMQP_SERVER_LOG_FILE_NAME; + int log_file_size = AXUTIL_LOG_FILE_SIZE; + + while((c = AXIS2_GETOPT(argc, argv, "i:p:r:l:f:s:h")) != -1) + { + switch(c) + { + case 'i': + qpid_broker_ip = optarg; + break; + + case 'p': + qpid_broker_port = AXIS2_ATOI(optarg); + break; + + case 'r': + repo_path = optarg; + break; + + case 'l': + log_level = AXIS2_ATOI(optarg); + if(log_level < AXIS2_LOG_LEVEL_CRITICAL) + log_level = AXIS2_LOG_LEVEL_CRITICAL; + if(log_level > AXIS2_LOG_LEVEL_TRACE) + log_level = AXIS2_LOG_LEVEL_TRACE; + break; + + case 'f': + log_file_name = optarg; + break; + + case 's': + log_file_size = 1024 * 1024 * AXIS2_ATOI(optarg); + break; + + case 'h': + show_usage(argv[0]); + return 0; + + case ':': + fprintf(stderr, "\nOption -%c requires an operand\n", optopt); + show_usage(argv[0]); + return -1; + + case '?': + if(isprint(optopt)) + fprintf(stderr, "\nUnknown option `-%c'.\n", optopt); + show_usage(argv[0]); + return -1; + } + } + + allocator = axutil_allocator_init(NULL); + if(!allocator) + { + server_exit(-1); + } + + server_env = init_server_env(allocator, log_file_name); + server_env->log->level = log_level; + server_env->log->size = log_file_size; + + axutil_error_init(); + +#ifndef WIN32 + signal(SIGINT, sig_handler); + signal(SIGPIPE, sig_handler); +#endif + + AXIS2_LOG_INFO(server_env->log, "Starting Axis2 AMQP Server ..."); + AXIS2_LOG_INFO(server_env->log, "Repo Location : %s", repo_path); + + receiver = axis2_amqp_receiver_create(server_env, repo_path, qpid_broker_ip, qpid_broker_port); + if(!receiver) + { + AXIS2_LOG_ERROR(server_env->log, AXIS2_LOG_SI, + "Server creation failed: Error code:" " %d :: %s", server_env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(server_env->error)); + server_exit(-1); + } + + if(axis2_amqp_receiver_start(receiver, server_env) == AXIS2_FAILURE) + { + AXIS2_LOG_ERROR(server_env->log, AXIS2_LOG_SI, + "Server start failed: Error code:" " %d :: %s", server_env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(server_env->error)); + server_exit(-1); + } + + return 0; +} diff --git a/src/core/transport/amqp/server/axis2_amqp_server/axis2_amqp_server.h b/src/core/transport/amqp/server/axis2_amqp_server/axis2_amqp_server.h new file mode 100644 index 0000000..82a200e --- /dev/null +++ b/src/core/transport/amqp/server/axis2_amqp_server/axis2_amqp_server.h @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * tcp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_AMQP_SERVER_H +#define AXIS2_AMQP_SERVER_H + +#include +#include + +axutil_env_t* +init_server_env(axutil_allocator_t* allocator, + const axis2_char_t* log_file_name); + +void +server_exit(int status); + +void +show_usage(axis2_char_t* prog_name); + +#ifndef WIN32 + +void +sig_handler(int signal); + +#endif + +#endif diff --git a/src/core/transport/amqp/util/Makefile.am b/src/core/transport/amqp/util/Makefile.am new file mode 100644 index 0000000..2b27d76 --- /dev/null +++ b/src/core/transport/amqp/util/Makefile.am @@ -0,0 +1,18 @@ +lib_LTLIBRARIES = libaxis2_amqp_util.la + +libaxis2_amqp_util_la_SOURCES = axis2_amqp_util.c + +libaxis2_amqp_util_la_LIBADD = $(top_builddir)/util/src/libaxutil.la + +libaxis2_amqp_util_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/transport/amqp/util \ + -I$(top_builddir)/src/core/transport/amqp/sender/qpid_sender \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include + diff --git a/src/core/transport/amqp/util/axis2_amqp_defines.h b/src/core/transport/amqp/util/axis2_amqp_defines.h new file mode 100644 index 0000000..a892e9e --- /dev/null +++ b/src/core/transport/amqp/util/axis2_amqp_defines.h @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_AMQP_DEFINES_H +#define AXIS2_AMQP_DEFINES_H + +#include + +#define AXIS2_AMQP_EXCHANGE_DIRECT "amq.direct" + +#define AXIS2_AMQP_CONF_QPID_BROKER_IP "qpid_broker_ip" +#define AXIS2_AMQP_CONF_QPID_BROKER_PORT "qpid_broker_port" +#define AXIS2_AMQP_CONF_QPID_REQUEST_TIMEOUT "request_timeout" + +#define AXIS2_QPID_DEFAULT_BROKER_IP "127.0.0.1" +#define AXIS2_QPID_DEFAULT_BROKER_PORT 5672 +#define AXIS2_QPID_DEFAULT_REQUEST_TIMEOUT 500 +#define AXIS2_QPID_NULL_CONF_INT -1 + +#define AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_IP "qpid_broker_ip" +#define AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_PORT "qpid_broker_port" +#define AXIS2_AMQP_CONF_CTX_PROPERTY_REQUEST_TIMEOUT "request_timeout" +#define AXIS2_AMQP_CONF_CTX_PROPERTY_QUEUE_NAME "queue_name" + +#define AXIS2_AMQP_MSG_CTX_PROPERTY_REPLY_TO "qpid_reply_to" + +#define AXIS2_AMQP_HEADER_ACCEPT_TEXT_XML "text/xml" +#define AXIS2_AMQP_HEADER_ACCEPT_APPL_SOAP "application/soap+xml" +#define AXIS2_AMQP_HEADER_ACCEPT_MULTIPART_RELATED AXIOM_MIME_TYPE_MULTIPART_RELATED +#define AXIS2_AMQP_HEADER_CONTENT_TYPE_MIME_BOUNDARY "boundary" +#define AXIS2_AMQP_HEADER_SOAP_ACTION "SOAPAction" +#define AXIS2_AMQP_HEADER_CONTENT_TYPE "Content-Type" + +#define AXIS2_AMQP_TEMP_QUEUE_NAME_PREFIX "TempQueue" + +#define AXIS2_AMQP_SERVER_LOG_FILE_NAME "axis2_amqp_server.log" +#define AXIS2_AMQP_SERVER_REPO_PATH "../" + +#define AXIS2_AMQP_EPR_PREFIX "amqp:" +#define AXIS2_AMQP_EPR_SERVICE_PREFIX "services" +#define AXIS2_AMQP_EPR_ANON_SERVICE_NAME "__ANONYMOUS_SERVICE__" + +#define AXIS2_AMQP_EQ '=' +#define AXIS2_AMQP_SEMI_COLON ';' +#define AXIS2_AMQP_ESC_NULL '\0' +#define AXIS2_AMQP_DOUBLE_QUOTE '"' +#define AXIS2_AMQP_B_SLASH '\\' + +#define AXIS2_AMQP_NANOSEC_PER_MILLISEC 1000*1000 + +#endif diff --git a/src/core/transport/amqp/util/axis2_amqp_util.c b/src/core/transport/amqp/util/axis2_amqp_util.c new file mode 100644 index 0000000..cfef4a9 --- /dev/null +++ b/src/core/transport/amqp/util/axis2_amqp_util.c @@ -0,0 +1,823 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_amqp_util_get_in_desc_conf_value_string( + axis2_transport_in_desc_t* in_desc, + const axutil_env_t* env, + const axis2_char_t* param_name) +{ + axutil_param_t* param = NULL; + axis2_char_t* value = NULL; + + param = (axutil_param_t*)axutil_param_container_get_param( + axis2_transport_in_desc_param_container(in_desc, env), env, param_name); + if(param) + { + value = axutil_param_get_value(param, env); + } + + return value; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_amqp_util_get_in_desc_conf_value_int( + axis2_transport_in_desc_t* in_desc, + const axutil_env_t* env, + const axis2_char_t* param_name) +{ + axis2_char_t* value_str = NULL; + int value = AXIS2_QPID_NULL_CONF_INT; + + value_str = axis2_amqp_util_get_in_desc_conf_value_string(in_desc, env, param_name); + if(value_str) + { + value = atoi(value_str); + } + + return value; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_amqp_util_get_out_desc_conf_value_string( + axis2_transport_out_desc_t* out_desc, + const axutil_env_t* env, + const axis2_char_t* param_name) +{ + axutil_param_t* param = NULL; + axis2_char_t* value = NULL; + + param = (axutil_param_t*)axutil_param_container_get_param( + axis2_transport_out_desc_param_container(out_desc, env), env, param_name); + if(param) + { + value = axutil_param_get_value(param, env); + } + + return value; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_amqp_util_get_out_desc_conf_value_int( + axis2_transport_out_desc_t* out_desc, + const axutil_env_t* env, + const axis2_char_t* param_name) +{ + axis2_char_t* value_str = NULL; + int value = AXIS2_QPID_NULL_CONF_INT; + + value_str = axis2_amqp_util_get_out_desc_conf_value_string(out_desc, env, param_name); + if(value_str) + { + value = atoi(value_str); + } + + return value; +} + +AXIS2_EXTERN axiom_soap_envelope_t* AXIS2_CALL +axis2_amqp_util_get_soap_envelope( + axis2_amqp_response_t* response, + const axutil_env_t* env, + axis2_msg_ctx_t* msg_ctx) +{ + axiom_xml_reader_t* xml_reader = NULL; + axiom_stax_builder_t* stax_builder = NULL; + axiom_soap_builder_t* soap_builder = NULL; + axiom_soap_envelope_t* soap_envelope = NULL; + const axis2_char_t* soap_ns_uri = NULL; + axis2_char_t *soap_body_str = NULL; + int soap_body_len = 0; + axis2_bool_t is_mtom = AXIS2_FALSE; + axutil_hash_t *binary_data_map = NULL; + axis2_bool_t is_soap_11 = AXIS2_FALSE; + + if(!response || !response->data || !response->content_type) + { + return NULL; + } + + is_soap_11 = axis2_msg_ctx_get_is_soap_11(msg_ctx, env); + + /* Handle MTOM */ + if(strstr(response->content_type, AXIS2_AMQP_HEADER_ACCEPT_MULTIPART_RELATED)) + { + axis2_char_t* mime_boundary = axis2_amqp_util_get_value_from_content_type(env, + response->content_type, AXIS2_AMQP_HEADER_CONTENT_TYPE_MIME_BOUNDARY); + + if(mime_boundary) + { + axiom_mime_parser_t *mime_parser = NULL; + int soap_body_len = 0; + axutil_param_t *buffer_size_param = NULL; + axutil_param_t *max_buffers_param = NULL; + axutil_param_t *attachment_dir_param = NULL; + axis2_char_t *value_size = NULL; + axis2_char_t *value_num = NULL; + axis2_char_t *value_dir = NULL; + int size = 0; + int num = 0; + + mime_parser = axiom_mime_parser_create(env); + + buffer_size_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_MTOM_BUFFER_SIZE); + + if(buffer_size_param) + { + value_size = (axis2_char_t *)axutil_param_get_value(buffer_size_param, env); + + if(value_size) + { + size = atoi(value_size); + axiom_mime_parser_set_buffer_size(mime_parser, env, size); + } + } + + max_buffers_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_MTOM_MAX_BUFFERS); + + if(max_buffers_param) + { + value_num = (axis2_char_t*)axutil_param_get_value(max_buffers_param, env); + + if(value_num) + { + num = atoi(value_num); + axiom_mime_parser_set_max_buffers(mime_parser, env, num); + } + } + + attachment_dir_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_ATTACHMENT_DIR); + + if(attachment_dir_param) + { + value_dir = (axis2_char_t*)axutil_param_get_value(attachment_dir_param, env); + + if(value_dir) + { + axiom_mime_parser_set_attachment_dir(mime_parser, env, value_dir); + } + } + + if(mime_parser) + { + axis2_callback_info_t* callback_ctx = NULL; + axutil_stream_t* stream = NULL; + + callback_ctx = (axis2_callback_info_t*)AXIS2_MALLOC(env->allocator, + sizeof(axis2_callback_info_t)); + + stream = axutil_stream_create_basic(env); + + if(stream) + { + axutil_stream_write(stream, env, response->data, response->length); + callback_ctx->env = env; + callback_ctx->in_stream = stream; + callback_ctx->content_length = response->length; + callback_ctx->unread_len = response->length; + callback_ctx->chunked_stream = NULL; + } + + /*binary_data_map = + axiom_mime_parser_parse(mime_parser, env, + axis2_amqp_util_on_data_request, + (void*)callback_ctx, + mime_boundary);*/ + + if(!binary_data_map) + { + return AXIS2_FAILURE; + } + + soap_body_len = axiom_mime_parser_get_soap_body_len(mime_parser, env); + + soap_body_str = axiom_mime_parser_get_soap_body_str(mime_parser, env); + + axutil_stream_free(stream, env); + AXIS2_FREE(env->allocator, callback_ctx); + axiom_mime_parser_free(mime_parser, env); + } + + AXIS2_FREE(env->allocator, mime_boundary); + } + + is_mtom = AXIS2_TRUE; + } + else + { + soap_body_str = response->data; + soap_body_len = axutil_strlen(response->data); + } + + soap_body_len = axutil_strlen(soap_body_str); + + xml_reader = axiom_xml_reader_create_for_memory(env, soap_body_str, soap_body_len, NULL, + AXIS2_XML_PARSER_TYPE_BUFFER); + if(!xml_reader) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to Create XML Reader"); + return NULL; + } + + stax_builder = axiom_stax_builder_create(env, xml_reader); + if(!stax_builder) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to Create StAX Builder"); + return NULL; + } + + soap_ns_uri = is_soap_11 ? AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI + : AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + + soap_builder = axiom_soap_builder_create(env, stax_builder, soap_ns_uri); + if(!soap_builder) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to Create SOAP Builder"); + return NULL; + } + + if(binary_data_map) + { + axiom_soap_builder_set_mime_body_parts(soap_builder, env, binary_data_map); + } + + soap_envelope = axiom_soap_builder_get_soap_envelope(soap_builder, env); + + if(soap_envelope) + { + /* hack to get around MTOM problem */ + axiom_soap_body_t *soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + + if(soap_body) + { + axiom_soap_body_has_fault(soap_body, env); + } + } + + return soap_envelope; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_amqp_util_conf_ctx_get_server_side( + axis2_conf_ctx_t* conf_ctx, + const axutil_env_t* env) +{ + axutil_property_t* property = NULL; + axis2_char_t* value = NULL; + + property = axis2_conf_ctx_get_property(conf_ctx, env, AXIS2_IS_SVR_SIDE); + if(!property) + return AXIS2_TRUE; + + value = (axis2_char_t*)axutil_property_get_value(property, env); + if(!value) + return AXIS2_TRUE; + + return (axutil_strcmp(value, AXIS2_VALUE_TRUE) == 0) ? AXIS2_TRUE : AXIS2_FALSE; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_amqp_util_get_value_from_content_type( + const axutil_env_t * env, + const axis2_char_t * content_type, + const axis2_char_t * key) +{ + axis2_char_t *tmp = NULL; + axis2_char_t *tmp_content_type = NULL; + axis2_char_t *tmp2 = NULL; + + AXIS2_PARAM_CHECK(env->error, content_type, NULL); + AXIS2_PARAM_CHECK(env->error, key, NULL); + + tmp_content_type = axutil_strdup(env, content_type); + + if(!tmp_content_type) + { + return NULL; + } + + tmp = strstr(tmp_content_type, key); + + if(!tmp) + { + AXIS2_FREE(env->allocator, tmp_content_type); + return NULL; + } + + tmp = strchr(tmp, AXIS2_AMQP_EQ); + tmp2 = strchr(tmp, AXIS2_AMQP_SEMI_COLON); + + if(tmp2) + { + *tmp2 = AXIS2_AMQP_ESC_NULL; + } + + if(!tmp) + { + AXIS2_FREE(env->allocator, tmp_content_type); + return NULL; + } + + tmp2 = axutil_strdup(env, tmp + 1); + + AXIS2_FREE(env->allocator, tmp_content_type); + + if(*tmp2 == AXIS2_AMQP_DOUBLE_QUOTE) + { + tmp = tmp2; + tmp2 = axutil_strdup(env, tmp + 1); + tmp2[strlen(tmp2) - 1] = AXIS2_AMQP_ESC_NULL; + + if(tmp) + { + AXIS2_FREE(env->allocator, tmp); + tmp = NULL; + } + } + + /* handle XOP */ + if(*tmp2 == AXIS2_AMQP_B_SLASH && *(tmp2 + 1) == '\"') + { + tmp = tmp2; + tmp2 = axutil_strdup(env, tmp + 2); + tmp2[strlen(tmp2) - 3] = AXIS2_AMQP_ESC_NULL; + + if(tmp) + { + AXIS2_FREE(env->allocator, tmp); + tmp = NULL; + } + } + + return tmp2; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_amqp_util_on_data_request( + char* buffer, + int size, + void* ctx) +{ + const axutil_env_t* env = NULL; + int len = -1; + axis2_callback_info_t* cb_ctx = (axis2_callback_info_t*)ctx; + axutil_stream_t* in_stream = NULL; + + if(!buffer || !ctx) + { + return 0; + } + + if(cb_ctx->unread_len <= 0 && -1 != cb_ctx->content_length) + { + return 0; + } + + env = ((axis2_callback_info_t*)ctx)->env; + + in_stream = (axutil_stream_t*)((axis2_callback_info_t *)ctx)->in_stream; + --size; /* reserve space to insert trailing null */ + + len = axutil_stream_read(in_stream, env, buffer, size); + + if(len > 0) + { + buffer[len] = AXIS2_AMQP_ESC_NULL; + ((axis2_callback_info_t*)ctx)->unread_len -= len; + } + else if(len == 0) + { + ((axis2_callback_info_t*)ctx)->unread_len = 0; + } + + return len; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_amqp_util_conf_ctx_get_dual_channel_queue_name( + axis2_conf_ctx_t* conf_ctx, + const axutil_env_t* env) +{ + axutil_property_t* property = NULL; + axis2_char_t* queue_name = NULL; + axis2_char_t* value = NULL; + + /* Get property */ + property = axis2_conf_ctx_get_property(conf_ctx, env, AXIS2_AMQP_CONF_CTX_PROPERTY_QUEUE_NAME); + if(!property) /* Very first call */ + { + property = axutil_property_create(env); + + axis2_conf_ctx_set_property(conf_ctx, env, AXIS2_AMQP_CONF_CTX_PROPERTY_QUEUE_NAME, + property); + } + + /* Get queue name */ + value = (axis2_char_t*)axutil_property_get_value(property, env); + + /* AMQP listener and the sender are the two parties that are + * interested in the queue. Either party can create the queue. + * If the queue is already created by one party, "value" is + * not NULL. If "value" is NULL, that mean the caller of + * this method is supposed to create the queue */ + if(value) + { + queue_name = (axis2_char_t*)AXIS2_MALLOC(env->allocator, axutil_strlen(value) + 1); + strcpy(queue_name, value); + + /*axutil_property_set_value(property, env, NULL);*/ + } + else + { + /* Create new queue name */ + queue_name = axutil_stracat(env, AXIS2_AMQP_TEMP_QUEUE_NAME_PREFIX, axutil_uuid_gen(env)); + + /* Put queue name in the conf_ctx so that the sender will know */ + axutil_property_set_value(property, env, (void*)queue_name); + } + + return queue_name; +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_amqp_util_conf_ctx_get_qpid_broker_ip( + axis2_conf_ctx_t* conf_ctx, + const axutil_env_t* env) +{ + axutil_property_t* property = NULL; + void* value = NULL; + axis2_char_t* broker_ip = AXIS2_QPID_DEFAULT_BROKER_IP; + + property = axis2_conf_ctx_get_property(conf_ctx, env, AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_IP); + + if(property) + { + value = axutil_property_get_value(property, env); + + if(value) + { + broker_ip = (axis2_char_t*)value; + } + } + + return broker_ip; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_amqp_util_conf_ctx_get_qpid_broker_port( + axis2_conf_ctx_t* conf_ctx, + const axutil_env_t* env) +{ + axutil_property_t* property = NULL; + void* value = NULL; + int broker_port = AXIS2_QPID_DEFAULT_BROKER_PORT; + + property = axis2_conf_ctx_get_property(conf_ctx, env, AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_PORT); + + if(property) + { + value = axutil_property_get_value(property, env); + + if(value) + { + broker_port = *(int*)value; + } + } + + return broker_port; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_amqp_util_msg_ctx_get_use_separate_listener( + axis2_msg_ctx_t* msg_ctx, + const axutil_env_t* env) +{ + axutil_property_t* property = NULL; + axis2_char_t* value = NULL; + axis2_bool_t use_separate_listener = AXIS2_FALSE; + + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_USE_SEPARATE_LISTENER); + + if(property) + { + value = (axis2_char_t*)axutil_property_get_value(property, env); + + if(value && (axutil_strcmp(AXIS2_VALUE_TRUE, value) == 0)) + { + use_separate_listener = AXIS2_TRUE; + } + } + + return use_separate_listener; +} + +AXIS2_EXTERN axis2_amqp_destination_info_t* AXIS2_CALL +axis2_amqp_util_msg_ctx_get_destination_info( + axis2_msg_ctx_t* msg_ctx, + const axutil_env_t* env) +{ + /* The destination URI that is expected by this method + * should be of one of the following formats + * 1. amqp://IP:PORT/services/SERVICE_NAME + * 2. jms:/SERVICE_NAME?java.naming.provider.url=tcp://IP:PORT... + * 3. TempQueue... */ + + axis2_endpoint_ref_t* endpoint_ref = NULL; + axis2_amqp_destination_info_t* destination_info = NULL; + + destination_info = (axis2_amqp_destination_info_t*)AXIS2_MALLOC(env->allocator, + sizeof(axis2_amqp_destination_info_t)); + + destination_info->broker_ip = NULL; + destination_info->broker_port = AXIS2_QPID_NULL_CONF_INT; + destination_info->queue_name = NULL; + + endpoint_ref = axis2_msg_ctx_get_to(msg_ctx, env); + + if(endpoint_ref) + { + const axis2_char_t* endpoint_address_original = NULL; + axis2_char_t* endpoint_address = NULL; + char* substr = NULL; + char* token = NULL; + endpoint_address_original = axis2_endpoint_ref_get_address(endpoint_ref, env); + + if(!endpoint_address_original) + return NULL; + + endpoint_address = (axis2_char_t*)AXIS2_MALLOC(env->allocator, (sizeof(axis2_char_t) + * axutil_strlen(endpoint_address_original)) + 1); + strcpy((char*)endpoint_address, (char*)endpoint_address_original); + + if((substr = strstr(endpoint_address, AXIS2_AMQP_EPR_PREFIX))) /* Start with amqp: */ + { + if(strstr(endpoint_address, AXIS2_AMQP_EPR_ANON_SERVICE_NAME)) + { + /* Server reply to dual-channel client */ + axutil_property_t* property = NULL; + property = axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_AMQP_MSG_CTX_PROPERTY_REPLY_TO); + + if(property) + { + axis2_char_t* queue_name = (axis2_char_t*)axutil_property_get_value(property, + env); + + if(queue_name) + { + destination_info->queue_name = (axis2_char_t*)AXIS2_MALLOC(env->allocator, + (sizeof(axis2_char_t) * strlen(queue_name)) + 1); + strcpy(destination_info->queue_name, queue_name); + } + } + } + else + { + substr += strlen(AXIS2_AMQP_EPR_PREFIX) + 2; /* 2 -> "//" */ + if(substr) /* IP:PORT/services/SERVICE_NAME */ + { + token = strtok(substr, ":"); + if(token) /* IP */ + { + axis2_char_t* broker_ip = (axis2_char_t*)AXIS2_MALLOC(env->allocator, + (sizeof(axis2_char_t) * strlen(token)) + 1); + strcpy(broker_ip, token); + destination_info->broker_ip = broker_ip; + + token = strtok(NULL, "/"); /* PORT */ + if(token) + { + destination_info->broker_port = atoi(token); + + token = strtok(NULL, "#"); /* ... services/SERVICE_NAME */ + if(token) + { + if((substr = strstr(token, AXIS2_AMQP_EPR_SERVICE_PREFIX))) + { + substr += strlen(AXIS2_AMQP_EPR_SERVICE_PREFIX) + 1; /* 1 -> "/" */ + if(substr) + { + axis2_char_t* queue_name = (axis2_char_t*)AXIS2_MALLOC( + env->allocator, (sizeof(axis2_char_t) * strlen(substr)) + + 1); + strcpy(queue_name, substr); + destination_info->queue_name = queue_name; + } + } + } + } + } + } + } + } + else if(0 == strcmp(endpoint_address, AXIS2_WSA_ANONYMOUS_URL)) /* Required to work with Sandesha2 */ + { + axutil_property_t* property = NULL; + property = axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_AMQP_MSG_CTX_PROPERTY_REPLY_TO); + + if(property) + { + axis2_char_t* queue_name = (axis2_char_t*)axutil_property_get_value(property, env); + + if(queue_name) + { + destination_info->queue_name = (axis2_char_t*)AXIS2_MALLOC(env->allocator, + (sizeof(axis2_char_t) * strlen(queue_name)) + 1); + strcpy(destination_info->queue_name, queue_name); + } + } + } + else if((substr = strstr(endpoint_address, "jms:/")) && (substr == endpoint_address)) + { + + } + + AXIS2_FREE(env->allocator, endpoint_address); + } + else + { + /* Single-channel blocking */ + axutil_property_t* property = NULL; + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_AMQP_MSG_CTX_PROPERTY_REPLY_TO); + + if(property) + { + axis2_char_t* queue_name = (axis2_char_t*)axutil_property_get_value(property, env); + + if(queue_name) + { + destination_info->queue_name = (axis2_char_t*)AXIS2_MALLOC(env->allocator, + (sizeof(axis2_char_t) * strlen(queue_name)) + 1); + strcpy(destination_info->queue_name, queue_name); + } + } + } + + /* Get broker IP/Port from conf_ctx if they are not + * found in the destination URI */ + if(!destination_info->broker_ip) + { + axis2_conf_ctx_t* conf_ctx = NULL; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + axutil_property_t* property = NULL; + property = axis2_conf_ctx_get_property(conf_ctx, env, + AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_IP); + + if(property) + { + axis2_char_t* broker_ip = (axis2_char_t*)axutil_property_get_value(property, env); + + if(broker_ip) + { + destination_info->broker_ip = (axis2_char_t*)AXIS2_MALLOC(env->allocator, + (sizeof(axis2_char_t) * strlen(broker_ip)) + 1); + strcpy(destination_info->broker_ip, broker_ip); + } + } + + } + } + + if(AXIS2_QPID_NULL_CONF_INT == destination_info->broker_port) + { + axis2_conf_ctx_t* conf_ctx = NULL; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + axutil_property_t* property = NULL; + property = axis2_conf_ctx_get_property(conf_ctx, env, + AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_PORT); + + if(property) + { + void* value = axutil_property_get_value(property, env); + + if(value) + { + destination_info->broker_port = *(int*)value; + } + } + } + } + + return destination_info; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_amqp_util_msg_ctx_get_request_timeout( + axis2_msg_ctx_t* msg_ctx, + const axutil_env_t* env) +{ + axis2_conf_ctx_t* conf_ctx = NULL; + axutil_property_t* property = NULL; + void* value = NULL; + int request_timeout = AXIS2_QPID_DEFAULT_REQUEST_TIMEOUT; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + + if(conf_ctx) + { + property = axis2_conf_ctx_get_property(conf_ctx, env, + AXIS2_AMQP_CONF_CTX_PROPERTY_REQUEST_TIMEOUT); + + if(property) + { + value = axutil_property_get_value(property, env); + + if(value) + { + request_timeout = *(int*)value; + } + } + } + + return request_timeout; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_amqp_util_msg_ctx_get_server_side( + axis2_msg_ctx_t* msg_ctx, + const axutil_env_t* env) +{ + axis2_conf_ctx_t* conf_ctx = NULL; + axis2_bool_t is_server = AXIS2_FALSE; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + + if(conf_ctx) + { + is_server = axis2_amqp_util_conf_ctx_get_server_side(conf_ctx, env); + } + + return is_server; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_amqp_response_free( + axis2_amqp_response_t* response, + const axutil_env_t* env) +{ + if(response) + { + if(response->data) + { + AXIS2_FREE(env->allocator, response->data); + } + + if(response->content_type) + { + AXIS2_FREE(env->allocator, response->content_type); + } + + AXIS2_FREE(env->allocator, response); + } +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_amqp_destination_info_free( + axis2_amqp_destination_info_t* destination_info, + const axutil_env_t* env) +{ + if(destination_info) + { + if(destination_info->broker_ip) + { + AXIS2_FREE(env->allocator, destination_info->broker_ip); + } + + if(destination_info->queue_name) + { + AXIS2_FREE(env->allocator, destination_info->queue_name); + } + + AXIS2_FREE(env->allocator, destination_info); + } +} + diff --git a/src/core/transport/amqp/util/axis2_amqp_util.h b/src/core/transport/amqp/util/axis2_amqp_util.h new file mode 100644 index 0000000..0b3abbb --- /dev/null +++ b/src/core/transport/amqp/util/axis2_amqp_util.h @@ -0,0 +1,143 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_AMQP_UTIL_H +#define AXIS2_AMQP_UTIL_H + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axis2_amqp_response + { + void* data; + int length; + axis2_char_t* content_type; + } axis2_amqp_response_t; + + typedef struct axis2_amqp_destination_info + { + axis2_char_t* broker_ip; + int broker_port; + axis2_char_t* queue_name; + } axis2_amqp_destination_info_t; + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_amqp_util_get_in_desc_conf_value_string( + axis2_transport_in_desc_t* in_desc, + const axutil_env_t* env, + const axis2_char_t* param_name); + + AXIS2_EXTERN int AXIS2_CALL + axis2_amqp_util_get_in_desc_conf_value_int( + axis2_transport_in_desc_t* in_desc, + const axutil_env_t* env, + const axis2_char_t* param_name); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_amqp_util_get_out_desc_conf_value_string( + axis2_transport_out_desc_t* out_desc, + const axutil_env_t* env, + const axis2_char_t* param_name); + + AXIS2_EXTERN int AXIS2_CALL + axis2_amqp_util_get_out_desc_conf_value_int( + axis2_transport_out_desc_t* out_desc, + const axutil_env_t* env, + const axis2_char_t* param_name); + + AXIS2_EXTERN axiom_soap_envelope_t* AXIS2_CALL + axis2_amqp_util_get_soap_envelope( + axis2_amqp_response_t* response, + const axutil_env_t* env, + axis2_msg_ctx_t* msg_ctx); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_amqp_util_conf_ctx_get_server_side( + axis2_conf_ctx_t* conf_ctx, + const axutil_env_t* env); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_amqp_util_get_value_from_content_type( + const axutil_env_t * env, + const axis2_char_t * content_type, + const axis2_char_t * key); + + AXIS2_EXTERN int AXIS2_CALL + axis2_amqp_util_on_data_request( + char *buffer, + int size, + void *ctx); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_amqp_util_conf_ctx_get_dual_channel_queue_name( + axis2_conf_ctx_t* conf_ctx, + const axutil_env_t* env); + + AXIS2_EXTERN axis2_char_t* AXIS2_CALL + axis2_amqp_util_conf_ctx_get_qpid_broker_ip( + axis2_conf_ctx_t* conf_ctx, + const axutil_env_t* env); + + AXIS2_EXTERN int AXIS2_CALL + axis2_amqp_util_conf_ctx_get_qpid_broker_port( + axis2_conf_ctx_t* conf_ctx, + const axutil_env_t* env); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_amqp_util_msg_ctx_get_use_separate_listener( + axis2_msg_ctx_t* msg_ctx, + const axutil_env_t* env); + + AXIS2_EXTERN axis2_amqp_destination_info_t* AXIS2_CALL + axis2_amqp_util_msg_ctx_get_destination_info( + axis2_msg_ctx_t* msg_ctx, + const axutil_env_t* env); + + AXIS2_EXTERN int AXIS2_CALL + axis2_amqp_util_msg_ctx_get_request_timeout( + axis2_msg_ctx_t* msg_ctx, + const axutil_env_t* env); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_amqp_util_msg_ctx_get_server_side( + axis2_msg_ctx_t* msg_ctx, + const axutil_env_t* env); + + AXIS2_EXTERN void AXIS2_CALL + axis2_amqp_response_free( + axis2_amqp_response_t* response, + const axutil_env_t* env); + + AXIS2_EXTERN void AXIS2_CALL + axis2_amqp_destination_info_free( + axis2_amqp_destination_info_t* destination_info, + const axutil_env_t* env); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/core/transport/http/Makefile.am b/src/core/transport/http/Makefile.am new file mode 100644 index 0000000..cc23d78 --- /dev/null +++ b/src/core/transport/http/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = sender receiver server diff --git a/src/core/transport/http/common/Makefile.am b/src/core/transport/http/common/Makefile.am new file mode 100644 index 0000000..8aaa2c6 --- /dev/null +++ b/src/core/transport/http/common/Makefile.am @@ -0,0 +1,29 @@ +lib_LTLIBRARIES = libaxis2_http_common.la + +libaxis2_http_common_la_LIBADD=$(top_builddir)/util/src/libaxutil.la\ + $(top_builddir)/src/core/transport/http/util/libaxis2_http_util.la + +libaxis2_http_common_la_SOURCES = http_header.c\ + http_out_transport_info.c\ + http_request_line.c\ + http_simple_request.c\ + http_simple_response.c\ + http_status_line.c\ + http_accept_record.c\ + http_response_writer.c\ + simple_http_svr_conn.c\ + http_worker.c + + +libaxis2_http_common_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/transport\ + -I$(top_builddir)/src/core/transport/http \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include diff --git a/src/core/transport/http/common/http_accept_record.c b/src/core/transport/http/common/http_accept_record.c new file mode 100644 index 0000000..25f15b1 --- /dev/null +++ b/src/core/transport/http/common/http_accept_record.c @@ -0,0 +1,165 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +struct axis2_http_accept_record +{ + axis2_char_t *name; + float quality; + int level; + axis2_char_t *record; +}; + +AXIS2_EXTERN axis2_http_accept_record_t *AXIS2_CALL +axis2_http_accept_record_create( + const axutil_env_t * env, + const axis2_char_t * str) +{ + axis2_char_t *tmp_accept_record = NULL; + axis2_char_t *tmp = NULL; + axis2_http_accept_record_t *accept_record = NULL; + float quality = 1.0; + int level = -1; + axis2_char_t *name = NULL; + + AXIS2_PARAM_CHECK(env->error, str, NULL); + + tmp_accept_record = (axis2_char_t *)axutil_strdup(env, str); + if(!tmp_accept_record) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "unable to strdup string %s", str); + return NULL; + } + + accept_record = (axis2_http_accept_record_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_http_accept_record_t)); + + if(!accept_record) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + memset((void *)accept_record, 0, sizeof(axis2_http_accept_record_t)); + accept_record->record = axutil_strtrim(env, tmp_accept_record, AXIS2_SPACE_COMMA); + + tmp = strchr(tmp_accept_record, AXIS2_Q); + if(tmp) + { + *tmp = AXIS2_ESC_NULL; + tmp++; + tmp = axutil_strtrim(env, tmp, AXIS2_EQ_N_SEMICOLON); + if(tmp) + { + sscanf(tmp, "%f", &quality); + AXIS2_FREE(env->allocator, tmp); + } + } + + tmp = strstr(tmp_accept_record, AXIS2_LEVEL); + if(tmp) + { + *tmp = AXIS2_ESC_NULL; + tmp++; + tmp = axutil_strtrim(env, tmp, AXIS2_EQ_N_SEMICOLON); + if(tmp) + { + sscanf(tmp, "%d", &level); + AXIS2_FREE(env->allocator, tmp); + } + } + + tmp = axutil_strtrim(env, tmp_accept_record, AXIS2_SPACE_SEMICOLON); + if(tmp) + { + name = tmp; + } + + if(!name || quality > 1.0 || quality < 0.0) + { + axis2_http_accept_record_free(accept_record, env); + return NULL; + } + + accept_record->name = name; + accept_record->quality = quality; + accept_record->level = level; + + AXIS2_FREE(env->allocator, tmp_accept_record); + return accept_record; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_accept_record_free( + axis2_http_accept_record_t * accept_record, + const axutil_env_t * env) +{ + + if(!accept_record) + { + return; + } + + if(accept_record->name) + { + AXIS2_FREE(env->allocator, accept_record->name); + } + if(accept_record->record) + { + AXIS2_FREE(env->allocator, accept_record->record); + } + AXIS2_FREE(env->allocator, accept_record); + return; +} + +AXIS2_EXTERN float AXIS2_CALL +axis2_http_accept_record_get_quality_factor( + const axis2_http_accept_record_t * accept_record, + const axutil_env_t * env) +{ + return accept_record->quality; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_accept_record_get_name( + const axis2_http_accept_record_t * accept_record, + const axutil_env_t * env) +{ + return accept_record->name; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_http_accept_record_get_level( + const axis2_http_accept_record_t * accept_record, + const axutil_env_t * env) +{ + return accept_record->level; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_accept_record_to_string( + axis2_http_accept_record_t * accept_record, + const axutil_env_t * env) +{ + return accept_record->record; +} diff --git a/src/core/transport/http/common/http_header.c b/src/core/transport/http/common/http_header.c new file mode 100644 index 0000000..3ea2ffc --- /dev/null +++ b/src/core/transport/http/common/http_header.c @@ -0,0 +1,168 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +struct axis2_http_header +{ + axis2_char_t *name; + axis2_char_t *value; +}; + +AXIS2_EXTERN axis2_http_header_t *AXIS2_CALL +axis2_http_header_create( + const axutil_env_t * env, + const axis2_char_t * name, + const axis2_char_t * value) +{ + axis2_http_header_t *http_header = NULL; + http_header = (axis2_http_header_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_http_header_t)); + if(!http_header) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + memset((void *)http_header, 0, sizeof(axis2_http_header_t)); + http_header->name = (axis2_char_t *)axutil_strdup(env, name); + http_header->value = (axis2_char_t *)axutil_strdup(env, value); + + return http_header; +} + +/** + * Creates http header object from a string having format "header_name: header_value" + * (e.g. "SOAPAction: urn:hello") + * @param env pointer to environment struct + * @param str pointer to str + */ +AXIS2_EXTERN axis2_http_header_t *AXIS2_CALL +axis2_http_header_create_by_str( + const axutil_env_t * env, + const axis2_char_t * str) +{ + axis2_char_t *tmp_str = NULL; + axis2_char_t *ch = NULL; + axis2_char_t *ch2 = NULL; + axis2_http_header_t *ret = NULL; + int tmp_str_len = 0; + AXIS2_PARAM_CHECK(env->error, str, NULL); + + /* + tmp_str = axutil_strdup(env, str); + if(!tmp_str) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "unable to strdup string, %s", str); + return NULL; + } + */ + /* + * strdup is removed to increase the performance. This method is called from + * axis2_simple_http_svr_conn_read_request and axis2_http_client_recieve_header and both of them + * passes a temporary string. hence we can modify the contents without doing a strdup. + * Above code is commented after 1.6.0 . If no issue is found until 1.8.0, above can be removed + */ + tmp_str = (axis2_char_t *)str; + + /* remove trailing \r\n */ + tmp_str_len = axutil_strlen(tmp_str); + if((tmp_str_len >= 2) && (AXIS2_RETURN == tmp_str[tmp_str_len - 2])) + { + tmp_str[tmp_str_len - 2] = AXIS2_ESC_NULL; + } + + /* get http header */ + ch = strchr((const char *)tmp_str, AXIS2_COLON); + if(!ch) + { + /*AXIS2_FREE(env->allocator, tmp_str);*/ + return NULL; + } + *ch = AXIS2_ESC_NULL; + + /* get http header value */ + ch2 = ++ch; + + /* skip spaces */ + while(AXIS2_SPACE == *ch2) + { + ++ch2; + } + + ret = axis2_http_header_create(env, tmp_str, ch2); + /*AXIS2_FREE(env->allocator, tmp_str);*/ + return ret; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_header_free( + axis2_http_header_t * http_header, + const axutil_env_t * env) +{ + + if(!http_header) + { + return; + } + + if(http_header->name) + { + AXIS2_FREE(env->allocator, http_header->name); + } + if(http_header->value) + { + AXIS2_FREE(env->allocator, http_header->value); + } + + AXIS2_FREE(env->allocator, http_header); + return; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_header_to_external_form( + axis2_http_header_t * http_header, + const axutil_env_t * env) +{ + axis2_ssize_t len = 0; + axis2_char_t *external_form = NULL; + + AXIS2_PARAM_CHECK(env->error, http_header, NULL); + + len = axutil_strlen(http_header->name) + axutil_strlen(http_header->value) + 8; + external_form = (axis2_char_t *)AXIS2_MALLOC(env->allocator, len); + sprintf(external_form, "%s: %s%s", http_header->name, http_header->value, AXIS2_HTTP_CRLF); + return external_form; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_header_get_name( + const axis2_http_header_t * http_header, + const axutil_env_t * env) +{ + return http_header->name; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_header_get_value( + const axis2_http_header_t * http_header, + const axutil_env_t * env) +{ + return http_header->value; +} diff --git a/src/core/transport/http/common/http_out_transport_info.c b/src/core/transport/http/common/http_out_transport_info.c new file mode 100644 index 0000000..b70ee6c --- /dev/null +++ b/src/core/transport/http/common/http_out_transport_info.c @@ -0,0 +1,353 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#define AXIS2_INTF_TO_IMPL(out_transport_info) \ + ((axis2_http_out_transport_info_t *) \ + (out_transport_info)) + +axis2_status_t AXIS2_CALL +axis2_out_transport_info_impl_set_content_type( + axis2_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + const axis2_char_t * content_type) +{ + axis2_http_out_transport_info_t *http_transport_info = NULL; + http_transport_info = AXIS2_INTF_TO_IMPL(out_transport_info); + return axis2_http_out_transport_info_set_content_type(http_transport_info, env, content_type); +} + +axis2_status_t AXIS2_CALL +axis2_out_transport_info_impl_set_char_encoding( + axis2_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + const axis2_char_t * encoding) +{ + axis2_http_out_transport_info_t *http_transport_info = NULL; + http_transport_info = AXIS2_INTF_TO_IMPL(out_transport_info); + return axis2_http_out_transport_info_set_char_encoding(http_transport_info, env, encoding); +} + +axis2_status_t AXIS2_CALL +axis2_out_transport_info_impl_set_cookie_header( + axis2_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + const axis2_char_t * set_cookie) +{ + axis2_http_out_transport_info_t *http_transport_info = NULL; + http_transport_info = AXIS2_INTF_TO_IMPL(out_transport_info); + return axis2_http_out_transport_info_set_cookie_header(http_transport_info, env, set_cookie); +} + +axis2_status_t AXIS2_CALL +axis2_out_transport_info_impl_set_session( + axis2_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + const axis2_char_t * session_id, + const axis2_char_t * session_value) +{ + axis2_http_out_transport_info_t *http_transport_info = NULL; + http_transport_info = AXIS2_INTF_TO_IMPL(out_transport_info); + return axis2_http_out_transport_info_set_session(http_transport_info, env, session_id, + session_value); +} + +void AXIS2_CALL +axis2_out_transport_info_impl_free( + axis2_out_transport_info_t * out_transport_info, + const axutil_env_t * env) +{ + axis2_http_out_transport_info_t *http_transport_info = NULL; + http_transport_info = AXIS2_INTF_TO_IMPL(out_transport_info); + axis2_http_out_transport_info_free(http_transport_info, env); + return; +} + +static const axis2_out_transport_info_ops_t ops_var = { + axis2_out_transport_info_impl_set_content_type, + axis2_out_transport_info_impl_set_char_encoding, + axis2_out_transport_info_impl_set_cookie_header, + axis2_out_transport_info_impl_set_session, + axis2_out_transport_info_impl_free }; + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_out_transport_info_impl_set_content_type( + axis2_http_out_transport_info_t * http_out_transport_info, + const axutil_env_t * env, + const axis2_char_t * content_type) +{ + axis2_char_t *tmp1 = NULL; + axis2_char_t *tmp2 = NULL; + + AXIS2_PARAM_CHECK(env->error, content_type, AXIS2_FAILURE); + if(http_out_transport_info->encoding) + { + axis2_char_t *charset_pos = axutil_strcasestr(content_type, AXIS2_CHARSET); + if(!charset_pos) + { + /* if "charset" not found in content_type string */ + tmp1 = axutil_stracat(env, content_type, AXIS2_CONTENT_TYPE_CHARSET); + tmp2 = axutil_stracat(env, tmp1, http_out_transport_info->encoding); + axis2_http_simple_response_set_header(http_out_transport_info-> response, env, + axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, tmp2)); + AXIS2_FREE(env->allocator, tmp1); + AXIS2_FREE(env->allocator, tmp2); + } + else + { + /* "charset" is found in content_type string */ + axis2_http_simple_response_set_header(http_out_transport_info-> response, env, + axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, content_type)); + } + } + else + { + /* no http_out_transport_info->encoding */ + if(http_out_transport_info->response) + { + axis2_http_simple_response_set_header(http_out_transport_info-> response, env, + axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, content_type)); + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_out_transport_info_impl_set_char_encoding( + axis2_http_out_transport_info_t * http_out_transport_info, + const axutil_env_t * env, + const axis2_char_t * encoding) +{ + AXIS2_PARAM_CHECK(env->error, encoding, AXIS2_FAILURE); + if(http_out_transport_info->encoding) + { + AXIS2_FREE(env->allocator, http_out_transport_info->encoding); + } + http_out_transport_info->encoding = axutil_strdup(env, encoding); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_out_transport_info_impl_set_cookie_header( + axis2_http_out_transport_info_t * http_out_transport_info, + const axutil_env_t * env, + const axis2_char_t * set_cookie) +{ + AXIS2_PARAM_CHECK(env->error, set_cookie, AXIS2_FAILURE); + if(http_out_transport_info->response) + { + axis2_http_simple_response_set_header(http_out_transport_info-> response, env, + axis2_http_header_create(env, AXIS2_HTTP_HEADER_SET_COOKIE, set_cookie)); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_out_transport_info_impl_set_session( + axis2_http_out_transport_info_t * http_out_transport_info, + const axutil_env_t * env, + const axis2_char_t * session_id, + const axis2_char_t * session_value) +{ + AXIS2_PARAM_CHECK(env->error, session_id, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, session_value, AXIS2_FAILURE); + if(http_out_transport_info->server) + { + env->set_session_fn((void *) http_out_transport_info->server, session_id, session_value); + } + return AXIS2_SUCCESS; +} +AXIS2_EXTERN void AXIS2_CALL +axis2_http_out_transport_info_impl_free( + axis2_http_out_transport_info_t * http_out_transport_info, + const axutil_env_t * env) +{ + + if(!http_out_transport_info) + { + return; + } + + if(http_out_transport_info->response) + { + axis2_http_simple_response_free(http_out_transport_info->response, env); + } + if(http_out_transport_info->encoding) + { + AXIS2_FREE(env->allocator, http_out_transport_info->encoding); + } + AXIS2_FREE(env->allocator, http_out_transport_info); + return; +} + +AXIS2_EXTERN axis2_http_out_transport_info_t *AXIS2_CALL +axis2_http_out_transport_info_create( + const axutil_env_t * env, + axis2_http_simple_response_t * response) +{ + axis2_http_out_transport_info_t *http_out_transport_info = NULL; + + http_out_transport_info = (axis2_http_out_transport_info_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_http_out_transport_info_t)); + + if(!http_out_transport_info) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + memset((void *)http_out_transport_info, 0, sizeof(axis2_http_out_transport_info_t)); + http_out_transport_info->out_transport.ops = &ops_var; + http_out_transport_info->response = response; + http_out_transport_info->encoding = NULL; + http_out_transport_info->set_char_encoding = NULL; + http_out_transport_info->set_content_type = NULL; + http_out_transport_info->set_cookie_header = NULL; + http_out_transport_info->set_session = NULL; + http_out_transport_info->free_function = NULL; + + http_out_transport_info->set_char_encoding + = axis2_http_out_transport_info_impl_set_char_encoding; + http_out_transport_info->set_content_type = axis2_http_out_transport_info_impl_set_content_type; + http_out_transport_info->set_cookie_header = axis2_http_out_transport_info_impl_set_cookie_header; + http_out_transport_info->set_session = axis2_http_out_transport_info_impl_set_session; + http_out_transport_info->free_function = axis2_http_out_transport_info_impl_free; + + return http_out_transport_info; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_out_transport_info_free( + axis2_http_out_transport_info_t * http_out_transport_info, + const axutil_env_t * env) +{ + http_out_transport_info->free_function(http_out_transport_info, env); + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_out_transport_info_free_void_arg( + void *transport_info, + const axutil_env_t * env) +{ + axis2_http_out_transport_info_t *transport_info_l = NULL; + + transport_info_l = AXIS2_INTF_TO_IMPL(transport_info); + axis2_http_out_transport_info_free(transport_info_l, env); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_out_transport_info_set_content_type( + axis2_http_out_transport_info_t * http_out_transport_info, + const axutil_env_t * env, + const axis2_char_t * content_type) +{ + return http_out_transport_info->set_content_type(http_out_transport_info, env, content_type); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_out_transport_info_set_char_encoding( + axis2_http_out_transport_info_t * http_out_transport_info, + const axutil_env_t * env, + const axis2_char_t * encoding) +{ + return http_out_transport_info->set_char_encoding(http_out_transport_info, env, encoding); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_out_transport_info_set_cookie_header( + axis2_http_out_transport_info_t * http_out_transport_info, + const axutil_env_t * env, + const axis2_char_t * set_cookie) +{ + return http_out_transport_info->set_cookie_header(http_out_transport_info, env, set_cookie); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_out_transport_info_set_session( + axis2_http_out_transport_info_t * http_out_transport_info, + const axutil_env_t * env, + const axis2_char_t * session_id, + const axis2_char_t * session_value) +{ + return http_out_transport_info->set_session(http_out_transport_info, env, session_id, + session_value); +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_out_transport_info_set_char_encoding_func( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + axis2_status_t(AXIS2_CALL * set_char_encoding) + (axis2_http_out_transport_info_t *, + const axutil_env_t *, + const axis2_char_t *)) +{ + out_transport_info->set_char_encoding = set_char_encoding; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_out_transport_info_set_content_type_func( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + axis2_status_t(AXIS2_CALL * + set_content_type) (axis2_http_out_transport_info_t *, + const axutil_env_t *, + const axis2_char_t *)) +{ + out_transport_info->set_content_type = set_content_type; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_out_transport_info_set_cookie_header_func( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + axis2_status_t(AXIS2_CALL * + set_cookie_header) (axis2_http_out_transport_info_t *, + const axutil_env_t *, + const axis2_char_t *)) +{ + out_transport_info->set_cookie_header = set_cookie_header; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_out_transport_info_set_session_func( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + axis2_status_t(AXIS2_CALL * + set_session) (axis2_http_out_transport_info_t *, + const axutil_env_t *, + const axis2_char_t *, + const axis2_char_t *)) +{ + out_transport_info->set_session = set_session; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_out_transport_info_set_free_func( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + void (AXIS2_CALL * free_function) (axis2_http_out_transport_info_t *, + const axutil_env_t *)) +{ + out_transport_info->free_function = free_function; +} + diff --git a/src/core/transport/http/common/http_request_line.c b/src/core/transport/http/common/http_request_line.c new file mode 100644 index 0000000..f12cbba --- /dev/null +++ b/src/core/transport/http/common/http_request_line.c @@ -0,0 +1,227 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +struct axis2_http_request_line +{ + axis2_char_t *http_version; + axis2_char_t *method; + axis2_char_t *uri; +}; + +AXIS2_EXTERN axis2_http_request_line_t *AXIS2_CALL +axis2_http_request_line_create( + const axutil_env_t * env, + const axis2_char_t * method, + const axis2_char_t * uri, + const axis2_char_t * http_version) +{ + axis2_http_request_line_t *request_line = NULL; + + AXIS2_PARAM_CHECK(env->error, method, NULL); + AXIS2_PARAM_CHECK(env->error, uri, NULL); + AXIS2_PARAM_CHECK(env->error, http_version, NULL); + + request_line = (axis2_http_request_line_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_http_request_line_t)); + + if(!request_line) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + memset((void *)request_line, 0, sizeof(axis2_http_request_line_t)); + request_line->method = (axis2_char_t *)axutil_strdup(env, method); + request_line->uri = (axis2_char_t *)axutil_strdup(env, uri); + request_line->http_version = (axis2_char_t *)axutil_strdup(env, http_version); + + return request_line; +} + +void AXIS2_CALL +axis2_http_request_line_free( + axis2_http_request_line_t * request_line, + const axutil_env_t * env) +{ + + if(!request_line) + { + return; + } + + if(request_line->method) + { + AXIS2_FREE(env->allocator, request_line->method); + } + if(request_line->uri) + { + AXIS2_FREE(env->allocator, request_line->uri); + } + if(request_line->http_version) + { + AXIS2_FREE(env->allocator, request_line->http_version); + } + + AXIS2_FREE(env->allocator, request_line); + return; +} + +/** + * Parses a line " CRLF" and creates http_request_line + * object. E.g "POST /axis2/services/echo HTTP/1.1\r\n" + * @param env pointer to environment struct + * @param str pointer to the line to be parsed + * @return created object if success. NULL otherwise + */ +AXIS2_EXTERN axis2_http_request_line_t *AXIS2_CALL +axis2_http_request_line_parse_line( + const axutil_env_t * env, + const axis2_char_t * str) +{ + /*axis2_char_t *req_line = NULL;*/ + axis2_char_t *method = NULL; + axis2_char_t *uri = NULL; + axis2_char_t *http_version = NULL; + axis2_http_request_line_t *ret = NULL; + axis2_char_t *tmp = NULL; + int i = 0; + + if(!str) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid parameter is given to parse"); + return NULL; + } + + tmp = axutil_strstr(str, AXIS2_HTTP_CRLF); + if(!tmp) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE, AXIS2_FAILURE); + return NULL; + } + + i = (int)(tmp - str); /* We are sure that the difference lies within the int range */ + + /* + req_line = AXIS2_MALLOC(env->allocator, i * sizeof(axis2_char_t) + 1); + if(!req_line) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + memcpy(req_line, str, i * sizeof(axis2_char_t)); + req_line[i] = AXIS2_ESC_NULL; + tmp = req_line; + */ + /* we don't need to do a malloc and memcpy, because this method is only used by + * axis2_simple_http_svr_conn_read_request and it passes a temporary string. So, we can just + * set it as req_line and set the escape characters. this is done after 1.6.0 and if no issues + * found until 1.8.0, above code comment can be removed after 1.8.0 + */ + + tmp = (axis2_char_t *)str; + tmp[i] = AXIS2_ESC_NULL; + + /* find http method */ + method = tmp; + tmp = strchr(tmp, AXIS2_SPACE); + if(!tmp) + { + /*AXIS2_FREE(env->allocator, req_line);*/ + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE, AXIS2_FAILURE); + return NULL; + } + *tmp++ = AXIS2_ESC_NULL; + + /* find URI */ + uri = tmp; + tmp = strrchr(tmp, AXIS2_SPACE); + if(!tmp) + { + /*AXIS2_FREE(env->allocator, req_line);*/ + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE, AXIS2_FAILURE); + return NULL; + } + *tmp++ = AXIS2_ESC_NULL; + + /* find HTTP version */ + http_version = tmp; + ret = axis2_http_request_line_create(env, method, uri, http_version); + /*AXIS2_FREE(env->allocator, req_line);*/ + + return ret; +} + +axis2_char_t *AXIS2_CALL +axis2_http_request_line_get_method( + const axis2_http_request_line_t * request_line, + const axutil_env_t * env) +{ + return request_line->method; +} + +axis2_char_t *AXIS2_CALL +axis2_http_request_line_get_http_version( + const axis2_http_request_line_t * request_line, + const axutil_env_t * env) +{ + return request_line->http_version; +} + +axis2_char_t *AXIS2_CALL +axis2_http_request_line_get_uri( + const axis2_http_request_line_t * request_line, + const axutil_env_t * env) +{ + return request_line->uri; +} + +axis2_char_t *AXIS2_CALL +axis2_http_request_line_to_string( + axis2_http_request_line_t * request_line, + const axutil_env_t * env) +{ + int alloc_len = 0; + axis2_char_t *ret = NULL; + + alloc_len = axutil_strlen(request_line->method) + axutil_strlen(request_line->uri) + + axutil_strlen(request_line->http_version) + 6; + /* 5 = 2 * spaces + '/' +CR + LF + '\0' */ + + ret = AXIS2_MALLOC(env->allocator, alloc_len * sizeof(axis2_char_t)); + if(!ret) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + if(request_line->uri[0] != AXIS2_F_SLASH) + { + sprintf(ret, "%s /%s %s%s", request_line->method, request_line->uri, + request_line->http_version, AXIS2_HTTP_CRLF); + } + else + { + sprintf(ret, "%s %s %s%s", request_line->method, request_line->uri, + request_line->http_version, AXIS2_HTTP_CRLF); + } + return ret; +} diff --git a/src/core/transport/http/common/http_response_writer.c b/src/core/transport/http/common/http_response_writer.c new file mode 100644 index 0000000..eec2422 --- /dev/null +++ b/src/core/transport/http/common/http_response_writer.c @@ -0,0 +1,176 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +struct axis2_http_response_writer +{ + axutil_stream_t *stream; + axis2_char_t *encoding; +}; + +AXIS2_EXTERN axis2_http_response_writer_t *AXIS2_CALL +axis2_http_response_writer_create( + const axutil_env_t * env, + axutil_stream_t * stream) +{ + return axis2_http_response_writer_create_with_encoding(env, stream, + AXIS2_HTTP_DEFAULT_CONTENT_CHARSET); +} + +AXIS2_EXTERN axis2_http_response_writer_t *AXIS2_CALL +axis2_http_response_writer_create_with_encoding( + const axutil_env_t * env, + axutil_stream_t * stream, + const axis2_char_t * encoding) +{ + axis2_http_response_writer_t *response_writer = NULL; + response_writer = (axis2_http_response_writer_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_http_response_writer_t)); + if(!response_writer) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + response_writer->stream = stream; + response_writer->encoding = (axis2_char_t *)axutil_strdup(env, encoding); + return response_writer; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_response_writer_free( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env) +{ + AXIS2_FREE(env->allocator, response_writer->encoding); + AXIS2_FREE(env->allocator, response_writer); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_response_writer_get_encoding( + const axis2_http_response_writer_t * response_writer, + const axutil_env_t * env) +{ + return response_writer->encoding; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_response_writer_write_char( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env, + char c) +{ + int write = -1; + if(!response_writer->stream) + { + return AXIS2_FAILURE; + } + + write = axutil_stream_write(response_writer->stream, env, &c, 1); + if(write < 0) + { + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_response_writer_write_buf( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env, + char *buf, + int offset, + axis2_ssize_t len) +{ + int write = -1; + + AXIS2_PARAM_CHECK(env->error, response_writer, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, buf, AXIS2_FAILURE); + + if(!response_writer->stream) + { + return AXIS2_FAILURE; + } + write = axutil_stream_write(response_writer->stream, env, buf, len); + if(write < 0) + { + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_response_writer_print_str( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env, + const char *str) +{ + int write = -1; + int len = -1; + + len = axutil_strlen(str); + if(!response_writer->stream) + { + return AXIS2_FAILURE; + } + write = axutil_stream_write(response_writer->stream, env, str, len); + + if(write < 0) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "failed to write to stream string %s of length %d", str, len); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_response_writer_print_int( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env, + int i) +{ + axis2_char_t int_str[10]; + sprintf(int_str, "%10d", i); + return axis2_http_response_writer_print_str(response_writer, env, int_str); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_response_writer_println_str( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env, + const char *str) +{ + if(AXIS2_SUCCESS == axis2_http_response_writer_print_str(response_writer, env, str)) + { + return axis2_http_response_writer_print_str(response_writer, env, AXIS2_HTTP_CRLF); + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_response_writer_println( + axis2_http_response_writer_t * response_writer, + const axutil_env_t * env) +{ + return axis2_http_response_writer_print_str(response_writer, env, AXIS2_HTTP_CRLF); +} diff --git a/src/core/transport/http/common/http_simple_request.c b/src/core/transport/http/common/http_simple_request.c new file mode 100644 index 0000000..9e10ce1 --- /dev/null +++ b/src/core/transport/http/common/http_simple_request.c @@ -0,0 +1,433 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +struct axis2_http_simple_request +{ + axis2_http_request_line_t *request_line; + axutil_array_list_t *header_group; + axutil_stream_t *stream; + axis2_bool_t owns_stream; +}; + +AXIS2_EXTERN axis2_http_simple_request_t *AXIS2_CALL +axis2_http_simple_request_create( + const axutil_env_t * env, + axis2_http_request_line_t * request_line, + axis2_http_header_t ** http_headers, + axis2_ssize_t http_hdr_count, + axutil_stream_t * content) +{ + axis2_http_simple_request_t *simple_request = NULL; + simple_request = (axis2_http_simple_request_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_http_simple_request_t)); + if(!simple_request) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + memset((void *)simple_request, 0, sizeof(axis2_http_simple_request_t)); + simple_request->request_line = request_line; + simple_request->stream = content; + + if(!(simple_request->stream)) + { + simple_request->stream = axutil_stream_create_basic(env); + if(!simple_request->stream) + { + axis2_http_simple_request_free(simple_request, env); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + simple_request->owns_stream = AXIS2_TRUE; + } + + if((http_hdr_count > 0) && http_headers) + { + int i = 0; + simple_request->header_group = axutil_array_list_create(env, http_hdr_count); + + for(i = 0; i < (int)http_hdr_count; i++) + /* We are sure that the difference lies within the int range */ + { + axutil_array_list_add(simple_request->header_group, env, (void *)http_headers[i]); + } + } + + return simple_request; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_simple_request_free( + axis2_http_simple_request_t * simple_request, + const axutil_env_t * env) +{ + /* free the stream only if we own it. Otherwise shouldn't free the stream + * since it belongs to the socket + */ + if(simple_request->owns_stream) + { + axutil_stream_free(simple_request->stream, env); + } + + if(simple_request->request_line) + { + axis2_http_request_line_free(simple_request->request_line, env); + } + + if(simple_request->header_group) + { + int i = 0; + axis2_http_header_t *tmp = NULL; + for(i = 0; i < axutil_array_list_size(simple_request->header_group, env); i++) + { + tmp = (axis2_http_header_t*)axutil_array_list_get(simple_request->header_group, env, i); + axis2_http_header_free(tmp, env); + } + axutil_array_list_free(simple_request->header_group, env); + } + AXIS2_FREE(env->allocator, simple_request); +} + +AXIS2_EXTERN axis2_http_request_line_t *AXIS2_CALL +axis2_http_simple_request_get_request_line( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env) +{ + return simple_request->request_line; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_simple_request_set_request_line( + axis2_http_simple_request_t * simple_request, + const axutil_env_t * env, + axis2_http_request_line_t * request_line) +{ + AXIS2_PARAM_CHECK(env->error, request_line, AXIS2_FAILURE); + simple_request->request_line = request_line; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_simple_request_contains_header( + axis2_http_simple_request_t * simple_request, + const axutil_env_t * env, + const axis2_char_t * name) +{ + int i = 0; + axis2_char_t *header_name = NULL; + int count = 0; + + AXIS2_PARAM_CHECK(env->error, name, AXIS2_FAILURE); + + if(!simple_request->header_group) + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, + "http simple request \ +does not contain headers, unable to find: %s header", name); + return AXIS2_FALSE; + } + + count = axutil_array_list_size(simple_request->header_group, env); + + if(0 == count) + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, + "http simple request \ +contains zero headers, unable to find: %s header", name); + return AXIS2_FALSE; + } + + for(i = 0; i < count; i++) + { + header_name = axis2_http_header_get_name((axis2_http_header_t *)axutil_array_list_get( + simple_request->header_group, env, i), env); + if(0 == axutil_strcasecmp(name, header_name)) + { + return AXIS2_TRUE; + } + } + return AXIS2_FALSE; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_http_simple_request_get_headers( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env) +{ + return simple_request->header_group; +} + +AXIS2_EXTERN axis2_http_header_t *AXIS2_CALL +axis2_http_simple_request_get_first_header( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env, + const axis2_char_t * str) +{ + axutil_array_list_t *header_group = NULL; + int i = 0; + int count = 0; + + AXIS2_PARAM_CHECK(env->error, str, NULL); + + header_group = simple_request->header_group; + if(!simple_request->header_group) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "http simple request does not contain any headers; unable to find: %s header", str); + return NULL; + } + + if(0 == axutil_array_list_size(header_group, env)) + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, + "http simple request contain zero headers, unable to find: %s header", str); + return NULL; + } + + count = axutil_array_list_size(header_group, env); + for(i = 0; i < count; i++) + { + axis2_http_header_t *tmp_header = NULL; + axis2_char_t *tmp_name = NULL; + tmp_header = (axis2_http_header_t *)axutil_array_list_get(header_group, env, i); + tmp_name = axis2_http_header_get_name(tmp_header, env); + if(0 == axutil_strcasecmp(str, tmp_name)) + { + return tmp_header; + } + } + return NULL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_simple_request_remove_headers( + axis2_http_simple_request_t * simple_request, + const axutil_env_t * env, + const axis2_char_t * str) +{ + axis2_http_header_t *tmp_header = NULL; + axis2_char_t *tmp_name = NULL; + int i = 0; + int count = 0; + axutil_array_list_t *header_group = NULL; + + AXIS2_PARAM_CHECK(env->error, str, AXIS2_FAILURE); + + header_group = simple_request->header_group; + + if(!header_group) + { + /* Even though we couldn't complete the op, we are sure that the + * requred header is no more in the request. So we can proceed without a + * problem. + */ + return AXIS2_SUCCESS; + } + + count = axutil_array_list_size(header_group, env); + + for(i = 0; i < count; i++) + { + tmp_header = (axis2_http_header_t *)axutil_array_list_get(header_group, env, i); + tmp_name = axis2_http_header_get_name(tmp_header, env); + if(0 == axutil_strcasecmp(str, tmp_name)) + { + axis2_http_header_free(tmp_header, env); + axutil_array_list_remove(header_group, env, i); + break; + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_simple_request_add_header( + axis2_http_simple_request_t * simple_request, + const axutil_env_t * env, + axis2_http_header_t * header) +{ + AXIS2_PARAM_CHECK(env->error, header, AXIS2_FAILURE); + + if(!simple_request->header_group) + { + simple_request->header_group = axutil_array_list_create(env, 1); + } + return axutil_array_list_add(simple_request->header_group, env, header); +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_http_simple_request_get_content_type( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env) +{ + axis2_http_header_t *tmp_header = NULL; + + tmp_header = axis2_http_simple_request_get_first_header(simple_request, env, + AXIS2_HTTP_HEADER_CONTENT_TYPE); + if(tmp_header) + { + return axis2_http_header_get_value(tmp_header, env); + } + + return AXIS2_HTTP_HEADER_ACCEPT_TEXT_PLAIN; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axis2_http_simple_request_get_charset( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env) +{ + axis2_http_header_t *tmp_header = NULL; + + tmp_header = axis2_http_simple_request_get_first_header(simple_request, env, + AXIS2_HTTP_HEADER_CONTENT_TYPE); + if(tmp_header) + { + axis2_char_t *value = axis2_http_header_get_value(tmp_header, env); + axis2_char_t *charset = (axis2_char_t *)strstr((char *)value, + (char *)AXIS2_HTTP_CHAR_SET_ENCODING); + if(charset) + { + charset = strchr((char *)charset, AXIS2_EQ); + return charset; + } + } + + return AXIS2_HTTP_DEFAULT_CONTENT_CHARSET; +} + +AXIS2_EXTERN axis2_ssize_t AXIS2_CALL +axis2_http_simple_request_get_content_length( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env) +{ + axis2_http_header_t *tmp_header = NULL; + int error_return = -1; + + tmp_header = axis2_http_simple_request_get_first_header(simple_request, env, + AXIS2_HTTP_HEADER_CONTENT_LENGTH); + if(tmp_header) + { + return AXIS2_ATOI(axis2_http_header_get_value(tmp_header, env)); + } + return error_return; +} + +AXIS2_EXTERN axutil_stream_t *AXIS2_CALL +axis2_http_simple_request_get_body( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env) +{ + return simple_request->stream; +} + +AXIS2_EXTERN axis2_ssize_t AXIS2_CALL +axis2_http_simple_request_get_body_bytes( + const axis2_http_simple_request_t * simple_request, + const axutil_env_t * env, + char **buf) +{ + axutil_stream_t *body = NULL; + char *tmp_buf = NULL; + char *tmp_buf2 = NULL; + char *tmp_buf3 = NULL; + int length = 0; + int read_len = 0; + + body = simple_request->stream; + if(!body) + { + *buf = (char *)AXIS2_MALLOC(env->allocator, 1); + *buf[0] = '\0'; + return 0; + } + + length = axis2_http_simple_request_get_content_length(simple_request, env); + if(length > 0) + { + *buf = (char *)AXIS2_MALLOC(env->allocator, length + 1); + read_len = axutil_stream_read(body, env, *buf, length + 1); + return read_len; + } + + tmp_buf2 = AXIS2_MALLOC(env->allocator, 128 * sizeof(char)); + while(axutil_stream_read(body, env, tmp_buf2, 128) > 0) + { + tmp_buf3 = axutil_stracat(env, tmp_buf, tmp_buf2); + if(tmp_buf) + { + AXIS2_FREE(env->allocator, tmp_buf); + tmp_buf = NULL; + } + tmp_buf = tmp_buf3; + + } + + if(tmp_buf2) + { + AXIS2_FREE(env->allocator, tmp_buf2); + tmp_buf2 = NULL; + } + + if(tmp_buf) + { + *buf = tmp_buf; + return axutil_strlen(tmp_buf); + } + + *buf = (char *)AXIS2_MALLOC(env->allocator, 1); + *buf[0] = AXIS2_ESC_NULL; + return 0; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_simple_request_set_body_string( + axis2_http_simple_request_t * simple_request, + const axutil_env_t * env, + void *str, + unsigned int str_len) +{ + axutil_stream_t *body_stream = NULL; + + AXIS2_PARAM_CHECK(env->error, str, AXIS2_FAILURE); + + body_stream = simple_request->stream; + if(!body_stream) + { + body_stream = axutil_stream_create_basic(env); + if(!body_stream) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "unable to create stream\ +for stream %s of %d length", (axis2_char_t *)str, str_len); + return AXIS2_FAILURE; + } + simple_request->stream = body_stream; + simple_request->owns_stream = AXIS2_TRUE; + } + + axutil_stream_write(body_stream, env, str, str_len); + return AXIS2_SUCCESS; +} diff --git a/src/core/transport/http/common/http_simple_response.c b/src/core/transport/http/common/http_simple_response.c new file mode 100644 index 0000000..74acb80 --- /dev/null +++ b/src/core/transport/http/common/http_simple_response.c @@ -0,0 +1,615 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include +#include +#include +#include +#include + +#define AXIS2_HTTP_SIMPLE_RESPONSE_READ_SIZE 2048 + +struct axis2_http_simple_response +{ + axis2_http_status_line_t *status_line; + axutil_array_list_t *header_group; + axutil_stream_t *stream; + axutil_array_list_t *mime_parts; + axis2_char_t *mtom_sending_callback_name; +}; + +AXIS2_EXTERN axis2_http_simple_response_t *AXIS2_CALL +axis2_http_simple_response_create( + const axutil_env_t * env, + axis2_http_status_line_t * status_line, + const axis2_http_header_t ** http_headers, + const axis2_ssize_t http_hdr_count, + axutil_stream_t * content) +{ + axis2_http_simple_response_t *ret = NULL; + ret = axis2_http_simple_response_create_default(env); + if(!ret) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "axis2 http simple response creation failed"); + return NULL; + } + + ret->status_line = status_line; + if(http_hdr_count > 0 && http_headers) + { + int i = 0; + ret->header_group = axutil_array_list_create(env, http_hdr_count); + + for(i = 0; i < (int)http_hdr_count; i++) + /* We are sure that the difference lies within the int range */ + { + axutil_array_list_add(ret->header_group, env, (void *)http_headers[i]); + } + } + ret->stream = content; + return ret; +} + +AXIS2_EXTERN axis2_http_simple_response_t *AXIS2_CALL +axis2_http_simple_response_create_default( + const axutil_env_t * env) +{ + axis2_http_simple_response_t *simple_response = NULL; + simple_response = (axis2_http_simple_response_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_http_simple_response_t)); + if(!simple_response) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + memset((void *)simple_response, 0, sizeof(axis2_http_simple_response_t)); + return simple_response; +} + +void AXIS2_CALL +axis2_http_simple_response_free( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env) +{ + if(simple_response->status_line) + { + axis2_http_status_line_free(simple_response->status_line, env); + } + + if(simple_response->header_group) + { + int i = 0; + for(i = 0; i < axutil_array_list_size(simple_response->header_group, env); i++) + { + void *tmp = NULL; + tmp = axutil_array_list_get(simple_response-> header_group, env, i); + if(tmp) + { + axis2_http_header_free((axis2_http_header_t *)tmp, env); + } + } + axutil_array_list_free(simple_response->header_group, env); + } + + if(simple_response->mime_parts) + { + int i = 0; + for(i = 0; i < axutil_array_list_size(simple_response->mime_parts, env); i++) + { + void *mime_part = NULL; + mime_part = axutil_array_list_get(simple_response->mime_parts, env, i); + if(mime_part) + { + axiom_mime_part_free((axiom_mime_part_t *)mime_part, env); + } + } + axutil_array_list_free(simple_response->mime_parts, env); + } + + /* Stream is not freed. Assumption : stream doesn't belong to the response */ + + AXIS2_FREE(env->allocator, simple_response); +} + +axis2_status_t AXIS2_CALL +axis2_http_simple_response_set_status_line( + struct axis2_http_simple_response * simple_response, + const axutil_env_t * env, + const axis2_char_t * http_ver, + const int status_code, + const axis2_char_t * phrase) +{ + if(!http_ver || !phrase || !status_code) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "invalid parameter given"); + return AXIS2_FAILURE; + } + + if(simple_response->status_line) + { + axis2_http_status_line_free(simple_response->status_line, env); + } + + simple_response->status_line = axis2_http_status_line_create_with_values( + env, http_ver, status_code, phrase); + if(!simple_response->status_line) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "http status line creation failed for string %s %3d %s", http_ver, status_code, phrase); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +axis2_char_t *AXIS2_CALL +axis2_http_simple_response_get_phrase( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env) +{ + if(!(simple_response->status_line)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "axis2 simple response , status line is not available"); + return NULL; + } + + return axis2_http_status_line_get_reason_phrase(simple_response-> status_line, env); +} + +int AXIS2_CALL +axis2_http_simple_response_get_status_code( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env) +{ + if(!(simple_response->status_line)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "axis2 simple response , status line is not available"); + return -1; + } + return axis2_http_status_line_get_status_code(simple_response->status_line, env); +} + +axis2_char_t *AXIS2_CALL +axis2_http_simple_response_get_http_version( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env) +{ + if(!(simple_response->status_line)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "axis2 simple response , status line is not available"); + + return NULL; + } + return axis2_http_status_line_get_http_version(simple_response->status_line, env); +} + +axis2_status_t AXIS2_CALL +axis2_http_simple_response_set_http_version( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axis2_char_t *http_version) +{ + if(!(simple_response->status_line)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "axis2 simple response , status line is not available"); + + return AXIS2_FAILURE; + } + axis2_http_status_line_set_http_version(simple_response->status_line, env, http_version); + return AXIS2_SUCCESS; +} + +axis2_char_t *AXIS2_CALL +axis2_http_simple_response_get_status_line( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env) +{ + + if(!(simple_response->status_line)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "axis2 simple response , status line is not available"); + + return NULL; + } + return axis2_http_status_line_to_string(simple_response->status_line, env); +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_http_simple_response_get_headers( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env) +{ + return simple_response->header_group; +} + +axutil_array_list_t *AXIS2_CALL +axis2_http_simple_response_extract_headers( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env) +{ + axutil_array_list_t *temp = NULL; + temp = simple_response->header_group; + if(temp) + { + simple_response->header_group = NULL; + } + return temp; +} + +axis2_http_header_t *AXIS2_CALL +axis2_http_simple_response_get_first_header( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + const axis2_char_t * str) +{ + axis2_http_header_t *tmp_header = NULL; + axis2_char_t *tmp_name = NULL; + int i = 0; + int count = 0; + axutil_array_list_t *header_group = NULL; + + AXIS2_PARAM_CHECK(env->error, str, NULL); + + header_group = simple_response->header_group; + if(!simple_response->header_group) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "axis2 simple response , headers not available"); + return NULL; + } + + if(0 == axutil_array_list_size(header_group, env)) + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "axis2 simple response , contains zero headers"); + + return NULL; + } + + count = axutil_array_list_size(header_group, env); + + for(i = 0; i < count; i++) + { + tmp_header = (axis2_http_header_t *)axutil_array_list_get(header_group, env, i); + tmp_name = axis2_http_header_get_name(tmp_header, env); + if(0 == axutil_strcasecmp(str, tmp_name)) + { + return tmp_header; + } + } + return NULL; + +} + +axis2_status_t AXIS2_CALL +axis2_http_simple_response_remove_headers( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + const axis2_char_t * str) +{ + axutil_array_list_t *header_group = NULL; + int i = 0; + int count = 0; + + AXIS2_PARAM_CHECK(env->error, str, AXIS2_FAILURE); + + header_group = simple_response->header_group; + if(!header_group) + { + /* Even though we couldn't complete the op, we are sure that the + * required header is no more in the request. So we can proceed without a + * problem. + */ + return AXIS2_SUCCESS; + } + + count = axutil_array_list_size(header_group, env); + for(i = 0; i < count; i++) + { + axis2_http_header_t *tmp_header = NULL; + axis2_char_t *tmp_name = NULL; + tmp_header = (axis2_http_header_t *)axutil_array_list_get(header_group, env, i); + tmp_name = axis2_http_header_get_name(tmp_header, env); + if(0 == axutil_strcasecmp(str, tmp_name)) + { + axis2_http_header_free(tmp_header, env); + axutil_array_list_remove(header_group, env, i); + break; + } + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_http_simple_response_set_header( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axis2_http_header_t * header) +{ + int i = 0; + int count = 0; + axutil_array_list_t *header_group = NULL; + + AXIS2_PARAM_CHECK(env->error, header, AXIS2_FAILURE); + + if(!simple_response->header_group) + { + simple_response->header_group = axutil_array_list_create(env, 10); + axutil_array_list_add(simple_response->header_group, env, header); + return AXIS2_SUCCESS; + } + + /* If a header with the same name exists search and remove the old header */ + header_group = simple_response->header_group; + count = axutil_array_list_size(header_group, env); + for(i = 0; i < count; i++) + { + axis2_http_header_t *tmp_header = NULL; + axis2_char_t *tmp_name = NULL; + tmp_header = (axis2_http_header_t *)axutil_array_list_get(header_group, env, i); + tmp_name = axis2_http_header_get_name(tmp_header, env); + if(0 == axutil_strcasecmp(axis2_http_header_get_name(header, env), tmp_name)) + { + axis2_http_header_free(tmp_header, env); + axutil_array_list_set(header_group, env, i, header); + return AXIS2_SUCCESS; + } + } + + /* if header is not found, then we have to add it */ + axutil_array_list_add(header_group, env, header); + return AXIS2_SUCCESS; +} + +const axis2_char_t *AXIS2_CALL +axis2_http_simple_response_get_charset( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env) +{ + axis2_http_header_t *tmp_header = NULL; + + tmp_header = axis2_http_simple_response_get_first_header(simple_response, env, + AXIS2_HTTP_HEADER_CONTENT_TYPE); + if(tmp_header) + { + axis2_char_t *value = axis2_http_header_get_value(tmp_header, env); + axis2_char_t *charset = (axis2_char_t *)strstr((char *)value, + (char *)AXIS2_HTTP_CHAR_SET_ENCODING); + if(charset) + { + charset = strchr((char *)charset, AXIS2_EQ); + return charset; + } + } + + return AXIS2_HTTP_DEFAULT_CONTENT_CHARSET; +} + +axis2_ssize_t AXIS2_CALL +axis2_http_simple_response_get_content_length( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env) +{ + axis2_http_header_t *tmp_header = NULL; + int error_return = -1; + + tmp_header = axis2_http_simple_response_get_first_header(simple_response, env, + AXIS2_HTTP_HEADER_CONTENT_LENGTH); + if(tmp_header) + { + return AXIS2_ATOI(axis2_http_header_get_value(tmp_header, env)); + } + return error_return; +} + +const axis2_char_t *AXIS2_CALL +axis2_http_simple_response_get_content_type( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env) +{ + axis2_http_header_t *tmp_header = NULL; + + tmp_header = axis2_http_simple_response_get_first_header(simple_response, env, + AXIS2_HTTP_HEADER_CONTENT_TYPE); + if(tmp_header) + { + return axis2_http_header_get_value(tmp_header, env); + } + + return AXIS2_HTTP_HEADER_ACCEPT_TEXT_PLAIN; +} + +axis2_status_t AXIS2_CALL +axis2_http_simple_response_set_body_string( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axis2_char_t * str) +{ + axutil_stream_t *body_stream = NULL; + + AXIS2_PARAM_CHECK(env->error, str, AXIS2_FAILURE); + + body_stream = simple_response->stream; + if(!body_stream) + { + body_stream = axutil_stream_create_basic(env); + if(!body_stream) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "unable to create basic stream for string %s", + str); + return AXIS2_FAILURE; + } + simple_response->stream = body_stream; + } + axutil_stream_write(body_stream, env, str, axutil_strlen(str)); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_http_simple_response_set_body_stream( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axutil_stream_t * stream) +{ + /* + * We don't free the stream + * Problem in freeing is most of the time the stream doesn't belong + * to the http_simple_response + */ + simple_response->stream = stream; + return AXIS2_SUCCESS; +} + +axutil_stream_t *AXIS2_CALL +axis2_http_simple_response_get_body( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env) +{ + return simple_response->stream; +} + +axis2_ssize_t AXIS2_CALL +axis2_http_simple_response_get_body_bytes( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axis2_char_t ** buffer) +{ + axutil_stream_t *tmp_stream = NULL; + axis2_bool_t loop_state = AXIS2_TRUE; + int return_size = -1; + + if(!simple_response->stream) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NULL_BODY, AXIS2_FAILURE); + return return_size; + } + tmp_stream = axutil_stream_create_basic(env); + while(loop_state) + { + int read = 0; + int write = 0; + char buf[AXIS2_HTTP_SIMPLE_RESPONSE_READ_SIZE]; + + read = axutil_stream_read(simple_response->stream, env, buf, + AXIS2_HTTP_SIMPLE_RESPONSE_READ_SIZE); + if(read < 0) + { + break; + } + write = axutil_stream_write(tmp_stream, env, buf, read); + if(read < (AXIS2_HTTP_SIMPLE_RESPONSE_READ_SIZE - 1)) + { + break; + } + } + return_size = axutil_stream_get_len(tmp_stream, env); + + if(return_size > 0) + { + *buffer = (char *)AXIS2_MALLOC(env->allocator, sizeof(char) * (return_size + 1)); + + if(!buffer) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return -1; + } + + return_size = axutil_stream_read(tmp_stream, env, *buffer, return_size + 1); + } + axutil_stream_free(tmp_stream, env); + return return_size; +} + +axis2_bool_t AXIS2_CALL +axis2_http_simple_response_contains_header( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + const axis2_char_t * name) +{ + axis2_char_t *header_name = NULL; + int count = 0; + int i = 0; + + AXIS2_PARAM_CHECK(env->error, name, AXIS2_FAILURE); + if(!simple_response->header_group) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "axis2 simple response , headers not available"); + return AXIS2_FALSE; + } + + count = axutil_array_list_size(simple_response->header_group, env); + if(0 == count) + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "axis2 simple response , contains zero headers"); + return AXIS2_FALSE; + } + + for(i = 0; i < count; i++) + { + axis2_http_header_t *header = (axis2_http_header_t *)axutil_array_list_get( + simple_response->header_group, env, i); + header_name = axis2_http_header_get_name(header, env); + if(0 == axutil_strcasecmp(name, header_name)) + { + return AXIS2_TRUE; + } + } + return AXIS2_FALSE; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_http_simple_response_get_mime_parts( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env) +{ + + return simple_response->mime_parts; + +} + +void AXIS2_EXTERN AXIS2_CALL +axis2_http_simple_response_set_mime_parts( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axutil_array_list_t *mime_parts) +{ + + simple_response->mime_parts = mime_parts; + +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_simple_response_get_mtom_sending_callback_name( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env) +{ + return simple_response->mtom_sending_callback_name; +} + +void AXIS2_EXTERN AXIS2_CALL +axis2_http_simple_response_set_mtom_sending_callback_name( + axis2_http_simple_response_t * simple_response, + const axutil_env_t * env, + axis2_char_t *mtom_sending_callback_name) +{ + simple_response->mtom_sending_callback_name = + mtom_sending_callback_name; +} diff --git a/src/core/transport/http/common/http_status_line.c b/src/core/transport/http/common/http_status_line.c new file mode 100644 index 0000000..fdf0fea --- /dev/null +++ b/src/core/transport/http/common/http_status_line.c @@ -0,0 +1,267 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +struct axis2_http_status_line +{ + axis2_char_t *line; + axis2_char_t *http_version; + axis2_char_t *status_code; + axis2_char_t *reason_phrase; +}; + +AXIS2_EXTERN axis2_http_status_line_t *AXIS2_CALL +axis2_http_status_line_create( + const axutil_env_t * env, + const axis2_char_t * str) +{ + axis2_char_t *tmp_status_line = NULL; + axis2_char_t *reason_phrase = NULL; + axis2_char_t *status_code = NULL; + axis2_char_t *http_version = NULL; + int i = 0; + axis2_char_t *tmp = NULL; + axis2_http_status_line_t *status_line = NULL; + + status_line = (axis2_http_status_line_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_http_status_line_t)); + + if(!status_line) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + memset((void *)status_line, 0, sizeof(axis2_http_status_line_t)); + status_line->line = (axis2_char_t *)axutil_strdup(env, str); + + /* extract status code, phrase and version from given string */ + tmp = strstr(str, AXIS2_HTTP_CRLF); + if(!tmp) + { + axis2_http_status_line_free(status_line, env); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE, AXIS2_FAILURE); + return NULL; + } + + i = (int)(tmp - str); /* We are sure that the difference lies within the int range */ + + tmp_status_line = AXIS2_MALLOC(env->allocator, i * sizeof(axis2_char_t) + 1); + if(!tmp_status_line) + { + axis2_http_status_line_free(status_line, env); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + memcpy(tmp_status_line, str, i * sizeof(axis2_char_t)); + tmp_status_line[i] = AXIS2_ESC_NULL; + tmp = tmp_status_line; + + /* get HTTP version */ + http_version = tmp; + tmp = strchr(tmp, AXIS2_SPACE); + if(!tmp) + { + AXIS2_FREE(env->allocator, tmp_status_line); + axis2_http_status_line_free(status_line, env); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE, AXIS2_FAILURE); + return NULL; + } + *tmp++ = AXIS2_ESC_NULL; + + /* get status code */ + status_code = tmp; + tmp = strchr(tmp, AXIS2_SPACE); + if(!tmp) + { + AXIS2_FREE(env->allocator, tmp_status_line); + axis2_http_status_line_free(status_line, env); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE, AXIS2_FAILURE); + return NULL; + } + *tmp++ = AXIS2_ESC_NULL; + + /* get reason phrase */ + reason_phrase = tmp; + + /* populate values */ + status_line->http_version = (axis2_char_t *)axutil_strdup(env, http_version); + status_line->status_code = (axis2_char_t *)axutil_strdup(env, status_code); + status_line->reason_phrase = (axis2_char_t *)axutil_strdup(env, reason_phrase); + AXIS2_FREE(env->allocator, tmp_status_line); + + if(!status_line->http_version || !status_line->reason_phrase || !status_line->status_code) + { + axis2_http_status_line_free(status_line, env); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + return status_line; +} + +AXIS2_EXTERN axis2_http_status_line_t *AXIS2_CALL +axis2_http_status_line_create_with_values( + const axutil_env_t * env, + const axis2_char_t * http_ver, + const int status_code, + const axis2_char_t * phrase) +{ + axis2_http_status_line_t *status_line = NULL; + status_line = (axis2_http_status_line_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_http_status_line_t)); + if(!status_line) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + memset((void *)status_line, 0, sizeof(axis2_http_status_line_t)); + + status_line->status_code = AXIS2_MALLOC(env->allocator, 6 * sizeof(axis2_char_t *)); + if(!status_line->status_code) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + axis2_http_status_line_free(status_line, env); + return NULL; + } + sprintf(status_line->status_code, "%3d", status_code); + + status_line->http_version = axutil_strdup(env, http_ver); + status_line->reason_phrase = axutil_strdup(env, phrase); + if(!status_line->http_version || !status_line->reason_phrase) + { + axis2_http_status_line_free(status_line, env); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + status_line->line = axutil_strcat(env, http_ver, " ", status_line->status_code, " ", phrase, + AXIS2_HTTP_CRLF, NULL); + if(!status_line->line) + { + axis2_http_status_line_free(status_line, env); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + return status_line; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_status_line_free( + axis2_http_status_line_t * status_line, + const axutil_env_t * env) +{ + + if(!status_line) + { + return; + } + + if(status_line->line) + { + AXIS2_FREE(env->allocator, status_line->line); + } + if(status_line->http_version) + { + AXIS2_FREE(env->allocator, status_line->http_version); + } + if(status_line->status_code) + { + AXIS2_FREE(env->allocator, status_line->status_code); + } + if(status_line->reason_phrase) + { + AXIS2_FREE(env->allocator, status_line->reason_phrase); + } + + AXIS2_FREE(env->allocator, status_line); + return; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_http_status_line_get_status_code( + const axis2_http_status_line_t * status_line, + const axutil_env_t * env) +{ + if(status_line->status_code) + { + return AXIS2_ATOI(status_line->status_code); + } + else + { + return AXIS2_CRITICAL_FAILURE; + } + +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_status_line_get_http_version( + const axis2_http_status_line_t * status_line, + const axutil_env_t * env) +{ + return status_line->http_version; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_status_line_set_http_version( + axis2_http_status_line_t * status_line, + const axutil_env_t * env, + axis2_char_t *http_version) +{ + if(status_line->http_version) + { + AXIS2_FREE(env->allocator, status_line->http_version); + status_line->http_version = NULL; + } + + status_line->http_version = (axis2_char_t *)axutil_strdup(env, http_version); + +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_status_line_get_reason_phrase( + const axis2_http_status_line_t * status_line, + const axutil_env_t * env) +{ + return status_line->reason_phrase; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_status_line_starts_with_http( + axis2_http_status_line_t * status_line, + const axutil_env_t * env) +{ + if(0 == axutil_strncasecmp(status_line->line, AXIS2_HTTP, 4)) + { + return AXIS2_TRUE; + } + return AXIS2_FALSE; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_status_line_to_string( + axis2_http_status_line_t * status_line, + const axutil_env_t * env) +{ + return status_line->line; +} diff --git a/src/core/transport/http/common/http_worker.c b/src/core/transport/http/common/http_worker.c new file mode 100644 index 0000000..26ccce3 --- /dev/null +++ b/src/core/transport/http/common/http_worker.c @@ -0,0 +1,2064 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct axis2_http_worker +{ + axis2_conf_ctx_t *conf_ctx; + int svr_port; + axis2_bool_t is_application_client_side; +}; + +static axis2_status_t +axis2_http_worker_set_response_headers( + axis2_http_worker_t * http_worker, + const axutil_env_t * env, + axis2_simple_http_svr_conn_t * svr_conn, + axis2_http_simple_request_t * simple_request, + axis2_http_simple_response_t * simple_response, + axis2_ssize_t content_length); + +static axutil_hash_t * +axis2_http_worker_get_headers( + axis2_http_worker_t * http_worker, + const axutil_env_t * env, + axis2_http_simple_request_t * request); + +static axis2_http_simple_response_t * +axis2_http_worker_create_simple_response( + axis2_http_worker_t *http_worker, + const axutil_env_t *env); + +AXIS2_EXTERN axis2_http_worker_t *AXIS2_CALL +axis2_http_worker_create( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + axis2_http_worker_t *http_worker = NULL; + + http_worker = (axis2_http_worker_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_http_worker_t)); + + if(!http_worker) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + http_worker->conf_ctx = conf_ctx; + http_worker->svr_port = 9090; /* default - must set later */ + http_worker->is_application_client_side = AXIS2_FALSE; /* default is creating for application + server side */ + + return http_worker; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_worker_free( + axis2_http_worker_t * http_worker, + const axutil_env_t * env) +{ + http_worker->conf_ctx = NULL; + AXIS2_FREE(env->allocator, http_worker); + return; +} + +/* Each in-coming request is passed into this function for process. Basically http method to deliver + * is deduced here and call appropriate http processing function. + * eg. transport_utils_process_http_post_request() function. Once this function call done it will go + * through engine inflow phases and finally hit the message receiver for the operation. + */ +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_worker_process_request( + axis2_http_worker_t * http_worker, + const axutil_env_t * env, + axis2_simple_http_svr_conn_t * svr_conn, + axis2_http_simple_request_t * simple_request) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_msg_ctx_t *msg_ctx = NULL; + axutil_stream_t *request_body = NULL; + + /* Creating out_stream as basic stream */ + axutil_stream_t *out_stream = axutil_stream_create_basic(env); + axis2_http_simple_response_t *response = NULL; + + /* Transport in and out descriptions */ + axis2_transport_out_desc_t *out_desc = NULL; + axis2_transport_in_desc_t *in_desc = NULL; + + axis2_char_t *http_version = NULL; + axis2_char_t *soap_action = NULL; + axutil_string_t *soap_action_str = NULL; + axis2_bool_t processed = AXIS2_FALSE; + axis2_status_t status = AXIS2_FAILURE; + int content_length = -1; + axis2_http_header_t *encoding_header = NULL; + axis2_char_t *encoding_header_value = NULL; + axis2_op_ctx_t *op_ctx = NULL; + axis2_char_t *svr_ip = NULL; + axis2_char_t *peer_ip = NULL; + axutil_url_t *request_url = NULL; + axis2_http_out_transport_info_t *http_out_transport_info = NULL; + axutil_hash_t *headers = NULL; + axis2_char_t *url_external_form = NULL; + axis2_char_t *svc_grp_uuid = NULL; + axis2_char_t *path = NULL; + axutil_property_t *peer_property = NULL; + + /* REST processing variables */ + axis2_bool_t is_get = AXIS2_FALSE; + axis2_bool_t is_head = AXIS2_FALSE; + axis2_bool_t is_put = AXIS2_FALSE; + axis2_bool_t is_delete = AXIS2_FALSE; + axis2_bool_t request_handled = AXIS2_FALSE; + + /* HTTP and Proxy authentication */ + axis2_char_t *cookie_header_value = NULL; + /*axis2_char_t *set_cookie_header_value = NULL; + axis2_http_header_t *set_cookie_header = NULL; + axis2_http_header_t *connection_header = NULL;*/ + axis2_http_header_t *cookie_header = NULL; + axis2_char_t *accept_header_value = NULL; + axis2_http_header_t *accept_header = NULL; + axis2_char_t *accept_charset_header_value = NULL; + axis2_http_header_t *accept_charset_header = NULL; + axis2_char_t *accept_language_header_value = NULL; + axis2_http_header_t *accept_language_header = NULL; + + axis2_char_t *http_method = NULL; + axis2_http_request_line_t *request_line = NULL; + + axutil_hash_t *request_params = NULL; + axis2_char_t *request_uri = NULL; + axis2_char_t *url_ext_form = NULL; + const axis2_char_t *content_type = NULL; + + axis2_msg_ctx_t *out_msg_ctx = NULL; + axis2_msg_ctx_t *in_msg_ctx = NULL; + axis2_msg_ctx_t **msg_ctx_map = NULL; + + AXIS2_PARAM_CHECK(env->error, svr_conn, AXIS2_FALSE); + AXIS2_PARAM_CHECK(env->error, simple_request, AXIS2_FALSE); + + conf_ctx = http_worker->conf_ctx; + if(!conf_ctx) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NULL_CONFIGURATION_CONTEXT, AXIS2_FAILURE); + return AXIS2_FALSE; + } + + content_length = axis2_http_simple_request_get_content_length(simple_request, env); + request_line = axis2_http_simple_request_get_request_line(simple_request, env); + http_method = axis2_http_request_line_get_method(request_line, env); + + http_version = axis2_http_request_line_get_http_version(request_line, env); + if(!http_version) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NULL_HTTP_VERSION, AXIS2_FAILURE); + return AXIS2_FALSE; + } + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Client HTTP version %s", http_version); + + encoding_header = axis2_http_simple_request_get_first_header(simple_request, env, + AXIS2_HTTP_HEADER_TRANSFER_ENCODING); + if(encoding_header) + { + encoding_header_value = axis2_http_header_get_value(encoding_header, env); + } + + response = axis2_http_worker_create_simple_response(http_worker, env); + if(!response) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "cannot create http simple response"); + return AXIS2_FALSE; + } + + /* if length is not given and it is not chunked, then return error to client */ + if((content_length < 0) && encoding_header_value + && (0 != axutil_strcmp(encoding_header_value, AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED))) + { + if(0 == axutil_strcasecmp(http_method, AXIS2_HTTP_POST) + || 0 == axutil_strcasecmp(http_method, AXIS2_HTTP_PUT)) + { + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_LENGTH_REQUIRED_CODE_VAL, + AXIS2_HTTP_RESPONSE_LENGTH_REQUIRED_CODE_NAME); + + status = axis2_simple_http_svr_conn_write_response(svr_conn, env, response); + axis2_http_simple_response_free(response, env); + return status; + } + } + + request_body = axis2_http_simple_request_get_body(simple_request, env); + + out_desc = axis2_conf_get_transport_out(axis2_conf_ctx_get_conf(conf_ctx, env), env, + AXIS2_TRANSPORT_ENUM_HTTP); + in_desc = axis2_conf_get_transport_in(axis2_conf_ctx_get_conf(conf_ctx, env), env, + AXIS2_TRANSPORT_ENUM_HTTP); + + msg_ctx = axis2_msg_ctx_create(env, conf_ctx, in_desc, out_desc); + axis2_msg_ctx_set_server_side(msg_ctx, env, AXIS2_TRUE); + + cookie_header = axis2_http_simple_request_get_first_header(simple_request, env, + AXIS2_HTTP_HEADER_COOKIE); + if(cookie_header) + { + char *session_str = NULL; + axis2_char_t *session_id = NULL; + + cookie_header_value = axis2_http_header_get_value(cookie_header, env); + session_id = axis2_http_transport_utils_get_session_id_from_cookie(env, + cookie_header_value); + if(session_id) + session_str = env->get_session_fn((void *) conf_ctx, session_id); + if(session_str) + axis2_http_transport_utils_set_session(env, msg_ctx, session_str); + } + + /*connection_header = axis2_http_simple_request_get_first_header(simple_request, env, + AXIS2_HTTP_HEADER_CONNECTION); + if(connection_header) + { + axutil_property_t *connection_header_property = NULL; + axis2_char_t *connection_header_value = NULL; + connection_header_value = axis2_http_header_get_value(connection_header, env); + connection_header_property = axutil_property_create_with_args(env, + AXIS2_SCOPE_REQUEST, 0, 0, connection_header_value); + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_HTTP_HEADER_CONNECTION, + connection_header_property); + }*/ + + /* Server and Peer IP's */ + svr_ip = axis2_simple_http_svr_conn_get_svr_ip(svr_conn, env); + peer_ip = axis2_simple_http_svr_conn_get_peer_ip(svr_conn, env); + + if(peer_ip) + { + peer_property = axutil_property_create(env); + axutil_property_set_value(peer_property, env, axutil_strdup(env, peer_ip)); + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_SVR_PEER_IP_ADDR, peer_property); + } + + path = axis2_http_request_line_get_uri(request_line, env); + + request_url = axutil_url_create(env, AXIS2_HTTP_PROTOCOL, svr_ip, http_worker->svr_port, path); + if(request_url) + { + url_external_form = axutil_url_to_external_form(request_url, env); + } + + if(!url_external_form) + { + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL, AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_NAME); + status = axis2_simple_http_svr_conn_write_response(svr_conn, env, response); + axis2_http_simple_response_free(response, env); + response = NULL; + return status; + } + + accept_header = axis2_http_simple_request_get_first_header(simple_request, env, + AXIS2_HTTP_HEADER_ACCEPT); + if(accept_header) + { + accept_header_value = axis2_http_header_get_value(accept_header, env); + } + if(accept_header_value) + { + axutil_array_list_t *accept_header_field_list = NULL; + axutil_array_list_t *accept_record_list = NULL; + accept_header_field_list = axutil_tokenize(env, accept_header_value, AXIS2_COMMA); + if(accept_header_field_list && axutil_array_list_size(accept_header_field_list, env) > 0) + { + axis2_char_t *token = NULL; + accept_record_list = axutil_array_list_create(env, axutil_array_list_size( + accept_header_field_list, env)); + do + { + if(token) + { + axis2_http_accept_record_t *rec = NULL; + rec = axis2_http_accept_record_create(env, token); + if(rec) + { + axutil_array_list_add(accept_record_list, env, rec); + } + AXIS2_FREE(env->allocator, token); + } + token = (axis2_char_t *)axutil_array_list_remove(accept_header_field_list, env, 0); + } + while(token); + } + if(accept_record_list && axutil_array_list_size(accept_record_list, env) > 0) + { + axis2_msg_ctx_set_http_accept_record_list(msg_ctx, env, accept_record_list); + } + } + + accept_charset_header = axis2_http_simple_request_get_first_header(simple_request, env, + AXIS2_HTTP_HEADER_ACCEPT_CHARSET); + if(accept_charset_header) + { + accept_charset_header_value = axis2_http_header_get_value(accept_charset_header, env); + } + if(accept_charset_header_value) + { + axutil_array_list_t *accept_charset_header_field_list = NULL; + axutil_array_list_t *accept_charset_record_list = NULL; + accept_charset_header_field_list = axutil_tokenize(env, accept_charset_header_value, + AXIS2_COMMA); + if(accept_charset_header_field_list && axutil_array_list_size( + accept_charset_header_field_list, env) > 0) + { + axis2_char_t *token = NULL; + accept_charset_record_list = axutil_array_list_create(env, axutil_array_list_size( + accept_charset_header_field_list, env)); + do + { + if(token) + { + axis2_http_accept_record_t *rec = NULL; + rec = axis2_http_accept_record_create(env, token); + if(rec) + { + axutil_array_list_add(accept_charset_record_list, env, rec); + } + AXIS2_FREE(env->allocator, token); + } + token = (axis2_char_t *)axutil_array_list_remove(accept_charset_header_field_list, + env, 0); + } + while(token); + } + + if(accept_charset_record_list && axutil_array_list_size(accept_charset_record_list, env) + > 0) + { + axis2_msg_ctx_set_http_accept_charset_record_list(msg_ctx, env, + accept_charset_record_list); + } + } + + accept_language_header = axis2_http_simple_request_get_first_header(simple_request, env, + AXIS2_HTTP_HEADER_ACCEPT_LANGUAGE); + if(accept_language_header) + { + accept_language_header_value = axis2_http_header_get_value(accept_language_header, env); + } + + if(accept_language_header_value) + { + axutil_array_list_t *accept_language_header_field_list = NULL; + axutil_array_list_t *accept_language_record_list = NULL; + accept_language_header_field_list = axutil_tokenize(env, accept_language_header_value, + AXIS2_COMMA); + if(accept_language_header_field_list && axutil_array_list_size( + accept_language_header_field_list, env) > 0) + { + axis2_char_t *token = NULL; + accept_language_record_list = axutil_array_list_create(env, axutil_array_list_size( + accept_language_header_field_list, env)); + do + { + if(token) + { + axis2_http_accept_record_t *rec = NULL; + rec = axis2_http_accept_record_create(env, token); + if(rec) + { + axutil_array_list_add(accept_language_record_list, env, rec); + } + AXIS2_FREE(env->allocator, token); + } + token = (axis2_char_t *)axutil_array_list_remove(accept_language_header_field_list, + env, 0); + } + while(token); + } + if(accept_language_record_list && axutil_array_list_size(accept_language_record_list, env) + > 0) + { + axis2_msg_ctx_set_http_accept_language_record_list(msg_ctx, env, + accept_language_record_list); + } + } + + /* Here out_stream is set into the in message context. out_stream is copied from in message context + * into the out message context later in core_utils_create_out_msg_ctx() function. The buffer in + * out_stream is finally filled with the soap envelope in http_transport_sender_invoke() function. + * To avoid double freeing of out_stream we reset the out message context at the end of engine + * receive function. + */ + axis2_msg_ctx_set_transport_out_stream(msg_ctx, env, out_stream); + + headers = axis2_http_worker_get_headers(http_worker, env, simple_request); + axis2_msg_ctx_set_transport_headers(msg_ctx, env, headers); + + svc_grp_uuid = axutil_uuid_gen(env); + if(svc_grp_uuid) + { + axutil_string_t *svc_grp_uuid_str = axutil_string_create_assume_ownership(env, + &svc_grp_uuid); + axis2_msg_ctx_set_svc_grp_ctx_id(msg_ctx, env, svc_grp_uuid_str); + axutil_string_free(svc_grp_uuid_str, env); + } + + http_out_transport_info = axis2_http_out_transport_info_create(env, response); + axis2_msg_ctx_set_out_transport_info(msg_ctx, env, &(http_out_transport_info->out_transport)); + + if(axis2_http_simple_request_get_first_header(simple_request, env, + AXIS2_HTTP_HEADER_SOAP_ACTION)) + { + soap_action = axis2_http_header_get_value(axis2_http_simple_request_get_first_header( + simple_request, env, AXIS2_HTTP_HEADER_SOAP_ACTION), env); + soap_action_str = axutil_string_create(env, soap_action); + } + + if(0 == axutil_strcasecmp(http_method, AXIS2_HTTP_GET)) + { + is_get = AXIS2_TRUE; + } + else if(0 == axutil_strcasecmp(http_method, AXIS2_HTTP_HEAD)) + { + is_head = AXIS2_TRUE; + } + else if(0 == axutil_strcasecmp(http_method, AXIS2_HTTP_DELETE)) + { + is_delete = AXIS2_TRUE; + } + else if(0 == axutil_strcasecmp(http_method, AXIS2_HTTP_PUT)) + { + is_put = AXIS2_TRUE; + } + + request_uri = axis2_http_request_line_get_uri(request_line, env); + request_params = axis2_http_transport_utils_get_request_params(env, request_uri); + url_ext_form = axutil_url_to_external_form(request_url, env); + + content_type = axis2_http_simple_request_get_content_type(simple_request, env); + + if(is_get || is_head || is_delete) + { + + if(is_get) + { + /* HTTP GET */ + processed = axis2_http_transport_utils_process_http_get_request(env, msg_ctx, + request_body, out_stream, content_type, soap_action_str, url_ext_form, conf_ctx, + request_params); + } + else if(is_delete) + { + /* HTTP DELETE */ + processed = axis2_http_transport_utils_process_http_delete_request(env, msg_ctx, + request_body, out_stream, content_type, soap_action_str, url_ext_form, conf_ctx, + request_params); + } + else if(is_head) + { + /* HTTP HEAD */ + processed = axis2_http_transport_utils_process_http_head_request(env, msg_ctx, + request_body, out_stream, content_type, soap_action_str, url_ext_form, conf_ctx, + request_params); + } + + if(AXIS2_FALSE == processed) + { + axis2_http_header_t *cont_len = NULL; + axis2_http_header_t *cont_type = NULL; + axis2_char_t *body_string = NULL; + axis2_char_t *wsdl = NULL; + axis2_bool_t is_services_path = AXIS2_FALSE; + + if(!is_delete) + { + axis2_char_t *temp = NULL; + /* check whether request url have "/services" */ + temp = strstr(axutil_url_get_path(request_url, env), AXIS2_REQUEST_URL_PREFIX); + if(temp) + { + temp += strlen(AXIS2_REQUEST_URL_PREFIX); + if(*temp == AXIS2_F_SLASH) + { + temp++; + } + if(!*temp || *temp == AXIS2_Q_MARK || *temp == AXIS2_H_MARK) + { + is_services_path = AXIS2_TRUE; + } + } + + } + + /* processing request for WSDL via "?wsdl" */ + wsdl = strstr(url_external_form, AXIS2_REQUEST_WSDL); + if(is_services_path) + { + /* request for service */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_OK_CODE_VAL, AXIS2_HTTP_RESPONSE_OK_CODE_NAME); + body_string = axis2_http_transport_utils_get_services_html(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(!is_delete && wsdl) + { + /* Request is not for delete and ask for wsdl */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_OK_CODE_VAL, AXIS2_HTTP_RESPONSE_OK_CODE_NAME); + body_string = axis2_http_transport_utils_get_services_static_wsdl(env, conf_ctx, + url_external_form); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_APPLICATION_XML); + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(env->error->error_number == AXIS2_ERROR_SVC_OR_OP_NOT_FOUND) + { + + /* Processing SVC or Operation Not found case */ + axutil_array_list_t *method_list = NULL; + int size = 0; + method_list = axis2_msg_ctx_get_supported_rest_http_methods(msg_ctx, env); + size = axutil_array_list_size(method_list, env); + if(method_list && size) + { + axis2_http_header_t *allow_header = NULL; + axis2_char_t *method_list_str = NULL; + axis2_char_t *temp; + int i = 0; + method_list_str = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * 29); + + if(!method_list_str) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FALSE); + } + + temp = method_list_str; + for(i = 0; i < size; i++) + { + if(i) + { + sprintf(temp, AXIS2_COMMA_SPACE_STR); + temp += 2; + } + sprintf(temp, "%s", (axis2_char_t *)axutil_array_list_get(method_list, env, + i)); + temp += strlen(temp); + } + *temp = AXIS2_ESC_NULL; + + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_METHOD_NOT_ALLOWED_CODE_VAL, + AXIS2_HTTP_RESPONSE_METHOD_NOT_ALLOWED_CODE_NAME); + + body_string = axis2_http_transport_utils_get_method_not_allowed(env, conf_ctx); + allow_header = axis2_http_header_create(env, AXIS2_HTTP_HEADER_ALLOW, + method_list_str); + axis2_http_simple_response_set_header(response, env, allow_header); + AXIS2_FREE(env->allocator, method_list_str); + } + else + { + /* 404 Not Found */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_NOT_FOUND_CODE_VAL, + AXIS2_HTTP_RESPONSE_NOT_FOUND_CODE_NAME); + + body_string = axis2_http_transport_utils_get_not_found(env, conf_ctx); + } + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL) + { + /* 400 Bad Request */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL, + AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_NAME); + + body_string = axis2_http_transport_utils_get_bad_request(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL) + { + + /* 408 , Request Time Out */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL, + AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_NAME); + + body_string = axis2_http_transport_utils_get_request_timeout(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL) + { + /* 409, Conflict */ + + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL, AXIS2_HTTP_RESPONSE_CONFLICT_CODE_NAME); + + body_string = axis2_http_transport_utils_get_conflict(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_GONE_CODE_VAL) + { + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_GONE_CODE_VAL, AXIS2_HTTP_RESPONSE_GONE_CODE_NAME); + + body_string = axis2_http_transport_utils_get_gone(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL) + { + /* 412 Precondition failed */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL, + AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_NAME); + + body_string = axis2_http_transport_utils_get_precondition_failed(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL) + { + /* 413 entity too large */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL, + AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_NAME); + + body_string + = axis2_http_transport_utils_get_request_entity_too_large(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL) + { + /* 503, Service Unavailable*/ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL, + AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_NAME); + + body_string = axis2_http_transport_utils_get_service_unavailable(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + + axis2_http_simple_response_set_header(response, env, cont_type); + } + else + { + /* 500 Internal Server Error */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_VAL, + AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_NAME); + + body_string = axis2_http_transport_utils_get_internal_server_error(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + axis2_http_simple_response_set_header(response, env, cont_type); + } + + if(body_string) + { + axis2_char_t str_len[10]; + if(!is_head) + { + axis2_http_simple_response_set_body_string(response, env, body_string); + } + sprintf(str_len, "%d", axutil_strlen(body_string)); + cont_len = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_LENGTH, str_len); + axis2_http_simple_response_set_header(response, env, cont_len); + } + + axis2_http_worker_set_response_headers(http_worker, env, svr_conn, simple_request, + response, 0); + + axis2_simple_http_svr_conn_write_response(svr_conn, env, response); + request_handled = AXIS2_TRUE; + status = AXIS2_TRUE; + } + } + else if(0 == axutil_strcasecmp(http_method, AXIS2_HTTP_POST) || is_put) + { + if(is_put) + { + axutil_property_t *property = NULL; + if(http_worker->is_application_client_side) + { + property = axutil_property_create_with_args(env, AXIS2_SCOPE_REQUEST, AXIS2_TRUE, 0, + AXIS2_VALUE_TRUE); + } + else + { + property = axutil_property_create_with_args(env, AXIS2_SCOPE_REQUEST, AXIS2_FALSE, + 0, AXIS2_VALUE_FALSE); + } + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_TRANPORT_IS_APPLICATION_CLIENT_SIDE, + property); + status = axis2_http_transport_utils_process_http_put_request(env, msg_ctx, + request_body, out_stream, content_type, content_length, soap_action_str, + url_ext_form); + + } + else + { + axutil_property_t *property = NULL; + if(http_worker->is_application_client_side) + { + property = axutil_property_create_with_args(env, AXIS2_SCOPE_REQUEST, AXIS2_TRUE, 0, + AXIS2_VALUE_TRUE); + } + else + { + property = axutil_property_create_with_args(env, AXIS2_SCOPE_REQUEST, AXIS2_FALSE, + 0, AXIS2_VALUE_FALSE); + } + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_TRANPORT_IS_APPLICATION_CLIENT_SIDE, + property); + status = axis2_http_transport_utils_process_http_post_request(env, msg_ctx, + request_body, out_stream, content_type, content_length, soap_action_str, + url_ext_form); + + } + if(url_ext_form) + AXIS2_FREE(env->allocator, url_ext_form); + if(AXIS2_FAILURE == status && (is_put || axis2_msg_ctx_get_doing_rest(msg_ctx, env))) + { + /* Failure Occur while processing REST */ + + axis2_http_header_t *cont_len = NULL; + axis2_http_header_t *cont_type = NULL; + axis2_char_t *body_string = NULL; + if(env->error->error_number == AXIS2_ERROR_SVC_OR_OP_NOT_FOUND) + { + axutil_array_list_t *method_list = NULL; + int size = 0; + method_list = axis2_msg_ctx_get_supported_rest_http_methods(msg_ctx, env); + size = axutil_array_list_size(method_list, env); + if(method_list && size) + { + axis2_http_header_t *allow_header = NULL; + axis2_char_t *method_list_str = NULL; + axis2_char_t *temp; + int i = 0; + method_list_str = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * 29); + if(!method_list_str) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FALSE); + } + + temp = method_list_str; + for(i = 0; i < size; i++) + { + if(i) + { + sprintf(temp, AXIS2_COMMA_SPACE_STR); + temp += 2; + } + sprintf(temp, "%s", (axis2_char_t *)axutil_array_list_get(method_list, env, + i)); + temp += strlen(temp); + } + *temp = AXIS2_ESC_NULL; + + /* 405 Method Not Allowed */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_METHOD_NOT_ALLOWED_CODE_VAL, + AXIS2_HTTP_RESPONSE_METHOD_NOT_ALLOWED_CODE_NAME); + + body_string = axis2_http_transport_utils_get_method_not_allowed(env, conf_ctx); + allow_header = axis2_http_header_create(env, AXIS2_HTTP_HEADER_ALLOW, + method_list_str); + axis2_http_simple_response_set_header(response, env, allow_header); + AXIS2_FREE(env->allocator, method_list_str); + } + else + { + /* 404 Not Found */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_NOT_FOUND_CODE_VAL, + AXIS2_HTTP_RESPONSE_NOT_FOUND_CODE_NAME); + + body_string = axis2_http_transport_utils_get_not_found(env, conf_ctx); + } + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL) + { + /* 400, Bad Request */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL, + AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_NAME); + + body_string = axis2_http_transport_utils_get_bad_request(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL) + { + /* 408, Request Timeout */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL, + AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_NAME); + + body_string = axis2_http_transport_utils_get_request_timeout(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL) + { + /* 409, Conflict Types */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL, AXIS2_HTTP_RESPONSE_CONFLICT_CODE_NAME); + + body_string = axis2_http_transport_utils_get_conflict(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_GONE_CODE_VAL) + { + /* 410, Gone. Resource no longer available */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_GONE_CODE_VAL, AXIS2_HTTP_RESPONSE_GONE_CODE_NAME); + + body_string = axis2_http_transport_utils_get_gone(env, conf_ctx); + + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL) + { + /*410, Precondition for the url failed */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL, + AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_NAME); + + body_string = axis2_http_transport_utils_get_precondition_failed(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL) + { + /* 413, Request entity too large */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL, + AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_NAME); + + body_string + = axis2_http_transport_utils_get_request_entity_too_large(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + axis2_http_simple_response_set_header(response, env, cont_type); + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL) + { + /* 513, Service Unavailable */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL, + AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_NAME); + + body_string = axis2_http_transport_utils_get_service_unavailable(env, conf_ctx); + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + + axis2_http_simple_response_set_header(response, env, cont_type); + } + else + { + /* 500, Internal Server Error */ + axis2_http_simple_response_set_status_line(response, env, http_version, + AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_VAL, + AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_NAME); + + body_string = axis2_http_transport_utils_get_internal_server_error(env, conf_ctx); + + cont_type = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + + axis2_http_simple_response_set_header(response, env, cont_type); + } + + if(body_string) + { + axis2_char_t str_len[10]; + if(!is_head) + { + axis2_http_simple_response_set_body_string(response, env, body_string); + } + sprintf(str_len, "%d", axutil_strlen(body_string)); + cont_len = axis2_http_header_create(env, AXIS2_HTTP_HEADER_CONTENT_LENGTH, str_len); + axis2_http_simple_response_set_header(response, env, cont_len); + } + axis2_http_worker_set_response_headers(http_worker, env, svr_conn, simple_request, + response, 0); + axis2_simple_http_svr_conn_write_response(svr_conn, env, response); + request_handled = AXIS2_TRUE; + status = AXIS2_TRUE; + } + else if(status == AXIS2_FAILURE) + { + axis2_msg_ctx_t *fault_ctx = NULL; + axis2_engine_t *engine = axis2_engine_create(env, conf_ctx); + axis2_http_request_line_t *req_line = NULL; + axis2_http_status_line_t *tmp_stat_line = NULL; + axis2_char_t status_line_str[100]; + axutil_property_t *http_error_property = NULL; + axis2_char_t *http_error_value = NULL; + axis2_char_t *fault_code = NULL; + int status_code = 0; + axis2_char_t *reason_phrase = NULL; + int stream_len = 0; + + if(!engine) + { + return AXIS2_FALSE; + } + + http_error_property = axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_HTTP_TRANSPORT_ERROR); + + if(http_error_property) + http_error_value = (axis2_char_t *)axutil_property_get_value(http_error_property, + env); + + if(axis2_msg_ctx_get_is_soap_11(msg_ctx, env)) + { + fault_code = AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX AXIS2_COLON_STR + AXIOM_SOAP11_FAULT_CODE_SENDER; + } + else + { + fault_code = AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX AXIS2_COLON_STR + AXIOM_SOAP12_SOAP_FAULT_VALUE_SENDER; + } + + fault_ctx = axis2_engine_create_fault_msg_ctx(engine, env, msg_ctx, + fault_code, + axutil_error_get_message + (env->error)); + req_line = + axis2_http_simple_request_get_request_line(simple_request, env); + if (req_line) + { + if (!http_error_value) + { + sprintf(status_line_str, "%s %s\r\n", + http_version, + AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR); + } + else + { + sprintf(status_line_str, "%s %s", + http_version, + http_error_value); + } + } + else + { + sprintf(status_line_str, "%s %s\r\n", + AXIS2_HTTP_HEADER_PROTOCOL_11, + AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR); + } + + tmp_stat_line = axis2_http_status_line_create(env, status_line_str); + + if (!http_error_value) + { + axis2_engine_send_fault(engine, env, fault_ctx); + } + + status_code = axis2_http_status_line_get_status_code(tmp_stat_line, env); + reason_phrase = axis2_http_status_line_get_reason_phrase(tmp_stat_line, env); + + axis2_http_simple_response_set_status_line(response, env, + http_version, + status_code, + reason_phrase); + + axis2_http_simple_response_set_body_stream(response, env, + out_stream); + + stream_len = axutil_stream_get_len (out_stream, env); + axis2_http_worker_set_response_headers(http_worker, env, svr_conn, + simple_request, response, + stream_len); + + status = axis2_simple_http_svr_conn_write_response(svr_conn, env, + response); + request_handled = AXIS2_TRUE; + if(tmp_stat_line) + { + axis2_http_status_line_free(tmp_stat_line, env); + tmp_stat_line = NULL; + } + } + } + else + { + /* Other case than, PUT, DELETE, HEAD, GET and POST */ + /* 501, Request method is not implemented */ + axis2_http_header_t *cont_len = NULL; + axis2_http_header_t *cont_type = NULL; + axis2_char_t *body_string = NULL; + axis2_http_simple_response_set_status_line( + response, env, + http_version, + AXIS2_HTTP_RESPONSE_NOT_IMPLEMENTED_CODE_VAL, + AXIS2_HTTP_RESPONSE_NOT_IMPLEMENTED_CODE_NAME); + + body_string = + axis2_http_transport_utils_get_not_implemented(env, + conf_ctx); + cont_type = axis2_http_header_create(env, + AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + axis2_http_simple_response_set_header(response, env, cont_type); + + if (body_string) + { + axis2_char_t str_len[10]; + axis2_http_simple_response_set_body_string(response, env, + body_string); + sprintf(str_len, "%d", axutil_strlen(body_string)); + cont_len = axis2_http_header_create(env, + AXIS2_HTTP_HEADER_CONTENT_LENGTH, + str_len); + axis2_http_simple_response_set_header(response, env, cont_len); + } + + axis2_http_worker_set_response_headers(http_worker, env, svr_conn, + simple_request, response, 0); + axis2_simple_http_svr_conn_write_response(svr_conn, env, response); + request_handled = AXIS2_TRUE; + status = AXIS2_TRUE; + } + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + if (op_ctx) + { + /*axis2_msg_ctx_t *out_msg_ctx = NULL; + axis2_msg_ctx_t **msg_ctx_map = NULL;*/ + axis2_char_t *language_str = NULL; + + msg_ctx_map = axis2_op_ctx_get_msg_ctx_map(op_ctx, env); + out_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT]; + if (out_msg_ctx) + { + language_str = axis2_msg_ctx_get_content_language(out_msg_ctx, env); + } + + if (language_str && *language_str && !request_handled) + { + axis2_http_header_t *language = NULL; + language = axis2_http_header_create(env, + AXIS2_HTTP_HEADER_CONTENT_LANGUAGE, + language_str); + axis2_http_simple_response_set_header(response, env, language); + } + } + + if (!request_handled) + { + axis2_bool_t do_rest = AXIS2_FALSE; + axis2_bool_t response_written = AXIS2_FALSE; + if (is_get || is_head || is_put || is_delete || + axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + { + do_rest = AXIS2_TRUE; + } + + if ((accept_header_value || accept_charset_header_value || + accept_language_header_value) && do_rest) + { + axis2_char_t *content_type_header_value = NULL; + axis2_http_header_t *content_type_header = NULL; + axis2_char_t *temp = NULL; + axis2_char_t *language_header_value = NULL; + axis2_http_header_t *language_header = NULL; + content_type_header = axis2_http_simple_response_get_first_header( + response, + env, + AXIS2_HTTP_HEADER_CONTENT_TYPE); + + language_header = axis2_http_simple_response_get_first_header( + response, + env, + AXIS2_HTTP_HEADER_CONTENT_LANGUAGE); + + if (content_type_header) + { + content_type_header_value = axis2_http_header_get_value(content_type_header, + env); + } + + if (content_type_header_value) + { + temp = axutil_strdup(env, content_type_header_value); + } + + if (language_header) + { + language_header_value = axis2_http_header_get_value(language_header, + env); + } + + if (temp) + { + axis2_char_t *content_type = NULL; + axis2_char_t *char_set = NULL; + axis2_char_t *temp2 = NULL; + + temp2 = strchr(temp, AXIS2_SEMI_COLON); + if (temp2) + { + *temp2 = AXIS2_ESC_NULL; + temp2++; + char_set = axutil_strcasestr(temp2, AXIS2_HTTP_CHAR_SET_ENCODING); + } + + if (char_set) + { + char_set = axutil_strltrim(env, char_set, AXIS2_SPACE_TAB_EQ); + } + + content_type = axutil_strtrim(env, temp, NULL); + + if (temp) + { + AXIS2_FREE(env->allocator, temp); + temp = NULL; + } + + if (content_type && accept_header_value && + !axutil_strcasestr(accept_header_value, content_type)) + { + temp2 = strchr(content_type, AXIS2_F_SLASH); + if (temp2) + { + *temp2 = AXIS2_ESC_NULL; + temp = AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * + ((int)strlen(content_type) + 3)); + if (!temp) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FALSE; + } + + sprintf(temp, "%s/*", content_type); + if (!axutil_strcasestr(accept_header_value, temp) && + !strstr(accept_header_value, AXIS2_HTTP_HEADER_ACCEPT_ALL)) + { + /* 406, Not Acceptable */ + axis2_http_header_t *cont_len = NULL; + axis2_http_header_t *cont_type = NULL; + axis2_char_t *body_string = NULL; + axis2_http_simple_response_set_status_line( + response, env, http_version, + AXIS2_HTTP_RESPONSE_NOT_ACCEPTABLE_CODE_VAL, + AXIS2_HTTP_RESPONSE_NOT_ACCEPTABLE_CODE_NAME); + + body_string = + axis2_http_transport_utils_get_not_acceptable(env, + conf_ctx); + cont_type = + axis2_http_header_create(env, + AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + + axis2_http_simple_response_set_header(response, env, cont_type); + if (body_string) + { + axis2_char_t str_len[10]; + axis2_http_simple_response_set_body_string(response, env, + body_string); + sprintf(str_len, "%d", axutil_strlen(body_string)); + cont_len = + axis2_http_header_create(env, + AXIS2_HTTP_HEADER_CONTENT_LENGTH, + str_len); + + axis2_http_simple_response_set_header(response, + env, + cont_len); + } + + axis2_http_worker_set_response_headers(http_worker, env, svr_conn, + simple_request, response, 0); + axis2_simple_http_svr_conn_write_response(svr_conn, env, response); + request_handled = AXIS2_TRUE; + status = AXIS2_TRUE; + response_written = AXIS2_TRUE; + } + AXIS2_FREE(env->allocator, temp); + } + } + + if (content_type) + { + AXIS2_FREE(env->allocator, content_type); + } + + if (char_set) + { + temp2 = strchr(char_set, AXIS2_EQ); + } + + if (temp2) + { + ++temp2; + } + + if (char_set && accept_charset_header_value && + !axutil_strcasestr(accept_charset_header_value, char_set) && + !axutil_strcasestr(accept_charset_header_value, temp2)) + { + /* 406, Not Acceptable */ + axis2_http_header_t *cont_len = NULL; + axis2_http_header_t *cont_type = NULL; + axis2_char_t *body_string = NULL; + axis2_http_simple_response_set_status_line( + response, env, http_version, + AXIS2_HTTP_RESPONSE_NOT_ACCEPTABLE_CODE_VAL, + AXIS2_HTTP_RESPONSE_NOT_ACCEPTABLE_CODE_NAME); + body_string = + axis2_http_transport_utils_get_not_acceptable(env, + conf_ctx); + cont_type = + axis2_http_header_create(env, + AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + + axis2_http_simple_response_set_header(response, env, cont_type); + if (body_string) + { + axis2_char_t str_len[10]; + axis2_http_simple_response_set_body_string(response, env, + body_string); + sprintf(str_len, "%d", axutil_strlen(body_string)); + cont_len = axis2_http_header_create(env, + AXIS2_HTTP_HEADER_CONTENT_LENGTH, + str_len); + axis2_http_simple_response_set_header(response, env, cont_len); + } + axis2_http_worker_set_response_headers(http_worker, env, svr_conn, + simple_request, response, 0); + axis2_simple_http_svr_conn_write_response(svr_conn, env, response); + request_handled = AXIS2_TRUE; + status = AXIS2_TRUE; + response_written = AXIS2_TRUE; + } + if (char_set) + { + AXIS2_FREE(env->allocator, char_set); + } + } + + if (language_header_value) + { + if (accept_language_header_value && + !axutil_strcasestr(accept_language_header_value, + language_header_value)) + { + /* 406, Not acceptable */ + axis2_http_header_t *cont_len = NULL; + axis2_http_header_t *cont_type = NULL; + axis2_char_t *body_string = NULL; + axis2_http_simple_response_set_status_line( + response, env, http_version, + AXIS2_HTTP_RESPONSE_NOT_ACCEPTABLE_CODE_VAL, + AXIS2_HTTP_RESPONSE_NOT_ACCEPTABLE_CODE_NAME); + + body_string = + axis2_http_transport_utils_get_not_acceptable(env, + conf_ctx); + cont_type = + axis2_http_header_create(env, + AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML); + + axis2_http_simple_response_set_header(response, env, cont_type); + axis2_http_simple_response_remove_headers( + response, + env, + AXIS2_HTTP_HEADER_CONTENT_LANGUAGE); + + if (body_string) + { + axis2_char_t str_len[10]; + axis2_http_simple_response_set_body_string(response, env, + body_string); + sprintf(str_len, "%d", axutil_strlen(body_string)); + cont_len = axis2_http_header_create(env, + AXIS2_HTTP_HEADER_CONTENT_LENGTH, + str_len); + axis2_http_simple_response_set_header(response, env, cont_len); + } + + axis2_http_worker_set_response_headers(http_worker, env, svr_conn, + simple_request, response, 0); + axis2_simple_http_svr_conn_write_response(svr_conn, env, response); + request_handled = AXIS2_TRUE; + status = AXIS2_TRUE; + response_written = AXIS2_TRUE; + } + } + } + + if (!response_written) + { + /* If in there is a soap message is to to be sent in the back channel then we go inside this + * block. Somewhere in the receiveing end axis2_op_ctx_set_response_written() function has + * been called by this time to indicate to append the message into the http back channel. + */ + if (op_ctx && axis2_op_ctx_get_response_written(op_ctx, env)) + { + if (do_rest) + { + /*axis2_msg_ctx_t *out_msg_ctx = NULL; + axis2_msg_ctx_t *in_msg_ctx = NULL; + axis2_msg_ctx_t **msg_ctx_map = NULL;*/ + + /*msg_ctx_map = axis2_op_ctx_get_msg_ctx_map(op_ctx, env); + out_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT];*/ + in_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN]; + if (in_msg_ctx) + { + /* TODO: Add neccessary handling */ + } + if (out_msg_ctx) + { + int size = 0; + axutil_array_list_t *output_header_list = NULL; + output_header_list = + axis2_msg_ctx_get_http_output_headers(out_msg_ctx, + env); + if (output_header_list) + { + size = axutil_array_list_size(output_header_list, + env); + } + while (size) + { + axis2_http_header_t *simple_header = NULL; + size--; + simple_header = (axis2_http_header_t *) + axutil_array_list_get(output_header_list, + env, size); + axis2_http_simple_response_set_header(response, + env, + simple_header); + } + + if (axis2_msg_ctx_get_status_code(out_msg_ctx, env)) + { + int status_code = 0; + axis2_char_t *status_code_str = NULL; + status_code = axis2_msg_ctx_get_status_code(out_msg_ctx, env); + + switch (status_code) + { + case AXIS2_HTTP_RESPONSE_CONTINUE_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_CONTINUE_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_ACK_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_ACK_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_MULTIPLE_CHOICES_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_MULTIPLE_CHOICES_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_MOVED_PERMANENTLY_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_MOVED_PERMANENTLY_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_SEE_OTHER_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_SEE_OTHER_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_TEMPORARY_REDIRECT_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_TEMPORARY_REDIRECT_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_CONFLICT_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_GONE_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_GONE_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_NAME; + break; + default: + status_code = AXIS2_HTTP_RESPONSE_OK_CODE_VAL; + status_code_str = + AXIS2_HTTP_RESPONSE_OK_CODE_NAME; + break; + } + + axis2_http_simple_response_set_status_line(response, env, + http_version, + status_code, + status_code_str); + request_handled = AXIS2_TRUE; + } + } + } + + if (!request_handled) + { + axis2_http_simple_response_set_status_line( + response, env, http_version, + AXIS2_HTTP_RESPONSE_OK_CODE_VAL, + AXIS2_HTTP_RESPONSE_OK_CODE_NAME); + + if (!is_head) + { + /* This is where we append the message into the http back channel.*/ + axis2_http_simple_response_set_body_stream(response, env, out_stream); + } + } + } + else if (op_ctx) + { + /* If response is not written */ + if (do_rest) + { + /*axis2_msg_ctx_t *out_msg_ctx = NULL; + axis2_msg_ctx_t *in_msg_ctx = NULL; + axis2_msg_ctx_t **msg_ctx_map = NULL;*/ + + msg_ctx_map = axis2_op_ctx_get_msg_ctx_map(op_ctx, env); + out_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT]; + in_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN]; + if (in_msg_ctx) + { + /* TODO: Add neccssary handling */ + } + if (out_msg_ctx) + { + int size = 0; + axutil_array_list_t *output_header_list = NULL; + output_header_list = + axis2_msg_ctx_get_http_output_headers(out_msg_ctx, + env); + if (output_header_list) + { + size = axutil_array_list_size(output_header_list, + env); + } + + while (size) + { + axis2_http_header_t *simeple_header = NULL; + size--; + simeple_header = (axis2_http_header_t *) + axutil_array_list_get(output_header_list, + env, size); + axis2_http_simple_response_set_header(response, env, + simeple_header); + } + + if (axis2_msg_ctx_get_no_content(out_msg_ctx, env)) + { + if (axis2_msg_ctx_get_status_code(out_msg_ctx, env)) + { + int status_code = axis2_msg_ctx_get_status_code(out_msg_ctx, env); + axis2_char_t *status_code_str = NULL; + switch (status_code) + { + case AXIS2_HTTP_RESPONSE_RESET_CONTENT_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_RESET_CONTENT_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_NAME; + break; + default: + status_code = + AXIS2_HTTP_RESPONSE_NO_CONTENT_CODE_VAL; + status_code_str = + AXIS2_HTTP_RESPONSE_NO_CONTENT_CODE_NAME; + break; + } + axis2_http_simple_response_set_status_line( + response, env, http_version, + status_code, + status_code_str); + } + else + { + /* status code not available in msg_ctx */ + axis2_http_simple_response_set_status_line( + response, env, http_version, + AXIS2_HTTP_RESPONSE_NO_CONTENT_CODE_VAL, + AXIS2_HTTP_RESPONSE_NO_CONTENT_CODE_NAME); + } + + request_handled = AXIS2_TRUE; + } + else if (axis2_msg_ctx_get_status_code(out_msg_ctx, env)) + { + int status_code = axis2_msg_ctx_get_status_code(out_msg_ctx, env); + axis2_char_t *status_code_str = NULL; + switch (status_code) + { + case AXIS2_HTTP_RESPONSE_CONTINUE_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_CONTINUE_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_OK_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_OK_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_MULTIPLE_CHOICES_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_MULTIPLE_CHOICES_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_MOVED_PERMANENTLY_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_MOVED_PERMANENTLY_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_SEE_OTHER_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_SEE_OTHER_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_TEMPORARY_REDIRECT_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_TEMPORARY_REDIRECT_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_CONFLICT_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_GONE_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_GONE_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_NAME; + break; + case AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL: + status_code_str = + AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_NAME; + break; + default: + status_code = AXIS2_HTTP_RESPONSE_ACK_CODE_VAL; + status_code_str = + AXIS2_HTTP_RESPONSE_ACK_CODE_NAME; + break; + } + axis2_http_simple_response_set_status_line( + response, env, http_version, + status_code, + status_code_str); + + request_handled = AXIS2_TRUE; + } + } + } + if (!request_handled) + { + axis2_http_simple_response_set_status_line( + response, env, http_version, + AXIS2_HTTP_RESPONSE_ACK_CODE_VAL, + AXIS2_HTTP_RESPONSE_ACK_CODE_NAME); + } + } + else + { + axis2_http_simple_response_set_status_line( + response, env, http_version, + AXIS2_HTTP_RESPONSE_ACK_CODE_VAL, + AXIS2_HTTP_RESPONSE_ACK_CODE_NAME); + } + + if (!response_written) + { + int stream_len = 0; + stream_len = axutil_stream_get_len(out_stream, env); + + /*axis2_http_worker_set_response_headers(http_worker, env, svr_conn, + simple_request, response, + stream_len);*/ + + /* This is where it actually write to the wire in the http back channel + * append case. */ + if(out_msg_ctx) + { + axutil_array_list_t *mime_parts = NULL; + mime_parts = axis2_msg_ctx_get_mime_parts(out_msg_ctx, env); + /* If mime_parts is there then that means we send MTOM. So + * in order to send MTOM we are enabling HTTP1.1 and cunk transfer + * encoding */ + + if(mime_parts) + { + axis2_http_header_t *transfer_enc_header = NULL; + axutil_param_t *callback_name_param = NULL; + axis2_char_t *mtom_sending_callback_name = NULL; + + /* Getting the sender callback name paramter if it is + * specified in the configuration file */ + + callback_name_param = axis2_msg_ctx_get_parameter(out_msg_ctx, env , + AXIS2_MTOM_SENDING_CALLBACK); + if(callback_name_param) + { + mtom_sending_callback_name = + (axis2_char_t *) axutil_param_get_value (callback_name_param, env); + if(mtom_sending_callback_name) + { + axis2_http_simple_response_set_mtom_sending_callback_name( + response, env, mtom_sending_callback_name); + } + } + + axis2_http_simple_response_set_mime_parts(response, env, mime_parts); + + axis2_http_simple_response_set_http_version(response, env, + AXIS2_HTTP_HEADER_PROTOCOL_11); + + transfer_enc_header = axis2_http_header_create(env, + AXIS2_HTTP_HEADER_TRANSFER_ENCODING, + AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED); + + axis2_http_simple_response_set_header(response, env, + transfer_enc_header); + + /* In the chunking case content-length is zero */ + axis2_http_worker_set_response_headers(http_worker, env, svr_conn, + simple_request, response, + 0); + } + else + { + axis2_http_worker_set_response_headers(http_worker, env, svr_conn, + simple_request, response, + stream_len); + } + } + status = axis2_simple_http_svr_conn_write_response(svr_conn, + env, + response); + } + } + } + + if (url_external_form) + { + AXIS2_FREE(env->allocator, url_external_form); + url_external_form = NULL; + } + if (op_ctx) + { + axis2_msg_ctx_t *out_msg_ctx = NULL; + axis2_msg_ctx_t *in_msg_ctx = NULL; + axis2_msg_ctx_t **msg_ctx_map = NULL; + axis2_char_t *msg_id = NULL; + axis2_conf_ctx_t *conf_ctx = NULL; + msg_ctx_map = axis2_op_ctx_get_msg_ctx_map(op_ctx, env); + + out_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT]; + in_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN]; + + if (out_msg_ctx) + { + axis2_msg_ctx_free(out_msg_ctx, env); + out_msg_ctx = NULL; + msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT] = NULL; + } + + if (in_msg_ctx) + { + msg_id = axutil_strdup(env, axis2_msg_ctx_get_msg_id(in_msg_ctx, env)); + conf_ctx = axis2_msg_ctx_get_conf_ctx(in_msg_ctx, env); + + axis2_msg_ctx_free(in_msg_ctx, env); + in_msg_ctx = NULL; + msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN] = NULL; + } + + if (!axis2_op_ctx_is_in_use(op_ctx, env)) + { + axis2_op_ctx_destroy_mutex(op_ctx, env); + if (conf_ctx && msg_id) + { + axis2_conf_ctx_register_op_ctx(conf_ctx, env, msg_id, NULL); + + AXIS2_FREE(env->allocator, msg_id); + } + axis2_op_ctx_free(op_ctx, env); + } + + } /* Done freeing message contexts */ + + msg_ctx = NULL; + axutil_url_free(request_url, env); + axutil_string_free(soap_action_str, env); + request_url = NULL; + return status; +} + +static axis2_status_t +axis2_http_worker_set_response_headers( + axis2_http_worker_t * http_worker, + const axutil_env_t * env, + axis2_simple_http_svr_conn_t * svr_conn, + axis2_http_simple_request_t * simple_request, + axis2_http_simple_response_t * simple_response, + axis2_ssize_t content_length) +{ + axis2_http_header_t *conn_header = NULL; + + AXIS2_PARAM_CHECK(env->error, svr_conn, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, simple_request, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, simple_response, AXIS2_FAILURE); + + if(AXIS2_FALSE == axis2_http_simple_response_contains_header(simple_response, env, + AXIS2_HTTP_HEADER_CONNECTION)) + { + conn_header = axis2_http_simple_request_get_first_header(simple_request, env, + AXIS2_HTTP_HEADER_CONNECTION); + if(conn_header) + { + axis2_char_t *value = NULL; + value = axis2_http_header_get_value(conn_header, env); + + if(0 == axutil_strcasecmp(value, AXIS2_HTTP_HEADER_CONNECTION_KEEPALIVE)) + { + /* Comment these until keep alive support is completed for simple Axis2/C server */ + /*axis2_http_header_t *header = axis2_http_header_create(env, + AXIS2_HTTP_HEADER_CONNECTION, AXIS2_HTTP_HEADER_CONNECTION_KEEPALIVE); + + axis2_http_simple_response_set_header(simple_response, env, header); + axis2_simple_http_svr_conn_set_keep_alive(svr_conn, env, AXIS2_TRUE);*/ + } + + if(0 == axutil_strcasecmp(value, AXIS2_HTTP_HEADER_CONNECTION_CLOSE)) + { + axis2_http_header_t *header = axis2_http_header_create(env, + AXIS2_HTTP_HEADER_CONNECTION, AXIS2_HTTP_HEADER_CONNECTION_CLOSE); + + axis2_http_simple_response_set_header(simple_response, env, header); + axis2_simple_http_svr_conn_set_keep_alive(svr_conn, env, AXIS2_FALSE); + } + } + else + { /* Connection Header not available */ + axis2_char_t *http_version = NULL; + http_version = axis2_http_simple_response_get_http_version(simple_response, env); + if(http_version && !axutil_strcasecmp(http_version, AXIS2_HTTP_HEADER_PROTOCOL_11)) + { + /* Comment these until keep alive support is completed for simple Axis2/C server */ + /*axis2_simple_http_svr_conn_set_keep_alive(svr_conn, env, AXIS2_TRUE);*/ + /* Instead add following to always send close connection header to indicate that + * we don't support http keep alive yet in simple Axis2/C server + */ + axis2_http_header_t *header = axis2_http_header_create(env, + AXIS2_HTTP_HEADER_CONNECTION, AXIS2_HTTP_HEADER_CONNECTION_CLOSE); + + axis2_http_simple_response_set_header(simple_response, env, header); + /*axis2_simple_http_svr_conn_set_keep_alive(svr_conn, env, AXIS2_FALSE);*/ + } + else + { + axis2_simple_http_svr_conn_set_keep_alive(svr_conn, env, AXIS2_FALSE); + } + } + + if(!axis2_http_simple_response_contains_header(simple_response, env, + AXIS2_HTTP_HEADER_TRANSFER_ENCODING)) + { + if(AXIS2_FALSE == axis2_http_simple_request_contains_header(simple_request, env, + AXIS2_HTTP_HEADER_TRANSFER_ENCODING)) + { + if(0 != content_length) + { + axis2_char_t content_len_str[10]; + axis2_http_header_t *content_len_hdr = NULL; + + sprintf(content_len_str, "%d", content_length); + content_len_hdr = axis2_http_header_create(env, + AXIS2_HTTP_HEADER_CONTENT_LENGTH, content_len_str); + axis2_http_simple_response_set_header(simple_response, env, content_len_hdr); + } + } + else + { + /* Having Transfer encoding Header */ + axis2_http_header_t *transfer_enc_header = axis2_http_header_create(env, + AXIS2_HTTP_HEADER_TRANSFER_ENCODING, + AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED); + + axis2_http_simple_response_set_header(simple_response, env, transfer_enc_header); + } + } + } + return AXIS2_SUCCESS; +} + +static axutil_hash_t * +axis2_http_worker_get_headers( + axis2_http_worker_t * http_worker, + const axutil_env_t * env, + axis2_http_simple_request_t * request) +{ + axutil_array_list_t *header_list = NULL; + int hdr_count = 0; + int i = 0; + axutil_hash_t *header_map = NULL; + + AXIS2_PARAM_CHECK(env->error, request, NULL); + + header_list = axis2_http_simple_request_get_headers(request, env); + if(!header_list) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "http simple request" + "doesn't contain a header list"); + return NULL; + } + hdr_count = axutil_array_list_size(header_list, env); + if(0 == hdr_count) + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "http simple request , " + "header list contains zero headers"); + return NULL; + } + + for(i = 0; i < hdr_count; i++) + { + axis2_http_header_t *tmp_hdr = NULL; + tmp_hdr = axutil_array_list_get(header_list, env, i); + if(!tmp_hdr) + { + continue; + } + if(!header_map) + { + header_map = axutil_hash_make(env); + if(!header_map) + { + return NULL; + } + } + axutil_hash_set(header_map, axis2_http_header_get_name(tmp_hdr, env), + AXIS2_HASH_KEY_STRING, tmp_hdr); + } + return header_map; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_worker_set_svr_port( + axis2_http_worker_t * worker, + const axutil_env_t * env, + int port) +{ + worker->svr_port = port; + return AXIS2_SUCCESS; +} +#if 0 +static axis2_char_t * +axis2_http_worker_get_server_time( + axis2_http_worker_t * http_worker, + const axutil_env_t * env) +{ + time_t tp; + char *time_str; + tp = time(&tp); + time_str = ctime(&tp); + if(!time_str) + { + return NULL; + } + if(AXIS2_NEW_LINE == time_str[strlen(time_str) - 1]) + { + time_str[strlen(time_str) - 1] = AXIS2_ESC_NULL; + } + /* We use the ANSI C Date Format, which is Legal according to RFC2616, + * Section 3.3.1. We are not a HTTP/1.1 only server, and thus, it suffices. + */ + return time_str; +} +#endif + +static axis2_http_simple_response_t * +axis2_http_worker_create_simple_response( + axis2_http_worker_t *http_worker, + const axutil_env_t *env) +{ + axis2_http_simple_response_t *response = NULL; + response = axis2_http_simple_response_create_default(env); + if(response) + { + axis2_http_header_t *server = NULL; + axis2_http_header_t *server_date = NULL; + axis2_char_t *date_str = NULL; + char *date_str_tmp = NULL; + time_t tp; + size_t date_str_len = 0; + + /* create "Date: xxxx GMT" HTTP header */ + tp = time(&tp); + date_str_tmp = ctime(&tp); + if(!date_str_tmp) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "cannot get server time"); + return NULL; + } + + date_str_len = strlen(date_str_tmp); + if(AXIS2_NEW_LINE == date_str_tmp[date_str_len - 1]) + { + date_str_len -= 1; + date_str_tmp[date_str_len] = AXIS2_ESC_NULL; + } + /* We use the ANSI C Date Format, which is Legal according to RFC2616, + * Section 3.3.1. We are not a HTTP/1.1 only server, and thus, it suffices. + */ + + date_str = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (date_str_len + 5)); + if(!date_str) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + + } + sprintf(date_str, "%s GMT", date_str_tmp); + server_date = axis2_http_header_create(env, AXIS2_HTTP_HEADER_DATE, date_str); + AXIS2_FREE(env->allocator, date_str); + axis2_http_simple_response_set_header(response, env, server_date); + + /* create "Server: Axis2C/x.x.x (Simple Axis2 HTTP Server)" HTTP Header */ + server = axis2_http_header_create(env, AXIS2_HTTP_HEADER_SERVER, + AXIS2_HTTP_HEADER_SERVER_AXIS2C AXIS2_HTTP_SERVER); + axis2_http_simple_response_set_header(response, env, server); + } + return response; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_worker_set_is_application_client_side( + axis2_http_worker_t *http_worker, + const axutil_env_t *env, + axis2_bool_t application_client_side) +{ + http_worker->is_application_client_side = application_client_side; +} + + diff --git a/src/core/transport/http/common/simple_http_svr_conn.c b/src/core/transport/http/common/simple_http_svr_conn.c new file mode 100644 index 0000000..a68c48e --- /dev/null +++ b/src/core/transport/http/common/simple_http_svr_conn.c @@ -0,0 +1,504 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct axis2_simple_http_svr_conn +{ + int socket; + axutil_stream_t *stream; + axis2_bool_t keep_alive; +}; + +static axis2_char_t * +axis2_simple_http_svr_conn_read_line( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env); + +AXIS2_EXTERN axis2_simple_http_svr_conn_t *AXIS2_CALL +axis2_simple_http_svr_conn_create( + const axutil_env_t * env, + int sockfd) +{ + axis2_simple_http_svr_conn_t *svr_conn = NULL; + svr_conn = (axis2_simple_http_svr_conn_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_simple_http_svr_conn_t)); + if(!svr_conn) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "server connection failed. Insufficient memory"); + return NULL; + } + + memset((void *)svr_conn, 0, sizeof(axis2_simple_http_svr_conn_t)); + svr_conn->socket = sockfd; + + if(-1 != svr_conn->socket) + { + svr_conn->stream = axutil_stream_create_socket(env, svr_conn->socket); + if(!svr_conn->stream) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "socket creation failed, socket %d", sockfd); + axis2_simple_http_svr_conn_free(svr_conn, env); + return NULL; + } + } + return svr_conn; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_simple_http_svr_conn_free( + axis2_simple_http_svr_conn_t *svr_conn, + const axutil_env_t * env) +{ + axis2_simple_http_svr_conn_close(svr_conn, env); + AXIS2_FREE(env->allocator, svr_conn); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_simple_http_svr_conn_close( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + axutil_stream_free(svr_conn->stream, env); + if(-1 != svr_conn->socket) + { + axutil_network_handler_close_socket(env, svr_conn->socket); + svr_conn->socket = -1; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_simple_http_svr_conn_is_open( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + if(-1 != svr_conn->socket) + { + return AXIS2_TRUE; + } + return AXIS2_FALSE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_simple_http_svr_conn_set_keep_alive( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env, + axis2_bool_t keep_alive) +{ + svr_conn->keep_alive = keep_alive; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_simple_http_svr_conn_is_keep_alive( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + return svr_conn->keep_alive; +} + +AXIS2_EXTERN axutil_stream_t *AXIS2_CALL +axis2_simple_http_svr_conn_get_stream( + const axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + return svr_conn->stream; +} + +AXIS2_EXTERN axis2_http_response_writer_t *AXIS2_CALL +axis2_simple_http_svr_conn_get_writer( + const axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + return axis2_http_response_writer_create(env, svr_conn->stream); +} + +AXIS2_EXTERN axis2_http_simple_request_t *AXIS2_CALL +axis2_simple_http_svr_conn_read_request( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + axis2_char_t* str_line = NULL; + axis2_bool_t end_of_headers = AXIS2_FALSE; + axis2_http_request_line_t *request_line = NULL; + axis2_http_simple_request_t *request = NULL; + + /* read first line of the request (which is CRLF */ + str_line = axis2_simple_http_svr_conn_read_line(svr_conn, env); + if(str_line) + { + request_line = axis2_http_request_line_parse_line(env, str_line); + AXIS2_FREE(env->allocator, str_line); + str_line = NULL; + } + + if(!request_line) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE, AXIS2_FAILURE); + return NULL; + } + request = axis2_http_simple_request_create(env, request_line, NULL, 0, svr_conn->stream); + + /* now read the headers until we find a line only having CRLF */ + while(AXIS2_FALSE == end_of_headers) + { + str_line = axis2_simple_http_svr_conn_read_line(svr_conn, env); + if(!str_line) + { + /*if nothing is read, this loop should be broken. Otherwise, going to be endless loop */ + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "reading http header failed"); + break; + } + + if(0 == axutil_strcmp(str_line, AXIS2_HTTP_CRLF)) + { + /* line contains only CRLF, so should be end of headers */ + end_of_headers = AXIS2_TRUE; + } + else + { + axis2_http_header_t *tmp_header = axis2_http_header_create_by_str(env, str_line); + if(tmp_header) + { + axis2_http_simple_request_add_header(request, env, tmp_header); + } + } + + AXIS2_FREE(env->allocator, str_line); + str_line = NULL; + } + return request; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_simple_http_svr_conn_write_response( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env, + axis2_http_simple_response_t * response) +{ + axis2_http_response_writer_t *response_writer = NULL; + axutil_array_list_t *headers = NULL; + axutil_stream_t *response_stream = NULL; + axis2_char_t *response_body = NULL; + int body_size = 0; + + axis2_http_header_t *enc_header = NULL; + axis2_bool_t chuked_encoding = AXIS2_FALSE; + axis2_char_t *status_line = NULL; + axis2_bool_t binary_content = AXIS2_FALSE; + axis2_char_t *content_type = NULL; + + AXIS2_PARAM_CHECK(env->error, response, AXIS2_FAILURE); + + response_writer = axis2_http_response_writer_create(env, svr_conn->stream); + if(!response_writer) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create http response writer"); + return AXIS2_FAILURE; + } + + content_type = (axis2_char_t *)axis2_http_simple_response_get_content_type(response, env); + if(content_type) + { + if(strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_MULTIPART_RELATED) + && strstr(content_type,AXIS2_HTTP_HEADER_ACCEPT_XOP_XML)) + { + binary_content = AXIS2_TRUE; + } + } + + enc_header = axis2_http_simple_response_get_first_header(response, env, + AXIS2_HTTP_HEADER_TRANSFER_ENCODING); + if(enc_header) + { + axis2_char_t *enc_value = axis2_http_header_get_value(enc_header, env); + if(enc_value && (0 == axutil_strcmp(enc_value, AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED))) + { + chuked_encoding = AXIS2_TRUE; + + /* remove the content length header */ + axis2_http_simple_response_remove_headers(response, env, + AXIS2_HTTP_HEADER_CONTENT_LENGTH); + } + } + + /* print status line */ + status_line = axis2_http_simple_response_get_status_line(response, env); + if(!status_line) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE, AXIS2_FAILURE); + axis2_http_response_writer_free(response_writer, env); + return AXIS2_FAILURE; + } + axis2_http_response_writer_print_str(response_writer, env, status_line); + + headers = axis2_http_simple_response_get_headers(response, env); + if(headers) + { + int i = 0; + int count = axutil_array_list_size(headers, env); + for(; i < count; i++) + { + axis2_http_header_t *header = + (axis2_http_header_t *)axutil_array_list_get(headers, env, i); + if(header) + { + axis2_char_t *header_ext_form = axis2_http_header_to_external_form(header, env); + axis2_http_response_writer_print_str(response_writer, env, header_ext_form); + AXIS2_FREE(env->allocator, header_ext_form); + } + } + } + + /* write empty line after http headers */ + axis2_http_response_writer_print_str(response_writer, env, AXIS2_HTTP_CRLF); + + /* write the body */ + response_stream = axis2_http_simple_response_get_body(response, env); + if(response_stream) + { + body_size = axutil_stream_get_len(response_stream, env); + response_body = axutil_stream_get_buffer(response_stream, env); + axutil_stream_flush_buffer(response_stream, env); + response_body[body_size] = AXIS2_ESC_NULL; + } + + if(body_size <= 0 && !binary_content) + { + /* no body available to write. Note that this is not an error. We might want to write only + * status information and hence, this is a valid case */ + axis2_http_response_writer_free(response_writer, env); + return AXIS2_SUCCESS; + } + + if(!chuked_encoding && !binary_content) + { + /* This sending a normal SOAP response without chunk transfer encoding */ + axis2_status_t write_stat = AXIS2_FAILURE; + write_stat = axis2_http_response_writer_println_str(response_writer, env, response_body); + if(write_stat != AXIS2_SUCCESS) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_RESPONSE, AXIS2_FAILURE); + axis2_http_response_writer_free(response_writer, env); + return AXIS2_FAILURE; + } + } + else if(!binary_content) + { + /* Sending a normal SOAP response enabling http chunking */ + axutil_http_chunked_stream_t *chunked_stream = NULL; + int left = body_size; + chunked_stream = axutil_http_chunked_stream_create(env, svr_conn->stream); + while(left > 0) + { + int len = -1; + len = axutil_http_chunked_stream_write(chunked_stream, env, response_body, body_size); + if(len <= 0) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "cannot write data to chunked stream"); + axutil_http_chunked_stream_free(chunked_stream, env); + axis2_http_response_writer_free(response_writer, env); + return AXIS2_FAILURE; + } + left -= len; + } + axutil_http_chunked_stream_write_last_chunk(chunked_stream, env); + axutil_http_chunked_stream_free(chunked_stream, env); + } + else + { + /* In the MTOM case we enable chunking in order to send the attachment */ + axutil_http_chunked_stream_t *chunked_stream = NULL; + axis2_status_t write_stat = AXIS2_FAILURE; + axutil_array_list_t *mime_parts = NULL; + axis2_char_t *mtom_sending_callback_name = NULL; + + mime_parts = axis2_http_simple_response_get_mime_parts(response, env); + if(!mime_parts) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No mime parts are given"); + axis2_http_response_writer_free(response_writer, env); + return AXIS2_FAILURE; + } + + /* If the callback name is not there, then we will check whether there + * is any mime_parts which has type callback. If we found then no point + * of continuing we should return a failure */ + mtom_sending_callback_name = axis2_http_simple_response_get_mtom_sending_callback_name( + response, env); + if(!mtom_sending_callback_name) + { + if(axis2_http_transport_utils_is_callback_required(env, mime_parts)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Sender callback not specified"); + axis2_http_response_writer_free(response_writer, env); + return AXIS2_FAILURE; + } + } + + chunked_stream = axutil_http_chunked_stream_create(env, svr_conn->stream); + write_stat = axis2_http_transport_utils_send_mtom_message(chunked_stream, env, mime_parts, + mtom_sending_callback_name); + axutil_http_chunked_stream_free(chunked_stream, env); + + if(write_stat != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "writing mime parts failed"); + axis2_http_response_writer_free(response_writer, env); + return AXIS2_FAILURE; + } + } + + axis2_http_response_writer_free(response_writer, env); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_simple_http_svr_conn_set_rcv_timeout( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env, + int timeout) +{ + return axutil_network_handler_set_sock_option(env, svr_conn->socket, SO_RCVTIMEO, timeout); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_simple_http_svr_conn_set_snd_timeout( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env, + int timeout) +{ + return axutil_network_handler_set_sock_option(env, svr_conn->socket, SO_SNDTIMEO, timeout); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_simple_http_svr_conn_get_svr_ip( + const axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + return axutil_network_handler_get_svr_ip(env, svr_conn->socket); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_simple_http_svr_conn_get_peer_ip( + const axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + return axutil_network_handler_get_peer_ip(env, svr_conn->socket); +} + +static axis2_char_t * +axis2_simple_http_svr_conn_read_line( + axis2_simple_http_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + axis2_char_t* str_line = NULL; + axis2_char_t tmp_buf[2048]; + int read = -1; + + /* peek for 2047 characters to verify whether it contains CRLF character */ + while((read = axutil_stream_peek_socket(svr_conn->stream, env, tmp_buf, 2048 - 1)) > 0) + { + axis2_char_t *start = tmp_buf; + axis2_char_t *end = NULL; + tmp_buf[read] = AXIS2_ESC_NULL; + end = strstr(tmp_buf, AXIS2_HTTP_CRLF); + if(end) + { + axis2_char_t *buffer = NULL; + if(str_line) + { + /* header is more than 2048 character. this is not a common case, and not optimized + * for performance (reading in a temp buffer and then strcat to get final buffer */ + buffer = tmp_buf; + } + else + { + /* header is less than 2048 characters, this is the common case. So to improve + * the performance, the buffer is malloc and then used to read the stream. */ + buffer = (axis2_char_t *)AXIS2_MALLOC(env->allocator, end - start + 3); + } + + /* read the data including CRLF (hence the size = end - start + 2) */ + read = axutil_stream_read(svr_conn->stream, env, buffer, end - start + 2); + if(read > 0) + { + buffer[read] = AXIS2_ESC_NULL; + + if(str_line) + { + axis2_char_t* tmp_str_line = NULL; + tmp_str_line = axutil_stracat(env, str_line, buffer); + if(tmp_str_line) + { + AXIS2_FREE(env->allocator, str_line); + str_line = tmp_str_line; + } + } + else + { + str_line = buffer; + } + } + else + { + /* read returns 0 or negative value, this could be an error */ + if(str_line) + { + AXIS2_FREE(env->allocator, str_line); + str_line = NULL; + } + else + { + AXIS2_FREE(env->allocator, buffer); + } + } + break; + } + else + { + /* not reached end yet */ + read = axutil_stream_read(svr_conn->stream, env, tmp_buf, 2048 - 1); + if(read > 0) + { + axis2_char_t* tmp_str_line = NULL; + tmp_buf[read] = AXIS2_ESC_NULL; + tmp_str_line = axutil_stracat(env, str_line, tmp_buf); + if(tmp_str_line) + { + if(str_line) + { + AXIS2_FREE(env->allocator, str_line); + } + str_line = tmp_str_line; + } + } + } + } + + return str_line; +} diff --git a/src/core/transport/http/receiver/Makefile.am b/src/core/transport/http/receiver/Makefile.am new file mode 100644 index 0000000..0af4e22 --- /dev/null +++ b/src/core/transport/http/receiver/Makefile.am @@ -0,0 +1,21 @@ +lib_LTLIBRARIES = libaxis2_http_receiver.la +libaxis2_http_receiver_la_LIBADD=$(top_builddir)/util/src/libaxutil.la\ + $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la + + +libaxis2_http_receiver_la_SOURCES = http_receiver.c\ + http_svr_thread.c + + +libaxis2_http_receiver_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/transport\ + -I$(top_builddir)/src/core/transport/http \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include diff --git a/src/core/transport/http/receiver/http_receiver.c b/src/core/transport/http/receiver/http_receiver.c new file mode 100644 index 0000000..c8517b0 --- /dev/null +++ b/src/core/transport/http/receiver/http_receiver.c @@ -0,0 +1,508 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +/** + * @brief HTTP Client struct impl + * Axis2 HTTP Client impl + */ + +typedef struct axis2_http_server_impl +{ + axis2_transport_receiver_t http_server; + axis2_http_svr_thread_t *svr_thread; + int port; + axis2_char_t *svr_ip; + axis2_conf_ctx_t *conf_ctx; + axis2_conf_ctx_t *conf_ctx_private; + axis2_bool_t is_application_client_side; +} axis2_http_server_impl_t; + +#define AXIS2_INTF_TO_IMPL(http_server) \ + ((axis2_http_server_impl_t *)(http_server)) + +/***************************** Function headers *******************************/ + +static axis2_status_t AXIS2_CALL +axis2_http_server_init( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_transport_in_desc_t * in_desc); + +static axis2_status_t AXIS2_CALL +axis2_http_server_start( + axis2_transport_receiver_t * server, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +axis2_http_server_stop( + axis2_transport_receiver_t * server, + const axutil_env_t * env); + +static axis2_conf_ctx_t *AXIS2_CALL +axis2_http_server_get_conf_ctx( + axis2_transport_receiver_t * server, + const axutil_env_t * env); + +static axis2_endpoint_ref_t *AXIS2_CALL +axis2_http_server_get_reply_to_epr( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + const axis2_char_t * svc_name); + +static axis2_endpoint_ref_t *AXIS2_CALL +axis2_http_server_get_epr_for_service( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + const axis2_char_t * svc_name); + +static axis2_bool_t AXIS2_CALL +axis2_http_server_is_running( + axis2_transport_receiver_t * server, + const axutil_env_t * env); + +static void AXIS2_CALL +axis2_http_server_set_is_application_client_side( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + axis2_bool_t is_application_client_side); + +static void AXIS2_CALL +axis2_http_server_free( + axis2_transport_receiver_t * server, + const axutil_env_t * env); + +static axis2_char_t* AXIS2_CALL +axis2_http_server_get_server_ip( +axis2_transport_receiver_t *transport_receiver, +const axutil_env_t *env); + +static void AXIS2_CALL +axis2_http_server_set_server_ip( +axis2_transport_receiver_t *transport_receiver, +const axutil_env_t *env, + axis2_char_t *serverip); + +static const axis2_transport_receiver_ops_t http_transport_receiver_ops_var = { + axis2_http_server_init, + axis2_http_server_start, + axis2_http_server_get_reply_to_epr, + axis2_http_server_get_epr_for_service, + axis2_http_server_get_server_ip, + axis2_http_server_set_server_ip, + axis2_http_server_get_conf_ctx, + axis2_http_server_is_running, + axis2_http_server_set_is_application_client_side, + axis2_http_server_stop, + axis2_http_server_free }; + +AXIS2_EXTERN axis2_transport_receiver_t *AXIS2_CALL +axis2_http_server_create( + const axutil_env_t * env, + const axis2_char_t * repo, + const int port) +{ + axis2_http_server_impl_t *server_impl = NULL; + + server_impl = (axis2_http_server_impl_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_http_server_impl_t)); + + if(!server_impl) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + server_impl->svr_thread = NULL; + server_impl->conf_ctx = NULL; + server_impl->conf_ctx_private = NULL; + server_impl->port = port; + server_impl->svr_ip = NULL; + server_impl->is_application_client_side = AXIS2_FALSE; + + server_impl->http_server.ops = &http_transport_receiver_ops_var; + + if(repo) + { + axis2_transport_in_desc_t *transport_in = NULL; + axis2_conf_t *conf = NULL; + axis2_transport_receiver_t *receiver = NULL; + /** + * We first create a private conf ctx which is owned by this server + * we only free this private conf context. We should never free the + * server_impl->conf_ctx because it may own to any other object which + * may lead to double free + */ + server_impl->conf_ctx_private = axis2_build_conf_ctx(env, repo); + + if(!server_impl->conf_ctx_private) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "unable to create private configuration context for repo path %s", repo); + axis2_http_server_free((axis2_transport_receiver_t *)server_impl, env); + return NULL; + } + conf = axis2_conf_ctx_get_conf(server_impl->conf_ctx_private, env); + transport_in = axis2_conf_get_transport_in(conf, env, AXIS2_TRANSPORT_ENUM_HTTP); + receiver = axis2_transport_in_desc_get_recv(transport_in, env); + AXIS2_INTF_TO_IMPL(receiver)->port = port; + + server_impl->conf_ctx = server_impl->conf_ctx_private; + } + + return &(server_impl->http_server); +} + +AXIS2_EXTERN axis2_transport_receiver_t *AXIS2_CALL +axis2_http_server_create_with_file( + const axutil_env_t * env, + const axis2_char_t * file, + const int port) +{ + axis2_http_server_impl_t *server_impl = NULL; + + server_impl = (axis2_http_server_impl_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_http_server_impl_t)); + + if(!server_impl) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + server_impl->svr_thread = NULL; + server_impl->conf_ctx = NULL; + server_impl->conf_ctx_private = NULL; + server_impl->port = port; + server_impl->svr_ip = NULL; + server_impl->http_server.ops = &http_transport_receiver_ops_var; + + if(file) + { + axis2_transport_in_desc_t *transport_in = NULL; + axis2_conf_t *conf = NULL; + axis2_transport_receiver_t *receiver = NULL; + /** + * We first create a private conf ctx which is owned by this server + * we only free this private conf context. We should never free the + * server_impl->conf_ctx because it may own to any other object which + * may lead to double free + */ + server_impl->conf_ctx_private = axis2_build_conf_ctx_with_file(env, file); + + if(!server_impl->conf_ctx_private) + { + axis2_http_server_free((axis2_transport_receiver_t *)server_impl, env); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "unable to create configuration context for file %s", file); + return NULL; + } + conf = axis2_conf_ctx_get_conf(server_impl->conf_ctx_private, env); + transport_in = axis2_conf_get_transport_in(conf, env, AXIS2_TRANSPORT_ENUM_HTTP); + receiver = axis2_transport_in_desc_get_recv(transport_in, env); + AXIS2_INTF_TO_IMPL(receiver)->port = port; + + + server_impl->conf_ctx = server_impl->conf_ctx_private; + } + + return &(server_impl->http_server); +} + +static void AXIS2_CALL +axis2_http_server_free( + axis2_transport_receiver_t * server, + const axutil_env_t * env) +{ + axis2_http_server_impl_t *server_impl = NULL; + + if(!server) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "failure, server value is null , nothing to free"); + return; + } + + server_impl = AXIS2_INTF_TO_IMPL(server); + if(server_impl->svr_thread) + { + axis2_http_svr_thread_destroy(server_impl->svr_thread, env); + axis2_http_svr_thread_free(server_impl->svr_thread, env); + server_impl->svr_thread = NULL; + } + + if(server_impl->conf_ctx_private) + { + axis2_conf_ctx_free(server_impl->conf_ctx_private, env); + server_impl->conf_ctx_private = NULL; + } + + /** + * Do not free this. It may own to some other object + */ + server_impl->conf_ctx = NULL; + + AXIS2_FREE(env->allocator, server_impl); +} + +static axis2_status_t AXIS2_CALL +axis2_http_server_init( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_transport_in_desc_t * in_desc) +{ + axis2_http_server_impl_t *server_impl = NULL; + axis2_char_t *port_str = NULL; + axutil_param_t *param = NULL; + + AXIS2_PARAM_CHECK(env->error, server, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, conf_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, in_desc, AXIS2_FAILURE); + + server_impl = AXIS2_INTF_TO_IMPL(server); + + server_impl->conf_ctx = conf_ctx; + param = (axutil_param_t *)axutil_param_container_get_param( + axis2_transport_in_desc_param_container(in_desc, env), env, AXIS2_PORT_STRING); + if(param) + { + port_str = axutil_param_get_value(param, env); + } + + if(port_str) + { + server_impl->port = atoi(port_str); + } + return AXIS2_SUCCESS; +} + +static axis2_status_t AXIS2_CALL +axis2_http_server_start( + axis2_transport_receiver_t * server, + const axutil_env_t * env) +{ + axis2_http_server_impl_t *server_impl = NULL; + axis2_http_worker_t *worker = NULL; + + server_impl = AXIS2_INTF_TO_IMPL(server); + server_impl->svr_thread = axis2_http_svr_thread_create(env, server_impl->port); + if(!server_impl->svr_thread) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "unable to create server thread for port %d", + server_impl->port); + return AXIS2_FAILURE; + } + + worker = axis2_http_worker_create(env, server_impl->conf_ctx); + if(!worker) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "axis2 http worker creation failed"); + axis2_http_svr_thread_free(server_impl->svr_thread, env); + return AXIS2_FAILURE; + } + axis2_http_worker_set_is_application_client_side(worker, env, + server_impl->is_application_client_side); + axis2_http_worker_set_svr_port(worker, env, server_impl->port); + {/** Obtain server IP and set it + axis2_transport_in_desc_t *transport_in = NULL; + axis2_conf_t *conf = NULL; + axis2_transport_receiver_t *receiver = NULL; + conf = axis2_conf_ctx_get_conf(server_impl->conf_ctx_private, env); + transport_in = axis2_conf_get_transport_in(conf, env, AXIS2_TRANSPORT_ENUM_HTTP); + receiver = axis2_transport_in_desc_get_recv(transport_in, env); + if(receiver) + { + int listen_socket = axis2_http_svr_thread_get_listen_socket(server_impl->svr_thread, env); + server_impl->svr_ip = axutil_network_handler_get_svr_ip(env, listen_socket); + AXIS2_INTF_TO_IMPL(receiver)->svr_ip = server_impl->svr_ip; + } + */ + } + AXIS2_LOG_INFO(env->log, "Starting HTTP server thread"); + axis2_http_svr_thread_set_worker(server_impl->svr_thread, env, worker); + axis2_http_svr_thread_run(server_impl->svr_thread, env); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_server_stop( + axis2_transport_receiver_t * server, + const axutil_env_t * env) +{ + AXIS2_LOG_INFO(env->log, "Terminating HTTP server thread"); + if(AXIS2_INTF_TO_IMPL(server)->svr_thread) + { + axis2_http_svr_thread_destroy(AXIS2_INTF_TO_IMPL(server)->svr_thread, env); + } + AXIS2_LOG_INFO(env->log, "Successfully terminated HTTP server thread"); + return AXIS2_SUCCESS; +} + +static axis2_conf_ctx_t *AXIS2_CALL +axis2_http_server_get_conf_ctx( + axis2_transport_receiver_t * server, + const axutil_env_t * env) +{ + return AXIS2_INTF_TO_IMPL(server)->conf_ctx; +} + +static axis2_endpoint_ref_t *AXIS2_CALL +axis2_http_server_get_reply_to_epr( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + const axis2_char_t * svc_name) +{ + axis2_endpoint_ref_t *epr = NULL; + const axis2_char_t *host_address = NULL; + axis2_char_t *svc_path = NULL; + axutil_url_t *url = NULL; + + host_address = AXIS2_DEFAULT_HOST_ADDRESS; /* TODO : get from axis2.xml */ + svc_path = axutil_stracat(env, AXIS2_DEFAULT_SVC_PATH, svc_name); + url = axutil_url_create(env, AXIS2_HTTP_PROTOCOL, host_address, + AXIS2_INTF_TO_IMPL(server)->port, svc_path); + + AXIS2_FREE(env->allocator, svc_path); + if(!url) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create reply to epr for service %s.", + svc_name); + return NULL; + } + epr = axis2_endpoint_ref_create(env, axutil_url_to_external_form(url, env)); + axutil_url_free(url, env); + return epr; +} + +static axis2_endpoint_ref_t *AXIS2_CALL +axis2_http_server_get_epr_for_service( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + const axis2_char_t * svc_name) +{ + axis2_endpoint_ref_t *epr = NULL; + const axis2_char_t *host_address = NULL; + axis2_char_t *svc_path = NULL; + axutil_url_t *url = NULL; + + if(AXIS2_INTF_TO_IMPL(server)->svr_ip) + { + host_address = AXIS2_INTF_TO_IMPL(server)->svr_ip; + }else + { + host_address = AXIS2_DEFAULT_HOST_ADDRESS; /* TODO : get from axis2.xml */ + } + svc_path = axutil_stracat(env, AXIS2_DEFAULT_SVC_PATH, svc_name); + + url = axutil_url_create(env, AXIS2_HTTP_PROTOCOL, host_address, + AXIS2_INTF_TO_IMPL(server)->port, svc_path); + + AXIS2_FREE(env->allocator, svc_path); + if(!url) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create reply to epr for service %s.", + svc_name); + return NULL; + } + epr = axis2_endpoint_ref_create(env, axutil_url_to_external_form(url, env)); + axutil_url_free(url, env); + return epr; +} + +static axis2_bool_t AXIS2_CALL +axis2_http_server_is_running( + axis2_transport_receiver_t * server, + const axutil_env_t * env) +{ + axis2_http_server_impl_t *server_impl = NULL; + server_impl = AXIS2_INTF_TO_IMPL(server); + if(server_impl->svr_thread) + { + return axis2_http_svr_thread_is_running(server_impl->svr_thread, env); + } + return AXIS2_FALSE; +} + +static void AXIS2_CALL +axis2_http_server_set_is_application_client_side( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + axis2_bool_t is_application_client_side) +{ + axis2_http_server_impl_t *server_impl = NULL; + server_impl = AXIS2_INTF_TO_IMPL(server); + server_impl->is_application_client_side = is_application_client_side; +} + +static axis2_char_t* AXIS2_CALL +axis2_http_server_get_server_ip( +axis2_transport_receiver_t *server, +const axutil_env_t *env) +{ + return AXIS2_INTF_TO_IMPL(server)->svr_ip; +} + +static void AXIS2_CALL +axis2_http_server_set_server_ip( +axis2_transport_receiver_t *server, +const axutil_env_t *env, + axis2_char_t *serverip) +{ + AXIS2_INTF_TO_IMPL(server)->svr_ip = serverip; +} + +/** + * Following block distinguish the exposed part of the dll. + */ +AXIS2_EXPORT int +axis2_get_instance( + struct axis2_transport_receiver **inst, + const axutil_env_t * env) +{ + *inst = axis2_http_server_create(env, NULL, -1); + if(!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_transport_receiver_t * inst, + const axutil_env_t * env) +{ + if(inst) + { + axis2_transport_receiver_free(inst, env); + } + return AXIS2_SUCCESS; +} + diff --git a/src/core/transport/http/receiver/http_svr_thread.c b/src/core/transport/http/receiver/http_svr_thread.c new file mode 100644 index 0000000..1806815 --- /dev/null +++ b/src/core/transport/http/receiver/http_svr_thread.c @@ -0,0 +1,315 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +AXIS2_EXPORT int axis2_http_socket_read_timeout = AXIS2_HTTP_DEFAULT_SO_TIMEOUT; + +struct axis2_http_svr_thread +{ + int listen_socket; + axis2_bool_t stopped; + axis2_http_worker_t *worker; + int port; +}; + +typedef struct axis2_http_svr_thd_args +{ + axutil_env_t *env; + axis2_socket_t socket; + axis2_http_worker_t *worker; + axutil_thread_t *thread; +} axis2_http_svr_thd_args_t; + +static void *AXIS2_THREAD_FUNC +axis2_svr_thread_worker_func( + axutil_thread_t * thd, + void *data); + +axis2_http_svr_thread_t *AXIS2_CALL +axis2_http_svr_thread_create( + const axutil_env_t * env, + int port) +{ + axis2_http_svr_thread_t *svr_thread = NULL; + + svr_thread = (axis2_http_svr_thread_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_http_svr_thread_t)); + + if(!svr_thread) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + memset((void *)svr_thread, 0, sizeof(axis2_http_svr_thread_t)); + + svr_thread->port = port; + svr_thread->listen_socket = (int)axutil_network_handler_create_server_socket(env, + svr_thread->port); + if(-1 == svr_thread->listen_socket) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Http server thread socket creation failed."); + axis2_http_svr_thread_free((axis2_http_svr_thread_t *)svr_thread, env); + return NULL; + } + + return svr_thread; +} + +void AXIS2_CALL +axis2_http_svr_thread_free( + axis2_http_svr_thread_t * svr_thread, + const axutil_env_t * env) +{ + if(!svr_thread) + { + return; + } + + if(svr_thread->worker) + { + axis2_http_worker_free(svr_thread->worker, env); + svr_thread->worker = NULL; + } + if(-1 != svr_thread->listen_socket) + { + axutil_network_handler_close_socket(env, svr_thread->listen_socket); + svr_thread->listen_socket = -1; + } + svr_thread->stopped = AXIS2_TRUE; + + AXIS2_FREE(env->allocator, svr_thread); +} + +axis2_status_t AXIS2_CALL +axis2_http_svr_thread_run( + axis2_http_svr_thread_t * svr_thread, + const axutil_env_t * env) +{ + while(AXIS2_FALSE == svr_thread->stopped) + { + int socket = -1; + axis2_http_svr_thd_args_t *arg_list = NULL; +#ifdef AXIS2_SVR_MULTI_THREADED + axutil_thread_t *worker_thread = NULL; +#endif + + socket = (int)axutil_network_handler_svr_socket_accept(env, svr_thread-> listen_socket); + if(!svr_thread->worker) + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, + "Worker not ready yet. Cannot serve the request"); + axutil_network_handler_close_socket(env, socket); + continue; + } + + arg_list = AXIS2_MALLOC(env->allocator, sizeof(axis2_http_svr_thd_args_t)); + if(!arg_list) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Memory allocation error in the svr thread loop"); + continue; + } + + arg_list->env = (axutil_env_t *)env; + arg_list->socket = socket; + arg_list->worker = svr_thread->worker; +#ifdef AXIS2_SVR_MULTI_THREADED + worker_thread = axutil_thread_pool_get_thread(env->thread_pool, + axis2_svr_thread_worker_func, (void *) arg_list); + if (!worker_thread) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Thread creation failed server thread loop"); + continue; + } + axutil_thread_pool_thread_detach(env->thread_pool, worker_thread); +#else + axis2_svr_thread_worker_func(NULL, (void *)arg_list); +#endif + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_svr_thread_destroy( + axis2_http_svr_thread_t * svr_thread, + const axutil_env_t * env) +{ + if(AXIS2_TRUE == svr_thread->stopped) + { + return AXIS2_SUCCESS; + } + + svr_thread->stopped = AXIS2_TRUE; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Terminating HTTP server thread."); + if(svr_thread->listen_socket) + { + axutil_network_handler_close_socket(env, svr_thread->listen_socket); + svr_thread->listen_socket = -1; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_http_svr_thread_get_local_port( + const axis2_http_svr_thread_t * svr_thread, + const axutil_env_t * env) +{ + return svr_thread->port; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_svr_thread_is_running( + axis2_http_svr_thread_t * svr_thread, + const axutil_env_t * env) +{ + return !(svr_thread->stopped); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_svr_thread_set_worker( + axis2_http_svr_thread_t * svr_thread, + const axutil_env_t * env, + axis2_http_worker_t * worker) +{ + AXIS2_PARAM_CHECK(env->error, worker, AXIS2_FAILURE); + svr_thread->worker = worker; + return AXIS2_SUCCESS; +} + +/** + * Thread worker function. + */ +static void *AXIS2_THREAD_FUNC +axis2_svr_thread_worker_func( + axutil_thread_t * thd, + void *data) +{ + struct AXIS2_PLATFORM_TIMEB t1, t2; + axis2_simple_http_svr_conn_t *svr_conn = NULL; + axis2_http_simple_request_t *request = NULL; + int millisecs = 0; + double secs = 0; + axis2_http_worker_t *tmp = NULL; + axis2_status_t status = AXIS2_FAILURE; + axutil_env_t *env = NULL; + axis2_socket_t socket; + axutil_env_t *thread_env = NULL; + axis2_http_svr_thd_args_t *arg_list = NULL; + +#ifndef WIN32 +#ifdef AXIS2_SVR_MULTI_THREADED + signal(SIGPIPE, SIG_IGN); +#endif +#endif + + if(!data) + { + return NULL; + } + arg_list = (axis2_http_svr_thd_args_t *)data; + + env = arg_list->env; + thread_env = axutil_init_thread_env(env); + + IF_AXIS2_LOG_DEBUG_ENABLED(env->log) + { + AXIS2_PLATFORM_GET_TIME_IN_MILLIS(&t1); + } + + socket = arg_list->socket; + svr_conn = axis2_simple_http_svr_conn_create(thread_env, (int)socket); + if(!svr_conn) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "creating simple_http_svr_connection failed"); + return NULL; + } + + axis2_simple_http_svr_conn_set_rcv_timeout(svr_conn, thread_env, axis2_http_socket_read_timeout); + + /* read HTTPMethod, URL, HTTP Version and http headers. Leave the remaining in the stream */ + request = axis2_simple_http_svr_conn_read_request(svr_conn, thread_env); + if(!request) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Could not create request"); + return NULL; + } + + tmp = arg_list->worker; + status = axis2_http_worker_process_request(tmp, thread_env, svr_conn, request); + axis2_simple_http_svr_conn_free(svr_conn, thread_env); + axis2_http_simple_request_free(request, thread_env); + + IF_AXIS2_LOG_DEBUG_ENABLED(env->log) + { + AXIS2_PLATFORM_GET_TIME_IN_MILLIS(&t2); + millisecs = t2.millitm - t1.millitm; + secs = difftime(t2.time, t1.time); + if(millisecs < 0) + { + millisecs += 1000; + secs--; + } + secs += millisecs / 1000.0; + +#if defined(WIN32) + AXIS2_LOG_DEBUG(thread_env->log, AXIS2_LOG_SI, "Request processed..."); +#else + AXIS2_LOG_DEBUG(thread_env->log, AXIS2_LOG_SI, "Request processed in %.3f seconds", secs); +#endif + } + + if(status == AXIS2_SUCCESS) + { + AXIS2_LOG_DEBUG(thread_env->log, AXIS2_LOG_SI, "Request served successfully"); + } + else + { + AXIS2_LOG_WARNING(thread_env->log, AXIS2_LOG_SI, "Error occurred in processing request "); + } + + AXIS2_FREE(thread_env->allocator, arg_list); + axutil_free_thread_env(thread_env); + thread_env = NULL; + +#ifdef AXIS2_SVR_MULTI_THREADED + axutil_thread_pool_exit_thread(env->thread_pool, thd); +#endif + + return NULL; +} + +AXIS2_EXTERN int AXIS2_CALL + axis2_http_svr_thread_get_listen_socket( + axis2_http_svr_thread_t *svr_thread, + const axutil_env_t *env) +{ + return svr_thread->listen_socket; + +} diff --git a/src/core/transport/http/sender/Makefile.am b/src/core/transport/http/sender/Makefile.am new file mode 100644 index 0000000..399ed39 --- /dev/null +++ b/src/core/transport/http/sender/Makefile.am @@ -0,0 +1,51 @@ +SUBDIRS=ssl libcurl +lib_LTLIBRARIES = libaxis2_http_sender.la + + + +if AXIS2_LIBCURL_ENABLED +LIBCURL_SOURCES=libcurl/axis2_libcurl.c\ + libcurl/libcurl_stream.c +LIBCURL_LIBS=-lssl -lcrypto -lcurl -ldl -lz +else +LIBCURL_SOURCES= +LIBCURL_LIBS= +endif + + +if AXIS2_SSL_ENABLED +SSL_SOURCES = ssl/ssl_stream.c\ + ssl/ssl_utils.c +SSL_LIBS = -lssl -lcrypto +else +SSL_SOURCES= +SSL_LIBS= +endif + +libaxis2_http_sender_la_SOURCES = http_transport_sender.c \ + http_sender.c \ + http_client.c \ + $(SSL_SOURCES) \ + $(LIBCURL_SOURCES) + +libaxis2_http_sender_la_LIBADD = $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la\ + $(top_builddir)/src/core/transport/http/util/libaxis2_http_util.la\ + $(top_builddir)/axiom/src/om/libaxis2_axiom.la\ + $(top_builddir)/util/src/libaxutil.la\ + $(LIBCURL_LIBS)\ + $(SSL_LIBS) + + +libaxis2_http_sender_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/transport\ + -I$(top_builddir)/src/core/transport/http \ + -I$(top_builddir)/src/core/transport/http/sender/libcurl \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include diff --git a/src/core/transport/http/sender/http_client.c b/src/core/transport/http/sender/http_client.c new file mode 100644 index 0000000..80e7ee3 --- /dev/null +++ b/src/core/transport/http/sender/http_client.c @@ -0,0 +1,965 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef AXIS2_SSL_ENABLED +#include "ssl/ssl_stream.h" +#endif + +struct axis2_http_client +{ + int sockfd; + axutil_stream_t *data_stream; + axutil_url_t *url; + axis2_http_simple_response_t *response; + axis2_bool_t request_sent; + int timeout; + axis2_bool_t proxy_enabled; + axis2_char_t *proxy_host; + int proxy_port; + axis2_char_t *proxy_host_port; + axis2_bool_t dump_input_msg; + axis2_char_t *server_cert; + axis2_char_t *key_file; + axis2_char_t *req_body; + int req_body_size; + + /* These are for mtom case */ + axutil_array_list_t *mime_parts; + axis2_bool_t doing_mtom; + axis2_char_t *mtom_sending_callback_name; +}; + +AXIS2_EXTERN axis2_http_client_t *AXIS2_CALL +axis2_http_client_create( + const axutil_env_t * env, + axutil_url_t * url) +{ + axis2_http_client_t *http_client = NULL; + + http_client = (axis2_http_client_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_http_client_t)); + + if(!http_client) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + memset(http_client, 0, sizeof(axis2_http_client_t)); + + http_client->url = url; + http_client->data_stream = NULL; + http_client->sockfd = -1; + http_client->response = NULL; + http_client->request_sent = AXIS2_FALSE; + + /* default timeout is 60000 milliseconds */ + http_client->timeout = AXIS2_HTTP_DEFAULT_CONNECTION_TIMEOUT; + http_client->proxy_enabled = AXIS2_FALSE; + http_client->proxy_port = 0; + http_client->proxy_host = NULL; + http_client->proxy_host_port = NULL; + http_client->dump_input_msg = AXIS2_FALSE; + http_client->server_cert = NULL; + http_client->key_file = NULL; + http_client->req_body = NULL; + http_client->req_body_size = 0; + http_client->mime_parts = NULL; + http_client->doing_mtom = AXIS2_FALSE; + http_client->mtom_sending_callback_name = NULL; + + return http_client; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_client_free( + axis2_http_client_t * http_client, + const axutil_env_t * env) +{ + if(http_client->proxy_host) + { + AXIS2_FREE(env->allocator, http_client->proxy_host); + } + if(http_client->proxy_host_port) + { + AXIS2_FREE(env->allocator, http_client->proxy_host_port); + } + if(http_client->url) + { + axutil_url_free(http_client->url, env); + } + if(http_client->response) + { + axis2_http_simple_response_free(http_client->response, env); + } + if(-1 != http_client->sockfd) + { + axutil_network_handler_close_socket(env, http_client->sockfd); + http_client->sockfd = -1; + } + + if(http_client->req_body) + { + AXIS2_FREE(env->allocator, http_client->req_body); + } + + /* There is no other appropriate place to free the mime_part list when a + * particular client send requests. */ + + if(http_client->mime_parts) + { + int i = 0; + for(i = 0; i < axutil_array_list_size(http_client->mime_parts, env); i++) + { + axiom_mime_part_t *mime_part = NULL; + mime_part = (axiom_mime_part_t *)axutil_array_list_get(http_client->mime_parts, env, i); + if(mime_part) + { + axiom_mime_part_free(mime_part, env); + } + } + axutil_array_list_free(http_client->mime_parts, env); + } + + AXIS2_FREE(env->allocator, http_client); + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_client_free_void_arg( + void *client, + const axutil_env_t * env) +{ + axis2_http_client_t *client_l = NULL; + + client_l = (axis2_http_client_t *)client; + axis2_http_client_free(client_l, env); + return; +} + +/* This is the main method which writes to the socket in the case of a client + * sends an http_request. Previously this method does not distinguish between a + * mtom request and non mtom request. Because what finally it had was the + * complete buffer with the request. But now MTOM invocations are done + * differently in order to support large attachments so this method should + * distinguish those invocations */ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_client_send( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_http_simple_request_t * request, + axis2_char_t * ssl_pp) +{ + char *wire_format = NULL; + axutil_array_list_t *headers = NULL; + char *str_header = NULL; + char *str_request_line = NULL; + int written = 0; + axis2_status_t status = AXIS2_FAILURE; + axis2_bool_t chunking_enabled = AXIS2_FALSE; + axis2_char_t *host = NULL; + unsigned int port = 0; + + /* In the MTOM case request body is not set. Instead mime_parts + array_list is there */ + + if(client->req_body) + { + AXIS2_FREE(env->allocator, client->req_body); + client->req_body = NULL; + } + if(!client->req_body && !(client->doing_mtom)) + { + client->req_body_size = axis2_http_simple_request_get_body_bytes(request, env, + &client->req_body); + } + + if(client->dump_input_msg == AXIS2_TRUE) + { + return AXIS2_SUCCESS; + } + + if(!client->url) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NULL_URL, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Request url not set"); + return AXIS2_FAILURE; + } + + host = axutil_url_get_host(client->url, env); + port = axutil_url_get_port(client->url, env); + + if(client->proxy_enabled) + { + if(!client->proxy_host || client->proxy_port <= 0) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Proxy port or Host not set"); + return AXIS2_FAILURE; + } + + if(client->sockfd < 0) + { + client->sockfd = (int)axutil_network_handler_open_socket(env, client->proxy_host, + client->proxy_port); + } + } + else + { + /*Proxy is not enabled*/ + + if(client->sockfd < 0) + { + client->sockfd = (int)axutil_network_handler_open_socket(env, host, port); + } + } + + if(client->sockfd < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Socket Creation failed."); + return AXIS2_FAILURE; + } + + if(client->timeout > 0) + { + /*Set the receiving time out*/ + axutil_network_handler_set_sock_option(env, client->sockfd, SO_RCVTIMEO, client->timeout); + /*Set the sending time out*/ + + axutil_network_handler_set_sock_option(env, client->sockfd, SO_SNDTIMEO, client->timeout); + } + + if(0 == axutil_strcasecmp(axutil_url_get_protocol(client->url, env), AXIS2_TRANSPORT_URL_HTTPS)) + { +#ifdef AXIS2_SSL_ENABLED + if (client->proxy_enabled) + { + if (AXIS2_SUCCESS != axis2_http_client_connect_ssl_host(client, env, host, port)) + { + axutil_network_handler_close_socket(env, client->sockfd); + client->sockfd = -1; + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "HTTPS connection creation failed"); + return AXIS2_FAILURE; + } + } + client->data_stream = + axutil_stream_create_ssl(env, client->sockfd, axis2_http_client_get_server_cert(client, + env), axis2_http_client_get_key_file(client, env), ssl_pp); +#else + axutil_network_handler_close_socket(env, client->sockfd); + client->sockfd = -1; + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_TRANSPORT_PROTOCOL, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Invalid Transport Protocol, HTTPS transport not enabled."); + + return AXIS2_FAILURE; +#endif + } + else + { + client->data_stream = axutil_stream_create_socket(env, client->sockfd); + } + + if(!client->data_stream) + { + axutil_network_handler_close_socket(env, client->sockfd); + client->sockfd = -1; + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Data stream creation failed for Host %s and %d port", host, port); + + return AXIS2_FAILURE; + } + + /*Accessing HTTP headers*/ + + headers = axis2_http_simple_request_get_headers(request, env); + if(headers) + { + int header_count = axutil_array_list_size(headers, env); + int i = 0; + char *str_header2 = NULL; + for(i = 0; i < header_count; i++) + { + axis2_char_t *header_ext_form = NULL; + axis2_http_header_t *tmp_header = (axis2_http_header_t *)axutil_array_list_get(headers, + env, i); + + if(!tmp_header) + { + /* This continue is added as a safey mechanism, + * However I see a problem with this logic, AFAIC + * see there can't be null headers in the headers + * array list, because number of headers in "headers" + * array list count with axutil_array_list_size, + * therefore this check and continue might not have a + * real effect.*/ + + continue; + } + + /* check whether we have transfer encoding and then see whether the + * value is "chunked" */ + if(!axutil_strcmp(axis2_http_header_get_name(tmp_header, env), + AXIS2_HTTP_HEADER_TRANSFER_ENCODING) && !axutil_strcmp(axis2_http_header_get_value( + tmp_header, env), AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED)) + { + chunking_enabled = AXIS2_TRUE; + } + + header_ext_form = axis2_http_header_to_external_form(tmp_header, env); + + /* str_header2 is to hold intermediate value of str_header */ + str_header2 = axutil_stracat(env, str_header, header_ext_form); + if(str_header) + { + AXIS2_FREE(env->allocator, str_header); + str_header = NULL; + } + if(header_ext_form) + { + AXIS2_FREE(env->allocator, header_ext_form); + header_ext_form = NULL; + } + + /* str_header has all HTTP headers to send. */ + str_header = str_header2; + } + } + + if(AXIS2_FALSE == client->proxy_enabled) + { + str_request_line = axis2_http_request_line_to_string( + axis2_http_simple_request_get_request_line(request, env), env); + } + else + { + /* proxy enabled case */ + + /* we need the request line in the format + * POST http://host:port/path HTTP/1.x if we have enabled proxies + */ + axis2_char_t *host_port_str = NULL; + axis2_char_t *host = axutil_url_get_host(client->url, env); + axis2_http_request_line_t *request_line = axis2_http_simple_request_get_request_line( + request, env); + axis2_char_t *path = axis2_http_request_line_get_uri(request_line, env); + + host_port_str = AXIS2_MALLOC(env->allocator, axutil_strlen(host) + axutil_strlen(path) + 20 + * sizeof(axis2_char_t)); + + if(!host_port_str) + { + axutil_network_handler_close_socket(env, client->sockfd); + client->sockfd = -1; + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Memory allocation failed for host %s and %s path", host, path); + + return AXIS2_FAILURE; + } + + sprintf(host_port_str, "http://%s:%d%s", host, axutil_url_get_port(client->url, env), path); + str_request_line = AXIS2_MALLOC(env->allocator, axutil_strlen(host_port_str) + 20 + * sizeof(axis2_char_t)); + + if(!str_request_line) + { + axutil_network_handler_close_socket(env, client->sockfd); + client->sockfd = -1; + AXIS2_FREE(env->allocator, host_port_str); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "memory allocation failed for host %s and %s path", host, path); + + return AXIS2_FAILURE; + } + + sprintf(str_request_line, "%s %s %s\r\n", axis2_http_request_line_get_method(request_line, + env), host_port_str, axis2_http_request_line_get_http_version(request_line, env)); + + AXIS2_FREE(env->allocator, host_port_str); + host_port_str = NULL; + + } + + /* Here first we send the http header part */ + + wire_format = axutil_stracat(env, str_request_line, str_header); + AXIS2_FREE(env->allocator, str_header); + str_header = NULL; + AXIS2_FREE(env->allocator, str_request_line); + str_request_line = NULL; + written + = axutil_stream_write(client->data_stream, env, wire_format, axutil_strlen(wire_format)); + AXIS2_FREE(env->allocator, wire_format); + wire_format = NULL; + + /* Then we write the two new line charaters before the http body*/ + + written = axutil_stream_write(client->data_stream, env, AXIS2_HTTP_CRLF, 2); + + /* When sending MTOM it is bit different. We keep the attachment + other + mime headers in an array_list and send them one by one */ + + if(client->doing_mtom) + { + axis2_status_t status = AXIS2_SUCCESS; + axutil_http_chunked_stream_t *chunked_stream = NULL; + + /* If the callback name is not there, then we will check whether there + * is any mime_parts which has type callback. If we found then no point + * of continuing we should return a failure */ + + if(!(client->mtom_sending_callback_name)) + { + if(axis2_http_transport_utils_is_callback_required(env, client->mime_parts)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Sender callback not specified"); + return AXIS2_FAILURE; + } + } + + /* For MTOM we automatically enabled chunking */ + chunked_stream = axutil_http_chunked_stream_create(env, client->data_stream); + + /* This method will write the Attachment + data to the wire */ + + status = axis2_http_transport_utils_send_mtom_message(chunked_stream, env, + client->mime_parts, client->mtom_sending_callback_name); + + axutil_http_chunked_stream_free(chunked_stream, env); + chunked_stream = NULL; + + } + /* Non MTOM case */ + else if(client->req_body_size > 0 && client->req_body) + { + int len = 0; + written = 0; + + /* Keep on writing data in a loop until we finised + with all the data in the buffer */ + + if(!chunking_enabled) + { + status = AXIS2_SUCCESS; + while(written < client->req_body_size) + { + len = 0; + len = axutil_stream_write(client->data_stream, env, client->req_body + written, + client->req_body_size - written); + if(-1 == len) + { + status = AXIS2_FAILURE; + break; + } + else + { + written += len; + } + } + } + else + { + /* Not MTOM but chunking is enabled */ + axutil_http_chunked_stream_t *chunked_stream = NULL; + chunked_stream = axutil_http_chunked_stream_create(env, client->data_stream); + status = AXIS2_SUCCESS; + if(!chunked_stream) + { + axutil_network_handler_close_socket(env, client->sockfd); + client->sockfd = -1; + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creatoin of chunked stream failed"); + return AXIS2_FAILURE; + } + + while(written < client->req_body_size) + { + written = axutil_http_chunked_stream_write(chunked_stream, env, client->req_body, + client->req_body_size); + + if(-1 == written) + { + status = AXIS2_FAILURE; + break; + } + } + + if(AXIS2_SUCCESS == status) + { + /* Writing the trailing null charactor */ + axutil_http_chunked_stream_write_last_chunk(chunked_stream, env); + } + + axutil_http_chunked_stream_free(chunked_stream, env); + } + } + + client->request_sent = AXIS2_TRUE; + return status; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_http_client_recieve_header( + axis2_http_client_t * client, + const axutil_env_t * env) +{ + int status_code = -1; + axis2_http_status_line_t *status_line = NULL; + axis2_char_t str_status_line[512]; + axis2_char_t tmp_buf[3]; + axis2_char_t str_header[512]; + int read = 0; + int http_status = 0; + axis2_bool_t end_of_line = AXIS2_FALSE; + axis2_bool_t end_of_headers = AXIS2_FALSE; + + if(-1 == client->sockfd || !client->data_stream || AXIS2_FALSE == client->request_sent) + { + axis2_char_t *host; + unsigned int port; + host = axutil_url_get_host(client->url, env); + port = axutil_url_get_port(client->url, env); + + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "client data stream null or socket error for host \ +%s and %d port", host, port); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_HTTP_REQUEST_NOT_SENT, AXIS2_FAILURE); + return -1; + } + + /* read the status line */ + do + { + memset(str_status_line, 0, 512); + while((read = axutil_stream_read(client->data_stream, env, tmp_buf, 1)) > 0) + { + /* "read" variable is number of characters read by stream */ + tmp_buf[read] = '\0'; + strcat(str_status_line, tmp_buf); + if(0 != strstr(str_status_line, AXIS2_HTTP_CRLF)) + { + end_of_line = AXIS2_TRUE; + break; + } + } + + if(read < 0) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "http client , response timed out"); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_RESPONSE_TIMED_OUT, AXIS2_FAILURE); + return -1; + } + else if(read == 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_RESPONSE_SERVER_SHUTDOWN, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Response error, Server Shutdown"); + return 0; + } + + status_line = axis2_http_status_line_create(env, str_status_line); + if(!status_line) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "axis2_http_status_line_create failed for \ +str_status_line %s", str_status_line); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE, AXIS2_FAILURE); + http_status = 0; + continue; + + } + http_status = axis2_http_status_line_get_status_code(status_line, env); + + } + while(AXIS2_HTTP_RESPONSE_OK_CODE_VAL > http_status); + + if(client->response) + axis2_http_simple_response_free(client->response, env); + client->response = axis2_http_simple_response_create_default(env); + axis2_http_simple_response_set_status_line(client->response, env, + axis2_http_status_line_get_http_version(status_line, env), + axis2_http_status_line_get_status_code(status_line, env), + axis2_http_status_line_get_reason_phrase(status_line, env)); + + /* now read the headers */ + memset(str_header, 0, 512); + end_of_line = AXIS2_FALSE; + while(AXIS2_FALSE == end_of_headers) + { + while((read = axutil_stream_read(client->data_stream, env, tmp_buf, 1)) > 0) + { + tmp_buf[read] = '\0'; + strcat(str_header, tmp_buf); + if(0 != strstr(str_header, AXIS2_HTTP_CRLF)) + { + end_of_line = AXIS2_TRUE; + break; + } + } + if(AXIS2_TRUE == end_of_line) + { + if(0 == axutil_strcmp(str_header, AXIS2_HTTP_CRLF)) + { + end_of_headers = AXIS2_TRUE; + } + else + { + axis2_http_header_t *tmp_header = axis2_http_header_create_by_str(env, str_header); + memset(str_header, 0, 512); + if(tmp_header) + { + axis2_http_simple_response_set_header(client->response, env, tmp_header); + } + } + } + end_of_line = AXIS2_FALSE; + } + axis2_http_simple_response_set_body_stream(client->response, env, client->data_stream); + if(status_line) + { + status_code = axis2_http_status_line_get_status_code(status_line, env); + axis2_http_status_line_free(status_line, env); + status_line = NULL; + } + + if(AXIS2_FALSE == axis2_http_simple_response_contains_header(client->response, env, + AXIS2_HTTP_HEADER_CONTENT_TYPE) && 202 != status_code + && axis2_http_simple_response_get_content_length(client->response, env) > 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_RESPONSE_CONTENT_TYPE_MISSING, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Response does not contain" " Content-Type"); + return -1; + } + return status_code; +} + +AXIS2_EXTERN axis2_http_simple_response_t *AXIS2_CALL +axis2_http_client_get_response( + const axis2_http_client_t * client, + const axutil_env_t * env) +{ + return client->response; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_client_set_url( + axis2_http_client_t * client, + const axutil_env_t * env, + axutil_url_t * url) +{ + AXIS2_PARAM_CHECK(env->error, url, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, client, AXIS2_FAILURE); + + if(client->url) + { + axutil_url_free(client->url, env); + client->url = NULL; + } + client->url = url; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_url_t *AXIS2_CALL +axis2_http_client_get_url( + const axis2_http_client_t * client, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, client, NULL); + return client->url; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_client_set_timeout( + axis2_http_client_t * client, + const axutil_env_t * env, + int timeout_ms) +{ + AXIS2_PARAM_CHECK(env->error, client, AXIS2_FAILURE); + client->timeout = timeout_ms; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_http_client_get_timeout( + const axis2_http_client_t * client, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, client, AXIS2_FAILURE); + return client->timeout; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_client_set_proxy( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_char_t * proxy_host, + int proxy_port) +{ + AXIS2_PARAM_CHECK(env->error, proxy_host, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, client, AXIS2_FAILURE); + + if(proxy_port <= 0) + { + return AXIS2_FAILURE; + } + + client->proxy_port = proxy_port; + if(client->proxy_host) + { + AXIS2_FREE(env->allocator, client->proxy_host); + client->proxy_host = NULL; + } + + if(client->proxy_host_port) + { + AXIS2_FREE(env->allocator, client->proxy_host_port); + client->proxy_host_port = NULL; + } + + client->proxy_host = axutil_strdup(env, proxy_host); + if(!client->proxy_host) + { + return AXIS2_FAILURE; + } + + client->proxy_host_port = AXIS2_MALLOC(env->allocator, axutil_strlen(proxy_host) + 10 + * sizeof(axis2_char_t)); + + sprintf(client->proxy_host_port, "%s:%d", proxy_host, proxy_port); + client->proxy_enabled = AXIS2_TRUE; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_client_get_proxy( + const axis2_http_client_t * client, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, client, NULL); + return client->proxy_host_port; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_client_connect_ssl_host( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_char_t * host, + int port) +{ + axutil_stream_t *tmp_stream = NULL; + axis2_char_t *connect_string = NULL; + axis2_char_t str_status_line[512]; + axis2_char_t tmp_buf[3]; + int read = 0; + axis2_bool_t end_of_line = AXIS2_FALSE; + axis2_bool_t end_of_response = AXIS2_FALSE; + axis2_http_status_line_t *status_line = NULL; + + AXIS2_PARAM_CHECK(env->error, host, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, client, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, client->url, AXIS2_FAILURE); + /* This host and port will use for give undersandable log messages + * */ + + if(port <= 0) + { + return AXIS2_FAILURE; + } + + tmp_stream = axutil_stream_create_socket(env, client->sockfd); + if(!tmp_stream) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "unable to create open socket for ssl host %s and %d \ +port", host, port); + return AXIS2_FAILURE; + } + + connect_string = AXIS2_MALLOC(env->allocator, axutil_strlen(host) * sizeof(axis2_char_t) + 30 + * sizeof(axis2_char_t)); + sprintf(connect_string, "CONNECT %s:%d HTTP/1.0\r\n\r\n", host, port); + axutil_stream_write(tmp_stream, env, connect_string, axutil_strlen(connect_string) + * sizeof(axis2_char_t)); + + memset(str_status_line, 0, 512); + while((read = axutil_stream_read(tmp_stream, env, tmp_buf, 1)) > 0) + { + tmp_buf[read] = '\0'; + strcat(str_status_line, tmp_buf); + if(0 != strstr(str_status_line, AXIS2_HTTP_CRLF)) + { + end_of_line = AXIS2_TRUE; + break; + } + } + if(read < 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_RESPONSE_TIMED_OUT, AXIS2_FAILURE); + AXIS2_FREE(env->allocator, connect_string); + axutil_stream_free(tmp_stream, env); + return AXIS2_FAILURE; + } + status_line = axis2_http_status_line_create(env, str_status_line); + if(!status_line) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE, AXIS2_FAILURE); + AXIS2_FREE(env->allocator, connect_string); + axutil_stream_free(tmp_stream, env); + return AXIS2_FAILURE; + } + if(200 != axis2_http_status_line_get_status_code(status_line, env)) + { + AXIS2_FREE(env->allocator, connect_string); + axutil_stream_free(tmp_stream, env); + return AXIS2_FAILURE; + } + /* We need to empty the stream before we return + */ + memset(str_status_line, 0, 512); + while(AXIS2_FALSE == end_of_response) + { + while((read = axutil_stream_read(tmp_stream, env, tmp_buf, 1)) > 0) + { + tmp_buf[read] = '\0'; + strcat(str_status_line, tmp_buf); + if(0 != strstr(str_status_line, AXIS2_HTTP_CRLF)) + { + end_of_line = AXIS2_TRUE; + break; + } + } + if(AXIS2_TRUE == end_of_line) + { + if(0 == axutil_strcmp(str_status_line, AXIS2_HTTP_CRLF)) + { + end_of_response = AXIS2_TRUE; + } + } + } + AXIS2_FREE(env->allocator, connect_string); + axutil_stream_free(tmp_stream, env); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_client_set_dump_input_msg( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_bool_t dump_input_msg) +{ + client->dump_input_msg = dump_input_msg; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_client_set_server_cert( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_char_t * server_cert) +{ + AXIS2_PARAM_CHECK(env->error, client, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, server_cert, AXIS2_FAILURE); + client->server_cert = server_cert; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_client_get_server_cert( + const axis2_http_client_t * client, + const axutil_env_t * env) +{ + return client->server_cert; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_client_set_key_file( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_char_t * key_file) +{ + AXIS2_PARAM_CHECK(env->error, client, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, key_file, AXIS2_FAILURE); + client->key_file = key_file; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_client_get_key_file( + const axis2_http_client_t * client, + const axutil_env_t * env) +{ + return client->key_file; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_client_set_mime_parts( + axis2_http_client_t * client, + const axutil_env_t * env, + axutil_array_list_t *mime_parts) +{ + client->mime_parts = mime_parts; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_http_client_get_mime_parts( + const axis2_http_client_t * client, + const axutil_env_t * env) +{ + return client->mime_parts; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_client_set_doing_mtom( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_bool_t doing_mtom) +{ + client->doing_mtom = doing_mtom; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_client_get_doing_mtom( + const axis2_http_client_t * client, + const axutil_env_t * env) +{ + return client->doing_mtom; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_client_set_mtom_sending_callback_name( + axis2_http_client_t * client, + const axutil_env_t * env, + axis2_char_t *callback_name) +{ + client->mtom_sending_callback_name = callback_name; + return AXIS2_SUCCESS; +} diff --git a/src/core/transport/http/sender/http_sender.c b/src/core/transport/http/sender/http_sender.c new file mode 100644 index 0000000..56f11e0 --- /dev/null +++ b/src/core/transport/http/sender/http_sender.c @@ -0,0 +1,3332 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef AXIS2_LIBCURL_ENABLED +#include "libcurl/axis2_libcurl.h" +#else +#define CLIENT_NONCE_LENGTH 8 +#endif + +struct axis2_http_sender +{ + axis2_char_t *http_version; + axis2_bool_t chunked; + int so_timeout; + axiom_output_t *om_output; + axis2_http_client_t *client; + axis2_bool_t is_soap; + axis2_bool_t keep_alive; +}; + +#ifndef AXIS2_LIBCURL_ENABLED +static void +axis2_http_sender_add_header_list( + axis2_http_simple_request_t * request, + const axutil_env_t * env, + axutil_array_list_t * array_list); + +static axis2_status_t +axis2_http_sender_configure_proxy( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + +static axis2_status_t +axis2_http_sender_configure_server_cert( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + +static axis2_status_t +axis2_http_sender_configure_key_file( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + +static axis2_status_t +axis2_http_sender_configure_http_auth( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request); + +static axis2_status_t +axis2_http_sender_configure_proxy_auth( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request); + +static axis2_status_t +axis2_http_sender_set_http_auth_type( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request); + +static axis2_status_t +axis2_http_sender_set_proxy_auth_type( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request); + +static axis2_status_t +axis2_http_sender_configure_http_basic_auth( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request); + +static axis2_status_t +axis2_http_sender_configure_proxy_basic_auth( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request); + +static axis2_status_t +axis2_http_sender_configure_http_digest_auth( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request, + axis2_char_t * header_data); + +static axis2_status_t +axis2_http_sender_configure_proxy_digest_auth( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request, + axis2_char_t * header_data); + + + +#endif + +static axutil_hash_t * +axis2_http_sender_connection_map_create( + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx); + +static void +axis2_http_sender_connection_map_remove( + axutil_hash_t *connection_map, + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx, + axis2_http_client_t *http_client); + +static void +axis2_http_sender_connection_map_add( + axutil_hash_t *connection_map, + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx, + axis2_http_client_t *http_client); + +static axis2_http_client_t * +axis2_http_sender_connection_map_get( + axutil_hash_t *connection_map, + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx); + +static void AXIS2_CALL +axis2_http_sender_connection_map_free( + void *cm_void, + const axutil_env_t *env); + +AXIS2_EXTERN axis2_http_sender_t *AXIS2_CALL +axis2_http_sender_create( + const axutil_env_t * env) +{ + axis2_http_sender_t *sender = NULL; + + sender = (axis2_http_sender_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_http_sender_t)); + + if(!sender) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + memset(sender, 0, sizeof(axis2_http_sender_t)); + sender->http_version = (axis2_char_t *)AXIS2_HTTP_HEADER_PROTOCOL_11; + sender->so_timeout = AXIS2_HTTP_DEFAULT_SO_TIMEOUT; + /* unlike the java impl we don't have a default om output + * it should be explicitly set and it's a MUST + */ + sender->om_output = NULL; + sender->chunked = AXIS2_FALSE; + sender->client = NULL; + sender->keep_alive = AXIS2_TRUE; + + return sender; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_sender_free( + axis2_http_sender_t * sender, + const axutil_env_t * env) +{ + if(sender->http_version) + { + AXIS2_FREE(env->allocator, sender->http_version); + } + + /* Do not free this here since it will be required in later processing + * of the response soap message + */ + sender->client = NULL; + AXIS2_FREE(env->allocator, sender); + return; +} + +#ifndef AXIS2_LIBCURL_ENABLED +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_sender_send( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axiom_soap_envelope_t * out, + const axis2_char_t * str_url, + const axis2_char_t * soap_action) +{ + axis2_http_simple_request_t *request = NULL; + axis2_http_request_line_t *request_line = NULL; + + /* url is to hold url given in str_url */ + axutil_url_t *url = NULL; + axiom_xml_writer_t *xml_writer = NULL; + axis2_char_t *buffer = NULL; + unsigned int buffer_size = 0; + const axis2_char_t *char_set_enc = NULL; + axutil_string_t *char_set_enc_str = NULL; + int status_code = -1; + axis2_http_simple_response_t *response = NULL; + axis2_char_t *content_type = NULL; + axis2_bool_t content_type_deepl_copy = AXIS2_TRUE; + axis2_byte_t *output_stream = NULL; + int output_stream_size = 0; + axis2_bool_t doing_mtom = AXIS2_FALSE; + axutil_property_t *dump_property = NULL; + axutil_param_t *ssl_pp_param = NULL; + /* ssl passphrase */ + axis2_char_t *ssl_pp = NULL; + axutil_property_t *ssl_pp_property = NULL; + axutil_property_t *test_auth_property = NULL; + axis2_char_t *test_auth_property_value = NULL; + axis2_bool_t test_proxy_auth = AXIS2_FALSE; + axis2_bool_t test_http_auth = AXIS2_FALSE; + + /* http proxy authentication */ + axutil_property_t *proxy_auth_property = NULL; + axis2_char_t *proxy_auth_property_value = NULL; + axis2_bool_t force_proxy_auth = AXIS2_FALSE; + axis2_bool_t force_proxy_auth_with_head = AXIS2_FALSE; + axutil_property_t *http_auth_property = NULL; + axis2_char_t *http_auth_property_value = NULL; + axis2_bool_t force_http_auth = AXIS2_FALSE; + axis2_bool_t force_http_auth_with_head = AXIS2_FALSE; + axutil_property_t *content_type_property = NULL; + axutil_hash_t *content_type_hash = NULL; + axis2_char_t *content_type_value = NULL; + axutil_property_t *method = NULL; + axis2_char_t *method_value = NULL; + + /* handling REST requests */ + axis2_bool_t send_via_get = AXIS2_FALSE; + axis2_bool_t send_via_head = AXIS2_FALSE; + axis2_bool_t send_via_delete = AXIS2_FALSE; + axis2_bool_t send_via_put = AXIS2_FALSE; + axiom_node_t *data_out = NULL; + axiom_node_t *body_node = NULL; + axiom_soap_body_t *soap_body = NULL; + axis2_bool_t is_soap = AXIS2_TRUE; + axis2_bool_t add_keepalive_header = AXIS2_FALSE; + + /* http header property to get HTTP headers from msg_ctx and give + * it to http_sender */ + axutil_property_t *http_property = NULL; + axutil_array_list_t *array_list; + axis2_bool_t http_auth_header_added = AXIS2_FALSE; + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + axis2_transport_out_desc_t *trans_desc = NULL; + axutil_param_t *write_xml_declaration_param = NULL; + axutil_hash_t *transport_attrs = NULL; + axis2_bool_t write_xml_declaration = AXIS2_FALSE; + axutil_property_t *property = NULL;/* Property for holding http client */ + /*axis2_char_t *header_value = NULL;*/ + axis2_char_t *cookie_str = NULL; + axutil_hash_t *connection_map = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_http_sender_send"); + soap_body = axiom_soap_envelope_get_body(out, env); + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, out, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, str_url, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, soap_action, AXIS2_FAILURE); + + if(AXIS2_TRUE == axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + { + is_soap = AXIS2_FALSE; + } + else + { + is_soap = AXIS2_TRUE; + } + + url = axutil_url_parse_string(env, str_url); + + if(!is_soap) + { + if(soap_body) + { + body_node = axiom_soap_body_get_base_node(soap_body, env); + } + if(body_node) + { + data_out = axiom_node_get_first_element(body_node, env); + } + + method = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HTTP_METHOD); + if(method) + { + method_value = (axis2_char_t *)axutil_property_get_value(method, env); + } + + /* The default is POST */ + if(method_value && 0 == axutil_strcmp(method_value, AXIS2_HTTP_GET)) + { + send_via_get = AXIS2_TRUE; + } + else if(method_value && 0 == axutil_strcmp(method_value, AXIS2_HTTP_HEAD)) + { + send_via_head = AXIS2_TRUE; + } + else if(method_value && 0 == axutil_strcmp(method_value, AXIS2_HTTP_PUT)) + { + send_via_put = AXIS2_TRUE; + } + else if(method_value && 0 == axutil_strcmp(method_value, AXIS2_HTTP_DELETE)) + { + send_via_delete = AXIS2_TRUE; + } + } + + if(!url) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "url is null for string %s", str_url); + return AXIS2_FAILURE; + } + + /*if(sender->client) + { + axis2_http_client_free(sender->client, env); + sender->client = NULL; + }*/ + + /* This property may be set by the application client. This get the priority over the keep alive + * parameter set in the axix2.xml + */ + property = (axutil_property_t *) axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_HTTP_HEADER_CONNECTION_KEEPALIVE); + if(property) + { + axis2_char_t *keep_alive_value = NULL; + + keep_alive_value = axutil_property_get_value(property, env); + if(!axutil_strcmp(keep_alive_value, AXIS2_VALUE_FALSE)) + { + sender->keep_alive = AXIS2_FALSE; + } + } + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + } + + /* Because keep alive is not still supported at callback receiver we check + * for client side + */ + if(sender->keep_alive && !axis2_msg_ctx_get_server_side(msg_ctx, env)) + { + axutil_property_t *connection_map_property = NULL; + + connection_map_property = axis2_conf_ctx_get_property(conf_ctx, env, + AXIS2_HTTP_CONNECTION_MAP); + if(!connection_map_property) + { + connection_map = axis2_http_sender_connection_map_create(env, msg_ctx); + if(!connection_map) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + else + { + connection_map = axutil_property_get_value(connection_map_property, env); + if(connection_map) + { + sender->client = axis2_http_sender_connection_map_get(connection_map, env, msg_ctx); + } + } + if(!axutil_strcasecmp(sender->http_version, AXIS2_HTTP_HEADER_PROTOCOL_10)) + { + add_keepalive_header = AXIS2_TRUE; + } + } /* End if sender->keep_alive */ + if(!sender->client) + { + sender->client = axis2_http_client_create(env, url); + } + if(!sender->client) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "sender->client creation failed for url %s", url); + return AXIS2_FAILURE; + } + /* configure proxy settings if we have set so + */ + + axis2_http_sender_configure_proxy(sender, env, msg_ctx); + + if(conf) + { + trans_desc = axis2_conf_get_transport_out(conf, env, AXIS2_TRANSPORT_ENUM_HTTP); + } + + if(trans_desc) + { + /* get xml declaration details from axis2.xml */ + write_xml_declaration_param = axutil_param_container_get_param( + axis2_transport_out_desc_param_container(trans_desc, env), env, AXIS2_XML_DECLARATION); + } + + if(write_xml_declaration_param) + { + /* accessing attributes of the HTTP transport's , xml + * declaration element from axis2.xml*/ + + transport_attrs = axutil_param_get_attributes(write_xml_declaration_param, env); + if(transport_attrs) + { + axutil_generic_obj_t *obj = NULL; + axiom_attribute_t *write_xml_declaration_attr = NULL; + axis2_char_t *write_xml_declaration_attr_value = NULL; + + obj + = axutil_hash_get(transport_attrs, AXIS2_ADD_XML_DECLARATION, AXIS2_HASH_KEY_STRING); + if(obj) + { + write_xml_declaration_attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, + env); + } + + if(write_xml_declaration_attr) + { + write_xml_declaration_attr_value = axiom_attribute_get_value( + write_xml_declaration_attr, env); + } + + if(write_xml_declaration_attr_value && 0 == axutil_strcasecmp( + write_xml_declaration_attr_value, AXIS2_VALUE_TRUE)) + { + write_xml_declaration = AXIS2_TRUE; + } + } + } + + if(write_xml_declaration) + { + axiom_output_write_xml_version_encoding(sender->om_output, env); + } + + if(!send_via_get && !send_via_head && !send_via_delete) + { + /* processing POST and PUT methods */ + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "msg_ctx_id:%s", axis2_msg_ctx_get_msg_id(msg_ctx, + env)); + + doing_mtom = axis2_msg_ctx_get_doing_mtom(msg_ctx, env); + + if(!sender->om_output) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NULL_OM_OUTPUT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "%s", AXIS2_ERROR_GET_MESSAGE(env->error)); + return AXIS2_FAILURE; + } + + xml_writer = axiom_output_get_xml_writer(sender->om_output, env); + + char_set_enc_str = axis2_msg_ctx_get_charset_encoding(msg_ctx, env); + + if(!char_set_enc_str) + { + /* if there is no character encoding details available + * use default one. + * #define AXIS2_DEFAULT_CHAR_SET_ENCODING "UTF-8" + */ + char_set_enc = AXIS2_DEFAULT_CHAR_SET_ENCODING; + } + else + { + char_set_enc = axutil_string_get_buffer(char_set_enc_str, env); + } + + if(!send_via_put && is_soap) + { + /* HTTP POST case */ + /* dump property use to dump message without sending */ + dump_property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_DUMP_INPUT_MSG_TRUE); + if(dump_property) + { + axis2_char_t *dump_true = axutil_property_get_value(dump_property, env); + if(0 == axutil_strcmp(dump_true, AXIS2_VALUE_TRUE)) + { + axis2_http_client_set_dump_input_msg(sender->client, env, AXIS2_TRUE); + } + } + + axiom_output_set_do_optimize(sender->om_output, env, doing_mtom); + axiom_soap_envelope_serialize(out, env, sender->om_output, AXIS2_FALSE); + } + else if(is_soap) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Attempt to send SOAP message using HTTP PUT failed"); + return AXIS2_FAILURE; + } + else + { + if(!data_out) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "body node payload is NULL"); + return AXIS2_FAILURE; + } + axiom_node_serialize(data_out, env, sender->om_output); + } + + if(doing_mtom) + { + axutil_param_t *callback_name_param = NULL; + axis2_status_t mtom_status = AXIS2_FAILURE; + axutil_array_list_t *mime_parts = NULL; + axis2_char_t *mtom_sending_callback_name = NULL; + + /* Getting the sender callback name paramter if it is + * specified in the configuration file */ + + callback_name_param = axis2_msg_ctx_get_parameter(msg_ctx, env, + AXIS2_MTOM_SENDING_CALLBACK); + if(callback_name_param) + { + mtom_sending_callback_name = (axis2_char_t *)axutil_param_get_value( + callback_name_param, env); + if(mtom_sending_callback_name) + { + axis2_http_client_set_mtom_sending_callback_name(sender->client, env, + mtom_sending_callback_name); + } + } + + /* Here we put all the attachment related stuff in a array_list + After this method we have the message in parts */ + + mtom_status = axiom_output_flush(sender->om_output, env); + if(mtom_status == AXIS2_FAILURE) + { + return mtom_status; + } + /* HTTP client should distinguish an MTOM invocation because the way + of sending the message in MTOM case is different */ + axis2_http_client_set_doing_mtom(sender->client, env, doing_mtom); + + /* HTTP client will keep this mime_parts, which it will send in chunks at + th end */ + mime_parts = axiom_output_get_mime_parts(sender->om_output, env); + if(mime_parts) + { + axis2_http_client_set_mime_parts(sender->client, env, mime_parts); + } + } + else + { + buffer = axiom_xml_writer_get_xml(xml_writer, env); + } + + if(!(buffer || doing_mtom)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "NULL xml returned from xml writer"); + return AXIS2_FAILURE; + } + + if(!send_via_put) + { + /* HTTP POST */ + axis2_char_t *path_with_query = NULL; + + path_with_query = axutil_strcat(env, axutil_url_get_path(url, env), + axutil_url_get_query(url, env), NULL); + request_line = axis2_http_request_line_create(env, AXIS2_HTTP_POST, path_with_query, + sender->http_version); + AXIS2_FREE(env->allocator, path_with_query); + } + else + { + /* HTTP PUT */ + request_line = axis2_http_request_line_create(env, AXIS2_HTTP_PUT, axutil_url_get_path( + url, env), sender->http_version); + } + } + else + { + /* Processing HTTP GET, HEAD and DELETE */ + + axis2_char_t *request_params = NULL; + axis2_char_t *path = NULL; + + request_params = axis2_http_sender_get_param_string(sender, env, msg_ctx); + + if(request_params) + { + /* substituting AXIS2_Q_MARK for "?" */ + path = axutil_strcat(env, axutil_url_get_path(url, env), AXIS2_Q_MARK_STR, + request_params, NULL); + AXIS2_FREE(env->allocator, request_params); + request_params = NULL; + } + else + { + path = axutil_strdup(env, axutil_url_get_path(url, env)); + } + + if(send_via_get) + { + request_line = axis2_http_request_line_create(env, AXIS2_HTTP_GET, path, + sender->http_version); + } + else if(send_via_head) + { + request_line = axis2_http_request_line_create(env, AXIS2_HTTP_HEAD, path, + sender->http_version); + } + else if(send_via_delete) + { + request_line = axis2_http_request_line_create(env, AXIS2_HTTP_DELETE, path, + sender->http_version); + } + + if(path) + { + AXIS2_FREE(env->allocator, path); + path = NULL; + } + } + + request = axis2_http_simple_request_create(env, request_line, NULL, 0, NULL); + if(add_keepalive_header) + { + axis2_http_sender_util_add_header(env, request, AXIS2_HTTP_HEADER_CONNECTION, + AXIS2_HTTP_HEADER_CONNECTION_KEEPALIVE); + } + /** + * If there is a session related stuff handle it + */ + /*header_value = axis2_http_transport_utils_get_session(env, msg_ctx); + if(header_value) + { + axis2_http_sender_util_add_header(env, request, AXIS2_HTTP_HEADER_SET_COOKIE, header_value); + }*/ + + /** + * In the client side sender if a cookie is sent by server add it to the http header + */ + cookie_str = axis2_http_transport_utils_read_from_cookie_store(env, msg_ctx); + if(cookie_str) + { + axis2_http_sender_util_add_header(env, request, AXIS2_HTTP_HEADER_COOKIE, cookie_str); + } + + /* User-Agent:Axis2/C header */ + axis2_http_sender_util_add_header(env, request, AXIS2_HTTP_HEADER_USER_AGENT, AXIS2_USER_AGENT); + + http_property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_TRANSPORT_HEADER_PROPERTY); + if(http_property) + { + array_list = (axutil_array_list_t *)axutil_property_get_value(http_property, env); + axis2_http_sender_add_header_list(request, env, array_list); + } + + if(!send_via_get && !send_via_head && !send_via_put && !send_via_delete && AXIS2_TRUE + == axis2_msg_ctx_get_is_soap_11(msg_ctx, env)) + { + if(AXIS2_ESC_DOUBLE_QUOTE != *soap_action) + { + axis2_char_t *tmp_soap_action = NULL; + tmp_soap_action = AXIS2_MALLOC(env->allocator, (axutil_strlen(soap_action) + 5) + * sizeof(axis2_char_t)); + sprintf(tmp_soap_action, "\"%s\"", soap_action); + axis2_http_sender_util_add_header(env, request, AXIS2_HTTP_HEADER_SOAP_ACTION, + tmp_soap_action); + AXIS2_FREE(env->allocator, tmp_soap_action); + } + else + { + axis2_http_sender_util_add_header(env, request, AXIS2_HTTP_HEADER_SOAP_ACTION, + (const axis2_char_t *)soap_action); + } + } + else if(AXIS2_TRUE == axis2_msg_ctx_get_is_soap_11(msg_ctx, env)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Adding of SOAP Action Failed for REST request"); + + return AXIS2_FAILURE; + } + + if(!send_via_get && !send_via_head && !send_via_delete) + { + /* processing PUT and POST */ + buffer_size = axiom_xml_writer_get_xml_size(xml_writer, env); + + if(AXIS2_FALSE == sender->chunked) + { + axis2_char_t tmp_buf[10]; + if(!buffer) + { + buffer_size = output_stream_size; + } + + if(buffer_size) + { + sprintf(tmp_buf, "%d", buffer_size); + axis2_http_sender_util_add_header(env, request, AXIS2_HTTP_HEADER_CONTENT_LENGTH, + tmp_buf); + } + } + else + { + axis2_http_sender_util_add_header(env, request, AXIS2_HTTP_HEADER_TRANSFER_ENCODING, + AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED); + } + + if(!send_via_put && is_soap) + { + /* HTTP POST */ + if(doing_mtom) + { + content_type = (axis2_char_t *)axiom_output_get_content_type(sender-> om_output, + env); + if(AXIS2_TRUE != axis2_msg_ctx_get_is_soap_11(msg_ctx, env) && axutil_strcmp( + soap_action, "")) + { + /* handle SOAP action for SOAP 1.2 case */ + axis2_char_t *temp_content_type = NULL; + temp_content_type + = axutil_stracat(env, content_type, AXIS2_CONTENT_TYPE_ACTION); + content_type = temp_content_type; + temp_content_type = axutil_stracat(env, content_type, soap_action); + AXIS2_FREE(env->allocator, content_type); + content_type = temp_content_type; + temp_content_type = axutil_stracat(env, content_type, + AXIS2_ESC_DOUBLE_QUOTE_STR); + AXIS2_FREE(env->allocator, content_type); + content_type = temp_content_type; + } + else + { + content_type_deepl_copy = AXIS2_FALSE; + } + } + else if(AXIS2_TRUE == axis2_msg_ctx_get_is_soap_11(msg_ctx, env)) + { + /* SOAP 1.1 without MTOM */ + axis2_char_t *temp_content_type = NULL; + content_type = (axis2_char_t *)AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML; + content_type = axutil_stracat(env, content_type, AXIS2_CONTENT_TYPE_CHARSET); + temp_content_type = axutil_stracat(env, content_type, char_set_enc); + AXIS2_FREE(env->allocator, content_type); + content_type = temp_content_type; + } + else + { + /* SOAP 1.2 without MTOM */ + axis2_char_t *temp_content_type = NULL; + content_type = (axis2_char_t *)AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP; + content_type = axutil_stracat(env, content_type, AXIS2_CONTENT_TYPE_CHARSET); + temp_content_type = axutil_stracat(env, content_type, char_set_enc); + AXIS2_FREE(env->allocator, content_type); + content_type = temp_content_type; + if(axutil_strcmp(soap_action, "")) + { + temp_content_type + = axutil_stracat(env, content_type, AXIS2_CONTENT_TYPE_ACTION); + AXIS2_FREE(env->allocator, content_type); + content_type = temp_content_type; + temp_content_type = axutil_stracat(env, content_type, soap_action); + AXIS2_FREE(env->allocator, content_type); + content_type = temp_content_type; + temp_content_type = axutil_stracat(env, content_type, + AXIS2_ESC_DOUBLE_QUOTE_STR); + AXIS2_FREE(env->allocator, content_type); + content_type = temp_content_type; + } + } + } + else if(is_soap) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Attempt to send SOAP message using HTTP PUT failed"); + return AXIS2_FAILURE; + } + else + { + content_type_property = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_USER_DEFINED_HTTP_HEADER_CONTENT_TYPE); + + if(content_type_property) + { + content_type_hash = (axutil_hash_t *)axutil_property_get_value( + content_type_property, env); + if(content_type_hash) + { + content_type_value = (char *)axutil_hash_get(content_type_hash, + AXIS2_HTTP_HEADER_CONTENT_TYPE, AXIS2_HASH_KEY_STRING); + } + } + + if(content_type_value) + { + content_type = content_type_value; + } + else + { + content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML; + } + + content_type_deepl_copy = AXIS2_FALSE; + } + + axis2_http_sender_util_add_header(env, request, AXIS2_HTTP_HEADER_CONTENT_TYPE, + content_type); + + if(content_type_deepl_copy && content_type) + { + AXIS2_FREE(env->allocator, content_type); + content_type = NULL; + } + /* Finished Processing PUT and POST */ + } + + if(0 == axutil_strcasecmp(sender->http_version, AXIS2_HTTP_HEADER_PROTOCOL_11)) + { + /* HTTP 1.1 */ + axis2_char_t *header = NULL; + int host_len = 0; + host_len = axutil_strlen(axutil_url_get_host(url, env)); + header = AXIS2_MALLOC(env->allocator, host_len + 10 * sizeof(axis2_char_t)); + sprintf(header, "%s:%d", axutil_url_get_host(url, env), axutil_url_get_port(url, env)); + axis2_http_sender_util_add_header(env, request, AXIS2_HTTP_HEADER_HOST, header); + AXIS2_FREE(env->allocator, header); + header = NULL; + } + + /* If this is a normal invocation the buffer has the full SOAP message + which needs to be send. In the MTOM case instead of this buffer + it has the mime_parts array_list */ + + if(!doing_mtom) + { + axis2_http_simple_request_set_body_string(request, env, buffer, buffer_size); + } + + /* HTTPS request processing */ + axis2_http_sender_configure_server_cert(sender, env, msg_ctx); + + axis2_http_sender_configure_key_file(sender, env, msg_ctx); + + axis2_http_sender_get_timeout_values(sender, env, msg_ctx); + axis2_http_client_set_timeout(sender->client, env, sender->so_timeout); + + ssl_pp_property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_SSL_PASSPHRASE); + + if(ssl_pp_property) + { + ssl_pp = (axis2_char_t *)axutil_property_get_value(ssl_pp_property, env); + } + else + { + ssl_pp_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_SSL_PASSPHRASE); + + if(ssl_pp_param) + { + ssl_pp = axutil_param_get_value(ssl_pp_param, env); + } + } + + test_auth_property = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_TEST_PROXY_AUTH); + if(test_auth_property) + { + test_auth_property_value = (axis2_char_t *)axutil_property_get_value(test_auth_property, + env); + } + + if(test_auth_property_value && 0 == axutil_strcmp(test_auth_property_value, AXIS2_VALUE_TRUE)) + { + test_proxy_auth = AXIS2_TRUE; + } + + test_auth_property = NULL; + test_auth_property_value = NULL; + + test_auth_property = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_TEST_HTTP_AUTH); + if(test_auth_property) + { + test_auth_property_value = (axis2_char_t *)axutil_property_get_value(test_auth_property, + env); + } + + if(test_auth_property_value && 0 == axutil_strcmp(test_auth_property_value, AXIS2_VALUE_TRUE)) + { + test_http_auth = AXIS2_TRUE; + } + + if(!test_proxy_auth) + { + proxy_auth_property = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_FORCE_PROXY_AUTH); + } + if(proxy_auth_property) + { + proxy_auth_property_value = (axis2_char_t *)axutil_property_get_value(proxy_auth_property, + env); + } + + if(proxy_auth_property_value && 0 == axutil_strcmp(proxy_auth_property_value, AXIS2_VALUE_TRUE)) + { + force_proxy_auth = AXIS2_TRUE; + } + + proxy_auth_property = NULL; + proxy_auth_property_value = NULL; + + if(force_proxy_auth) + { + proxy_auth_property = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_PROXY_AUTH_TYPE); + } + + if(proxy_auth_property) + { + proxy_auth_property_value = (axis2_char_t *)axutil_property_get_value(proxy_auth_property, + env); + } + + if(proxy_auth_property_value && 0 == axutil_strcmp(proxy_auth_property_value, + AXIS2_PROXY_AUTH_TYPE_DIGEST)) + { + force_proxy_auth = AXIS2_FALSE; + force_proxy_auth_with_head = AXIS2_TRUE; + } + + if(!test_http_auth) + { + http_auth_property = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_FORCE_HTTP_AUTH); + } + + if(http_auth_property) + { + http_auth_property_value = (axis2_char_t *)axutil_property_get_value(http_auth_property, + env); + } + + if(http_auth_property_value && 0 == axutil_strcmp(http_auth_property_value, AXIS2_VALUE_TRUE)) + { + force_http_auth = AXIS2_TRUE; + } + + http_auth_property = NULL; + http_auth_property_value = NULL; + + if(force_http_auth) + { + http_auth_property = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_HTTP_AUTH_TYPE); + } + + if(http_auth_property) + { + http_auth_property_value = (axis2_char_t *)axutil_property_get_value(http_auth_property, + env); + } + + if(http_auth_property_value && 0 == axutil_strcmp(http_auth_property_value, + AXIS2_HTTP_AUTH_TYPE_DIGEST)) + { + force_http_auth = AXIS2_FALSE; + force_http_auth_with_head = AXIS2_TRUE; + } + + axis2_msg_ctx_set_auth_type(msg_ctx, env, NULL); + + if(force_proxy_auth || force_proxy_auth_with_head) + { + status_code = AXIS2_HTTP_RESPONSE_PROXY_AUTHENTICATION_REQUIRED_CODE_VAL; + } + else + { + /* NOT forcing proxy authentication */ + if(force_http_auth) + { + axis2_status_t auth_status; + auth_status = axis2_http_sender_configure_http_auth(sender, env, msg_ctx, request); + + if(auth_status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Error in setting HTTP Authentication header"); + } + http_auth_header_added = AXIS2_TRUE; + + status_code = axis2_http_client_send(sender->client, env, request, ssl_pp); + + status_code = axis2_http_client_recieve_header(sender->client, env); + } + + else if(force_http_auth_with_head) + { + axis2_http_request_line_t *head_request_line = NULL; + axis2_http_request_line_t *temp = NULL; + + temp = axis2_http_simple_request_get_request_line(request, env); + head_request_line = axis2_http_request_line_create(env, AXIS2_HTTP_HEAD, + axis2_http_request_line_get_uri(temp, env), + axis2_http_request_line_get_http_version(temp, env)); + axis2_http_simple_request_set_request_line(request, env, head_request_line); + + status_code = axis2_http_client_send(sender->client, env, request, ssl_pp); + + status_code = axis2_http_client_recieve_header(sender->client, env); + axis2_http_simple_request_set_request_line(request, env, temp); + axis2_http_request_line_free(head_request_line, env); + + if(status_code == AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL) + { + axis2_status_t auth_status; + auth_status = axis2_http_sender_configure_http_auth(sender, env, msg_ctx, request); + + if(auth_status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Error in setting HTTP Authentication\ + header"); + } + http_auth_header_added = AXIS2_TRUE; + } + + if(status_code != AXIS2_HTTP_RESPONSE_PROXY_AUTHENTICATION_REQUIRED_CODE_VAL) + { + + status_code = axis2_http_client_send(sender->client, env, request, ssl_pp); + + status_code = axis2_http_client_recieve_header(sender->client, env); + + if(status_code == AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL) + { + http_auth_header_added = AXIS2_FALSE; + force_http_auth_with_head = AXIS2_FALSE; + } + } + } + else + { + status_code = axis2_http_client_send(sender->client, env, request, ssl_pp); + + status_code = axis2_http_client_recieve_header(sender->client, env); + } + } + + if(AXIS2_HTTP_RESPONSE_PROXY_AUTHENTICATION_REQUIRED_CODE_VAL == status_code + && !test_proxy_auth) + { + if(force_proxy_auth_with_head) + { + axis2_http_request_line_t *head_request_line = NULL; + axis2_http_request_line_t *temp = NULL; + + temp = axis2_http_simple_request_get_request_line(request, env); + head_request_line = axis2_http_request_line_create(env, AXIS2_HTTP_HEAD, + axis2_http_request_line_get_uri(temp, env), + axis2_http_request_line_get_http_version(temp, env)); + axis2_http_simple_request_set_request_line(request, env, head_request_line); + + status_code = axis2_http_client_send(sender->client, env, request, ssl_pp); + + status_code = axis2_http_client_recieve_header(sender->client, env); + axis2_http_simple_request_set_request_line(request, env, temp); + axis2_http_request_line_free(head_request_line, env); + + if(status_code == AXIS2_HTTP_RESPONSE_PROXY_AUTHENTICATION_REQUIRED_CODE_VAL) + { + axis2_status_t auth_status; + auth_status = axis2_http_sender_configure_proxy_auth(sender, env, msg_ctx, request); + + if(auth_status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Error in setting Proxy Authentication\ + header"); + } + + if((force_http_auth_with_head || force_http_auth) && !http_auth_header_added) + { + status_code = AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL; + } + else + { + status_code = axis2_http_client_send(sender->client, env, request, ssl_pp); + + status_code = axis2_http_client_recieve_header(sender->client, env); + } + } + else if(status_code != AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL) + { + + status_code = axis2_http_client_send(sender->client, env, request, ssl_pp); + + status_code = axis2_http_client_recieve_header(sender->client, env); + } + + /* Proxies have no idea about HTTP Methods therefore, if + * it fails no need to re-check */ + if(AXIS2_HTTP_RESPONSE_PROXY_AUTHENTICATION_REQUIRED_CODE_VAL == status_code) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Proxy Authentication failed"); + axis2_msg_ctx_set_auth_failed(msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_required_auth_is_http(msg_ctx, env, AXIS2_FALSE); + } + } + else + { + + /* not forcing proxy auth with head */ + axis2_status_t auth_status; + auth_status = axis2_http_sender_configure_proxy_auth(sender, env, msg_ctx, request); + + if(auth_status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Error in setting Proxy Authentication \ +header"); + } + + if((force_http_auth_with_head || force_http_auth) && !http_auth_header_added) + { + status_code = AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL; + } + else + { + status_code = axis2_http_client_send(sender->client, env, request, ssl_pp); + + status_code = axis2_http_client_recieve_header(sender->client, env); + + if(AXIS2_HTTP_RESPONSE_PROXY_AUTHENTICATION_REQUIRED_CODE_VAL == status_code) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Proxy Authentication failed"); + axis2_msg_ctx_set_auth_failed(msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_required_auth_is_http(msg_ctx, env, AXIS2_FALSE); + } + } + } + } + else if(AXIS2_HTTP_RESPONSE_PROXY_AUTHENTICATION_REQUIRED_CODE_VAL == status_code) + { + axis2_msg_ctx_set_auth_failed(msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_required_auth_is_http(msg_ctx, env, AXIS2_FALSE); + axis2_http_sender_set_proxy_auth_type(sender, env, msg_ctx, request); + } + + if(AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL == status_code && !test_http_auth) + { + if(!http_auth_header_added) + { + if(force_proxy_auth_with_head) + { + axis2_http_request_line_t *head_request_line = NULL; + axis2_http_request_line_t *temp = NULL; + + temp = axis2_http_simple_request_get_request_line(request, env); + head_request_line = axis2_http_request_line_create(env, AXIS2_HTTP_HEAD, + axis2_http_request_line_get_uri(temp, env), + axis2_http_request_line_get_http_version(temp, env)); + axis2_http_simple_request_set_request_line(request, env, head_request_line); + + status_code = axis2_http_client_send(sender->client, env, request, ssl_pp); + + status_code = axis2_http_client_recieve_header(sender->client, env); + axis2_http_simple_request_set_request_line(request, env, temp); + axis2_http_request_line_free(head_request_line, env); + + if(status_code == AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL) + { + axis2_status_t auth_status; + auth_status = axis2_http_sender_configure_http_auth(sender, env, msg_ctx, + request); + + if(auth_status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Error in setting HTTP Authentication \ +header"); + } + + status_code = axis2_http_client_send(sender->client, env, request, ssl_pp); + + status_code = axis2_http_client_recieve_header(sender->client, env); + if(status_code == AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL) + { + axis2_status_t auth_status; + auth_status = axis2_http_sender_configure_http_auth(sender, env, msg_ctx, + request); + + if(auth_status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Error in setting HTTP \ +Authentication header"); + } + + status_code = axis2_http_client_send(sender->client, env, request, ssl_pp); + + status_code = axis2_http_client_recieve_header(sender->client, env); + } + + } + } + else + { + axis2_status_t auth_status; + auth_status = axis2_http_sender_configure_http_auth(sender, env, msg_ctx, request); + + if(auth_status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Error in setting HTTP Authentication \ +header"); + } + + status_code = axis2_http_client_send(sender->client, env, request, ssl_pp); + + status_code = axis2_http_client_recieve_header(sender->client, env); + } + + if(AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL == status_code) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "HTTP Authentication failed"); + axis2_msg_ctx_set_auth_failed(msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_required_auth_is_http(msg_ctx, env, AXIS2_TRUE); + } + + if(AXIS2_HTTP_RESPONSE_PROXY_AUTHENTICATION_REQUIRED_CODE_VAL == status_code) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Proxy Authentication failed"); + axis2_msg_ctx_set_auth_failed(msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_required_auth_is_http(msg_ctx, env, AXIS2_FALSE); + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "HTTP Authentication failed"); + axis2_msg_ctx_set_auth_failed(msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_required_auth_is_http(msg_ctx, env, AXIS2_TRUE); + } + } + else if(AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL == status_code) + { + axis2_msg_ctx_set_auth_failed(msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_required_auth_is_http(msg_ctx, env, AXIS2_TRUE); + axis2_http_sender_set_http_auth_type(sender, env, msg_ctx, request); + } + + axis2_http_simple_request_free(request, env); + request = NULL; + + if(output_stream) + { + AXIS2_FREE(env->allocator, output_stream); + output_stream = NULL; + } + + if(status_code < 0) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "status_code < 0"); + return AXIS2_FAILURE; + } + + axis2_msg_ctx_set_status_code(msg_ctx, env, status_code); + + /* Start processing response */ + response = axis2_http_client_get_response(sender->client, env); + if(!is_soap) + { + return axis2_http_sender_process_response(sender, env, msg_ctx, response); + } + else if(AXIS2_HTTP_RESPONSE_OK_CODE_VAL == status_code || AXIS2_HTTP_RESPONSE_ACK_CODE_VAL + == status_code) + { + return axis2_http_sender_process_response(sender, env, msg_ctx, response); + } + else if(AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_VAL == status_code) + { + axis2_http_header_t *tmp_header = NULL; + axis2_char_t *tmp_header_val = NULL; + axis2_op_t *op = NULL; + + op = axis2_msg_ctx_get_op(msg_ctx, env); + if(op) + { + const axis2_char_t *mep = axis2_op_get_msg_exchange_pattern(op, env); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR, AXIS2_FAILURE); + /* handle one way case */ + + if(!axutil_strcmp(mep, AXIS2_MEP_URI_OUT_ONLY)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "mep is AXIS2_MEP_URI_OUT_ONLY"); + return AXIS2_FAILURE; + } + } + + /* set an error to indicate error code status */ + tmp_header = axis2_http_simple_response_get_first_header(response, env, + AXIS2_HTTP_HEADER_CONTENT_TYPE); + if(tmp_header) + { + tmp_header_val = axis2_http_header_get_value(tmp_header, env); + } + + if(tmp_header_val && (axutil_strstr(tmp_header_val, AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP) + || axutil_strstr(tmp_header_val, AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML))) + { + return axis2_http_sender_process_response(sender, env, msg_ctx, response); + } + } + + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR, AXIS2_FAILURE); + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_http_sender_send"); + return AXIS2_FAILURE; +} +#endif + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_sender_set_chunked( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_bool_t chunked) +{ + sender->chunked = chunked; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_sender_set_om_output( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axiom_output_t * om_output) +{ + sender->om_output = om_output; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_sender_get_header_info( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_response_t * response) +{ + axutil_array_list_t *headers = NULL; + axis2_char_t *charset = NULL; + int i = 0; + axis2_bool_t response_chunked = AXIS2_FALSE; + int *content_length = NULL; + axutil_property_t *property = NULL; + axis2_char_t *content_type = NULL; + int status_code = 0; + axis2_bool_t set_cookie_header_present = AXIS2_FALSE; + axis2_bool_t connection_header_present = AXIS2_FALSE; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, response, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, sender, AXIS2_FAILURE); + + headers = axis2_http_simple_response_get_headers(response, env); + if(headers == NULL) + { + return AXIS2_SUCCESS; + } + + for(i = 0; i < axutil_array_list_size(headers, env); i++) + { + axis2_http_header_t *header = axutil_array_list_get(headers, env, i); + axis2_char_t *name = axis2_http_header_get_name((axis2_http_header_t *)header, env); + if(name) + { + if(0 == axutil_strcasecmp(name, AXIS2_HTTP_HEADER_TRANSFER_ENCODING) && 0 + == axutil_strcasecmp(axis2_http_header_get_value(header, env), + AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED)) + { + axis2_char_t *transfer_encoding = NULL; + transfer_encoding = axutil_strdup(env, AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED); + response_chunked = AXIS2_TRUE; + axis2_msg_ctx_set_transfer_encoding(msg_ctx, env, transfer_encoding); + + } + if(0 != axutil_strcasecmp(name, AXIS2_HTTP_HEADER_CONTENT_TYPE)) + { + axis2_char_t *tmp_charset = NULL; + axis2_char_t *content_type = axis2_http_header_get_value(header, env); + tmp_charset = strstr(content_type, AXIS2_HTTP_CHAR_SET_ENCODING); + if(charset) + { + charset = axutil_strdup(env, tmp_charset); + break; + } + } + if(!axutil_strcasecmp(name, AXIS2_HTTP_HEADER_SET_COOKIE)) + { + axis2_char_t *cookie_str = axis2_http_header_get_value(header, env); + if(cookie_str) + { + axis2_http_transport_utils_store_cookie(env, msg_ctx, cookie_str); + } + set_cookie_header_present = AXIS2_TRUE; + } + + if(!axutil_strcasecmp(name, AXIS2_HTTP_HEADER_CONNECTION)) + { + axis2_char_t *connection_header_value = NULL; + axutil_property_t *connection_map_property = NULL; + axutil_hash_t *connection_map = NULL; + axis2_conf_ctx_t *conf_ctx = NULL; + connection_header_present = AXIS2_TRUE; + connection_header_value = axis2_http_header_get_value(header, env); + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + connection_map_property = axis2_conf_ctx_get_property(conf_ctx, env, + AXIS2_HTTP_CONNECTION_MAP); + + if(connection_map_property) + { + connection_map = axutil_property_get_value(connection_map_property, env); + } + /** + * In HTTP1.1 if connection header has value close then drop the connection + */ + if(connection_header_value && !axutil_strcasecmp(connection_header_value, "close")) + { + if(connection_map) + { + axis2_http_sender_connection_map_remove(connection_map, env, + msg_ctx, sender->client); + } + } + else if(connection_header_value && !axutil_strcasecmp(connection_header_value, + "Keep-Alive")) + { + if(connection_map) + { + axis2_http_sender_connection_map_add(connection_map, env, + msg_ctx, sender->client); + } + } + } /* End if name is connection */ + } /* End if name of the header present */ + } + if(!set_cookie_header_present) /* We need to remove any cookie set previously for this endpoint */ + { + axis2_http_transport_utils_store_cookie(env, msg_ctx, NULL); + } + if(!connection_header_present) /* No connection header present */ + { + /** In HTTP1.0 if there is no keep alive header sent back from server we drop the + * connection + */ + axutil_property_t *connection_map_property = NULL; + axutil_hash_t *connection_map = NULL; + axis2_conf_ctx_t *conf_ctx = NULL; + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + + connection_map_property = axis2_conf_ctx_get_property(conf_ctx, env, + AXIS2_HTTP_CONNECTION_MAP); + if(connection_map_property) + { + connection_map = axutil_property_get_value(connection_map_property, env); + } /* End if connectin_map_property */ + if(!axutil_strcasecmp(sender->http_version, AXIS2_HTTP_HEADER_PROTOCOL_10)) + { + if(connection_map) + { + axis2_http_sender_connection_map_remove(connection_map, env, msg_ctx, + sender->client); + } + } /* End if http version 1.0 */ + else if(!axutil_strcasecmp(sender->http_version, AXIS2_HTTP_HEADER_PROTOCOL_11)) + { + /** + * If keep alive enabled we store the http client for reuse. + */ + if(connection_map) + { + axis2_http_sender_connection_map_add(connection_map, env, msg_ctx, + sender->client); + } + } /* End if http version 1.1 */ + } /* End if !connection_header_present */ + + content_type = (axis2_char_t *)axis2_http_simple_response_get_content_type(response, env); + if(content_type) + { + if(strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_MULTIPART_RELATED) && strstr(content_type, + AXIS2_HTTP_HEADER_ACCEPT_XOP_XML)) + { + axis2_ctx_t *axis_ctx = axis2_op_ctx_get_base(axis2_msg_ctx_get_op_ctx(msg_ctx, env), + env); + property = axutil_property_create(env); + axutil_property_set_scope(property, env, AXIS2_SCOPE_REQUEST); + axutil_property_set_value(property, env, axutil_strdup(env, content_type)); + axis2_ctx_set_property(axis_ctx, env, MTOM_RECIVED_CONTENT_TYPE, property); + } + } + + if(charset) + { + axis2_ctx_t *axis_ctx = axis2_op_ctx_get_base(axis2_msg_ctx_get_op_ctx(msg_ctx, env), env); + if(axis_ctx) + { + property = axutil_property_create(env); + axutil_property_set_scope(property, env, AXIS2_SCOPE_REQUEST); + axutil_property_set_value(property, env, charset); + axis2_ctx_set_property(axis_ctx, env, AXIS2_CHARACTER_SET_ENCODING, property); + } + } + + if(AXIS2_FALSE == response_chunked) + { + int tmp_len = 0; + content_length = AXIS2_MALLOC(env->allocator, sizeof(int)); + if(!content_length) + { + return AXIS2_FAILURE; + } + tmp_len = axis2_http_simple_response_get_content_length(response, env); + memcpy(content_length, &tmp_len, sizeof(int)); + property = axutil_property_create(env); + axutil_property_set_scope(property, env, AXIS2_SCOPE_REQUEST); + axutil_property_set_value(property, env, content_length); + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_HTTP_HEADER_CONTENT_LENGTH, property); + } + + status_code = axis2_http_simple_response_get_status_code(response, env); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_sender_process_response( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_response_t * response) +{ + axutil_stream_t *in_stream = NULL; + axutil_property_t *property = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_http_sender_process_response"); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, response, AXIS2_FAILURE); + + in_stream = axis2_http_simple_response_get_body(response, env); + if(!in_stream) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NULL_STREAM_IN_RESPONSE_BODY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + axis2_http_sender_get_header_info(sender, env, msg_ctx, response); + axis2_msg_ctx_set_http_output_headers(msg_ctx, env, axis2_http_simple_response_extract_headers( + response, env)); + property = axutil_property_create(env); + axutil_property_set_scope(property, env, AXIS2_SCOPE_REQUEST); + axutil_property_set_free_func(property, env, axutil_stream_free_void_arg); + axutil_property_set_value(property, env, in_stream); + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_TRANSPORT_IN, property); + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_http_sender_process_response"); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_sender_get_timeout_values( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_char_t *so_str = NULL; + axis2_char_t *connection_str = NULL; + axutil_param_t *tmp_param = NULL; + axutil_property_t *property = NULL; + + AXIS2_PARAM_CHECK(env->error, sender, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + /* check if timeout has been set by user using options + * with axis2_options_set_timeout_in_milli_seconds + */ + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HTTP_CONNECTION_TIMEOUT); + if(property) + { + axis2_char_t *value = axutil_property_get_value(property, env); + if(value) + { + sender->so_timeout = AXIS2_ATOI(value); + return AXIS2_SUCCESS; + } + } + + tmp_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_HTTP_SO_TIMEOUT); + + if(tmp_param) + { + so_str = (axis2_char_t *)axutil_param_get_value(tmp_param, env); + if(so_str) + { + sender->so_timeout = AXIS2_ATOI(so_str); + return AXIS2_SUCCESS; + } + } + + tmp_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_HTTP_CONNECTION_TIMEOUT); + if(tmp_param) + { + connection_str = (axis2_char_t *)axutil_param_get_value(tmp_param, env); + if(connection_str) + { + sender->so_timeout = AXIS2_ATOI(connection_str); + return AXIS2_SUCCESS; + } + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_sender_set_http_version( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_char_t * version) +{ + sender->http_version = axutil_strdup(env, version); + if(!sender->http_version) + { + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +#ifndef AXIS2_LIBCURL_ENABLED +static void +axis2_http_sender_add_header_list( + axis2_http_simple_request_t * request, + const axutil_env_t * env, + axutil_array_list_t * array_list) +{ + int ii = 0; + int kk = 0; + axis2_http_header_t *http_header = NULL; + ii = axutil_array_list_size(array_list, env); + for(; kk < ii; kk++) + { + http_header = (axis2_http_header_t *)axutil_array_list_get(array_list, env, kk); + axis2_http_simple_request_add_header(request, env, http_header); + } +} + +static axis2_status_t +axis2_http_sender_configure_proxy( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + axis2_transport_out_desc_t *trans_desc = NULL; + axutil_param_t *proxy_param = NULL; + axutil_hash_t *transport_attrs = NULL; + axis2_char_t *proxy_host = NULL; + axis2_char_t *proxy_port = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(!conf_ctx) + { + return AXIS2_FAILURE; + } + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(!conf) + { + return AXIS2_FAILURE; + } + + trans_desc = axis2_conf_get_transport_out(conf, env, AXIS2_TRANSPORT_ENUM_HTTP); + if(!trans_desc) + { + return AXIS2_FAILURE; + } + + proxy_param = axutil_param_container_get_param(axis2_transport_out_desc_param_container( + trans_desc, env), env, AXIS2_HTTP_PROXY_API); + if(!proxy_param) + { + proxy_param = axutil_param_container_get_param(axis2_transport_out_desc_param_container( + trans_desc, env), env, AXIS2_HTTP_PROXY); + } + if(proxy_param) + { + transport_attrs = axutil_param_get_attributes(proxy_param, env); + if(transport_attrs) + { + axutil_generic_obj_t *obj = NULL; + axiom_attribute_t *host_attr = NULL; + axiom_attribute_t *port_attr = NULL; + + obj = axutil_hash_get(transport_attrs, AXIS2_HTTP_PROXY_HOST, AXIS2_HASH_KEY_STRING); + if(!obj) + { + return AXIS2_FAILURE; + } + host_attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, env); + if(!host_attr) + { + return AXIS2_FAILURE; + } + proxy_host = axiom_attribute_get_value(host_attr, env); + if(!proxy_host) + { + return AXIS2_FAILURE; + } + /* Now we get the port */ + obj = NULL; + + obj = axutil_hash_get(transport_attrs, AXIS2_HTTP_PROXY_PORT, AXIS2_HASH_KEY_STRING); + port_attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, env); + if(!port_attr) + { + return AXIS2_FAILURE; + } + proxy_port = axiom_attribute_get_value(port_attr, env); + if(!proxy_port) + { + return AXIS2_FAILURE; + } + } + } + if(proxy_port && proxy_host) + { + axis2_http_client_set_proxy(sender->client, env, proxy_host, AXIS2_ATOI(proxy_port)); + } + return AXIS2_SUCCESS; +} +#endif + +#ifndef AXIS2_LIBCURL_ENABLED +static axis2_status_t +axis2_http_sender_configure_server_cert( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axutil_property_t *server_cert_property = NULL; + axutil_param_t *server_cert_param = NULL; + axis2_char_t *server_cert = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + server_cert_property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_SSL_SERVER_CERT); + if(server_cert_property) + { + server_cert = (axis2_char_t *)axutil_property_get_value(server_cert_property, env); + } + else + { + server_cert_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_SSL_SERVER_CERT); + if(server_cert_param) + { + server_cert = (axis2_char_t *)axutil_param_get_value(server_cert_param, env); + } + } + + if(server_cert) + { + status = axis2_http_client_set_server_cert(sender->client, env, server_cert); + } + + return status; +} +#endif + +#ifndef AXIS2_LIBCURL_ENABLED +static axis2_status_t +axis2_http_sender_configure_key_file( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axutil_property_t *key_file_property = NULL; + axutil_param_t *key_file_param = NULL; + axis2_char_t *key_file = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + key_file_property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_SSL_KEY_FILE); + if(key_file_property) + { + key_file = (axis2_char_t *)axutil_property_get_value(key_file_property, env); + } + else + { + key_file_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_SSL_KEY_FILE); + if(key_file_param) + { + key_file = (axis2_char_t *)axutil_param_get_value(key_file_param, env); + } + } + + if(key_file) + { + status = axis2_http_client_set_key_file(sender->client, env, key_file); + } + + return status; +} +#endif + +#ifndef AXIS2_LIBCURL_ENABLED +static axis2_status_t +axis2_http_sender_configure_http_basic_auth( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request) +{ + axutil_property_t *http_auth_un = NULL; + axutil_property_t *http_auth_pw = NULL; + axis2_char_t *uname = NULL; + axis2_char_t *passwd = NULL; + + http_auth_un = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HTTP_AUTH_UNAME); + http_auth_pw = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HTTP_AUTH_PASSWD); + if(http_auth_un && http_auth_pw) + { + uname = (axis2_char_t *)axutil_property_get_value(http_auth_un, env); + passwd = (axis2_char_t *)axutil_property_get_value(http_auth_pw, env); + } + if(!uname || !passwd) + { + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + axis2_transport_out_desc_t *trans_desc = NULL; + axutil_param_t *http_auth_param = NULL; + axutil_hash_t *transport_attrs = NULL; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + trans_desc = axis2_conf_get_transport_out(conf, env, AXIS2_TRANSPORT_ENUM_HTTP); + } + } + if(trans_desc) + { + http_auth_param = axutil_param_container_get_param( + axis2_transport_out_desc_param_container(trans_desc, env), env, + AXIS2_HTTP_AUTHENTICATION); + if(http_auth_param) + { + transport_attrs = axutil_param_get_attributes(http_auth_param, env); + if(transport_attrs) + { + axutil_generic_obj_t *obj = NULL; + axiom_attribute_t *username_attr = NULL; + axiom_attribute_t *password_attr = NULL; + + obj = axutil_hash_get(transport_attrs, AXIS2_HTTP_AUTHENTICATION_USERNAME, + AXIS2_HASH_KEY_STRING); + if(obj) + { + username_attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, env); + } + if(username_attr) + { + uname = axiom_attribute_get_value(username_attr, env); + } + obj = NULL; + + obj = axutil_hash_get(transport_attrs, AXIS2_HTTP_AUTHENTICATION_PASSWORD, + AXIS2_HASH_KEY_STRING); + if(obj) + { + password_attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, env); + } + if(password_attr) + { + passwd = axiom_attribute_get_value(password_attr, env); + } + } + } + } + } + if(uname && passwd) + { + int elen; + int plen = axutil_strlen(uname) + axutil_strlen(passwd) + 1; + axis2_char_t *to_encode = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * plen + 1)); + axis2_char_t *encoded = NULL; + axis2_char_t *auth_str = NULL; + sprintf(to_encode, "%s:%s", uname, passwd); + elen = axutil_base64_encode_len(plen); + encoded = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * elen)); + auth_str + = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (elen + 6))); + axutil_base64_encode(encoded, to_encode, plen); + sprintf(auth_str, "%s %s", AXIS2_HTTP_AUTH_TYPE_BASIC, encoded); + axis2_http_sender_util_add_header(env, request, AXIS2_HTTP_HEADER_AUTHORIZATION, auth_str); + + AXIS2_FREE(env->allocator, to_encode); + to_encode = NULL; + AXIS2_FREE(env->allocator, encoded); + encoded = NULL; + AXIS2_FREE(env->allocator, auth_str); + auth_str = NULL; + + return AXIS2_SUCCESS; + } + + return AXIS2_FAILURE; + +} + +static axis2_status_t +axis2_http_sender_configure_proxy_basic_auth( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request) +{ + axutil_property_t *proxy_auth_un = NULL; + axutil_property_t *proxy_auth_pw = NULL; + axis2_char_t *uname = NULL; + axis2_char_t *passwd = NULL; + + proxy_auth_un = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_PROXY_AUTH_UNAME); + proxy_auth_pw = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_PROXY_AUTH_PASSWD); + + if(proxy_auth_un && proxy_auth_pw) + { + uname = (axis2_char_t *)axutil_property_get_value(proxy_auth_un, env); + passwd = (axis2_char_t *)axutil_property_get_value(proxy_auth_pw, env); + } + if(!uname || !passwd) + { + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + axis2_transport_out_desc_t *trans_desc = NULL; + axutil_param_t *proxy_param = NULL; + axutil_hash_t *transport_attrs = NULL; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + trans_desc = axis2_conf_get_transport_out(conf, env, AXIS2_TRANSPORT_ENUM_HTTP); + } + } + if(trans_desc) + { + proxy_param = axutil_param_container_get_param( + axis2_transport_out_desc_param_container(trans_desc, env), env, + AXIS2_HTTP_PROXY_API); + if(!proxy_param) + { + proxy_param = axutil_param_container_get_param( + axis2_transport_out_desc_param_container(trans_desc, env), env, + AXIS2_HTTP_PROXY); + } + if(proxy_param) + { + transport_attrs = axutil_param_get_attributes(proxy_param, env); + if(transport_attrs) + { + axutil_generic_obj_t *obj = NULL; + axiom_attribute_t *username_attr = NULL; + axiom_attribute_t *password_attr = NULL; + + obj = axutil_hash_get(transport_attrs, AXIS2_HTTP_PROXY_USERNAME, + AXIS2_HASH_KEY_STRING); + if(obj) + { + username_attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, env); + } + if(username_attr) + { + uname = axiom_attribute_get_value(username_attr, env); + } + obj = NULL; + + obj = axutil_hash_get(transport_attrs, AXIS2_HTTP_PROXY_PASSWORD, + AXIS2_HASH_KEY_STRING); + if(obj) + { + password_attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, env); + } + if(password_attr) + { + passwd = axiom_attribute_get_value(password_attr, env); + } + } + } + } + } + if(uname && passwd) + { + int elen; + int plen = axutil_strlen(uname) + axutil_strlen(passwd) + 1; + axis2_char_t *to_encode = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * plen + 1)); + axis2_char_t *encoded = NULL; + axis2_char_t *auth_str = NULL; + sprintf(to_encode, "%s:%s", uname, passwd); + elen = axutil_base64_encode_len(plen); + encoded = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * elen)); + auth_str + = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (elen + 6))); + axutil_base64_encode(encoded, to_encode, plen); + sprintf(auth_str, "%s %s", AXIS2_PROXY_AUTH_TYPE_BASIC, encoded); + axis2_http_sender_util_add_header(env, request, AXIS2_HTTP_HEADER_PROXY_AUTHORIZATION, + auth_str); + + AXIS2_FREE(env->allocator, to_encode); + to_encode = NULL; + AXIS2_FREE(env->allocator, encoded); + encoded = NULL; + AXIS2_FREE(env->allocator, auth_str); + auth_str = NULL; + + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} +#endif + +#ifndef AXIS2_LIBCURL_ENABLED +static axis2_status_t +axis2_http_sender_configure_http_digest_auth( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request, + axis2_char_t * header_data) +{ + axutil_property_t *http_auth_un = NULL; + axutil_property_t *http_auth_pw = NULL; + axis2_char_t *uname = NULL; + axis2_char_t *passwd = NULL; + + if(!header_data || !*header_data) + return AXIS2_FAILURE; + + http_auth_un = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HTTP_AUTH_UNAME); + http_auth_pw = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HTTP_AUTH_PASSWD); + if(http_auth_un && http_auth_pw) + { + uname = (axis2_char_t *)axutil_property_get_value(http_auth_un, env); + passwd = (axis2_char_t *)axutil_property_get_value(http_auth_pw, env); + } + if(!uname || !passwd) + { + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + axis2_transport_out_desc_t *trans_desc = NULL; + axutil_param_t *http_auth_param = NULL; + axutil_hash_t *transport_attrs = NULL; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + trans_desc = axis2_conf_get_transport_out(conf, env, AXIS2_TRANSPORT_ENUM_HTTP); + } + } + if(trans_desc) + { + http_auth_param = axutil_param_container_get_param( + axis2_transport_out_desc_param_container(trans_desc, env), env, + AXIS2_HTTP_AUTHENTICATION); + if(http_auth_param) + { + transport_attrs = axutil_param_get_attributes(http_auth_param, env); + if(transport_attrs) + { + axutil_generic_obj_t *obj = NULL; + axiom_attribute_t *username_attr = NULL; + axiom_attribute_t *password_attr = NULL; + + obj = axutil_hash_get(transport_attrs, AXIS2_HTTP_AUTHENTICATION_USERNAME, + AXIS2_HASH_KEY_STRING); + if(obj) + { + username_attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, env); + } + if(username_attr) + { + uname = axiom_attribute_get_value(username_attr, env); + } + obj = NULL; + + obj = axutil_hash_get(transport_attrs, AXIS2_HTTP_AUTHENTICATION_PASSWORD, + AXIS2_HASH_KEY_STRING); + if(obj) + { + password_attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, env); + } + if(password_attr) + { + passwd = axiom_attribute_get_value(password_attr, env); + } + } + } + } + } + if(uname && passwd) + { + int elen = 0; /* length of header content */ + int print_const = 5; /* constant accounts for printing the + quoatation marks, comma, and space */ + int response_length = 32; + axis2_char_t *temp = NULL; + axis2_char_t *alloc_temp = NULL; + axis2_char_t *algo = AXIS2_HTTP_AUTHORIZATION_REQUEST_ALGORITHM_MD5; + axis2_char_t *realm = NULL; + axis2_char_t *qop = NULL; + axis2_char_t *nonce = NULL; + axis2_char_t *opaque = NULL; + axis2_char_t *cnonce = NULL; + axis2_char_t *nc = NULL; + axutil_digest_hash_hex_t h_a1; + axutil_digest_hash_hex_t h_a2; + axutil_digest_hash_hex_t response; + axis2_char_t *auth_str = NULL; + axutil_property_t *method = NULL; + axis2_char_t *method_value = NULL; + axis2_char_t *url = NULL; + + url = axis2_http_request_line_get_uri(axis2_http_simple_request_get_request_line(request, + env), env); + + if(!url) + { + return AXIS2_FAILURE; + } + + elen += print_const + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_URI) + + axutil_strlen(url); + + elen += print_const + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_USERNAME) + + axutil_strlen(uname); + + method = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HTTP_METHOD); + if(method) + { + method_value = (axis2_char_t *)axutil_property_get_value(method, env); + } + else + { + method_value = AXIS2_HTTP_POST; + } + + temp = axutil_strstr(header_data, AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_REALM); + if(temp) + { + realm = axutil_strchr(temp, AXIS2_ESC_DOUBLE_QUOTE); + if(realm) + { + realm++; + temp = axutil_strchr(realm, AXIS2_ESC_DOUBLE_QUOTE); + alloc_temp = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) + * (temp - realm + 1))); + strncpy(alloc_temp, realm, (temp - realm)); + if(alloc_temp) + alloc_temp[temp - realm] = AXIS2_ESC_NULL; + realm = alloc_temp; + alloc_temp = NULL; + elen += print_const + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_REALM) + + axutil_strlen(realm); + } + else + { + return AXIS2_FAILURE; + } + } + + temp = axutil_strstr(header_data, AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_QOP); + if(temp) + { + qop = axutil_strchr(temp, AXIS2_ESC_DOUBLE_QUOTE); + if(qop) + { + qop++; + temp = axutil_strchr(qop, AXIS2_ESC_DOUBLE_QUOTE); + alloc_temp = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) + * (temp - qop + 1))); + strncpy(alloc_temp, qop, (temp - qop)); + if(alloc_temp) + alloc_temp[temp - qop] = AXIS2_ESC_NULL; + qop = alloc_temp; + alloc_temp = NULL; + } + } + + temp = axutil_strstr(header_data, AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE); + if(temp) + { + nonce = axutil_strchr(temp, AXIS2_ESC_DOUBLE_QUOTE); + if(nonce) + { + nonce++; + temp = axutil_strchr(nonce, AXIS2_ESC_DOUBLE_QUOTE); + alloc_temp = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) + * (temp - nonce + 1))); + strncpy(alloc_temp, nonce, (temp - nonce)); + if(alloc_temp) + alloc_temp[temp - nonce] = AXIS2_ESC_NULL; + nonce = alloc_temp; + alloc_temp = NULL; + + elen += print_const + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE) + + axutil_strlen(nonce); + } + else + { + if(realm) + AXIS2_FREE(env->allocator, realm); + return AXIS2_FAILURE; + } + } + + temp = axutil_strstr(header_data, AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_OPAQUE); + if(temp) + { + opaque = axutil_strchr(temp, AXIS2_ESC_DOUBLE_QUOTE); + if(opaque) + { + opaque++; + temp = axutil_strchr(opaque, AXIS2_ESC_DOUBLE_QUOTE); + alloc_temp = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) + * (temp - opaque + 1))); + strncpy(alloc_temp, opaque, (temp - opaque)); + if(alloc_temp) + alloc_temp[temp - opaque] = AXIS2_ESC_NULL; + opaque = alloc_temp; + alloc_temp = NULL; + elen += print_const + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_OPAQUE) + + axutil_strlen(opaque); + } + else + { + if(realm) + AXIS2_FREE(env->allocator, realm); + if(nonce) + AXIS2_FREE(env->allocator, nonce); + return AXIS2_FAILURE; + } + } + + if(qop) + { + nc = AXIS2_HTTP_AUTHORIZATION_REQUEST_DEFAULT_CLIENT_NONCE; + temp = qop; + if(!axutil_strstr(temp, AXIS2_HTTP_AUTHORIZATION_REQUEST_QOP_OPTION_AUTH)) + { + return AXIS2_FAILURE; + } + AXIS2_FREE(env->allocator, qop); + qop = AXIS2_HTTP_AUTHORIZATION_REQUEST_QOP_OPTION_AUTH; + temp = axutil_uuid_gen(env); + cnonce = temp; + temp += CLIENT_NONCE_LENGTH; + if(temp) + *temp = AXIS2_ESC_NULL; + elen += 11 + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_DEFAULT_CLIENT_NONCE) + + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE_COUNT) + + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_CLIENT_NONCE) + + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_QOP) + CLIENT_NONCE_LENGTH + + axutil_strlen(qop); + } + + axutil_digest_calc_get_h_a1(env, algo, uname, realm, passwd, cnonce, nonce, h_a1); + axutil_digest_calc_get_response(env, h_a1, nonce, nc, cnonce, qop, method_value, url, h_a2, + response); + + elen += 4 + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_RESPONSE) + axutil_strlen( + AXIS2_HTTP_AUTH_TYPE_DIGEST) + response_length; + + auth_str + = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (elen + 1))); + temp = auth_str; + sprintf(temp, "%s %s=\"%s\", ", AXIS2_HTTP_AUTH_TYPE_DIGEST, + AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_USERNAME, uname); + temp += ((int)strlen(AXIS2_HTTP_AUTH_TYPE_DIGEST) + (int)strlen( + AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_USERNAME) + (int)strlen(uname) + 6); + if(realm) + { + sprintf(temp, "%s=\"%s\", ", AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_REALM, realm); + temp += ((int)strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_REALM) + (int)strlen(realm) + + 5); + } + if(nonce) + { + sprintf(temp, "%s=\"%s\", ", AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE, nonce); + temp += ((int)strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE) + (int)strlen(nonce) + + 5); + } + sprintf(temp, "%s=\"%s\", ", AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_URI, url); + temp += ((int)strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_URI) + (int)strlen(url) + 5); + if(qop) + { + sprintf(temp, "%s=%s, %s=%s, %s=\"%s\", ", AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_QOP, + qop, AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE_COUNT, nc, + AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_CLIENT_NONCE, cnonce); + temp += ((int)strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_QOP) + (int)strlen(qop) + + (int)strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE_COUNT) + (int)strlen(nc) + + (int)strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_CLIENT_NONCE) + (int)strlen( + cnonce) + 11); + } + if(opaque) + { + sprintf(temp, "%s=\"%s\", ", AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_OPAQUE, opaque); + temp += ((int)strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_OPAQUE) + (int)strlen( + opaque) + 5); + } + sprintf(temp, "%s=\"%s\"", AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_RESPONSE, response); + + axis2_http_sender_util_add_header(env, request, AXIS2_HTTP_HEADER_AUTHORIZATION, auth_str); + if(realm) + AXIS2_FREE(env->allocator, realm); + if(nonce) + AXIS2_FREE(env->allocator, nonce); + if(cnonce) + AXIS2_FREE(env->allocator, cnonce); + if(opaque) + AXIS2_FREE(env->allocator, opaque); + if(auth_str) + AXIS2_FREE(env->allocator, auth_str); + auth_str = NULL; + + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +static axis2_status_t +axis2_http_sender_configure_proxy_digest_auth( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request, + axis2_char_t * header_data) +{ + axutil_property_t *proxy_auth_un = NULL; + axutil_property_t *proxy_auth_pw = NULL; + axis2_char_t *uname = NULL; + axis2_char_t *passwd = NULL; + + if(!header_data || !*header_data) + return AXIS2_FAILURE; + + proxy_auth_un = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_PROXY_AUTH_UNAME); + proxy_auth_pw = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_PROXY_AUTH_PASSWD); + + if(proxy_auth_un && proxy_auth_pw) + { + uname = (axis2_char_t *)axutil_property_get_value(proxy_auth_un, env); + passwd = (axis2_char_t *)axutil_property_get_value(proxy_auth_pw, env); + } + if(!uname || !passwd) + { + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + axis2_transport_out_desc_t *trans_desc = NULL; + axutil_param_t *proxy_param = NULL; + axutil_hash_t *transport_attrs = NULL; + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if(conf) + { + trans_desc = axis2_conf_get_transport_out(conf, env, AXIS2_TRANSPORT_ENUM_HTTP); + } + } + if(trans_desc) + { + proxy_param = axutil_param_container_get_param( + axis2_transport_out_desc_param_container(trans_desc, env), env, + AXIS2_HTTP_PROXY_API); + if(!proxy_param) + { + proxy_param = axutil_param_container_get_param( + axis2_transport_out_desc_param_container(trans_desc, env), env, + AXIS2_HTTP_PROXY); + } + if(proxy_param) + { + transport_attrs = axutil_param_get_attributes(proxy_param, env); + + if(transport_attrs) + { + axutil_generic_obj_t *obj = NULL; + axiom_attribute_t *username_attr = NULL; + axiom_attribute_t *password_attr = NULL; + + obj = axutil_hash_get(transport_attrs, AXIS2_HTTP_PROXY_USERNAME, + AXIS2_HASH_KEY_STRING); + if(obj) + { + username_attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, env); + } + if(username_attr) + { + uname = axiom_attribute_get_value(username_attr, env); + } + + obj = NULL; + obj = axutil_hash_get(transport_attrs, AXIS2_HTTP_PROXY_PASSWORD, + AXIS2_HASH_KEY_STRING); + if(obj) + { + password_attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, env); + } + if(password_attr) + { + passwd = axiom_attribute_get_value(password_attr, env); + } + } + } + } + } + if(uname && passwd) + { + int elen = 0; /* length of header content */ + int print_const = 5; /* constant accounts for printing the + quoatation marks, comma, and space */ + int response_length = 32; + axis2_char_t *temp = NULL; + axis2_char_t *alloc_temp = NULL; + axis2_char_t *algo = AXIS2_HTTP_AUTHORIZATION_REQUEST_ALGORITHM_MD5; + axis2_char_t *realm = NULL; + axis2_char_t *qop = NULL; + axis2_char_t *nonce = NULL; + axis2_char_t *opaque = NULL; + axis2_char_t *cnonce = NULL; + axis2_char_t *nc = NULL; + axutil_digest_hash_hex_t h_a1; + axutil_digest_hash_hex_t h_a2; + axutil_digest_hash_hex_t response; + axis2_char_t *auth_str = NULL; + axutil_property_t *method = NULL; + axis2_char_t *method_value = NULL; + axis2_char_t *url = NULL; + + url = axis2_http_request_line_get_uri(axis2_http_simple_request_get_request_line(request, + env), env); + + if(!url) + { + return AXIS2_FAILURE; + } + + elen += print_const + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_URI) + + axutil_strlen(url); + + elen += print_const + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_USERNAME) + + axutil_strlen(uname); + + method = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HTTP_METHOD); + if(method) + { + method_value = (axis2_char_t *)axutil_property_get_value(method, env); + } + else + { + method_value = AXIS2_HTTP_POST; + } + + temp = axutil_strstr(header_data, AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_REALM); + if(temp) + { + realm = axutil_strchr(temp, AXIS2_ESC_DOUBLE_QUOTE); + if(realm) + { + realm++; + temp = axutil_strchr(realm, AXIS2_ESC_DOUBLE_QUOTE); + alloc_temp = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) + * (temp - realm + 1))); + strncpy(alloc_temp, realm, (temp - realm)); + if(alloc_temp) + alloc_temp[temp - realm] = AXIS2_ESC_NULL; + realm = alloc_temp; + alloc_temp = NULL; + elen += print_const + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_REALM) + + axutil_strlen(realm); + } + else + { + return AXIS2_FAILURE; + } + } + + temp = axutil_strstr(header_data, AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_QOP); + if(temp) + { + qop = axutil_strchr(temp, AXIS2_ESC_DOUBLE_QUOTE); + if(qop) + { + qop++; + temp = axutil_strchr(qop, AXIS2_ESC_DOUBLE_QUOTE); + alloc_temp = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) + * (temp - qop + 1))); + strncpy(alloc_temp, qop, (temp - qop)); + if(alloc_temp) + alloc_temp[temp - qop] = AXIS2_ESC_NULL; + qop = alloc_temp; + alloc_temp = NULL; + } + } + + temp = axutil_strstr(header_data, AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE); + if(temp) + { + nonce = axutil_strchr(temp, AXIS2_ESC_DOUBLE_QUOTE); + if(nonce) + { + nonce++; + temp = axutil_strchr(nonce, AXIS2_ESC_DOUBLE_QUOTE); + alloc_temp = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) + * (temp - nonce + 1))); + strncpy(alloc_temp, nonce, (temp - nonce)); + if(alloc_temp) + alloc_temp[temp - nonce] = AXIS2_ESC_NULL; + nonce = alloc_temp; + alloc_temp = NULL; + + elen += print_const + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE) + + axutil_strlen(nonce); + } + else + { + if(realm) + AXIS2_FREE(env->allocator, realm); + return AXIS2_FAILURE; + } + } + + temp = axutil_strstr(header_data, AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_OPAQUE); + if(temp) + { + opaque = axutil_strchr(temp, AXIS2_ESC_DOUBLE_QUOTE); + if(opaque) + { + opaque++; + temp = axutil_strchr(opaque, AXIS2_ESC_DOUBLE_QUOTE); + alloc_temp = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) + * (temp - opaque + 1))); + strncpy(alloc_temp, opaque, (temp - opaque)); + if(alloc_temp) + alloc_temp[temp - opaque] = AXIS2_ESC_NULL; + opaque = alloc_temp; + alloc_temp = NULL; + elen += print_const + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_OPAQUE) + + axutil_strlen(opaque); + } + else + { + if(realm) + AXIS2_FREE(env->allocator, realm); + if(nonce) + AXIS2_FREE(env->allocator, nonce); + return AXIS2_FAILURE; + } + } + + if(qop) + { + nc = AXIS2_HTTP_AUTHORIZATION_REQUEST_DEFAULT_CLIENT_NONCE; + temp = qop; + if(!axutil_strstr(temp, AXIS2_HTTP_AUTHORIZATION_REQUEST_QOP_OPTION_AUTH)) + { + return AXIS2_FAILURE; + } + AXIS2_FREE(env->allocator, qop); + qop = AXIS2_HTTP_AUTHORIZATION_REQUEST_QOP_OPTION_AUTH; + temp = axutil_uuid_gen(env); + cnonce = temp; + temp += CLIENT_NONCE_LENGTH; + if(temp) + *temp = AXIS2_ESC_NULL; + elen += 11 + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_DEFAULT_CLIENT_NONCE) + + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE_COUNT) + + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_CLIENT_NONCE) + + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_QOP) + CLIENT_NONCE_LENGTH + + axutil_strlen(qop); + } + + axutil_digest_calc_get_h_a1(env, algo, uname, realm, passwd, cnonce, nonce, h_a1); + axutil_digest_calc_get_response(env, h_a1, nonce, nc, cnonce, qop, method_value, url, h_a2, + response); + + elen += 4 + axutil_strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_RESPONSE) + axutil_strlen( + AXIS2_PROXY_AUTH_TYPE_DIGEST) + response_length; + + auth_str + = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (elen + 1))); + temp = auth_str; + sprintf(temp, "%s %s=\"%s\", ", AXIS2_PROXY_AUTH_TYPE_DIGEST, + AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_USERNAME, uname); + temp += ((int)strlen(AXIS2_HTTP_AUTH_TYPE_DIGEST) + (int)strlen( + AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_USERNAME) + (int)strlen(uname) + 6); + if(realm) + { + sprintf(temp, "%s=\"%s\", ", AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_REALM, realm); + temp += ((int)strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_REALM) + (int)strlen(realm) + + 5); + } + if(nonce) + { + sprintf(temp, "%s=\"%s\", ", AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE, nonce); + temp += ((int)strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE) + (int)strlen(nonce) + + 5); + } + sprintf(temp, "%s=\"%s\", ", AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_URI, url); + temp += ((int)strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_URI) + (int)strlen(url) + 5); + if(qop) + { + sprintf(temp, "%s=%s, %s=%s, %s=\"%s\", ", AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_QOP, + qop, AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE_COUNT, nc, + AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_CLIENT_NONCE, cnonce); + temp += ((int)strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_QOP) + (int)strlen(qop) + + (int)strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_NONCE_COUNT) + (int)strlen(nc) + + (int)strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_CLIENT_NONCE) + (int)strlen( + cnonce) + 11); + } + if(opaque) + { + sprintf(temp, "%s=\"%s\", ", AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_OPAQUE, opaque); + temp += ((int)strlen(AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_OPAQUE) + (int)strlen( + opaque) + 5); + } + sprintf(temp, "%s=\"%s\"", AXIS2_HTTP_AUTHORIZATION_REQUEST_PARAM_RESPONSE, response); + axis2_http_sender_util_add_header(env, request, AXIS2_HTTP_HEADER_PROXY_AUTHORIZATION, + auth_str); + if(realm) + { + AXIS2_FREE(env->allocator, realm); + } + + if(nonce) + { + AXIS2_FREE(env->allocator, nonce); + } + + if(cnonce) + { + AXIS2_FREE(env->allocator, cnonce); + } + + if(opaque) + { + AXIS2_FREE(env->allocator, opaque); + } + + if(auth_str) + { + AXIS2_FREE(env->allocator, auth_str); + } + + auth_str = NULL; + + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} +#endif + +#ifndef AXIS2_LIBCURL_ENABLED +static axis2_status_t +axis2_http_sender_configure_http_auth( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request) +{ + axis2_char_t *auth_type = NULL; + axis2_status_t status = AXIS2_FALSE; + axutil_property_t *http_auth_property = NULL; + axis2_char_t *http_auth_property_value = NULL; + axis2_bool_t force_http_auth = AXIS2_FALSE; + axutil_property_t *http_auth_type_property = NULL; + axis2_char_t *http_auth_type_property_value = NULL; + axis2_char_t *auth_type_end = NULL; + + http_auth_property = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_FORCE_HTTP_AUTH); + if(http_auth_property) + { + http_auth_property_value = (axis2_char_t *)axutil_property_get_value(http_auth_property, + env); + } + + if(http_auth_property_value && 0 == axutil_strcmp(http_auth_property_value, AXIS2_VALUE_TRUE)) + { + force_http_auth = AXIS2_TRUE; + } + + if(force_http_auth) + { + http_auth_type_property = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_HTTP_AUTH_TYPE); + if(http_auth_type_property) + { + http_auth_type_property_value = (axis2_char_t *)axutil_property_get_value( + http_auth_type_property, env); + } + + if(http_auth_type_property_value) + { + auth_type = http_auth_type_property_value; + } + } + if(!force_http_auth || axutil_strcasecmp(auth_type, AXIS2_HTTP_AUTH_TYPE_DIGEST) == 0) + { + axis2_http_header_t *auth_header = NULL; + axis2_http_simple_response_t *response = NULL; + + response = axis2_http_client_get_response(sender->client, env); + + if(response) + { + auth_header = axis2_http_simple_response_get_first_header(response, env, + AXIS2_HTTP_HEADER_WWW_AUTHENTICATE); + } + + if(auth_header) + { + auth_type = axis2_http_header_get_value(auth_header, env); + } + + if(auth_type) + { + auth_type_end = axutil_strchr(auth_type, ' '); + *auth_type_end = AXIS2_ESC_NULL; + auth_type_end++; + /*Read the realm and the rest stuff now from auth_type_end */ + } + if(force_http_auth && axutil_strcasecmp(auth_type, AXIS2_HTTP_AUTH_TYPE_DIGEST) != 0) + { + auth_type = NULL; + } + } + if(auth_type) + { + if(axutil_strcasecmp(auth_type, AXIS2_HTTP_AUTH_TYPE_BASIC) == 0) + { + status = axis2_http_sender_configure_http_basic_auth(sender, env, msg_ctx, request); + } + else if(axutil_strcasecmp(auth_type, AXIS2_HTTP_AUTH_TYPE_DIGEST) == 0) + { + status = axis2_http_sender_configure_http_digest_auth(sender, env, msg_ctx, request, + auth_type_end); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Authtype %s is not" + "supported", auth_type); + } + } + else + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR, AXIS2_FAILURE); + } + + return status; +} + +static axis2_status_t +axis2_http_sender_configure_proxy_auth( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request) +{ + axis2_char_t *auth_type = NULL; + axis2_status_t status = AXIS2_FALSE; + axutil_property_t *proxy_auth_property = NULL; + axis2_char_t *proxy_auth_property_value = NULL; + axis2_bool_t force_proxy_auth = AXIS2_FALSE; + axutil_property_t *proxy_auth_type_property = NULL; + axis2_char_t *proxy_auth_type_property_value = NULL; + axis2_char_t *auth_type_end = NULL; + + proxy_auth_property = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_FORCE_PROXY_AUTH); + if(proxy_auth_property) + { + proxy_auth_property_value = (axis2_char_t *)axutil_property_get_value(proxy_auth_property, + env); + } + + if(proxy_auth_property_value && 0 == axutil_strcmp(proxy_auth_property_value, AXIS2_VALUE_TRUE)) + { + force_proxy_auth = AXIS2_TRUE; + } + + if(force_proxy_auth) + { + proxy_auth_type_property = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_PROXY_AUTH_TYPE); + if(proxy_auth_type_property) + { + proxy_auth_type_property_value = (axis2_char_t *)axutil_property_get_value( + proxy_auth_type_property, env); + } + + if(proxy_auth_type_property_value) + { + auth_type = proxy_auth_type_property_value; + } + } + else + { + axis2_http_header_t *auth_header = NULL; + axis2_http_simple_response_t *response = NULL; + + response = axis2_http_client_get_response(sender->client, env); + + if(response) + { + auth_header = axis2_http_simple_response_get_first_header(response, env, + AXIS2_HTTP_HEADER_PROXY_AUTHENTICATE); + } + + if(auth_header) + { + auth_type = axis2_http_header_get_value(auth_header, env); + } + + if(auth_type) + { + auth_type_end = axutil_strchr(auth_type, ' '); + *auth_type_end = AXIS2_ESC_NULL; + auth_type_end++; + /*Read the realm and the rest stuff now from auth_type_end */ + } + } + if(auth_type) + { + if(axutil_strcasecmp(auth_type, AXIS2_PROXY_AUTH_TYPE_BASIC) == 0) + { + status = axis2_http_sender_configure_proxy_basic_auth(sender, env, msg_ctx, request); + } + else if(axutil_strcasecmp(auth_type, AXIS2_PROXY_AUTH_TYPE_DIGEST) == 0) + { + status = axis2_http_sender_configure_proxy_digest_auth(sender, env, msg_ctx, request, + auth_type_end); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Authtype %s is not supported", auth_type); + } + } + else + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR, AXIS2_FAILURE); + } + + return status; +} +#endif + +#ifndef AXIS2_LIBCURL_ENABLED +static axis2_status_t +axis2_http_sender_set_http_auth_type( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request) +{ + axis2_char_t *auth_type = NULL; + axis2_status_t status = AXIS2_FALSE; + axis2_char_t *auth_type_end = NULL; + axis2_http_header_t *auth_header = NULL; + axis2_http_simple_response_t *response = NULL; + + response = axis2_http_client_get_response(sender->client, env); + + if(response) + { + auth_header = axis2_http_simple_response_get_first_header(response, env, + AXIS2_HTTP_HEADER_WWW_AUTHENTICATE); + } + + if(auth_header) + { + auth_type = axis2_http_header_get_value(auth_header, env); + } + + if(auth_type) + { + auth_type_end = axutil_strchr(auth_type, ' '); + *auth_type_end = AXIS2_ESC_NULL; + auth_type_end++; + /*Read the realm and the rest stuff now from auth_type_end */ + } + + if(auth_type) + { + if(axutil_strcasecmp(auth_type, AXIS2_HTTP_AUTH_TYPE_BASIC) == 0) + { + status = axis2_msg_ctx_set_auth_type(msg_ctx, env, AXIS2_HTTP_AUTH_TYPE_BASIC); + } + else if(axutil_strcasecmp(auth_type, AXIS2_HTTP_AUTH_TYPE_DIGEST) == 0) + { + status = axis2_msg_ctx_set_auth_type(msg_ctx, env, AXIS2_HTTP_AUTH_TYPE_DIGEST); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Authtype %s is not supported", auth_type); + } + } + else + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR, AXIS2_FAILURE); + } + return status; +} + +static axis2_status_t +axis2_http_sender_set_proxy_auth_type( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_http_simple_request_t * request) +{ + axis2_char_t *auth_type = NULL; + axis2_status_t status = AXIS2_FALSE; + axis2_char_t *auth_type_end = NULL; + axis2_http_header_t *auth_header = NULL; + axis2_http_simple_response_t *response = NULL; + + response = axis2_http_client_get_response(sender->client, env); + + if(response) + { + auth_header = axis2_http_simple_response_get_first_header(response, env, + AXIS2_HTTP_HEADER_PROXY_AUTHENTICATE); + } + + if(auth_header) + { + auth_type = axis2_http_header_get_value(auth_header, env); + } + + if(auth_type) + { + auth_type_end = axutil_strchr(auth_type, ' '); + *auth_type_end = AXIS2_ESC_NULL; + auth_type_end++; + /*Read the realm and the rest stuff now from auth_type_end */ + } + + if(auth_type) + { + if(axutil_strcasecmp(auth_type, AXIS2_PROXY_AUTH_TYPE_BASIC) == 0) + { + status = axis2_msg_ctx_set_auth_type(msg_ctx, env, AXIS2_PROXY_AUTH_TYPE_BASIC); + } + else if(axutil_strcasecmp(auth_type, AXIS2_PROXY_AUTH_TYPE_DIGEST) == 0) + { + status = axis2_msg_ctx_set_auth_type(msg_ctx, env, AXIS2_PROXY_AUTH_TYPE_DIGEST); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Authtype %s is not supported", auth_type); + } + } + else + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR, AXIS2_FAILURE); + } + return status; +} +#endif + +#ifdef AXIS2_LIBCURL_ENABLED +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_libcurl_http_send (axis2_libcurl_t * curl, + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axiom_soap_envelope_t * out, + const axis2_char_t * str_url, + const axis2_char_t * soap_action) +{ + return axis2_libcurl_send (curl, sender->om_output, + env, msg_ctx, out, str_url, soap_action); +} +#endif + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_sender_get_param_string( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axiom_soap_envelope_t *soap_env = NULL; + axiom_soap_body_t *soap_body = NULL; + axiom_node_t *body_node = NULL; + axiom_node_t *data_node = NULL; + axiom_element_t *data_element = NULL; + axiom_child_element_iterator_t *iterator = NULL; + axutil_array_list_t *param_list = NULL; + axis2_char_t *param_string = NULL; + int i = 0; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + + soap_env = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + if(!soap_env) + { + return NULL; + } + soap_body = axiom_soap_envelope_get_body(soap_env, env); + body_node = axiom_soap_body_get_base_node(soap_body, env); + if(!body_node) + { + /* This could be the situation where service client does not provide + * a xml payload and instead add url parameters to the endpoint url + */ + return NULL; + } + data_node = axiom_node_get_first_child(body_node, env); + if(!data_node) + { + return NULL; + } + + param_list = axutil_array_list_create(env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY); + + data_element = axiom_node_get_data_element(data_node, env); + + iterator = axiom_element_get_child_elements(data_element, env, data_node); + + if(iterator) + { + while(AXIS2_TRUE == AXIOM_CHILD_ELEMENT_ITERATOR_HAS_NEXT(iterator, env)) + { + axiom_node_t *node = NULL; + axiom_element_t *element = NULL; + axis2_char_t *name = NULL; + axis2_char_t *value = NULL; + axis2_char_t *encoded_value = NULL; + + node = AXIOM_CHILD_ELEMENT_ITERATOR_NEXT(iterator, env); + element = axiom_node_get_data_element(node, env); + name = axiom_element_get_localname(element, env); + value = axiom_element_get_text(element, env, node); + if(value) + { + encoded_value = (axis2_char_t *)AXIS2_MALLOC(env->allocator, strlen(value)); + memset(encoded_value, 0, strlen(value)); + encoded_value = axutil_url_encode(env, encoded_value, value, (int)strlen(value)); + /* We are sure that the difference lies within the int range */ + + axutil_array_list_add(param_list, env, axutil_strcat(env, name, "=", encoded_value, + NULL)); + AXIS2_FREE(env->allocator, encoded_value); + encoded_value = NULL; + } + } + } + for(i = 0; i < axutil_array_list_size(param_list, env); i++) + { + axis2_char_t *tmp_string = NULL; + axis2_char_t *pair = NULL; + + pair = axutil_array_list_get(param_list, env, i); + if(i == 0) + { + tmp_string = axutil_stracat(env, param_string, pair); + } + else + { + tmp_string = axutil_strcat(env, param_string, AXIS2_AND_SIGN, pair, NULL); + } + + if(param_string) + { + AXIS2_FREE(env->allocator, param_string); + param_string = NULL; + } + AXIS2_FREE(env->allocator, pair); + param_string = tmp_string; + } + axutil_array_list_free(param_list, env); + return param_string; +} + +void AXIS2_CALL +axis2_http_sender_util_add_header( + const axutil_env_t * env, + axis2_http_simple_request_t * request, + axis2_char_t * header_name, + const axis2_char_t * header_value) +{ + axis2_http_header_t *http_header; + http_header = axis2_http_header_create(env, header_name, header_value); + axis2_http_simple_request_add_header(request, env, http_header); +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_sender_set_keep_alive( + axis2_http_sender_t * sender, + const axutil_env_t * env, + axis2_bool_t keep_alive) +{ + sender->keep_alive = keep_alive; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_sender_get_keep_alive( + axis2_http_sender_t * sender, + const axutil_env_t * env) +{ + return sender->keep_alive; +} + +static axutil_hash_t * +axis2_http_sender_connection_map_create( + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx) +{ + axutil_hash_t *connection_map = NULL; + connection_map = axutil_hash_make(env); + if(!connection_map) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + } + else + { + axis2_conf_ctx_t *conf_ctx = NULL; + axutil_property_t *connection_map_property = NULL; + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + connection_map_property = axutil_property_create_with_args(env, AXIS2_SCOPE_SESSION, + AXIS2_TRUE, axis2_http_sender_connection_map_free, connection_map); + axis2_conf_ctx_set_property(conf_ctx, env, AXIS2_HTTP_CONNECTION_MAP, + connection_map_property); + } + return connection_map; +} + +static void +axis2_http_sender_connection_map_remove( + axutil_hash_t *connection_map, + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx, + axis2_http_client_t *http_client) +{ + axutil_property_t *property = NULL; + axis2_endpoint_ref_t *endpoint = NULL; + /** + * Put the http client into message context with own value true so that it will be freed + * after response processed + */ + property = axutil_property_create_with_args(env, AXIS2_SCOPE_REQUEST, AXIS2_TRUE, + axis2_http_client_free_void_arg, http_client); + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_HTTP_CLIENT, property); + endpoint = axis2_msg_ctx_get_to(msg_ctx, env); + if(endpoint) + { + const axis2_char_t *address = NULL; + address = axis2_endpoint_ref_get_address(endpoint, env); + if(address) + { + axutil_url_t *url = NULL; + url = axutil_url_parse_string(env, address); + if(url) + { + axis2_char_t *server = axutil_url_get_server(url, env); + if(server) + { + axutil_hash_set(connection_map, server, AXIS2_HASH_KEY_STRING, NULL); + } + axutil_url_free(url, env); + } + } + } +} + +static void +axis2_http_sender_connection_map_add( + axutil_hash_t *connection_map, + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx, + axis2_http_client_t *http_client) +{ + axutil_property_t *property = NULL; + axis2_endpoint_ref_t *endpoint = NULL; + /** + * Put the http client into message context. Is this neccessary? + */ + property = axutil_property_create_with_args(env, AXIS2_SCOPE_REQUEST, AXIS2_FALSE, + axis2_http_client_free_void_arg, http_client); + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_HTTP_CLIENT, property); + endpoint = axis2_msg_ctx_get_to(msg_ctx, env); + if(endpoint) + { + const axis2_char_t *address = NULL; + address = axis2_endpoint_ref_get_address(endpoint, env); + if(address) + { + axutil_url_t *url = NULL; + url = axutil_url_parse_string(env, address); + if(url) + { + axis2_char_t *server = axutil_url_get_server(url, env); + if(server) + { + axutil_hash_set(connection_map, axutil_strdup(env, server), + AXIS2_HASH_KEY_STRING, http_client); + } + axutil_url_free(url, env); + } + } + } +} + +static axis2_http_client_t * +axis2_http_sender_connection_map_get( + axutil_hash_t *connection_map, + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx) +{ + axis2_http_client_t *http_client = NULL; + axis2_endpoint_ref_t *endpoint = NULL; + endpoint = axis2_msg_ctx_get_to(msg_ctx, env); + if(endpoint) + { + const axis2_char_t *address = NULL; + address = axis2_endpoint_ref_get_address(endpoint, env); + if(address) + { + axutil_url_t *url = NULL; + url = axutil_url_parse_string(env, address); + if(url) + { + axis2_char_t *server = axutil_url_get_server(url, env); + if(server) + { + http_client = axutil_hash_get(connection_map, server, AXIS2_HASH_KEY_STRING); + } + axutil_url_free(url, env); + } + } + } + return http_client; +} + +static void AXIS2_CALL +axis2_http_sender_connection_map_free( + void *cm_void, + const axutil_env_t *env) +{ + void *val = NULL; + const void *key = NULL; + axutil_hash_index_t *hi = NULL; + axutil_hash_t *ht = (axutil_hash_t *)cm_void; + + for(hi = axutil_hash_first(ht, env); hi; hi = axutil_hash_next(env, hi)) + { + axis2_char_t *name = NULL; + axis2_http_client_t *value = NULL; + + axutil_hash_this(hi, &key, NULL, &val); + name = (axis2_char_t *) key; + if(name) + { + AXIS2_FREE(env->allocator, name); + } + value = (axis2_http_client_t *) val; + if(value) + { + axis2_http_client_free(value, env); + } + } + axutil_hash_free(ht, env); +} + diff --git a/src/core/transport/http/sender/http_transport_sender.c b/src/core/transport/http/sender/http_transport_sender.c new file mode 100644 index 0000000..3ef55b0 --- /dev/null +++ b/src/core/transport/http/sender/http_transport_sender.c @@ -0,0 +1,859 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef AXIS2_LIBCURL_ENABLED +#include "libcurl/axis2_libcurl.h" +#endif + +/** + * HTTP Transport Sender struct impl + * Axis2 HTTP Transport Sender impl + */ + +typedef struct axis2_http_transport_sender_impl +{ + axis2_transport_sender_t transport_sender; + axis2_char_t *http_version; + axis2_bool_t chunked; + int connection_timeout; + int so_timeout; + axis2_bool_t keep_alive; +#ifdef AXIS2_LIBCURL_ENABLED + axis2_libcurl_t *libcurl; +#endif +} axis2_http_transport_sender_impl_t; + +#define AXIS2_WS_RM_ANONYMOUS_URL "http://docs.oasis-open.org/ws-rx/wsmc/200702/anonymous?id=" +#define AXIS2_INTF_TO_IMPL(transport_sender) \ + ((axis2_http_transport_sender_impl_t *)\ + (transport_sender)) + +/***************************** Function headers *******************************/ +axis2_status_t AXIS2_CALL +axis2_http_transport_sender_invoke( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + +axis2_status_t AXIS2_CALL +axis2_http_transport_sender_clean_up( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + +axis2_status_t AXIS2_CALL +axis2_http_transport_sender_init( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_transport_out_desc_t * out_desc); + +axis2_status_t AXIS2_CALL +axis2_http_transport_sender_write_message( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_endpoint_ref_t * epr, + axiom_soap_envelope_t * out, + axiom_output_t * om_output); + +void AXIS2_CALL axis2_http_transport_sender_free( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env); + +static const axis2_transport_sender_ops_t http_transport_sender_ops_var = { + axis2_http_transport_sender_init, axis2_http_transport_sender_invoke, + axis2_http_transport_sender_clean_up, axis2_http_transport_sender_free }; + +axis2_transport_sender_t *AXIS2_CALL +axis2_http_transport_sender_create( + const axutil_env_t * env) +{ + axis2_http_transport_sender_impl_t *transport_sender_impl = NULL; + + transport_sender_impl = (axis2_http_transport_sender_impl_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_http_transport_sender_impl_t)); + + if(!transport_sender_impl) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + memset((void *)transport_sender_impl, 0, sizeof(axis2_http_transport_sender_impl_t)); + + transport_sender_impl->http_version = axutil_strdup(env, AXIS2_HTTP_HEADER_PROTOCOL_11); + transport_sender_impl->chunked = AXIS2_TRUE; + transport_sender_impl->connection_timeout = AXIS2_HTTP_DEFAULT_CONNECTION_TIMEOUT; + transport_sender_impl->so_timeout = AXIS2_HTTP_DEFAULT_SO_TIMEOUT; + transport_sender_impl->keep_alive = AXIS2_TRUE; + transport_sender_impl->transport_sender.ops = &http_transport_sender_ops_var; + +#ifdef AXIS2_LIBCURL_ENABLED + transport_sender_impl->libcurl = axis2_libcurl_create(env); + if (!transport_sender_impl->libcurl) + { + AXIS2_FREE(env->allocator, transport_sender_impl); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } +#endif + + return &(transport_sender_impl->transport_sender); +} + +void AXIS2_CALL +axis2_http_transport_sender_free( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env) +{ + + axis2_http_transport_sender_impl_t *transport_sender_impl = NULL; + if(!transport_sender) + { + return; + } + + transport_sender_impl = AXIS2_INTF_TO_IMPL(transport_sender); + + if(transport_sender_impl->http_version) + { + AXIS2_FREE(env->allocator, transport_sender_impl->http_version); + transport_sender_impl->http_version = NULL; + } + +#ifdef AXIS2_LIBCURL_ENABLED + if (transport_sender_impl->libcurl) + { + axis2_libcurl_free(transport_sender_impl->libcurl, env); + } +#endif + + AXIS2_FREE(env->allocator, transport_sender_impl); + return; +} + +axis2_status_t AXIS2_CALL +axis2_http_transport_sender_invoke( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + const axis2_char_t *char_set_enc = NULL; + axutil_string_t *char_set_enc_str = NULL; + axis2_endpoint_ref_t *epr = NULL; + axis2_char_t *transport_url = NULL; + axiom_xml_writer_t *xml_writer = NULL; + axiom_output_t *om_output = NULL; + axis2_char_t *buffer = NULL; + axiom_soap_envelope_t *soap_data_out = NULL; + axis2_bool_t do_mtom; + axutil_property_t *property = NULL; + axiom_node_t *data_out = NULL; + int buffer_size = 0; + axis2_status_t status = AXIS2_SUCCESS; + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + axis2_transport_out_desc_t *trans_desc = NULL; + axutil_param_t *write_xml_declaration_param = NULL; + axutil_hash_t *transport_attrs = NULL; + axis2_bool_t write_xml_declaration = AXIS2_FALSE; + axis2_bool_t fault = AXIS2_FALSE; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_http_transport_sender_invoke"); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + char_set_enc_str = axis2_msg_ctx_get_charset_encoding(msg_ctx, env); + if(char_set_enc_str) + { + char_set_enc = axutil_string_get_buffer(char_set_enc_str, env); + } + + if(!char_set_enc) + { + axis2_op_ctx_t *op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + if(op_ctx) + { + axis2_ctx_t *ctx = axis2_op_ctx_get_base(op_ctx, env); + if(ctx) + { + property = axis2_ctx_get_property(ctx, env, AXIS2_CHARACTER_SET_ENCODING); + if(property) + { + char_set_enc = axutil_property_get_value(property, env); + property = NULL; + } + } + } + } + + /** + * If we still can't find the char set enc we will + * use default + */ + if(!char_set_enc) + { + char_set_enc = AXIS2_DEFAULT_CHAR_SET_ENCODING; + } + + do_mtom = axis2_http_transport_utils_do_write_mtom(env, msg_ctx); + + transport_url = axis2_msg_ctx_get_transport_url(msg_ctx, env); + if(transport_url) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "transport_url:%s", transport_url); + epr = axis2_endpoint_ref_create(env, transport_url); + } + else + { + /* when transport url is not available in msg_ctx */ + axis2_endpoint_ref_t *ctx_epr = axis2_msg_ctx_get_to(msg_ctx, env); + if(ctx_epr) + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "ctx_epr:%s", axis2_endpoint_ref_get_address( + ctx_epr, env)); + + if(ctx_epr && axutil_strcmp(AXIS2_WSA_ANONYMOUS_URL_SUBMISSION, + axis2_endpoint_ref_get_address(ctx_epr, env)) && axutil_strcmp(AXIS2_WSA_ANONYMOUS_URL, + axis2_endpoint_ref_get_address(ctx_epr, env)) && !(axutil_strstr( + axis2_endpoint_ref_get_address(ctx_epr, env), AXIS2_WS_RM_ANONYMOUS_URL))) + { + epr = ctx_epr; + } + } + + soap_data_out = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + if(!soap_data_out) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NULL_SOAP_ENVELOPE_IN_MSG_CTX, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "%s", AXIS2_ERROR_GET_MESSAGE(env->error)); + return AXIS2_SUCCESS; + } + + xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + if(!xml_writer) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Could not create xml_writer for \ +AXIS2_XML_PARSER_TYPE_BUFFER"); + return AXIS2_FAILURE; + } + + om_output = axiom_output_create(env, xml_writer); + if(!om_output) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Could not create om_output for xml writer of \ +AXIS2_XML_PARSER_TYPE_BUFFER"); + axiom_xml_writer_free(xml_writer, env); + xml_writer = NULL; + return AXIS2_FAILURE; + } + + /* setting SOAP version for OM_OUTPUT. */ + axiom_output_set_soap11(om_output, env, axis2_msg_ctx_get_is_soap_11(msg_ctx, env)); + + /* This is the case where normal client send the requet using a http_client*/ + + if(epr) + { + if(axutil_strcmp(AXIS2_WSA_NONE_URL_SUBMISSION, axis2_endpoint_ref_get_address(epr, env)) + == 0 || axutil_strcmp(AXIS2_WSA_NONE_URL, axis2_endpoint_ref_get_address(epr, env)) + == 0) + { + epr = NULL; + } + else + { + status = axis2_http_transport_sender_write_message(transport_sender, env, msg_ctx, epr, + soap_data_out, om_output); + } + } + + /* If no endpoint reference could be derived from the the message context. It could well be the + * single channel two way scenario in the application server side send. + */ + if(!epr) + { + axutil_stream_t *out_stream = axis2_msg_ctx_get_transport_out_stream(msg_ctx, env); + + if(AXIS2_TRUE == axis2_msg_ctx_get_server_side(msg_ctx, env)) + { + axis2_http_out_transport_info_t *out_info = NULL; + axis2_bool_t is_soap11 = AXIS2_FALSE; + axis2_op_ctx_t *op_ctx = NULL; + /*axis2_char_t *header_value = NULL;*/ + + out_info = (axis2_http_out_transport_info_t *)axis2_msg_ctx_get_out_transport_info( + msg_ctx, env); + + if(!out_info) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_OUT_TRNSPORT_INFO_NULL, AXIS2_FAILURE); + axiom_output_free(om_output, env); + om_output = NULL; + xml_writer = NULL; + return AXIS2_FAILURE; + } + /*header_value = axis2_http_transport_utils_get_session(env, msg_ctx); + if(header_value) + { + AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_COOKIE_HEADER(out_info, env, header_value); + }*/ + + is_soap11 = axis2_msg_ctx_get_is_soap_11(msg_ctx, env); + + AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_CHAR_ENCODING(out_info, env, char_set_enc); + if(AXIS2_TRUE == is_soap11) + { + /* SOAP1.1 */ + AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_CONTENT_TYPE(out_info, env, + AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML); + } + else + { + /* SOAP1.2 */ + AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_CONTENT_TYPE(out_info, env, + AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP); + } + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + } + + if(conf) + { + /* get access to HTTP transport for sending */ + trans_desc = axis2_conf_get_transport_out(conf, env, AXIS2_TRANSPORT_ENUM_HTTP); + } + + if(trans_desc) + { + + /* accessing parameter in axis2.xml which set to have + * an ability to send xml versoin processing + * instruction */ + write_xml_declaration_param = axutil_param_container_get_param( + axis2_transport_out_desc_param_container(trans_desc, env), env, + AXIS2_XML_DECLARATION); + } + + if(write_xml_declaration_param) + { + transport_attrs = axutil_param_get_attributes(write_xml_declaration_param, env); + if(transport_attrs) + { + /* Accessing attribute values */ + axutil_generic_obj_t *obj = NULL; + axiom_attribute_t *write_xml_declaration_attr = NULL; + axis2_char_t *write_xml_declaration_attr_value = NULL; + + obj = axutil_hash_get(transport_attrs, AXIS2_ADD_XML_DECLARATION, + AXIS2_HASH_KEY_STRING); + if(obj) + { + write_xml_declaration_attr + = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, env); + } + + if(write_xml_declaration_attr) + { + write_xml_declaration_attr_value = axiom_attribute_get_value( + write_xml_declaration_attr, env); + } + + if(write_xml_declaration_attr_value && 0 == axutil_strcasecmp( + write_xml_declaration_attr_value, AXIS2_VALUE_TRUE)) + { + write_xml_declaration = AXIS2_TRUE; + } + } + } + + if(write_xml_declaration) + { + axiom_output_write_xml_version_encoding(om_output, env); + } + + if(AXIS2_TRUE == axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + { + axiom_node_t *body_node = NULL; + /* axis2_bool_t fault = AXIS2_FALSE;*/ + axiom_soap_fault_t *soap_fault; + axiom_soap_body_t *soap_body = axiom_soap_envelope_get_body(soap_data_out, env); + axiom_soap_fault_detail_t *soap_fault_detial; + + if(!soap_body) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL, + AXIS2_FAILURE); + axiom_output_free(om_output, env); + om_output = NULL; + xml_writer = NULL; + return AXIS2_FAILURE; + } + + fault = axiom_soap_body_has_fault(soap_body, env); + + if(fault == AXIS2_TRUE) + { + soap_fault = axiom_soap_body_get_fault(soap_body, env); + + if(!soap_fault) + { + + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Rest fault has occur, error described below"); + axiom_output_free(om_output, env); + om_output = NULL; + xml_writer = NULL; + return AXIS2_FAILURE; + } + + soap_fault_detial = axiom_soap_fault_get_detail(soap_fault, env); + + if(!soap_fault_detial) + { + axiom_output_free(om_output, env); + om_output = NULL; + xml_writer = NULL; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Returning failure to obtain soap_fault_detail from soap_fault"); + return AXIS2_FAILURE; + } + + body_node = axiom_soap_fault_detail_get_base_node(soap_fault_detial, env); + if(!body_node) + { + axiom_output_free(om_output, env); + om_output = NULL; + xml_writer = NULL; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "failure to get base node from soap_fault_detail."); + return AXIS2_FAILURE; + } + + } + else + { + + body_node = axiom_soap_body_get_base_node(soap_body, env); + if(!body_node) + { + axiom_output_free(om_output, env); + om_output = NULL; + xml_writer = NULL; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "failure to get base node from soap_body."); + return AXIS2_FAILURE; + } + } + + data_out = axiom_node_get_first_element(body_node, env); + + if(!data_out || axiom_node_get_node_type(data_out, env) != AXIOM_ELEMENT) + { + axiom_output_free(om_output, env); + om_output = NULL; + xml_writer = NULL; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "unable to get first element from soap_body, base node."); + return AXIS2_FAILURE; + } + + axiom_node_serialize(data_out, env, om_output); + buffer = (axis2_char_t *)axiom_xml_writer_get_xml(xml_writer, env); + buffer_size = axiom_xml_writer_get_xml_size(xml_writer, env); + axutil_stream_write(out_stream, env, buffer, buffer_size); + /* Finish Rest Processing */ + + } + else + { + axiom_soap_body_t *body = NULL; + + body = axiom_soap_envelope_get_body(soap_data_out, env); + fault = axiom_soap_body_has_fault(body, env); + + /* SOAP Processing */ + axiom_output_set_do_optimize(om_output, env, do_mtom); + axiom_soap_envelope_serialize(soap_data_out, env, om_output, AXIS2_FALSE); + if(do_mtom && !fault) + { + axis2_status_t mtom_status = AXIS2_FAILURE; + axis2_char_t *content_type = NULL; + axutil_array_list_t *mime_parts = NULL; + + /*Create the attachment related data and put them to an + *array_list */ + mtom_status = axiom_output_flush(om_output, env); + if(mtom_status == AXIS2_SUCCESS) + { + mime_parts = axiom_output_get_mime_parts(om_output, env); + if(!mime_parts) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Unable to create the mime_part list from om_output"); + return AXIS2_FAILURE; + } + else + { + axis2_msg_ctx_set_mime_parts(msg_ctx, env, mime_parts); + } + } + /*om_out put has the details of content_type */ + content_type = (axis2_char_t *)axiom_output_get_content_type(om_output, env); + AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_CONTENT_TYPE(out_info, env, content_type); + } + else + { + buffer = (axis2_char_t *)axiom_xml_writer_get_xml(xml_writer, env); + buffer_size = axiom_xml_writer_get_xml_size(xml_writer, env); + + /* This is where it actually fill the buffer in out_stream. In application server + * side this is the out_stream passed to the in message context from http_worker + * function and then copied to the out message context. + */ + axutil_stream_write(out_stream, env, buffer, buffer_size); + } + } + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + axis2_op_ctx_set_response_written(op_ctx, env, AXIS2_TRUE); + } + } + + axiom_output_free(om_output, env); + om_output = NULL; + xml_writer = NULL; + + if(transport_url) + { + if(epr) + { + axis2_endpoint_ref_free(epr, env); + epr = NULL; + } + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_http_transport_sender_invoke"); + return status; +} + +axis2_status_t AXIS2_CALL +axis2_http_transport_sender_clean_up( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, transport_sender, AXIS2_FAILURE); + /* + * Clean up is not used. If the http sender needs + * to be cleaned up it should be done here. + */ + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_http_transport_sender_init( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_transport_out_desc_t * out_desc) +{ + axutil_param_t *version_param = NULL; + axis2_char_t *version = NULL; + axis2_char_t *temp = NULL; + axutil_param_t *temp_param = NULL; + + AXIS2_PARAM_CHECK(env->error, conf_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, out_desc, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, transport_sender, AXIS2_FAILURE); + + /* Getting HTTP version from axis2.xml */ + version_param = axutil_param_container_get_param(axis2_transport_out_desc_param_container( + out_desc, env), env, AXIS2_HTTP_PROTOCOL_VERSION); + + if(version_param) + { + version = axutil_param_get_value(version_param, env); + } + + if(version) + { + /* handling HTTP 1.1 */ + if(0 == axutil_strcmp(version, AXIS2_HTTP_HEADER_PROTOCOL_11)) + { + axis2_char_t *encoding = NULL; + axutil_param_t *encoding_param = NULL; + if(AXIS2_INTF_TO_IMPL(transport_sender)->http_version) + { + AXIS2_FREE(env->allocator, AXIS2_INTF_TO_IMPL(transport_sender)->http_version); + } + + AXIS2_INTF_TO_IMPL(transport_sender)->http_version = axutil_strdup(env, version); + AXIS2_INTF_TO_IMPL(transport_sender)->keep_alive = AXIS2_TRUE; + encoding_param = axutil_param_container_get_param( + axis2_transport_out_desc_param_container(out_desc, env), env, + AXIS2_HTTP_HEADER_TRANSFER_ENCODING); + + if(encoding_param) + { + encoding = axutil_param_get_value(encoding_param, env); + } + + if(encoding && 0 + == axutil_strcmp(encoding, AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED)) + { + AXIS2_INTF_TO_IMPL(transport_sender)->chunked = AXIS2_TRUE; + } + else + { + AXIS2_INTF_TO_IMPL(transport_sender)->chunked = AXIS2_FALSE; + } + + } + else if(0 == axutil_strcmp(version, AXIS2_HTTP_HEADER_PROTOCOL_10)) + { + axutil_param_t *keepalive_param = NULL; + + /* Handling HTTP 1.0 */ + if(AXIS2_INTF_TO_IMPL(transport_sender)->http_version) + { + AXIS2_FREE(env->allocator, AXIS2_INTF_TO_IMPL(transport_sender)->http_version); + } + AXIS2_INTF_TO_IMPL(transport_sender)->http_version = axutil_strdup(env, version); + AXIS2_INTF_TO_IMPL(transport_sender)->chunked = AXIS2_FALSE; + keepalive_param = axutil_param_container_get_param( + axis2_transport_out_desc_param_container(out_desc, env), env, + AXIS2_HTTP_HEADER_CONNECTION_KEEPALIVE); + if(keepalive_param) + { + axis2_char_t *keepalive_value = NULL; + keepalive_value = axutil_param_get_value(keepalive_param, env); + if(!axutil_strcmp(keepalive_value, AXIS2_VALUE_FALSE)) + { + AXIS2_INTF_TO_IMPL(transport_sender)->keep_alive = AXIS2_FALSE; + } + } + } + } + else + { + /* HTTP version is not available in axis2.xml */ + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NULL_HTTP_VERSION, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + /* Getting HTTP_SO_TIMEOUT value from axis2.xml */ + temp_param = axutil_param_container_get_param(axis2_transport_out_desc_param_container( + out_desc, env), env, AXIS2_HTTP_SO_TIMEOUT); + + if(temp_param) + { + temp = axutil_param_get_value(temp_param, env); + } + + if(temp) + { + AXIS2_INTF_TO_IMPL(transport_sender)->so_timeout = AXIS2_ATOI(temp); + } + + /* Getting HTTP_CONNECTION_TIMEOUT from axis2.xml */ + temp + = (axis2_char_t *)axutil_param_container_get_param( + axis2_transport_out_desc_param_container(out_desc, env), env, + AXIS2_HTTP_CONNECTION_TIMEOUT); + if(temp_param) + { + temp = axutil_param_get_value(temp_param, env); + } + + /* set axis2.xml connection timeout value to http_sender */ + if(temp) + { + AXIS2_INTF_TO_IMPL(transport_sender)->connection_timeout = AXIS2_ATOI(temp); + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_http_transport_sender_write_message( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_endpoint_ref_t * epr, + axiom_soap_envelope_t * out, + axiom_output_t * om_output) +{ + const axis2_char_t *soap_action = NULL; + const axis2_char_t *url = NULL; + axis2_http_sender_t *sender = NULL; + axis2_status_t status = AXIS2_FAILURE; + const axis2_char_t *soap_ns_uri = NULL; + axiom_soap_envelope_t *response_envelope = NULL; + axis2_op_t *op = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, epr, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, om_output, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, transport_sender, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, out, AXIS2_FAILURE); + + /* epr is already passed NULL checking */ + url = axis2_endpoint_ref_get_address(epr, env); + + soap_action = axutil_string_get_buffer(axis2_msg_ctx_get_soap_action(msg_ctx, env), env); + + if(!soap_action) + { + soap_action = ""; + } + + sender = axis2_http_sender_create(env); + + if(!sender) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "http sender creation failed"); + return AXIS2_FAILURE; + } + axis2_http_sender_set_keep_alive(sender, env, AXIS2_INTF_TO_IMPL(transport_sender)->keep_alive); + + /* For the MTOM case we should on chunking. And for chunking to work the + * protocol should be http 1.1*/ + + if(axis2_msg_ctx_get_doing_mtom(msg_ctx, env)) + { + AXIS2_HTTP_SENDER_SET_CHUNKED(sender, env, AXIS2_TRUE); + AXIS2_HTTP_SENDER_SET_HTTP_VERSION(sender, env, AXIS2_HTTP_HEADER_PROTOCOL_11); + } + else + { + AXIS2_HTTP_SENDER_SET_CHUNKED(sender, env, AXIS2_INTF_TO_IMPL(transport_sender)->chunked); + AXIS2_HTTP_SENDER_SET_HTTP_VERSION(sender, env, + AXIS2_INTF_TO_IMPL(transport_sender)->http_version); + } + AXIS2_HTTP_SENDER_SET_OM_OUTPUT(sender, env, om_output); + +#ifdef AXIS2_LIBCURL_ENABLED + AXIS2_LOG_DEBUG (env->log, AXIS2_LOG_SI, "using axis2 libcurl http sender."); + status = + axis2_libcurl_http_send(AXIS2_INTF_TO_IMPL(transport_sender)->libcurl, + sender, env, msg_ctx, out, url, soap_action); +#else + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "using axis2 native http sender."); + status = AXIS2_HTTP_SENDER_SEND(sender, env, msg_ctx, out, url, soap_action); +#endif + + AXIS2_HTTP_SENDER_FREE(sender, env); + sender = NULL; + + /* if the send was not successful, do not process any response */ + if(status != AXIS2_SUCCESS) + return status; + + op = axis2_msg_ctx_get_op(msg_ctx, env); + if(op) + { + /* handle one way case */ + const axis2_char_t *mep = axis2_op_get_msg_exchange_pattern(op, env); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "OP name axutil_qname_get_localpart = %s", mep); + if(axutil_strcmp(mep, AXIS2_MEP_URI_OUT_ONLY) == 0 || axutil_strcmp(mep, + AXIS2_MEP_URI_ROBUST_OUT_ONLY) == 0 || axutil_strcmp(mep, AXIS2_MEP_URI_IN_ONLY) == 0) + { + return status; + } + else + { + /* AXIS2_MEP_URI_IN_OUT case , we have a response this + * time */ + soap_ns_uri + = axis2_msg_ctx_get_is_soap_11(msg_ctx, env) ? AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI + : AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + response_envelope = axis2_http_transport_utils_create_soap_msg(env, msg_ctx, + soap_ns_uri); + if(response_envelope) + { + axis2_msg_ctx_set_response_soap_envelope(msg_ctx, env, response_envelope); + } + } + } + + return status; +} + +/** + * Following block distinguish the exposed part of the dll. + */ + +/* When building for static deployment, give the get and remove methods + * unique names. This avoids having the linker fail with duplicate symbol + * errors. + */ + +AXIS2_EXPORT int +#ifndef AXIS2_STATIC_DEPLOY +axis2_get_instance( +#else + axis2_http_transport_sender_get_instance( +#endif + struct axis2_transport_sender **inst, + const axutil_env_t * env) +{ + *inst = axis2_http_transport_sender_create(env); + if(!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +#ifndef AXIS2_STATIC_DEPLOY +axis2_remove_instance( +#else + axis2_http_transport_sender_remove_instance( +#endif + axis2_transport_sender_t * inst, + const axutil_env_t * env) +{ + if(inst) + { + AXIS2_TRANSPORT_SENDER_FREE(inst, env); + } + return AXIS2_SUCCESS; +} + diff --git a/src/core/transport/http/sender/libcurl/Makefile.am b/src/core/transport/http/sender/libcurl/Makefile.am new file mode 100644 index 0000000..90e5ce6 --- /dev/null +++ b/src/core/transport/http/sender/libcurl/Makefile.am @@ -0,0 +1,2 @@ +EXTRA_DIST= axis2_libcurl.h axis2_libcurl.c libcurl_stream.h libcurl_stream.c + diff --git a/src/core/transport/http/sender/libcurl/axis2_libcurl.c b/src/core/transport/http/sender/libcurl/axis2_libcurl.c new file mode 100644 index 0000000..834e69b --- /dev/null +++ b/src/core/transport/http/sender/libcurl/axis2_libcurl.c @@ -0,0 +1,1169 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifdef AXIS2_LIBCURL_ENABLED + +#include "axis2_libcurl.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "libcurl_stream.h" + +static int ref = 0; + +struct axis2_libcurl +{ + axis2_char_t *memory; + axutil_array_list_t *alist; + unsigned int size; + const axutil_env_t *env; + char errorbuffer[CURL_ERROR_SIZE]; + CURL *handler; + axis2_bool_t cookies; +}; + +static size_t +axis2_libcurl_write_memory_callback( + void *ptr, + size_t size, + size_t nmemb, + void *data); + +static size_t +axis2_libcurl_header_callback( + void *ptr, + size_t size, + size_t nmemb, + void *data); + +static axis2_char_t * +axis2_libcurl_get_content_type( + axis2_libcurl_t *curl, + const axutil_env_t * env); + +static int +axis2_libcurl_get_content_length( + axis2_libcurl_t *curl, + const axutil_env_t * env); + +static axis2_http_header_t * +axis2_libcurl_get_first_header( + axis2_libcurl_t *curl, + const axutil_env_t * env, + const axis2_char_t * str); + +static void +axis2_libcurl_free_headers( + axis2_libcurl_t *curl, + const axutil_env_t * env); + +static axis2_status_t +axis2_libcurl_set_options( + CURL *handler, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + +axis2_status_t AXIS2_CALL +axis2_libcurl_send( + axis2_libcurl_t *data, + axiom_output_t * om_output, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axiom_soap_envelope_t * out, + const axis2_char_t * str_url, + const axis2_char_t * soap_action) +{ + struct curl_slist *headers = NULL; + axiom_soap_body_t *soap_body; + axis2_bool_t is_soap = AXIS2_TRUE; + axis2_bool_t send_via_get = AXIS2_FALSE; + axis2_bool_t send_via_head = AXIS2_FALSE; + axis2_bool_t send_via_put = AXIS2_FALSE; + axis2_bool_t send_via_delete = AXIS2_FALSE; + axis2_bool_t doing_mtom = AXIS2_FALSE; + axiom_node_t *body_node = NULL; + axiom_node_t *data_out = NULL; + axutil_property_t *method = NULL; + axis2_char_t *method_value = NULL; + axiom_xml_writer_t *xml_writer = NULL; + axis2_char_t *buffer = NULL; + unsigned int buffer_size = 0; + int content_length = -1; + axis2_char_t *content_type = NULL; + axis2_char_t *content_len = AXIS2_HTTP_HEADER_CONTENT_LENGTH_; + const axis2_char_t *char_set_enc = NULL; + axis2_char_t *content = AXIS2_HTTP_HEADER_CONTENT_TYPE_; + axis2_char_t *soap_action_header = AXIS2_HTTP_HEADER_SOAP_ACTION_; + axutil_stream_t *in_stream; + axutil_property_t *trans_in_property; + axutil_string_t *char_set_enc_str; + axis2_byte_t *output_stream = NULL; + int output_stream_size = 0; + CURL *handler; + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + axis2_transport_out_desc_t *trans_desc = NULL; + axutil_param_t *write_xml_declaration_param = NULL; + axutil_hash_t *transport_attrs = NULL; + axis2_bool_t write_xml_declaration = AXIS2_FALSE; + axutil_property_t *property; + int *response_length = NULL; + axis2_http_status_line_t *status_line = NULL; + axis2_char_t *status_line_str = NULL; + axis2_char_t *tmp_strcat = NULL; + int status_code = 0; + + AXIS2_PARAM_CHECK(env->error, data, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, data->handler, AXIS2_FAILURE); + + handler = data->handler; + curl_easy_reset(handler); + curl_easy_setopt(handler, CURLOPT_ERRORBUFFER, &data->errorbuffer); + headers = curl_slist_append(headers, AXIS2_HTTP_HEADER_USER_AGENT_AXIS2C); + headers = curl_slist_append(headers, AXIS2_HTTP_HEADER_ACCEPT_); + headers = curl_slist_append(headers, AXIS2_HTTP_HEADER_EXPECT_); + + if(AXIS2_FAILURE == axis2_libcurl_set_options(handler, env, msg_ctx)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[axis2libcurl]Setting options in Libcurl failed"); + return AXIS2_FAILURE; + } + + if (AXIS2_TRUE == axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + { + is_soap = AXIS2_FALSE; + } + else + { + is_soap = AXIS2_TRUE; + } + + if (!is_soap) + { + soap_body = axiom_soap_envelope_get_body(out, env); + if (!soap_body) + { + AXIS2_HANDLE_ERROR(env, + AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + body_node = axiom_soap_body_get_base_node(soap_body, env); + if (!body_node) + { + AXIS2_HANDLE_ERROR(env, + AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL, + AXIS2_FAILURE); + + return AXIS2_FAILURE; + } + data_out = axiom_node_get_first_element(body_node, env); + + method = (axutil_property_t *) axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_HTTP_METHOD); + + if (method) + { + method_value = + (axis2_char_t *) axutil_property_get_value(method, env); + } + + /* The default is POST */ + if (method_value && 0 == axutil_strcmp(method_value, AXIS2_HTTP_GET)) + { + send_via_get = AXIS2_TRUE; + } + else if (method_value && 0 == axutil_strcmp(method_value, AXIS2_HTTP_HEAD)) + { + send_via_head = AXIS2_TRUE; + } + else if (method_value && 0 == axutil_strcmp(method_value, AXIS2_HTTP_PUT)) + { + send_via_put = AXIS2_TRUE; + } + else if (method_value && 0 == axutil_strcmp(method_value, AXIS2_HTTP_DELETE)) + { + send_via_delete = AXIS2_TRUE; + } + } + + conf_ctx = axis2_msg_ctx_get_conf_ctx (msg_ctx, env); + if (conf_ctx) + { + conf = axis2_conf_ctx_get_conf (conf_ctx, env); + } + + if (conf) + { + trans_desc = axis2_conf_get_transport_out (conf, + env, AXIS2_TRANSPORT_ENUM_HTTP); + } + + if (trans_desc) + { + write_xml_declaration_param = + axutil_param_container_get_param + (axis2_transport_out_desc_param_container (trans_desc, env), env, + AXIS2_XML_DECLARATION); + } + + if (write_xml_declaration_param) + { + transport_attrs = + axutil_param_get_attributes (write_xml_declaration_param, env); + if (transport_attrs) + { + axutil_generic_obj_t *obj = NULL; + axiom_attribute_t *write_xml_declaration_attr = NULL; + axis2_char_t *write_xml_declaration_attr_value = NULL; + + obj = axutil_hash_get (transport_attrs, AXIS2_ADD_XML_DECLARATION, + AXIS2_HASH_KEY_STRING); + if (obj) + { + write_xml_declaration_attr = (axiom_attribute_t *) + axutil_generic_obj_get_value (obj, + env); + } + if (write_xml_declaration_attr) + { + write_xml_declaration_attr_value = + axiom_attribute_get_value (write_xml_declaration_attr, env); + } + if (write_xml_declaration_attr_value && + 0 == axutil_strcasecmp (write_xml_declaration_attr_value, + AXIS2_VALUE_TRUE)) + { + write_xml_declaration = AXIS2_TRUE; + } + } + } + + if (write_xml_declaration) + { + axiom_output_write_xml_version_encoding (om_output, env); + } + + if (!send_via_get && !send_via_head && !send_via_delete) + { + xml_writer = axiom_output_get_xml_writer(om_output, env); + + char_set_enc_str = axis2_msg_ctx_get_charset_encoding(msg_ctx, env); + + if (!char_set_enc_str) + { + char_set_enc = AXIS2_DEFAULT_CHAR_SET_ENCODING; + } + else + { + char_set_enc = axutil_string_get_buffer(char_set_enc_str, env); + } + + if (!send_via_put && is_soap) + { + doing_mtom = axis2_msg_ctx_get_doing_mtom(msg_ctx, env); + + axiom_output_set_do_optimize(om_output, env, doing_mtom); + axiom_soap_envelope_serialize(out, env, om_output, AXIS2_FALSE); + if (AXIS2_TRUE == axis2_msg_ctx_get_is_soap_11(msg_ctx, env)) + { + if (AXIS2_ESC_DOUBLE_QUOTE != *soap_action) + { + axis2_char_t *tmp_soap_action = NULL; + tmp_soap_action = + AXIS2_MALLOC(env->allocator, + (axutil_strlen(soap_action) + + 5) * sizeof(axis2_char_t)); + sprintf(tmp_soap_action, "\"%s\"", soap_action); + tmp_strcat = axutil_stracat(env, soap_action_header,tmp_soap_action); + headers = curl_slist_append(headers, tmp_strcat); + AXIS2_FREE(env->allocator, tmp_strcat); + AXIS2_FREE(env->allocator, tmp_soap_action); + } + else + { + tmp_strcat = axutil_stracat(env, soap_action_header, soap_action); + headers = curl_slist_append(headers, tmp_strcat ); + AXIS2_FREE(env->allocator, tmp_strcat); + } + } + + if (doing_mtom) + { + /*axiom_output_flush(om_output, env, &output_stream, + &output_stream_size);*/ + axiom_output_flush(om_output, env); + content_type = + (axis2_char_t *) axiom_output_get_content_type(om_output, + env); + if (AXIS2_TRUE != axis2_msg_ctx_get_is_soap_11(msg_ctx, env)) + { + if (axutil_strcmp(soap_action, "")) + { + /* handle SOAP action for SOAP 1.2 case */ + axis2_char_t *temp_content_type = NULL; + temp_content_type = axutil_stracat (env, + content_type, + AXIS2_CONTENT_TYPE_ACTION); + content_type = temp_content_type; + temp_content_type = axutil_stracat (env, + content_type, + soap_action); + AXIS2_FREE (env->allocator, content_type); + content_type = temp_content_type; + temp_content_type = + axutil_stracat (env, content_type, + AXIS2_ESC_DOUBLE_QUOTE_STR); + AXIS2_FREE (env->allocator, content_type); + content_type = temp_content_type; + } + } + } + else if (AXIS2_TRUE == axis2_msg_ctx_get_is_soap_11(msg_ctx, env)) + { + axis2_char_t *temp_content_type = NULL; + content_type = + (axis2_char_t *) AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML; + content_type = axutil_stracat(env, content_type, + AXIS2_CONTENT_TYPE_CHARSET); + temp_content_type = + axutil_stracat(env, content_type, char_set_enc); + AXIS2_FREE(env->allocator, content_type); + content_type = temp_content_type; + } + else + { + axis2_char_t *temp_content_type = NULL; + content_type = + (axis2_char_t *) AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP; + content_type = axutil_stracat(env, content_type, + AXIS2_CONTENT_TYPE_CHARSET); + temp_content_type = + axutil_stracat(env, content_type, char_set_enc); + AXIS2_FREE(env->allocator, content_type); + content_type = temp_content_type; + if (axutil_strcmp(soap_action, "")) + { + temp_content_type = + axutil_stracat(env, content_type, + AXIS2_CONTENT_TYPE_ACTION); + AXIS2_FREE(env->allocator, content_type); + content_type = temp_content_type; + temp_content_type = + axutil_stracat(env, content_type, soap_action); + AXIS2_FREE(env->allocator, content_type); + content_type = temp_content_type; + } + temp_content_type = axutil_stracat(env, content_type, + AXIS2_SEMI_COLON_STR); + AXIS2_FREE(env->allocator, content_type); + content_type = temp_content_type; + } + } + else if (is_soap) + { + AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "Attempt to send SOAP" + "message using HTTP PUT failed"); + return AXIS2_FAILURE; + } + else + { + axutil_property_t *content_type_property = NULL; + axutil_hash_t *content_type_hash = NULL; + axis2_char_t *content_type_value = NULL; + + axiom_node_serialize(data_out, env, om_output); + content_type_property = + (axutil_property_t *) + axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_USER_DEFINED_HTTP_HEADER_CONTENT_TYPE); + + if (content_type_property) + { + content_type_hash = + (axutil_hash_t *) + axutil_property_get_value(content_type_property, env); + + if (content_type_hash) + { + content_type_value = + (char *) axutil_hash_get(content_type_hash, + AXIS2_HTTP_HEADER_CONTENT_TYPE, + AXIS2_HASH_KEY_STRING); + } + } + + if (content_type_value) + { + content_type = content_type_value; + } + else + { + content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML; + } + + } + + buffer = axiom_xml_writer_get_xml(xml_writer, env); + if (!doing_mtom) + { + buffer_size = axiom_xml_writer_get_xml_size(xml_writer, env); + } + else + buffer_size = output_stream_size; + { + char tmp_buf[10]; + sprintf(tmp_buf, "%d", buffer_size); + tmp_strcat = axutil_stracat(env, content_len, tmp_buf); + headers = curl_slist_append(headers, tmp_strcat); + AXIS2_FREE(env->allocator, tmp_strcat); + tmp_strcat = NULL; + + tmp_strcat = axutil_stracat(env, content, content_type); + headers = curl_slist_append(headers, tmp_strcat); + AXIS2_FREE(env->allocator, tmp_strcat); + tmp_strcat = NULL; + } + + if (!doing_mtom) + { + curl_easy_setopt(handler, CURLOPT_POSTFIELDSIZE, buffer_size); + curl_easy_setopt(handler, CURLOPT_POSTFIELDS, buffer); + } + else + { + curl_easy_setopt(handler, CURLOPT_POSTFIELDSIZE, + output_stream_size); + curl_easy_setopt(handler, CURLOPT_POSTFIELDS, output_stream); + } + + if (send_via_put) + { + curl_easy_setopt(handler, CURLOPT_CUSTOMREQUEST, AXIS2_HTTP_PUT); + } + curl_easy_setopt(handler, CURLOPT_URL, str_url); + } + else + { + axis2_char_t *request_param; + axis2_char_t *url_encode; + request_param = + (axis2_char_t *) axis2_http_sender_get_param_string(NULL, env, + msg_ctx); + url_encode = axutil_strcat(env, str_url, AXIS2_Q_MARK_STR, + request_param, NULL); + if (send_via_get) + { + curl_easy_setopt(handler, CURLOPT_HTTPGET, 1); + } + else if (send_via_head) + { + curl_easy_setopt(handler, CURLOPT_NOBODY, 1); + } + else if (send_via_delete) + { + curl_easy_setopt(handler, CURLOPT_CUSTOMREQUEST, AXIS2_HTTP_DELETE); + } + curl_easy_setopt(handler, CURLOPT_URL, url_encode); + } + + { + axis2_bool_t manage_session; + manage_session = axis2_msg_ctx_get_manage_session(msg_ctx, env); + if (manage_session == AXIS2_TRUE) + { + if (data->cookies == AXIS2_FALSE) + { + /* Ensure cookies enabled to manage session */ + /* Pass empty cookie string to enable cookies */ + curl_easy_setopt(handler, CURLOPT_COOKIEFILE, " "); + data->cookies = AXIS2_TRUE; + } + } + else if (data->cookies == AXIS2_TRUE) + { + /* Pass special string ALL to reset cookies if any have been enabled. */ + /* If cookies have ever been enabled, we reset every time as long as + manage_session is false, as there is no clear curl option to + turn off the cookie engine once enabled. */ + curl_easy_setopt(handler, CURLOPT_COOKIELIST, AXIS2_ALL); + } + } + + curl_easy_setopt(handler, CURLOPT_HTTPHEADER, headers); + curl_easy_setopt(handler, CURLOPT_WRITEFUNCTION, + axis2_libcurl_write_memory_callback); + curl_easy_setopt(handler, CURLOPT_WRITEDATA, data); + + curl_easy_setopt (handler, CURLOPT_HEADERFUNCTION, axis2_libcurl_header_callback); + + curl_easy_setopt (handler, CURLOPT_WRITEHEADER, data); + + /* Free response data from previous request */ + if( data->size ) + { + if (data->memory) + { + AXIS2_FREE(data->env->allocator, data->memory); + } + data->size = 0; + } + + if (curl_easy_perform(handler)) + { + AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "%s", &data->errorbuffer); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR, + AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + in_stream = axutil_stream_create_libcurl(env, data->memory, data->size); + trans_in_property = axutil_property_create(env); + axutil_property_set_scope(trans_in_property, env, AXIS2_SCOPE_REQUEST); + axutil_property_set_free_func(trans_in_property, env, + libcurl_stream_free); + axutil_property_set_value(trans_in_property, env, in_stream); + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_TRANSPORT_IN, + trans_in_property); + + if (axutil_array_list_size(data->alist, env) > 0) + { + status_line_str = axutil_array_list_get(data->alist, env, 0); + if (status_line_str) + { + status_line = axis2_http_status_line_create(env, status_line_str); + } + } + + if (status_line) + { + status_code = axis2_http_status_line_get_status_code(status_line, env); + } + + axis2_msg_ctx_set_status_code (msg_ctx, env, status_code); + AXIS2_FREE(data->env->allocator, content_type); + content_type = axis2_libcurl_get_content_type(data, env); + + if (content_type) + { + if (strstr (content_type, AXIS2_HTTP_HEADER_ACCEPT_MULTIPART_RELATED) + && strstr (content_type, AXIS2_HTTP_HEADER_ACCEPT_XOP_XML)) + { + axis2_ctx_t *axis_ctx = + axis2_op_ctx_get_base (axis2_msg_ctx_get_op_ctx (msg_ctx, env), + env); + property = axutil_property_create (env); + axutil_property_set_scope (property, env, AXIS2_SCOPE_REQUEST); + axutil_property_set_value (property, + env, axutil_strdup (env, content_type)); + axis2_ctx_set_property (axis_ctx, + env, MTOM_RECIVED_CONTENT_TYPE, property); + } + } + + content_length = axis2_libcurl_get_content_length(data, env); + if (content_length >= 0) + { + response_length = AXIS2_MALLOC (env->allocator, sizeof (int)); + memcpy (response_length, &content_length, sizeof (int)); + property = axutil_property_create (env); + axutil_property_set_scope (property, env, AXIS2_SCOPE_REQUEST); + axutil_property_set_value (property, env, response_length); + axis2_msg_ctx_set_property (msg_ctx, env, + AXIS2_HTTP_HEADER_CONTENT_LENGTH, property); + } + + curl_slist_free_all (headers); + /* release the read http headers. */ + /* (commenting out the call below is a clever way to force a premature EOF + condition in subsequent messages, as they will be read using the content-length + of the first message.) */ + axis2_libcurl_free_headers(data, env); + AXIS2_FREE(data->env->allocator, content_type); + axis2_http_status_line_free( status_line, env); + + return AXIS2_SUCCESS; +} + +static size_t +axis2_libcurl_write_memory_callback( + void *ptr, + size_t size, + size_t nmemb, + void *data) +{ + size_t realsize = size * nmemb; + axis2_libcurl_t *curl = (axis2_libcurl_t *) data; + axis2_char_t *buffer = + (axis2_char_t *) AXIS2_MALLOC(curl->env->allocator, + curl->size + realsize + 1); + if (buffer) + { + if (curl->size) + { + memcpy(&(buffer[0]), curl->memory, curl->size); + AXIS2_FREE(curl->env->allocator, curl->memory); + } + + memcpy(&(buffer[curl->size]), ptr, realsize); + curl->size += (int)realsize; + /* We are sure that the difference lies within the int range */ + buffer[curl->size] = 0; + curl->memory = buffer; + } + return realsize; +} + +static size_t +axis2_libcurl_header_callback( + void *ptr, + size_t size, + size_t nmemb, + void *data) +{ + axis2_char_t *memory; + size_t realsize = size * nmemb; + axis2_libcurl_t *curl = (axis2_libcurl_t *) data; + memory = (axis2_char_t *)AXIS2_MALLOC(curl->env->allocator, realsize + 1); + if (memory) + { + memcpy(&(memory[0]), ptr, realsize); + memory[realsize] = 0; + axutil_array_list_add(curl->alist, curl->env, memory); + } + return realsize; +} + +axis2_libcurl_t * AXIS2_CALL +axis2_libcurl_create( + const axutil_env_t * env) +{ + axis2_libcurl_t *curl = NULL; + CURLcode code; + + if (!ref) + { + /* curl_global_init is not thread-safe so it would be better + to do this, as well as the test and increment of ref, under + mutex if one is available, or as part of an + axis2_initialize() if a global initialize is created. + Otherwise the client application should perform the the + curl_global_init itself in a thread-safe fashion. + */ + code = curl_global_init(CURL_GLOBAL_ALL); + if (code) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "libcurl curl_global_init failed, error: %d", code); + return NULL; + } + ref++; + } + + curl = + (axis2_libcurl_t *) AXIS2_MALLOC(env->allocator, + sizeof(axis2_libcurl_t)); + if (curl) + { + curl->memory = 0; + curl->size = 0; + curl->alist = axutil_array_list_create(env, 15); + curl->env = env; + curl->handler = curl_easy_init(); + curl->cookies = AXIS2_FALSE; + if ((!curl->alist) || (!curl->handler)) + { + axis2_libcurl_free(curl, env); + curl = 0; + } + } + return curl; +} + +void AXIS2_CALL +axis2_libcurl_free( + axis2_libcurl_t *curl, + const axutil_env_t * env) +{ + if (!curl) + { + return; + } + + if (curl->handler) + { + curl_easy_cleanup (curl->handler); + } + if (curl->alist) + { + axis2_libcurl_free_headers(curl, env); + axutil_array_list_free(curl->alist, env); + curl->alist = NULL; + } + if (curl->memory) + { + AXIS2_FREE(env->allocator, curl->memory); + } + + AXIS2_FREE(env->allocator, curl); +} + +static void +axis2_libcurl_free_headers( + axis2_libcurl_t *curl, + const axutil_env_t * env) +{ + int count = 0; + axutil_array_list_t *header_group = curl->alist; + if (header_group) + { + while ((count = axutil_array_list_size(header_group, env)) > 0) + { + axis2_char_t *header = axutil_array_list_remove(header_group, env, count-1); + AXIS2_FREE(env->allocator, header); + } + } +} + +static axis2_http_header_t * +axis2_libcurl_get_first_header( + axis2_libcurl_t *curl, + const axutil_env_t * env, + const axis2_char_t * str) +{ + axis2_http_header_t *tmp_header = NULL; + axis2_char_t *tmp_header_str = NULL; + axis2_char_t *tmp_name = NULL; + int i = 0; + int count = 0; + axutil_array_list_t *header_group = NULL; + + AXIS2_PARAM_CHECK(env->error, curl, NULL); + AXIS2_PARAM_CHECK(env->error, str, NULL); + + header_group = curl->alist; + if (!header_group) + { + return NULL; + } + + if (0 == axutil_array_list_size(header_group, env)) + { + return NULL; + } + + count = axutil_array_list_size(header_group, env); + + for (i = 0; i < count; i++) + { + tmp_header_str = (axis2_char_t *) axutil_array_list_get(header_group, + env, i); + if(!tmp_header_str) + { + continue; + } + tmp_header = (axis2_http_header_t *) axis2_http_header_create_by_str(env, tmp_header_str); + if(!tmp_header) + { + continue; + } + + tmp_name = axis2_http_header_get_name(tmp_header, env); + if (0 == axutil_strcasecmp(str, tmp_name)) + { + return tmp_header; + } + else + { + axis2_http_header_free( tmp_header, env ); + } + + } + return NULL; +} + +static int +axis2_libcurl_get_content_length( + axis2_libcurl_t *curl, + const axutil_env_t * env) +{ + axis2_http_header_t *tmp_header; + int rtn_value = -1; + + tmp_header = axis2_libcurl_get_first_header + (curl, env, AXIS2_HTTP_HEADER_CONTENT_LENGTH); + if (tmp_header) + { + rtn_value = AXIS2_ATOI(axis2_http_header_get_value(tmp_header, env)); + axis2_http_header_free( tmp_header, env ); + } + return rtn_value; +} + +static axis2_char_t * +axis2_libcurl_get_content_type( + axis2_libcurl_t *curl, + const axutil_env_t * env) +{ + axis2_http_header_t *tmp_header; + axis2_char_t *rtn_value = NULL; + + tmp_header = axis2_libcurl_get_first_header + (curl, env, AXIS2_HTTP_HEADER_CONTENT_TYPE); + if (tmp_header) + { + rtn_value = axutil_strdup (env, axis2_http_header_get_value(tmp_header, env) ); + axis2_http_header_free( tmp_header, env ); + } + else + { + rtn_value = axutil_strdup (env, AXIS2_HTTP_HEADER_ACCEPT_TEXT_PLAIN); + } + + return rtn_value; +} + +/** + * axis2_libcurl_set_auth_options maps authentication AXIS2/C options to + * libcURL options. + * + * CURLOPT_USERPWD - char * user:password for authentication + * CURLOPT_HTTPAUTH - long bitmask which authentication methods to use + */ +static axis2_status_t +axis2_libcurl_set_auth_options( + CURL *handler, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axutil_property_t *property = NULL; + axis2_char_t *uname = NULL; + axis2_char_t *passwd = NULL; + axis2_char_t *auth_type = NULL; + + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HTTP_AUTH_UNAME); + if (property) + { + uname = (axis2_char_t *) axutil_property_get_value(property, env); + } + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HTTP_AUTH_PASSWD); + if (property) + { + passwd = (axis2_char_t *) axutil_property_get_value(property, env); + } + if (uname && passwd) + { + axis2_char_t buffer[256]; + strncpy(buffer, uname, 256); + strncat(buffer, ":", 256); + strncat(buffer, passwd, 256); + curl_easy_setopt(handler, CURLOPT_USERPWD, buffer); + } + + property = (axutil_property_t *)axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HTTP_AUTH_TYPE); + + if (property) + { + auth_type = (axis2_char_t *) axutil_property_get_value(property, env); + } + + if (auth_type && 0 == axutil_strcmp(auth_type, AXIS2_HTTP_AUTH_TYPE_BASIC)) + { + curl_easy_setopt(handler, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); + } + else + { + /* Uses anonymous connection.*/ + } + + return AXIS2_SUCCESS; +} + +/** + * axis2_libcurl_set_proxy_options maps proxy AXIS2/C options to + * libcURL options. + * + * CURLOPT_PROXY - char * proxy hostname + * CURLOPT_PROXYPORT - long proxy listen port + * CURLOPT_PROXYUSERPWD - char * user:password to authenticate to proxy + * + * TODO: + * CURLOPT_PROXYTYPE - long enum type of proxy (HTTP, SOCKS) + * CURLOPT_PROXYAUTH - long bitmask which authentication methods to use for proxy + */ +static axis2_status_t +axis2_libcurl_set_proxy_options( + CURL *handler, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + axis2_transport_out_desc_t *trans_desc = NULL; + axutil_param_t *proxy_param = NULL; + axutil_hash_t *transport_attrs = NULL; + axutil_property_t *property = NULL; + axis2_char_t *uname = NULL; + axis2_char_t *passwd = NULL; + axis2_char_t *proxy_host = NULL; + axis2_char_t *proxy_port = NULL; + + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_PROXY_AUTH_UNAME); + if (property) + { + uname = (axis2_char_t *) axutil_property_get_value(property, env); + } + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_PROXY_AUTH_PASSWD); + if (property) + { + passwd = (axis2_char_t *) axutil_property_get_value(property, env); + } + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if (conf_ctx) + { + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + if (conf) + { + trans_desc = axis2_conf_get_transport_out(conf, env, AXIS2_TRANSPORT_ENUM_HTTP); + } + } + if (trans_desc) + { + proxy_param = axutil_param_container_get_param( + axis2_transport_out_desc_param_container(trans_desc, env), env, AXIS2_HTTP_PROXY_API); + if (!proxy_param) + { + proxy_param = axutil_param_container_get_param( + axis2_transport_out_desc_param_container(trans_desc, env), env, AXIS2_HTTP_PROXY); + } + if (proxy_param) + { + transport_attrs = axutil_param_get_attributes(proxy_param, env); + } + } + + if (transport_attrs) + { + axutil_generic_obj_t *obj = NULL; + axiom_attribute_t *attr = NULL; + + if (!uname || !passwd) + { + obj = axutil_hash_get(transport_attrs, AXIS2_HTTP_PROXY_USERNAME, AXIS2_HASH_KEY_STRING); + if (obj) + { + attr = (axiom_attribute_t *) axutil_generic_obj_get_value(obj, env); + } + if (attr) + { + uname = axiom_attribute_get_value(attr, env); + } + + attr = NULL; + obj = axutil_hash_get(transport_attrs, AXIS2_HTTP_PROXY_PASSWORD, AXIS2_HASH_KEY_STRING); + if (obj) + { + attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, env); + } + if (attr) + { + passwd = axiom_attribute_get_value(attr, env); + } + } + + obj = axutil_hash_get(transport_attrs, AXIS2_HTTP_PROXY_HOST, AXIS2_HASH_KEY_STRING); + if (obj) + { + attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, env); + } + if (attr) + { + proxy_host = axiom_attribute_get_value(attr, env); + } + if (proxy_host) + { + curl_easy_setopt(handler, CURLOPT_PROXY, proxy_host); + } + + attr = NULL; + obj = axutil_hash_get(transport_attrs, AXIS2_HTTP_PROXY_PORT, AXIS2_HASH_KEY_STRING); + if (obj) + { + attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, env); + } + if (attr) + { + proxy_port = axiom_attribute_get_value(attr, env); + } + if (proxy_port) + { + curl_easy_setopt(handler, CURLOPT_PROXYPORT, AXIS2_ATOI(proxy_port)); + } + } + if (uname && passwd) + { + axis2_char_t buffer[256]; + strncpy(buffer, uname, 256); + strncat(buffer, ":", 256); + strncat(buffer, passwd, 256); + curl_easy_setopt(handler, CURLOPT_PROXYUSERPWD, buffer); + } + + return AXIS2_SUCCESS; +} + +/** + * axis2_libcurl_set_ssl_options maps SSL AXIS2/C options to + * libcURL options. + * + * CURLOPT_SSL_VERIFYHOST - long enum whether to verify the server identity + * CURLOPT_SSL_VERIFYPEER - long boolean whether to verify the server certificate + */ +static axis2_status_t +axis2_libcurl_set_ssl_options( + CURL *handler, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axutil_property_t *property = NULL; + axis2_char_t *verify_peer = NULL; + axis2_char_t *verify_host = NULL; + + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_SSL_VERIFY_PEER); + if (property) + { + verify_peer = (axis2_char_t *)axutil_property_get_value(property, env); + } + if (verify_peer) + { + if (0 == axutil_strcasecmp(verify_peer, AXIS2_VALUE_TRUE)) + { + curl_easy_setopt(handler, CURLOPT_SSL_VERIFYPEER, 1); + } + else + { + curl_easy_setopt(handler, CURLOPT_SSL_VERIFYPEER, 0); + } + } + + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_SSL_VERIFY_HOST); + if (property) + { + verify_host = (axis2_char_t *)axutil_property_get_value(property, env); + } + if (verify_host) + { + curl_easy_setopt(handler, CURLOPT_SSL_VERIFYHOST, AXIS2_ATOI(verify_host)); + } + + return AXIS2_SUCCESS; +} + +/** + * axis2_libcurl_set_connection_options maps connection AXIS2/C options to + * libcURL options. + * CURLOPT_CONNECTTIMEOUT_MS - long connection timeout in milliseconds + * CURLOPT_TIMEOUT_MS - long transfer timeout in milliseconds + */ +static axis2_status_t +axis2_libcurl_set_connection_options( + CURL *handler, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axutil_property_t *property = NULL; + long long_property_value = 0; + + /* check if timeout has been set by user using options + * with axis2_options_set_timeout_in_milli_seconds + */ + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HTTP_CONNECTION_TIMEOUT); + if (property) + { + axis2_char_t *value = axutil_property_get_value(property, env); + if (value) + { + long_property_value = AXIS2_ATOI(value); + curl_easy_setopt(handler, CURLOPT_CONNECTTIMEOUT_MS, long_property_value); + } + } + + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HTTP_SO_TIMEOUT); + if (property) + { + axis2_char_t *value = axutil_property_get_value(property, env); + if (value) + { + long_property_value = AXIS2_ATOI(value); + curl_easy_setopt(handler, CURLOPT_TIMEOUT_MS, long_property_value); + } + } + + return AXIS2_SUCCESS; +} + +/** + * axis2_libcurl_set_options maps the AXIS2/C options to libcURL options. + */ +static axis2_status_t +axis2_libcurl_set_options( + CURL *handler, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + if (axis2_libcurl_set_auth_options(handler, env, msg_ctx) != AXIS2_SUCCESS) + { + return AXIS2_FAILURE; + } + + if (axis2_libcurl_set_proxy_options(handler, env, msg_ctx) != AXIS2_SUCCESS) + { + return AXIS2_FAILURE; + } + + if (axis2_libcurl_set_ssl_options(handler, env, msg_ctx) != AXIS2_SUCCESS) + { + return AXIS2_FAILURE; + } + + if (axis2_libcurl_set_connection_options(handler, env, msg_ctx) != AXIS2_SUCCESS) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + + +#endif /* AXIS2_LIBCURL_ENABLED */ + diff --git a/src/core/transport/http/sender/libcurl/axis2_libcurl.h b/src/core/transport/http/sender/libcurl/axis2_libcurl.h new file mode 100644 index 0000000..f2971e5 --- /dev/null +++ b/src/core/transport/http/sender/libcurl/axis2_libcurl.h @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_LIBCURL_H +#define AXIS2_LIBCURL_H +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* typedef struct axis2_libcurl axis2_libcurl_t; */ +/* actually defined in axis2_http_sender.h as it is part of axis2/include */ + +AXIS2_EXTERN axis2_libcurl_t *AXIS2_CALL +axis2_libcurl_create( + const axutil_env_t * env); + +AXIS2_EXTERN void AXIS2_CALL +axis2_libcurl_free( + axis2_libcurl_t *data, + const axutil_env_t * env); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_libcurl_send( + axis2_libcurl_t *data, + axiom_output_t * om_output, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axiom_soap_envelope_t * out, + const axis2_char_t * str_url, + const axis2_char_t * soap_action); + +#endif /* AXIS2_LIBCURL_H */ diff --git a/src/core/transport/http/sender/libcurl/libcurl_stream.c b/src/core/transport/http/sender/libcurl/libcurl_stream.c new file mode 100644 index 0000000..0c9126d --- /dev/null +++ b/src/core/transport/http/sender/libcurl/libcurl_stream.c @@ -0,0 +1,192 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifdef AXIS2_LIBCURL_ENABLED + +#include "libcurl_stream.h" +#include + +typedef struct libcurl_stream_impl +{ + axutil_stream_t stream; + axutil_stream_type_t stream_type; + axis2_char_t *buffer; + int size; + int read_len; +} +libcurl_stream_impl_t; + +#define AXIS2_INTF_TO_IMPL(stream) ((libcurl_stream_impl_t *)(stream)) + +/********************************Function headers******************************/ +axutil_stream_type_t AXIS2_CALL libcurl_stream_get_type( + axutil_stream_t * stream, + const axutil_env_t * env); + +int AXIS2_CALL libcurl_stream_write( + axutil_stream_t * stream, + const axutil_env_t * env, + const void *buffer, + size_t count); + +int AXIS2_CALL libcurl_stream_read( + axutil_stream_t * stream, + const axutil_env_t * env, + void *buffer, + size_t count); + +int AXIS2_CALL libcurl_stream_skip( + axutil_stream_t * stream, + const axutil_env_t * env, + int count); + +int AXIS2_CALL libcurl_stream_get_char( + axutil_stream_t * stream, + const axutil_env_t * env); + +/************************* End of function headers ****************************/ + +/* + * Internal function. Not exposed to outside + */ +AXIS2_EXTERN axutil_stream_t *AXIS2_CALL +axutil_stream_create_libcurl( + const axutil_env_t * env, + axis2_char_t * buffer, + unsigned int size) +{ + libcurl_stream_impl_t *stream_impl = NULL; + + AXIS2_PARAM_CHECK(env->error, buffer, NULL); + + stream_impl = + (libcurl_stream_impl_t *) AXIS2_MALLOC(env->allocator, + sizeof(libcurl_stream_impl_t)); + + if (!stream_impl) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + stream_impl->buffer = buffer; + stream_impl->size = size; + stream_impl->read_len = 0; + stream_impl->stream_type = AXIS2_STREAM_MANAGED; + + axutil_stream_set_read(&(stream_impl->stream), env, libcurl_stream_read); + axutil_stream_set_write(&(stream_impl->stream), env, libcurl_stream_write); + axutil_stream_set_skip(&(stream_impl->stream), env, libcurl_stream_skip); + + return &(stream_impl->stream); +} + +void AXIS2_CALL +libcurl_stream_free( + void * stream, + const axutil_env_t * env) +{ + libcurl_stream_impl_t *stream_impl = NULL; + + stream_impl = AXIS2_INTF_TO_IMPL(stream); + AXIS2_FREE(env->allocator, stream_impl); + + return; +} + +int AXIS2_CALL +libcurl_stream_read( + axutil_stream_t * stream, + const axutil_env_t * env, + void *buffer, + size_t count) +{ + libcurl_stream_impl_t *stream_impl = NULL; + int read = 0; + int unread = 0; + + stream_impl = AXIS2_INTF_TO_IMPL(stream); + if (stream_impl->size >= (int)count) + /* We are sure that the difference lies within the int range */ + { + if (buffer && (stream_impl->size > stream_impl->read_len)) + { + unread = (stream_impl->size - stream_impl->read_len); + if (unread > (int)count) + /* We are sure that the difference lies within the int range */ + { + memcpy(buffer, &stream_impl->buffer[stream_impl->read_len], + count); + read = (int)count; + /* We are sure that the difference lies within the int range */ + stream_impl->read_len += read; + } + else + { + memcpy(buffer, &stream_impl->buffer[stream_impl->read_len], + unread); + read = unread; + stream_impl->read_len += read; + } + } + else + read = 0; + } + else + { + if (buffer && (stream_impl->size > stream_impl->read_len)) + { + memcpy(buffer, &stream_impl->buffer[stream_impl->read_len], + stream_impl->size - stream_impl->read_len); + read = stream_impl->size - stream_impl->read_len; + stream_impl->read_len += read; + } + else + read = 0; + } + return read; +} + +int AXIS2_CALL +libcurl_stream_write( + axutil_stream_t * stream, + const axutil_env_t * env, + const void *buffer, + size_t count) +{ + return (int)count; + /* We are sure that the difference lies within the int range */ +} + +int AXIS2_CALL +libcurl_stream_skip( + axutil_stream_t * stream, + const axutil_env_t * env, + int count) +{ + return 0; +} + +int AXIS2_CALL +libcurl_stream_get_char( + axutil_stream_t * stream, + const axutil_env_t * env) +{ + return 0; +} + +#endif /* AXIS2_LIBCURL_ENABLED */ + diff --git a/src/core/transport/http/sender/libcurl/libcurl_stream.h b/src/core/transport/http/sender/libcurl/libcurl_stream.h new file mode 100644 index 0000000..8a24fcc --- /dev/null +++ b/src/core/transport/http/sender/libcurl/libcurl_stream.h @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef LIBCURL_STREAM_H +#define LIBCURL_STREAM_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** brief Constructor for creating apche2 stream + * @return axutil_stream (libcurl) + */ + AXIS2_EXTERN axutil_stream_t *AXIS2_CALL + axutil_stream_create_libcurl( + const axutil_env_t * env, + axis2_char_t * buffer, + unsigned int size); + + /** @} */ + + void AXIS2_CALL libcurl_stream_free( + void * stream, + const axutil_env_t * env); + + +#ifdef __cplusplus +} +#endif + +#endif /* LIBCURL_STREAM_H */ diff --git a/src/core/transport/http/sender/ssl/Makefile.am b/src/core/transport/http/sender/ssl/Makefile.am new file mode 100644 index 0000000..3e457e5 --- /dev/null +++ b/src/core/transport/http/sender/ssl/Makefile.am @@ -0,0 +1,2 @@ +EXTRA_DIST= ssl_stream.c ssl_stream.h ssl_utils.c ssl_utils.h + diff --git a/src/core/transport/http/sender/ssl/ssl_stream.c b/src/core/transport/http/sender/ssl/ssl_stream.c new file mode 100644 index 0000000..9360f1a --- /dev/null +++ b/src/core/transport/http/sender/ssl/ssl_stream.c @@ -0,0 +1,239 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifdef AXIS2_SSL_ENABLED + +#include +#include +#include "ssl_stream.h" +#include "ssl_utils.h" + +/** + * @brief Stream struct impl + * Streaming mechanisms for SSL + */ +typedef struct ssl_stream_impl ssl_stream_impl_t; + +struct ssl_stream_impl +{ + axutil_stream_t stream; + axutil_stream_type_t stream_type; + SSL *ssl; + SSL_CTX *ctx; + axis2_socket_t socket; +}; + +#define AXIS2_INTF_TO_IMPL(stream) ((ssl_stream_impl_t *)(stream)) + +void AXIS2_CALL axis2_ssl_stream_free( + axutil_stream_t * stream, + const axutil_env_t * env); + +axutil_stream_type_t AXIS2_CALL axis2_ssl_stream_get_type( + axutil_stream_t * stream, + const axutil_env_t * env); + +int AXIS2_CALL axis2_ssl_stream_write( + axutil_stream_t * stream, + const axutil_env_t * env, + const void *buffer, + size_t count); + +int AXIS2_CALL axis2_ssl_stream_read( + axutil_stream_t * stream, + const axutil_env_t * env, + void *buffer, + size_t count); + +int AXIS2_CALL axis2_ssl_stream_skip( + axutil_stream_t * stream, + const axutil_env_t * env, + int count); + +int AXIS2_CALL axis2_ssl_stream_get_char( + axutil_stream_t * stream, + const axutil_env_t * env); + +AXIS2_EXTERN axutil_stream_t *AXIS2_CALL +axutil_stream_create_ssl( + const axutil_env_t * env, + axis2_socket_t socket, + axis2_char_t * server_cert, + axis2_char_t * key_file, + axis2_char_t * ssl_pp) +{ + ssl_stream_impl_t *stream_impl = NULL; + + stream_impl = + (ssl_stream_impl_t *) AXIS2_MALLOC(env->allocator, + sizeof(ssl_stream_impl_t)); + + if (!stream_impl) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + memset ((void *)stream_impl, 0, sizeof (ssl_stream_impl_t)); + stream_impl->socket = socket; + stream_impl->ctx = NULL; + stream_impl->ssl = NULL; + + stream_impl->ctx = axis2_ssl_utils_initialize_ctx(env, server_cert, + key_file, ssl_pp); + if (!stream_impl->ctx) + { + axis2_ssl_stream_free((axutil_stream_t *) stream_impl, env); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SSL_ENGINE, AXIS2_FAILURE); + return NULL; + } + stream_impl->ssl = axis2_ssl_utils_initialize_ssl(env, stream_impl->ctx, + stream_impl->socket); + if (!stream_impl->ssl) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SSL_ENGINE, AXIS2_FAILURE); + return NULL; + } + stream_impl->stream_type = AXIS2_STREAM_MANAGED; + + axutil_stream_set_read(&(stream_impl->stream), env, axis2_ssl_stream_read); + axutil_stream_set_write(&(stream_impl->stream), env, + axis2_ssl_stream_write); + axutil_stream_set_skip(&(stream_impl->stream), env, axis2_ssl_stream_skip); + + return &(stream_impl->stream); +} + +void AXIS2_CALL +axis2_ssl_stream_free( + axutil_stream_t * stream, + const axutil_env_t * env) +{ + ssl_stream_impl_t *stream_impl = NULL; + + stream_impl = AXIS2_INTF_TO_IMPL(stream); + axis2_ssl_utils_cleanup_ssl(env, stream_impl->ctx, stream_impl->ssl); + AXIS2_FREE(env->allocator, stream_impl); + + return; +} + +int AXIS2_CALL +axis2_ssl_stream_read( + axutil_stream_t * stream, + const axutil_env_t * env, + void *buffer, + size_t count) +{ + ssl_stream_impl_t *stream_impl = NULL; + int read = -1; + int len = -1; + + stream_impl = AXIS2_INTF_TO_IMPL(stream); + + SSL_set_mode(stream_impl->ssl, SSL_MODE_AUTO_RETRY); + + read = SSL_read(stream_impl->ssl, buffer, (int)count); + /* We are sure that the difference lies within the int range */ + switch (SSL_get_error(stream_impl->ssl, read)) + { + case SSL_ERROR_NONE: + len = read; + break; + case SSL_ERROR_ZERO_RETURN: + len = -1; + break; + case SSL_ERROR_SYSCALL: + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "SSL Error: Premature close"); + len = -1; + break; + default: + len = -1; + break; + } + return len; +} + +int AXIS2_CALL +axis2_ssl_stream_write( + axutil_stream_t * stream, + const axutil_env_t * env, + const void *buf, + size_t count) +{ + ssl_stream_impl_t *stream_impl = NULL; + int write = -1; + + AXIS2_PARAM_CHECK(env->error, buf, AXIS2_FAILURE); + stream_impl = AXIS2_INTF_TO_IMPL(stream); + write = SSL_write(stream_impl->ssl, buf, (int)count); + /* We are sure that the difference lies within the int range */ + + switch (SSL_get_error(stream_impl->ssl, write)) + { + case SSL_ERROR_NONE: + if ((int)count != write) + /* We are sure that the difference lies within the int range */ + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Incomplete SSL write!"); + break; + default: + return -1; + } + return write; +} + +int AXIS2_CALL +axis2_ssl_stream_skip( + axutil_stream_t * stream, + const axutil_env_t * env, + int count) +{ + ssl_stream_impl_t *stream_impl = NULL; + axis2_char_t *tmp_buffer = NULL; + int len = -1; + stream_impl = AXIS2_INTF_TO_IMPL(stream); + + tmp_buffer = AXIS2_MALLOC(env->allocator, count * sizeof(axis2_char_t)); + if (tmp_buffer == NULL) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return -1; + } + len = SSL_read(stream_impl->ssl, tmp_buffer, count); + AXIS2_FREE(env->allocator, tmp_buffer); + return len; + +} + +int AXIS2_CALL +axis2_ssl_stream_get_char( + axutil_stream_t * stream, + const axutil_env_t * env) +{ + int ret = -1; + + return ret; +} + +axutil_stream_type_t AXIS2_CALL +axis2_ssl_stream_get_type( + axutil_stream_t * stream, + const axutil_env_t * env) +{ + return AXIS2_INTF_TO_IMPL(stream)->stream_type; +} + +#endif + diff --git a/src/core/transport/http/sender/ssl/ssl_stream.h b/src/core/transport/http/sender/ssl/ssl_stream.h new file mode 100644 index 0000000..396da5d --- /dev/null +++ b/src/core/transport/http/sender/ssl/ssl_stream.h @@ -0,0 +1,50 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain count copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_SSL_STREAM_H +#define AXIS2_SSL_STREAM_H + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** \brief Constructor for creating ssl stream + * @return axutil_stream (ssl) + */ + AXIS2_EXTERN axutil_stream_t *AXIS2_CALL + axutil_stream_create_ssl( + const axutil_env_t * env, + axis2_socket_t socket, + axis2_char_t * server_cert, + axis2_char_t * key_file, + axis2_char_t * ssl_pp); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_SSL_STREAM_H */ diff --git a/src/core/transport/http/sender/ssl/ssl_utils.c b/src/core/transport/http/sender/ssl/ssl_utils.c new file mode 100644 index 0000000..d565555 --- /dev/null +++ b/src/core/transport/http/sender/ssl/ssl_utils.c @@ -0,0 +1,227 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifdef AXIS2_SSL_ENABLED + +#include "ssl_utils.h" +#include +BIO *bio_err = 0; + +static int +password_cb( + char *buf, + int size, + int rwflag, + void *passwd) +{ + strncpy(buf, (char *) passwd, size); + buf[size - 1] = '\0'; + return (int)(strlen(buf)); + /* We are sure that the difference lies within the int range */ +} + +AXIS2_EXTERN SSL_CTX *AXIS2_CALL +axis2_ssl_utils_initialize_ctx( + const axutil_env_t * env, + axis2_char_t * server_cert, + axis2_char_t * key_file, + axis2_char_t * ssl_pp) +{ + SSL_METHOD *meth = NULL; + SSL_CTX *ctx = NULL; + axis2_char_t *ca_file = server_cert; + + if (!ca_file) + { + AXIS2_LOG_INFO(env->log, "[ssl client] CA certificate not specified"); + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SSL_NO_CA_FILE, AXIS2_FAILURE); + return NULL; + } + + if (!bio_err) + { + /* Global system initialization */ + SSL_library_init(); + SSL_load_error_strings(); + + /* An error write context */ + bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); + } + + /* Create our context */ + meth = SSLv23_method(); + ctx = SSL_CTX_new(meth); + + /* Load our keys and certificates + * If we need client certificates it has to be done here + */ + if (key_file) /*can we check if the server needs client auth? */ + { + if (!ssl_pp) + { + AXIS2_LOG_INFO(env->log, + "[ssl client] No passphrase specified for \ +key file %s and server cert %s", key_file, server_cert); + } + + SSL_CTX_set_default_passwd_cb_userdata(ctx, (void *) ssl_pp); + SSL_CTX_set_default_passwd_cb(ctx, password_cb); + + if (!(SSL_CTX_use_certificate_chain_file(ctx, key_file))) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[ssl client] Loading client certificate failed \ +, key file %s", key_file); + SSL_CTX_free(ctx); + return NULL; + } + + if (!(SSL_CTX_use_PrivateKey_file(ctx, key_file, SSL_FILETYPE_PEM))) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[ssl client] Loading client key failed, key file \ +%s", key_file); + SSL_CTX_free(ctx); + return NULL; + } + } + else + { + AXIS2_LOG_INFO(env->log, + "[ssl client] Client certificate chain file" + "not specified"); + } + + /* Load the CAs we trust */ + if (!(SSL_CTX_load_verify_locations(ctx, ca_file, 0))) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[ssl client] Loading CA certificate failed, \ +ca_file is %s", ca_file); + SSL_CTX_free(ctx); + return NULL; + } + + return ctx; +} + +AXIS2_EXTERN SSL *AXIS2_CALL +axis2_ssl_utils_initialize_ssl( + const axutil_env_t * env, + SSL_CTX * ctx, + axis2_socket_t socket) +{ + SSL *ssl = NULL; + BIO *sbio = NULL; + + AXIS2_PARAM_CHECK(env->error, ctx, NULL); + + ssl = SSL_new(ctx); + if (!ssl) + { + AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, + "[ssl]unable to create new ssl context"); + return NULL; + } + + sbio = BIO_new_socket((int)socket, BIO_NOCLOSE); + if (!sbio) + { + AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, + "[ssl]unable to create BIO new socket for socket %d", + (int)socket); + return NULL; + } + + SSL_set_bio(ssl, sbio, sbio); + if (SSL_connect(ssl) <= 0) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SSL_ENGINE, AXIS2_FAILURE); + return NULL; + } + + if (SSL_get_verify_result(ssl) != X509_V_OK) + { + char sslerror[128]; /** error buffer must be at least 120 bytes long */ + X509 *peer_cert = NULL; + X509_STORE *cert_store = NULL; + X509_NAME *peer_name = NULL; + X509_OBJECT *client_object = NULL; + X509 *client_cert = NULL; + + peer_cert = SSL_get_peer_certificate(ssl); + if (peer_cert && peer_cert->cert_info) + { + peer_name = (peer_cert->cert_info)->subject; + } + + cert_store = SSL_CTX_get_cert_store(ctx); + if (peer_name && cert_store) + { + client_object = X509_OBJECT_retrieve_by_subject(cert_store->objs, + X509_LU_X509, + peer_name); + } + if (client_object) + { + client_cert = (client_object->data).x509; + if (client_cert && + (M_ASN1_BIT_STRING_cmp(client_cert->signature, + peer_cert->signature) == 0)) + { + if (peer_cert) + { + X509_free(peer_cert); + } + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "[ssl client] SSL certificate verified against peer"); + return ssl; + } + } + if (peer_cert) + { + X509_free(peer_cert); + } + ERR_error_string(SSL_get_verify_result(ssl), sslerror); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[ssl client] SSL certificate verification failed (%s)", + sslerror); + return NULL; + } + + return ssl; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_ssl_utils_cleanup_ssl( + const axutil_env_t * env, + SSL_CTX * ctx, + SSL * ssl) +{ + + if (ssl) + { + SSL_shutdown(ssl); + } + if (ctx) + { + SSL_CTX_free(ctx); + } + return AXIS2_SUCCESS; +} + +#endif + diff --git a/src/core/transport/http/sender/ssl/ssl_utils.h b/src/core/transport/http/sender/ssl/ssl_utils.h new file mode 100644 index 0000000..26dc16b --- /dev/null +++ b/src/core/transport/http/sender/ssl/ssl_utils.h @@ -0,0 +1,56 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_SSL_UTILS_H +#define AXIS2_SSL_UTILS_H + + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN SSL_CTX *AXIS2_CALL + axis2_ssl_utils_initialize_ctx( + const axutil_env_t * env, + axis2_char_t * server_cert, + axis2_char_t * key_file, + axis2_char_t * ssl_pp); + + AXIS2_EXTERN SSL *AXIS2_CALL + axis2_ssl_utils_initialize_ssl( + const axutil_env_t * env, + SSL_CTX * ctx, + axis2_socket_t socket); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_ssl_utils_cleanup_ssl( + const axutil_env_t * env, + SSL_CTX * ctx, + SSL * ssl); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_SSL_UTILS_H */ diff --git a/src/core/transport/http/server/CGI/Makefile.am b/src/core/transport/http/server/CGI/Makefile.am new file mode 100644 index 0000000..fafb8bf --- /dev/null +++ b/src/core/transport/http/server/CGI/Makefile.am @@ -0,0 +1,31 @@ +prgbindir=$(bindir) +prgbin_PROGRAMS = axis2.cgi +SUBDIRS = +AM_CFLAGS = -g -pthread +axis2_cgi_SOURCES = axis2_cgi_main.c \ + axis2_cgi_out_transport_info.c \ + axis2_cgi_stream.c + +axis2_cgi_LDADD = $(LDFLAGS) \ + $(top_builddir)/src/core/transport/http/util/libaxis2_http_util.la \ + $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la \ + $(top_builddir)/axiom/src/om/libaxis2_axiom.la \ + $(top_builddir)/util/src/libaxutil.la \ + $(top_builddir)/axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + $(top_builddir)/src/core/description/libaxis2_description.la \ + $(top_builddir)/src/core/deployment/libaxis2_deployment.la \ + $(top_builddir)/src/core/context/libaxis2_context.la \ + $(top_builddir)/src/core/clientapi/libaxis2_clientapi.la \ + $(top_builddir)/src/core/engine/libaxis2_engine.la \ + $(top_builddir)/src/core/transport/http/sender/libaxis2_http_sender.la \ + $(top_builddir)/src/core/transport/http/receiver/libaxis2_http_receiver.la \ + -lpthread + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/description\ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/deployment\ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include diff --git a/src/core/transport/http/server/CGI/axis2_cgi_main.c b/src/core/transport/http/server/CGI/axis2_cgi_main.c new file mode 100644 index 0000000..6f9a59d --- /dev/null +++ b/src/core/transport/http/server/CGI/axis2_cgi_main.c @@ -0,0 +1,280 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_cgi_out_transport_info.h" +#include "axis2_cgi_stream.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +axis2_char_t *axis2_cgi_default_url_prefix = "/cgi-bin/axis2.cgi/"; + +/***************************** Function headers *******************************/ + +void +axis2_cgi_system_exit( + axutil_env_t * env, + int status); + +void +axis2_cgi_set_request_vars( + axis2_cgi_request_t *cgi_request); + +axis2_status_t +axis2_cgi_write_response( + const void *buffer, + unsigned int length); + +/***************************** End of function headers ************************/ + +int +main( + int argc, + char *argv[]) +{ + axutil_allocator_t *allocator = NULL; + axutil_env_t *env = NULL; + const axis2_char_t *repo_path; + axis2_conf_ctx_t *conf_ctx; + axis2_cgi_request_t *cgi_request = NULL; + int content_length = 0; + axis2_char_t *request_url = NULL; + /* axutil_stream_t *request_body_stream = NULL; */ + axutil_stream_t *out_stream = NULL; + axis2_transport_in_desc_t *in_desc = NULL; + axis2_transport_out_desc_t *out_desc = NULL; + /* axis2_msg_ctx_t *msg_ctx = NULL; */ + /* axis2_bool_t processed = AXIS2_FALSE; */ + axis2_http_transport_in_t request; + axis2_http_transport_out_t response; + /*axis2_http_header_t* http_header = NULL; */ + /*axutil_hash_t *headers = NULL; */ + /* axis2_char_t *axis2_cgi_url_prefix = NULL; */ + + if(!(repo_path = AXIS2_GETENV("AXIS2C_HOME"))) + { + fprintf(stderr, "Error: AXIS2C_HOME environment variable not set!"); + axis2_cgi_system_exit(env, -1); + } + + allocator = axutil_allocator_init(NULL); + env = axutil_env_create(allocator); + + if(axutil_file_handler_access(repo_path, AXIS2_R_OK) != AXIS2_SUCCESS) + { + fprintf(stderr, "Error reading repository: %s\nPlease check AXIS2C_HOME var", repo_path); + axis2_cgi_system_exit(env, -1); + } + + /* Set configuration */ + + conf_ctx = axis2_build_conf_ctx(env, repo_path); + if(!conf_ctx) + { + fprintf(stderr, "Error: Configuration not builded propertly\n"); + axis2_cgi_system_exit(env, -1); + } + + axis2_http_transport_utils_transport_out_init(&response, env); + axis2_http_transport_utils_transport_in_init(&request, env); + + /* Get input info */ + + cgi_request = AXIS2_MALLOC(allocator, sizeof(axis2_cgi_request_t)); + axis2_cgi_set_request_vars(cgi_request); + + request_url = (axis2_char_t *)AXIS2_MALLOC(allocator, (7 + /* "http:" */ + strlen(cgi_request->server_name) + ((strlen(cgi_request->server_port)) ? 1 : 0) + /* ":"*/ + strlen(cgi_request->server_port) + strlen(cgi_request->script_name) + strlen( + cgi_request->path_info) + ((strlen(cgi_request->path_info)) ? 1 : 0) + /* "?" */ + strlen(cgi_request->query_string)) * sizeof(axis2_char_t)); + + request_url[0] = '\0'; + + strcat(request_url, "http://"); + strcat(request_url, cgi_request->server_name); + if(strlen(cgi_request->server_port)) + strcat(request_url, ":"); + strcat(request_url, cgi_request->server_port); + strcat(request_url, cgi_request->script_name); + strcat(request_url, cgi_request->path_info); + if(strlen(cgi_request->query_string)) + strcat(request_url, "?"); + strcat(request_url, cgi_request->query_string); + + if(cgi_request->content_length) + content_length = axutil_atoi(cgi_request->content_length); + else + content_length = 0; + + /* Set streams */ + + out_stream = axutil_stream_create_basic(env); + + /* Set message contexts */ + + out_desc = axis2_conf_get_transport_out(axis2_conf_ctx_get_conf(conf_ctx, env), env, + AXIS2_TRANSPORT_ENUM_HTTP); + in_desc = axis2_conf_get_transport_in(axis2_conf_ctx_get_conf(conf_ctx, env), env, + AXIS2_TRANSPORT_ENUM_HTTP); + + request.msg_ctx = axis2_msg_ctx_create(env, conf_ctx, in_desc, out_desc); + + axis2_msg_ctx_set_server_side(request.msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_transport_out_stream(request.msg_ctx, env, out_stream); + axis2_msg_ctx_set_transport_headers(request.msg_ctx, env, NULL); + + /* Set request parameters */ + + request.soap_action = cgi_request->soap_action; + request.in_stream = axutil_stream_create_cgi(env, content_length); + request.remote_ip = cgi_request->remote_addr; + request.content_length = content_length; + request.content_type = cgi_request->content_type; + request.request_uri = request_url; + request.svr_port = cgi_request->server_port; + request.accept_header = AXIS2_GETENV("HTTP_ACCEPT"); + request.accept_language_header = AXIS2_GETENV("HTTP_ACCEPT_LANGUAGE"); + request.accept_charset_header = AXIS2_GETENV("HTTP_ACCEPT_CHARSET"); + request.request_url_prefix = (AXIS2_GETENV("AXIS2C_URL_PREFIX")) ? AXIS2_GETENV( + "AXIS2C_URL_PREFIX") : axis2_cgi_default_url_prefix; + + if(axutil_strcasecmp(cgi_request->request_method, "POST") == 0) + { + request.request_method = AXIS2_HTTP_METHOD_POST; + } + else if(axutil_strcasecmp(cgi_request->request_method, "GET") == 0) + { + request.request_method = AXIS2_HTTP_METHOD_GET; + } + else if(axutil_strcasecmp(cgi_request->request_method, "HEAD") == 0) + { + request.request_method = AXIS2_HTTP_METHOD_HEAD; + } + else if(axutil_strcasecmp(cgi_request->request_method, "PUT") == 0) + { + request.request_method = AXIS2_HTTP_METHOD_PUT; + } + else if(axutil_strcasecmp(cgi_request->request_method, "DELETE") == 0) + { + request.request_method = AXIS2_HTTP_METHOD_DELETE; + } + + request.out_transport_info = axis2_cgi_out_transport_info_create(env, cgi_request); + + /*Process request */ + fprintf(stderr, "ok\n"); + axis2_http_transport_utils_process_request(env, conf_ctx, &request, &response); + fprintf(stderr, "ok\n"); + /*Send status */ + + fprintf(stdout, "Status: %d %s \r\n", response.http_status_code, response.http_status_code_name); + + if(response.content_type) + { + fprintf(stdout, "Content-type: %s \r\n", response.content_type); + } + else if(strlen(axis2_cgi_out_transport_get_content(request.out_transport_info)) + && axis2_cgi_out_transport_get_content(request.out_transport_info)) + { + fprintf(stdout, "Content-type: %s \r\n", axis2_cgi_out_transport_get_content( + request.out_transport_info)); + } + + fprintf(stdout, "\r\n"); /* End of headers for server */ + + /* Write data body */ + if(!axis2_cgi_write_response(response.response_data, response.response_data_length)) + { + fprintf(stderr, "Error writing output data\n"); + } + + axis2_http_transport_utils_transport_in_uninit(&request, env); + axis2_http_transport_utils_transport_out_uninit(&response, env); + + return 0; +} + +axis2_status_t +axis2_cgi_write_response( + const void *buffer, + unsigned int length) +{ + if(buffer && length) + { + unsigned int completed = 0; + unsigned int written = 0; + + while(completed < length) + { + written = fwrite(buffer, sizeof(char), length - completed, stdout); + if(written < 0) + return AXIS2_FALSE; + completed += written; + } + } + return AXIS2_TRUE; +} + +void +axis2_cgi_set_request_vars( + axis2_cgi_request_t *cgi_request) +{ + cgi_request->server_name = (AXIS2_GETENV("SERVER_NAME")) ? AXIS2_GETENV("SERVER_NAME") : ""; + cgi_request->script_name = (AXIS2_GETENV("SCRIPT_NAME")) ? AXIS2_GETENV("SCRIPT_NAME") : ""; + cgi_request->path_info = (AXIS2_GETENV("PATH_INFO")) ? AXIS2_GETENV("PATH_INFO") : ""; + cgi_request->server_port = (AXIS2_GETENV("SERVER_PORT")) ? AXIS2_GETENV("SERVER_PORT") : ""; + cgi_request->server_protocol = (AXIS2_GETENV("SERVER_PROTOCOL")) ? AXIS2_GETENV( + "SERVER_PROTOCOL") : ""; + cgi_request->content_length = (AXIS2_GETENV("CONTENT_LENGTH")) ? AXIS2_GETENV("CONTENT_LENGTH") + : ""; + cgi_request->content_type = (AXIS2_GETENV("CONTENT_TYPE")) ? AXIS2_GETENV("CONTENT_TYPE") : ""; + cgi_request->request_method = (AXIS2_GETENV("REQUEST_METHOD")) ? AXIS2_GETENV("REQUEST_METHOD") + : ""; + cgi_request->remote_addr = (AXIS2_GETENV("REMOTE_ADDR")) ? AXIS2_GETENV("REMOTE_ADDR") : ""; + cgi_request->soap_action = (AXIS2_GETENV("HTTP_SOAPACTION")) ? AXIS2_GETENV("HTTP_SOAPACTION") + : NULL; + cgi_request->query_string = (AXIS2_GETENV("QUERY_STRING")) ? AXIS2_GETENV("QUERY_STRING") : ""; +} + +void +axis2_cgi_system_exit( + axutil_env_t * env, + int status) +{ + axutil_allocator_t *allocator = NULL; + + if(env) + { + allocator = env->allocator; + axutil_env_free(env); + } + exit(status); +} diff --git a/src/core/transport/http/server/CGI/axis2_cgi_out_transport_info.c b/src/core/transport/http/server/CGI/axis2_cgi_out_transport_info.c new file mode 100644 index 0000000..59e6820 --- /dev/null +++ b/src/core/transport/http/server/CGI/axis2_cgi_out_transport_info.c @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_cgi_out_transport_info.h" +#include +#include + +/** + * @brief CIG Out transport info impl structure + * Axis2 cgi_out_transport_info_impl + */ + +typedef struct axis2_cgi_out_transport_info_s +{ + axis2_http_out_transport_info_t out_transport_info; + axis2_cgi_request_t *request; + axis2_char_t *encoding; +} axis2_cgi_out_transport_info_t; + +#define AXIS2_INTF_TO_IMPL(out_transport_info) \ + ((axis2_cgi_out_transport_info_t *)(out_transport_info)) + +void AXIS2_CALL +axis2_cgi_out_transport_info_free( + axis2_http_out_transport_info_t * info, + const axutil_env_t * env) +{ + axis2_cgi_out_transport_info_t *info_impl = NULL; + AXIS2_ENV_CHECK(env, void); + + info_impl = AXIS2_INTF_TO_IMPL(info); + + info_impl->request = NULL; /* doesn't belong here so no need to free it here */ + if(info_impl->encoding) + { + AXIS2_FREE(env->allocator, info_impl->encoding); + info_impl->encoding = NULL; + } + + AXIS2_FREE(env->allocator, info_impl); + return; +} + +void AXIS2_CALL +axis2_cgi_out_transport_info_free_void_arg( + void *transport_info, + const axutil_env_t * env) +{ + axis2_http_out_transport_info_t *transport_info_l = NULL; + + AXIS2_ENV_CHECK(env, void); + transport_info_l = (axis2_http_out_transport_info_t *)transport_info; + axis2_http_out_transport_info_free(transport_info_l, env); + return; +} + +axis2_status_t AXIS2_CALL +axis2_cgi_out_transport_info_set_content_type( + axis2_http_out_transport_info_t *info, + const axutil_env_t *env, + const axis2_char_t *content_type) +{ + axis2_cgi_out_transport_info_t *info_impl = NULL; + + axis2_char_t *temp1 = NULL; + axis2_char_t *temp2 = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, content_type, AXIS2_FAILURE); + info_impl = AXIS2_INTF_TO_IMPL(info); + if(info_impl->encoding) + { + temp1 = axutil_stracat(env, content_type, ";charset="); + temp2 = axutil_stracat(env, temp1, info_impl->encoding); + info_impl->request->content_type = axutil_strdup(env, temp2); + AXIS2_FREE(env->allocator, temp1); + AXIS2_FREE(env->allocator, temp2); + } + else + { + info_impl->request->content_type = axutil_strdup(env, content_type); + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_cgi_out_transport_info_set_char_encoding( + axis2_http_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * encoding) +{ + axis2_cgi_out_transport_info_t *info_impl = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, encoding, AXIS2_FAILURE); + + info_impl = AXIS2_INTF_TO_IMPL(info); + + if(info_impl->encoding) + { + AXIS2_FREE(env->allocator, info_impl->encoding); + } + info_impl->encoding = axutil_strdup(env, encoding); + + return AXIS2_SUCCESS; +} + +axis2_http_out_transport_info_t *AXIS2_CALL +axis2_cgi_out_transport_info_create( + const axutil_env_t * env, + axis2_cgi_request_t * request) +{ + axis2_cgi_out_transport_info_t *info = NULL; + axis2_http_out_transport_info_t *out_transport_info = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + info = (axis2_cgi_out_transport_info_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_cgi_out_transport_info_t)); + + if(!info) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + info->request = request; + info->encoding = NULL; + + out_transport_info = &(info->out_transport_info); + + axis2_http_out_transport_info_set_char_encoding_func(out_transport_info, env, + axis2_cgi_out_transport_info_set_char_encoding); + axis2_http_out_transport_info_set_content_type_func(out_transport_info, env, + axis2_cgi_out_transport_info_set_content_type); + + return out_transport_info; +} + +axis2_char_t * +axis2_cgi_out_transport_get_content( + axis2_http_out_transport_info_t * info) +{ + axis2_cgi_out_transport_info_t *info_impl = NULL; + info_impl = AXIS2_INTF_TO_IMPL(info); + return info_impl->request->content_type; +} + diff --git a/src/core/transport/http/server/CGI/axis2_cgi_out_transport_info.h b/src/core/transport/http/server/CGI/axis2_cgi_out_transport_info.h new file mode 100644 index 0000000..bc0f526 --- /dev/null +++ b/src/core/transport/http/server/CGI/axis2_cgi_out_transport_info.h @@ -0,0 +1,62 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_CGI_OUT_TRANSPORT_INFO_H +#define AXIS2_CGI_OUT_TRANSPORT_INFO_H + +/** + * @ingroup axis2_core_transport_http + * @{ + */ + +/** + * @file axis2_cgi_out_transport_info.h + * @brief axis2 CGI Out Transport Info + */ + +#include "axis2_cgi_types.h" +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + axis2_http_out_transport_info_t *AXIS2_CALL + + axis2_cgi_out_transport_info_create( + const axutil_env_t * env, + axis2_cgi_request_t * request); + + /** + * Free http_out_transport_info passed as void pointer. This will be + * cast into appropriate type and then pass the cast object + * into the http_out_transport_info structure's free method + */ + void AXIS2_CALL + axis2_cgi_out_transport_info_free_void_arg( + void *transport_info, + const axutil_env_t * env); + + axis2_char_t *axis2_cgi_out_transport_get_content( + axis2_http_out_transport_info_t * out_transport_info); + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_SGI_OUT_TRANSPORT_INFO_H */ diff --git a/src/core/transport/http/server/CGI/axis2_cgi_stream.c b/src/core/transport/http/server/CGI/axis2_cgi_stream.c new file mode 100644 index 0000000..68ad19f --- /dev/null +++ b/src/core/transport/http/server/CGI/axis2_cgi_stream.c @@ -0,0 +1,164 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "axis2_cgi_stream.h" + +/** + * @brief Stream struct impl + * Streaming mechanisms for cgi + */ + +typedef struct cgi_stream_impl +{ + axutil_stream_t stream; + axutil_stream_type_t stream_type; + unsigned int cur_pos; + unsigned int content_length; +} cgi_stream_impl_t; + +#define AXIS2_INTF_TO_IMPL(stream) ((cgi_stream_impl_t *)(stream)) + +axutil_stream_type_t AXIS2_CALL +cgi_stream_get_type( + axutil_stream_t * stream, + const axutil_env_t * env); + +int AXIS2_CALL cgi_stream_write( + axutil_stream_t * stream, + const axutil_env_t * env, + const void *buffer, + size_t count); + +int AXIS2_CALL cgi_stream_read( + axutil_stream_t * stream, + const axutil_env_t * env, + void *buffer, + size_t count); + +int AXIS2_CALL cgi_stream_skip( + axutil_stream_t * stream, + const axutil_env_t * env, + int count); + +int AXIS2_CALL cgi_stream_get_char( + axutil_stream_t * stream, + const axutil_env_t * env); + +axutil_stream_t *AXIS2_CALL +axutil_stream_create_cgi( + const axutil_env_t * env, + unsigned int content_length) +{ + cgi_stream_impl_t *stream_impl = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, content_length, NULL); + + stream_impl = (cgi_stream_impl_t *)AXIS2_MALLOC(env->allocator, sizeof(cgi_stream_impl_t)); + + if(!stream_impl) + { + return NULL; + } + stream_impl->cur_pos = 0; + stream_impl->content_length = content_length; + stream_impl->stream_type = AXIS2_STREAM_MANAGED; + + axutil_stream_set_read(&(stream_impl->stream), env, cgi_stream_read); + axutil_stream_set_write(&(stream_impl->stream), env, cgi_stream_write); + axutil_stream_set_skip(&(stream_impl->stream), env, cgi_stream_skip); + + return &(stream_impl->stream); +} +int AXIS2_CALL +cgi_stream_read( + axutil_stream_t * stream, + const axutil_env_t * env, + void *buffer, + size_t count) +{ + /*void *temp_buff = NULL;*/ + /*unsigned int data_to_read = 0;*/ + unsigned int read_bytes = 0; + /*axis2_bool_t ret_ok = AXIS2_TRUE;*/ + + cgi_stream_impl_t *stream_impl = NULL; + /*char *temp = NULL;*/ + + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + stream_impl = (cgi_stream_impl_t *)stream; + + if(count < stream_impl->content_length) + { + read_bytes = fread(buffer, sizeof(char), count, stdin); + } + else + { + read_bytes = fread(buffer, sizeof(char), stream_impl->content_length, stdin); + } + + return read_bytes; +} + +int AXIS2_CALL +cgi_stream_write( + axutil_stream_t * stream, + const axutil_env_t * env, + const void *buf, + size_t count) +{ + /* Cannot write on cgi stdin, explicitly an input stream */ + + return -1; +} + +int AXIS2_CALL +cgi_stream_skip( + axutil_stream_t * stream, + const axutil_env_t * env, + int count) +{ + cgi_stream_impl_t *stream_impl = NULL; + int skipped = -1; + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + stream_impl = AXIS2_INTF_TO_IMPL(stream); + + if(fseek(stdin, count, SEEK_CUR) == 0) + skipped = count; + return skipped; +} + +int AXIS2_CALL +cgi_stream_get_char( + axutil_stream_t * stream, + const axutil_env_t * env) +{ + int ret = -1; + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + + return ret; +} + +axutil_stream_type_t AXIS2_CALL +cgi_stream_get_type( + axutil_stream_t * stream, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + return AXIS2_INTF_TO_IMPL(stream)->stream_type; +} diff --git a/src/core/transport/http/server/CGI/axis2_cgi_stream.h b/src/core/transport/http/server/CGI/axis2_cgi_stream.h new file mode 100644 index 0000000..9a6af34 --- /dev/null +++ b/src/core/transport/http/server/CGI/axis2_cgi_stream.h @@ -0,0 +1,44 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CGI_STREAM_H +#define CGI_STREAM_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** brief Constructor for creating CGI stream + * @return axutil_stream (CGI) + */ + axutil_stream_t *AXIS2_CALL + axutil_stream_create_cgi( + const axutil_env_t * env, + unsigned int content_length); + +#ifdef __cplusplus +} +#endif + +#endif /* CGI_STREAM_H */ diff --git a/src/core/transport/http/server/CGI/axis2_cgi_types.h b/src/core/transport/http/server/CGI/axis2_cgi_types.h new file mode 100644 index 0000000..af184a1 --- /dev/null +++ b/src/core/transport/http/server/CGI/axis2_cgi_types.h @@ -0,0 +1,34 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +typedef struct axis2_cgi_request +{ + axis2_char_t *server_name; + axis2_char_t *server_port; + axis2_char_t *script_name; + axis2_char_t *path_info; + axis2_char_t *server_protocol; + axis2_char_t *content_length; + axis2_char_t *content_type; + axis2_char_t *request_method; + axis2_char_t *remote_addr; + axis2_char_t *soap_action; + axis2_char_t *query_string; +} axis2_cgi_request_t; diff --git a/src/core/transport/http/server/IIS/README b/src/core/transport/http/server/IIS/README new file mode 100644 index 0000000..1a47cc4 --- /dev/null +++ b/src/core/transport/http/server/IIS/README @@ -0,0 +1,61 @@ +How to Configure IIS Module for Axis2C +________________________________________ + +Use the Axis2/C VC project or makefile to build the component. + +In this document it is assumed that the mod_axis2_IIS.dll is in the directory +c:\axis2c\lib\mod_axis2_IIS.dll and axis2c_home is c:\axis2c + +Add the following key to the registry. + +HKEY_LOCAL_MACHINE\SOFTWARE\Apache Axis2c\IIS ISAPI Redirector + +Add a string value with the name axis2c_home and a value of c:\axis2c + +Add a string value with the name log_file and a value of c:\axis2c\logs\axis2.log + +Add a string value with the name log_level. The value can be one of trace, error, info, critical, debug, warning + +You can add a string value with the name services_url_prefix. This is optional and defaults to "/services". +As an example, if you have "/web_services" as the prefix, then all the services hosted would have the endpoint prefix of : +http://localhost/axis2/web_services. +Note: don't forget the / at the begining. + +If you wish, you can also change the location as well by adding a string value with the name axis2_location. +This is also optional and defaults to /axis2. If you have /myserser as the value you can access your web +services with a url like http://localhost/myserver/services. +Note: Don't forget the / at the beginning. + +Now you can do all the registry editing using the JScript file axis2_iis_regedit.js +provided with the distribution. When you build axis2/C with the IIS module the file +is copied to the root directory of the binary distribution. Just double click it and +everything will be set to the defaults. The axis2c_home is taken as the current directory, +so make sure you run the file in the Axis2/C repository location (or root of the binary distribution). +If you want to change the values you can manually edit the the .js file or give it as command line arguments +to the script when running the script. To run the jscript from the command line use the command +:\cscript axis2_iis_regedit.js optional arguments. +We recomend the manual editing as it is the easiest way to specify the values + +IIS 5.1 or Below + +Using the IIS management console, add a new virtual directory to your IIS/PWS Web site. +The name of the virtual directory must be axis2. Its physical path should be the directory +where you placed mod_axis2_IIS.dll (in our example it is c:\axis2c\lib). When creating this new +virtual directory, assign execute access to it. + +By Using the IIS management console, add mod_axis2_IIS.dll as a filter in your IIS/PWS web site and restart the IIS admin service. + + +IIS 6 & 7 + +Using the IIS management console, add the mod_axis2_IIS.dll as a Wildcard Script Map. + Executable should be the complete path to the mod_axis2_IIS.dll + You can put any name as the name of the Wildcard Script Map + +Please don't add the mod_axis2_IIS.dll as a filter to IIS as in the IIS 5.1 case. + +Note: If the Axis2/C failed to load, verify that Axis2/C and its dependent DLLs are in the System Path (not the user path). + + + + diff --git a/src/core/transport/http/server/IIS/axis2_iis_constants.h b/src/core/transport/http/server/IIS/axis2_iis_constants.h new file mode 100644 index 0000000..fb6929b --- /dev/null +++ b/src/core/transport/http/server/IIS/axis2_iis_constants.h @@ -0,0 +1,51 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_IIS_CONSTANTS_H +#define AXIS2_IIS_CONSTANTS_H + +#define INTERNET_MAX_PATH_LENGTH 2048 +#define INTERNET_MAX_SCHEME_LENGTH 32 /* longest protocol name length */ +#define INTERNET_MAX_URL_LENGTH (INTERNET_MAX_SCHEME_LENGTH +sizeof("://") +INTERNET_MAX_PATH_LENGTH) + +#define URI_MATCHED 1 +#define URI_UN_MATCHED 2 + +#define EXTENSION_URL "/axis2/mod_axis2_IIS.dll\? " +#define EXTENSION_URL_AXIS2 "/axis2/" +#define EXTENSION_URL_MODIIS "mod_axis2_IIS.dll\? " + + +#define MAX_SERVERNAME 128 +#define MAX_PORT_LEN 8 + +#define MAX_HTTP_VERSION_LEN 16 +#define MAX_HTTP_CONTENT_TYPE_LEN 2048 +#define MAX_CONTENT_ENCODING_LEN 16 +#define MAX_HTTP_METHOD_LEN 8 +#define MAX_TCP_PORT_LEN 8 +#define MAX_CONTENT_LEN 16 + +#define OK 200 +#define HTTP_INTERNAL_SERVER_ERROR 500 +#define HTTP_ACCEPTED 202 + +#define AXIS2_STRICMP _stricmp + +#endif /*AXIS2_IIS_CONSTANTS_H*/ + diff --git a/src/core/transport/http/server/IIS/axis2_iis_out_transport_info.c b/src/core/transport/http/server/IIS/axis2_iis_out_transport_info.c new file mode 100644 index 0000000..fb7693b --- /dev/null +++ b/src/core/transport/http/server/IIS/axis2_iis_out_transport_info.c @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_iis_out_transport_info.h" +#include +#include +#include + +#include "axis2_iis_constants.h" + +/** + * @brief IIS Out transport info impl structure + * Axis2 iis_out_transport_info_impl + */ + +typedef struct axis2_iis_out_transport_info_s +{ + axis2_http_out_transport_info_t out_transport_info; + axis2_char_t *encoding; + axis2_char_t content_type[MAX_HTTP_CONTENT_TYPE_LEN]; +} axis2_iis_out_transport_info_t; + +#define AXIS2_INTF_TO_IMPL(out_transport_info) \ + ((axis2_iis_out_transport_info_t *)(out_transport_info)) + +void AXIS2_CALL +axis2_iis_out_transport_info_free( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env) +{ + axis2_iis_out_transport_info_t *info = NULL; + AXIS2_ENV_CHECK(env, void); + + info = AXIS2_INTF_TO_IMPL(out_transport_info); + + if(info->encoding) + { + AXIS2_FREE(env->allocator, info->encoding); + info->encoding = NULL; + } + + AXIS2_FREE(env->allocator, info); + return; +} + +void AXIS2_CALL +axis2_iis_out_transport_info_free_void_arg( + void *transport_info, + const axutil_env_t * env) +{ + axis2_http_out_transport_info_t *transport_info_l = NULL; + + AXIS2_ENV_CHECK(env, void); + transport_info_l = (axis2_http_out_transport_info_t *)transport_info; + axis2_http_out_transport_info_free(transport_info_l, env); + return; +} + +axis2_status_t AXIS2_CALL +axis2_iis_out_transport_info_set_content_type( + axis2_http_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * content_type) +{ + axis2_iis_out_transport_info_t *info_impl = NULL; + + info_impl = AXIS2_INTF_TO_IMPL(info); + info_impl->content_type[0] = '\0'; + if(info_impl->encoding) + { + sprintf(info_impl->content_type, "%s%s%s", content_type, ";charser:", info_impl->encoding); + } + else + { + strcat(info_impl->content_type, content_type); + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_iis_out_transport_info_set_char_encoding( + axis2_http_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * encoding) +{ + axis2_iis_out_transport_info_t *info_impl = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, encoding, AXIS2_FAILURE); + + info_impl = AXIS2_INTF_TO_IMPL(info); + + if(info_impl->encoding) + { + AXIS2_FREE(env->allocator, info_impl->encoding); + } + info_impl->encoding = axutil_strdup(env, encoding); + + return AXIS2_SUCCESS; +} + +axis2_http_out_transport_info_t *AXIS2_CALL +axis2_iis_out_transport_info_create( + const axutil_env_t * env, + LPEXTENSION_CONTROL_BLOCK lpECB) +{ + axis2_iis_out_transport_info_t *info = NULL; + axis2_http_out_transport_info_t *http_out_info = NULL; + AXIS2_ENV_CHECK(env, NULL); + + info = (axis2_iis_out_transport_info_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_iis_out_transport_info_t)); + + if(!info) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + info->encoding = NULL; + + http_out_info = &(info->out_transport_info); + + axis2_http_out_transport_info_set_content_type_func(http_out_info, env, + axis2_iis_out_transport_info_set_content_type); + axis2_http_out_transport_info_set_char_encoding_func(http_out_info, env, + axis2_iis_out_transport_info_set_char_encoding); + axis2_http_out_transport_info_set_free_func(http_out_info, env, + axis2_iis_out_transport_info_free); + + return http_out_info; +} + +axis2_char_t * +axis2_iis_out_transport_get_content( + axis2_http_out_transport_info_t * info) +{ + axis2_iis_out_transport_info_t *info_impl = NULL; + info_impl = AXIS2_INTF_TO_IMPL(info); + return info_impl->content_type; +} diff --git a/src/core/transport/http/server/IIS/axis2_iis_out_transport_info.h b/src/core/transport/http/server/IIS/axis2_iis_out_transport_info.h new file mode 100644 index 0000000..893ffdf --- /dev/null +++ b/src/core/transport/http/server/IIS/axis2_iis_out_transport_info.h @@ -0,0 +1,61 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_IIS_OUT_TRANSPORT_INFO_H +#define AXIS2_IIS_OUT_TRANSPORT_INFO_H + +/** + * @ingroup axis2_core_transport_http + * @{ + */ + +/** + * @file axis2_iis_out_transport_info.h + * @brief axis2 IIS Out Transport Info + */ + +#include +#include +#ifdef __cplusplus +extern "C" +{ +#endif + + axis2_http_out_transport_info_t *AXIS2_CALL + + axis2_iis_out_transport_info_create( + const axutil_env_t * env, + LPEXTENSION_CONTROL_BLOCK lpECB); + + /** + * Free http_out_transport_info passed as void pointer. This will be + * cast into appropriate type and then pass the cast object + * into the http_out_transport_info structure's free method + */ + void AXIS2_CALL + axis2_iis_out_transport_info_free_void_arg( + void *transport_info, + const axutil_env_t * env); + + axis2_char_t *axis2_iis_out_transport_get_content( + axis2_http_out_transport_info_t * out_transport_info); + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_IIS_OUT_TRANSPORT_INFO_H */ diff --git a/src/core/transport/http/server/IIS/axis2_iis_regedit.js b/src/core/transport/http/server/IIS/axis2_iis_regedit.js new file mode 100644 index 0000000..3889c1e --- /dev/null +++ b/src/core/transport/http/server/IIS/axis2_iis_regedit.js @@ -0,0 +1,84 @@ +var WshShell = WScript.CreateObject("WScript.Shell"); + +/* You can change the following values to suite your requirements */ +/* Axis2/C repo location. axis2.xml, modules folder and services folder should be in this dir */ +var axis2c_home = WshShell.CurrentDirectory; +/* Log level. Possible values are trace, error, info, critical, user, debug and warning */ +var log_level = "debug"; +/* Full path to the log file */ +var log_file = axis2c_home + "/logs/axis2.log"; +/* Services URL prefix. This is the folder where services are hosted. Optional */ +var services_url_prefix; +/* Max log file size */ +var max_log_file_size; +/* Axis2 location */ +var axis2_location; + +/* Don't change anything below */ +var axis2c_home_str = "axis2c_home"; +var log_level_str = "log_level"; +var log_file_str = "log_file"; +var services_url_prefix_str = "services_url_prefix"; +var max_log_file_size_str = "max_log_file_size"; +var axis2_location_str = "axis2_location" + +var reg_location = "HKLM\\Software\\Apache Axis2C\\IIS ISAPI Redirector\\" +/* If specified get the values from the command prompt */ +var args = WScript.Arguments; +if (args.length > 0) { + axis2c_home = args.Item(0); + if (axis2c_home) { + log_file = axis2c_home + "/logs/axis2.log"; + } +} +if (args.length > 1) { + log_level = args.Item(1); +} +if (args.length > 2) { + log_file = args.Item(2); +} +if (args.length > 3) { + services_url_prefix = args.Item(3); +} +if (args.length > 4) { + max_log_file_size = args.Item(4); +} +if (args.length > 5) { + axis2_location = args.Item(5); +} +/* Write the axis2c_home entry. This is used by Axis2/C to find the repo location */ +WshShell.RegWrite (reg_location + axis2c_home_str, axis2c_home, "REG_SZ"); +/* Write the log_level registry entry */ +WshShell.RegWrite (reg_location + log_level_str, log_level, "REG_SZ"); +/* Write the log file name */ +WshShell.RegWrite (reg_location + log_file_str, log_file, "REG_SZ"); +/* Write the services url prefix. We write this only if specified */ +try { + var services_url_prefix_key = WshShell.RegRead (reg_location + services_url_prefix_str); + if (services_url_prefix_key) { + WshShell.RegDelete (reg_location + services_url_prefix_str); + } +} catch (e) {} +if (services_url_prefix) { + WshShell.RegWrite (reg_location + services_url_prefix_str, services_url_prefix, "REG_SZ"); +} +/* We write max_log_file_size only if specified */ +try { + var max_log_file_size_key = WshShell.RegRead (reg_location + max_log_file_size_str); + if (max_log_file_size_key) { + WshShell.RegDelete (reg_location + max_log_file_size_str); + } +} catch (e) {} +if (max_log_file_size) { + WshShell.RegWrite (reg_location + max_log_file_size_str, max_log_file_size, "REG_SZ"); +} + +try{ + var axis2_location_key = WshShell.RegRead (reg_location + axis2_location_str); + if (axis2_location_key) { + WshShell.RegDelete (reg_location + axis2_location_str); + } +} catch (e) {} +if (axis2_location) { + WshShell.RegWrite (reg_location + axis2_location_str, axis2_location, "REG_SZ"); +} \ No newline at end of file diff --git a/src/core/transport/http/server/IIS/axis2_iis_stream.c b/src/core/transport/http/server/IIS/axis2_iis_stream.c new file mode 100644 index 0000000..90fc8ba --- /dev/null +++ b/src/core/transport/http/server/IIS/axis2_iis_stream.c @@ -0,0 +1,313 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "axis2_iis_stream.h" +#include + +/** + * @brief Stream struct impl + * Streaming mechanisms for iis web server + */ + +typedef struct iis_stream_impl +{ + axutil_stream_t stream; + axutil_stream_type_t stream_type; + LPEXTENSION_CONTROL_BLOCK lpECB; + unsigned int cur_pos; + void *cur_position; +} iis_stream_impl_t; + +#define AXIS2_INTF_TO_IMPL(stream) ((iis_stream_impl_t *)(stream)) + +axutil_stream_type_t AXIS2_CALL +iis_stream_get_type( + axutil_stream_t * stream, + const axutil_env_t * env); + +int AXIS2_CALL iis_stream_write( + axutil_stream_t * stream, + const axutil_env_t * env, + const void *buffer, + size_t count); + +int AXIS2_CALL iis_stream_read( + axutil_stream_t * stream, + const axutil_env_t * env, + void *buffer, + size_t count); + +int AXIS2_CALL iis_stream_skip( + axutil_stream_t * stream, + const axutil_env_t * env, + int count); + +int AXIS2_CALL iis_stream_get_char( + axutil_stream_t * stream, + const axutil_env_t * env); + +axutil_stream_t *AXIS2_CALL +axutil_stream_create_iis( + const axutil_env_t * env, + LPEXTENSION_CONTROL_BLOCK lpECB) +{ + iis_stream_impl_t *stream_impl = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, lpECB, NULL); + + stream_impl = (iis_stream_impl_t *)AXIS2_MALLOC(env->allocator, sizeof(iis_stream_impl_t)); + + if(!stream_impl) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + stream_impl->cur_pos = 0; + stream_impl->cur_position = NULL; + stream_impl->lpECB = lpECB; + stream_impl->stream_type = AXIS2_STREAM_MANAGED; + + axutil_stream_set_read(&(stream_impl->stream), env, iis_stream_read); + axutil_stream_set_write(&(stream_impl->stream), env, iis_stream_write); + axutil_stream_set_skip(&(stream_impl->stream), env, iis_stream_skip); + + return &(stream_impl->stream); +} + +int AXIS2_CALL +iis_stream_read( + axutil_stream_t * stream, + const axutil_env_t * env, + void *buffer, + size_t count) +{ + void *temp_buff = NULL; + unsigned int data_to_read = 0; + DWORD ret_val = TRUE; + DWORD read_bytes = (DWORD)count; + iis_stream_impl_t *stream_impl = NULL; + char *temp = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + stream_impl = (iis_stream_impl_t *)stream; + + if(stream_impl->cur_pos == 0) + stream_impl->cur_position = stream_impl->lpECB->lpbData; + + /* If this is the case all the bytes are in the lpECB->lpbData buffer*/ + if(stream_impl->lpECB->cbAvailable == stream_impl->lpECB->cbTotalBytes) + { + /* Cannot read more than in the buffer.*/ + if(count + stream_impl->cur_pos <= stream_impl->lpECB->cbAvailable) + data_to_read = (unsigned)count; + else + data_to_read = stream_impl->lpECB->cbTotalBytes - stream_impl->cur_pos; + + memcpy(buffer, stream_impl->cur_position, data_to_read); + temp = (char *)(stream_impl->cur_position); + temp += data_to_read; + stream_impl->cur_position = temp; + temp = NULL; + stream_impl->cur_pos += data_to_read; + read_bytes = data_to_read; + } + else if(stream_impl->lpECB->cbAvailable == -1) + { + ret_val = stream_impl->lpECB->ReadClient(stream_impl->lpECB->ConnID, buffer, &read_bytes); + } + else if(stream_impl->lpECB->cbAvailable < stream_impl->lpECB->cbTotalBytes) + { + if(stream_impl->cur_pos > stream_impl->lpECB->cbAvailable) + { + ret_val = stream_impl->lpECB->ReadClient(stream_impl->lpECB->ConnID, buffer, + &read_bytes); + } + else if(stream_impl->cur_pos + count > stream_impl->lpECB->cbAvailable + && stream_impl->cur_pos < stream_impl->lpECB->cbAvailable) + { + int read_length = 0; + if(count + stream_impl->cur_pos <= stream_impl->lpECB->cbAvailable) + read_length = (unsigned)count; + else + read_length = stream_impl->lpECB->cbTotalBytes - stream_impl->cur_pos; + data_to_read = stream_impl->lpECB->cbAvailable - stream_impl->cur_pos; + memcpy(buffer, stream_impl->cur_position, data_to_read); + + read_bytes = stream_impl->cur_pos + read_length - stream_impl->lpECB->cbAvailable; + temp_buff = malloc(read_bytes); + + if(temp_buff == NULL) + return data_to_read; + ret_val = stream_impl->lpECB->ReadClient(stream_impl->lpECB->ConnID, temp_buff, + &read_bytes); + memcpy(((char *)buffer + data_to_read), temp_buff, read_bytes); + read_bytes += data_to_read; + temp = (char *)(stream_impl->cur_position); + temp += read_bytes; + stream_impl->cur_position = temp; + stream_impl->cur_pos += (unsigned)read_bytes; + } + else + { + memcpy(buffer, stream_impl->cur_position, count); + temp = (char *)(stream_impl->cur_position); + temp += count; + stream_impl->cur_position = temp; + temp = NULL; + stream_impl->cur_pos += (unsigned)count; + read_bytes = (int)count; + } + } + if(ret_val == TRUE) + return read_bytes; + else + return -1; +} + +int AXIS2_CALL +iis_stream_write( + axutil_stream_t * stream, + const axutil_env_t * env, + const void *buf, + size_t count) +{ + DWORD ret_val = NO_ERROR; + unsigned long bytes_sent = 0; + iis_stream_impl_t *stream_impl = NULL; + axis2_char_t *buffer = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + AXIS2_PARAM_CHECK(env->error, buf, AXIS2_FAILURE); + stream_impl = AXIS2_INTF_TO_IMPL(stream); + buffer = (axis2_char_t *)buf; + bytes_sent = (unsigned)strlen(buffer); + + if(count <= 0) + { + return (int)count; + } + /* assume that buffer is not null terminated */ + ret_val = stream_impl->lpECB->WriteClient(stream_impl->lpECB->ConnID, buffer, &bytes_sent, + HSE_IO_SYNC); + if(ret_val == TRUE) + return (int)bytes_sent; + else + return -1; +} + +int AXIS2_CALL +iis_stream_skip( + axutil_stream_t * stream, + const axutil_env_t * env, + int count) +{ + DWORD ret_val = TRUE; + iis_stream_impl_t *stream_impl = NULL; + void *temp_buff = NULL; + int data_to_read = 0; + DWORD read_bytes = (DWORD)count; + char *temp = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + stream_impl = (iis_stream_impl_t *)stream; + + if(stream_impl->cur_pos == 0) + stream_impl->cur_position = stream_impl->lpECB->lpbData; + + if(stream_impl->lpECB->cbAvailable == stream_impl->lpECB->cbTotalBytes) + { + if(count + stream_impl->cur_pos <= stream_impl->lpECB->cbAvailable) + data_to_read = count; + else + data_to_read = stream_impl->lpECB->cbAvailable - stream_impl->cur_pos; + + temp = (char *)(stream_impl->cur_position); + temp += data_to_read; + stream_impl->cur_position = temp; + temp = NULL; + stream_impl->cur_pos += data_to_read; + read_bytes = data_to_read; + } + else if(stream_impl->lpECB->cbAvailable == -1) + { + temp_buff = malloc(read_bytes); + ret_val + = stream_impl->lpECB->ReadClient(stream_impl->lpECB->ConnID, temp_buff, &read_bytes); + free(temp_buff); + } + else if(stream_impl->lpECB->cbAvailable < stream_impl->lpECB->cbTotalBytes) + { + if(stream_impl->cur_pos > stream_impl->lpECB->cbAvailable) + { + temp_buff = malloc(read_bytes); + ret_val = stream_impl->lpECB->ReadClient(stream_impl->lpECB->ConnID, temp_buff, + &read_bytes); + free(temp_buff); + } + else if(stream_impl->cur_pos + count > stream_impl->lpECB->cbAvailable + && stream_impl->cur_pos < stream_impl->lpECB->cbAvailable) + { + data_to_read = stream_impl->lpECB->cbAvailable - stream_impl->cur_pos; + read_bytes = stream_impl->cur_pos + count - stream_impl->lpECB->cbAvailable; + temp_buff = malloc(read_bytes); + + if(temp_buff == NULL) + return data_to_read; + + ret_val = stream_impl->lpECB->ReadClient(stream_impl->lpECB->ConnID, temp_buff, + &read_bytes); + read_bytes += data_to_read; + free(temp_buff); + } + else + { + temp = (char *)(stream_impl->cur_position); + temp += count; + stream_impl->cur_position = temp; + temp = NULL; + stream_impl->cur_pos += count; + read_bytes = count; + } + } + if(ret_val == FALSE) + { + return -1; + } + return read_bytes; +} + +int AXIS2_CALL +iis_stream_get_char( + axutil_stream_t * stream, + const axutil_env_t * env) +{ + int ret = -1; + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + + return ret; +} + +axutil_stream_type_t AXIS2_CALL +iis_stream_get_type( + axutil_stream_t * stream, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + return AXIS2_INTF_TO_IMPL(stream)->stream_type; +} diff --git a/src/core/transport/http/server/IIS/axis2_iis_stream.h b/src/core/transport/http/server/IIS/axis2_iis_stream.h new file mode 100644 index 0000000..091edb0 --- /dev/null +++ b/src/core/transport/http/server/IIS/axis2_iis_stream.h @@ -0,0 +1,45 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef IIS_STREAM_H +#define IIS_STREAM_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** brief Constructor for creating IIS stream + * @return axutil_stream (IIS) + */ + axutil_stream_t *AXIS2_CALL + axutil_stream_create_iis( + const axutil_env_t * env, + LPEXTENSION_CONTROL_BLOCK lpECB); + +#ifdef __cplusplus +} +#endif + +#endif /* IIS_STREAM_H */ diff --git a/src/core/transport/http/server/IIS/axis2_iis_worker.c b/src/core/transport/http/server/IIS/axis2_iis_worker.c new file mode 100644 index 0000000..51a6cc8 --- /dev/null +++ b/src/core/transport/http/server/IIS/axis2_iis_worker.c @@ -0,0 +1,607 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "axis2_iis_out_transport_info.h" +#include "axis2_iis_stream.h" +#include "axis2_iis_worker.h" + +/* Files from iis */ +#include +#include + +#include "axis2_iis_constants.h" + +#define READ_SIZE 2048 + +axis2_status_t AXIS2_CALL +axis2_worker_get_original_url( + char url[], + char ret_url[]); + +axis2_char_t * AXIS2_CALL +axis2_iis_worker_get_bytes( + const axutil_env_t * env, + axutil_stream_t * stream); + +axis2_status_t AXIS2_CALL +start_response( + const axutil_env_t * env, + LPEXTENSION_CONTROL_BLOCK lpECB, + int status, + const char *reason, + axutil_array_list_t *headers); + +axis2_status_t +write_response( + LPEXTENSION_CONTROL_BLOCK lpECB, + const void *b, + unsigned int l); + +axutil_hash_t * +axis2_iis_worker_read_http_headers( + const axutil_env_t * env, + LPEXTENSION_CONTROL_BLOCK lpECB); + +AXIS2_IMPORT extern axis2_char_t *axis2_request_url_prefix; + +static struct reasons +{ + axis2_char_t * status_code; + int status_len; +} reasons[] = { { "200 OK", 6 }, { "202 Accepted", 12 }, { "500 Internal Server Error", 25 } }; + +struct axis2_iis_worker +{ + axis2_conf_ctx_t * conf_ctx; +}; + +char * +status_reason( + int status); + +axis2_iis_worker_t * AXIS2_CALL +axis2_iis_worker_create( + const axutil_env_t * env, + axis2_char_t * repo_path) +{ + axis2_iis_worker_t * iis_worker = NULL; + + iis_worker = (axis2_iis_worker_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_iis_worker_t)); + if(!iis_worker) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + iis_worker->conf_ctx = axis2_build_conf_ctx(env, repo_path); + if(!iis_worker->conf_ctx) + { + axis2_iis_worker_free((axis2_iis_worker_t *)iis_worker, env); + return NULL; + } + return iis_worker; +} + +void AXIS2_CALL +axis2_iis_worker_free( + axis2_iis_worker_t * iis_worker, + const axutil_env_t * env) +{ + if(iis_worker->conf_ctx) + { + axis2_conf_ctx_free(iis_worker->conf_ctx, env); + iis_worker->conf_ctx = NULL; + } + AXIS2_FREE(env->allocator, iis_worker); + return; +} + +int AXIS2_CALL +axis2_iis_worker_process_request( + axis2_iis_worker_t * iis_worker, + const axutil_env_t * env, + LPEXTENSION_CONTROL_BLOCK lpECB) +{ + axis2_conf_ctx_t * conf_ctx = NULL; + axutil_stream_t * out_stream = NULL; + axis2_transport_out_desc_t * out_desc = NULL; + axis2_transport_in_desc_t * in_desc = NULL; + axis2_char_t soap_action[INTERNET_MAX_URL_LENGTH]; + axis2_char_t original_url[INTERNET_MAX_URL_LENGTH]; + axis2_char_t req_url[INTERNET_MAX_URL_LENGTH]; + DWORD cbSize = 0; + CHAR server_name[MAX_SERVERNAME]; + axis2_char_t port[MAX_TCP_PORT_LEN]; + axis2_char_t redirect_url[INTERNET_MAX_PATH_LENGTH]; + axis2_char_t accept_language[INTERNET_MAX_PATH_LENGTH]; + axutil_hash_t *headers = NULL; + axis2_char_t peer_ip[50]; + axis2_char_t accept_header[INTERNET_MAX_URL_LENGTH]; + axis2_char_t accept_charset[INTERNET_MAX_URL_LENGTH]; + /*axutil_property_t *peer_property = NULL;*/ + + axis2_http_header_t *content_type_header = NULL; + axis2_http_header_t *content_length_header = NULL; + + /* New Code variables */ + axis2_http_transport_in_t request; + axis2_http_transport_out_t response; + + /* initialize tranport in structure */ + axis2_http_transport_utils_transport_in_init(&request, env); + + /* initialize tranport out structure */ + axis2_http_transport_utils_transport_out_init(&response, env); + + soap_action[0] = '\0'; + + /*Check the parameters*/ + if(!lpECB) + { + AXIS2_ERROR_SET_ERROR_NUMBER(env->error, AXIS2_ERROR_INVALID_NULL_PARAM); + return AXIS2_FAILURE; + } + conf_ctx = iis_worker->conf_ctx; + if(!conf_ctx) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NULL_CONFIGURATION_CONTEXT, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + cbSize = INTERNET_MAX_PATH_LENGTH; + if(lpECB->GetServerVariable(lpECB->ConnID, "SERVER_NAME", server_name, &cbSize) == FALSE) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot get server name from IIS."); + return AXIS2_FAILURE; + } + cbSize = MAX_TCP_PORT_LEN; + if(lpECB->GetServerVariable(lpECB->ConnID, "SERVER_PORT", port, &cbSize) == FALSE) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot get server port from IIS."); + return AXIS2_FAILURE; + } + request.svr_port = port; + + cbSize = INTERNET_MAX_PATH_LENGTH; + if(lpECB->GetServerVariable(lpECB->ConnID, "HTTP_URL", redirect_url, &cbSize) == FALSE) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot get server port from IIS."); + return AXIS2_FAILURE; + } + + /* We have a mapped URL only when the server version is 5 or less than that. */ + if(server_version <= 5) + { + axis2_worker_get_original_url(redirect_url, original_url); + /* create the url using the above variables */ + sprintf(req_url, "%s%s%s%s%s", "http://", server_name, ":", port, original_url); + } + else + { + sprintf(req_url, "%s%s%s%s%s", "http://", server_name, ":", port, redirect_url); + } + /* Set the request url */ + request.request_uri = req_url; + + out_stream = axutil_stream_create_basic(env); + out_desc = axis2_conf_get_transport_out(axis2_conf_ctx_get_conf(iis_worker->conf_ctx, env), + env, AXIS2_TRANSPORT_ENUM_HTTP); + in_desc = axis2_conf_get_transport_in(axis2_conf_ctx_get_conf(iis_worker->conf_ctx, env), env, + AXIS2_TRANSPORT_ENUM_HTTP); + + /* Create the in message context */ + request.msg_ctx = axis2_msg_ctx_create(env, conf_ctx, in_desc, out_desc); + axis2_msg_ctx_set_server_side(request.msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_transport_out_stream(request.msg_ctx, env, out_stream); + + /* Get the SOAPAction Header */ + cbSize = INTERNET_MAX_URL_LENGTH; + if(lpECB->GetServerVariable(lpECB->ConnID, "HTTP_SOAPAction", soap_action, &cbSize)) + { + request.soap_action = soap_action; + } + + /* Create the in stream */ + request.in_stream = axutil_stream_create_iis(env, lpECB); + if(!request.in_stream) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error occured in creating input stream."); + return AXIS2_FAILURE; + } + + /* Get the Remote Adrress */ + if(lpECB->GetServerVariable(lpECB->ConnID, "REMOTE_ADDR", peer_ip, &cbSize)) + { + request.remote_ip = peer_ip; + } + + /* Set the http headers into the message context */ + headers = axis2_iis_worker_read_http_headers(env, lpECB); + if(axis2_msg_ctx_set_transport_headers(request.msg_ctx, env, headers) == AXIS2_FAILURE) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "IIS: Error occured in setting transport headers."); + } + /* Set the content length */ + request.content_length = lpECB->cbTotalBytes; + /* Set the HTTP method */ + if(axutil_strcasecmp(lpECB->lpszMethod, "POST") == 0) + { + request.request_method = AXIS2_HTTP_METHOD_POST; + } + else if(axutil_strcasecmp(lpECB->lpszMethod, "GET") == 0) + { + request.request_method = AXIS2_HTTP_METHOD_GET; + } + else if(axutil_strcasecmp(lpECB->lpszMethod, "HEAD") == 0) + { + request.request_method = AXIS2_HTTP_METHOD_HEAD; + } + else if(axutil_strcasecmp(lpECB->lpszMethod, "PUT") == 0) + { + request.request_method = AXIS2_HTTP_METHOD_PUT; + } + else if(axutil_strcasecmp(lpECB->lpszMethod, "DELETE") == 0) + { + request.request_method = AXIS2_HTTP_METHOD_DELETE; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "IIS: Unsupported HTTP Method."); + return AXIS2_FAILURE; + } + /* Set the URL prefix. axis2_request_url_prefix is a global variable set at the init time */ + request.request_url_prefix = axis2_request_url_prefix; + /* Create the transport out info */ + request.out_transport_info = axis2_iis_out_transport_info_create(env, lpECB); + /* Set the content type */ + request.content_type = lpECB->lpszContentType; + + /* Get accept headaer */ + cbSize = INTERNET_MAX_PATH_LENGTH; + if(lpECB->GetServerVariable(lpECB->ConnID, "HTTP_Accept", accept_header, &cbSize)) + { + request.accept_header = accept_header; + } + + /* Get the accept langauge */ + cbSize = INTERNET_MAX_PATH_LENGTH; + if(lpECB->GetServerVariable(lpECB->ConnID, "HTTP_Accept-Language", accept_language, &cbSize)) + { + request.accept_language_header = accept_language; + } + + cbSize = INTERNET_MAX_PATH_LENGTH; + if(lpECB->GetServerVariable(lpECB->ConnID, "HTTP_Accept-Charset", accept_charset, &cbSize)) + { + request.accept_charset_header = accept_charset; + } + + /* Now we have set everything. We can call process method to process the request */ + if(axis2_http_transport_utils_process_request(env, conf_ctx, &request, &response) + == AXIS2_FAILURE) + { + return AXIS2_FAILURE; + } + + /* Write the response */ + if(response.response_data && response.response_data_length > 0) + { + axis2_char_t content_length_str[16] = { 0 }; + axis2_bool_t is_out_headers_created = AXIS2_FALSE; + if(!response.output_headers) + { + response.output_headers = axutil_array_list_create(env, 2); + is_out_headers_created = AXIS2_TRUE; + } + sprintf(content_length_str, "%d", response.response_data_length); + if(!response.content_type) + { + content_type_header = axis2_http_header_create(env, "Content-Type", + axis2_iis_out_transport_get_content(request.out_transport_info)); + } + else + { + content_type_header = axis2_http_header_create(env, "Content-Type", + response.content_type); + } + content_length_header = axis2_http_header_create(env, "Content-Length", content_length_str); + axutil_array_list_add(response.output_headers, env, content_length_header); + axutil_array_list_add(response.output_headers, env, content_type_header); + /* Write the headers */ + start_response(env, lpECB, response.http_status_code, response.http_status_code_name, + response.output_headers); + /* Write the response body */ + if(write_response(lpECB, response.response_data, response.response_data_length) + == AXIS2_FAILURE) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "IIS: Writing data to IIS"); + return AXIS2_FAILURE; + } + if(is_out_headers_created) + { + if(content_length_header) + { + axis2_http_header_free(content_length_header, env); + } + if(content_type_header) + { + axis2_http_header_free(content_type_header, env); + } + axutil_array_list_free(response.output_headers, env); + } + } + else + { + /* If we don't have a body we should write the HTTP headers */ + start_response(env, lpECB, response.http_status_code, response.http_status_code_name, + response.output_headers); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Response is NULL"); + } + + /* Do some cleaning */ + axis2_http_transport_utils_transport_in_uninit(&request, env); + axis2_http_transport_utils_transport_out_uninit(&response, env); + return AXIS2_SUCCESS; +} + +axis2_status_t +write_response( + LPEXTENSION_CONTROL_BLOCK lpECB, + const void *b, + unsigned int l) +{ + if(lpECB && b) + { + if(l) + { + unsigned int written = 0; + char *buf = (char *)b; + /* If couldn't write the data at onece try again until all the data is written.*/ + while(written < l) + { + DWORD try_to_write = l - written; + if(!lpECB-> WriteClient(lpECB->ConnID, buf + written, &try_to_write, 0)) + { + return AXIS2_FAILURE; + } + written += try_to_write; + } + } + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +axis2_status_t AXIS2_CALL +start_response( + const axutil_env_t *env, + LPEXTENSION_CONTROL_BLOCK lpECB, + int status, + const char *reason, + axutil_array_list_t *headers) +{ + static char crlf[3] = { (char)13, (char)10, '\0' }; + unsigned int num_of_headers = 0; + + if(status < 100 || status > 1000) + { + return AXIS2_FAILURE; + } + if(lpECB) + { + size_t len_of_status; + char *status_str; + char *headers_str; + + /* + * Create the status line + */ + if(reason) + { + status_str = (char *)_alloca((6 + strlen(reason)) * sizeof(char)); + sprintf(status_str, "%d %s", status, reason); + len_of_status = strlen(status_str); + } + else + { + switch(status) + { + case 200: + status_str = reasons[0].status_code; + len_of_status = reasons[0].status_len; + break; + case 202: + status_str = reasons[1].status_code; + len_of_status = reasons[1].status_len; + break; + case 500: + status_str = reasons[2].status_code; + len_of_status = reasons[2].status_len; + break; + default: + status_str = reasons[0].status_code; + len_of_status = reasons[0].status_len; + break; + } + } + /* + * Create response headers string + */ + if(headers && (num_of_headers = axutil_array_list_size(headers, env)) > 0) + { + size_t i, len_of_headers; + axis2_http_header_t *header = NULL; + for(i = 0, len_of_headers = 0; i < num_of_headers; i++) + { + header = axutil_array_list_get(headers, env, (int)i); + len_of_headers += strlen(axis2_http_header_get_name(header, env)); + len_of_headers += strlen(axis2_http_header_get_value(header, env)); + len_of_headers += 4; /* extra for colon, space and crlf */ + } + len_of_headers += 3; /* crlf and terminating null char */ + headers_str = (char *)_alloca(len_of_headers * sizeof(char)); + headers_str[0] = '\0'; + for(i = 0; i < num_of_headers; i++) + { + header = axutil_array_list_get(headers, env, (int)i); + strcat(headers_str, axis2_http_header_get_name(header, env)); + strcat(headers_str, ": "); + strcat(headers_str, axis2_http_header_get_value(header, env)); + strcat(headers_str, "\r\n"); + } + strcat(headers_str, "\r\n"); + } + else + { + headers_str = crlf; + } + if(!lpECB-> ServerSupportFunction(lpECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER, status_str, + (LPDWORD) & len_of_status, (LPDWORD)headers_str)) + { + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +axis2_status_t AXIS2_CALL +axis2_worker_get_original_url( + char url[], + char ret_url[]) +{ + extern axis2_char_t *axis2_location; + strcpy(ret_url, axis2_location); + strcat(ret_url, &url[25]); + return URI_MATCHED; +} + +axis2_char_t * AXIS2_CALL +axis2_iis_worker_get_bytes( + const axutil_env_t * env, + axutil_stream_t * stream) +{ + axutil_stream_t * tmp_stream = NULL; + int return_size = -1; + axis2_char_t * buffer = NULL; + axis2_bool_t loop_state = AXIS2_TRUE; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, stream, NULL); + + tmp_stream = axutil_stream_create_basic(env); + while(loop_state) + { + int read = 0; + int write = 0; + char buf[READ_SIZE]; + + read = axutil_stream_read(stream, env, buf, READ_SIZE); + if(read < 0) + { + break; + } + write = axutil_stream_write(tmp_stream, env, buf, read); + if(read < (READ_SIZE - 1)) + { + break; + } + } + return_size = axutil_stream_get_len(tmp_stream, env); + if(return_size > 0) + { + buffer = (char *)AXIS2_MALLOC(env->allocator, sizeof(char) * (return_size + 2)); + return_size = axutil_stream_read(tmp_stream, env, buffer, return_size + 1); + buffer[return_size + 1] = '\0'; + } + axutil_stream_free(tmp_stream, env); + return buffer; +} + +/** Read all HTTP headers. + */ +axutil_hash_t * +axis2_iis_worker_read_http_headers( + const axutil_env_t * env, + LPEXTENSION_CONTROL_BLOCK lpECB) +{ + const char szHTTP_[] = "HTTP_"; + char szBuffer[4096]; + DWORD dwBufferSize = sizeof szBuffer; + axutil_hash_t *headers = NULL; + axis2_http_header_t* http_header = NULL; + + BOOL bGet = lpECB->GetServerVariable(lpECB->ConnID, "ALL_HTTP", szBuffer, &dwBufferSize); + if(bGet) + { + /* Find lines, split key/data pair and write them as output */ + LPTSTR pOpts = NULL; + LPTSTR pEnd = NULL; + LPTSTR pChar = NULL; + char szTmpBuf[512]; + char szTmpName[256]; + + headers = axutil_hash_make(env); + szTmpBuf[0] = 0; + for(pChar = szBuffer; '\0' != *pChar;) + { + if(*pChar == '\r' || *pChar == '\n') + { + pChar++; + continue; + } + pOpts = strchr(pChar, ':');/* findseparator */ + if(pOpts && *pOpts) + { + pEnd = pOpts; + while(*pEnd && *pEnd != '\r' && *pEnd != '\n') + { + pEnd++; + } + *pOpts = '\0'; /* split the strings */ + *pEnd = '\0'; + if(0 == strncmp(pChar, szHTTP_, strlen(szHTTP_))) + { + pChar += strlen(szHTTP_); + } + strcpy(szTmpName, pChar); + axutil_string_replace(szTmpName, '_', '-'); + http_header = axis2_http_header_create(env, szTmpName, pOpts + 1); + axutil_hash_set(headers, axutil_strdup(env, szTmpName), AXIS2_HASH_KEY_STRING, + http_header); + pChar = pEnd + 1; + } + } + } + else + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "axis2_iis_worker_read_http_headers: no http headers"); + } + return headers; +} + diff --git a/src/core/transport/http/server/IIS/axis2_iis_worker.h b/src/core/transport/http/server/IIS/axis2_iis_worker.h new file mode 100644 index 0000000..f9b6292 --- /dev/null +++ b/src/core/transport/http/server/IIS/axis2_iis_worker.h @@ -0,0 +1,62 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_APACHE2_WORKER_H +#define AXIS2_APACHE2_WORKER_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ + +#endif /* + */ + +typedef struct axis2_iis_worker axis2_iis_worker_t; + +int server_version; + +int AXIS2_CALL + axis2_iis_worker_process_request( + axis2_iis_worker_t * iis_worker, + const axutil_env_t * env, + void *r); + + +void AXIS2_CALL + axis2_iis_worker_free( + axis2_iis_worker_t * iis_worker, + const axutil_env_t * env); + + +axis2_iis_worker_t * AXIS2_CALL + axis2_iis_worker_create( + const axutil_env_t * env, + axis2_char_t * repo_path); + + +#ifdef __cplusplus +} +#endif /* + */ + +#endif /* AXIS2_IIS_WORKER_H */ diff --git a/src/core/transport/http/server/IIS/axis2_isapi_plugin.c b/src/core/transport/http/server/IIS/axis2_isapi_plugin.c new file mode 100644 index 0000000..eccfd1c --- /dev/null +++ b/src/core/transport/http/server/IIS/axis2_isapi_plugin.c @@ -0,0 +1,476 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +#include "axis2_iis_constants.h" +#include "axis2_iis_worker.h" + +/* Axis headers */ +#include +#include +#include +#include +#include + +#ifndef _WIN32_WINNT +#define _WIN32_WINNT 0x0500 +#endif + +#define AXIS2_IIS_LOG_FILE_TAG "log_file" +#define AXIS2_IIS_LOG_LEVEL_TAG "log_level" +#define AXIS2_IIS_REPO_PATH_TAG "axis2c_home" +#define AXIS2_IIS_EXTENSION_URI_TAG "extension_uri" +#define AXIS2_IIS_REDIRECT_WORD_TAG "redirect_uri" +#define AXIS2_IIS_AXIS2_LOCATION "axis2_location" +#define AXIS2_IIS_SERVICE_URL_PREFIX "services_url_prefix" + +#define AXIS2_IIS_LOG_TRACE_VERB "trace" +#define AXIS2_IIS_LOG_ERROR_VERB "error" +#define AXIS2_IIS_LOG_INFO_VERB "info" +#define AXIS2_IIS_LOG_USER_VERB "user" +#define AXIS2_IIS_LOG_CRITICAL_VERB "critical" +#define AXIS2_IIS_LOG_WARN_VERB "warning" +#define AXIS2_IIS_LOG_DEBUG_VERB "debug" + +#define MAX_FILE_PATH 256 +#define REGISTRY_LOCATION "Software\\Apache Axis2c\\IIS ISAPI Redirector" + +static int is_inited = FALSE; +static axis2_iis_worker_t *axis2_worker = NULL; +static const axutil_env_t *axutil_env = NULL; + +/* Configuration parameters */ +axis2_char_t *axis2_location = "/axis2"; +static axis2_char_t *axis2_service_url_prefix= "/services"; +static axis2_char_t repo_path[MAX_FILE_PATH]; +static axis2_char_t log_file[MAX_FILE_PATH]; +static axutil_log_levels_t log_level = AXIS2_LOG_LEVEL_CRITICAL; + +/* Path variables */ +static char szOriginalPath[_MAX_PATH + 1]; +static char szPath[_MAX_PATH + 1]; + +axis2_char_t general_error[] = "\r\n" + " An IIS server error occurred. \r\n" + "

An IIS server error occurred

\r\n" + "
\r\n" + "An error occurred in IIS while processing this request."; + +axis2_char_t initializing_error[] = "\r\n" + " An IIS server error occurred. \r\n" + "

An IIS server error occurred

\r\n" + "
\r\n" + "An error occurred while initilizing Axis2/C."; + + +/* + * This is a utility functipn for reading configuration data from the registery. + */ +static axis2_status_t AXIS2_CALL +read_registery_init_data(); + +/* + * Utility function for reading + */ +static axis2_status_t AXIS2_CALL get_registry_config_parameter( + HKEY hkey, + const char *tag, + char *b, + DWORD sz); + +/* + * Parse the given string and return the corresponding log_level + */ +axutil_log_levels_t AXIS2_CALL axis2_iis_parse_log_level(char level[]); + +/* + * Initialize axis. This function is called in the begining of the module loading. + * It initializes the axis by reading values from the configuration and creating the + * required structures for the axis2c +*/ +axis2_status_t AXIS2_CALL init_axis2(); + +/* + * This is the function to be called after the processing + * is over for non Axis2 requets + */ +VOID +WINAPI +ExecUrlCompletion ( + EXTENSION_CONTROL_BLOCK * pecb, + PVOID pContext, + DWORD cbIO, + DWORD dwError + ); + +/* + * If somethign went wrong in the IIS server when + * we are proccessing we send this + */ +BOOL +send_error( + EXTENSION_CONTROL_BLOCK * pecb, + CHAR error[]); + +axis2_status_t AXIS2_CALL init_axis2(); + +BOOL +WINAPI +GetExtensionVersion(HSE_VERSION_INFO * pVer) +{ + pVer->dwExtensionVersion = MAKELONG( HSE_VERSION_MINOR, + HSE_VERSION_MAJOR); + strncpy( pVer->lpszExtensionDesc, + "WildCardMap Sample ISAPI Extension", HSE_MAX_EXT_DLL_NAME_LEN ); + + pVer->lpszExtensionDesc[HSE_MAX_EXT_DLL_NAME_LEN-1] = '\0'; + server_version = 5; + return TRUE; +} + +DWORD +WINAPI +HttpExtensionProc(EXTENSION_CONTROL_BLOCK * pecb) + +{ + HSE_EXEC_URL_INFO ExecUrlInfo; + DWORD cbData = INTERNET_MAX_URL_LENGTH; + char url[INTERNET_MAX_URL_LENGTH]; + axis2_bool_t is_for_us = AXIS2_TRUE; + + /* Get the URL */ + if ( pecb->GetServerVariable( pecb->ConnID, + "URL", + url, + &cbData ) == FALSE ) + { + return HSE_STATUS_ERROR; + } + + if (!is_inited) + { + DWORD dwBufferSize = 0; + axis2_char_t server_software[256]; + axis2_char_t *version = NULL; + + ZeroMemory(szOriginalPath, sizeof szOriginalPath); + dwBufferSize = sizeof szOriginalPath; + +#if _WIN32_WINNT >= 0x0502 + GetDllDirectory( dwBufferSize, szOriginalPath ); +#else + GetCurrentDirectory( dwBufferSize, szOriginalPath ); +#endif + ZeroMemory(szPath, sizeof szPath); + dwBufferSize = sizeof szPath; + /* Get the current physical paht */ + if (pecb->GetServerVariable(pecb->ConnID, "APPL_PHYSICAL_PATH", szPath, &dwBufferSize) == FALSE) + { + send_error(pecb, initializing_error); + return HSE_STATUS_ERROR; + } + /* Retrieve the server version */ + dwBufferSize = 32; + if (pecb->GetServerVariable(pecb->ConnID, "SERVER_SOFTWARE", server_software, &dwBufferSize) == FALSE) + { + send_error(pecb, initializing_error); + return HSE_STATUS_ERROR; + } + version = axutil_strchr(server_software, '/'); + if (version) + { + server_version = atoi(version + 1); + } +#if _WIN32_WINNT >= 0x0502 + SetDllDirectory( szPath ); +#else + SetCurrentDirectory( szPath ); +#endif + /* If we haven't initialized axis2/c before initialization failed */ + if (AXIS2_FAILURE == init_axis2()) + { + send_error(pecb, initializing_error); + return HSE_STATUS_ERROR; + } +#if _WIN32_WINNT >= 0x0502 + SetDllDirectory( szOriginalPath ); +#else + SetCurrentDirectory( szOriginalPath ); +#endif + } + + /* Check weather we have a request for Axis2/C */ + if (server_version >= 6 && strlen(url) >= strlen(axis2_location)) + { + int i = 0; + is_for_us = AXIS2_TRUE; + while (axis2_location[i] != '\0') + { + if (axis2_location[i] != (url)[i]) { + is_for_us = AXIS2_FALSE; + break; + } + i++; + } + if (url[i] != '/' && url[i] != '\0') + { + is_for_us = AXIS2_FALSE; + } + } + + if (is_for_us) + { + /* Windows cannot find the correct dlls unless the path is set*/ +#if _WIN32_WINNT >= 0x0502 + SetDllDirectory( szPath ); +#else + SetCurrentDirectory( szPath ); +#endif + pecb->dwHttpStatusCode = HTTP_INTERNAL_SERVER_ERROR; + /* We are sure that worker is not NULL since it is NULL init_axis2 would have failed */ + axis2_iis_worker_process_request(axis2_worker, axutil_env, pecb); + + /* Windows cannot find the correct dlls unless the dir is set + but we want to reset to previous dir after the load */ +#if _WIN32_WINNT >= 0x0502 + SetDllDirectory( szOriginalPath ); +#else + SetCurrentDirectory( szOriginalPath ); +#endif + return HSE_STATUS_SUCCESS; + } + else if (server_version >= 6) + { + /* For IIS 5.1 or earlier this code is never executed. Since the URL is + redirected to Axis2/C by the Filter */ + + /* If not for Axis2/C let the request go to who ever wants it */ + ExecUrlInfo.pszUrl = NULL; /* Use original request URL */ + ExecUrlInfo.pszMethod = NULL; /* Use original request method */ + ExecUrlInfo.pszChildHeaders = NULL; /* Use original request headers */ + ExecUrlInfo.pUserInfo = NULL; /* Use original request user info */ + ExecUrlInfo.pEntity = NULL; /* Use original request entity */ + + /* Provent recursion */ + ExecUrlInfo.dwExecUrlFlags = HSE_EXEC_URL_IGNORE_CURRENT_INTERCEPTOR; + + /* Associate the completion routine and the current URL with this request. */ + if ( pecb->ServerSupportFunction( pecb->ConnID, + HSE_REQ_IO_COMPLETION, + ExecUrlCompletion, + NULL, + NULL) == FALSE ) + { + return HSE_STATUS_ERROR; + } + + /* Ok, now that everything is set up, let's call the child request */ + if ( pecb->ServerSupportFunction( pecb->ConnID, + HSE_REQ_EXEC_URL, + &ExecUrlInfo, + NULL, + NULL ) == FALSE ) + { + return HSE_STATUS_ERROR; + } + /* Return pending and let the completion clean up */ + return HSE_STATUS_PENDING; + } + return HSE_STATUS_ERROR; +} + +VOID +WINAPI +ExecUrlCompletion ( + EXTENSION_CONTROL_BLOCK * pecb, + PVOID pContext, + DWORD cbIO, + DWORD dwError + ) +{ + /* We are done so notify */ + pecb->ServerSupportFunction( + pecb->ConnID, + HSE_REQ_DONE_WITH_SESSION, + NULL, + NULL, + NULL); +} + + +BOOL +send_error( + EXTENSION_CONTROL_BLOCK * pecb, + axis2_char_t error[]) +{ + DWORD cbData; + pecb->dwHttpStatusCode = 500; + /* Send headers and response */ + pecb->ServerSupportFunction( pecb->ConnID, + HSE_REQ_SEND_RESPONSE_HEADER, + "500 Server Error", + NULL, + (LPDWORD)"Content-Type: text/html\r\n\r\n" ); + + cbData = axutil_strlen( error ); + return pecb->WriteClient( pecb->ConnID, + error, + &cbData, + HSE_IO_SYNC ); +} + +axis2_status_t AXIS2_CALL read_registery_init_data() +{ + long rc = 0; + axis2_status_t ok = TRUE; + char tmpbuf[INTERNET_MAX_URL_LENGTH]; + HKEY hkey; + AXIS2_IMPORT extern axis2_char_t *axis2_request_url_prefix; + + rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_LOCATION, (DWORD) 0, KEY_READ, &hkey); + if (ERROR_SUCCESS != rc) + { + return AXIS2_FAILURE; + } + if (get_registry_config_parameter(hkey, AXIS2_IIS_REPO_PATH_TAG, tmpbuf, sizeof(repo_path))) + { + strcpy(repo_path, tmpbuf); + } + else + { + return AXIS2_FAILURE; + } + if (get_registry_config_parameter(hkey, AXIS2_IIS_LOG_FILE_TAG, tmpbuf, sizeof(log_file))) + { + strcpy(log_file, tmpbuf); + } + else + { + return AXIS2_FAILURE; + } + if (get_registry_config_parameter(hkey, AXIS2_IIS_LOG_LEVEL_TAG, tmpbuf, sizeof(tmpbuf))) + { + log_level = axis2_iis_parse_log_level(tmpbuf); + } + else + { + return AXIS2_FAILURE; + } + if (get_registry_config_parameter(hkey, AXIS2_IIS_SERVICE_URL_PREFIX, tmpbuf, sizeof(tmpbuf))) + { + axis2_request_url_prefix = _strdup(tmpbuf); + } + if (get_registry_config_parameter(hkey, AXIS2_IIS_AXIS2_LOCATION, tmpbuf, sizeof(tmpbuf))) + { + axis2_location = _strdup(tmpbuf); + } + RegCloseKey(hkey); + return ok; +} + +axutil_log_levels_t AXIS2_CALL +axis2_iis_parse_log_level(char level[]) +{ + if (0 == AXIS2_STRICMP(level, AXIS2_IIS_LOG_TRACE_VERB)) + { + return AXIS2_LOG_LEVEL_TRACE; + } + if (0 == AXIS2_STRICMP(level, AXIS2_IIS_LOG_DEBUG_VERB)) + { + return AXIS2_LOG_LEVEL_DEBUG; + } + if (0 == AXIS2_STRICMP(level, AXIS2_IIS_LOG_INFO_VERB)) + { + return AXIS2_LOG_LEVEL_INFO; + } + if (0 == AXIS2_STRICMP(level, AXIS2_IIS_LOG_USER_VERB)) + { + return AXIS2_LOG_LEVEL_USER; + } + if (0 == AXIS2_STRICMP(level, AXIS2_IIS_LOG_WARN_VERB)) + { + return AXIS2_LOG_LEVEL_WARNING; + } + if (0 == AXIS2_STRICMP(level, AXIS2_IIS_LOG_ERROR_VERB)) + { + return AXIS2_LOG_LEVEL_ERROR; + } + if (0 == AXIS2_STRICMP(level, AXIS2_IIS_LOG_CRITICAL_VERB)) + { + return AXIS2_LOG_LEVEL_CRITICAL; + } + return AXIS2_LOG_LEVEL_DEBUG; +} + +axis2_status_t AXIS2_CALL +get_registry_config_parameter(HKEY hkey, const char *tag, char *b, DWORD sz) +{ + DWORD type = 0; + LONG lrc; + + lrc = RegQueryValueEx(hkey, tag, (LPDWORD) 0, &type, (LPBYTE) b, &sz); + if ((ERROR_SUCCESS != lrc) || (type != REG_SZ)) + { + return FALSE; + } + b[sz] = '\0'; + return TRUE; +} + +/** + * This method initializes the axis2 engine. All the required variables are set to + * their initial values in this method. +*/ +axis2_status_t AXIS2_CALL init_axis2() +{ + /* + * These are the varibles required to initialize axis. + */ + axis2_status_t status = FALSE; + /* We need to init xml readers before we go into threaded env */ + if (!is_inited) + { + axiom_xml_reader_init(); + status = read_registery_init_data(); + if (status == AXIS2_FAILURE) + { + return AXIS2_FAILURE; + } + axutil_error_init(); + /* Initialize the environement */ + axutil_env = axutil_env_create_all(log_file, log_level); + if (!axutil_env) + { + return AXIS2_FAILURE; + } + axis2_worker = axis2_iis_worker_create(axutil_env, repo_path); + if (!axis2_worker) + { + return AXIS2_FAILURE; + } + is_inited = AXIS2_TRUE; + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} diff --git a/src/core/transport/http/server/IIS/iis_iaspi_plugin_51/axis2_isapi_51.c b/src/core/transport/http/server/IIS/iis_iaspi_plugin_51/axis2_isapi_51.c new file mode 100644 index 0000000..49cd6d9 --- /dev/null +++ b/src/core/transport/http/server/IIS/iis_iaspi_plugin_51/axis2_isapi_51.c @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "..\\axis2_iis_constants.h" + +#define REGISTRY_LOC "Software\\Apache Axis2c\\IIS ISAPI Redirector" +#define AXIS2_IIS_AXIS2_LOC "axis2_location" +static char *axis2_loc = "/axis2"; + +static axis2_char_t redirect_word[INTERNET_MAX_URL_LENGTH] = "/axis2/mod_axis2_IIS.dll\?"; +/* + * Search a given uri to find weather it matches a uri for the axis2 + * The uri format for axis2 is of the form + * scheme://server:port/axis2/other_parts + * This function search a give uri for the /axis2/. If a match + * is found it will replace the /axis2 part of the url with /axis2/mod_iis.dll? + */ +axis2_bool_t AXIS2_CALL +get_extension_url( + char url[], + char ret_url[]); + +/* + * This function is called by the IIS server at the server + * initialization. So this is the ideal plcae for initializing + * axis2c. + */ +BOOL WINAPI +GetFilterVersion( + PHTTP_FILTER_VERSION pVer) +{ + DWORD type = 0, size = 0; + LONG lrc = 0; + char tmpbuf[INTERNET_MAX_URL_LENGTH]; + HKEY hkey; + ULONG http_filter_revision = HTTP_FILTER_REVISION; + pVer->dwFilterVersion = pVer->dwServerFilterVersion; + if(pVer->dwFilterVersion > http_filter_revision) + { + pVer->dwFilterVersion = http_filter_revision; + } + + /* + Receive notifictions when + 1. Server preprocessed the headers. + 2. Log + 3. All the request coming in secure and none secure ports. + */ + pVer->dwFlags = (SF_NOTIFY_ORDER_HIGH | SF_NOTIFY_PREPROC_HEADERS | SF_NOTIFY_SECURE_PORT + | SF_NOTIFY_NONSECURE_PORT | SF_NOTIFY_AUTH_COMPLETE); + + /* Give a short discription about the module.*/ + strcpy(pVer->lpszFilterDesc, "axis2c filter"); + /* Get the axis2 location from the registry configuration */ + lrc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_LOC, (DWORD)0, KEY_READ, &hkey); + if(ERROR_SUCCESS != lrc) + { + return FALSE; + } + size = INTERNET_MAX_URL_LENGTH; + lrc = RegQueryValueEx(hkey, AXIS2_IIS_AXIS2_LOC, (LPDWORD)0, &type, (LPBYTE)tmpbuf, &size); + if((ERROR_SUCCESS == lrc) && (type == REG_SZ)) + { + tmpbuf[size] = '\0'; + axis2_loc = _strdup(tmpbuf); + } + RegCloseKey(hkey); + return TRUE; +} + +/* + When a notification happens this function is called by the IIS. + */ +DWORD WINAPI +HttpFilterProc( + PHTTP_FILTER_CONTEXT pfc, + DWORD notificationType, + LPVOID pvNotification) +{ + DWORD bufferLength = INTERNET_MAX_URL_LENGTH; + char url[INTERNET_MAX_URL_LENGTH]; + char modified_url[INTERNET_MAX_URL_LENGTH]; + + if(notificationType == SF_NOTIFY_PREPROC_HEADERS) + { + pfc->GetServerVariable(pfc, "HTTP_URL", url, &bufferLength); + if(get_extension_url(url, modified_url)) + { + ((PHTTP_FILTER_PREPROC_HEADERS)pvNotification)->SetHeader(pfc, "url", modified_url); + return SF_STATUS_REQ_HANDLED_NOTIFICATION; + } + } + return SF_STATUS_REQ_NEXT_NOTIFICATION; +} + +axis2_bool_t AXIS2_CALL +get_extension_url( + char url[], + char ret_url[]) +{ + axis2_bool_t is_for_us = AXIS2_FALSE; + int i = 0; + /* Should contain "/axis2/"*/ + ret_url[0] = '\0'; + if(strlen(url) >= strlen(axis2_loc)) + { + is_for_us = AXIS2_TRUE; + while(axis2_loc[i] != '\0') + { + if(axis2_loc[i] != (url)[i]) + { + is_for_us = AXIS2_FALSE; + break; + } + i++; + } + if(url[i] != '/' && url[i] != '\0') + { + is_for_us = AXIS2_FALSE; + } + } + if(is_for_us) + { + strcpy(ret_url, redirect_word); + strcat(ret_url, &url[i]); + } + return is_for_us; +} diff --git a/src/core/transport/http/server/IIS/mod_axis2.def b/src/core/transport/http/server/IIS/mod_axis2.def new file mode 100644 index 0000000..22205e7 --- /dev/null +++ b/src/core/transport/http/server/IIS/mod_axis2.def @@ -0,0 +1,7 @@ +LIBRARY "mod_axis2_IIS" + +EXPORTS + GetExtensionVersion + HttpExtensionProc + GetFilterVersion + HttpFilterProc \ No newline at end of file diff --git a/src/core/transport/http/server/Makefile.am b/src/core/transport/http/server/Makefile.am new file mode 100644 index 0000000..07cf1e9 --- /dev/null +++ b/src/core/transport/http/server/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS=@APACHE2BUILD@ simple_axis2_server ${CGI_DIR} +EXTRA_DIST=IIS CGI diff --git a/src/core/transport/http/server/apache2/Makefile.am b/src/core/transport/http/server/apache2/Makefile.am new file mode 100644 index 0000000..d5f6bd8 --- /dev/null +++ b/src/core/transport/http/server/apache2/Makefile.am @@ -0,0 +1,40 @@ +lib_LTLIBRARIES = libmod_axis2.la +libmod_axis2_la_SOURCES = mod_axis2.c\ + apache2_stream.c\ + apache2_out_transport_info.c\ + apache2_worker.c + +AM_CFLAGS = -DLINUX=2 -D_REENTRANT -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE + +libmod_axis2_la_LIBADD = $(LDFLAGS) \ + $(top_builddir)/axiom/src/om/libaxis2_axiom.la \ + $(top_builddir)/src/core/engine/libaxis2_engine.la\ + $(top_builddir)/util/src/libaxutil.la \ + $(top_builddir)/src/core/transport/http/util/libaxis2_http_util.la\ + $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la\ + $(top_builddir)/axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la\ + -lpthread + +libmod_axis2_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/transport/http \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/axiom/include\ + -I$(top_builddir)/util/include\ + @APACHE2INC@ \ + @APRINC@ + +EXTRA_DIST=axis2_apache2_worker.h apache2_stream.h axis2_apache2_out_transport_info.h + + + + + + + + diff --git a/src/core/transport/http/server/apache2/apache2_out_transport_info.c b/src/core/transport/http/server/apache2/apache2_out_transport_info.c new file mode 100644 index 0000000..9deaa56 --- /dev/null +++ b/src/core/transport/http/server/apache2/apache2_out_transport_info.c @@ -0,0 +1,191 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_apache2_out_transport_info.h" +#include +#include +#include +#include + +typedef struct axis2_apache2_out_transport_info +{ + axis2_http_out_transport_info_t out_transport_info; + request_rec *request; + axis2_char_t *encoding; +} axis2_apache2_out_transport_info_t; + +#define AXIS2_INTF_TO_IMPL(out_transport_info) \ + ((axis2_apache2_out_transport_info_t *)(out_transport_info)) + +void AXIS2_CALL +axis2_apache2_out_transport_info_free_void_arg( + void *transport_info, + const axutil_env_t * env) +{ + axis2_http_out_transport_info_t *transport_info_l = NULL; + + AXIS2_ENV_CHECK(env, void); + transport_info_l = (axis2_http_out_transport_info_t *)transport_info; + axis2_http_out_transport_info_free(transport_info_l, env); + return; +} + +axis2_status_t AXIS2_CALL +axis2_apache_out_transport_info_free( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env) +{ + axis2_apache2_out_transport_info_t *info = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + info = AXIS2_INTF_TO_IMPL(out_transport_info); + + info->request = NULL; /* request doesn't belong to info */ + if(info->encoding) + { + AXIS2_FREE(env->allocator, info->encoding); + info->encoding = NULL; + } + + AXIS2_FREE(env->allocator, info); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_apache_out_transport_info_set_content_type( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + const axis2_char_t * content_type) +{ + axis2_apache2_out_transport_info_t *info = NULL; + + axis2_char_t *tmp1 = NULL; + axis2_char_t *tmp2 = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, content_type, AXIS2_FAILURE); + info = AXIS2_INTF_TO_IMPL(out_transport_info); + + if(info->encoding) + { + + tmp1 = axutil_stracat(env, content_type, ";charset="); + tmp2 = axutil_stracat(env, tmp1, info->encoding); + info->request->content_type = apr_pstrdup(info->request->pool, tmp2); + AXIS2_FREE(env->allocator, tmp1); + AXIS2_FREE(env->allocator, tmp2); + } + else + { + info->request->content_type = apr_pstrdup(info->request->pool, content_type); + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_apache_out_transport_info_set_char_encoding( + axis2_http_out_transport_info_t * info, + const axutil_env_t * env, + const axis2_char_t * encoding) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, encoding, AXIS2_FAILURE); + + if(info->encoding) + { + AXIS2_FREE(env->allocator, info->encoding); + } + info->encoding = axutil_strdup(env, encoding); + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_apache_out_transport_info_set_cookie_header( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + const axis2_char_t * cookie_header) +{ + axis2_apache2_out_transport_info_t *info = NULL; + + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, cookie_header, AXIS2_FAILURE); + info = AXIS2_INTF_TO_IMPL(out_transport_info); + + apr_table_set(info->request->headers_out, AXIS2_HTTP_HEADER_SET_COOKIE, cookie_header); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_apache_out_transport_info_set_session( + axis2_http_out_transport_info_t * out_transport_info, + const axutil_env_t * env, + const axis2_char_t * session_id, + const axis2_char_t * session_value) +{ + axis2_apache2_out_transport_info_t *info = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, session_id, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, session_value, AXIS2_FAILURE); + info = AXIS2_INTF_TO_IMPL(out_transport_info); + + status = env->set_session_fn(info->request, session_id, session_value); + + return status; +} + +axis2_http_out_transport_info_t *AXIS2_CALL +axis2_apache2_out_transport_info_create( + const axutil_env_t * env, + request_rec * request) +{ + axis2_apache2_out_transport_info_t *info = NULL; + axis2_http_out_transport_info_t *out_transport_info = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + info = (axis2_apache2_out_transport_info_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_apache2_out_transport_info_t)); + + if(!info) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + info->request = request; + info->encoding = NULL; + + out_transport_info = &(info->out_transport_info); + out_transport_info->encoding = NULL; + out_transport_info->response = NULL; + + axis2_http_out_transport_info_set_char_encoding_func(out_transport_info, env, + axis2_apache_out_transport_info_set_char_encoding); + axis2_http_out_transport_info_set_content_type_func(out_transport_info, env, + axis2_apache_out_transport_info_set_content_type); + axis2_http_out_transport_info_set_cookie_header_func(out_transport_info, env, + axis2_apache_out_transport_info_set_cookie_header); + axis2_http_out_transport_info_set_session_func(out_transport_info, env, + axis2_apache_out_transport_info_set_session); + + return out_transport_info; +} + + diff --git a/src/core/transport/http/server/apache2/apache2_stream.c b/src/core/transport/http/server/apache2/apache2_stream.c new file mode 100644 index 0000000..5e189a7 --- /dev/null +++ b/src/core/transport/http/server/apache2/apache2_stream.c @@ -0,0 +1,292 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "apache2_stream.h" +#include + +typedef struct apache2_stream_impl +{ + axutil_stream_t stream; + axutil_stream_type_t stream_type; + request_rec *request; +} apache2_stream_impl_t; + +#define AXIS2_INTF_TO_IMPL(stream) ((apache2_stream_impl_t *)(stream)) + +axutil_stream_type_t AXIS2_CALL +apache2_stream_get_type( + axutil_stream_t * stream, + const axutil_env_t * env); + +int AXIS2_CALL apache2_stream_write( + axutil_stream_t * stream, + const axutil_env_t * env, + const void *buffer, + size_t count); + +int AXIS2_CALL apache2_stream_read( + axutil_stream_t * stream, + const axutil_env_t * env, + void *buffer, + size_t count); + +static int AXIS2_CALL +apache2_stream_skip( + axutil_stream_t * stream, + const axutil_env_t * env, + int count); + +int AXIS2_CALL apache2_stream_get_char( + axutil_stream_t * stream, + const axutil_env_t * env); + +static apr_size_t +apache2_ap_get_client_block( + request_rec *r, + char* buffer, + apr_size_t bufsiz); + +AXIS2_EXTERN axutil_stream_t *AXIS2_CALL +axutil_stream_create_apache2( + const axutil_env_t * env, + request_rec * request) +{ + apache2_stream_impl_t *stream_impl = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, request, NULL); + + stream_impl = (apache2_stream_impl_t *)AXIS2_MALLOC(env->allocator, + sizeof(apache2_stream_impl_t)); + + if(!stream_impl) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + memset(&(stream_impl->stream), 0, sizeof(axutil_stream_t)); + + stream_impl->request = request; + stream_impl->stream_type = AXIS2_STREAM_MANAGED; + + axutil_stream_set_read(&(stream_impl->stream), env, apache2_stream_read); + axutil_stream_set_write(&(stream_impl->stream), env, apache2_stream_write); + axutil_stream_set_skip(&(stream_impl->stream), env, apache2_stream_skip); + + return &(stream_impl->stream); +} + +int AXIS2_CALL +apache2_stream_read( + axutil_stream_t * stream, + const axutil_env_t * env, + void *buffer, + size_t count) +{ + apache2_stream_impl_t *stream_impl = NULL; + size_t read = 0; + size_t len = 0; + + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + + stream_impl = AXIS2_INTF_TO_IMPL(stream); + + while(count - len > 0) + { + read = apache2_ap_get_client_block(stream_impl->request, (char *) buffer + len, + count - len); + if(read > 0) + { + len += read; + } + else + { + break; + } + } + + return (int)len; + /* We are sure that the difference lies within the int range */ +} + +int AXIS2_CALL +apache2_stream_write( + axutil_stream_t * stream, + const axutil_env_t * env, + const void *buf, + size_t count) +{ + apache2_stream_impl_t *stream_impl = NULL; + axis2_char_t *buffer = NULL; + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + AXIS2_PARAM_CHECK(env->error, buf, AXIS2_FAILURE); + stream_impl = AXIS2_INTF_TO_IMPL(stream); + buffer = (axis2_char_t *)buf; + if(count <= 0) + { + return (int)count; + /* We are sure that the difference lies within the int range */ + } + /* assume that buffer is not null terminated */ + return ap_rwrite(buffer, (int)count, stream_impl->request); + /* We are sure that the difference lies within the int range */ +} + +static int AXIS2_CALL +apache2_stream_skip( + axutil_stream_t * stream, + const axutil_env_t * env, + int count) +{ + apache2_stream_impl_t *stream_impl = NULL; + axis2_char_t *tmp_buffer = NULL; + apr_size_t len = -1; + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + stream_impl = AXIS2_INTF_TO_IMPL(stream); + + tmp_buffer = AXIS2_MALLOC(env->allocator, count * sizeof(axis2_char_t)); + if(tmp_buffer == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return -1; + } + len = apache2_ap_get_client_block(stream_impl->request, tmp_buffer, count); + AXIS2_FREE(env->allocator, tmp_buffer); + return (int)len; + +} + +int AXIS2_CALL +apache2_stream_get_char( + axutil_stream_t * stream, + const axutil_env_t * env) +{ + int ret = -1; + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + + return ret; +} + +axutil_stream_type_t AXIS2_CALL +apache2_stream_get_type( + axutil_stream_t * stream, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + return AXIS2_INTF_TO_IMPL(stream)->stream_type; +} + +/* + * This is a re-write of get_client_block found in http_filters.c in httpd + * which does not work when dealing with compressed payloads (or any other input + * filters that could potentially return 0 bytes of filtered data and not be at + * the end of the stream). + * get_client_block is called in a loop to get the request message body. + * This is quite simple if the client includes a content-length + * (the normal case), but gets messy if the body is chunked. Note that + * r->remaining is used to maintain state across calls and that + * r->read_length is the total number of bytes given to the caller + * across all invocations. It is messy because we have to be careful not + * to read past the data provided by the client, since these reads block. + * Returns 0 on End-of-body, -1 on error or premature chunk end. + * + */ +static apr_size_t +apache2_ap_get_client_block( + request_rec *r, + char *buffer, + apr_size_t bufsiz) +{ + apr_status_t rv; + apr_bucket_brigade *bb; + int loop = 1; + apr_size_t origBufSize = bufsiz; + + if (r->remaining < 0 || (!r->read_chunked && r->remaining == 0)) { + return 0; + } + + bb = apr_brigade_create(r->pool, r->connection->bucket_alloc); + if (bb == NULL) { + r->connection->keepalive = AP_CONN_CLOSE; + return -1; + } + + /* we need to loop until the input filters (if any) give us data */ + while (loop) { + rv = ap_get_brigade(r->input_filters, bb, AP_MODE_READBYTES, + APR_BLOCK_READ, bufsiz); + + /* We lose the failure code here. This is why ap_get_client_block should + * not be used. + */ + if (rv != APR_SUCCESS) { + /* if we actually fail here, we want to just return and + * stop trying to read data from the client. + */ + r->connection->keepalive = AP_CONN_CLOSE; + apr_brigade_destroy(bb); + return -1; + } + + /* If this fails, it means that a filter is written incorrectly and that + * it needs to learn how to properly handle APR_BLOCK_READ requests by + * returning data when requested. + */ + AP_DEBUG_ASSERT(!APR_BRIGADE_EMPTY(bb)); + + /* Check to see if EOS in the brigade. + * + * If so, we have to leave a nugget for the *next* ap_get_client_block + * call to return 0. + */ + if (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) { + if (r->read_chunked) { + r->remaining = -1; + } else { + r->remaining = 0; + } + } + + rv = apr_brigade_flatten(bb, buffer, &bufsiz); + if (rv != APR_SUCCESS) { + apr_brigade_destroy(bb); + return -1; + } + + /* XXX yank me? */ + r->read_length += bufsiz; + + /* it is possible that the entire bucket brigade is exhausted, but no data + * has been produced by the input filter (mod_deflate, for example).... + * in this scenario, we really need to keep looping + */ + if (bufsiz != 0 || r->remaining <= 0) { + loop = 0; + apr_brigade_destroy(bb); + } else { + if (bufsiz == 0) { + bufsiz = origBufSize; + } + } + + } + + return (long)bufsiz; +} diff --git a/src/core/transport/http/server/apache2/apache2_stream.h b/src/core/transport/http/server/apache2/apache2_stream.h new file mode 100644 index 0000000..abbea45 --- /dev/null +++ b/src/core/transport/http/server/apache2/apache2_stream.h @@ -0,0 +1,46 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain count copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef APACHE2_STREAM_H +#define APACHE2_STREAM_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** \brief Constructor for creating apche2 stream + * @return axutil_stream (apache2) + */ + AXIS2_EXTERN axutil_stream_t *AXIS2_CALL + axutil_stream_create_apache2( + const axutil_env_t * env, + request_rec * req); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* APACHE2_STREAM_H */ diff --git a/src/core/transport/http/server/apache2/apache2_worker.c b/src/core/transport/http/server/apache2/apache2_worker.c new file mode 100644 index 0000000..12b05b2 --- /dev/null +++ b/src/core/transport/http/server/apache2/apache2_worker.c @@ -0,0 +1,1687 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axis2_apache2_worker.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "axis2_apache2_out_transport_info.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#define READ_SIZE 2048 + +static axis2_status_t +apache2_worker_send_mtom_message( + request_rec *request, + const axutil_env_t * env, + axutil_array_list_t *mime_parts, + axis2_char_t *mtom_sending_callback_name); + +static axis2_status_t +apache2_worker_send_attachment_using_file( + const axutil_env_t * env, + request_rec *request, + FILE *fp, + axis2_byte_t *buffer, + int buffer_size); + +static axis2_status_t +apache2_worker_send_attachment_using_callback( + const axutil_env_t * env, + request_rec *request, + axiom_mtom_sending_callback_t *callback, + void *handler, + void *user_param); + +static axutil_hash_t* +axis2_apache_worker_get_headers( + const axutil_env_t *env, + request_rec *request); + + +struct axis2_apache2_worker +{ + axis2_conf_ctx_t *conf_ctx; +}; + +AXIS2_EXTERN axis2_apache2_worker_t *AXIS2_CALL +axis2_apache2_worker_create( + const axutil_env_t * env, + axis2_char_t * repo_path) +{ + axis2_apache2_worker_t *apache2_worker = NULL; + axutil_hash_t* svc_map = NULL; + axis2_conf_t* conf = NULL; + axutil_hash_index_t *hi = NULL; + void* svc = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_LOG_INFO(env->log, "[Axis2] Axis2 worker created"); + apache2_worker = (axis2_apache2_worker_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_apache2_worker_t)); + + if(!apache2_worker) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + apache2_worker->conf_ctx = axis2_build_conf_ctx(env, repo_path); + + if(!apache2_worker->conf_ctx) + { + axis2_apache2_worker_free((axis2_apache2_worker_t *)apache2_worker, env); + return NULL; + } + + /* + * we have to load all the services. This is because, before the fork (in linux) + * we should have a full code segment. Otherwise, we can't share function pointers of services + * between processed. In fork, the code segment will be duplicated across processes + */ + conf = axis2_conf_ctx_get_conf(apache2_worker->conf_ctx, env); + if(!conf) + { + axis2_apache2_worker_free((axis2_apache2_worker_t *)apache2_worker, env); + return NULL; + } + + svc_map = axis2_conf_get_all_svcs(conf, env); + if(!svc_map) + { + axis2_apache2_worker_free((axis2_apache2_worker_t *)apache2_worker, env); + return NULL; + } + + for(hi = axutil_hash_first(svc_map, env); hi; hi = axutil_hash_next(env, hi)) + { + void *impl_class = NULL; + axis2_msg_recv_t *msg_recv = NULL; + axutil_hash_t *ops_hash = NULL; + + axutil_hash_this(hi, NULL, NULL, &svc); + if(!svc) + continue; + impl_class = axis2_svc_get_impl_class(svc, env); + if(impl_class) + continue; + ops_hash = axis2_svc_get_all_ops(svc, env); + if(ops_hash) + { + axutil_hash_index_t *op_hi = NULL; + void *op = NULL; + op_hi = axutil_hash_first(ops_hash, env); + if(op_hi) + { + axutil_hash_this(op_hi, NULL, NULL, &op); + if(op) + { + msg_recv = axis2_op_get_msg_recv(op, env); + if(msg_recv) + { + axis2_msg_recv_set_conf_ctx(msg_recv, env, apache2_worker->conf_ctx); + axis2_msg_recv_load_and_init_svc(msg_recv, env, svc); + } + } + } + + } + } + + AXIS2_LOG_INFO(env->log, "[Axis2] Axis2 worker created"); + + return apache2_worker; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_apache2_worker_free( + axis2_apache2_worker_t * apache2_worker, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(apache2_worker->conf_ctx) + { + axis2_conf_ctx_free(apache2_worker->conf_ctx, env); + apache2_worker->conf_ctx = NULL; + } + + AXIS2_FREE(env->allocator, apache2_worker); + + return; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_apache2_worker_process_request( + axis2_apache2_worker_t * apache2_worker, + const axutil_env_t * env, + request_rec * request) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_msg_ctx_t *msg_ctx = NULL; + axutil_stream_t *request_body = NULL; + axutil_stream_t *out_stream = NULL; + axis2_transport_out_desc_t *out_desc = NULL; + axis2_transport_in_desc_t *in_desc = NULL; + axis2_char_t *http_version = NULL; + axutil_string_t *soap_action = NULL; + axis2_char_t *soap_action_header_txt = NULL; + axis2_bool_t processed = AXIS2_FALSE; + int content_length = -1; + axis2_char_t *url_external_form = NULL; + axis2_char_t *body_string = NULL; + unsigned int body_string_len = 0; + int send_status = DECLINED; + axis2_char_t *content_type = NULL; + axis2_http_out_transport_info_t *apache2_out_transport_info = NULL; + axis2_char_t *ctx_uuid = NULL; + axis2_op_ctx_t *op_ctx = NULL; + axis2_char_t *peer_ip = NULL; + axutil_property_t *peer_property = NULL; + axutil_url_t *request_url = NULL; + axis2_char_t *accept_header_value = NULL; + axis2_char_t *accept_charset_header_value = NULL; + axis2_char_t *accept_language_header_value = NULL; + axis2_char_t *content_language_header_value = NULL; + axis2_bool_t do_mtom = AXIS2_FALSE; + axutil_array_list_t *mime_parts = NULL; + axutil_param_t *callback_name_param = NULL; + axis2_char_t *mtom_sending_callback_name = NULL; + axis2_char_t *cookie = NULL; + axis2_char_t *header_value = NULL; + axis2_status_t status = AXIS2_FAILURE; + axutil_hash_t *headers = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + AXIS2_PARAM_CHECK(env->error, request, AXIS2_CRITICAL_FAILURE); + + conf_ctx = apache2_worker->conf_ctx; + + if(!conf_ctx) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NULL_CONFIGURATION_CONTEXT, AXIS2_FAILURE); + return AXIS2_CRITICAL_FAILURE; + } + content_length = (int)request->remaining; + /* We are sure that the difference lies within the int range */ + http_version = request->protocol; + + request_url = axutil_url_create(env, "http", request->hostname, request->parsed_uri.port, + request->unparsed_uri); + if(request_url) + { + url_external_form = axutil_url_to_external_form(request_url, env); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, url_external_form); + axutil_url_free(request_url, env); + request_url = NULL; + } + else + { + send_status = OK; + request->status = HTTP_BAD_REQUEST; + return send_status; + } + + content_type = (axis2_char_t *)apr_table_get(request->headers_in, + AXIS2_HTTP_HEADER_CONTENT_TYPE); + if(!content_type) + { + content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_PLAIN; + } + request->content_type = content_type; + + out_desc = axis2_conf_get_transport_out(axis2_conf_ctx_get_conf(apache2_worker->conf_ctx, env), + env, AXIS2_TRANSPORT_ENUM_HTTP); + in_desc = axis2_conf_get_transport_in(axis2_conf_ctx_get_conf(apache2_worker->conf_ctx, env), + env, AXIS2_TRANSPORT_ENUM_HTTP); + { + axis2_transport_receiver_t *receiver = NULL; + receiver = axis2_transport_in_desc_get_recv(in_desc, env); + if(receiver) + axis2_transport_receiver_set_server_ip(receiver, env, request->connection->local_ip); + } + + msg_ctx = axis2_msg_ctx_create(env, conf_ctx, in_desc, out_desc); + axis2_msg_ctx_set_server_side(msg_ctx, env, AXIS2_TRUE); + + cookie = (axis2_char_t *)apr_table_get(request->headers_in, + AXIS2_HTTP_HEADER_COOKIE); + if(cookie) + { + char *session_str = NULL; + axis2_char_t *session_id = NULL; + + session_id = axis2_http_transport_utils_get_session_id_from_cookie(env, cookie); + if(session_id) + session_str = env->get_session_fn((void *) request, session_id); + if(session_str) + axis2_http_transport_utils_set_session(env, msg_ctx, session_str); + } + + if(request->read_chunked == AXIS2_TRUE && 0 == content_length) + { + content_length = -1; + request->chunked = 1; + } + if(!http_version) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NULL_HTTP_VERSION, AXIS2_FAILURE); + return AXIS2_CRITICAL_FAILURE; + } + out_stream = axutil_stream_create_basic(env); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Client HTTP version %s", http_version); + + peer_ip = request->connection->remote_ip; + + if(peer_ip) + { + peer_property = axutil_property_create(env); + axutil_property_set_value(peer_property, env, axutil_strdup(env, peer_ip)); + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_SVR_PEER_IP_ADDR, peer_property); + } + + axis2_msg_ctx_set_transport_out_stream(msg_ctx, env, out_stream); + + ctx_uuid = axutil_uuid_gen(env); + if(ctx_uuid) + { + axutil_string_t *uuid_str = axutil_string_create_assume_ownership(env, &ctx_uuid); + axis2_msg_ctx_set_svc_grp_ctx_id(msg_ctx, env, uuid_str); + axutil_string_free(uuid_str, env); + } + + apache2_out_transport_info = axis2_apache2_out_transport_info_create(env, request); + axis2_msg_ctx_set_out_transport_info(msg_ctx, env, &(apache2_out_transport_info->out_transport)); + + accept_header_value = (axis2_char_t *)apr_table_get(request->headers_in, + AXIS2_HTTP_HEADER_ACCEPT); + if(accept_header_value) + { + axutil_array_list_t *accept_header_field_list = NULL; + axutil_array_list_t *accept_record_list = NULL; + accept_header_field_list = axutil_tokenize(env, accept_header_value, ','); + if(accept_header_field_list && axutil_array_list_size(accept_header_field_list, env) > 0) + { + axis2_char_t *token = NULL; + accept_record_list = axutil_array_list_create(env, axutil_array_list_size( + accept_header_field_list, env)); + do + { + if(token) + { + axis2_http_accept_record_t *rec = NULL; + rec = axis2_http_accept_record_create(env, token); + if(rec) + { + axutil_array_list_add(accept_record_list, env, rec); + } + AXIS2_FREE(env->allocator, token); + } + token = (axis2_char_t *)axutil_array_list_remove(accept_header_field_list, env, 0); + } + while(token); + } + if(accept_record_list && axutil_array_list_size(accept_record_list, env) > 0) + { + axis2_msg_ctx_set_http_accept_record_list(msg_ctx, env, accept_record_list); + } + } + + accept_charset_header_value = (axis2_char_t *)apr_table_get(request->headers_in, + AXIS2_HTTP_HEADER_ACCEPT_CHARSET); + if(accept_charset_header_value) + { + axutil_array_list_t *accept_charset_header_field_list = NULL; + axutil_array_list_t *accept_charset_record_list = NULL; + accept_charset_header_field_list = axutil_tokenize(env, accept_charset_header_value, ','); + if(accept_charset_header_field_list && axutil_array_list_size( + accept_charset_header_field_list, env) > 0) + { + axis2_char_t *token = NULL; + accept_charset_record_list = axutil_array_list_create(env, axutil_array_list_size( + accept_charset_header_field_list, env)); + do + { + if(token) + { + axis2_http_accept_record_t *rec = NULL; + rec = axis2_http_accept_record_create(env, token); + if(rec) + { + axutil_array_list_add(accept_charset_record_list, env, rec); + } + AXIS2_FREE(env->allocator, token); + } + token = (axis2_char_t *)axutil_array_list_remove(accept_charset_header_field_list, + env, 0); + } + while(token); + } + if(accept_charset_record_list && axutil_array_list_size(accept_charset_record_list, env) + > 0) + { + axis2_msg_ctx_set_http_accept_charset_record_list(msg_ctx, env, + accept_charset_record_list); + } + } + + accept_language_header_value = (axis2_char_t *)apr_table_get(request->headers_in, + AXIS2_HTTP_HEADER_ACCEPT_LANGUAGE); + if(accept_language_header_value) + { + axutil_array_list_t *accept_language_header_field_list = NULL; + axutil_array_list_t *accept_language_record_list = NULL; + accept_language_header_field_list = axutil_tokenize(env, accept_language_header_value, ','); + if(accept_language_header_field_list && axutil_array_list_size( + accept_language_header_field_list, env) > 0) + { + axis2_char_t *token = NULL; + accept_language_record_list = axutil_array_list_create(env, axutil_array_list_size( + accept_language_header_field_list, env)); + do + { + if(token) + { + axis2_http_accept_record_t *rec = NULL; + rec = axis2_http_accept_record_create(env, token); + if(rec) + { + axutil_array_list_add(accept_language_record_list, env, rec); + } + AXIS2_FREE(env->allocator, token); + } + token = (axis2_char_t *)axutil_array_list_remove(accept_language_header_field_list, + env, 0); + } + while(token); + } + if(accept_language_record_list && axutil_array_list_size(accept_language_record_list, env) + > 0) + { + axis2_msg_ctx_set_http_accept_language_record_list(msg_ctx, env, + accept_language_record_list); + } + } + + soap_action_header_txt = (axis2_char_t *)apr_table_get(request->headers_in, + AXIS2_HTTP_HEADER_SOAP_ACTION); + + if(soap_action_header_txt) + { + soap_action = axutil_string_create(env, soap_action_header_txt); + } + + headers = axis2_apache_worker_get_headers(env, request); + axis2_msg_ctx_set_transport_headers(msg_ctx, env, headers); + + request_body = axutil_stream_create_apache2(env, request); + if(!request_body) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error occured in" + " creating input stream."); + return AXIS2_CRITICAL_FAILURE; + } + if(M_GET == request->method_number || M_DELETE == request->method_number) + { + if(M_DELETE == request->method_number) + { + processed = axis2_http_transport_utils_process_http_delete_request(env, msg_ctx, + request_body, out_stream, content_type, soap_action, url_external_form, conf_ctx, + axis2_http_transport_utils_get_request_params(env, + (axis2_char_t *)url_external_form)); + } + else if(request->header_only) + { + processed = axis2_http_transport_utils_process_http_head_request(env, msg_ctx, + request_body, out_stream, content_type, soap_action, url_external_form, conf_ctx, + axis2_http_transport_utils_get_request_params(env, + (axis2_char_t *)url_external_form)); + } + else + { + processed = axis2_http_transport_utils_process_http_get_request(env, msg_ctx, + request_body, out_stream, content_type, soap_action, url_external_form, conf_ctx, + axis2_http_transport_utils_get_request_params(env, + (axis2_char_t *)url_external_form)); + } + if(AXIS2_FALSE == processed) + { + axis2_char_t *wsdl = NULL; + axis2_bool_t is_services_path = AXIS2_FALSE; + if(M_DELETE != request->method_number) + { + axis2_char_t *temp = NULL; + temp = strstr(url_external_form, AXIS2_REQUEST_URL_PREFIX); + if(temp) + { + temp += strlen(AXIS2_REQUEST_URL_PREFIX); + if(*temp == '/') + { + temp++; + } + if(!*temp || *temp == '?' || *temp == '#') + { + is_services_path = AXIS2_TRUE; + } + } + } + wsdl = strstr(url_external_form, AXIS2_REQUEST_WSDL); + if(is_services_path) + { + body_string = axis2_http_transport_utils_get_services_html(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + } + else if(M_DELETE != request->method_number && wsdl) + { + body_string = axis2_http_transport_utils_get_services_static_wsdl(env, conf_ctx, + (axis2_char_t *)url_external_form); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML; + + } + else if(env->error->error_number == AXIS2_ERROR_SVC_OR_OP_NOT_FOUND) + { + axutil_array_list_t *method_list = NULL; + int size = 0; + method_list = axis2_msg_ctx_get_supported_rest_http_methods(msg_ctx, env); + size = axutil_array_list_size(method_list, env); + if(method_list && size) + { + axis2_char_t *method_list_str = NULL; + axis2_char_t *temp; + int i = 0; + method_list_str = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * 29); + temp = method_list_str; + request->allowed_methods->method_mask = 0; + for(i = 0; i < size; i++) + { + if(i) + { + sprintf(temp, ", "); + temp += 2; + } + sprintf(temp, "%s", (axis2_char_t *)axutil_array_list_get(method_list, env, + i)); + temp += strlen(temp); + /* Conditions below is to assist down-stream modules */ + if(!strcasecmp(AXIS2_HTTP_PUT, (axis2_char_t *)axutil_array_list_get( + method_list, env, i))) + { + request->allowed_methods->method_mask |= AP_METHOD_BIT << M_PUT; + } + else if(!strcasecmp(AXIS2_HTTP_POST, (axis2_char_t *)axutil_array_list_get( + method_list, env, i))) + { + request->allowed_methods->method_mask |= AP_METHOD_BIT << M_POST; + } + else if(!strcasecmp(AXIS2_HTTP_GET, (axis2_char_t *)axutil_array_list_get( + method_list, env, i))) + { + request->allowed_methods->method_mask |= AP_METHOD_BIT << M_GET; + } + else if(!strcasecmp(AXIS2_HTTP_HEAD, (axis2_char_t *)axutil_array_list_get( + method_list, env, i))) + { + /* Apache Can't differentiate between HEAD and GET */ + request->allowed_methods->method_mask |= AP_METHOD_BIT << M_GET; + } + else if(!strcasecmp(AXIS2_HTTP_DELETE, + (axis2_char_t *)axutil_array_list_get(method_list, env, i))) + { + request->allowed_methods->method_mask |= AP_METHOD_BIT << M_DELETE; + } + } + *temp = '\0'; + apr_table_set(request->err_headers_out, AXIS2_HTTP_HEADER_ALLOW, + method_list_str); + AXIS2_FREE(env->allocator, method_list_str); + body_string = axis2_http_transport_utils_get_method_not_allowed(env, conf_ctx); + request->status = HTTP_METHOD_NOT_ALLOWED; + } + else + { + body_string = axis2_http_transport_utils_get_not_found(env, conf_ctx); + request->status = HTTP_NOT_FOUND; + } + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL) + { + body_string = axis2_http_transport_utils_get_bad_request(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + request->status = HTTP_BAD_REQUEST; + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL) + { + body_string = axis2_http_transport_utils_get_request_timeout(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + request->status = HTTP_REQUEST_TIME_OUT; + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL) + { + body_string = axis2_http_transport_utils_get_conflict(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + request->status = HTTP_CONFLICT; + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_GONE_CODE_VAL) + { + body_string = axis2_http_transport_utils_get_gone(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + request->status = HTTP_GONE; + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL) + { + body_string = axis2_http_transport_utils_get_precondition_failed(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + request->status = HTTP_PRECONDITION_FAILED; + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL) + { + body_string = axis2_http_transport_utils_get_request_entity_too_large(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + request->status = HTTP_REQUEST_ENTITY_TOO_LARGE; + } + else if(axis2_msg_ctx_get_status_code(msg_ctx, env) + == AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL) + { + body_string = axis2_http_transport_utils_get_service_unavailable(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + request->status = HTTP_SERVICE_UNAVAILABLE; + } + else + { + body_string = axis2_http_transport_utils_get_internal_server_error(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + request->status = HTTP_INTERNAL_SERVER_ERROR; + } + + if(body_string) + { + body_string_len = axutil_strlen(body_string); + } + send_status = OK; + } + } + else if(M_POST == request->method_number || M_PUT == request->method_number) + { + /*axis2_status_t status = AXIS2_FAILURE;*/ + if(M_POST == request->method_number) + { + status = axis2_http_transport_utils_process_http_post_request(env, msg_ctx, + request_body, out_stream, content_type, content_length, soap_action, + (axis2_char_t *)url_external_form); + } + else + { + status = axis2_http_transport_utils_process_http_put_request(env, msg_ctx, + request_body, out_stream, content_type, content_length, soap_action, + (axis2_char_t *)url_external_form); + } + if(AXIS2_FAILURE == status && (M_PUT == request->method_number + || axis2_msg_ctx_get_doing_rest(msg_ctx, env))) + { + if(env->error->error_number == AXIS2_ERROR_SVC_OR_OP_NOT_FOUND) + { + axutil_array_list_t *method_list = NULL; + int size = 0; + method_list = axis2_msg_ctx_get_supported_rest_http_methods(msg_ctx, env); + size = axutil_array_list_size(method_list, env); + if(method_list && size) + { + axis2_char_t *method_list_str = NULL; + axis2_char_t *temp; + int i = 0; + method_list_str = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * 29); + temp = method_list_str; + request->allowed_methods->method_mask = 0; + for(i = 0; i < size; i++) + { + if(i) + { + sprintf(temp, ", "); + temp += 2; + } + sprintf(temp, "%s", (axis2_char_t *)axutil_array_list_get(method_list, env, + i)); + temp += strlen(temp); + /* Conditions below is to assist down-stream modules */ + if(!strcasecmp(AXIS2_HTTP_PUT, (axis2_char_t *)axutil_array_list_get( + method_list, env, i))) + { + request->allowed_methods->method_mask |= AP_METHOD_BIT << M_PUT; + } + else if(!strcasecmp(AXIS2_HTTP_POST, (axis2_char_t *)axutil_array_list_get( + method_list, env, i))) + { + request->allowed_methods->method_mask |= AP_METHOD_BIT << M_POST; + } + else if(!strcasecmp(AXIS2_HTTP_GET, (axis2_char_t *)axutil_array_list_get( + method_list, env, i))) + { + request->allowed_methods->method_mask |= AP_METHOD_BIT << M_GET; + } + else if(!strcasecmp(AXIS2_HTTP_HEAD, (axis2_char_t *)axutil_array_list_get( + method_list, env, i))) + { + /* Apache Can't differentiate between HEAD and GET */ + request->allowed_methods->method_mask |= AP_METHOD_BIT << M_GET; + } + else if(!strcasecmp(AXIS2_HTTP_DELETE, + (axis2_char_t *)axutil_array_list_get(method_list, env, i))) + { + request->allowed_methods->method_mask |= AP_METHOD_BIT << M_DELETE; + } + } + *temp = '\0'; + apr_table_set(request->err_headers_out, AXIS2_HTTP_HEADER_ALLOW, + method_list_str); + AXIS2_FREE(env->allocator, method_list_str); + body_string = axis2_http_transport_utils_get_method_not_allowed(env, conf_ctx); + request->status = HTTP_METHOD_NOT_ALLOWED; + } + else + { + body_string = axis2_http_transport_utils_get_not_found(env, conf_ctx); + request->status = HTTP_NOT_FOUND; + } + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + } + else + { + body_string = axis2_http_transport_utils_get_internal_server_error(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + request->status = HTTP_INTERNAL_SERVER_ERROR; + } + + if(body_string) + { + body_string_len = axutil_strlen(body_string); + } + send_status = OK; + } + else if(status == AXIS2_FAILURE) + { + axis2_msg_ctx_t *fault_ctx = NULL; + axis2_char_t *fault_code = NULL; + axis2_engine_t *engine = axis2_engine_create(env, conf_ctx); + if(!engine) + { + /* Critical error, cannot proceed, Apache will send default + document for 500 + */ + return AXIS2_CRITICAL_FAILURE; + } + if(axis2_msg_ctx_get_is_soap_11(msg_ctx, env)) + { + fault_code = AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX ":" + AXIOM_SOAP11_FAULT_CODE_SENDER; + } + else + { + fault_code = AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX ":" + AXIOM_SOAP12_SOAP_FAULT_VALUE_SENDER; + } + fault_ctx = axis2_engine_create_fault_msg_ctx(engine, env, msg_ctx, + fault_code, + axutil_error_get_message + (env->error)); + axis2_engine_send_fault(engine, env, fault_ctx); + if (out_stream) + { + body_string = axutil_stream_get_buffer(out_stream, env); + body_string_len = axutil_stream_get_len(out_stream, env); + } + + /* In case of a SOAP Fault, we have to set the status to 500, + but still return OK because the module has handled the error + */ + send_status = OK; + request->status = HTTP_INTERNAL_SERVER_ERROR; + } + } + else + { + body_string = + axis2_http_transport_utils_get_not_implemented(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + + if (body_string) + { + body_string_len = axutil_strlen(body_string); + } + send_status = OK; + request->status = HTTP_NOT_IMPLEMENTED; + } + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + + if (op_ctx) + { + axis2_msg_ctx_t *out_msg_ctx = NULL; + axis2_msg_ctx_t **msg_ctx_map = NULL; + + msg_ctx_map = axis2_op_ctx_get_msg_ctx_map(op_ctx, env); + out_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT]; + if (out_msg_ctx) + { + content_language_header_value = axis2_msg_ctx_get_content_language(out_msg_ctx, env); + } + } + + if (send_status == DECLINED) + { + axis2_bool_t do_rest = AXIS2_FALSE; + if (M_POST != request->method_number || + axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + { + do_rest = AXIS2_TRUE; + } + if ((accept_header_value || accept_charset_header_value || + accept_language_header_value) && do_rest) + { + axis2_char_t *content_type_header_value = NULL; + axis2_char_t *temp = NULL; + axis2_char_t *language_header_value = NULL; + + content_type_header_value = (axis2_char_t *) request->content_type; + language_header_value = content_language_header_value; + if (content_type_header_value) + { + temp = axutil_strdup(env, content_type_header_value); + } + if (temp) + { + axis2_char_t *content_type = NULL; + axis2_char_t *char_set = NULL; + axis2_char_t *temp2 = NULL; + + temp2 = strchr(temp, ';'); + if (temp2) + { + *temp2 = '\0'; + temp2++; + char_set = axutil_strcasestr(temp2, AXIS2_HTTP_CHAR_SET_ENCODING); + } + if (char_set) + { + char_set = axutil_strltrim(env, char_set, " \t="); + } + if (char_set) + { + temp2 = strchr(char_set, ';'); + } + if (temp2) + { + *temp2 = '\0'; + } + content_type = axutil_strtrim(env, temp, NULL); + + if (temp) + { + AXIS2_FREE(env->allocator, temp); + temp = NULL; + } + if (content_type && accept_header_value && + !axutil_strcasestr(accept_header_value, content_type)) + { + temp2 = strchr(content_type, '/'); + if (temp2) + { + *temp2 = '\0'; + temp = AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * ((int)strlen(content_type) + 3)); + if (!temp) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FALSE; + } + sprintf(temp, "%s/*", content_type); + if (!axutil_strcasestr(accept_header_value, temp) && + !strstr(accept_header_value, AXIS2_HTTP_HEADER_ACCEPT_ALL)) + { + body_string = + axis2_http_transport_utils_get_not_acceptable(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + + if (body_string) + { + body_string_len = axutil_strlen(body_string); + } + send_status = OK; + request->status = HTTP_NOT_ACCEPTABLE; + } + AXIS2_FREE(env->allocator, temp); + } + } + if (content_type) + { + AXIS2_FREE(env->allocator, content_type); + } + if (char_set && accept_charset_header_value && + !axutil_strcasestr(accept_charset_header_value, char_set)) + { + body_string = + axis2_http_transport_utils_get_not_acceptable(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + + if (body_string) + { + body_string_len = axutil_strlen(body_string); + } + send_status = OK; + request->status = HTTP_NOT_ACCEPTABLE; + } + if (char_set) + { + AXIS2_FREE(env->allocator, char_set); + } + } + if (language_header_value) + { + if (accept_language_header_value && + !axutil_strcasestr(accept_language_header_value, language_header_value)) + { + body_string = + axis2_http_transport_utils_get_not_acceptable(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + + if (body_string) + { + body_string_len = axutil_strlen(body_string); + } + send_status = OK; + request->status = HTTP_NOT_ACCEPTABLE; + } + } + } + } + + header_value = axis2_http_transport_utils_get_session(env, msg_ctx); + if(header_value) + { + axis2_http_out_transport_info_t *out_info = NULL; + out_info = (axis2_http_out_transport_info_t *)axis2_msg_ctx_get_out_transport_info(msg_ctx, env); + AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_COOKIE_HEADER(out_info, env, header_value); + } + if (send_status == DECLINED) + { + axis2_bool_t do_rest = AXIS2_FALSE; + if (M_POST != request->method_number || + axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + { + do_rest = AXIS2_TRUE; + } + if (op_ctx && axis2_op_ctx_get_response_written(op_ctx, env)) + { + if (do_rest) + { + axis2_msg_ctx_t *out_msg_ctx = NULL; + axis2_msg_ctx_t *in_msg_ctx = NULL; + axis2_msg_ctx_t **msg_ctx_map = NULL; + + msg_ctx_map = axis2_op_ctx_get_msg_ctx_map(op_ctx, env); + out_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT]; + in_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN]; + if (in_msg_ctx) + { + /* TODO: Add necessary handling */ + } + if (out_msg_ctx) + { + int size = 0; + axutil_array_list_t *output_header_list = NULL; + output_header_list = axis2_msg_ctx_get_http_output_headers(out_msg_ctx, env); + if (output_header_list) + { + size = axutil_array_list_size(output_header_list, env); + } + while (size) + { + axis2_http_header_t *output_header = NULL; + size--; + output_header = (axis2_http_header_t *) + axutil_array_list_get(output_header_list, env, size); + apr_table_set(request->err_headers_out, + axis2_http_header_get_name(output_header, env), + axis2_http_header_get_value(output_header, env)); + } + if (axis2_msg_ctx_get_status_code(out_msg_ctx, env)) + { + int status_code = axis2_msg_ctx_get_status_code(out_msg_ctx, env); + switch (status_code) + { + case AXIS2_HTTP_RESPONSE_CONTINUE_CODE_VAL: + request->status = HTTP_CONTINUE; + break; + case AXIS2_HTTP_RESPONSE_ACK_CODE_VAL: + request->status = HTTP_ACCEPTED; + break; + case AXIS2_HTTP_RESPONSE_MULTIPLE_CHOICES_CODE_VAL: + request->status = HTTP_MULTIPLE_CHOICES; + break; + case AXIS2_HTTP_RESPONSE_MOVED_PERMANENTLY_CODE_VAL: + request->status = HTTP_MOVED_PERMANENTLY; + break; + case AXIS2_HTTP_RESPONSE_SEE_OTHER_CODE_VAL: + request->status = HTTP_SEE_OTHER; + break; + case AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_VAL: + request->status = HTTP_NOT_MODIFIED; + break; + case AXIS2_HTTP_RESPONSE_TEMPORARY_REDIRECT_CODE_VAL: + request->status = HTTP_TEMPORARY_REDIRECT; + break; + case AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL: + request->status = HTTP_BAD_REQUEST; + break; + case AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL: + request->status = HTTP_REQUEST_TIME_OUT; + break; + case AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL: + request->status = HTTP_CONFLICT; + break; + case AXIS2_HTTP_RESPONSE_GONE_CODE_VAL: + request->status = HTTP_GONE; + break; + case AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL: + request->status = HTTP_PRECONDITION_FAILED; + break; + case AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL: + request->status = HTTP_REQUEST_ENTITY_TOO_LARGE; + break; + case AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL: + request->status = HTTP_SERVICE_UNAVAILABLE; + break; + default: + request->status = HTTP_OK; + break; + } + send_status = DONE; + } + } + } + if (send_status == DECLINED) + { + send_status = OK; + if (out_stream) + { + body_string = axutil_stream_get_buffer(out_stream, env); + body_string_len = axutil_stream_get_len(out_stream, env); + } + } + } + else if (op_ctx) + { + if (do_rest) + { + axis2_msg_ctx_t *out_msg_ctx = NULL; + axis2_msg_ctx_t *in_msg_ctx = NULL; + axis2_msg_ctx_t **msg_ctx_map = NULL; + + msg_ctx_map = axis2_op_ctx_get_msg_ctx_map(op_ctx, env); + out_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT]; + in_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN]; + if (in_msg_ctx) + { + /* TODO: Add necessary handling */ + } + if (out_msg_ctx) + { + int size = 0; + axutil_array_list_t *output_header_list = NULL; + output_header_list = axis2_msg_ctx_get_http_output_headers(out_msg_ctx, env); + if (output_header_list) + { + size = axutil_array_list_size(output_header_list, env); + } + while (size) + { + axis2_http_header_t *output_header = NULL; + size--; + output_header = (axis2_http_header_t *) + axutil_array_list_get(output_header_list, env, size); + apr_table_set(request->err_headers_out, + axis2_http_header_get_name(output_header, env), + axis2_http_header_get_value(output_header, env)); + } + if (axis2_msg_ctx_get_no_content(out_msg_ctx, env)) + { + if (axis2_msg_ctx_get_status_code(out_msg_ctx, env)) + { + int status_code = axis2_msg_ctx_get_status_code(out_msg_ctx, env); + switch (status_code) + { + case AXIS2_HTTP_RESPONSE_RESET_CONTENT_CODE_VAL: + request->status = HTTP_RESET_CONTENT; + break; + case AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_VAL: + request->status = HTTP_NOT_MODIFIED; + break; + default: + request->status = HTTP_NO_CONTENT; + break; + } + } + else + { + request->status = HTTP_NO_CONTENT; + } + send_status = DONE; + } + else if (axis2_msg_ctx_get_status_code(out_msg_ctx, env)) + { + int status_code = axis2_msg_ctx_get_status_code(out_msg_ctx, env); + switch (status_code) + { + case AXIS2_HTTP_RESPONSE_CONTINUE_CODE_VAL: + request->status = HTTP_CONTINUE; + break; + case AXIS2_HTTP_RESPONSE_OK_CODE_VAL: + request->status = HTTP_OK; + break; + case AXIS2_HTTP_RESPONSE_MULTIPLE_CHOICES_CODE_VAL: + request->status = HTTP_MULTIPLE_CHOICES; + break; + case AXIS2_HTTP_RESPONSE_MOVED_PERMANENTLY_CODE_VAL: + request->status = HTTP_MOVED_PERMANENTLY; + break; + case AXIS2_HTTP_RESPONSE_SEE_OTHER_CODE_VAL: + request->status = HTTP_SEE_OTHER; + break; + case AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_VAL: + request->status = HTTP_NOT_MODIFIED; + break; + case AXIS2_HTTP_RESPONSE_TEMPORARY_REDIRECT_CODE_VAL: + request->status = HTTP_TEMPORARY_REDIRECT; + break; + case AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL: + request->status = HTTP_BAD_REQUEST; + break; + case AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL: + request->status = HTTP_REQUEST_TIME_OUT; + break; + case AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL: + request->status = HTTP_CONFLICT; + break; + case AXIS2_HTTP_RESPONSE_GONE_CODE_VAL: + request->status = HTTP_GONE; + break; + case AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL: + request->status = HTTP_PRECONDITION_FAILED; + break; + case AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL: + request->status = HTTP_REQUEST_ENTITY_TOO_LARGE; + break; + case AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL: + request->status = HTTP_SERVICE_UNAVAILABLE; + break; + default: + request->status = HTTP_ACCEPTED; + break; + } + send_status = DONE; + } + } + } + if (send_status == DECLINED) + { + if (msg_ctx) + { + int size = 0; + int status_code; + axutil_array_list_t *output_header_list = NULL; + output_header_list = axis2_msg_ctx_get_http_output_headers(msg_ctx, env); + if (output_header_list) + { + size = axutil_array_list_size(output_header_list, env); + } + while (size) + { + axis2_http_header_t *output_header = NULL; + size--; + output_header = (axis2_http_header_t *) + axutil_array_list_get(output_header_list, env, size); + apr_table_set(request->err_headers_out, + axis2_http_header_get_name(output_header, env), + axis2_http_header_get_value(output_header, env)); + } + + status_code = axis2_msg_ctx_get_status_code(msg_ctx, env); + switch (status_code) + { + case AXIS2_HTTP_RESPONSE_CONTINUE_CODE_VAL: + request->status = HTTP_CONTINUE; + break; + case AXIS2_HTTP_RESPONSE_OK_CODE_VAL: + request->status = HTTP_OK; + break; + case AXIS2_HTTP_RESPONSE_MULTIPLE_CHOICES_CODE_VAL: + request->status = HTTP_MULTIPLE_CHOICES; + break; + case AXIS2_HTTP_RESPONSE_MOVED_PERMANENTLY_CODE_VAL: + request->status = HTTP_MOVED_PERMANENTLY; + break; + case AXIS2_HTTP_RESPONSE_SEE_OTHER_CODE_VAL: + request->status = HTTP_SEE_OTHER; + break; + case AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_VAL: + request->status = HTTP_NOT_MODIFIED; + break; + case AXIS2_HTTP_RESPONSE_TEMPORARY_REDIRECT_CODE_VAL: + request->status = HTTP_TEMPORARY_REDIRECT; + break; + case AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL: + request->status = HTTP_BAD_REQUEST; + break; + case AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL: + request->status = HTTP_REQUEST_TIME_OUT; + break; + case AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL: + request->status = HTTP_CONFLICT; + break; + case AXIS2_HTTP_RESPONSE_GONE_CODE_VAL: + request->status = HTTP_GONE; + break; + case AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL: + request->status = HTTP_PRECONDITION_FAILED; + break; + case AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL: + request->status = HTTP_REQUEST_ENTITY_TOO_LARGE; + break; + case AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL: + request->status = HTTP_SERVICE_UNAVAILABLE; + break; + case AXIS2_HTTP_RESPONSE_FORBIDDEN_CODE_VAL: + request->status = HTTP_FORBIDDEN; + break; + case AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL: + request->status = HTTP_UNAUTHORIZED; + break; + default: + request->status = HTTP_ACCEPTED; + break; + } + + out_stream = axis2_msg_ctx_get_transport_out_stream(msg_ctx, env); + if (out_stream) + { + body_string = axutil_stream_get_buffer(out_stream, env); + body_string_len = axutil_stream_get_len(out_stream, env); + } + send_status = DONE; + } + else + { + request->status = HTTP_ACCEPTED; + send_status = DONE; + } + } + } + else + { + send_status = DONE; + request->status = HTTP_ACCEPTED; + } + } + + if (content_language_header_value) + { + apr_table_set(request->err_headers_out, AXIS2_HTTP_HEADER_CONTENT_LANGUAGE, + content_language_header_value); + } + + if (op_ctx) + { + axis2_msg_ctx_t *out_msg_ctx = NULL, + *in_msg_ctx = NULL; + axis2_msg_ctx_t **msg_ctx_map = NULL; + axis2_char_t *msg_id = NULL; + axis2_conf_ctx_t *conf_ctx = NULL; + msg_ctx_map = axis2_op_ctx_get_msg_ctx_map(op_ctx, env); + + out_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT]; + in_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN]; + + /* In mtom case we send the attachment differently */ + + /* status = AXIS2_FAILURE means fault scenario. We are not + * doing MTOM for fault cases. */ + + if(status != AXIS2_FAILURE) + { + do_mtom = axis2_msg_ctx_get_doing_mtom(out_msg_ctx, env); + if(do_mtom) + { + mime_parts = axis2_msg_ctx_get_mime_parts(out_msg_ctx, env); + if(!mime_parts) + { + return AXIS2_FAILURE; + } + callback_name_param = axis2_msg_ctx_get_parameter(msg_ctx, env , + AXIS2_MTOM_SENDING_CALLBACK); + if(callback_name_param) + { + mtom_sending_callback_name = + (axis2_char_t *) axutil_param_get_value (callback_name_param, env); + } + } + } + + if (out_msg_ctx) + { + axis2_msg_ctx_free(out_msg_ctx, env); + out_msg_ctx = NULL; + msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT] = NULL; + } + + if (in_msg_ctx) + { + msg_id = + axutil_strdup(env, axis2_msg_ctx_get_msg_id(in_msg_ctx, env)); + conf_ctx = axis2_msg_ctx_get_conf_ctx(in_msg_ctx, env); + axis2_msg_ctx_reset_out_transport_info(in_msg_ctx, env); + axis2_msg_ctx_free(in_msg_ctx, env); + in_msg_ctx = NULL; + msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_IN] = NULL; + } + + if (!axis2_op_ctx_is_in_use(op_ctx, env)) + { + axis2_op_ctx_destroy_mutex(op_ctx, env); + if (conf_ctx && msg_id) + { + axis2_conf_ctx_register_op_ctx(conf_ctx, env, msg_id, NULL); + AXIS2_FREE(env->allocator, msg_id); + } + axis2_op_ctx_free(op_ctx, env); + } + + } /* Done freeing message contexts */ + + /* We send the message in parts when doing MTOM */ + + if(do_mtom) + { + axis2_status_t mtom_status = AXIS2_FAILURE; + + if(!mtom_sending_callback_name) + { + /* If the callback name is not there, then we will check whether there + * is any mime_parts which has type callback. If we found then no point + * of continuing we should return a failure */ + + if(!mtom_sending_callback_name) + { + if(axis2_http_transport_utils_is_callback_required( + env, mime_parts)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Sender callback not specified"); + return AXIS2_FAILURE; + } + } + } + + mtom_status = apache2_worker_send_mtom_message(request, env, mime_parts, + mtom_sending_callback_name); + if(mtom_status == AXIS2_SUCCESS) + { + send_status = DONE; + } + else + { + send_status = DECLINED; + } + + axis2_http_transport_utils_destroy_mime_parts(mime_parts, env); + mime_parts = NULL; + } + + else if (body_string) + { + ap_rwrite(body_string, body_string_len, request); + body_string = NULL; + } + + if (request_body) + { + axutil_stream_free(request_body, env); + request_body = NULL; + } + + axutil_string_free(soap_action, env); + + msg_ctx = NULL; + return send_status; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_apache2_worker_get_bytes( + const axutil_env_t * env, + axutil_stream_t * stream) +{ + + axutil_stream_t *tmp_stream = NULL; + int return_size = -1; + axis2_char_t *buffer = NULL; + axis2_bool_t loop_status = AXIS2_TRUE; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, stream, NULL); + + tmp_stream = axutil_stream_create_basic(env); + while(loop_status) + { + int read = 0; + int write = 0; + + char buf[READ_SIZE]; + read = axutil_stream_read(stream, env, buf, READ_SIZE); + if(read < 0) + { + break; + } + write = axutil_stream_write(tmp_stream, env, buf, read); + if(read < (READ_SIZE - 1)) + { + break; + } + } + return_size = axutil_stream_get_len(tmp_stream, env); + + if(return_size > 0) + { + buffer = (char *)AXIS2_MALLOC(env->allocator, sizeof(char) * (return_size + 2)); + return_size = axutil_stream_read(tmp_stream, env, buffer, return_size + 1); + buffer[return_size + 1] = '\0'; + } + axutil_stream_free(tmp_stream, env); + return buffer; +} + +static axis2_status_t +apache2_worker_send_mtom_message( + request_rec *request, + const axutil_env_t * env, + axutil_array_list_t *mime_parts, + axis2_char_t *mtom_sending_callback_name) +{ + int i = 0; + axiom_mime_part_t *mime_part = NULL; + axis2_status_t status = AXIS2_SUCCESS; + /*int written = 0;*/ + int len = 0; + + if(mime_parts) + { + for(i = 0; i < axutil_array_list_size(mime_parts, env); i++) + { + mime_part = (axiom_mime_part_t *)axutil_array_list_get(mime_parts, env, i); + if((mime_part->type) == AXIOM_MIME_PART_BUFFER) + { + len = 0; + len = ap_rwrite(mime_part->part, (int)mime_part->part_size, request); + ap_rflush(request); + if(len == -1) + { + status = AXIS2_FAILURE; + break; + } + } + else if((mime_part->type) == AXIOM_MIME_PART_FILE) + { + FILE *f = NULL; + axis2_byte_t *output_buffer = NULL; + int output_buffer_size = 0; + + f = fopen(mime_part->file_name, "rb"); + if(!f) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error opening file %s for reading", + mime_part->file_name); + return AXIS2_FAILURE; + } + if(mime_part->part_size > AXIS2_MTOM_OUTPUT_BUFFER_SIZE) + { + output_buffer_size = AXIS2_MTOM_OUTPUT_BUFFER_SIZE; + } + else + { + output_buffer_size = (int)mime_part->part_size; + } + + output_buffer = AXIS2_MALLOC(env->allocator, (output_buffer_size + 1) + * sizeof(axis2_char_t)); + + status = apache2_worker_send_attachment_using_file(env, request, f, output_buffer, + output_buffer_size); + if(status == AXIS2_FAILURE) + { + return status; + } + } + else if((mime_part->type) == AXIOM_MIME_PART_CALLBACK) + { + void *handler = NULL; + axiom_mtom_sending_callback_t *callback = NULL; + + handler = axis2_http_transport_utils_initiate_callback(env, + mtom_sending_callback_name, mime_part->user_param, &callback); + + if(handler) + { + status = apache2_worker_send_attachment_using_callback(env, request, callback, + handler, mime_part->user_param); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "MTOM Sending Callback loading failed"); + status = AXIS2_FAILURE; + } + if(callback) + { + axutil_param_t *param = NULL; + + param = callback->param; + + AXIOM_MTOM_SENDING_CALLBACK_FREE(callback, env); + callback = NULL; + + if(param) + { + axutil_param_free(param, env); + param = NULL; + } + + } + + if(status == AXIS2_FAILURE) + { + return status; + } + } + else + { + return AXIS2_FAILURE; + } + if(status == AXIS2_FAILURE) + { + break; + } + } + return status; + } + else + { + return AXIS2_FAILURE; + } +} + +static axis2_status_t +apache2_worker_send_attachment_using_file( + const axutil_env_t * env, + request_rec *request, + FILE *fp, + axis2_byte_t *buffer, + int buffer_size) +{ + + int count = 0; + int len = 0; + /*int written = 0;*/ + axis2_status_t status = AXIS2_SUCCESS; + + do + { + count = (int)fread(buffer, 1, buffer_size + 1, fp); + if(ferror(fp)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in reading file containg the attachment"); + if(buffer) + { + AXIS2_FREE(env->allocator, buffer); + buffer = NULL; + } + fclose(fp); + return AXIS2_FAILURE; + } + + if(count > 0) + { + len = 0; + len = ap_rwrite(buffer, count, request); + ap_rflush(request); + if(len == -1) + { + status = AXIS2_FAILURE; + break; + } + } + else + { + if(buffer) + { + AXIS2_FREE(env->allocator, buffer); + buffer = NULL; + } + fclose(fp); + return AXIS2_FAILURE; + } + memset(buffer, 0, buffer_size); + if(status == AXIS2_FAILURE) + { + if(buffer) + { + AXIS2_FREE(env->allocator, buffer); + buffer = NULL; + } + fclose(fp); + return AXIS2_FAILURE; + } + } + while(!feof(fp)); + + fclose(fp); + AXIS2_FREE(env->allocator, buffer); + buffer = NULL; + return AXIS2_SUCCESS; +} + +static axis2_status_t +apache2_worker_send_attachment_using_callback( + const axutil_env_t * env, + request_rec *request, + axiom_mtom_sending_callback_t *callback, + void *handler, + void *user_param) +{ + int count = 0; + int len = 0; + axis2_status_t status = AXIS2_SUCCESS; + axis2_char_t *buffer = NULL; + + /* Keep on loading the data in a loop until + * all the data is sent */ + + while((count = AXIOM_MTOM_SENDING_CALLBACK_LOAD_DATA(callback, env, handler, &buffer)) > 0) + { + len = 0; + len = ap_rwrite(buffer, count, request); + ap_rflush(request); + if(len == -1) + { + status = AXIS2_FAILURE; + break; + } + } + + if(status == AXIS2_FAILURE) + { + AXIOM_MTOM_SENDING_CALLBACK_CLOSE_HANDLER(callback, env, handler); + return status; + } + + status = AXIOM_MTOM_SENDING_CALLBACK_CLOSE_HANDLER(callback, env, handler); + return status; +} + + +static axutil_hash_t* +axis2_apache_worker_get_headers( + const axutil_env_t *env, + request_rec *request) +{ + int i = 0; + axutil_hash_t *header_map = NULL; + const apr_array_header_t *tarr; + const apr_table_entry_t *telts; + axis2_http_header_t * tmp_http_header = NULL; + + + header_map = axutil_hash_make(env); + tarr = apr_table_elts(request->headers_in); + telts = (const apr_table_entry_t*)tarr->elts; + + for (i = 0; i < tarr->nelts; i++) + { + axis2_char_t* tmp_key = (axis2_char_t*) telts[i].key; + axis2_char_t* tmp_value = (axis2_char_t*) telts[i].val; + tmp_http_header = axis2_http_header_create(env, tmp_key, tmp_value); + axutil_hash_set(header_map, tmp_key, AXIS2_HASH_KEY_STRING, tmp_http_header); + } + + return header_map; + + +} diff --git a/src/core/transport/http/server/apache2/axis2_apache2_out_transport_info.h b/src/core/transport/http/server/apache2/axis2_apache2_out_transport_info.h new file mode 100644 index 0000000..9ab9250 --- /dev/null +++ b/src/core/transport/http/server/apache2/axis2_apache2_out_transport_info.h @@ -0,0 +1,61 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_APACHE2_OUT_TRANSPORT_INFO_H +#define AXIS2_APACHE2_OUT_TRANSPORT_INFO_H + +/** + * @ingroup axis2_core_transport_http + * @{ + */ + +/** + * @file axis2_apache2_out_transport_info.h + * @brief axis2 Apache2 Out Transport Info + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN axis2_http_out_transport_info_t *AXIS2_CALL + + axis2_apache2_out_transport_info_create( + const axutil_env_t * env, + request_rec * r); + + /** + * Free http_out_transport_info passed as void pointer. This will be + * cast into appropriate type and then pass the cast object + * into the http_out_transport_info structure's free method + */ + AXIS2_EXTERN void AXIS2_CALL + + axis2_apache2_out_transport_info_free_void_arg( + void *transport_info, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_APACHE2_OUT_TRANSPORT_INFO_H */ diff --git a/src/core/transport/http/server/apache2/axis2_apache2_worker.h b/src/core/transport/http/server/apache2/axis2_apache2_worker.h new file mode 100644 index 0000000..eea4033 --- /dev/null +++ b/src/core/transport/http/server/apache2/axis2_apache2_worker.h @@ -0,0 +1,78 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_APACHE2_WORKER_H +#define AXIS2_APACHE2_WORKER_H + +/** + * @brief Apache2 Worker ops struct + * Encapsulator struct for ops of axis2_apache2_worker + */ + +/** + * @ingroup axis2_core_transport_http + * @{ + */ + +/** + * @file axis2_apache2_worker.h + * @brief axis2 Apache2 Worker + */ + +#include +#include +#include +#include +#include "apache2_stream.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axis2_apache2_worker axis2_apache2_worker_t; + + AXIS2_EXTERN int AXIS2_CALL + axis2_apache2_worker_process_request( + axis2_apache2_worker_t * apache2_worker, + const axutil_env_t * env, + request_rec * r); + + AXIS2_EXTERN void AXIS2_CALL + axis2_apache2_worker_free( + axis2_apache2_worker_t * apache2_worker, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_apache2_worker_t *AXIS2_CALL + + axis2_apache2_worker_create( + const axutil_env_t * env, + axis2_char_t * repo_path); + +#define AXIS2_APACHE2_WORKER_PROCESS_REQUEST(apache2_worker, env, request) \ + axis2_apache2_worker_process_request(\ + apache2_worker, env, request) +#define AXIS2_APACHE2_WORKER_FREE(apache2_worker, env) \ + axis2_apache2_worker_free(apache2_worker, env) + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_APACHE2_WORKER_H */ diff --git a/src/core/transport/http/server/apache2/mod_axis2.c b/src/core/transport/http/server/apache2/mod_axis2.c new file mode 100644 index 0000000..a9431eb --- /dev/null +++ b/src/core/transport/http/server/apache2/mod_axis2.c @@ -0,0 +1,844 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include "axis2_apache2_worker.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Configuration structure populated by apache2.conf */ +typedef struct axis2_config_rec +{ + char *axutil_log_file; + char *axis2_repo_path; + axutil_log_levels_t log_level; + int max_log_file_size; + int axis2_global_pool_size; +} axis2_config_rec_t; + +axis2_apache2_worker_t *axis2_worker = NULL; +axutil_env_t *axutil_env = NULL; +apr_rmm_t* rmm = NULL; +apr_global_mutex_t *global_mutex = NULL; + +/******************************Function Headers********************************/ +static void * +axis2_create_svr( + apr_pool_t * p, + server_rec * s); + +static const char * +axis2_set_repo_path( + cmd_parms * cmd, + void *dummy, + const char *arg); + +static const char * +axis2_set_log_file( + cmd_parms * cmd, + void *dummy, + const char *arg); + +static const char * +axis2_set_max_log_file_size( + cmd_parms * cmd, + void *dummy, + const char *arg); + +static const char * +axis2_set_global_pool_size( + cmd_parms * cmd, + void * dummy, + const char *arg); + +static const char * +axis2_set_log_level( + cmd_parms * cmd, + void *dummy, + const char *arg); + +static const char * +axis2_set_svc_url_prefix( + cmd_parms * cmd, + void *dummy, + const char *arg); + +static int +axis2_handler( + request_rec * req); + +/* Shutdown Axis2 */ +apr_status_t +axis2_shutdown( + void *tmp); + +void *AXIS2_CALL axis2_module_malloc( + axutil_allocator_t * allocator, + size_t size); + +void *AXIS2_CALL axis2_module_realloc( + axutil_allocator_t * allocator, + void *ptr, + size_t size); + +void AXIS2_CALL axis2_module_free( + axutil_allocator_t * allocator, + void *ptr); + +static void +axis2_module_init( + apr_pool_t * p, + server_rec * svr_rec); + +static void +axis2_register_hooks( + apr_pool_t * p); + +char * +axis2_get_session( + void *req, + const char *id); + +axis2_status_t +axis2_set_session( + void *req, + const char *id, + const char *session); + +/***************************End of Function Headers****************************/ + +static const command_rec axis2_cmds[] = { AP_INIT_TAKE1("Axis2RepoPath", axis2_set_repo_path, NULL, + RSRC_CONF, "Axis2/C repository path"), AP_INIT_TAKE1("Axis2LogFile", axis2_set_log_file, NULL, + RSRC_CONF, "Axis2/C log file name"), AP_INIT_TAKE1("Axis2LogLevel", axis2_set_log_level, NULL, + RSRC_CONF, "Axis2/C log level"), AP_INIT_TAKE1("Axis2MaxLogFileSize", + axis2_set_max_log_file_size, NULL, RSRC_CONF, "Axis2/C maximum log file size"), + AP_INIT_TAKE1("Axis2GlobalPoolSize", axis2_set_global_pool_size, NULL, RSRC_CONF, + "Axis2/C global pool size"), AP_INIT_TAKE1("Axis2ServiceURLPrefix", + axis2_set_svc_url_prefix, NULL, RSRC_CONF, "Axis2/C service URL prifix"), + { NULL } }; + +/* Dispatch list for API hooks */ +module AP_MODULE_DECLARE_DATA axis2_module = { STANDARD20_MODULE_STUFF, NULL, /* create per-dir config structures */ + NULL, /* merge per-dir config structures */ + axis2_create_svr, /* create per-server config structures */ + NULL, /* merge per-server config structures */ + axis2_cmds, /* table of config file commands */ + axis2_register_hooks /* register hooks */ + }; + +static void * +axis2_create_svr( + apr_pool_t * p, + server_rec * s) +{ + axis2_config_rec_t *conf = apr_palloc(p, sizeof(*conf)); + conf->axutil_log_file = NULL; + conf->axis2_repo_path = NULL; + conf->log_level = AXIS2_LOG_LEVEL_DEBUG; + conf->axis2_global_pool_size = 0; + conf->max_log_file_size = 1; + return conf; +} + +static const char * +axis2_set_repo_path( + cmd_parms * cmd, + void *dummy, + const char *arg) +{ + axis2_config_rec_t *conf = NULL; + const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); + if(err != NULL) + { + return err; + } + conf = (axis2_config_rec_t *)ap_get_module_config(cmd->server->module_config, &axis2_module); + conf->axis2_repo_path = apr_pstrdup(cmd->pool, arg); + return NULL; +} + +static const char * +axis2_set_log_file( + cmd_parms * cmd, + void *dummy, + const char *arg) +{ + axis2_config_rec_t *conf = NULL; + const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); + if(err != NULL) + { + return err; + } + + conf = (axis2_config_rec_t *)ap_get_module_config(cmd->server->module_config, &axis2_module); + conf->axutil_log_file = apr_pstrdup(cmd->pool, arg); + return NULL; +} + +static const char * +axis2_set_max_log_file_size( + cmd_parms * cmd, + void *dummy, + const char *arg) +{ + axis2_config_rec_t *conf = NULL; + const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); + if(err != NULL) + { + return err; + } + + conf = (axis2_config_rec_t *)ap_get_module_config(cmd->server->module_config, &axis2_module); + conf->max_log_file_size = 1024 * 1024 * atoi(arg); + return NULL; +} + +static const char * +axis2_set_global_pool_size( + cmd_parms * cmd, + void *dummy, + const char *arg) +{ + axis2_config_rec_t *conf = NULL; + const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); + if(err != NULL) + { + return err; + } + + conf = (axis2_config_rec_t *)ap_get_module_config(cmd->server->module_config, &axis2_module); + conf->axis2_global_pool_size = 1024 * 1024 * atoi(arg); + return NULL; +} + +static const char * +axis2_set_log_level( + cmd_parms * cmd, + void *dummy, + const char *arg) +{ + char *str; + axutil_log_levels_t level = AXIS2_LOG_LEVEL_DEBUG; + axis2_config_rec_t *conf = NULL; + const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); + if(err != NULL) + { + return err; + } + + conf = (axis2_config_rec_t *)ap_get_module_config(cmd->server->module_config, &axis2_module); + + str = ap_getword_conf(cmd->pool, &arg); + if(str) + { + if(!strcasecmp(str, "crit")) + { + level = AXIS2_LOG_LEVEL_CRITICAL; + } + else if(!strcasecmp(str, "error")) + { + level = AXIS2_LOG_LEVEL_ERROR; + } + else if(!strcasecmp(str, "warn")) + { + level = AXIS2_LOG_LEVEL_WARNING; + } + else if(!strcasecmp(str, "info")) + { + level = AXIS2_LOG_LEVEL_INFO; + } + else if(!strcasecmp(str, "debug")) + { + level = AXIS2_LOG_LEVEL_DEBUG; + } + else if(!strcasecmp(str, "user")) + { + level = AXIS2_LOG_LEVEL_USER; + } + else if(!strcasecmp(str, "trace")) + { + level = AXIS2_LOG_LEVEL_TRACE; + } + } + conf->log_level = level; + return NULL; +} + +static const char * +axis2_set_svc_url_prefix( + cmd_parms * cmd, + void *dummy, + const char *arg) +{ + AXIS2_IMPORT extern axis2_char_t *axis2_request_url_prefix; + const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); + + axis2_request_url_prefix = AXIS2_REQUEST_URL_PREFIX; + if(!err) + { + axis2_char_t *prefix = apr_pstrdup(cmd->pool, arg); + if(prefix) + axis2_request_url_prefix = prefix; + } + + return NULL; +} + +/* The sample content handler */ +static int +axis2_handler( + request_rec * req) +{ + int rv = 0; + axutil_env_t *thread_env = NULL; + axutil_allocator_t *allocator = NULL; + axutil_error_t *error = NULL; + + apr_allocator_t *local_allocator = NULL; + apr_pool_t *local_pool = NULL; + + if(strcmp(req->handler, "axis2_module")) + { + return DECLINED; + } + + /* Set up the read policy from the client. */ + if((rv = ap_setup_client_block(req, REQUEST_CHUNKED_DECHUNK)) != OK) + { + return rv; + } + ap_should_client_block(req); + + apr_allocator_create(&local_allocator); + apr_pool_create_ex(&local_pool, NULL, NULL, local_allocator); + + /*thread_env = axutil_init_thread_env(axutil_env);*/ + + /*axutil_env->allocator->current_pool = (void *) req->pool; + rv = AXIS2_APACHE2_WORKER_PROCESS_REQUEST(axis2_worker, axutil_env, req);*/ + + /* create new allocator for this request */ + /*allocator = (axutil_allocator_t *) apr_palloc(req->pool, + sizeof(axutil_allocator_t));*/ + + allocator = (axutil_allocator_t *)apr_palloc(local_pool, sizeof(axutil_allocator_t)); + + if(!allocator) + { + return HTTP_INTERNAL_SERVER_ERROR; + } + allocator->malloc_fn = axis2_module_malloc; + allocator->realloc = axis2_module_realloc; + allocator->free_fn = axis2_module_free; + allocator->global_pool_ref = 0; + allocator->local_pool = (void *)local_pool; + allocator->current_pool = (void *)local_pool; + allocator->global_pool = axutil_env->allocator->global_pool; + + error = axutil_error_create(allocator); + thread_env = axutil_env_create_with_error_log_thread_pool(allocator, error, axutil_env->log, + axutil_env-> thread_pool); + thread_env->allocator = allocator; + thread_env->set_session_fn = axis2_set_session; + thread_env->get_session_fn = axis2_get_session; + + rv = AXIS2_APACHE2_WORKER_PROCESS_REQUEST(axis2_worker, thread_env, req); + if(AXIS2_CRITICAL_FAILURE == rv) + { + return HTTP_INTERNAL_SERVER_ERROR; + } + + apr_pool_destroy(local_pool); + apr_allocator_destroy(local_allocator); + + return rv; +} + +void *AXIS2_CALL +axis2_module_malloc( + axutil_allocator_t * allocator, + size_t size) +{ +#if APR_HAS_SHARED_MEMORY + if (rmm == allocator->current_pool) + { + + void* ptr = NULL; + apr_rmm_off_t offset; + apr_global_mutex_lock(global_mutex); + offset = apr_rmm_malloc(rmm, size); + if (offset) + ptr = apr_rmm_addr_get(rmm, offset); + apr_global_mutex_unlock(global_mutex); + return ptr; + } +#endif + return apr_palloc((apr_pool_t *)(allocator->current_pool), size); +} + +void *AXIS2_CALL +axis2_module_realloc( + axutil_allocator_t * allocator, + void *ptr, + size_t size) +{ +#if APR_HAS_SHARED_MEMORY + if (rmm == allocator->current_pool) + { + void* ptr = NULL; + apr_rmm_off_t offset; + apr_global_mutex_lock(global_mutex); + offset = apr_rmm_realloc(rmm, ptr, size); + if (offset) + ptr = apr_rmm_addr_get(rmm, offset); + apr_global_mutex_unlock(global_mutex); + return ptr; + } +#endif + /* can't be easily implemented */ + return NULL; +} + +void AXIS2_CALL +axis2_module_free( + axutil_allocator_t * allocator, + void *ptr) +{ +#if APR_HAS_SHARED_MEMORY + if (rmm == allocator->current_pool) + { + apr_rmm_off_t offset; + apr_global_mutex_lock(global_mutex); + offset = apr_rmm_offset_get(rmm, ptr); + apr_rmm_free(rmm, offset); + apr_global_mutex_unlock(global_mutex); + } +#endif +} + +static int +axis2_post_config( + apr_pool_t *pconf, + apr_pool_t *plog, + apr_pool_t *ptemp, + server_rec *svr_rec) +{ + apr_status_t status = APR_SUCCESS; + axutil_allocator_t *allocator = NULL; + axutil_error_t *error = NULL; + axutil_log_t *axutil_logger = NULL; + axutil_thread_pool_t *thread_pool = NULL; + void *data = NULL; + const char *userdata_key = "axis2_init"; + axis2_config_rec_t *conf = (axis2_config_rec_t *)ap_get_module_config(svr_rec->module_config, + &axis2_module); + + /* axis2_post_config() will be called twice. Don't bother + * going through all of the initialization on the first call + * because it will just be thrown away.*/ + + ap_add_version_component(pconf, AXIS2_HTTP_HEADER_SERVER_AXIS2C); + + apr_pool_userdata_get(&data, userdata_key, svr_rec->process->pool); + if(!data) + { + apr_pool_userdata_set((const void *)1, userdata_key, apr_pool_cleanup_null, + svr_rec->process->pool); + return OK; + } + +#if APR_HAS_SHARED_MEMORY + if (conf->axis2_global_pool_size > 0) + { + apr_shm_t *shm; + apr_rmm_off_t offset; + + status = apr_shm_create(&shm, conf->axis2_global_pool_size, NULL, pconf); + if (status != APR_SUCCESS) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, status, svr_rec, + "[Axis2] Error creating shared memory pool"); + exit(APEXIT_INIT); + } + + status = apr_rmm_init(&rmm, NULL, apr_shm_baseaddr_get(shm), conf->axis2_global_pool_size, + pconf); + if (status != APR_SUCCESS) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, status, svr_rec, + "[Axis2] Error creating relocatable memory pool"); + exit(APEXIT_INIT); + } + + status = apr_global_mutex_create(&global_mutex, NULL, + APR_LOCK_DEFAULT, pconf); + if (status != APR_SUCCESS) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, status, svr_rec, + "[Axis2] Error creating global mutex"); + exit(APEXIT_INIT); + } + + /*status = unixd_set_global_mutex_perms(global_mutex); + if (status != APR_SUCCESS) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, status, svr_rec, + "[Axis2] Permision cannot be set to global mutex"); + exit(APEXIT_INIT); + } + */ + + offset = apr_rmm_malloc(rmm, sizeof(axutil_allocator_t)); + if (!offset) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, status, svr_rec, + "[Axis2] Error in creating allocator in global pool"); + exit(APEXIT_INIT); + } + allocator = apr_rmm_addr_get(rmm, offset); + allocator->malloc_fn = axis2_module_malloc; + allocator->realloc = axis2_module_realloc; + allocator->free_fn = axis2_module_free; + allocator->global_pool_ref = 0; + allocator->local_pool = (void *) rmm; + allocator->current_pool = (void *) rmm; + allocator->global_pool = (void *) rmm; + + /* We need to init xml readers before we go into threaded env + */ + axiom_xml_reader_init(); + axutil_error_init(); + + error = axutil_error_create(allocator); + if (!error) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec, + "[Axis2] Error creating mod_axis2 error structure"); + exit(APEXIT_CHILDFATAL); + } + + axutil_logger = axutil_log_create(allocator, NULL, conf->axutil_log_file); + if (!axutil_logger) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec, + "[Axis2] Error creating mod_axis2 log structure"); + exit(APEXIT_CHILDFATAL); + } + thread_pool = axutil_thread_pool_init(allocator); + if (!thread_pool) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec, + "[Axis2] Error initializing mod_axis2 thread pool"); + exit(APEXIT_CHILDFATAL); + } + axutil_env = axutil_env_create_with_error_log_thread_pool(allocator, error, + axutil_logger, + thread_pool); + if (!axutil_env) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec, + "[Axis2] Error creating mod_axis2 environment"); + exit(APEXIT_CHILDFATAL); + } + if (axutil_logger) + { + axutil_logger->level = conf->log_level; + axutil_logger->size = conf->max_log_file_size; + AXIS2_LOG_INFO(axutil_env->log, "Apache Axis2/C version in use : %s", + axis2_version_string()); + AXIS2_LOG_INFO(axutil_env->log, + "Starting log with log level %d and max log file size %d", + conf->log_level, conf->max_log_file_size); + } + axutil_env->set_session_fn = axis2_set_session; + axutil_env->get_session_fn = axis2_get_session; + + axis2_worker = axis2_apache2_worker_create(axutil_env, + conf->axis2_repo_path); + if (!axis2_worker) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec, + "[Axis2] Error creating mod_axis2 apache2 worker"); + exit(APEXIT_CHILDFATAL); + } + } + +#endif + + return OK; +} + +static void +axis2_module_init( + apr_pool_t * p, + server_rec * svr_rec) +{ + apr_pool_t *pool; + apr_status_t status; + axutil_allocator_t *allocator = NULL; + axutil_error_t *error = NULL; + axutil_log_t *axutil_logger = NULL; + axutil_thread_pool_t *thread_pool = NULL; + axis2_config_rec_t *conf = (axis2_config_rec_t*)ap_get_module_config(svr_rec->module_config, + &axis2_module); + + if(conf->axis2_global_pool_size > 0) + { + /* + If we are using shared memory, no need to init the child, as the + worker has been created in post config. + */ + return; + } + + /* We need to init xml readers before we go into threaded env + */ + axiom_xml_reader_init(); + + /* create an allocator that uses APR memory pools and lasts the + * lifetime of the httpd server child process + */ + status = apr_pool_create(&pool, p); + if(status) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, status, svr_rec, + "[Axis2] Error allocating mod_axis2 memory pool"); + exit(APEXIT_CHILDFATAL); + } + allocator = (axutil_allocator_t*)apr_palloc(pool, sizeof(axutil_allocator_t)); + if(!allocator) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, APR_ENOMEM, svr_rec, + "[Axis2] Error allocating mod_axis2 allocator"); + exit(APEXIT_CHILDFATAL); + } + allocator->malloc_fn = axis2_module_malloc; + allocator->realloc = axis2_module_realloc; + allocator->free_fn = axis2_module_free; + allocator->global_pool_ref = 0; + allocator->local_pool = (void*)pool; + allocator->current_pool = (void*)pool; + allocator->global_pool = (void*)pool; + + if(!allocator) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec, + "[Axis2] Error initializing mod_axis2 allocator"); + exit(APEXIT_CHILDFATAL); + } + + axutil_error_init(); + + error = axutil_error_create(allocator); + if(!error) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec, + "[Axis2] Error creating mod_axis2 error structure"); + exit(APEXIT_CHILDFATAL); + } + axutil_logger = axutil_log_create(allocator, NULL, conf->axutil_log_file); + if(!axutil_logger) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec, + "[Axis2] Error creating mod_axis2 log structure"); + exit(APEXIT_CHILDFATAL); + } + thread_pool = axutil_thread_pool_init(allocator); + if(!thread_pool) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec, + "[Axis2] Error initializing mod_axis2 thread pool"); + exit(APEXIT_CHILDFATAL); + } + axutil_env = axutil_env_create_with_error_log_thread_pool(allocator, error, axutil_logger, + thread_pool); + if(!axutil_env) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec, + "[Axis2] Error creating mod_axis2 environment"); + exit(APEXIT_CHILDFATAL); + } + if(axutil_logger) + { + + axutil_logger->level = conf->log_level; + AXIS2_LOG_INFO(axutil_env->log, "Apache Axis2/C version in use : %s", + axis2_version_string()); + AXIS2_LOG_INFO(axutil_env->log, "Starting log with log level %d", conf->log_level); + } + axutil_env->set_session_fn = axis2_set_session; + axutil_env->get_session_fn = axis2_get_session; + axis2_worker = axis2_apache2_worker_create(axutil_env, conf->axis2_repo_path); + if(!axis2_worker) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, APR_EGENERAL, svr_rec, + "[Axis2] Error creating mod_axis2 apache2 worker"); + exit(APEXIT_CHILDFATAL); + } + + /*ap_dbd_prepare(svr_rec, "SELECT value FROM session WHERE id = %s", "retrieve_session"); + ap_dbd_prepare(svr_rec, "INSERT INTO session VALUES(?,?)", "insert_session");*/ + + + /* If we are initialized we register a clean up as well */ + /* apr_pool_cleanup_register(p, NULL, axis2_shutdown, apr_pool_cleanup_null);*/ +} + +static void +axis2_register_hooks( + apr_pool_t * p) +{ + ap_hook_post_config(axis2_post_config, NULL, NULL, APR_HOOK_MIDDLE); + ap_hook_handler(axis2_handler, NULL, NULL, APR_HOOK_MIDDLE); + ap_hook_child_init(axis2_module_init, NULL, NULL, APR_HOOK_MIDDLE); +} + +apr_status_t +axis2_shutdown( + void *tmp) +{ + if(axis2_worker) + { + axis2_apache2_worker_free(axis2_worker, axutil_env); + } + return APR_SUCCESS; +} + +char * +axis2_get_session( + void *req, + const char *id) +{ + request_rec *request = NULL; + apr_status_t rv; + const char *dbd_session = NULL; + apr_dbd_prepared_t *statement; + apr_dbd_results_t *res = NULL; + apr_dbd_row_t *row = NULL; + ap_dbd_t *dbd = NULL; + ap_dbd_t *(*authn_dbd_acquire_fn)(request_rec*) = NULL; + request = (request_rec *) req; + + authn_dbd_acquire_fn = APR_RETRIEVE_OPTIONAL_FN(ap_dbd_acquire); + dbd = authn_dbd_acquire_fn(request); + if (!dbd) + { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, request, + "Failed to acquire database connection to look up " + "id '%s'", id); + return NULL; + } + + statement = apr_hash_get(dbd->prepared, "retrieve_session", APR_HASH_KEY_STRING); + if (!statement) + { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, request, + "A prepared statement could not be found for " + "the key '%s'", "retrieve_session"); + return NULL; + } + if (apr_dbd_pvselect(dbd->driver, request->pool, dbd->handle, &res, statement, + 0, id, NULL) != 0) + { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, request, + "Query execution error looking up '%s' " + "in database", id); + return NULL; + } + for (rv = apr_dbd_get_row(dbd->driver, request->pool, res, &row, -1); rv != -1; + rv = apr_dbd_get_row(dbd->driver, request->pool, res, &row, -1)) + { + if (rv != 0) + { + ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, request, + "Error retrieving results while looking up '%s' " + "in database", id); + return NULL; + } + if (!dbd_session) + { + dbd_session = apr_dbd_get_entry(dbd->driver, row, 0); + } + /* we can't break out here or row won't get cleaned up */ + } + + if (!dbd_session) + { + return NULL; + } + + return (char *) dbd_session; +} + +axis2_status_t +axis2_set_session( + void *req, + const char *id, + const char *session) +{ + request_rec *request = NULL; + apr_dbd_prepared_t *statement; + int affected_rows = -1; + ap_dbd_t *dbd = NULL; + ap_dbd_t *(*authn_dbd_acquire_fn)(request_rec*) = NULL; + request = (request_rec *) req; + + authn_dbd_acquire_fn = APR_RETRIEVE_OPTIONAL_FN(ap_dbd_acquire); + dbd = authn_dbd_acquire_fn(request); + if (!dbd) + { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, request, + "Failed to acquire database connection to insert session for " + "id '%s'", id); + return AXIS2_FAILURE; + } + + statement = apr_hash_get(dbd->prepared, "insert_session", APR_HASH_KEY_STRING); + if (!statement) + { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, request, + "A prepared statement could not be found for " + "the key '%s'", "insert_session"); + return AXIS2_FAILURE; + } + if (apr_dbd_pvquery(dbd->driver, request->pool, dbd->handle, &affected_rows, statement, id, + session, NULL) != 0) + { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, request, + "Query execution error inserting session for '%s' " + "in database", id); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + + diff --git a/src/core/transport/http/server/simple_axis2_server/Makefile.am b/src/core/transport/http/server/simple_axis2_server/Makefile.am new file mode 100644 index 0000000..604851d --- /dev/null +++ b/src/core/transport/http/server/simple_axis2_server/Makefile.am @@ -0,0 +1,30 @@ +prgbindir=$(bindir) +prgbin_PROGRAMS = axis2_http_server +SUBDIRS = +AM_CFLAGS = -g -pthread +axis2_http_server_SOURCES = http_server_main.c + +axis2_http_server_LDADD = $(LDFLAGS) \ + $(top_builddir)/src/core/transport/http/util/libaxis2_http_util.la \ + $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la \ + $(top_builddir)/axiom/src/om/libaxis2_axiom.la \ + $(top_builddir)/util/src/libaxutil.la \ + $(top_builddir)/axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + $(top_builddir)/src/core/description/libaxis2_description.la \ + $(top_builddir)/src/core/deployment/libaxis2_deployment.la \ + $(top_builddir)/src/core/context/libaxis2_context.la \ + $(top_builddir)/src/core/clientapi/libaxis2_clientapi.la \ + $(top_builddir)/src/core/engine/libaxis2_engine.la \ + $(top_builddir)/src/core/transport/http/sender/libaxis2_http_sender.la \ + $(top_builddir)/src/core/transport/http/receiver/libaxis2_http_receiver.la \ + $(top_builddir)/neethi/src/libneethi.la \ + -lpthread + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/description\ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/deployment\ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include diff --git a/src/core/transport/http/server/simple_axis2_server/http_server_main.c b/src/core/transport/http/server/simple_axis2_server/http_server_main.c new file mode 100644 index 0000000..cfbcda4 --- /dev/null +++ b/src/core/transport/http/server/simple_axis2_server/http_server_main.c @@ -0,0 +1,310 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +axutil_env_t *system_env = NULL; +axis2_transport_receiver_t *server = NULL; +AXIS2_IMPORT extern int axis2_http_socket_read_timeout; +AXIS2_IMPORT extern axis2_char_t *axis2_request_url_prefix; + +#define DEFAULT_REPO_PATH "../" + +/***************************** Function headers *******************************/ +axutil_env_t * +init_syetem_env( + axutil_allocator_t * allocator, + const axis2_char_t * log_file); + +void +system_exit( + axutil_env_t * env, + int status); + +void +usage( + axis2_char_t * prog_name); + +void +sig_handler( + int signal); + +/***************************** End of function headers ************************/ +axutil_env_t * +init_syetem_env( + axutil_allocator_t * allocator, + const axis2_char_t * log_file) +{ + axutil_error_t *error = axutil_error_create(allocator); + axutil_log_t *log = axutil_log_create(allocator, NULL, log_file); + /* if (!log) */ + + /* log = axutil_log_create_default (allocator); */ + axutil_thread_pool_t *thread_pool = axutil_thread_pool_init(allocator); + /* We need to init the parser in main thread before spawning child + * threads + */ + axiom_xml_reader_init(); + return axutil_env_create_with_error_log_thread_pool(allocator, error, log, thread_pool); +} + +void +system_exit( + axutil_env_t * env, + int status) +{ + axutil_allocator_t *allocator = NULL; + if(server) + { + axis2_transport_receiver_free(server, system_env); + } + if(env) + { + allocator = env->allocator; + axutil_env_free(env); + } + /*axutil_allocator_free(allocator); */ + axiom_xml_reader_cleanup(); + exit(status); +} + +int +main( + int argc, + char *argv[]) +{ + axutil_allocator_t *allocator = NULL; + axutil_env_t *env = NULL; + extern char *optarg; + extern int optopt; + int c; + unsigned int len; + int log_file_size = AXUTIL_LOG_FILE_SIZE; + unsigned int file_flag = 0; + axutil_log_levels_t log_level = AXIS2_LOG_LEVEL_DEBUG; + const axis2_char_t *log_file = "axis2.log"; + const axis2_char_t *repo_path = DEFAULT_REPO_PATH; + int port = 9090; + axis2_status_t status; + + /* Set the service URL prefix to be used. This could default to services if not + set with AXIS2_REQUEST_URL_PREFIX macro at compile time */ + axis2_request_url_prefix = AXIS2_REQUEST_URL_PREFIX; + + while((c = AXIS2_GETOPT(argc, argv, ":p:r:ht:l:s:f:")) != -1) + { + + switch(c) + { + case 'p': + port = AXIS2_ATOI(optarg); + break; + case 'r': + repo_path = optarg; + break; + case 't': + axis2_http_socket_read_timeout = AXIS2_ATOI(optarg) * 1000; + break; + case 'l': + log_level = AXIS2_ATOI(optarg); + if(log_level < AXIS2_LOG_LEVEL_CRITICAL) + log_level = AXIS2_LOG_LEVEL_CRITICAL; + if(log_level > AXIS2_LOG_LEVEL_TRACE) + log_level = AXIS2_LOG_LEVEL_TRACE; + break; + case 's': + log_file_size = 1024 * 1024 * AXIS2_ATOI(optarg); + break; + case 'f': + log_file = optarg; + break; + case 'h': + usage(argv[0]); + return 0; + case ':': + fprintf(stderr, "\nOption -%c requires an operand\n", optopt); + usage(argv[0]); + return -1; + case '?': + if(isprint(optopt)) + fprintf(stderr, "\nUnknown option `-%c'.\n", optopt); + usage(argv[0]); + return -1; + } + } + + allocator = axutil_allocator_init(NULL); + + if(!allocator) + { + system_exit(NULL, -1); + } + + env = init_syetem_env(allocator, log_file); + env->log->level = log_level; + env->log->size = log_file_size; + + axutil_error_init(); + system_env = env; + + signal(SIGINT, sig_handler); +#ifndef WIN32 + signal(SIGPIPE, sig_handler); +#endif + + AXIS2_LOG_INFO(env->log, "Starting Axis2 HTTP server...."); + AXIS2_LOG_INFO(env->log, "Apache Axis2/C version in use : %s", axis2_version_string()); + AXIS2_LOG_INFO(env->log, "Server port : %d", port); + AXIS2_LOG_INFO(env->log, "Repo location : %s", repo_path); + AXIS2_LOG_INFO(env->log, "Read Timeout : %d ms", axis2_http_socket_read_timeout); + + status = axutil_file_handler_access(repo_path, AXIS2_R_OK); + if(status == AXIS2_SUCCESS) + { + len = (unsigned int)strlen(repo_path); + /* We are sure that the difference lies within the unsigned int range */ + if((len >= 9) && !strcmp((repo_path + (len - 9)), "axis2.xml")) + { + file_flag = 1; + } + } + else + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "provided repo path %s does " + "not exist or no permissions to read, set " + "repo_path to DEFAULT_REPO_PATH", repo_path); + repo_path = DEFAULT_REPO_PATH; + } + + if(!file_flag) + server = axis2_http_server_create(env, repo_path, port); + else + server = axis2_http_server_create_with_file(env, repo_path, port); + + if(!server) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Server creation failed: Error code:" " %d :: %s", + env->error->error_number, AXIS2_ERROR_GET_MESSAGE(env->error)); + system_exit(env, -1); + + } + printf("Started Simple Axis2 HTTP Server ...\n"); + if(axis2_transport_receiver_start(server, env) == AXIS2_FAILURE) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Server start failed: Error code:" " %d :: %s", + env->error->error_number, AXIS2_ERROR_GET_MESSAGE(env->error)); + system_exit(env, -1); + } + return 0; +} + +void +usage( + axis2_char_t * prog_name) +{ + fprintf(stdout, "\n Usage : %s", prog_name); + fprintf(stdout, " [-p PORT]"); + fprintf(stdout, " [-t TIMEOUT]"); + fprintf(stdout, " [-r REPO_PATH]"); + fprintf(stdout, " [-l LOG_LEVEL]"); + fprintf(stdout, " [-f LOG_FILE]\n"); + fprintf(stdout, " [-s LOG_FILE_SIZE]\n"); + fprintf(stdout, " Options :\n"); + fprintf(stdout, "\t-p PORT \t port number to use, default port is 9090\n"); + fprintf(stdout, "\t-r REPO_PATH \t repository path, default is ../\n"); + fprintf(stdout, "\t-t TIMEOUT\t socket read timeout, default is 30 seconds\n"); + fprintf(stdout, "\t-l LOG_LEVEL\t log level, available log levels:" + "\n\t\t\t 0 - critical 1 - errors 2 - warnings" + "\n\t\t\t 3 - information 4 - debug 5- user 6- trace" + "\n\t\t\t Default log level is 4(debug).\n"); +#ifndef WIN32 + fprintf(stdout, "\t-f LOG_FILE\t log file, default is $AXIS2C_HOME/logs/axis2.log" + "\n\t\t\t or axis2.log in current folder if AXIS2C_HOME not set\n"); +#else + fprintf(stdout, + "\t-f LOG_FILE\t log file, default is %%AXIS2C_HOME%%\\logs\\axis2.log" + "\n\t\t\t or axis2.log in current folder if AXIS2C_HOME not set\n"); +#endif + fprintf(stdout, + "\t-s LOG_FILE_SIZE\t Maximum log file size in mega bytes, default maximum size is 1MB.\n"); + fprintf(stdout, " Help :\n\t-h \t display this help screen.\n\n"); +} + +/** + * Signal handler + */ +void +sig_handler( + int signal) +{ + + if(!system_env) + { + AXIS2_LOG_ERROR( + system_env->log, + AXIS2_LOG_SI, + "Received signal %d, unable to proceed system_env is NULL ,\ + system exit with -1", + signal); + _exit(-1); + } + + switch(signal) + { + case SIGINT: + { + /* Use of SIGINT in Windows is valid, since we have a console application + * Thus, eventhough this may a single threaded application, it does work. + */ + AXIS2_LOG_INFO(system_env->log, "Received signal SIGINT. Server " + "shutting down"); + if(server) + { + axis2_http_server_stop(server, system_env); + } + + AXIS2_LOG_INFO(system_env->log, "Shutdown complete ..."); + system_exit(system_env, 0); + } +#ifndef WIN32 + case SIGPIPE: + { + AXIS2_LOG_INFO(system_env->log, "Received signal SIGPIPE. Client " + "request serve aborted"); + return; + } +#endif + case SIGSEGV: + { + fprintf(stderr, "Received deadly signal SIGSEGV. Terminating\n"); + _exit(-1); + } + } +} diff --git a/src/core/transport/http/util/Makefile.am b/src/core/transport/http/util/Makefile.am new file mode 100644 index 0000000..eff6c0e --- /dev/null +++ b/src/core/transport/http/util/Makefile.am @@ -0,0 +1,14 @@ +NSUBDIRS = +noinst_LTLIBRARIES = libaxis2_http_util.la + +libaxis2_http_util_la_SOURCES = http_transport_utils.c + +libaxis2_http_util_la_LIBADD=$(top_builddir)/util/src/libaxutil.la \ + $(top_builddir)/axiom/src/parser/${WRAPPER_DIR}/libaxis2_parser.la\ + $(top_builddir)/axiom/src/om/libaxis2_axiom.la + + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include diff --git a/src/core/transport/http/util/http_transport_utils.c b/src/core/transport/http/util/http_transport_utils.c new file mode 100644 index 0000000..97d1510 --- /dev/null +++ b/src/core/transport/http/util/http_transport_utils.c @@ -0,0 +1,3885 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define AXIOM_MIME_BOUNDARY_BYTE 45 + +/** Size of the buffer to be used when reading a file */ +#ifndef AXIS2_FILE_READ_SIZE +#define AXIS2_FILE_READ_SIZE 2048 +#endif + +/** Content length value to be used in case of chunked content */ +#ifndef AXIS2_CHUNKED_CONTENT_LENGTH +#define AXIS2_CHUNKED_CONTENT_LENGTH 100000000 +#endif + +const axis2_char_t *AXIS2_TRANS_UTIL_DEFAULT_CHAR_ENCODING = + AXIS2_HTTP_HEADER_DEFAULT_CHAR_ENCODING; + +/***************************** Function headers *******************************/ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_transport_utils_process_http_post_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + const int content_length, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_transport_utils_process_http_put_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + const int content_length, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri); + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_transport_utils_process_http_get_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri, + axis2_conf_ctx_t * conf_ctx, + axutil_hash_t * request_params); + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_transport_utils_process_http_head_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri, + axis2_conf_ctx_t * conf_ctx, + axutil_hash_t * request_params); + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_transport_utils_process_http_delete_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri, + axis2_conf_ctx_t * conf_ctx, + axutil_hash_t * request_params); + +AXIS2_EXTERN axiom_stax_builder_t *AXIS2_CALL +axis2_http_transport_utils_select_builder_for_mime( + const axutil_env_t * env, + axis2_char_t * request_uri, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axis2_char_t * content_type); + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_transport_utils_is_optimized( + const axutil_env_t * env, + axiom_element_t * om_element); + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_transport_utils_do_write_mtom( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_transport_utils_strdecode( + const axutil_env_t * env, + axis2_char_t * dest, + axis2_char_t * src); + +AXIS2_EXTERN int AXIS2_CALL +axis2_http_transport_utils_hexit( + axis2_char_t c); + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_services_html( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_services_static_wsdl( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_char_t * request_url); + +AXIS2_EXTERN axutil_string_t *AXIS2_CALL +axis2_http_transport_utils_get_charset_enc( + const axutil_env_t * env, + const axis2_char_t * content_type); + +int AXIS2_CALL +axis2_http_transport_utils_on_data_request( + char *buffer, + int size, + void *ctx); + +AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL +axis2_http_transport_utils_create_soap_msg( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + const axis2_char_t * soap_ns_uri); + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_value_from_content_type( + const axutil_env_t * env, + const axis2_char_t * content_type, + const axis2_char_t * key); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_transport_utils_dispatch_and_verify( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + +AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL +axis2_http_transport_utils_handle_media_type_url_encoded( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_hash_t * param_map, + axis2_char_t * method); + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_transport_utils_session_map_free_void_arg( + void *sm_void, + const axutil_env_t *env); + +static axis2_status_t +axis2_http_transport_utils_send_attachment_using_file( + const axutil_env_t * env, + axutil_http_chunked_stream_t *chunked_stream, + FILE *fp, + axis2_byte_t *buffer, + int buffer_size); + +static axis2_status_t +axis2_http_transport_utils_send_attachment_using_callback( + const axutil_env_t * env, + axutil_http_chunked_stream_t *chunked_stream, + axiom_mtom_sending_callback_t *callback, + void *handler, + void *user_param); + +static axis2_char_t * +axis2_http_transport_utils_copy_key( + const axutil_env_t *env, + axis2_char_t *); + +static axis2_char_t * +axis2_http_transport_utils_copy_value( + const axutil_env_t *env, + axis2_char_t *pair); + +static void +axis2_http_transport_utils_parse_session_str( + const axutil_env_t *env, + axis2_char_t *str, + axutil_hash_t *ht); +/***************************** End of function headers ************************/ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_transport_utils_transport_out_init( + axis2_http_transport_out_t *response, + const axutil_env_t *env) +{ + response->http_status_code_name = NULL; + response->http_status_code = 0; + response->msg_ctx = NULL; + response->response_data = NULL; + response->content_type = NULL; + response->response_data_length = 0; + response->content_language = NULL; + response->output_headers = NULL; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_transport_utils_transport_out_uninit( + axis2_http_transport_out_t *response, + const axutil_env_t *env) +{ + if(response->msg_ctx) + { + axis2_msg_ctx_free(response->msg_ctx, env); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_transport_utils_transport_in_init( + axis2_http_transport_in_t *request, + const axutil_env_t *env) +{ + request->content_type = NULL; + request->content_length = 0; + request->msg_ctx = NULL; + request->soap_action = NULL; + request->request_uri = NULL; + request->in_stream = NULL; + request->remote_ip = NULL; + request->svr_port = NULL; + request->transfer_encoding = NULL; + request->accept_header = NULL; + request->accept_language_header = NULL; + request->accept_charset_header = NULL; + request->request_method = 0; + request->out_transport_info = NULL; + request->request_url_prefix = NULL; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_transport_utils_transport_in_uninit( + axis2_http_transport_in_t *request, + const axutil_env_t *env) +{ + if(request->msg_ctx) + { + axis2_msg_ctx_reset_out_transport_info(request->msg_ctx, env); + axis2_msg_ctx_free(request->msg_ctx, env); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_transport_utils_process_http_post_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + const int content_length, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_builder_t *soap_builder = NULL; + axiom_stax_builder_t *om_builder = NULL; + axis2_bool_t is_soap11 = AXIS2_FALSE; + axiom_xml_reader_t *xml_reader = NULL; + axutil_string_t *char_set_str = NULL; + + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_callback_info_t *callback_ctx = NULL; + axis2_callback_info_t *mime_cb_ctx = NULL; + axutil_hash_t *headers = NULL; + axis2_engine_t *engine = NULL; + axiom_soap_body_t *soap_body = NULL; + axis2_status_t status = AXIS2_FAILURE; + axutil_hash_t *binary_data_map = NULL; + axis2_char_t *soap_body_str = NULL; + axutil_stream_t *stream = NULL; + axis2_bool_t do_rest = AXIS2_FALSE; + axis2_bool_t run_as_get = AXIS2_FALSE; + axis2_char_t *soap_action = NULL; + unsigned int soap_action_len = 0; + axutil_property_t *http_error_property = NULL; + axiom_mime_parser_t *mime_parser = NULL; + axis2_bool_t is_svc_callback = AXIS2_FALSE; + axutil_property_t *is_client_property = NULL; + axis2_bool_t is_application_client_side = AXIS2_FALSE; + axis2_char_t *mime_boundary = NULL; + axis2_bool_t check_for_fault = AXIS2_FALSE; + axis2_bool_t has_fault = AXIS2_FALSE; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, in_stream, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, out_stream, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, content_type, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, request_uri, AXIS2_FAILURE); + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + + callback_ctx = AXIS2_MALLOC(env->allocator, sizeof(axis2_callback_info_t)); + /* Note: the memory created above is freed in xml reader free function + as this is passed on to the reader */ + callback_ctx->in_stream = in_stream; + callback_ctx->env = env; + callback_ctx->content_length = content_length; + callback_ctx->unread_len = content_length; + callback_ctx->chunked_stream = NULL; + + soap_action = (axis2_char_t *)axutil_string_get_buffer(soap_action_header, env); + soap_action_len = axutil_string_get_length(soap_action_header, env); + + if(soap_action && (soap_action_len > 0)) + { + /* remove leading and trailing " s */ + if(AXIS2_DOUBLE_QUOTE == soap_action[0]) + { + memmove(soap_action, soap_action + sizeof(char), soap_action_len - 1 + sizeof(char)); + } + if(AXIS2_DOUBLE_QUOTE == soap_action[soap_action_len - 2]) + { + soap_action[soap_action_len - 2] = AXIS2_ESC_NULL; + } + } + else + { + /** soap action is null, check whether soap action is in content_type header */ + soap_action = axis2_http_transport_utils_get_value_from_content_type(env, content_type, + AXIS2_ACTION); + } + + headers = axis2_msg_ctx_get_transport_headers(msg_ctx, env); + if(headers) + { + axis2_http_header_t *encoding_header = NULL; + encoding_header = (axis2_http_header_t *)axutil_hash_get(headers, + AXIS2_HTTP_HEADER_TRANSFER_ENCODING, AXIS2_HASH_KEY_STRING); + + if(encoding_header) + { + axis2_char_t *encoding_value = NULL; + encoding_value = axis2_http_header_get_value(encoding_header, env); + if(encoding_value && 0 == axutil_strcasecmp(encoding_value, + AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED)) + { + callback_ctx->chunked_stream = axutil_http_chunked_stream_create(env, in_stream); + + if(!callback_ctx->chunked_stream) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error occurred in" + " creating in chunked stream."); + return AXIS2_FAILURE; + } + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "HTTP" + " stream chunked"); + } + } + } + else + { + /* Encoding header is not available */ + /* check content encoding from msg ctx property */ + axis2_char_t *value = axis2_msg_ctx_get_transfer_encoding(msg_ctx, env); + + if(value && axutil_strstr(value, AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED)) + { + /* In case Transfer encoding is set to message context, some streams strip chunking meta + data, so chunked streams should not be created */ + + callback_ctx->content_length = -1; + callback_ctx->unread_len = -1; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[chunked ] setting length to -1"); + } + } + + /* when the message contains does not contain pure XML we can't send it + * directly to the parser, First we need to separate the SOAP part from + * the attachment */ + + if(strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_MULTIPART_RELATED)) + { + /* get mime boundary */ + mime_boundary = axis2_http_transport_utils_get_value_from_content_type(env, + content_type, AXIS2_HTTP_HEADER_CONTENT_TYPE_MIME_BOUNDARY); + + if(mime_boundary) + { + /*axiom_mime_parser_t *mime_parser = NULL;*/ + int soap_body_len = 0; + axutil_param_t *buffer_size_param = NULL; + axutil_param_t *max_buffers_param = NULL; + axutil_param_t *attachment_dir_param = NULL; + axutil_param_t *callback_name_param = NULL; + axutil_param_t *enable_service_callback_param = NULL; + axis2_char_t *value_size = NULL; + axis2_char_t *value_num = NULL; + axis2_char_t *value_dir = NULL; + axis2_char_t *value_callback = NULL; + axis2_char_t *value_enable_service_callback = NULL; + int size = 0; + int num = 0; + + mime_parser = axiom_mime_parser_create(env); + /* This is the size of the buffer we keep inside mime_parser + * when parsing. */ + + enable_service_callback_param = axis2_msg_ctx_get_parameter(msg_ctx, env, + AXIS2_ENABLE_MTOM_SERVICE_CALLBACK); + if(enable_service_callback_param) + { + value_enable_service_callback = (axis2_char_t *)axutil_param_get_value( + enable_service_callback_param, env); + if(value_enable_service_callback) + { + if(!axutil_strcmp(value_enable_service_callback, AXIS2_VALUE_TRUE)) + { + is_svc_callback = AXIS2_TRUE; + } + } + } + + buffer_size_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_MTOM_BUFFER_SIZE); + if(buffer_size_param) + { + value_size = (axis2_char_t *)axutil_param_get_value(buffer_size_param, env); + if(value_size) + { + size = atoi(value_size); + axiom_mime_parser_set_buffer_size(mime_parser, env, size); + } + } + + /* We create an array of buffers in order to conatin SOAP data inside + * mime_parser. This is the number of sucj buffers */ + max_buffers_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_MTOM_MAX_BUFFERS); + if(max_buffers_param) + { + value_num = (axis2_char_t *)axutil_param_get_value(max_buffers_param, env); + if(value_num) + { + num = atoi(value_num); + axiom_mime_parser_set_max_buffers(mime_parser, env, num); + } + } + /* If this paramter is there mime_parser will cached the attachment + * using to the directory for large attachments. */ + + callback_name_param = axis2_msg_ctx_get_parameter(msg_ctx, env, + AXIS2_MTOM_CACHING_CALLBACK); + if(callback_name_param) + { + value_callback = (axis2_char_t *)axutil_param_get_value(callback_name_param, env); + if(value_callback) + { + axiom_mime_parser_set_caching_callback_name(mime_parser, env, value_callback); + } + } + + attachment_dir_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_ATTACHMENT_DIR); + + if(attachment_dir_param) + { + value_dir = (axis2_char_t *)axutil_param_get_value(attachment_dir_param, env); + if(value_dir) + { + axiom_mime_parser_set_attachment_dir(mime_parser, env, value_dir); + } + } + + axiom_mime_parser_set_mime_boundary(mime_parser, env, mime_boundary); + + if(axiom_mime_parser_parse_for_soap(mime_parser, env, + axis2_http_transport_utils_on_data_request, (void *)callback_ctx, mime_boundary) + == AXIS2_FAILURE) + { + return AXIS2_FAILURE; + } + + if(!is_svc_callback) + { + binary_data_map = axiom_mime_parser_parse_for_attachments(mime_parser, env, + axis2_http_transport_utils_on_data_request, (void *)callback_ctx, + mime_boundary, NULL); + if(!binary_data_map) + { + return AXIS2_FAILURE; + } + } + soap_body_len = (int)axiom_mime_parser_get_soap_body_len(mime_parser, env); + soap_body_str = axiom_mime_parser_get_soap_body_str(mime_parser, env); + + if(!is_svc_callback) + { + if(callback_ctx->chunked_stream) + { + axutil_http_chunked_stream_free(callback_ctx->chunked_stream, env); + callback_ctx->chunked_stream = NULL; + } + } + else + { + mime_cb_ctx = AXIS2_MALLOC(env->allocator, sizeof(axis2_callback_info_t)); + if(mime_cb_ctx) + { + mime_cb_ctx->in_stream = callback_ctx->in_stream; + mime_cb_ctx->env = callback_ctx->env; + mime_cb_ctx->content_length = callback_ctx->content_length; + mime_cb_ctx->unread_len = callback_ctx->unread_len; + mime_cb_ctx->chunked_stream = callback_ctx->chunked_stream; + } + } + + stream = axutil_stream_create_basic(env); + if(stream) + { + axutil_stream_write(stream, env, soap_body_str, soap_body_len); + callback_ctx->in_stream = stream; + callback_ctx->chunked_stream = NULL; + callback_ctx->content_length = soap_body_len; + callback_ctx->unread_len = soap_body_len; + } + /*axiom_mime_parser_free(mime_parser, env); + mime_parser = NULL;*/ + + /*AXIS2_FREE(env->allocator, mime_boundary);*/ + } + /*AXIS2_FREE(env->allocator, mime_boundary);*/ + } + + if(soap_action_header) + { + axis2_msg_ctx_set_soap_action(msg_ctx, env, soap_action_header); + + } + else if(soap_action) + { + axutil_string_t *soap_action_str = NULL; + soap_action_str = axutil_string_create(env, soap_action); + axis2_msg_ctx_set_soap_action(msg_ctx, env, soap_action_str); + axutil_string_free(soap_action_str, env); + } + axis2_msg_ctx_set_to(msg_ctx, env, axis2_endpoint_ref_create(env, request_uri)); + + axis2_msg_ctx_set_server_side(msg_ctx, env, AXIS2_TRUE); + + char_set_str = axis2_http_transport_utils_get_charset_enc(env, content_type); + xml_reader = axiom_xml_reader_create_for_io(env, axis2_http_transport_utils_on_data_request, + NULL, (void *)callback_ctx, axutil_string_get_buffer(char_set_str, env)); + + if(!xml_reader) + { + return AXIS2_FAILURE; + } + + axis2_msg_ctx_set_charset_encoding(msg_ctx, env, char_set_str); + + om_builder = axiom_stax_builder_create(env, xml_reader); + if(!om_builder) + { + axiom_xml_reader_free(xml_reader, env); + xml_reader = NULL; + return AXIS2_FAILURE; + } + + if(strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP)) + { + is_soap11 = AXIS2_FALSE; + soap_builder = axiom_soap_builder_create(env, om_builder, + AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI); + if(!soap_builder) + { + /* We should not be freeing om_builder here as it is done by + axiom_soap_builder_create in case of error - Samisa */ + om_builder = NULL; + xml_reader = NULL; + axis2_msg_ctx_set_is_soap_11(msg_ctx, env, is_soap11); + return AXIS2_FAILURE; + } + + soap_envelope = axiom_soap_builder_get_soap_envelope(soap_builder, env); + if(!soap_envelope) + { + axiom_stax_builder_free(om_builder, env); + om_builder = NULL; + xml_reader = NULL; + axiom_soap_builder_free(soap_builder, env); + soap_builder = NULL; + axis2_msg_ctx_set_is_soap_11(msg_ctx, env, is_soap11); + return AXIS2_FAILURE; + } + } + else if(strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML)) + { + is_soap11 = AXIS2_TRUE; + if(soap_action_header) + { + soap_builder = axiom_soap_builder_create(env, om_builder, + AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI); + if(!soap_builder) + { + /* We should not be freeing om_builder here as it is done by + axiom_soap_builder_create in case of error - Samisa */ + om_builder = NULL; + xml_reader = NULL; + axis2_msg_ctx_set_is_soap_11(msg_ctx, env, is_soap11); + return AXIS2_FAILURE; + } + soap_envelope = axiom_soap_builder_get_soap_envelope(soap_builder, env); + if(!soap_envelope) + { + axiom_soap_builder_free(soap_builder, env); + om_builder = NULL; + xml_reader = NULL; + soap_builder = NULL; + axis2_msg_ctx_set_is_soap_11(msg_ctx, env, is_soap11); + return AXIS2_FAILURE; + } + } + else + { + /* REST support */ + do_rest = AXIS2_TRUE; + } + } + + else if(strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_X_WWW_FORM_URLENCODED)) + { + /* REST support */ + do_rest = AXIS2_TRUE; + run_as_get = AXIS2_TRUE; + } + else + { + http_error_property = axutil_property_create(env); + axutil_property_set_value(http_error_property, env, AXIS2_HTTP_UNSUPPORTED_MEDIA_TYPE); + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_HTTP_TRANSPORT_ERROR, http_error_property); + } + + if(soap_builder) + { + if(mime_parser) + { + axiom_soap_builder_set_mime_parser(soap_builder, env, mime_parser); + if(mime_cb_ctx) + { + axiom_soap_builder_set_callback_ctx(soap_builder, env, mime_cb_ctx); + axiom_soap_builder_set_callback_function(soap_builder, env, + axis2_http_transport_utils_on_data_request); + } + else if(is_svc_callback) + { + return AXIS2_FAILURE; + } + } + } + + if(do_rest) + { + /* REST support */ + axutil_param_t *rest_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_ENABLE_REST); + if(rest_param && 0 == axutil_strcmp(AXIS2_VALUE_TRUE, axutil_param_get_value(rest_param, + env))) + { + axiom_soap_body_t *def_body = NULL; + axiom_document_t *om_doc = NULL; + axiom_node_t *root_node = NULL; + if(!run_as_get) + { + soap_envelope = axiom_soap_envelope_create_default_soap_envelope(env, AXIOM_SOAP11); + def_body = axiom_soap_envelope_get_body(soap_envelope, env); + om_doc = axiom_stax_builder_get_document(om_builder, env); + root_node = axiom_document_build_all(om_doc, env); + axiom_soap_body_add_child(def_body, env, root_node); + } + axis2_msg_ctx_set_doing_rest(msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_rest_http_method(msg_ctx, env, AXIS2_HTTP_POST); + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, soap_envelope); + } + else + { + return AXIS2_FAILURE; + } + if(AXIS2_SUCCESS != axis2_http_transport_utils_dispatch_and_verify(env, msg_ctx)) + { + return AXIS2_FAILURE; + } + } + + if(run_as_get) + { + axis2_char_t *buffer = NULL; + axis2_char_t *new_url = NULL; + buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (content_length + 1)); + if(!buffer) + { + return AXIS2_FAILURE; + } + axis2_http_transport_utils_on_data_request(buffer, content_length, (void *)callback_ctx); + + new_url = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * ((int)(strlen(request_uri) + + strlen(buffer)) + 2)); + if(!new_url) + { + return AXIS2_FAILURE; + } + sprintf(new_url, "%s?%s", request_uri, buffer); + AXIS2_FREE(env->allocator, buffer); + + soap_envelope = axis2_http_transport_utils_handle_media_type_url_encoded(env, msg_ctx, + axis2_http_transport_utils_get_request_params(env, new_url), AXIS2_HTTP_POST); + } + + if(binary_data_map) + { + axiom_soap_builder_set_mime_body_parts(soap_builder, env, binary_data_map); + } + + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, soap_envelope); + + engine = axis2_engine_create(env, conf_ctx); + + if(!soap_envelope) + return AXIS2_FAILURE; + + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + + if(!soap_body) + return AXIS2_FAILURE; + + if(!is_svc_callback) + { + is_client_property = axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_TRANPORT_IS_APPLICATION_CLIENT_SIDE); + if(is_client_property) + { + axis2_char_t *prop_value = NULL; + prop_value = axutil_property_get_value(is_client_property, env); + if(prop_value && !axutil_strcmp(prop_value , AXIS2_VALUE_TRUE)) + { + is_application_client_side = AXIS2_TRUE; + } + } + if(mime_boundary || is_application_client_side) + { + check_for_fault = AXIS2_TRUE; + } + if(check_for_fault) + { + has_fault = axiom_soap_body_has_fault(soap_body, env); + } + if(has_fault) + { + status = axis2_engine_receive_fault(engine, env, msg_ctx); + } + else + { + status = axis2_engine_receive(engine, env, msg_ctx); + } + } + else + { + status = axis2_engine_receive(engine, env, msg_ctx); + } + + if(!axis2_msg_ctx_get_soap_envelope(msg_ctx, env) && AXIS2_FALSE == is_soap11) + { + axiom_soap_envelope_t *def_envelope = axiom_soap_envelope_create_default_soap_envelope(env, + AXIOM_SOAP12); + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, def_envelope); + } + + if(engine) + { + axis2_engine_free(engine, env); + } + + if(soap_body_str) + { + AXIS2_FREE(env->allocator, soap_body_str); + } + + if(stream) + { + axutil_stream_free(stream, env); + } + + if(char_set_str) + { + axutil_string_free(char_set_str, env); + } + if(!soap_builder && om_builder) + { + axiom_stax_builder_free_self(om_builder, env); + om_builder = NULL; + } + if(!axutil_string_get_buffer(soap_action_header, env) && soap_action) + { + AXIS2_FREE(env->allocator, soap_action); + soap_action = NULL; + } + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_transport_utils_process_http_put_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + const int content_length, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_builder_t *soap_builder = NULL; + axiom_stax_builder_t *om_builder = NULL; + axis2_bool_t is_soap11 = AXIS2_FALSE; + axiom_xml_reader_t *xml_reader = NULL; + axutil_string_t *char_set_str = NULL; + + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_callback_info_t *callback_ctx; + axutil_hash_t *headers = NULL; + axis2_engine_t *engine = NULL; + axiom_soap_body_t *soap_body = NULL; + axis2_status_t status = AXIS2_FAILURE; + axutil_hash_t *binary_data_map = NULL; + axis2_char_t *soap_body_str = NULL; + axutil_stream_t *stream = NULL; + axis2_bool_t do_rest = AXIS2_FALSE; + axis2_bool_t run_as_get = AXIS2_FALSE; + axutil_property_t *http_error_property = NULL; + axutil_property_t *is_client_property = NULL; + axis2_bool_t is_application_client_side = AXIS2_FALSE; + axis2_char_t *mime_boundary = NULL; + axis2_bool_t check_for_fault = AXIS2_FALSE; + axis2_bool_t has_fault = AXIS2_FALSE; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, in_stream, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, out_stream, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, content_type, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, request_uri, AXIS2_FAILURE); + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + + callback_ctx = AXIS2_MALLOC(env->allocator, sizeof(axis2_callback_info_t)); + /* Note: the memory created above is freed in xml reader free function + as this is passed on to the reader */ + callback_ctx->in_stream = in_stream; + callback_ctx->env = env; + callback_ctx->content_length = content_length; + callback_ctx->unread_len = content_length; + callback_ctx->chunked_stream = NULL; + + headers = axis2_msg_ctx_get_transport_headers(msg_ctx, env); + if(headers) + { + axis2_http_header_t *encoding_header = NULL; + encoding_header = (axis2_http_header_t *)axutil_hash_get(headers, + AXIS2_HTTP_HEADER_TRANSFER_ENCODING, AXIS2_HASH_KEY_STRING); + + if(encoding_header) + { + axis2_char_t *encoding_value = NULL; + encoding_value = axis2_http_header_get_value(encoding_header, env); + if(encoding_value && 0 == axutil_strcasecmp(encoding_value, + AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED)) + { + callback_ctx->chunked_stream = axutil_http_chunked_stream_create(env, in_stream); + if(!callback_ctx->chunked_stream) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error occured in" + " creating in chunked stream."); + return AXIS2_FAILURE; + } + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "HTTP" + " stream chunked"); + } + } + } + else + { + /* check content encoding from msg ctx property */ + axis2_char_t *value = axis2_msg_ctx_get_transfer_encoding(msg_ctx, env); + + if(value && axutil_strstr(value, AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED)) + { + /* this is an UGLY hack to get some of the transports working + e.g. PHP transport where it strips the chunking info in case of chunking + and also gives out a content lenght of 0. + We need to fix the transport design to fix sutuations like this. + */ + callback_ctx->content_length = AXIS2_CHUNKED_CONTENT_LENGTH; + callback_ctx->unread_len = callback_ctx->content_length; + } + } + + if(strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_MULTIPART_RELATED)) + { + /* get mime boundry */ + mime_boundary = axis2_http_transport_utils_get_value_from_content_type(env, + content_type, AXIS2_HTTP_HEADER_CONTENT_TYPE_MIME_BOUNDARY); + + if(mime_boundary) + { + axiom_mime_parser_t *mime_parser = NULL; + int soap_body_len = 0; + axutil_param_t *buffer_size_param = NULL; + axutil_param_t *max_buffers_param = NULL; + axutil_param_t *attachment_dir_param = NULL; + axutil_param_t *callback_name_param = NULL; + axis2_char_t *value_size = NULL; + axis2_char_t *value_num = NULL; + axis2_char_t *value_dir = NULL; + axis2_char_t *value_callback = NULL; + int size = 0; + int num = 0; + + mime_parser = axiom_mime_parser_create(env); + + buffer_size_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_MTOM_BUFFER_SIZE); + if(buffer_size_param) + { + value_size = (axis2_char_t *)axutil_param_get_value(buffer_size_param, env); + if(value_size) + { + size = atoi(value_size); + axiom_mime_parser_set_buffer_size(mime_parser, env, size); + } + } + + max_buffers_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_MTOM_MAX_BUFFERS); + if(max_buffers_param) + { + value_num = (axis2_char_t *)axutil_param_get_value(max_buffers_param, env); + if(value_num) + { + num = atoi(value_num); + axiom_mime_parser_set_max_buffers(mime_parser, env, num); + } + } + + callback_name_param = axis2_msg_ctx_get_parameter(msg_ctx, env, + AXIS2_MTOM_CACHING_CALLBACK); + if(callback_name_param) + { + value_callback = (axis2_char_t *)axutil_param_get_value(callback_name_param, env); + if(value_callback) + { + axiom_mime_parser_set_caching_callback_name(mime_parser, env, value_callback); + } + } + + attachment_dir_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_ATTACHMENT_DIR); + + if(attachment_dir_param) + { + value_dir = (axis2_char_t *)axutil_param_get_value(attachment_dir_param, env); + if(value_dir) + { + axiom_mime_parser_set_attachment_dir(mime_parser, env, value_dir); + } + } + + if(mime_parser) + { + /*binary_data_map = + axiom_mime_parser_parse(mime_parser, env, + axis2_http_transport_utils_on_data_request, + (void *) callback_ctx, + mime_boundary);*/ + if(!binary_data_map) + { + return AXIS2_FAILURE; + } + soap_body_len = (int)axiom_mime_parser_get_soap_body_len(mime_parser, env); + soap_body_str = axiom_mime_parser_get_soap_body_str(mime_parser, env); + } + + stream = axutil_stream_create_basic(env); + if(stream) + { + axutil_stream_write(stream, env, soap_body_str, soap_body_len); + callback_ctx->in_stream = stream; + callback_ctx->chunked_stream = NULL; + callback_ctx->content_length = soap_body_len; + callback_ctx->unread_len = soap_body_len; + } + axiom_mime_parser_free(mime_parser, env); + mime_parser = NULL; + } + /*AXIS2_FREE(env->allocator, mime_boundary);*/ + } + + axis2_msg_ctx_set_to(msg_ctx, env, axis2_endpoint_ref_create(env, request_uri)); + + axis2_msg_ctx_set_server_side(msg_ctx, env, AXIS2_TRUE); + + char_set_str = axis2_http_transport_utils_get_charset_enc(env, content_type); + xml_reader = axiom_xml_reader_create_for_io(env, axis2_http_transport_utils_on_data_request, + NULL, (void *)callback_ctx, axutil_string_get_buffer(char_set_str, env)); + + if(!xml_reader) + { + return AXIS2_FAILURE; + } + + axis2_msg_ctx_set_charset_encoding(msg_ctx, env, char_set_str); + + om_builder = axiom_stax_builder_create(env, xml_reader); + if(!om_builder) + { + axiom_xml_reader_free(xml_reader, env); + xml_reader = NULL; + return AXIS2_FAILURE; + } + + if(strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP)) + { + is_soap11 = AXIS2_FALSE; + soap_builder = axiom_soap_builder_create(env, om_builder, + AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI); + if(!soap_builder) + { + /* We should not be freeing om_builder here as it is done by + axiom_soap_builder_create in case of error - Samisa */ + om_builder = NULL; + xml_reader = NULL; + axis2_msg_ctx_set_is_soap_11(msg_ctx, env, is_soap11); + return AXIS2_FAILURE; + } + + soap_envelope = axiom_soap_builder_get_soap_envelope(soap_builder, env); + if(!soap_envelope) + { + axiom_stax_builder_free(om_builder, env); + om_builder = NULL; + xml_reader = NULL; + axiom_soap_builder_free(soap_builder, env); + soap_builder = NULL; + axis2_msg_ctx_set_is_soap_11(msg_ctx, env, is_soap11); + return AXIS2_FAILURE; + } + } + else if(strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML)) + { + do_rest = AXIS2_TRUE; + if(soap_action_header) + { + return AXIS2_FAILURE; + } + else + { + /* REST support */ + do_rest = AXIS2_TRUE; + } + } + else if(strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_X_WWW_FORM_URLENCODED)) + { + /* REST support */ + do_rest = AXIS2_TRUE; + run_as_get = AXIS2_TRUE; + } + else + { + http_error_property = axutil_property_create(env); + axutil_property_set_value(http_error_property, env, AXIS2_HTTP_UNSUPPORTED_MEDIA_TYPE); + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_HTTP_TRANSPORT_ERROR, http_error_property); + } + + if(do_rest) + { + /* REST support */ + axutil_param_t *rest_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_ENABLE_REST); + if(rest_param && 0 == axutil_strcmp(AXIS2_VALUE_TRUE, axutil_param_get_value(rest_param, + env))) + { + axiom_soap_body_t *def_body = NULL; + axiom_document_t *om_doc = NULL; + axiom_node_t *root_node = NULL; + if(!run_as_get) + { + soap_envelope = axiom_soap_envelope_create_default_soap_envelope(env, AXIOM_SOAP11); + def_body = axiom_soap_envelope_get_body(soap_envelope, env); + om_doc = axiom_stax_builder_get_document(om_builder, env); + root_node = axiom_document_build_all(om_doc, env); + axiom_soap_body_add_child(def_body, env, root_node); + } + axis2_msg_ctx_set_doing_rest(msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_rest_http_method(msg_ctx, env, AXIS2_HTTP_PUT); + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, soap_envelope); + } + else + { + return AXIS2_FAILURE; + } + if(AXIS2_SUCCESS != axis2_http_transport_utils_dispatch_and_verify(env, msg_ctx)) + { + return AXIS2_FAILURE; + } + } + + if(run_as_get) + { + axis2_char_t *buffer = NULL; + axis2_char_t *new_url = NULL; + buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (content_length + 1)); + if(!buffer) + { + return AXIS2_FAILURE; + } + axis2_http_transport_utils_on_data_request(buffer, content_length, (void *)callback_ctx); + + new_url = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * ((int)(strlen(request_uri) + + strlen(buffer)) + 2)); + if(!new_url) + { + return AXIS2_FAILURE; + } + sprintf(new_url, "%s?%s", request_uri, buffer); + AXIS2_FREE(env->allocator, buffer); + + soap_envelope = axis2_http_transport_utils_handle_media_type_url_encoded(env, msg_ctx, + axis2_http_transport_utils_get_request_params(env, new_url), AXIS2_HTTP_POST); + } + + if(binary_data_map) + { + axiom_soap_builder_set_mime_body_parts(soap_builder, env, binary_data_map); + } + + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, soap_envelope); + + engine = axis2_engine_create(env, conf_ctx); + + if(!soap_envelope) + return AXIS2_FAILURE; + + soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + + if(!soap_body) + return AXIS2_FAILURE; + + is_client_property = axis2_msg_ctx_get_property(msg_ctx, env, + AXIS2_TRANPORT_IS_APPLICATION_CLIENT_SIDE); + if(is_client_property) + { + axis2_char_t *prop_value = NULL; + prop_value = axutil_property_get_value(is_client_property, env); + if(prop_value && !axutil_strcmp(prop_value , AXIS2_VALUE_TRUE)) + { + is_application_client_side = AXIS2_TRUE; + } + } + if(mime_boundary || is_application_client_side) + { + check_for_fault = AXIS2_TRUE; + } + if(check_for_fault) + { + has_fault = axiom_soap_body_has_fault(soap_body, env); + } + if(has_fault) + { + status = axis2_engine_receive_fault(engine, env, msg_ctx); + } + else + { + status = axis2_engine_receive(engine, env, msg_ctx); + } + if(mime_boundary) + { + AXIS2_FREE(env->allocator, mime_boundary); + } + if(!axis2_msg_ctx_get_soap_envelope(msg_ctx, env) && AXIS2_FALSE == is_soap11) + { + axiom_soap_envelope_t *def_envelope = axiom_soap_envelope_create_default_soap_envelope(env, + AXIOM_SOAP12); + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, def_envelope); + } + + if(engine) + { + axis2_engine_free(engine, env); + } + + if(soap_body_str) + { + AXIS2_FREE(env->allocator, soap_body_str); + } + + if(stream) + { + axutil_stream_free(stream, env); + } + + if(char_set_str) + { + axutil_string_free(char_set_str, env); + } + if(!soap_builder && om_builder) + { + axiom_stax_builder_free_self(om_builder, env); + om_builder = NULL; + } + return status; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_transport_utils_process_http_head_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri, + axis2_conf_ctx_t * conf_ctx, + axutil_hash_t * request_params) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axis2_engine_t *engine = NULL; + axis2_bool_t do_rest = AXIS2_TRUE; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + AXIS2_PARAM_CHECK(env->error, in_stream, AXIS2_FALSE); + AXIS2_PARAM_CHECK(env->error, out_stream, AXIS2_FALSE); + + AXIS2_PARAM_CHECK(env->error, request_uri, AXIS2_FALSE); + + axis2_msg_ctx_set_to(msg_ctx, env, axis2_endpoint_ref_create(env, request_uri)); + axis2_msg_ctx_set_server_side(msg_ctx, env, AXIS2_TRUE); + if(strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML)) + { + if(soap_action_header) + { + do_rest = AXIS2_FALSE; + } + } + else if(strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP)) + { + do_rest = AXIS2_FALSE; + } + + if(do_rest) + { + axis2_msg_ctx_set_doing_rest(msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_rest_http_method(msg_ctx, env, AXIS2_HTTP_HEAD); + } + else + { + axis2_msg_ctx_set_doing_rest(msg_ctx, env, AXIS2_FALSE); + } + if(AXIS2_SUCCESS != axis2_http_transport_utils_dispatch_and_verify(env, msg_ctx)) + { + return AXIS2_FALSE; + } + + soap_envelope = axis2_http_transport_utils_handle_media_type_url_encoded(env, msg_ctx, + request_params, AXIS2_HTTP_HEAD); + if(!soap_envelope) + { + return AXIS2_FALSE; + } + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, soap_envelope); + engine = axis2_engine_create(env, conf_ctx); + axis2_engine_receive(engine, env, msg_ctx); + return AXIS2_TRUE; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_transport_utils_process_http_get_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri, + axis2_conf_ctx_t * conf_ctx, + axutil_hash_t * request_params) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axis2_engine_t *engine = NULL; + axis2_bool_t do_rest = AXIS2_TRUE; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + AXIS2_PARAM_CHECK(env->error, in_stream, AXIS2_FALSE); + AXIS2_PARAM_CHECK(env->error, out_stream, AXIS2_FALSE); + AXIS2_PARAM_CHECK(env->error, request_uri, AXIS2_FALSE); + + axis2_msg_ctx_set_to(msg_ctx, env, axis2_endpoint_ref_create(env, request_uri)); + axis2_msg_ctx_set_server_side(msg_ctx, env, AXIS2_TRUE); + if(content_type && strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML)) + { + if(soap_action_header) + { + do_rest = AXIS2_FALSE; + } + } + else if(content_type && strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP)) + { + do_rest = AXIS2_FALSE; + } + + if(do_rest) + { + axis2_msg_ctx_set_doing_rest(msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_rest_http_method(msg_ctx, env, AXIS2_HTTP_GET); + } + else + { + axis2_msg_ctx_set_doing_rest(msg_ctx, env, AXIS2_FALSE); + } + + if(AXIS2_SUCCESS != axis2_http_transport_utils_dispatch_and_verify(env, msg_ctx)) + { + return AXIS2_FALSE; + } + soap_envelope = axis2_http_transport_utils_handle_media_type_url_encoded(env, msg_ctx, + request_params, AXIS2_HTTP_GET); + if(!soap_envelope) + { + return AXIS2_FALSE; + } + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, soap_envelope); + + engine = axis2_engine_create(env, conf_ctx); + axis2_engine_receive(engine, env, msg_ctx); + return AXIS2_TRUE; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_transport_utils_process_http_delete_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri, + axis2_conf_ctx_t * conf_ctx, + axutil_hash_t * request_params) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axis2_engine_t *engine = NULL; + axis2_bool_t do_rest = AXIS2_TRUE; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FALSE); + AXIS2_PARAM_CHECK(env->error, in_stream, AXIS2_FALSE); + AXIS2_PARAM_CHECK(env->error, out_stream, AXIS2_FALSE); + AXIS2_PARAM_CHECK(env->error, request_uri, AXIS2_FALSE); + + axis2_msg_ctx_set_to(msg_ctx, env, axis2_endpoint_ref_create(env, request_uri)); + axis2_msg_ctx_set_server_side(msg_ctx, env, AXIS2_TRUE); + if(strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML)) + { + if(soap_action_header) + { + do_rest = AXIS2_FALSE; + } + } + else if(strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP)) + { + do_rest = AXIS2_FALSE; + } + + if(do_rest) + { + axis2_msg_ctx_set_doing_rest(msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_rest_http_method(msg_ctx, env, AXIS2_HTTP_DELETE); + } + else + { + axis2_msg_ctx_set_doing_rest(msg_ctx, env, AXIS2_FALSE); + } + + soap_envelope = axis2_http_transport_utils_handle_media_type_url_encoded(env, msg_ctx, + request_params, AXIS2_HTTP_DELETE); + if(!soap_envelope) + { + return AXIS2_FALSE; + } + + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, soap_envelope); + + if(AXIS2_SUCCESS != axis2_http_transport_utils_dispatch_and_verify(env, msg_ctx)) + { + return AXIS2_FALSE; + } + engine = axis2_engine_create(env, conf_ctx); + axis2_engine_receive(engine, env, msg_ctx); + return AXIS2_TRUE; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_transport_utils_do_write_mtom( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + return (axis2_msg_ctx_get_doing_mtom(msg_ctx, env)); +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axis2_http_transport_utils_get_request_params( + const axutil_env_t * env, + axis2_char_t * request_uri) +{ + + axis2_char_t *query_str = NULL; + axis2_char_t *tmp = strchr(request_uri, AXIS2_Q_MARK); + axis2_char_t *tmp2 = NULL; + axis2_char_t *tmp_name = NULL; + axis2_char_t *tmp_value = NULL; + axutil_hash_t *ret = NULL; + + AXIS2_PARAM_CHECK(env->error, request_uri, NULL); + + if(!tmp || AXIS2_ESC_NULL == *(tmp + 1)) + { + return NULL; + } + query_str = axutil_strdup(env, tmp + 1); + + for(tmp2 = tmp = query_str; *tmp != AXIS2_ESC_NULL; ++tmp) + { + if(AXIS2_EQ == *tmp) + { + *tmp = AXIS2_ESC_NULL; + tmp_name = axutil_strdup(env, tmp2); + axis2_http_transport_utils_strdecode(env, tmp_name, tmp_name); + tmp2 = tmp + 1; + } + if(AXIS2_AND == *tmp) + { + *tmp = AXIS2_ESC_NULL; + tmp_value = axutil_strdup(env, tmp2); + axis2_http_transport_utils_strdecode(env, tmp_value, tmp_value); + tmp2 = tmp + 1; + } + if(tmp_name && NULL != tmp_value) + { + if(!ret) + { + ret = axutil_hash_make(env); + } + axutil_hash_set(ret, tmp_name, AXIS2_HASH_KEY_STRING, tmp_value); + tmp_name = NULL; + tmp_value = NULL; + } + } + if(tmp_name && AXIS2_ESC_NULL != *tmp2) + { + if(!ret) + { + ret = axutil_hash_make(env); + } + tmp_value = axutil_strdup(env, tmp2); + axis2_http_transport_utils_strdecode(env, tmp_value, tmp_value); + axutil_hash_set(ret, tmp_name, AXIS2_HASH_KEY_STRING, tmp_value); + } + + return ret; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_transport_utils_strdecode( + const axutil_env_t * env, + axis2_char_t * dest, + axis2_char_t * src) +{ + AXIS2_PARAM_CHECK(env->error, dest, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, src, AXIS2_FAILURE); + + for(; *src != AXIS2_ESC_NULL; ++dest, ++src) + { + if(src[0] == AXIS2_PERCENT && isxdigit((int)src[1]) && isxdigit((int)src[2])) + { + *dest = (axis2_char_t)(axis2_http_transport_utils_hexit(src[1]) * 16 + + axis2_http_transport_utils_hexit(src[2])); + /* We are sure that the conversion is valid */ + src += 2; + } + else + { + *dest = *src; + } + } + *dest = AXIS2_ESC_NULL; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_http_transport_utils_hexit( + axis2_char_t c) +{ + if(c >= '0' && c <= '9') + { + return c - '0'; + } + if(c >= 'a' && c <= 'f') + { + return c - 'a' + 10; + } + if(c >= 'A' && c <= 'F') + { + return c - 'A' + 10; + } + return 0; /* shouldn't happen, we're guarded by isxdigit() */ +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_not_found( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + return AXIS2_HTTP_NOT_FOUND; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_not_implemented( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + return AXIS2_HTTP_NOT_IMPLEMENTED; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_internal_server_error( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + return AXIS2_HTTP_INTERNAL_SERVER_ERROR; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_method_not_allowed( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + return AXIS2_HTTP_METHOD_NOT_ALLOWED; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_not_acceptable( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + return AXIS2_HTTP_NOT_ACCEPTABLE; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_bad_request( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + return AXIS2_HTTP_BAD_REQUEST; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_request_timeout( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + return AXIS2_HTTP_REQUEST_TIMEOUT; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_conflict( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + return AXIS2_HTTP_CONFLICT; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_gone( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + return AXIS2_HTTP_GONE; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_precondition_failed( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + return AXIS2_HTTP_PRECONDITION_FAILED; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_request_entity_too_large( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + return AXIS2_HTTP_TOO_LARGE; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_service_unavailable( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + return AXIS2_HTTP_SERVICE_UNAVILABLE; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_services_html( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + axutil_hash_t *services_map = NULL; + axutil_hash_t *errorneous_svc_map = NULL; + axis2_char_t *ret = NULL; + axis2_char_t *tmp2 = (axis2_char_t *)"

Deployed Services

"; + axutil_hash_index_t *hi = NULL; + axis2_bool_t svcs_exists = AXIS2_FALSE; + axis2_conf_t *conf = NULL; + AXIS2_PARAM_CHECK(env->error, conf_ctx, NULL); + + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + services_map = axis2_conf_get_all_svcs(conf, env); + errorneous_svc_map = axis2_conf_get_all_faulty_svcs(conf, env); + if(services_map && 0 != axutil_hash_count(services_map)) + { + void *service = NULL; + axis2_char_t *sname = NULL; + axutil_hash_t *ops = NULL; + svcs_exists = AXIS2_TRUE; + + for(hi = axutil_hash_first(services_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &service); + sname = axutil_qname_get_localpart(axis2_svc_get_qname(((axis2_svc_t *)service), env), + env); + ret = axutil_stracat(env, tmp2, "

"); + tmp2 = ret; + ret = axutil_stracat(env, tmp2, sname); + AXIS2_FREE(env->allocator, tmp2); + tmp2 = ret; + ret = axutil_stracat(env, tmp2, "

"); + tmp2 = ret; + ret = axutil_stracat(env, tmp2, "

"); + tmp2 = ret; + + /** + *setting services description */ + ret = axutil_stracat(env, tmp2, axis2_svc_get_svc_desc((axis2_svc_t *)service, env)); + tmp2 = ret; + ret = axutil_stracat(env, tmp2, "

"); + tmp2 = ret; + ops = axis2_svc_get_all_ops(((axis2_svc_t *)service), env); + if(ops && 0 != axutil_hash_count(ops)) + { + axutil_hash_index_t *hi2 = NULL; + void *op = NULL; + axis2_char_t *oname = NULL; + + ret = axutil_stracat(env, tmp2, "Available Operations
    "); + AXIS2_FREE(env->allocator, tmp2); + tmp2 = ret; + for(hi2 = axutil_hash_first(ops, env); hi2; hi2 = axutil_hash_next(env, hi2)) + { + axutil_hash_this(hi2, NULL, NULL, &op); + oname = axutil_qname_get_localpart(axis2_op_get_qname(((axis2_op_t *)op), env), + env); + ret = axutil_stracat(env, tmp2, "
  • "); + AXIS2_FREE(env->allocator, tmp2); + tmp2 = ret; + + ret = axutil_stracat(env, tmp2, oname); + AXIS2_FREE(env->allocator, tmp2); + tmp2 = ret; + ret = axutil_stracat(env, tmp2, "
  • "); + AXIS2_FREE(env->allocator, tmp2); + tmp2 = ret; + } + ret = axutil_stracat(env, tmp2, "
"); + AXIS2_FREE(env->allocator, tmp2); + tmp2 = ret; + } + else + { + ret = axutil_stracat(env, tmp2, "No operations Available"); + tmp2 = ret; + } + } + } + + if(errorneous_svc_map && 0 != axutil_hash_count(errorneous_svc_map)) + { + void *fsname = NULL; + svcs_exists = AXIS2_TRUE; + ret = axutil_stracat(env, tmp2, + "

Faulty \ + Services

"); + AXIS2_FREE(env->allocator, tmp2); + tmp2 = ret; + + for(hi = axutil_hash_first(errorneous_svc_map, env); hi; axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, (const void **)&fsname, NULL, NULL); + ret = axutil_stracat(env, tmp2, "

"); + AXIS2_FREE(env->allocator, tmp2); + tmp2 = ret; + ret = axutil_stracat(env, tmp2, (axis2_char_t *)fsname); + AXIS2_FREE(env->allocator, tmp2); + tmp2 = ret; + ret = axutil_stracat(env, tmp2, "

"); + AXIS2_FREE(env->allocator, tmp2); + tmp2 = ret; + } + } + if(AXIS2_FALSE == svcs_exists) + { + ret = axutil_strdup(env, "

There are no services deployed

"); + } + ret = axutil_stracat(env, "Axis2C :: Services" + "", tmp2); + tmp2 = ret; + ret = axutil_stracat(env, tmp2, "\r\n"); + + return ret; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_services_static_wsdl( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_char_t * request_url) +{ + axis2_char_t *wsdl_string = NULL; + axis2_char_t *wsdl_path = NULL; + axis2_char_t **url_tok = NULL; + unsigned int len = 0; + axis2_char_t *svc_name = NULL; + axis2_conf_t *conf = NULL; + axutil_hash_t *services_map = NULL; + axutil_hash_index_t *hi = NULL; + + AXIS2_PARAM_CHECK(env->error, conf_ctx, NULL); + AXIS2_PARAM_CHECK(env->error, request_url, NULL); + + url_tok = axutil_parse_request_url_for_svc_and_op(env, request_url); + if(url_tok[0]) + { + len = (int)strlen(url_tok[0]); + /* We are sure that the difference lies within the int range */ + url_tok[0][len - 5] = 0; + svc_name = url_tok[0]; + } + + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + services_map = axis2_conf_get_all_svcs(conf, env); + + if(services_map && 0 != axutil_hash_count(services_map)) + { + void *service = NULL; + axis2_char_t *sname = NULL; + + for(hi = axutil_hash_first(services_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, NULL, NULL, &service); + sname = axutil_qname_get_localpart(axis2_svc_get_qname(((axis2_svc_t *)service), env), + env); + if(!axutil_strcmp(svc_name, sname)) + { + wsdl_path = (axis2_char_t *)axutil_strdup(env, axis2_svc_get_svc_wsdl_path( + (axis2_svc_t *)service, env)); + if(!wsdl_path) + { + wsdl_path = axutil_strcat(env, axis2_svc_get_svc_folder_path( + (axis2_svc_t *)service, env), AXIS2_PATH_SEP_STR, svc_name, ".wsdl", NULL); + } + break; + } + + } + } + + if(wsdl_path) + { + FILE *wsdl_file = NULL; + axis2_char_t *content = NULL; + int c; + int size = AXIS2_FILE_READ_SIZE; + axis2_char_t *tmp; + int i = 0; + + content = (axis2_char_t *)AXIS2_MALLOC(env->allocator, size); + wsdl_file = fopen(wsdl_path, "r"); + if(wsdl_file) + { + c = fgetc(wsdl_file); + while(c != EOF) + { + if(i >= size) + { + size = size * 3; + tmp = (axis2_char_t *)AXIS2_MALLOC(env->allocator, size); + memcpy(tmp, content, i); + AXIS2_FREE(env->allocator, content); + content = tmp; + } + content[i++] = (axis2_char_t)c; + c = fgetc(wsdl_file); + } + content[i] = AXIS2_ESC_NULL; + wsdl_string = (axis2_char_t *)content; + fclose(wsdl_file); + } + + AXIS2_FREE(env->allocator, wsdl_path); + } + else + { + wsdl_string = axutil_strdup(env, "Unable to retrieve wsdl for this service"); + } + + return wsdl_string; +} + +AXIS2_EXTERN axutil_string_t *AXIS2_CALL +axis2_http_transport_utils_get_charset_enc( + const axutil_env_t * env, + const axis2_char_t * content_type) +{ + axis2_char_t *tmp = NULL; + axis2_char_t *tmp_content_type = NULL; + axis2_char_t *tmp2 = NULL; + axutil_string_t *str = NULL; + + AXIS2_PARAM_CHECK(env->error, content_type, NULL); + + tmp_content_type = (axis2_char_t *)content_type; + if(!tmp_content_type) + { + return axutil_string_create_const(env, + (axis2_char_t **)&AXIS2_TRANS_UTIL_DEFAULT_CHAR_ENCODING); + } + + tmp = strstr(tmp_content_type, AXIS2_HTTP_CHAR_SET_ENCODING); + + if(tmp) + { + tmp = strchr(tmp, AXIS2_EQ); + if(tmp) + { + tmp2 = strchr(tmp, AXIS2_SEMI_COLON); + if(!tmp2) + { + tmp2 = tmp + strlen(tmp); + } + } + + if(tmp2) + { + if('\'' == *(tmp2 - sizeof(axis2_char_t)) || '\"' == *(tmp2 - sizeof(axis2_char_t))) + { + tmp2 -= sizeof(axis2_char_t); + } + *tmp2 = AXIS2_ESC_NULL; + } + } + + if(tmp) + { + /* Following formats are acceptable + * charset="UTF-8" + * charser='UTF-8' + * charset=UTF-8 + * But for our requirements charset we get should be UTF-8 + */ + if(AXIS2_ESC_SINGLE_QUOTE == *(tmp + sizeof(axis2_char_t)) || AXIS2_ESC_DOUBLE_QUOTE + == *(tmp + sizeof(axis2_char_t))) + { + tmp += 2 * sizeof(axis2_char_t); + } + else + { + tmp += sizeof(axis2_char_t); + } + } + + if(tmp) + { + str = axutil_string_create(env, tmp); + } + else + { + str = axutil_string_create_const(env, + (axis2_char_t **)&AXIS2_TRANS_UTIL_DEFAULT_CHAR_ENCODING); + } + return str; +} + +int AXIS2_CALL +axis2_http_transport_utils_on_data_request( + char *buffer, + int size, + void *ctx) +{ + const axutil_env_t *env = NULL; + int len = -1; + axis2_callback_info_t *cb_ctx = (axis2_callback_info_t *)ctx; + + if(!buffer || !ctx) + { + return 0; + } + env = ((axis2_callback_info_t *)ctx)->env; + if(cb_ctx->unread_len <= 0 && -1 != cb_ctx->content_length) + { + return 0; + } + if(cb_ctx->chunked_stream) + { + --size; + /* reserve space to insert trailing null */ + len = axutil_http_chunked_stream_read(cb_ctx->chunked_stream, env, buffer, size); + if(len >= 0) + { + buffer[len] = AXIS2_ESC_NULL; + } + } + else + { + axutil_stream_t *in_stream = NULL; + in_stream = (axutil_stream_t *)((axis2_callback_info_t *)ctx)->in_stream; + --size; /* reserve space to insert trailing null */ + len = axutil_stream_read(in_stream, env, buffer, size); + if(len > 0) + { + buffer[len] = AXIS2_ESC_NULL; + ((axis2_callback_info_t *)ctx)->unread_len -= len; + } + else if(len == 0) + { + ((axis2_callback_info_t *)ctx)->unread_len = 0; + } + } + return len; +} + +AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL +axis2_http_transport_utils_create_soap_msg( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + const axis2_char_t * soap_ns_uri) +{ + axis2_op_ctx_t *op_ctx = NULL; + const axis2_char_t *char_set_enc = NULL; + axis2_char_t *content_type = NULL; + axutil_stream_t *in_stream = NULL; + axis2_callback_info_t *callback_ctx = NULL; + axis2_char_t *trans_enc = NULL; + int *content_length = NULL; + axutil_property_t *property = NULL; + axutil_hash_t *binary_data_map = NULL; + axiom_soap_envelope_t *soap_envelope = NULL; + axutil_stream_t *stream = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + AXIS2_PARAM_CHECK(env->error, soap_ns_uri, NULL); + + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_TRANSPORT_IN); + if(property) + { + in_stream = axutil_property_get_value(property, env); + property = NULL; + } + callback_ctx = AXIS2_MALLOC(env->allocator, sizeof(axis2_callback_info_t)); + /* Note: the memory created above is freed in xml reader free function + as this is passed on to the reader */ + if(!callback_ctx) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + callback_ctx->in_stream = in_stream; + callback_ctx->env = env; + callback_ctx->content_length = -1; + callback_ctx->unread_len = -1; + callback_ctx->chunked_stream = NULL; + + property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_HTTP_HEADER_CONTENT_LENGTH); + if(property) + { + content_length = axutil_property_get_value(property, env); + property = NULL; + } + + if(content_length) + { + callback_ctx->content_length = *content_length; + callback_ctx->unread_len = *content_length; + } + + if(!in_stream) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NULL_IN_STREAM_IN_MSG_CTX, AXIS2_FAILURE); + AXIS2_FREE(env->allocator, callback_ctx); + return NULL; + } + + trans_enc = axis2_msg_ctx_get_transfer_encoding(msg_ctx, env); + + if(trans_enc && 0 == axutil_strcmp(trans_enc, AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED)) + { + callback_ctx->chunked_stream = axutil_http_chunked_stream_create(env, in_stream); + if(!callback_ctx->chunked_stream) + { + return NULL; + } + } + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + if(op_ctx) + { + axis2_ctx_t *ctx = axis2_op_ctx_get_base(op_ctx, env); + if(ctx) + { + property = axis2_ctx_get_property(ctx, env, AXIS2_CHARACTER_SET_ENCODING); + if(property) + { + char_set_enc = axutil_property_get_value(property, env); + property = NULL; + } + property = axis2_ctx_get_property(ctx, env, MTOM_RECIVED_CONTENT_TYPE); + if(property) + { + content_type = axutil_property_get_value(property, env); + property = NULL; + } + + } + } + + if(!char_set_enc) + { + char_set_enc = AXIS2_DEFAULT_CHAR_SET_ENCODING; + } + if(content_type) + { + axis2_char_t *mime_boundary = NULL; + axis2_msg_ctx_set_doing_mtom(msg_ctx, env, AXIS2_TRUE); + /* get mime boundry */ + mime_boundary = axis2_http_transport_utils_get_value_from_content_type(env, content_type, + AXIS2_HTTP_HEADER_CONTENT_TYPE_MIME_BOUNDARY); + + if(mime_boundary) + { + axiom_mime_parser_t *mime_parser = NULL; + int soap_body_len = 0; + axis2_char_t *soap_body_str = NULL; + axutil_param_t *buffer_size_param = NULL; + axutil_param_t *max_buffers_param = NULL; + axutil_param_t *attachment_dir_param = NULL; + axutil_param_t *callback_name_param = NULL; + axis2_char_t *value_size = NULL; + axis2_char_t *value_num = NULL; + axis2_char_t *value_dir = NULL; + axis2_char_t *value_callback = NULL; + int size = 0; + int num = 0; + + mime_parser = axiom_mime_parser_create(env); + + /* Following are the parameters in the axis2.xml regarding MTOM */ + + buffer_size_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_MTOM_BUFFER_SIZE); + if(buffer_size_param) + { + value_size = (axis2_char_t *)axutil_param_get_value(buffer_size_param, env); + + if(value_size) + { + size = atoi(value_size); + axiom_mime_parser_set_buffer_size(mime_parser, env, size); + } + } + + max_buffers_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_MTOM_MAX_BUFFERS); + if(max_buffers_param) + { + value_num = (axis2_char_t *)axutil_param_get_value(max_buffers_param, env); + if(value_num) + { + num = atoi(value_num); + axiom_mime_parser_set_max_buffers(mime_parser, env, num); + } + } + + callback_name_param = axis2_msg_ctx_get_parameter(msg_ctx, env, + AXIS2_MTOM_CACHING_CALLBACK); + if(callback_name_param) + { + value_callback = (axis2_char_t *)axutil_param_get_value(callback_name_param, env); + if(value_callback) + { + axiom_mime_parser_set_caching_callback_name(mime_parser, env, value_callback); + } + } + + attachment_dir_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_ATTACHMENT_DIR); + if(attachment_dir_param) + { + value_dir = (axis2_char_t *)axutil_param_get_value(attachment_dir_param, env); + if(value_dir) + { + axiom_mime_parser_set_attachment_dir(mime_parser, env, value_dir); + } + } + + if(mime_parser) + { + if(axiom_mime_parser_parse_for_soap(mime_parser, env, + axis2_http_transport_utils_on_data_request, (void *)callback_ctx, mime_boundary) + == AXIS2_FAILURE) + { + return NULL; + } + + binary_data_map = axiom_mime_parser_parse_for_attachments(mime_parser, env, + axis2_http_transport_utils_on_data_request, (void *)callback_ctx, + mime_boundary, NULL); + if(!binary_data_map) + { + return NULL; + } + + if(!binary_data_map) + { + return NULL; + } + + soap_body_len = (int)axiom_mime_parser_get_soap_body_len(mime_parser, env); + soap_body_str = axiom_mime_parser_get_soap_body_str(mime_parser, env); + } + + if(callback_ctx->chunked_stream) + { + axutil_http_chunked_stream_free(callback_ctx->chunked_stream, env); + callback_ctx->chunked_stream = NULL; + } + + stream = axutil_stream_create_basic(env); + if(stream) + { + axutil_stream_write(stream, env, soap_body_str, soap_body_len); + callback_ctx->in_stream = stream; + callback_ctx->chunked_stream = NULL; + callback_ctx->content_length = soap_body_len; + callback_ctx->unread_len = soap_body_len; + } + + axiom_mime_parser_free(mime_parser, env); + mime_parser = NULL; + if(mime_boundary) + { + AXIS2_FREE(env->allocator, mime_boundary); + } + + if(soap_body_str) + { + AXIS2_FREE(env->allocator, soap_body_str); + } + } + } + + if(AXIS2_TRUE != axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + { + axiom_xml_reader_t *xml_reader = NULL; + axiom_stax_builder_t *om_builder = NULL; + axiom_soap_builder_t *soap_builder = NULL; + + xml_reader = axiom_xml_reader_create_for_io(env, + axis2_http_transport_utils_on_data_request, NULL, (void *)callback_ctx, char_set_enc); + if(!xml_reader) + { + return NULL; + } + om_builder = axiom_stax_builder_create(env, xml_reader); + if(!om_builder) + { + axiom_xml_reader_free(xml_reader, env); + xml_reader = NULL; + return NULL; + } + soap_builder = axiom_soap_builder_create(env, om_builder, soap_ns_uri); + if(!soap_builder) + { + /* We should not be freeing om_builder here as it is done by + axiom_soap_builder_create in case of error - Samisa */ + om_builder = NULL; + xml_reader = NULL; + return NULL; + } + + soap_envelope = axiom_soap_builder_get_soap_envelope(soap_builder, env); + + if(binary_data_map) + { + axiom_soap_builder_set_mime_body_parts(soap_builder, env, binary_data_map); + } + + if(soap_envelope) + { + /* hack to get around MTOM problem */ + axiom_soap_body_t *soap_body = axiom_soap_envelope_get_body(soap_envelope, env); + + if(soap_body) + { + axiom_soap_body_has_fault(soap_body, env); + } + } + if(stream) + { + axutil_stream_free(stream, env); + callback_ctx->in_stream = NULL; + } + if(callback_ctx->chunked_stream) + { + axutil_http_chunked_stream_free(callback_ctx->chunked_stream, env); + callback_ctx->chunked_stream = NULL; + } + + } + else + { + /* REST processing */ + axiom_xml_reader_t *xml_reader = NULL; + axiom_stax_builder_t *om_builder = NULL; + axiom_soap_body_t *def_body = NULL; + axiom_document_t *om_doc = NULL; + axiom_node_t *root_node = NULL; + + xml_reader = axiom_xml_reader_create_for_io(env, + axis2_http_transport_utils_on_data_request, NULL, (void *)callback_ctx, char_set_enc); + if(!xml_reader) + { + return NULL; + } + om_builder = axiom_stax_builder_create(env, xml_reader); + if(!om_builder) + { + axiom_xml_reader_free(xml_reader, env); + xml_reader = NULL; + return NULL; + } + soap_envelope = axiom_soap_envelope_create_default_soap_envelope(env, AXIOM_SOAP11); + def_body = axiom_soap_envelope_get_body(soap_envelope, env); + om_doc = axiom_stax_builder_get_document(om_builder, env); + root_node = axiom_document_build_all(om_doc, env); + axiom_soap_body_add_child(def_body, env, root_node); + axiom_stax_builder_free_self(om_builder, env); + } + + return soap_envelope; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_value_from_content_type( + const axutil_env_t * env, + const axis2_char_t * content_type, + const axis2_char_t * key) +{ + axis2_char_t *tmp = NULL; + axis2_char_t *tmp_content_type = NULL; + axis2_char_t *tmp2 = NULL; + + AXIS2_PARAM_CHECK(env->error, content_type, NULL); + AXIS2_PARAM_CHECK(env->error, key, NULL); + + tmp_content_type = axutil_strdup(env, content_type); + if(!tmp_content_type) + { + return NULL; + } + tmp = strstr(tmp_content_type, key); + if(!tmp) + { + AXIS2_FREE(env->allocator, tmp_content_type); + return NULL; + } + + tmp = strchr(tmp, AXIS2_EQ); + tmp2 = strchr(tmp, AXIS2_SEMI_COLON); + + if(tmp2) + { + *tmp2 = AXIS2_ESC_NULL; + } + if(!tmp) + { + AXIS2_FREE(env->allocator, tmp_content_type); + return NULL; + } + + tmp2 = axutil_strdup(env, tmp + 1); + + AXIS2_FREE(env->allocator, tmp_content_type); + if(*tmp2 == AXIS2_DOUBLE_QUOTE) + { + tmp = tmp2; + tmp2 = axutil_strdup(env, tmp + 1); + tmp2[strlen(tmp2) - 1] = AXIS2_ESC_NULL; + if(tmp) + { + AXIS2_FREE(env->allocator, tmp); + tmp = NULL; + } + + } + /* handle XOP */ + if(*tmp2 == AXIS2_B_SLASH && *(tmp2 + 1) == '\"') + { + tmp = tmp2; + tmp2 = axutil_strdup(env, tmp + 2); + tmp2[strlen(tmp2) - 3] = AXIS2_ESC_NULL; + if(tmp) + { + AXIS2_FREE(env->allocator, tmp); + tmp = NULL; + } + } + return tmp2; +} + +AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL +axis2_http_transport_utils_handle_media_type_url_encoded( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_hash_t * param_map, + axis2_char_t * method) +{ + axiom_soap_envelope_t *soap_env = NULL; + axiom_soap_body_t *soap_body = NULL; + axiom_element_t *body_child = NULL; + axiom_node_t *body_child_node = NULL; + axiom_node_t *body_element_node = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, NULL); + AXIS2_PARAM_CHECK(env->error, method, NULL); + + soap_env = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + + if(!soap_env) + { + soap_env = axiom_soap_envelope_create_default_soap_envelope(env, AXIOM_SOAP11); + } + soap_body = axiom_soap_envelope_get_body(soap_env, env); + if(!soap_body) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL, AXIS2_FAILURE); + return NULL; + } + + body_element_node = axiom_soap_body_get_base_node(soap_body, env); + + if(body_element_node) + { + body_child_node = axiom_node_get_first_child(body_element_node, env); + } + + if(!body_child_node) + { + if(!axis2_msg_ctx_get_op(msg_ctx, env)) + { + return NULL; + } + body_child = axiom_element_create_with_qname(env, NULL, axis2_op_get_qname( + axis2_msg_ctx_get_op(msg_ctx, env), env), &body_child_node); + axiom_soap_body_add_child(soap_body, env, body_child_node); + } + if(param_map) + { + axutil_hash_index_t *hi = NULL; + for(hi = axutil_hash_first(param_map, env); hi; hi = axutil_hash_next(env, hi)) + { + void *name = NULL; + void *value = NULL; + axiom_node_t *node = NULL; + axiom_element_t *element = NULL; + + axutil_hash_this(hi, (const void **)&name, NULL, (void **)&value); + element = axiom_element_create(env, NULL, (axis2_char_t *)name, NULL, &node); + axiom_element_set_text(element, env, (axis2_char_t *)value, node); + axiom_node_add_child(body_child_node, env, node); + } + } + return soap_env; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_transport_utils_dispatch_and_verify( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_disp_t *rest_disp = NULL; + axis2_handler_t *handler = NULL; + + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + if(axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + { + rest_disp = axis2_rest_disp_create(env); + handler = axis2_disp_get_base(rest_disp, env); + axis2_handler_invoke(handler, env, msg_ctx); + + if(!axis2_msg_ctx_get_svc(msg_ctx, env) || !axis2_msg_ctx_get_op(msg_ctx, env)) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SVC_OR_OP_NOT_FOUND, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axis2_http_transport_utils_process_accept_headers( + const axutil_env_t *env, + axis2_char_t *accept_value) +{ + axutil_array_list_t *accept_field_list = NULL; + axutil_array_list_t *accept_record_list = NULL; + accept_field_list = axutil_tokenize(env, accept_value, ','); + if(accept_field_list && axutil_array_list_size(accept_field_list, env) > 0) + { + axis2_char_t *token = NULL; + accept_record_list = axutil_array_list_create(env, axutil_array_list_size( + accept_field_list, env)); + do + { + if(token) + { + axis2_http_accept_record_t *rec = NULL; + rec = axis2_http_accept_record_create(env, token); + if(rec) + { + axutil_array_list_add(accept_field_list, env, rec); + } + AXIS2_FREE(env->allocator, token); + } + token = (axis2_char_t *)axutil_array_list_remove(accept_field_list, env, 0); + } + while(token); + } + if(accept_record_list && axutil_array_list_size(accept_record_list, env) > 0) + { + return accept_record_list; + } + return NULL; +} + +int +axis2_http_transport_utils_check_status_code( + int status_code) +{ + int status = AXIS2_HTTP_RESPONSE_OK_CODE_VAL; + switch(status_code) + { + case AXIS2_HTTP_RESPONSE_CONTINUE_CODE_VAL: + status = AXIS2_HTTP_RESPONSE_CONTINUE_CODE_VAL; + break; + case AXIS2_HTTP_RESPONSE_ACK_CODE_VAL: + status = AXIS2_HTTP_RESPONSE_ACK_CODE_VAL; + break; + case AXIS2_HTTP_RESPONSE_MULTIPLE_CHOICES_CODE_VAL: + status = AXIS2_HTTP_RESPONSE_MULTIPLE_CHOICES_CODE_VAL; + break; + case AXIS2_HTTP_RESPONSE_MOVED_PERMANENTLY_CODE_VAL: + status = AXIS2_HTTP_RESPONSE_MULTIPLE_CHOICES_CODE_VAL; + break; + case AXIS2_HTTP_RESPONSE_SEE_OTHER_CODE_VAL: + status = AXIS2_HTTP_RESPONSE_SEE_OTHER_CODE_VAL; + break; + case AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_VAL: + status = AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_VAL; + break; + case AXIS2_HTTP_RESPONSE_TEMPORARY_REDIRECT_CODE_VAL: + status = AXIS2_HTTP_RESPONSE_TEMPORARY_REDIRECT_CODE_VAL; + break; + case AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL: + status = AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL; + break; + case AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL: + status = AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL; + break; + case AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL: + status = AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL; + break; + case AXIS2_HTTP_RESPONSE_GONE_CODE_VAL: + status = AXIS2_HTTP_RESPONSE_GONE_CODE_VAL; + break; + case AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL: + status = AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL; + break; + case AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL: + status = AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL; + break; + case AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL: + status = AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL; + break; + } + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_transport_utils_process_request( + const axutil_env_t *env, + axis2_conf_ctx_t *conf_ctx, + axis2_http_transport_in_t *request, + axis2_http_transport_out_t *response) +{ + axis2_status_t status = AXIS2_FAILURE; + axis2_msg_ctx_t *msg_ctx = NULL; + axutil_stream_t *out_stream = NULL; + axutil_string_t *soap_action = NULL; + axis2_bool_t processed = AXIS2_FALSE; + axis2_char_t *body_string = NULL; + axis2_char_t *ctx_uuid = NULL; + axis2_op_ctx_t *op_ctx = NULL; + axis2_char_t *peer_ip = NULL; + axutil_property_t *peer_property = NULL; + axis2_msg_ctx_t *out_msg_ctx = NULL; + axis2_msg_ctx_t **msg_ctx_map = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + AXIS2_PARAM_CHECK(env->error, request, AXIS2_CRITICAL_FAILURE); + AXIS2_PARAM_CHECK(env->error, request->request_uri, AXIS2_FALSE); + + if(!conf_ctx) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NULL_CONFIGURATION_CONTEXT, AXIS2_FAILURE); + return AXIS2_CRITICAL_FAILURE; + } + + if(!request->content_type) + { + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_PLAIN; + } + + /** creating the out stream */ + out_stream = axutil_stream_create_basic(env); + + if(request->transfer_encoding) + axis2_msg_ctx_set_transfer_encoding(request->msg_ctx, env, request->transfer_encoding); + + axis2_msg_ctx_set_server_side(request->msg_ctx, env, AXIS2_TRUE); + msg_ctx = request->msg_ctx; + peer_ip = request->remote_ip; + + if(peer_ip) + { + peer_property = axutil_property_create(env); + axutil_property_set_value(peer_property, env, axutil_strdup(env, peer_ip)); + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_SVR_PEER_IP_ADDR, peer_property); + } + + axis2_msg_ctx_set_transport_out_stream(msg_ctx, env, out_stream); + + ctx_uuid = axutil_uuid_gen(env); + if(ctx_uuid) + { + axutil_string_t *uuid_str = axutil_string_create_assume_ownership(env, &ctx_uuid); + axis2_msg_ctx_set_svc_grp_ctx_id(msg_ctx, env, uuid_str); + axutil_string_free(uuid_str, env); + } + + axis2_msg_ctx_set_out_transport_info(msg_ctx, env, + &(request->out_transport_info->out_transport)); + + if(request->accept_header) + { + axutil_array_list_t *accept_record_list = NULL; + accept_record_list = axis2_http_transport_utils_process_accept_headers(env, + request->accept_header); + if(accept_record_list && axutil_array_list_size(accept_record_list, env) > 0) + { + axis2_msg_ctx_set_http_accept_record_list(msg_ctx, env, accept_record_list); + } + } + if(request->accept_charset_header) + { + axutil_array_list_t *accept_charset_record_list = NULL; + accept_charset_record_list = axis2_http_transport_utils_process_accept_headers(env, + request->accept_charset_header); + if(accept_charset_record_list) + { + axis2_msg_ctx_set_http_accept_charset_record_list(msg_ctx, env, + accept_charset_record_list); + } + } + if(request->accept_language_header) + { + axutil_array_list_t *accept_language_record_list = NULL; + accept_language_record_list = axis2_http_transport_utils_process_accept_headers(env, + request->accept_language_header); + if(accept_language_record_list) + { + axis2_msg_ctx_set_http_accept_language_record_list(msg_ctx, env, + accept_language_record_list); + } + } + + if(request->soap_action) + { + soap_action = axutil_string_create(env, request->soap_action); + } + + if(request->request_method == AXIS2_HTTP_METHOD_GET || request->request_method + == AXIS2_HTTP_METHOD_DELETE || request->request_method == AXIS2_HTTP_METHOD_HEAD) + { + + if(request->request_method == AXIS2_HTTP_METHOD_DELETE) + { + processed = axis2_http_transport_utils_process_http_delete_request(env, + request->msg_ctx, request->in_stream, out_stream, request->content_type, + soap_action, request->request_uri, conf_ctx, + axis2_http_transport_utils_get_request_params(env, request->request_uri)); + } + else if(request->request_method == AXIS2_HTTP_METHOD_HEAD) + { + processed = axis2_http_transport_utils_process_http_head_request(env, request->msg_ctx, + request->in_stream, out_stream, request->content_type, soap_action, + request->request_uri, conf_ctx, axis2_http_transport_utils_get_request_params(env, + request->request_uri)); + } + else if(request->request_method == AXIS2_HTTP_METHOD_GET) + { + processed = axis2_http_transport_utils_process_http_get_request(env, request->msg_ctx, + request->in_stream, out_stream, request->content_type, soap_action, + request->request_uri, conf_ctx, axis2_http_transport_utils_get_request_params(env, + request->request_uri)); + } + if(AXIS2_FALSE == processed) + { + axis2_bool_t is_services_path = AXIS2_FALSE; + int msg_ctx_status_code = axis2_msg_ctx_get_status_code(msg_ctx, env); + if(request->request_method != AXIS2_HTTP_METHOD_DELETE && request->request_url_prefix) + { + axis2_char_t *temp = NULL; + temp = strstr(request->request_uri, request->request_url_prefix); + if(temp) + { + temp += strlen(request->request_url_prefix); + if(*temp == '/') + { + temp++; + } + if(!*temp || *temp == '?' || *temp == '#') + { + is_services_path = AXIS2_TRUE; + } + } + } + if(is_services_path) + { + body_string = axis2_http_transport_utils_get_services_html(env, conf_ctx); + response->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + response->http_status_code = AXIS2_HTTP_RESPONSE_OK_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_OK_CODE_NAME; + } + else if(AXIS2_HTTP_METHOD_DELETE != request->request_method) + { + axis2_char_t *wsdl = NULL; + wsdl = strstr(request->request_uri, AXIS2_REQUEST_WSDL); + if(wsdl) + { + body_string = axis2_http_transport_utils_get_services_static_wsdl(env, + conf_ctx, request->request_uri); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML; + response->http_status_code = AXIS2_HTTP_RESPONSE_OK_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_OK_CODE_NAME; + } + } + else if(env->error->error_number == AXIS2_ERROR_SVC_OR_OP_NOT_FOUND) + { + axutil_array_list_t *method_list = NULL; + int size = 0; + method_list = axis2_msg_ctx_get_supported_rest_http_methods(msg_ctx, env); + size = axutil_array_list_size(method_list, env); + + if(method_list && size) + { + /** 405 */ + body_string = axis2_http_transport_utils_get_method_not_allowed(env, conf_ctx); + + response->http_status_code = AXIS2_HTTP_RESPONSE_METHOD_NOT_ALLOWED_CODE_VAL; + response->http_status_code_name + = AXIS2_HTTP_RESPONSE_METHOD_NOT_ALLOWED_CODE_NAME; + } + else + { + /** 404 */ + body_string = axis2_http_transport_utils_get_not_found(env, conf_ctx); + response->http_status_code = AXIS2_HTTP_RESPONSE_NOT_FOUND_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_NOT_FOUND_CODE_NAME; + } + } + else if(msg_ctx_status_code == AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL) + { + /* 400, Bad Request */ + body_string = axis2_http_transport_utils_get_bad_request(env, conf_ctx); + response->http_status_code = AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_BAD_REQUEST_CODE_NAME; + + } + else if(msg_ctx_status_code == AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL) + { + /* 408, Request Timeout */ + body_string = axis2_http_transport_utils_get_request_timeout(env, conf_ctx); + response->http_status_code = AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_REQUEST_TIMEOUT_CODE_NAME; + } + else if(msg_ctx_status_code == AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL) + { + /* 409, Conflict Types */ + body_string = axis2_http_transport_utils_get_conflict(env, conf_ctx); + response->http_status_code = AXIS2_HTTP_RESPONSE_CONFLICT_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_CONFLICT_CODE_NAME; + } + else if(msg_ctx_status_code == AXIS2_HTTP_RESPONSE_GONE_CODE_VAL) + { + /* 410, Gone. Resource no longer available */ + body_string = axis2_http_transport_utils_get_gone(env, conf_ctx); + response->http_status_code = AXIS2_HTTP_RESPONSE_GONE_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_GONE_CODE_NAME; + + } + else if(msg_ctx_status_code == AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL) + { + /*410, Precondition for the url failed */ + body_string = axis2_http_transport_utils_get_precondition_failed(env, conf_ctx); + response->http_status_code = AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_PRECONDITION_FAILED_CODE_NAME; + + } + else if(msg_ctx_status_code == AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL) + { + /* 413, Request entity too large */ + body_string + = axis2_http_transport_utils_get_request_entity_too_large(env, conf_ctx); + response->http_status_code = AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_VAL; + response->http_status_code_name + = AXIS2_HTTP_RESPONSE_REQUEST_ENTITY_TOO_LARGE_CODE_NAME; + } + else if(msg_ctx_status_code == AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL) + { + /* 513, Service Unavailable */ + body_string = axis2_http_transport_utils_get_service_unavailable(env, conf_ctx); + response->http_status_code = AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_SERVICE_UNAVAILABLE_CODE_NAME; + } + else + { + /* 500, Internal Server Error */ + body_string = axis2_http_transport_utils_get_internal_server_error(env, conf_ctx); + response->http_status_code = AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_VAL; + response->http_status_code_name + = AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_NAME; + } + + if(body_string) + { + response->response_data = body_string; + response->response_data_length = axutil_strlen(body_string); + } + status = AXIS2_SUCCESS; + } + } + else if(AXIS2_HTTP_METHOD_POST == request->request_method || AXIS2_HTTP_METHOD_PUT + == request->request_method) + { + if(AXIS2_HTTP_METHOD_POST == request->request_method) + { + processed = axis2_http_transport_utils_process_http_post_request(env, request->msg_ctx, + request->in_stream, out_stream, request->content_type, request->content_length, + soap_action, request->request_uri); + } + else + { + processed = axis2_http_transport_utils_process_http_put_request(env, request->msg_ctx, + request->in_stream, out_stream, request->content_type, request->content_length, + soap_action, request->request_uri); + } + if(AXIS2_FAILURE == processed && (AXIS2_HTTP_METHOD_PUT == request->request_method + || axis2_msg_ctx_get_doing_rest(msg_ctx, env))) + { + + if(env->error->error_number == AXIS2_ERROR_SVC_OR_OP_NOT_FOUND) + { + axutil_array_list_t *method_list = NULL; + int size = 0; + method_list = axis2_msg_ctx_get_supported_rest_http_methods(msg_ctx, env); + size = axutil_array_list_size(method_list, env); + if(method_list && size) + { + /** 405 */ + body_string = axis2_http_transport_utils_get_method_not_allowed(env, conf_ctx); + response->http_status_code = AXIS2_HTTP_RESPONSE_METHOD_NOT_ALLOWED_CODE_VAL; + response->http_status_code_name + = AXIS2_HTTP_RESPONSE_METHOD_NOT_ALLOWED_CODE_NAME; + } + else + { + /** 404 */ + body_string = axis2_http_transport_utils_get_not_found(env, conf_ctx); + response->http_status_code = AXIS2_HTTP_RESPONSE_NOT_FOUND_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_NOT_FOUND_CODE_NAME; + } + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + } + else + { + /* 500, Internal Server Error */ + body_string = axis2_http_transport_utils_get_internal_server_error(env, conf_ctx); + response->http_status_code = AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_VAL; + response->http_status_code_name + = AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_NAME; + + } + + if(body_string) + { + response->response_data = body_string; + response->response_data_length = axutil_strlen(body_string); + } + status = AXIS2_SUCCESS; + } + else if(processed == AXIS2_FAILURE) + { + axis2_msg_ctx_t *fault_ctx = NULL; + axis2_char_t *fault_code = NULL; + axis2_engine_t *engine = axis2_engine_create(env, conf_ctx); + if(!engine) + { + /* Critical error, cannot proceed, send defaults document for 500 */ + return AXIS2_CRITICAL_FAILURE; + } + if(axis2_msg_ctx_get_is_soap_11(msg_ctx, env)) + { + fault_code = AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX ":" + AXIOM_SOAP11_FAULT_CODE_SENDER; + } + else + { + fault_code = AXIOM_SOAP_DEFAULT_NAMESPACE_PREFIX ":" + AXIOM_SOAP12_SOAP_FAULT_VALUE_SENDER; + } + fault_ctx = axis2_engine_create_fault_msg_ctx(engine, env, request->msg_ctx, + fault_code, axutil_error_get_message(env->error)); + + axis2_engine_send_fault(engine, env, fault_ctx); + if (out_stream) + { + response->response_data = axutil_stream_get_buffer(out_stream, env); + response->response_data_length = axutil_stream_get_len (out_stream, env); + } + /* In case of a SOAP Fault, we have to set the status to 500, but still return */ + status = AXIS2_SUCCESS; + response->http_status_code = AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_NAME; + } + } + else + { + response->response_data = axis2_http_transport_utils_get_not_implemented(env, conf_ctx); + request->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + + if (response->response_data) + { + response->response_data_length = axutil_strlen(response->response_data); + } + response->http_status_code = AXIS2_HTTP_RESPONSE_NOT_IMPLEMENTED_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_NOT_IMPLEMENTED_CODE_NAME; + status = AXIS2_SUCCESS; + } + + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + + if (op_ctx) + { + msg_ctx_map = axis2_op_ctx_get_msg_ctx_map(op_ctx, env); + out_msg_ctx = msg_ctx_map[AXIS2_WSDL_MESSAGE_LABEL_OUT]; + response->msg_ctx = out_msg_ctx; + } + + if (status == AXIS2_FAILURE) + { + axis2_bool_t do_rest = AXIS2_FALSE; + if (AXIS2_HTTP_METHOD_POST != request->request_method || + axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + { + do_rest = AXIS2_TRUE; + } + if ((request->accept_header || request->accept_charset_header || + request->accept_language_header) && do_rest) + { + axis2_char_t *content_type_header_value = NULL; + axis2_char_t *temp = NULL; + axis2_char_t *language_header_value = NULL; + + content_type_header_value = (axis2_char_t *) request->content_type; + language_header_value = axis2_msg_ctx_get_content_language(out_msg_ctx,env); + if (content_type_header_value) + { + temp = axutil_strdup(env, content_type_header_value); + } + if (temp) + { + axis2_char_t *content_type = NULL; + axis2_char_t *char_set = NULL; + axis2_char_t *temp2 = NULL; + + temp2 = strchr(temp, ';'); + if (temp2) + { + *temp2 = '\0'; + temp2++; + char_set = axutil_strcasestr(temp2, AXIS2_HTTP_CHAR_SET_ENCODING); + } + if (char_set) + { + char_set = axutil_strltrim(env, char_set, " \t="); + } + if (char_set) + { + temp2 = strchr(char_set, ';'); + } + if (temp2) + { + *temp2 = '\0'; + } + content_type = axutil_strtrim(env, temp, NULL); + + if (temp) + { + AXIS2_FREE(env->allocator, temp); + temp = NULL; + } + if (content_type && request->accept_header && + !axutil_strcasestr(request->accept_header, content_type)) + { + temp2 = strchr(content_type, '/'); + if (temp2) + { + *temp2 = '\0'; + temp = AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * ((int)strlen(content_type) + 3)); + if (!temp) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FALSE; + } + sprintf(temp, "%s/*", content_type); + if (!axutil_strcasestr(request->accept_header, temp) && + !strstr(request->accept_header, AXIS2_HTTP_HEADER_ACCEPT_ALL)) + { + response->response_data = + axis2_http_transport_utils_get_not_acceptable(env, conf_ctx); + response->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + if (response->response_data) + { + response->response_data_length = axutil_strlen(response->response_data); + } + response->http_status_code = AXIS2_HTTP_RESPONSE_NOT_ACCEPTABLE_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_NOT_IMPLEMENTED_CODE_NAME; + status = AXIS2_TRUE; + } + AXIS2_FREE(env->allocator, temp); + } + } + if (content_type) + { + AXIS2_FREE(env->allocator, content_type); + } + if (char_set && request->accept_charset_header && + !axutil_strcasestr(request->accept_charset_header , char_set)) + { + response->response_data = + axis2_http_transport_utils_get_not_acceptable(env, conf_ctx); + response->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + + if (response->response_data) + { + response->response_data_length= axutil_strlen(response->response_data); + } + status = AXIS2_SUCCESS; + response->http_status_code = AXIS2_HTTP_RESPONSE_NOT_ACCEPTABLE_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_NOT_ACCEPTABLE_CODE_NAME; + } + if (char_set) + { + AXIS2_FREE(env->allocator, char_set); + } + } + if (language_header_value) + { + if (request->accept_language_header && + !axutil_strcasestr(request->accept_language_header , language_header_value)) + { + response->response_data = + axis2_http_transport_utils_get_not_acceptable(env, conf_ctx); + response->content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_HTML; + if (response->response_data) + { + response->response_data_length = axutil_strlen(response->response_data); + } + response->http_status_code = AXIS2_HTTP_RESPONSE_NOT_ACCEPTABLE_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_NOT_ACCEPTABLE_CODE_NAME; + } + } + } + } + if (status == AXIS2_FAILURE) + { + axis2_bool_t do_rest = AXIS2_FALSE; + if (AXIS2_HTTP_METHOD_POST != request->request_method || + axis2_msg_ctx_get_doing_rest(msg_ctx, env)) + { + do_rest = AXIS2_TRUE; + } + if (op_ctx && axis2_op_ctx_get_response_written(op_ctx, env)) + { + if (do_rest) + { + if (out_msg_ctx) + { + int size = 0; + axutil_array_list_t *output_header_list = NULL; + output_header_list = axis2_msg_ctx_get_http_output_headers(out_msg_ctx, env); + if (output_header_list) + { + size = axutil_array_list_size(output_header_list, env); + response->output_headers = output_header_list; + } + + if (axis2_msg_ctx_get_status_code(out_msg_ctx, env)) + { + int status_code = axis2_msg_ctx_get_status_code(out_msg_ctx, env); + response->http_status_code = + axis2_http_transport_utils_check_status_code(status_code); + status = AXIS2_SUCCESS; + } + } + } + if (status == AXIS2_FAILURE) + { + status = AXIS2_SUCCESS; + if (out_stream) + { + response->response_data = axutil_stream_get_buffer(out_stream, env); + response->response_data_length = axutil_stream_get_len(out_stream, env); + response->http_status_code = AXIS2_HTTP_RESPONSE_OK_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_OK_CODE_NAME; + } + } + } + else if (op_ctx) + { + if (do_rest) + { + if (out_msg_ctx) + { + int size = 0; + axutil_array_list_t *output_header_list = NULL; + output_header_list = axis2_msg_ctx_get_http_output_headers(out_msg_ctx, env); + if (output_header_list) + { + size = axutil_array_list_size(output_header_list, env); + response->output_headers = output_header_list; + } + if (axis2_msg_ctx_get_no_content(out_msg_ctx, env)) + { + if (axis2_msg_ctx_get_status_code(out_msg_ctx, env)) + { + int status_code = axis2_msg_ctx_get_status_code(out_msg_ctx, env); + switch (status_code) + { + case AXIS2_HTTP_RESPONSE_RESET_CONTENT_CODE_VAL: + response->http_status_code = AXIS2_HTTP_RESPONSE_RESET_CONTENT_CODE_VAL; + break; + case AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_VAL: + response->http_status_code = AXIS2_HTTP_RESPONSE_NOT_MODIFIED_CODE_VAL; + break; + default: + response->http_status_code = AXIS2_HTTP_RESPONSE_NO_CONTENT_CODE_VAL; + break; + } + } + else + { + response->http_status_code = AXIS2_HTTP_RESPONSE_NO_CONTENT_CODE_VAL; + } + status = AXIS2_SUCCESS; + } + else if (axis2_msg_ctx_get_status_code(out_msg_ctx, env)) + { + int status_code = axis2_msg_ctx_get_status_code(out_msg_ctx, env); + response->http_status_code = + axis2_http_transport_utils_check_status_code(status_code); + status = AXIS2_SUCCESS; + } + } + } + if (status == AXIS2_FAILURE) + { + response->http_status_code = AXIS2_HTTP_RESPONSE_ACK_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_ACK_CODE_NAME; + status = AXIS2_SUCCESS; + } + } + else + { + status = AXIS2_SUCCESS; + response->http_status_code = AXIS2_HTTP_RESPONSE_ACK_CODE_VAL; + response->http_status_code_name = AXIS2_HTTP_RESPONSE_ACK_CODE_NAME; + } + } + axutil_string_free(soap_action, env); + msg_ctx = NULL; + + return status; +} + +/* This method takes an array_list as the input. It has items some + may be buffers and some may be files. This will send these part + one by one to the wire using the chunked stream.*/ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_http_transport_utils_send_mtom_message( + axutil_http_chunked_stream_t * chunked_stream, + const axutil_env_t * env, + axutil_array_list_t *mime_parts, + axis2_char_t *sending_callback_name) +{ + int i = 0; + axis2_status_t status = AXIS2_SUCCESS; + + for(i = 0; i < axutil_array_list_size(mime_parts, env); i++) + { + axiom_mime_part_t *mime_part = NULL; + mime_part = (axiom_mime_part_t *)axutil_array_list_get(mime_parts, env, i); + + /* If it is a buffer just write it to the wire. This includes mime_bounadaries, + * mime_headers and SOAP */ + if(mime_part->type == AXIOM_MIME_PART_BUFFER) + { + size_t written = 0; + while(written < mime_part->part_size) + { + int len = 0; + len = axutil_http_chunked_stream_write(chunked_stream, env, + mime_part->part + written, mime_part->part_size - written); + if(len == -1) + { + status = AXIS2_FAILURE; + break; + } + else + { + written += len; + } + } + } + + /* If it is a file we load a very little portion to memory and send it as chunked , + * we keep on doing this until we find the end of the file */ + else if(mime_part->type == AXIOM_MIME_PART_FILE) + { + FILE *f = NULL; + axis2_byte_t *output_buffer = NULL; + int output_buffer_size = 0; + + f = fopen(mime_part->file_name, "rb"); + if(!f) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error opening file %s for reading", + mime_part->file_name); + return AXIS2_FAILURE; + } + + /* If the part_size is less than the defined buffer size then + * from the first write to the wire we can send the file */ + if(mime_part->part_size > AXIS2_MTOM_OUTPUT_BUFFER_SIZE) + { + output_buffer_size = AXIS2_MTOM_OUTPUT_BUFFER_SIZE; + } + else + { + output_buffer_size = (int)mime_part->part_size; + } + + output_buffer = AXIS2_MALLOC(env->allocator, output_buffer_size * sizeof(axis2_char_t)); + + /*This is the method responsible for writing to the wire */ + status = axis2_http_transport_utils_send_attachment_using_file(env, chunked_stream, + f, output_buffer, output_buffer_size); + AXIS2_FREE(env->allocator, output_buffer); + fclose(f); + } + + /* if the callback is given, send data using callback */ + else if((mime_part->type) == AXIOM_MIME_PART_CALLBACK) + { + void *handler = NULL; + axiom_mtom_sending_callback_t *callback = NULL; + + handler = axis2_http_transport_utils_initiate_callback(env, sending_callback_name, + mime_part->user_param, &callback); + if(handler) + { + status = axis2_http_transport_utils_send_attachment_using_callback(env, + chunked_stream, callback, handler, mime_part->user_param); + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "MTOM Sending Callback loading failed"); + status = AXIS2_FAILURE; + } + + if(callback) + { + axutil_param_t *param = NULL; + param = callback->param; + AXIOM_MTOM_SENDING_CALLBACK_FREE(callback, env); + if(param) + { + axutil_param_free(param, env); + } + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Unknown mime_part."); + status = AXIS2_FAILURE; + } + + if(status != AXIS2_SUCCESS) + { + break; + } + } + + if(status == AXIS2_SUCCESS) + { + /* send the end of chunk */ + status = axutil_http_chunked_stream_write_last_chunk(chunked_stream, env); + } + + return status; +} + +static axis2_status_t +axis2_http_transport_utils_send_attachment_using_file( + const axutil_env_t * env, + axutil_http_chunked_stream_t *chunked_stream, + FILE *fp, + axis2_byte_t *buffer, + int buffer_size) +{ + /*We do not load the whole file to memory. Just load a buffer_size portion + *and send it. Keep on doing this until the end of file */ + do + { + int written = 0; + int count = (int)fread(buffer, 1, buffer_size, fp); + if(ferror(fp) || (count < 0)) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Error in reading file containing the attachment"); + return AXIS2_FAILURE; + } + + /* count == 0 is a valid case. If the file size is multiple of buffer_size, then last read + * will have count == 0 + */ + + /*Writing the part we loaded to memory to the wire*/ + while(written < count) + { + int len = axutil_http_chunked_stream_write(chunked_stream, env, + buffer + written, count - written); + if(len == -1) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "error in writing file to stream"); + return AXIS2_FAILURE; + } + + written += len; + } + } + while(!feof(fp)); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_transport_utils_destroy_mime_parts( + axutil_array_list_t *mime_parts, + const axutil_env_t *env) +{ + if (mime_parts) + { + int i = 0; + for (i = 0; i < axutil_array_list_size(mime_parts, env); i++) + { + axiom_mime_part_t *mime_part = NULL; + mime_part = (axiom_mime_part_t *) + axutil_array_list_get(mime_parts, env, i); + if (mime_part) + { + axiom_mime_part_free(mime_part, env); + } + } + axutil_array_list_free(mime_parts, env); + } +} + +AXIS2_EXTERN void *AXIS2_CALL +axis2_http_transport_utils_initiate_callback( + const axutil_env_t *env, + axis2_char_t *callback_name, + void *user_param, + axiom_mtom_sending_callback_t **callback) +{ + axutil_dll_desc_t *dll_desc = NULL; + axutil_param_t *impl_info_param = NULL; + void *ptr = NULL; + + if(!callback_name) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "invalid callback name given"); + return NULL; + } + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Trying to load module = %s", callback_name); + + dll_desc = axutil_dll_desc_create(env); + axutil_dll_desc_set_name(dll_desc, env, callback_name); + impl_info_param = axutil_param_create(env, NULL, dll_desc); + axutil_param_set_value_free(impl_info_param, env, axutil_dll_desc_free_void_arg); + axutil_class_loader_init(env); + ptr = axutil_class_loader_create_dll(env, impl_info_param); + if (!ptr) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Unable to load the module %s.", callback_name); + return NULL; + } + + *callback = (axiom_mtom_sending_callback_t *)ptr; + (*callback)->param = impl_info_param; + + return AXIOM_MTOM_SENDING_CALLBACK_INIT_HANDLER(*callback, env, user_param); +} + +static axis2_status_t +axis2_http_transport_utils_send_attachment_using_callback( + const axutil_env_t * env, + axutil_http_chunked_stream_t *chunked_stream, + axiom_mtom_sending_callback_t *callback, + void *handler, + void *user_param) +{ + int count = 0; + axis2_status_t status = AXIS2_SUCCESS; + axis2_char_t *buffer = NULL; + + /* Keep on loading the data in a loop until all the data is sent */ + while((count = AXIOM_MTOM_SENDING_CALLBACK_LOAD_DATA(callback, env, handler, &buffer)) > 0) + { + int written = 0; + while(written < count) + { + int len = 0; + len = axutil_http_chunked_stream_write(chunked_stream, env, + buffer + written, count - written); + if(len == -1) + { + status = AXIS2_FAILURE; + break; + } + + written += len; + } + } + + status = AXIOM_MTOM_SENDING_CALLBACK_CLOSE_HANDLER(callback, env, handler) && status; + return status; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_http_transport_utils_is_callback_required( + const axutil_env_t *env, + axutil_array_list_t *mime_parts) +{ + int size = 0; + int i = 0; + axis2_bool_t is_required = AXIS2_FALSE; + + size = axutil_array_list_size(mime_parts, env); + for(i = 0; i < size; i++) + { + axiom_mime_part_t *mime_part = NULL; + mime_part = (axiom_mime_part_t *)axutil_array_list_get(mime_parts, env, i); + if(mime_part) + { + if(mime_part->type == AXIOM_MIME_PART_CALLBACK) + { + is_required = AXIS2_TRUE; + break; + } + } + } + + return is_required; +} + +static void +axis2_http_transport_utils_parse_session_str(const axutil_env_t *env, axis2_char_t *str, + axutil_hash_t *ht) +{ + while (*str) + { + axis2_char_t *next = axutil_strstr(str, ";"); + if (next) + { + axis2_char_t *key = NULL; + axis2_char_t *val = NULL; + + + /* Get key and value pairs */ + key = axis2_http_transport_utils_copy_key(env, str); + val = axis2_http_transport_utils_copy_value(env, str); + axutil_hash_set(ht, key, AXIS2_HASH_KEY_STRING, val); + + /* find next token */ + str = next + 1; + } + + } +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_session( + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx) +{ + axutil_hash_index_t *hi = NULL; + void *val = NULL; + const void *key = NULL; + axutil_hash_t *ht = NULL; + axis2_char_t *session_id = NULL; + axis2_char_t *time_str = NULL; + axis2_char_t *header_value = NULL; + axutil_date_time_t *expire_time = NULL; + axis2_char_t session_value[256]; + axis2_http_out_transport_info_t *out_info = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_http_transport_utils_get_session"); + ht = axis2_msg_ctx_get_property_value(msg_ctx, env, AXIS2_TRANSPORT_SESSION_TABLE); + if(!ht) + { + axis2_op_ctx_t *op_ctx = NULL; + axis2_msg_ctx_t *in_msg_ctx = NULL; + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + if(op_ctx) + { + in_msg_ctx = axis2_op_ctx_get_msg_ctx(op_ctx, env, AXIS2_WSDL_MESSAGE_LABEL_IN); + if(in_msg_ctx) + { + ht = axis2_msg_ctx_get_property_value(in_msg_ctx, env, + AXIS2_TRANSPORT_SESSION_TABLE); + } + } + if(!ht) + { + return NULL; + } + } + session_id = axutil_hash_get(ht, "id", AXIS2_HASH_KEY_STRING); + if(!session_id) + { + /* Generate session and set it in session table */ + session_id = axutil_uuid_gen(env); + axutil_hash_set(ht, axutil_strdup(env, "id"), AXIS2_HASH_KEY_STRING, axutil_strdup(env, + session_id)); + + /* Generate expire time and set it in session table */ + expire_time = axutil_date_time_create_with_offset(env, AXIS2_TRANSPORT_SESSION_EXPIRE_DURATION); + time_str = axutil_strdup(env, axutil_date_time_serialize_date_time(expire_time, env)); + axutil_date_time_free(expire_time, env); + axutil_hash_set(ht, axutil_strdup(env, "expires"), AXIS2_HASH_KEY_STRING, time_str); + + sprintf(session_value, "%s", ""); + + for(hi = axutil_hash_first(ht, env); hi; hi = axutil_hash_next(env, hi)) + { + axis2_char_t *name = NULL; + axis2_char_t *value = NULL; + int len = -1; + + axutil_hash_this(hi, &key, NULL, &val); + name = (axis2_char_t *) key; + value = (axis2_char_t *) val; + if(name) + { + len = axutil_strlen(session_value); + sprintf(session_value + len, "%s=", name); + AXIS2_FREE(env->allocator, name); + } + if(value) + { + len = axutil_strlen(session_value); + sprintf(session_value + len, "%s;", value); + AXIS2_FREE(env->allocator, value); + } + } + + out_info = (axis2_http_out_transport_info_t *)axis2_msg_ctx_get_out_transport_info( + msg_ctx, env); + if(!out_info) + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_OUT_TRNSPORT_INFO_NULL, AXIS2_FAILURE); + AXIS2_FREE(env->allocator, header_value); + return NULL; + } + status = AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_SESSION(out_info, env, session_id, session_value); + if(status != AXIS2_SUCCESS) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Inserting session value failed for session id %s", session_id); + return NULL; + } + } + else + { + time_str = axutil_hash_get(ht, "expires", AXIS2_HASH_KEY_STRING); + } + header_value = AXIS2_MALLOC(env->allocator, 256 * sizeof(axis2_char_t)); + sprintf(header_value, "ID=%s; expires=%s;", session_id, time_str); + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_http_transport_utils_get_session"); + return header_value; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_transport_utils_set_session( + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx, + axis2_char_t *session_str) +{ + axutil_date_time_t *expire_time = NULL; + axutil_date_time_t *current_time = NULL; + axutil_date_time_comp_result_t result; + axis2_char_t *time_str = NULL; + axutil_hash_t *ht = NULL; + axutil_property_t *property = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_http_tranpsport_utils_set_session"); + + /* Check whether session has expired. If so set error and return */ + ht = axutil_hash_make(env); + axis2_http_transport_utils_parse_session_str(env, session_str, ht); + time_str = (axis2_char_t *) axutil_hash_get(ht, "time", AXIS2_HASH_KEY_STRING); + expire_time = axutil_date_time_create(env); + axutil_date_time_deserialize_date_time(expire_time, env, time_str); + current_time = axutil_date_time_create(env); + result = axutil_date_time_compare(current_time, env, expire_time); + axutil_date_time_free(current_time, env); + axutil_date_time_free(expire_time, env); + if(result == AXIS2_DATE_TIME_COMP_RES_EXPIRED) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + const void *key = NULL; + + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Session time out"); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SESSION_TIMEOUT, AXIS2_FAILURE); + for(hi = axutil_hash_first(ht, env); hi; hi = axutil_hash_next(env, hi)) + { + axis2_char_t *name = NULL; + axis2_char_t *value = NULL; + + axutil_hash_this(hi, &key, NULL, &val); + name = (axis2_char_t *) key; + if(name) + { + AXIS2_FREE(env->allocator, name); + } + value = (axis2_char_t *) val; + if(value) + { + AXIS2_FREE(env->allocator, value); + } + } + axutil_hash_free(ht, env); + } + + property = axutil_property_create_with_args(env, 0, AXIS2_TRUE, 0, ht); + axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_TRANSPORT_SESSION_TABLE, property); + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_http_tranpsport_utils_set_session"); +} + +/** + * After receiving Set-Cookie header store it + */ +AXIS2_EXTERN void AXIS2_CALL +axis2_http_transport_utils_store_cookie( + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx, + axis2_char_t *cookie) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + axutil_property_t *property = NULL; + axutil_hash_t *session_map = NULL; + axis2_endpoint_ref_t *endpoint = NULL; + const axis2_char_t *address = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_http_transport_utils_store_cookie"); + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + property = axis2_conf_ctx_get_property(conf_ctx, env, AXIS2_TRANSPORT_SESSION_MAP); + if(property) + { + session_map = axutil_property_get_value(property, env); + } + if(!session_map) + { + if(!cookie) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "No session map found and no cookie set. So return"); + return; + } + session_map = axutil_hash_make(env); + if(session_map) + { + property = axutil_property_create_with_args(env, AXIS2_SCOPE_APPLICATION, 1, + axis2_http_transport_utils_session_map_free_void_arg, session_map); + axis2_conf_ctx_set_property(conf_ctx, env, AXIS2_TRANSPORT_SESSION_MAP, property); + } + else + { + AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return; + } + } + endpoint = axis2_msg_ctx_get_to(msg_ctx, env); + if(endpoint) + { + address = axis2_endpoint_ref_get_address(endpoint, env); + if(address) + { + axutil_url_t *url = NULL; + + url = axutil_url_parse_string(env, address); + if(url) + { + axis2_char_t *server = NULL; + server = axutil_url_get_server(url, env); + if(server) + { + if(cookie) + { + axutil_hash_set(session_map, axutil_strdup(env, server), AXIS2_HASH_KEY_STRING, + axutil_strdup(env, cookie)); + } + else /* We remove any cookie set for this endpoint */ + { + cookie = axutil_hash_get(session_map, server, AXIS2_HASH_KEY_STRING); + if(cookie) + { + AXIS2_FREE(env->allocator, cookie); + } + axutil_hash_set(session_map, axutil_strdup(env, server), AXIS2_HASH_KEY_STRING, NULL); + } + } + axutil_url_free(url, env); + } + } + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_http_transport_utils_store_cookie"); +} + +/* Read from cookie store before sending */ +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_read_from_cookie_store( + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx) +{ + axutil_property_t *property = NULL; + axutil_hash_t *session_map = NULL; + axis2_endpoint_ref_t *endpoint = NULL; + const axis2_char_t *address = NULL; + axis2_char_t *cookie = NULL; + axis2_conf_ctx_t *conf_ctx = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Entry:axis2_http_transport_utils_read_from_cookie_store"); + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + property = axis2_conf_ctx_get_property(conf_ctx, env, AXIS2_TRANSPORT_SESSION_MAP); + if(property) + { + session_map = axutil_property_get_value(property, env); + } + if(!session_map) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "No session map stored"); + return NULL; + } + endpoint = axis2_msg_ctx_get_to(msg_ctx, env); + if(endpoint) + { + address = axis2_endpoint_ref_get_address(endpoint, env); + if(address) + { + axutil_url_t *url = NULL; + url = axutil_url_parse_string(env, address); + if(url) + { + axis2_char_t *server = NULL; + server = axutil_url_get_server(url, env); + if(server) + { + cookie = axutil_hash_get(session_map, server, AXIS2_HASH_KEY_STRING); + } + axutil_url_free(url, env); + } + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "cookie:%s", cookie); + } + } + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_http_transport_utils_read_from_cookie_store"); + return cookie; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_http_transport_utils_get_session_id_from_cookie( + const axutil_env_t *env, + axis2_char_t *cookie) +{ + axis2_char_t *next = NULL; + axis2_char_t *session_id = NULL; + + next = axutil_strstr(cookie, ";"); + if (next) + { + session_id = axis2_http_transport_utils_copy_value(env, cookie); + } + + return session_id; +} + +static axis2_char_t * +axis2_http_transport_utils_copy_key( + const axutil_env_t *env, + axis2_char_t *pair) +{ + axis2_char_t *p = axutil_strchr(pair, '='); + axis2_char_t *ret = NULL; + + if (p) + { + axis2_char_t c; + size_t len = p - pair; + c = pair[len]; + pair[len] = '\0'; + ret = axutil_strdup(env, pair); + pair[len] = c; + } + + return ret; +} + +static axis2_char_t * +axis2_http_transport_utils_copy_value( + const axutil_env_t *env, + axis2_char_t *pair) +{ + axis2_char_t *ret = NULL; + size_t len; + axis2_char_t c; + + pair = axutil_strchr(pair, '='); + if (pair) + { + pair++; + len = axutil_strchr(pair, ';') - pair; + c = pair[len]; + pair[len] = '\0'; + ret = axutil_strdup(env, pair); + pair[len] = c; + } + + return ret; +} + + +AXIS2_EXTERN void AXIS2_CALL +axis2_http_transport_utils_session_map_free_void_arg( + void *sm_void, + const axutil_env_t *env) +{ + void *val = NULL; + const void *key = NULL; + axutil_hash_index_t *hi = NULL; + axutil_hash_t *ht = (axutil_hash_t *)sm_void; + + for(hi = axutil_hash_first(ht, env); hi; hi = axutil_hash_next(env, hi)) + { + axis2_char_t *name = NULL; + axis2_char_t *value = NULL; + + axutil_hash_this(hi, &key, NULL, &val); + name = (axis2_char_t *) key; + if(name) + { + AXIS2_FREE(env->allocator, name); + } + value = (axis2_char_t *) val; + if(value) + { + AXIS2_FREE(env->allocator, value); + } + } + axutil_hash_free(ht, env); +} + + diff --git a/src/core/transport/tcp/Makefile.am b/src/core/transport/tcp/Makefile.am new file mode 100644 index 0000000..79f45b7 --- /dev/null +++ b/src/core/transport/tcp/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS = sender receiver server +EXTRA_DIST=axis2_simple_tcp_svr_conn.h axis2_tcp_svr_thread.h axis2_tcp_transport_sender.h axis2_tcp_server.h axis2_tcp_transport.h axis2_tcp_worker.h + diff --git a/src/core/transport/tcp/axis2_simple_tcp_svr_conn.h b/src/core/transport/tcp/axis2_simple_tcp_svr_conn.h new file mode 100644 index 0000000..c0d3b89 --- /dev/null +++ b/src/core/transport/tcp/axis2_simple_tcp_svr_conn.h @@ -0,0 +1,155 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * tcp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_SIMPLE_HTTP_SVR_CONN_H +#define AXIS2_SIMPLE_HTTP_SVR_CONN_H + +/** + * @ingroup axis2_core_transport_tcp + * @{ + */ + +/** + * @file axis2_simple_tcp_svr_conn.h + * @brief Axis2 simple tcp server connection + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axis2_simple_tcp_svr_conn axis2_simple_tcp_svr_conn_t; + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_simple_tcp_svr_conn_close( + axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_simple_tcp_svr_conn_is_open( + axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + */ + + AXIS2_EXTERN axutil_stream_t *AXIS2_CALL + + axis2_simple_tcp_svr_conn_get_stream( + const axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_simple_tcp_svr_conn_read_request( + axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + * @param timeout timeout + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_simple_tcp_svr_conn_set_rcv_timeout( + axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env, + int timeout); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + * @param timeout timeout + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axis2_simple_tcp_svr_conn_set_snd_timeout( + axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env, + int timeout); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_simple_tcp_svr_conn_get_svr_ip( + const axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_simple_tcp_svr_conn_get_peer_ip( + const axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * @param svr_conn pointer to server connection struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_simple_tcp_svr_conn_free( + axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env); + + /** + * creates axis2_simple_tcp_svr_conn struct + * @param env pointer to environment struct + * @param sockfd sockfd + */ + AXIS2_EXTERN axis2_simple_tcp_svr_conn_t *AXIS2_CALL + + axis2_simple_tcp_svr_conn_create( + const axutil_env_t * env, + int sockfd); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_SIMPLE_HTTP_SVR_CONN_H */ diff --git a/src/core/transport/tcp/axis2_tcp_server.h b/src/core/transport/tcp/axis2_tcp_server.h new file mode 100644 index 0000000..e4557a1 --- /dev/null +++ b/src/core/transport/tcp/axis2_tcp_server.h @@ -0,0 +1,60 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_TCP_SERVER_H +#define AXIS2_TCP_SERVER_H + +/** + * @defgroup axis2_tcp_server tcp server + * @ingroup axis2_core_trans_tcp + * @{ + */ + +/** + * @file axis2_tcp_server.h + * @brief axis2 TCP Server implementation + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN axis2_transport_receiver_t *AXIS2_CALL + axis2_tcp_server_create( + const axutil_env_t * env, + const axis2_char_t * repo, + const int port); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_tcp_server_stop( + axis2_transport_receiver_t * server, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_TCP_SERVER_H */ diff --git a/src/core/transport/tcp/axis2_tcp_svr_thread.h b/src/core/transport/tcp/axis2_tcp_svr_thread.h new file mode 100644 index 0000000..aa22ea1 --- /dev/null +++ b/src/core/transport/tcp/axis2_tcp_svr_thread.h @@ -0,0 +1,117 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_TCP_SVR_THREAD_H +#define AXIS2_TCP_SVR_THREAD_H + +/** + * @defgroup axis2_tcp_svr_thread tcp server thread + * @ingroup axis2_core_trans_tcp + * @{ + */ + +/** + * @file axis2_tcp_svr_thread.h + * @brief axis2 TCP server listning thread implementation + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axist_tcp_svr_thread */ + typedef struct axis2_tcp_svr_thread axis2_tcp_svr_thread_t; + + /** + * @param svr_thread pointer to server thread + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_tcp_svr_thread_run( + axis2_tcp_svr_thread_t * svr_thread, + const axutil_env_t * env); + + /** + * @param svr_thread pointer to server thread + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_tcp_svr_thread_destroy( + axis2_tcp_svr_thread_t * svr_thread, + const axutil_env_t * env); + + /** + * @param svr_thread pointer to server thread + * @param env pointer to environment struct + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_tcp_svr_thread_get_local_port( + const axis2_tcp_svr_thread_t * svr_thread, + const axutil_env_t * env); + + /** + * @param svr_thread pointer to server thread + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_tcp_svr_thread_is_running( + axis2_tcp_svr_thread_t * svr_thread, + const axutil_env_t * env); + + /** + * @param svr_thread pointer to server thread + * @param env pointer to environment struct + * @param worker pointer to worker + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_tcp_svr_thread_set_worker( + axis2_tcp_svr_thread_t * svr_thread, + const axutil_env_t * env, + axis2_tcp_worker_t * worker); + + /** + * @param svr_thread pointer to server thread + * @param env pointer to environment struct + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_tcp_svr_thread_free( + axis2_tcp_svr_thread_t * svr_thread, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @param port + */ + AXIS2_EXTERN axis2_tcp_svr_thread_t *AXIS2_CALL + + axis2_tcp_svr_thread_create( + const axutil_env_t * env, + int port); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_TCP_SVR_THREAD_H */ diff --git a/src/core/transport/tcp/axis2_tcp_transport.h b/src/core/transport/tcp/axis2_tcp_transport.h new file mode 100644 index 0000000..9c8c7db --- /dev/null +++ b/src/core/transport/tcp/axis2_tcp_transport.h @@ -0,0 +1,89 @@ + +/* +* Copyright 2004,2005 The Apache Software Foundation. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain count copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_TCP_TRANSPORT_H +#define AXIS2_TCP_TRANSPORT_H + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @defgroup axis2_core_trans_tcp tcp transport + * @ingroup axis2_transport + * Description. + * @{ + */ + + /** + * @defgroup axis2_core_transport_tcp core tcp transport + * @ingroup axis2_core_trans_tcp + * @{ + */ + + /** + * @brief TCP protocol and message context constants. + * + */ +#define AXIS2_TCP_OUT_TRANSPORT_INFO "TCPOutTransportInfo" + + /** + * PROTOCOL_VERSION + */ +#define AXIS2_TCP_PROTOCOL_VERSION "PROTOCOL" + + /** + * SOCKET + */ +#define AXIS2_SOCKET "SOCKET" + + /** + * HEADER_HOST + */ +#define AXIS2_TCP_HOST "Host" + + /** + * SO_TIMEOUT + */ +#define AXIS2_TCP_SO_TIMEOUT "SO_TIMEOUT" + + /** + * CONNECTION_TIMEOUT + */ +#define AXIS2_TCP_CONNECTION_TIMEOUT "CONNECTION_TIMEOUT" + + /** + * DEFAULT_SO_TIMEOUT + */ +#define AXIS2_TCP_DEFAULT_SO_TIMEOUT 60000 + + /** + * DEFAULT_CONNECTION_TIMEOUT + */ +#define AXIS2_TCP_DEFAULT_CONNECTION_TIMEOUT 60000 + + /** + * Field TRANSPORT_TCP + */ +#define AXIS2_TRANSPORT_TCP "tcp" + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_TCP_TRANSPORT_H */ diff --git a/src/core/transport/tcp/axis2_tcp_transport_sender.h b/src/core/transport/tcp/axis2_tcp_transport_sender.h new file mode 100644 index 0000000..9d706e5 --- /dev/null +++ b/src/core/transport/tcp/axis2_tcp_transport_sender.h @@ -0,0 +1,59 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_TCP_TRANSPORT_SENDER_H +#define AXIS2_TCP_TRANSPORT_SENDER_H + +/** + * @defgroup axis2_tcp_transport_sender tcp transport sender + * @ingroup axis2_core_trans_tcp + * @{ + */ + +/** + * @file axis2_tcp_transport_sender.h + * @brief axis2 TCP Transport Sender (Handler) implementation + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @param env pointer to environment struct + */ + AXIS2_EXTERN axis2_transport_sender_t *AXIS2_CALL + + axis2_tcp_transport_sender_create( + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_TCP_TRANSPORT_SENDER_H */ diff --git a/src/core/transport/tcp/axis2_tcp_worker.h b/src/core/transport/tcp/axis2_tcp_worker.h new file mode 100644 index 0000000..dcd74fc --- /dev/null +++ b/src/core/transport/tcp/axis2_tcp_worker.h @@ -0,0 +1,95 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * tcp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_TCP_WORKER_H +#define AXIS2_TCP_WORKER_H + +/** + * @defgroup axis2_tcp_worker tcp worker + * @ingroup axis2_core_trans_tcp + * @{ + */ + +/** + * @file axis2_tcp_worker.h + * @brief axis2 TCP Worker + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axis2_tcp_worker */ + typedef struct axis2_tcp_worker axis2_tcp_worker_t; + + /** + * @param tcp_worker pointer to tcp worker + * @param env pointer to environment struct + * @param svr_conn pointer to svr conn + * @param simple_request pointer to simple request + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_tcp_worker_process_request( + axis2_tcp_worker_t * tcp_worker, + const axutil_env_t * env, + axis2_simple_tcp_svr_conn_t * svr_conn, + axis2_char_t * simple_request); + + /** + * @param tcp_worker pointer to tcp worker + * @param env pointer to environment struct + * @param port + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_tcp_worker_set_svr_port( + axis2_tcp_worker_t * tcp_worker, + const axutil_env_t * env, + int port); + + /** + * @param tcp_worker pointer to tcp worker + * @param env pointer to environment strut + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_tcp_worker_free( + axis2_tcp_worker_t * tcp_worker, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @param conf_ctx pointer to configuration context + */ + AXIS2_EXTERN axis2_tcp_worker_t *AXIS2_CALL + axis2_tcp_worker_create( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_TCP_WORKER_H */ diff --git a/src/core/transport/tcp/receiver/Makefile.am b/src/core/transport/tcp/receiver/Makefile.am new file mode 100644 index 0000000..e3543dc --- /dev/null +++ b/src/core/transport/tcp/receiver/Makefile.am @@ -0,0 +1,23 @@ +lib_LTLIBRARIES = libaxis2_tcp_receiver.la +libaxis2_tcp_receiver_la_LIBADD=$(top_builddir)/util/src/libaxutil.la\ + $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la + + +libaxis2_tcp_receiver_la_SOURCES = tcp_svr_thread.c \ + tcp_worker.c \ + simple_tcp_svr_conn.c \ + tcp_receiver.c + + +libaxis2_tcp_receiver_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/transport\ + -I$(top_builddir)/src/core/transport/tcp \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include diff --git a/src/core/transport/tcp/receiver/simple_tcp_svr_conn.c b/src/core/transport/tcp/receiver/simple_tcp_svr_conn.c new file mode 100644 index 0000000..a5fd9a9 --- /dev/null +++ b/src/core/transport/tcp/receiver/simple_tcp_svr_conn.c @@ -0,0 +1,181 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +struct axis2_simple_tcp_svr_conn +{ + int socket; + axutil_stream_t *stream; + axis2_char_t *buffer; +}; + +AXIS2_EXTERN axis2_simple_tcp_svr_conn_t *AXIS2_CALL +axis2_simple_tcp_svr_conn_create( + const axutil_env_t * env, + int sockfd) +{ + axis2_simple_tcp_svr_conn_t *svr_conn = NULL; + AXIS2_ENV_CHECK(env, NULL); + svr_conn = (axis2_simple_tcp_svr_conn_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_simple_tcp_svr_conn_t)); + + if(!svr_conn) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + svr_conn->socket = sockfd; + svr_conn->stream = NULL; + svr_conn->buffer = NULL; + + if(-1 != svr_conn->socket) + { + svr_conn->stream = axutil_stream_create_socket(env, svr_conn->socket); + if(!svr_conn->stream) + { + axis2_simple_tcp_svr_conn_free((axis2_simple_tcp_svr_conn_t *)svr_conn, env); + return NULL; + } + } + return svr_conn; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_simple_tcp_svr_conn_free( + axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + axis2_simple_tcp_svr_conn_close(svr_conn, env); + + AXIS2_FREE(env->allocator, svr_conn); + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_simple_tcp_svr_conn_close( + axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + axutil_stream_free(svr_conn->stream, env); + if(-1 != svr_conn->socket) + { + axutil_network_handler_close_socket(env, svr_conn->socket); + svr_conn->socket = -1; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_simple_tcp_svr_conn_is_open( + axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(-1 != svr_conn->socket) + { + return AXIS2_TRUE; + } + return AXIS2_FALSE; +} + +AXIS2_EXTERN axutil_stream_t *AXIS2_CALL +axis2_simple_tcp_svr_conn_get_stream( + const axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + return svr_conn->stream; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_simple_tcp_svr_conn_read_request( + axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + int size = 32000; + axis2_char_t str_line[32000]; + axis2_char_t tmp_buf[32000]; + int read = -1; + + AXIS2_ENV_CHECK(env, NULL); + + memset(str_line, 0, size); + while((read = axutil_stream_peek_socket(svr_conn->stream, env, tmp_buf, size - 1)) > 0) + { + tmp_buf[read] = '\0'; + if(read > 0) + { + read = axutil_stream_read(svr_conn->stream, env, tmp_buf, size - 1); + if(read > 0) + { + tmp_buf[read] = '\0'; + strcat(str_line, tmp_buf); + break; + } + else + { + break; + } + } + } + if(str_line > 0) + { + svr_conn->buffer = str_line; + } + return svr_conn->buffer; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_simple_tcp_svr_conn_set_rcv_timeout( + axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env, + int timeout) +{ + return axutil_network_handler_set_sock_option(env, svr_conn->socket, SO_RCVTIMEO, timeout); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_simple_tcp_svr_conn_set_snd_timeout( + axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env, + int timeout) +{ + return axutil_network_handler_set_sock_option(env, svr_conn->socket, SO_SNDTIMEO, timeout); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_simple_tcp_svr_conn_get_svr_ip( + const axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + return axutil_network_handler_get_svr_ip(env, svr_conn->socket); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_simple_tcp_svr_conn_get_peer_ip( + const axis2_simple_tcp_svr_conn_t * svr_conn, + const axutil_env_t * env) +{ + return axutil_network_handler_get_peer_ip(env, svr_conn->socket); +} diff --git a/src/core/transport/tcp/receiver/tcp_receiver.c b/src/core/transport/tcp/receiver/tcp_receiver.c new file mode 100644 index 0000000..0451217 --- /dev/null +++ b/src/core/transport/tcp/receiver/tcp_receiver.c @@ -0,0 +1,400 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/** + * @brief TCP Client struct impl + * Axis2 TCP Client impl + */ + +typedef struct axis2_tcp_server_impl +{ + axis2_transport_receiver_t tcp_server; + axis2_tcp_svr_thread_t *svr_thread; + int port; + axis2_char_t *svr_ip; + axis2_conf_ctx_t *conf_ctx; + axis2_conf_ctx_t *conf_ctx_private; + axis2_conf_t *conf; + axis2_bool_t is_application_client_side; +} axis2_tcp_server_impl_t; + +#define AXIS2_INTF_TO_IMPL(tcp_server) \ + ((axis2_tcp_server_impl_t *)(tcp_server)) + +/***************************** Function headers *******************************/ + +axis2_status_t AXIS2_CALL +axis2_tcp_server_init( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_transport_in_desc_t * in_desc); + +axis2_status_t AXIS2_CALL +axis2_tcp_server_start( + axis2_transport_receiver_t * server, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +axis2_tcp_server_stop( + axis2_transport_receiver_t * server, + const axutil_env_t * env); + +axis2_conf_ctx_t *AXIS2_CALL axis2_tcp_server_get_conf_ctx( + axis2_transport_receiver_t * server, + const axutil_env_t * env); + +axis2_endpoint_ref_t *AXIS2_CALL axis2_tcp_server_get_reply_to_epr( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + const axis2_char_t * svc_name); + + +axis2_endpoint_ref_t *AXIS2_CALL axis2_tcp_server_get_epr_for_service( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + const axis2_char_t * svc_name); + + +axis2_bool_t AXIS2_CALL +axis2_tcp_server_is_running( + axis2_transport_receiver_t * server, + const axutil_env_t * env); + +static void AXIS2_CALL +axis2_tcp_server_set_is_application_client_side( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + axis2_bool_t is_application_client_side); + +void AXIS2_CALL axis2_tcp_server_free( + axis2_transport_receiver_t * server, + const axutil_env_t * env); + +static axis2_char_t* AXIS2_CALL +axis2_tcp_server_get_server_ip( +axis2_transport_receiver_t *server, +const axutil_env_t *env); + +static void AXIS2_CALL +axis2_tcp_server_set_server_ip( +axis2_transport_receiver_t *transport_receiver, +const axutil_env_t *env, + axis2_char_t *serverip); + +static const axis2_transport_receiver_ops_t tcp_transport_receiver_ops_var = { + axis2_tcp_server_init, + axis2_tcp_server_start, + axis2_tcp_server_get_reply_to_epr, + axis2_tcp_server_get_epr_for_service, + axis2_tcp_server_get_server_ip, + axis2_tcp_server_set_server_ip, + axis2_tcp_server_get_conf_ctx, + axis2_tcp_server_is_running, + axis2_tcp_server_set_is_application_client_side, + axis2_tcp_server_stop, + axis2_tcp_server_free }; + +AXIS2_EXTERN axis2_transport_receiver_t *AXIS2_CALL +axis2_tcp_server_create( + const axutil_env_t * env, + const axis2_char_t * repo, + const int port) +{ + axis2_tcp_server_impl_t *server_impl = NULL; + AXIS2_ENV_CHECK(env, NULL); + + server_impl = (axis2_tcp_server_impl_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_tcp_server_impl_t)); + + if(!server_impl) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + server_impl->svr_thread = NULL; + server_impl->conf_ctx = NULL; + server_impl->conf_ctx_private = NULL; + server_impl->port = port; + server_impl->svr_ip = NULL; + server_impl->tcp_server.ops = &tcp_transport_receiver_ops_var; + + if(repo) + { + + /** + * We first create a private conf ctx which is owned by this server + * we only free this private conf context. We should never free the + * server_impl->conf_ctx because it may own to any other object which + * may lead to double free + */ + server_impl->conf_ctx_private = axis2_build_conf_ctx(env, repo); + if(!server_impl->conf_ctx_private) + { + axis2_tcp_server_free((axis2_transport_receiver_t *)server_impl, env); + return NULL; + } + server_impl->conf_ctx = server_impl->conf_ctx_private; + } + return &(server_impl->tcp_server); +} + +void AXIS2_CALL +axis2_tcp_server_free( + axis2_transport_receiver_t * server, + const axutil_env_t * env) +{ + axis2_tcp_server_impl_t *server_impl = NULL; + AXIS2_ENV_CHECK(env, void); + server_impl = AXIS2_INTF_TO_IMPL(server); + if(server_impl->svr_thread) + { + axis2_tcp_svr_thread_destroy(server_impl->svr_thread, env); + axis2_tcp_svr_thread_free(server_impl->svr_thread, env); + server_impl->svr_thread = NULL; + } + + if(server_impl->conf_ctx_private) + { + axis2_conf_ctx_free(server_impl->conf_ctx_private, env); + server_impl->conf_ctx_private = NULL; + } + + /** + * Do not free this. It may own to some other object + */ + server_impl->conf_ctx = NULL; + AXIS2_FREE(env->allocator, server_impl); + return; +} + +static void AXIS2_CALL +axis2_tcp_server_set_is_application_client_side( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + axis2_bool_t is_application_client_side) +{ + axis2_tcp_server_impl_t *server_impl = NULL; + server_impl = AXIS2_INTF_TO_IMPL(server); + server_impl->is_application_client_side = is_application_client_side; +} + +axis2_status_t AXIS2_CALL +axis2_tcp_server_init( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_transport_in_desc_t * in_desc) +{ + axis2_tcp_server_impl_t *server_impl = NULL; + axis2_char_t *port_str = NULL; + axutil_param_t *param = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + server_impl = AXIS2_INTF_TO_IMPL(server); + + server_impl->conf_ctx = conf_ctx; + param = (axutil_param_t *)axutil_param_container_get_param( + axis2_transport_in_desc_param_container(in_desc, env), env, "port"); + if(param) + { + port_str = axutil_param_get_value(param, env); + } + if(port_str) + { + server_impl->port = atoi(port_str); + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_tcp_server_start( + axis2_transport_receiver_t * server, + const axutil_env_t * env) +{ + + axis2_tcp_server_impl_t *server_impl = NULL; + axis2_tcp_worker_t *worker = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + server_impl = AXIS2_INTF_TO_IMPL(server); + server_impl->svr_thread = axis2_tcp_svr_thread_create(env, server_impl->port); + if(!server_impl->svr_thread) + { + return AXIS2_FAILURE; + } + worker = axis2_tcp_worker_create(env, server_impl->conf_ctx); + axis2_tcp_worker_set_svr_port(worker, env, server_impl->port); + if(!worker) + { + axis2_tcp_svr_thread_free(server_impl->svr_thread, env); + return AXIS2_FAILURE; + } + AXIS2_LOG_INFO(env->log, "Starting TCP server thread"); + axis2_tcp_svr_thread_set_worker(server_impl->svr_thread, env, worker); + axis2_tcp_svr_thread_run(server_impl->svr_thread, env); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_tcp_server_stop( + axis2_transport_receiver_t * server, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + AXIS2_LOG_INFO(env->log, "Terminating TCP server thread"); + if(AXIS2_INTF_TO_IMPL(server)->svr_thread) + { + axis2_tcp_svr_thread_destroy(AXIS2_INTF_TO_IMPL(server)->svr_thread, env); + } + AXIS2_LOG_INFO(env->log, "Successfully terminated TCP server" " thread"); + return AXIS2_SUCCESS; +} + +axis2_conf_ctx_t *AXIS2_CALL +axis2_tcp_server_get_conf_ctx( + axis2_transport_receiver_t * server, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, NULL); + return AXIS2_INTF_TO_IMPL(server)->conf_ctx; +} + +axis2_endpoint_ref_t *AXIS2_CALL +axis2_tcp_server_get_reply_to_epr( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + const axis2_char_t * svc_name) +{ + axis2_endpoint_ref_t *epr = NULL; + const axis2_char_t *host_address = NULL; + axis2_char_t *svc_path = NULL; + axutil_url_t *url = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, svc_name, NULL); + + host_address = "127.0.0.1"; /* TODO : get from axis2.xml */ + svc_path = axutil_stracat(env, "/axis2/services/", svc_name); + url = axutil_url_create(env, "tcp", host_address, AXIS2_INTF_TO_IMPL(server)->port, svc_path); + AXIS2_FREE(env->allocator, svc_path); + if(!url) + { + return NULL; + } + epr = axis2_endpoint_ref_create(env, axutil_url_to_external_form(url, env)); + axutil_url_free(url, env); + return epr; +} + +axis2_endpoint_ref_t *AXIS2_CALL +axis2_tcp_server_get_epr_for_service( + axis2_transport_receiver_t * server, + const axutil_env_t * env, + const axis2_char_t * svc_name) +{ + axis2_endpoint_ref_t *epr = NULL; + const axis2_char_t *host_address = NULL; + axis2_char_t *svc_path = NULL; + axutil_url_t *url = NULL; + + AXIS2_PARAM_CHECK(env->error, svc_name, NULL); + host_address = "127.0.0.1"; /* TODO : get from axis2.xml */ + svc_path = axutil_stracat(env, "/axis2/services/", svc_name); + + url = axutil_url_create(env, "tcp", host_address, AXIS2_INTF_TO_IMPL(server)->port, svc_path); + AXIS2_FREE(env->allocator, svc_path); + if(!url) + { + return NULL; + } + epr = axis2_endpoint_ref_create(env, axutil_url_to_external_form(url, env)); + axutil_url_free(url, env); + return epr; +} + +axis2_bool_t AXIS2_CALL +axis2_tcp_server_is_running( + axis2_transport_receiver_t * server, + const axutil_env_t * env) +{ + axis2_tcp_server_impl_t *server_impl = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + server_impl = AXIS2_INTF_TO_IMPL(server); + if(!server_impl->svr_thread) + { + return AXIS2_FALSE; + } + return axis2_tcp_svr_thread_is_running(server_impl->svr_thread, env); +} + +static axis2_char_t* AXIS2_CALL +axis2_tcp_server_get_server_ip( +axis2_transport_receiver_t *server, +const axutil_env_t *env) +{ + return AXIS2_INTF_TO_IMPL(server)->svr_ip; +} + +static void AXIS2_CALL +axis2_tcp_server_set_server_ip( +axis2_transport_receiver_t *server, +const axutil_env_t *env, + axis2_char_t *serverip) +{ + AXIS2_INTF_TO_IMPL(server)->svr_ip = serverip; +} + + +/** + * Following block distinguish the exposed part of the dll. + */ +AXIS2_EXPORT int +axis2_get_instance( + struct axis2_transport_receiver **inst, + const axutil_env_t * env) +{ + *inst = axis2_tcp_server_create(env, NULL, -1); + if(!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_transport_receiver_t * inst, + const axutil_env_t * env) +{ + if(inst) + { + axis2_transport_receiver_free(inst, env); + } + return AXIS2_SUCCESS; +} diff --git a/src/core/transport/tcp/receiver/tcp_svr_thread.c b/src/core/transport/tcp/receiver/tcp_svr_thread.c new file mode 100644 index 0000000..5543394 --- /dev/null +++ b/src/core/transport/tcp/receiver/tcp_svr_thread.c @@ -0,0 +1,297 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * tcp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +AXIS2_EXPORT int axis2_tcp_socket_read_timeout = AXIS2_TCP_DEFAULT_SO_TIMEOUT; + +struct axis2_tcp_svr_thread +{ + int listen_socket; + axis2_bool_t stopped; + axis2_tcp_worker_t *worker; + int port; +}; + +typedef struct axis2_tcp_svr_thd_args +{ + axutil_env_t *env; + axis2_socket_t socket; + axis2_tcp_worker_t *worker; + axutil_thread_t *thread; +} axis2_tcp_svr_thd_args_t; + +AXIS2_EXTERN const axutil_env_t *AXIS2_CALL init_thread_env( + const axutil_env_t ** system_env); + +void *AXIS2_THREAD_FUNC axis2_svr_thread_worker_func( + axutil_thread_t * thd, + void *data); + +axis2_tcp_svr_thread_t *AXIS2_CALL +axis2_tcp_svr_thread_create( + const axutil_env_t * env, + int port) +{ + axis2_tcp_svr_thread_t *svr_thread = NULL; + AXIS2_ENV_CHECK(env, NULL); + + svr_thread = (axis2_tcp_svr_thread_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_tcp_svr_thread_t)); + + if(!svr_thread) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + svr_thread->worker = NULL; + svr_thread->stopped = AXIS2_FALSE; + svr_thread->port = port; + svr_thread->listen_socket = (int)axutil_network_handler_create_server_socket(env, + svr_thread->port); + if(-1 == svr_thread->listen_socket) + { + axis2_tcp_svr_thread_free((axis2_tcp_svr_thread_t *)svr_thread, env); + return NULL; + } + + return svr_thread; +} + +void AXIS2_CALL +axis2_tcp_svr_thread_free( + axis2_tcp_svr_thread_t * svr_thread, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + if(svr_thread->worker) + { + axis2_tcp_worker_free(svr_thread->worker, env); + svr_thread->worker = NULL; + } + if(-1 != svr_thread->listen_socket) + { + axutil_network_handler_close_socket(env, svr_thread->listen_socket); + svr_thread->listen_socket = -1; + } + svr_thread->stopped = AXIS2_TRUE; + + AXIS2_FREE(env->allocator, svr_thread); + return; +} + +axis2_status_t AXIS2_CALL +axis2_tcp_svr_thread_run( + axis2_tcp_svr_thread_t * svr_thread, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + while(AXIS2_FALSE == svr_thread->stopped) + { + int socket = -1; + axis2_tcp_svr_thd_args_t *arg_list = NULL; +#ifdef AXIS2_SVR_MULTI_THREADED + axutil_thread_t *worker_thread = NULL; +#endif + + socket = (int)axutil_network_handler_svr_socket_accept(env, svr_thread-> listen_socket); + if(!svr_thread->worker) + { + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "Worker not ready yet." + " Cannot serve the request"); + axutil_network_handler_close_socket(env, socket); + continue; + } + arg_list = AXIS2_MALLOC(env->allocator, sizeof(axis2_tcp_svr_thd_args_t)); + if(!arg_list) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Memory allocation error in the svr thread loop"); + continue; + } + arg_list->env = (axutil_env_t *)env; + arg_list->socket = socket; + arg_list->worker = svr_thread->worker; +#ifdef AXIS2_SVR_MULTI_THREADED + worker_thread = axutil_thread_pool_get_thread(env->thread_pool, + axis2_svr_thread_worker_func, + (void *) arg_list); + if (!worker_thread) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Thread creation failed" + "server thread loop"); + continue; + } + axutil_thread_pool_thread_detach(env->thread_pool, worker_thread); +#else + axis2_svr_thread_worker_func(NULL, (void *)arg_list); +#endif + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_tcp_svr_thread_destroy( + axis2_tcp_svr_thread_t * svr_thread, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + + if(AXIS2_TRUE == svr_thread->stopped) + { + return AXIS2_SUCCESS; + } + svr_thread->stopped = AXIS2_TRUE; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Terminating TCP server " + "thread."); + if(svr_thread->listen_socket) + { + axutil_network_handler_close_socket(env, svr_thread->listen_socket); + svr_thread->listen_socket = -1; + } + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +axis2_tcp_svr_thread_get_local_port( + const axis2_tcp_svr_thread_t * svr_thread, + const axutil_env_t * env) +{ + return svr_thread->port; +} + +axis2_bool_t AXIS2_CALL +axis2_tcp_svr_thread_is_running( + axis2_tcp_svr_thread_t * svr_thread, + const axutil_env_t * env) +{ + return svr_thread->port; +} + +axis2_status_t AXIS2_CALL +axis2_tcp_svr_thread_set_worker( + axis2_tcp_svr_thread_t * svr_thread, + const axutil_env_t * env, + axis2_tcp_worker_t * worker) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, worker, AXIS2_FAILURE); + svr_thread->worker = worker; + return AXIS2_SUCCESS; +} + +/** + * Thread worker function. + */ +void *AXIS2_THREAD_FUNC +axis2_svr_thread_worker_func( + axutil_thread_t * thd, + void *data) +{ + struct AXIS2_PLATFORM_TIMEB t1, t2; + axis2_simple_tcp_svr_conn_t *svr_conn = NULL; + axis2_char_t *request = NULL; + int millisecs = 0; + double secs = 0; + axis2_tcp_worker_t *tmp = NULL; + axis2_status_t status = AXIS2_FAILURE; + axutil_env_t *env = NULL; + axis2_socket_t socket; + axutil_env_t *thread_env = NULL; + axis2_tcp_svr_thd_args_t *arg_list = NULL; + +#ifndef WIN32 +#ifdef AXIS2_SVR_MULTI_THREADED + signal(SIGPIPE, SIG_IGN); +#endif +#endif + + arg_list = (axis2_tcp_svr_thd_args_t *)data; + if(!arg_list) + { + return NULL; + } + AXIS2_PLATFORM_GET_TIME_IN_MILLIS(&t1); + env = arg_list->env; + thread_env = axutil_init_thread_env(env); + socket = arg_list->socket; + svr_conn = axis2_simple_tcp_svr_conn_create(thread_env, (int)socket); + axis2_simple_tcp_svr_conn_set_rcv_timeout(svr_conn, thread_env, axis2_tcp_socket_read_timeout); + request = axis2_simple_tcp_svr_conn_read_request(svr_conn, thread_env); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "tcp request %s", request); + tmp = arg_list->worker; + status = axis2_tcp_worker_process_request(tmp, thread_env, svr_conn, request); + axis2_simple_tcp_svr_conn_free(svr_conn, thread_env); + + AXIS2_PLATFORM_GET_TIME_IN_MILLIS(&t2); + millisecs = t2.millitm - t1.millitm; + secs = difftime(t2.time, t1.time); + if(millisecs < 0) + { + millisecs += 1000; + secs--; + } + secs += millisecs / 1000.0; + + if(status == AXIS2_SUCCESS) + { +#if defined(WIN32) + AXIS2_LOG_INFO(thread_env->log, "Request served successfully"); +#else + AXIS2_LOG_INFO(thread_env->log, "Request served in %.3f seconds", secs); +#endif + } + else + { +#if defined(WIN32) + AXIS2_LOG_WARNING(thread_env->log, AXIS2_LOG_SI, + "Error occured in processing request "); +#else + AXIS2_LOG_WARNING(thread_env->log, AXIS2_LOG_SI, + "Error occured in processing request (%.3f seconds)", secs); +#endif + } + + AXIS2_FREE(thread_env->allocator, arg_list); + + if(thread_env) + { + /* There is a persistant problem: Uncomment this after fix + * the issue */ + /* axutil_free_thread_env(thread_env); */ + thread_env = NULL; + } +#ifdef AXIS2_SVR_MULTI_THREADED + axutil_thread_pool_exit_thread(env->thread_pool, thd); +#endif + + return NULL; +} diff --git a/src/core/transport/tcp/receiver/tcp_worker.c b/src/core/transport/tcp/receiver/tcp_worker.c new file mode 100644 index 0000000..217519d --- /dev/null +++ b/src/core/transport/tcp/receiver/tcp_worker.c @@ -0,0 +1,180 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * tcp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct axis2_tcp_worker +{ + axis2_conf_ctx_t *conf_ctx; + int svr_port; +}; + +AXIS2_EXTERN axis2_tcp_worker_t *AXIS2_CALL +axis2_tcp_worker_create( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx) +{ + axis2_tcp_worker_t *tcp_worker = NULL; + AXIS2_ENV_CHECK(env, NULL); + tcp_worker = (axis2_tcp_worker_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_tcp_worker_t)); + + if(!tcp_worker) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + tcp_worker->conf_ctx = conf_ctx; + tcp_worker->svr_port = 9090; /* default - must set later */ + + return tcp_worker; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_tcp_worker_free( + axis2_tcp_worker_t * tcp_worker, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, void); + + tcp_worker->conf_ctx = NULL; + + AXIS2_FREE(env->allocator, tcp_worker); + + return; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_tcp_worker_process_request( + axis2_tcp_worker_t * tcp_worker, + const axutil_env_t * env, + axis2_simple_tcp_svr_conn_t * svr_conn, + axis2_char_t * simple_request) +{ + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_transport_out_desc_t *out_desc = NULL; + axis2_transport_in_desc_t *in_desc = NULL; + axis2_msg_ctx_t *msg_ctx = NULL; + axiom_xml_reader_t *reader = NULL; + axiom_stax_builder_t *builder = NULL; + axiom_soap_builder_t *soap_builder = NULL; + axiom_soap_envelope_t *soap_envelope = NULL; + axis2_engine_t *engine = NULL; + axis2_status_t status = AXIS2_FALSE; + axutil_stream_t *svr_stream = NULL; + axis2_char_t *buffer = NULL; + int len = 0; + int write = -1; + axutil_stream_t *out_stream = NULL; + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "start:axis2_tcp_worker_process_request"); + + out_stream = axutil_stream_create_basic(env); + reader = axiom_xml_reader_create_for_memory(env, simple_request, axutil_strlen(simple_request), + NULL, AXIS2_XML_PARSER_TYPE_BUFFER); + if(!reader) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to create XML reader"); + return AXIS2_FAILURE; + } + + builder = axiom_stax_builder_create(env, reader); + if(!builder) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to create Stax builder"); + return AXIS2_FAILURE; + } + + soap_builder + = axiom_soap_builder_create(env, builder, AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI); + + if(!soap_builder) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to create SOAP builder"); + return AXIS2_FAILURE; + } + + conf_ctx = tcp_worker->conf_ctx; + + if(!conf_ctx) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "conf ctx not available"); + return AXIS2_FAILURE; + } + + out_desc = axis2_conf_get_transport_out(axis2_conf_ctx_get_conf(conf_ctx, env), env, + AXIS2_TRANSPORT_ENUM_TCP); + if(!out_desc) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Transport out not set"); + return AXIS2_FAILURE; + } + + in_desc = axis2_conf_get_transport_in(axis2_conf_ctx_get_conf(conf_ctx, env), env, + AXIS2_TRANSPORT_ENUM_TCP); + + msg_ctx = axis2_msg_ctx_create(env, conf_ctx, in_desc, out_desc); + axis2_msg_ctx_set_server_side(msg_ctx, env, AXIS2_TRUE); + axis2_msg_ctx_set_transport_out_stream(msg_ctx, env, out_stream); + + soap_envelope = axiom_soap_builder_get_soap_envelope(soap_builder, env); + axis2_msg_ctx_set_soap_envelope(msg_ctx, env, soap_envelope); + + engine = axis2_engine_create(env, conf_ctx); + status = axis2_engine_receive(engine, env, msg_ctx); + + svr_stream = axis2_simple_tcp_svr_conn_get_stream(svr_conn, env); + buffer = out_stream->buffer; + len = out_stream->len; + buffer[len] = 0; + if(svr_stream && buffer) + { + write = axutil_stream_write(svr_stream, env, buffer, len + 1); + if(write < 0) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "stream write failed"); + return AXIS2_FAILURE; + } + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "stream wrote:%s", buffer); + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "end:axis2_tcp_worker_process_request"); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_tcp_worker_set_svr_port( + axis2_tcp_worker_t * worker, + const axutil_env_t * env, + int port) +{ + worker->svr_port = port; + return AXIS2_SUCCESS; +} diff --git a/src/core/transport/tcp/sender/Makefile.am b/src/core/transport/tcp/sender/Makefile.am new file mode 100644 index 0000000..1e35b3d --- /dev/null +++ b/src/core/transport/tcp/sender/Makefile.am @@ -0,0 +1,26 @@ +lib_LTLIBRARIES = libaxis2_tcp_sender.la + +libaxis2_tcp_sender_la_SOURCES = tcp_transport_sender.c + +libaxis2_tcp_sender_la_LIBADD = $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la\ + $(top_builddir)/src/core/transport/http/util/libaxis2_http_util.la\ + $(top_builddir)/axiom/src/om/libaxis2_axiom.la\ + $(top_builddir)/util/src/libaxutil.la\ + $(LIBCURL_LIBS)\ + $(SSL_LIBS) + + +libaxis2_tcp_sender_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/transport\ + -I$(top_builddir)/src/core/transport/tcp \ + -I$(top_builddir)/src/core/transport/tcp/sender/libcurl \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/util/include \ + -I.. \ + -I$(top_builddir)/axiom/include diff --git a/src/core/transport/tcp/sender/tcp_transport_sender.c b/src/core/transport/tcp/sender/tcp_transport_sender.c new file mode 100644 index 0000000..62f34d3 --- /dev/null +++ b/src/core/transport/tcp/sender/tcp_transport_sender.c @@ -0,0 +1,477 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * tcp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define RES_BUFF 50 + +/** + * TCP Transport Sender struct impl + * Axis2 TCP Transport Sender impl + */ + +typedef struct axis2_tcp_transport_sender_impl +{ + axis2_transport_sender_t transport_sender; + int connection_timeout; + int so_timeout; +} axis2_tcp_transport_sender_impl_t; + +#define AXIS2_INTF_TO_IMPL(transport_sender) \ + ((axis2_tcp_transport_sender_impl_t *) \ + (transport_sender)) + +/***************************** Function headers *******************************/ +axis2_status_t AXIS2_CALL +axis2_tcp_transport_sender_invoke( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + +axis2_status_t AXIS2_CALL +axis2_tcp_transport_sender_clean_up( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + +axis2_status_t AXIS2_CALL +axis2_tcp_transport_sender_init( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_transport_out_desc_t * out_desc); + +axis2_status_t AXIS2_CALL +axis2_tcp_transport_sender_write_message( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_endpoint_ref_t * epr, + axiom_soap_envelope_t * out, + axiom_output_t * om_output); + +void AXIS2_CALL axis2_tcp_transport_sender_free( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env); + +static const axis2_transport_sender_ops_t tcp_transport_sender_ops_var = { + axis2_tcp_transport_sender_init, axis2_tcp_transport_sender_invoke, + axis2_tcp_transport_sender_clean_up, axis2_tcp_transport_sender_free }; + +axis2_transport_sender_t *AXIS2_CALL +axis2_tcp_transport_sender_create( + const axutil_env_t * env) +{ + axis2_tcp_transport_sender_impl_t *transport_sender_impl = NULL; + AXIS2_ENV_CHECK(env, NULL); + + transport_sender_impl = (axis2_tcp_transport_sender_impl_t *)AXIS2_MALLOC(env->allocator, + sizeof(axis2_tcp_transport_sender_impl_t)); + + if(!transport_sender_impl) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + transport_sender_impl->connection_timeout = AXIS2_TCP_DEFAULT_CONNECTION_TIMEOUT; + transport_sender_impl->so_timeout = AXIS2_TCP_DEFAULT_SO_TIMEOUT; + transport_sender_impl->transport_sender.ops = &tcp_transport_sender_ops_var; + return &(transport_sender_impl->transport_sender); +} + +void AXIS2_CALL +axis2_tcp_transport_sender_free( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env) +{ + axis2_tcp_transport_sender_impl_t *transport_sender_impl = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + transport_sender_impl = AXIS2_INTF_TO_IMPL(transport_sender); + AXIS2_FREE(env->allocator, transport_sender_impl); + return; +} + +axis2_status_t AXIS2_CALL +axis2_tcp_transport_sender_invoke( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_op_t *op = NULL; + const axis2_char_t *mep_uri = NULL; + axis2_bool_t is_server = AXIS2_TRUE; + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_xml_writer_t *xml_writer = NULL; + axiom_output_t *om_output = NULL; + axis2_char_t *buffer = NULL; + axutil_stream_t *out_stream = NULL; + int buffer_size = 0; + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_conf_t *conf = NULL; + axis2_transport_out_desc_t *trans_desc = NULL; + axutil_param_t *write_xml_declaration_param = NULL; + axutil_hash_t *transport_attrs = NULL; + axis2_bool_t write_xml_declaration = AXIS2_FALSE; + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "start:tcp transport sender invoke"); + + op = axis2_msg_ctx_get_op(msg_ctx, env); + mep_uri = axis2_op_get_msg_exchange_pattern(op, env); + + is_server = axis2_msg_ctx_get_server_side(msg_ctx, env); + + soap_envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + + xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + if(!xml_writer) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[tcp]Failed to create XML writer"); + return AXIS2_FAILURE; + } + + om_output = axiom_output_create(env, xml_writer); + if(!om_output) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[tcp]Failed to create OM output"); + axiom_xml_writer_free(xml_writer, env); + xml_writer = NULL; + return AXIS2_FAILURE; + } + + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx) + { + conf = axis2_conf_ctx_get_conf(conf_ctx, env); + } + if(conf) + { + trans_desc = axis2_conf_get_transport_out(conf, env, AXIS2_TRANSPORT_ENUM_TCP); + } + if(trans_desc) + { + write_xml_declaration_param = axutil_param_container_get_param( + axis2_transport_out_desc_param_container(trans_desc, env), env, AXIS2_XML_DECLARATION); + } + if(write_xml_declaration_param) + { + transport_attrs = axutil_param_get_attributes(write_xml_declaration_param, env); + if(transport_attrs) + { + axutil_generic_obj_t *obj = NULL; + axiom_attribute_t *write_xml_declaration_attr = NULL; + axis2_char_t *write_xml_declaration_attr_value = NULL; + + obj + = axutil_hash_get(transport_attrs, AXIS2_ADD_XML_DECLARATION, AXIS2_HASH_KEY_STRING); + if(obj) + { + write_xml_declaration_attr = (axiom_attribute_t *)axutil_generic_obj_get_value(obj, + env); + } + if(write_xml_declaration_attr) + { + write_xml_declaration_attr_value = axiom_attribute_get_value( + write_xml_declaration_attr, env); + } + if(write_xml_declaration_attr_value && 0 == axutil_strcasecmp( + write_xml_declaration_attr_value, AXIS2_VALUE_TRUE)) + { + write_xml_declaration = AXIS2_TRUE; + } + } + } + + if(write_xml_declaration) + { + axiom_output_write_xml_version_encoding(om_output, env); + } + + axiom_soap_envelope_serialize(soap_envelope, env, om_output, AXIS2_FALSE); + + buffer = (axis2_char_t *)axiom_xml_writer_get_xml(xml_writer, env); + if(!buffer) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[tcp]Failed to serialize the SOAP envelope"); + return AXIS2_FAILURE; + } + buffer_size = axiom_xml_writer_get_xml_size(xml_writer, env); + buffer[buffer_size] = 0; + if(is_server) + { + out_stream = axis2_msg_ctx_get_transport_out_stream(msg_ctx, env); + axutil_stream_write(out_stream, env, buffer, buffer_size); + } + else + { + axis2_endpoint_ref_t *to = NULL; + axutil_url_t *to_url = NULL; + const axis2_char_t *to_str = NULL; + const axis2_char_t *host = NULL; + int port = 0; + int socket = -1; + axutil_stream_t *stream; + int write = -1; + int read = -1; + axis2_char_t buff[1]; + axis2_char_t *res_buffer = (axis2_char_t *)AXIS2_MALLOC(env->allocator, RES_BUFF); + int res_size = 0; + int size = 0; + axiom_xml_reader_t *reader = NULL; + axiom_stax_builder_t *builder = NULL; + axiom_soap_builder_t *soap_builder = NULL; + axiom_soap_envelope_t *soap_envelope = NULL; + + to = axis2_msg_ctx_get_to(msg_ctx, env); + + if(!to) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "To epr not presant"); + return AXIS2_FAILURE; + } + + to_str = axis2_endpoint_ref_get_address(to, env); + if(!to_str) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "unable to convert epr to string"); + return AXIS2_FAILURE; + } + + to_url = axutil_url_parse_string(env, to_str); + + if(!to_url) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "unable to parser string to url"); + return AXIS2_FAILURE; + } + + host = axutil_url_get_host(to_url, env); + if(!host) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "retrieving host failed"); + return AXIS2_FAILURE; + } + + port = axutil_url_get_port(to_url, env); + if(!port) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "retrieving port failed"); + return AXIS2_FAILURE; + } + socket = (int)axutil_network_handler_open_socket(env, (char *)host, port); + if(!socket) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "socket creation failed"); + return AXIS2_FAILURE; + } + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "open socket for host:%s port:%d", host, port); + + stream = axutil_stream_create_socket(env, socket); + if(!stream) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "stream creation failed"); + return AXIS2_FAILURE; + } + + write = axutil_stream_write(stream, env, buffer, buffer_size); + if(write < 0) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "stream write error"); + return AXIS2_FAILURE; + } + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "stream wrote soap msg: %s", buffer); + write = axutil_stream_write(stream, env, "\r\n\r\n", 4); + size = RES_BUFF; + while((read = axutil_stream_read(stream, env, &buff, 1)) > 0) + { + if(res_size >= size) + { + axis2_char_t *tmp_buff = NULL; + size <<= 2; + tmp_buff = AXIS2_MALLOC(env->allocator, size); + memcpy(tmp_buff, res_buffer, res_size); + AXIS2_FREE(env->allocator, res_buffer); + res_buffer = tmp_buff; + } + memcpy(res_buffer + res_size, buff, 1); + res_size++; + } + + axutil_network_handler_close_socket(env, stream->socket); + axutil_stream_close(stream, env); + axutil_stream_free(stream, env); + + AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "%s", res_buffer); + + reader = axiom_xml_reader_create_for_memory(env, res_buffer, (res_size - 1), NULL, + AXIS2_XML_PARSER_TYPE_BUFFER); + + if(!reader) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to create XML reader"); + return AXIS2_FAILURE; + } + + builder = axiom_stax_builder_create(env, reader); + if(!builder) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to create Stax builder"); + return AXIS2_FAILURE; + } + + soap_builder = axiom_soap_builder_create(env, builder, + AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI); + if(!soap_builder) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to create SOAP builder"); + return AXIS2_FAILURE; + } + soap_envelope = axiom_soap_builder_get_soap_envelope(soap_builder, env); + + if(!soap_envelope) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to create SOAP envelope"); + return AXIS2_FAILURE; + } + + axis2_msg_ctx_set_response_soap_envelope(msg_ctx, env, soap_envelope); + + } + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "end:tcp transport sender invoke"); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_tcp_transport_sender_clean_up( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + /* + * Clean up is not used. If the tcp sender needs + * to be cleaned up it should be done here. + */ + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_tcp_transport_sender_init( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_transport_out_desc_t * out_desc) +{ + axis2_char_t *temp = NULL; + axutil_param_t *temp_param = NULL; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, conf_ctx, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, out_desc, AXIS2_FAILURE); + + temp_param = axutil_param_container_get_param(axis2_transport_out_desc_param_container( + out_desc, env), env, AXIS2_TCP_SO_TIMEOUT); + if(temp_param) + { + temp = axutil_param_get_value(temp_param, env); + } + if(temp) + { + AXIS2_INTF_TO_IMPL(transport_sender)->so_timeout = AXIS2_ATOI(temp); + } + temp = (axis2_char_t *)axutil_param_container_get_param( + axis2_transport_out_desc_param_container(out_desc, env), env, AXIS2_TCP_CONNECTION_TIMEOUT); + if(temp_param) + { + temp = axutil_param_get_value(temp_param, env); + } + if(temp) + { + AXIS2_INTF_TO_IMPL(transport_sender)->connection_timeout = AXIS2_ATOI(temp); + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_tcp_transport_sender_write_message( + axis2_transport_sender_t * transport_sender, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axis2_endpoint_ref_t * epr, + axiom_soap_envelope_t * out, + axiom_output_t * om_output) +{ + + return AXIS2_TRUE; +} + +/** + * Following block distinguish the exposed part of the dll. + */ + +/* When building for static deployment, give the get and remove methods + * unique names. This avoids having the linker fail with duplicate symbol + * errors. + */ + +AXIS2_EXPORT int +#ifndef AXIS2_STATIC_DEPLOY +axis2_get_instance( +#else + axis2_tcp_transport_sender_get_instance( +#endif + struct axis2_transport_sender **inst, + const axutil_env_t * env) +{ + *inst = axis2_tcp_transport_sender_create(env); + if(!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +#ifndef AXIS2_STATIC_DEPLOY +axis2_remove_instance( +#else + axis2_tcp_transport_sender_remove_instance( +#endif + axis2_transport_sender_t * inst, + const axutil_env_t * env) +{ + if(inst) + { + AXIS2_TRANSPORT_SENDER_FREE(inst, env); + } + return AXIS2_SUCCESS; +} diff --git a/src/core/transport/tcp/server/Makefile.am b/src/core/transport/tcp/server/Makefile.am new file mode 100644 index 0000000..5d7b263 --- /dev/null +++ b/src/core/transport/tcp/server/Makefile.am @@ -0,0 +1 @@ +SUBDIRS=simple_tcp_server diff --git a/src/core/transport/tcp/server/simple_tcp_server/Makefile.am b/src/core/transport/tcp/server/simple_tcp_server/Makefile.am new file mode 100644 index 0000000..1dafbad --- /dev/null +++ b/src/core/transport/tcp/server/simple_tcp_server/Makefile.am @@ -0,0 +1,30 @@ +prgbindir=$(bindir) +prgbin_PROGRAMS = axis2_tcp_server +SUBDIRS = +AM_CFLAGS = -g -pthread +axis2_tcp_server_SOURCES = tcp_server_main.c + +axis2_tcp_server_LDADD = $(LDFLAGS) \ + $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la \ + $(top_builddir)/axiom/src/om/libaxis2_axiom.la \ + $(top_builddir)/util/src/libaxutil.la \ + $(top_builddir)/axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + $(top_builddir)/src/core/description/libaxis2_description.la \ + $(top_builddir)/src/core/deployment/libaxis2_deployment.la \ + $(top_builddir)/src/core/context/libaxis2_context.la \ + $(top_builddir)/src/core/clientapi/libaxis2_clientapi.la \ + $(top_builddir)/src/core/engine/libaxis2_engine.la \ + $(top_builddir)/src/core/transport/tcp/sender/libaxis2_tcp_sender.la \ + $(top_builddir)/src/core/transport/tcp/receiver/libaxis2_tcp_receiver.la \ + $(top_builddir)/neethi/src/libneethi.la \ + -lpthread + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/description\ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/deployment\ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/util/include \ + -I../.. \ + -I$(top_builddir)/axiom/include diff --git a/src/core/transport/tcp/server/simple_tcp_server/tcp_server_main.c b/src/core/transport/tcp/server/simple_tcp_server/tcp_server_main.c new file mode 100644 index 0000000..dc2dbf9 --- /dev/null +++ b/src/core/transport/tcp/server/simple_tcp_server/tcp_server_main.c @@ -0,0 +1,262 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * tcp://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef AXIS2_TCP_SERVER_LOG_FILE_NAME +#define AXIS2_TCP_SERVER_LOG_FILE_NAME "axis2_tcp_server.log" +#endif + +#ifndef AXIS2_TCP_SERVER_PORT +#define AXIS2_TCP_SERVER_PORT 9091 +#endif + +#ifndef AXIS2_TCP_SERVER_REPO_PATH +#define AXIS2_TCP_SERVER_REPO_PATH "../" +#endif + +axutil_env_t *system_env = NULL; +axis2_transport_receiver_t *server = NULL; +int axis2_tcp_socket_read_timeout = 60000; + +/***************************** Function headers *******************************/ +axutil_env_t * +init_syetem_env( + axutil_allocator_t * allocator, + const axis2_char_t * log_file); + +void +system_exit( + axutil_env_t * env, + int status); + +void +usage( + axis2_char_t * prog_name); + +void +sig_handler( + int signal); + +/***************************** End of function headers ************************/ +axutil_env_t * +init_syetem_env( + axutil_allocator_t * allocator, + const axis2_char_t * log_file) +{ + axutil_error_t *error = axutil_error_create(allocator); + axutil_log_t *log = axutil_log_create(allocator, NULL, log_file); + axutil_thread_pool_t *thread_pool = axutil_thread_pool_init(allocator); + /* We need to init the parser in main thread before spawning child + * threads + */ + axiom_xml_reader_init(); + return axutil_env_create_with_error_log_thread_pool(allocator, error, log, thread_pool); +} + +void +system_exit( + axutil_env_t * env, + int status) +{ + axutil_allocator_t *allocator = NULL; + if(server) + { + axis2_transport_receiver_free(server, system_env); + } + if(env) + { + allocator = env->allocator; + axutil_env_free(env); + } + axiom_xml_reader_cleanup(); + exit(status); +} + +int +main( + int argc, + char *argv[]) +{ + axutil_allocator_t *allocator = NULL; + axutil_env_t *env = NULL; + extern char *optarg; + extern int optopt; + int c; + int log_file_size = AXUTIL_LOG_FILE_SIZE; + axutil_log_levels_t log_level = AXIS2_LOG_LEVEL_DEBUG; + const axis2_char_t *log_file = AXIS2_TCP_SERVER_LOG_FILE_NAME; + int port = AXIS2_TCP_SERVER_PORT; + const axis2_char_t *repo_path = AXIS2_TCP_SERVER_REPO_PATH; + + while((c = AXIS2_GETOPT(argc, argv, ":p:r:ht:l:s:f:")) != -1) + { + + switch(c) + { + case 'p': + port = AXIS2_ATOI(optarg); + break; + case 'r': + repo_path = optarg; + break; + case 't': + axis2_tcp_socket_read_timeout = AXIS2_ATOI(optarg) * 1000; + break; + case 'l': + log_level = AXIS2_ATOI(optarg); + if(log_level < AXIS2_LOG_LEVEL_CRITICAL) + log_level = AXIS2_LOG_LEVEL_CRITICAL; + if(log_level > AXIS2_LOG_LEVEL_TRACE) + log_level = AXIS2_LOG_LEVEL_TRACE; + break; + case 's': + log_file_size = 1024 * 1024 * AXIS2_ATOI(optarg); + break; + case 'f': + log_file = optarg; + break; + case 'h': + usage(argv[0]); + return 0; + case ':': + fprintf(stderr, "\nOption -%c requires an operand\n", optopt); + usage(argv[0]); + return -1; + case '?': + if(isprint(optopt)) + fprintf(stderr, "\nUnknown option `-%c'.\n", optopt); + usage(argv[0]); + return -1; + } + } + + allocator = axutil_allocator_init(NULL); + if(!allocator) + { + system_exit(NULL, -1); + } + env = init_syetem_env(allocator, log_file); + env->log->level = log_level; + env->log->size = log_file_size; + axutil_error_init(); + system_env = env; + +#ifndef WIN32 + signal(SIGINT, sig_handler); + signal(SIGPIPE, sig_handler); +#endif + + AXIS2_LOG_INFO(env->log, "Starting Axis2 TCP server...."); + AXIS2_LOG_INFO(env->log, "Server port : %d", port); + AXIS2_LOG_INFO(env->log, "Repo location : %s", repo_path); + AXIS2_LOG_INFO(env->log, "Read Timeout : %d ms", axis2_tcp_socket_read_timeout); + + server = axis2_tcp_server_create(env, repo_path, port); + if(!server) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Server creation failed: Error code:" " %d :: %s", + env->error->error_number, AXIS2_ERROR_GET_MESSAGE(env->error)); + system_exit(env, -1); + + } + printf("Started Simple Axis2 TCP Server ...\n"); + if(axis2_transport_receiver_start(server, env) == AXIS2_FAILURE) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Server start failed: Error code:" " %d :: %s", + env->error->error_number, AXIS2_ERROR_GET_MESSAGE(env->error)); + system_exit(env, -1); + } + return 0; +} + +void +usage( + axis2_char_t * prog_name) +{ + fprintf(stdout, "\n Usage : %s", prog_name); + fprintf(stdout, " [-p PORT]"); + fprintf(stdout, " [-t TIMEOUT]"); + fprintf(stdout, " [-r REPO_PATH]"); + fprintf(stdout, " [-l LOG_LEVEL]"); + fprintf(stdout, " [-f LOG_FILE]\n"); + fprintf(stdout, " [-s LOG_FILE_SIZE]\n"); + fprintf(stdout, " Options :\n"); + fprintf(stdout, "\t-p PORT \t port number to use, default port is %d\n", AXIS2_TCP_SERVER_PORT); + fprintf(stdout, "\t-r REPO_PATH \t repository path, default is ../\n"); + fprintf(stdout, "\t-t TIMEOUT\t socket read timeout, default is 30 seconds\n"); + fprintf(stdout, "\t-l LOG_LEVEL\t log level, available log levels:" + "\n\t\t\t 0 - critical 1 - errors 2 - warnings" + "\n\t\t\t 3 - information 4 - debug 5- user 6 - trace" + "\n\t\t\t Default log level is 4(debug).\n"); +#ifndef WIN32 + fprintf(stdout, "\t-f LOG_FILE\t log file, default is $AXIS2C_HOME/logs/axis2.log" + "\n\t\t\t or axis2.log in current folder if AXIS2C_HOME not set\n"); +#else + fprintf(stdout, + "\t-f LOG_FILE\t log file, default is %%AXIS2C_HOME%%\\logs\\axis2.log" + "\n\t\t\t or axis2.log in current folder if AXIS2C_HOME not set\n"); +#endif + fprintf(stdout, + "\t-s LOG_FILE_SIZE\t Maximum log file size in mega bytes, default maximum size is 1MB.\n"); + fprintf(stdout, " Help :\n\t-h \t display this help screen.\n\n"); +} + +/** + * Signal handler + */ +#ifndef WIN32 + +void +sig_handler( + int signal) +{ + switch(signal) + { + case SIGINT: + { + AXIS2_LOG_INFO(system_env->log, "Received signal SIGINT. Server " + "shutting down"); + axis2_tcp_server_stop(server, system_env); + AXIS2_LOG_INFO(system_env->log, "Shutdown complete ..."); + system_exit(system_env, 0); + } + case SIGPIPE: + { + AXIS2_LOG_INFO(system_env->log, "Received signal SIGPIPE. Client " + "request serve aborted"); + return; + } + case SIGSEGV: + { + fprintf(stderr, "Received deadly signal SIGSEGV. Terminating\n"); + _exit(-1); + } + } +} +#endif diff --git a/src/core/transport/transport_receiver.c b/src/core/transport/transport_receiver.c new file mode 100644 index 0000000..009d24b --- /dev/null +++ b/src/core/transport/transport_receiver.c @@ -0,0 +1,114 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +AXIS2_EXTERN void AXIS2_CALL +axis2_transport_receiver_free( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env) +{ + (transport_receiver->ops)->free(transport_receiver, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_transport_receiver_init( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env, + struct axis2_conf_ctx *conf_ctx, + struct axis2_transport_in_desc *transport_in) +{ + return (transport_receiver->ops)->init(transport_receiver, env, conf_ctx, transport_in); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_transport_receiver_start( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env) +{ + return (transport_receiver->ops)->start(transport_receiver, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_transport_receiver_stop( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env) +{ + return (transport_receiver->ops)->stop(transport_receiver, env); +} + +AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL +axis2_transport_receiver_get_reply_to_epr( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env, + const axis2_char_t * svc_name) +{ + return (transport_receiver->ops)->get_reply_to_epr(transport_receiver, env, svc_name); +} + +AXIS2_EXTERN axis2_endpoint_ref_t *AXIS2_CALL +axis2_transport_receiver_get_epr_for_service( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env, + const axis2_char_t * svc_name) +{ + return (transport_receiver->ops)->get_epr_for_service(transport_receiver, env, svc_name); +} + +AXIS2_EXTERN axis2_char_t* AXIS2_CALL +axis2_transport_receiver_get_server_ip( +axis2_transport_receiver_t *transport_receiver, +const axutil_env_t *env) +{ + return (transport_receiver->ops)->get_server_ip(transport_receiver, env); +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_transport_receiver_set_server_ip( +axis2_transport_receiver_t *transport_receiver, +const axutil_env_t *env, + axis2_char_t *serverip) +{ + (transport_receiver->ops)->set_server_ip(transport_receiver, env, serverip); +} + + +AXIS2_EXTERN struct axis2_conf_ctx *AXIS2_CALL +axis2_transport_receiver_get_conf_ctx( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env) +{ + return (transport_receiver)->ops->get_conf_ctx(transport_receiver, env); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_transport_receiver_is_running( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env) +{ + return (transport_receiver)->ops->is_running(transport_receiver, env); +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_transport_receiver_set_is_application_client_side( + axis2_transport_receiver_t * transport_receiver, + const axutil_env_t * env, + axis2_bool_t is_application_client_side) +{ + (transport_receiver)->ops->set_is_application_client_side(transport_receiver, env, + is_application_client_side); +} diff --git a/src/core/util/Makefile.am b/src/core/util/Makefile.am new file mode 100644 index 0000000..e5609a2 --- /dev/null +++ b/src/core/util/Makefile.am @@ -0,0 +1,9 @@ +noinst_LTLIBRARIES = libaxis2_core_utils.la +#noinst_HEADERS = axis2_core_utils.h + +libaxis2_core_utils_la_SOURCES = core_utils.c + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include diff --git a/src/core/util/core_utils.c b/src/core/util/core_utils.c new file mode 100644 index 0000000..5ae9f31 --- /dev/null +++ b/src/core/util/core_utils.c @@ -0,0 +1,1635 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +/* internal structure to keep the rest map in a multi level hash */ +typedef struct +{ + /* the structure will keep as many as following fields */ + + /* if the mapped value is directly the operation */ + axis2_op_t *op_desc; + + /* if the mapped value is a constant, this keeps a hash map of + possible constants => corrosponding map_internal structure */ + axutil_hash_t *consts_map; + + /* if the mapped value is a param, this keeps a hash map of + possible param_values => corrosponding_map_internal structre */ + axutil_hash_t *params_map; + +} axutil_core_utils_map_internal_t; + +/* some functions to use internally in handling rest map */ +/* infer op from the live url */ +axis2_op_t * +axis2_core_utils_infer_op_from_parent_rest_map( + const axutil_env_t *env, + axutil_hash_t *rest_map, + axis2_char_t *live_url, + axutil_array_list_t *param_keys, + axutil_array_list_t *param_values); + +/* build the restmap recursively - internal function*/ +axis2_status_t AXIS2_CALL +axis2_core_utils_internal_build_rest_map_recursively( + const axutil_env_t * env, + axis2_char_t * url, + axutil_core_utils_map_internal_t *mapping_struct, + axis2_op_t *op_desc); + +/* infer op from the live url recursively */ +axis2_op_t *AXIS2_CALL +axis2_core_utils_internal_infer_op_from_rest_map_recursively( + const axutil_env_t *env, + const axutil_core_utils_map_internal_t *parent_mapping_struct, + axis2_char_t *live_url, + axutil_array_list_t *param_keys, + axutil_array_list_t *param_values); + +/* match a pattern with a url component */ +axis2_status_t +axis2_core_utils_match_url_component_with_pattern( + const axutil_env_t *env, + axis2_char_t *pattern, + axis2_char_t *url_component, + axutil_array_list_t *param_keys, + axutil_array_list_t *param_values); + +AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL +axis2_core_utils_create_out_msg_ctx( + const axutil_env_t * env, + axis2_msg_ctx_t * in_msg_ctx) +{ + axis2_ctx_t *ctx = NULL; + axis2_msg_ctx_t *new_msg_ctx = NULL; + axis2_conf_ctx_t *conf_ctx = NULL; + axis2_transport_in_desc_t *transport_in = NULL; + axis2_transport_out_desc_t *transport_out = NULL; + axis2_msg_info_headers_t *old_msg_info_headers = NULL; + axis2_msg_info_headers_t *msg_info_headers = NULL; + axis2_endpoint_ref_t *reply_to = NULL; + axis2_endpoint_ref_t *fault_to = NULL; + axis2_endpoint_ref_t *to = NULL; + const axis2_char_t *msg_id = NULL; + axis2_relates_to_t *relates_to = NULL; + const axis2_char_t *action = NULL; + axis2_op_ctx_t *op_ctx = NULL; + axis2_svc_ctx_t *svc_ctx = NULL; + axis2_bool_t doing_rest = AXIS2_FALSE; + axis2_bool_t doing_mtom = AXIS2_FALSE; + axis2_bool_t server_side = AXIS2_FALSE; + axis2_svc_grp_ctx_t *svc_grp_ctx = NULL; + axis2_char_t *msg_uuid = NULL; + axutil_stream_t *out_stream = NULL; + axutil_param_t *expose_headers_param = NULL; + axis2_bool_t expose_headers = AXIS2_FALSE; + + AXIS2_PARAM_CHECK(env->error, in_msg_ctx, NULL); + + conf_ctx = axis2_msg_ctx_get_conf_ctx(in_msg_ctx, env); + transport_in = axis2_msg_ctx_get_transport_in_desc(in_msg_ctx, env); + transport_out = axis2_msg_ctx_get_transport_out_desc(in_msg_ctx, env); + + new_msg_ctx = axis2_msg_ctx_create(env, conf_ctx, transport_in, transport_out); + if(!new_msg_ctx) + { + return NULL; + } + + if(transport_in) + { + expose_headers_param = axutil_param_container_get_param( + axis2_transport_in_desc_param_container(transport_in, env), env, AXIS2_EXPOSE_HEADERS); + } + if(expose_headers_param) + { + axis2_char_t *expose_headers_value = NULL; + expose_headers_value = axutil_param_get_value(expose_headers_param, env); + if(expose_headers_value && 0 == axutil_strcasecmp(expose_headers_value, AXIS2_VALUE_TRUE)) + { + expose_headers = AXIS2_TRUE; + } + } + if(expose_headers) + { + axis2_msg_ctx_set_transport_headers(new_msg_ctx, env, + axis2_msg_ctx_extract_transport_headers(in_msg_ctx, env)); + } + axis2_msg_ctx_set_http_accept_record_list(new_msg_ctx, env, + axis2_msg_ctx_extract_http_accept_record_list(in_msg_ctx, env)); + axis2_msg_ctx_set_http_accept_charset_record_list(new_msg_ctx, env, + axis2_msg_ctx_extract_http_accept_charset_record_list(in_msg_ctx, env)); + axis2_msg_ctx_set_http_accept_language_record_list(new_msg_ctx, env, + axis2_msg_ctx_extract_http_accept_language_record_list(in_msg_ctx, env)); + + old_msg_info_headers = axis2_msg_ctx_get_msg_info_headers(in_msg_ctx, env); + if(!old_msg_info_headers) + { + return NULL; + } + msg_info_headers = axis2_msg_ctx_get_msg_info_headers(new_msg_ctx, env); + if(!msg_info_headers) + { + /* if there is no msg info header in ew msg ctx, then create one */ + msg_info_headers = axis2_msg_info_headers_create(env, NULL, NULL); + if(!msg_info_headers) + return NULL; + axis2_msg_ctx_set_msg_info_headers(new_msg_ctx, env, msg_info_headers); + } + + msg_uuid = axutil_uuid_gen(env); + axis2_msg_info_headers_set_message_id(msg_info_headers, env, msg_uuid); + if(msg_uuid) + { + AXIS2_FREE(env->allocator, msg_uuid); + msg_uuid = NULL; + } + reply_to = axis2_msg_info_headers_get_reply_to(old_msg_info_headers, env); + axis2_msg_info_headers_set_to(msg_info_headers, env, reply_to); + + fault_to = axis2_msg_info_headers_get_fault_to(old_msg_info_headers, env); + axis2_msg_info_headers_set_fault_to(msg_info_headers, env, fault_to); + + to = axis2_msg_info_headers_get_to(old_msg_info_headers, env); + axis2_msg_info_headers_set_from(msg_info_headers, env, to); + + msg_id = axis2_msg_info_headers_get_message_id(old_msg_info_headers, env); + + /* we can create with default Relates to namespace. + Actual namespace based on addressing version will be created in addressing out handler */ + relates_to = axis2_relates_to_create(env, msg_id, + AXIS2_WSA_RELATES_TO_RELATIONSHIP_TYPE_DEFAULT_VALUE); + axis2_msg_info_headers_set_relates_to(msg_info_headers, env, relates_to); + + action = axis2_msg_info_headers_get_action(old_msg_info_headers, env); + axis2_msg_info_headers_set_action(msg_info_headers, env, action); + + op_ctx = axis2_msg_ctx_get_op_ctx(in_msg_ctx, env); + axis2_msg_ctx_set_op_ctx(new_msg_ctx, env, op_ctx); + + svc_ctx = axis2_msg_ctx_get_svc_ctx(in_msg_ctx, env); + axis2_msg_ctx_set_svc_ctx(new_msg_ctx, env, svc_ctx); + + ctx = axis2_msg_ctx_get_base(in_msg_ctx, env); + if(ctx) + { + axis2_ctx_t *new_ctx = axis2_msg_ctx_get_base(new_msg_ctx, env); + if(new_ctx) + { + axis2_ctx_set_property_map(new_ctx, env, axis2_ctx_get_property_map(ctx, env)); + } + } + + out_stream = axis2_msg_ctx_get_transport_out_stream(in_msg_ctx, env); + axis2_msg_ctx_set_transport_out_stream(new_msg_ctx, env, out_stream); + axis2_msg_ctx_set_out_transport_info(new_msg_ctx, env, axis2_msg_ctx_get_out_transport_info( + in_msg_ctx, env)); + + /* Setting the character set encoding */ + doing_rest = axis2_msg_ctx_get_doing_rest(in_msg_ctx, env); + axis2_msg_ctx_set_doing_rest(new_msg_ctx, env, doing_rest); + + doing_mtom = axis2_msg_ctx_get_doing_mtom(in_msg_ctx, env); + axis2_msg_ctx_set_doing_mtom(new_msg_ctx, env, doing_mtom); + + server_side = axis2_msg_ctx_get_server_side(in_msg_ctx, env); + axis2_msg_ctx_set_server_side(new_msg_ctx, env, server_side); + + svc_grp_ctx = axis2_msg_ctx_get_svc_grp_ctx(in_msg_ctx, env); + axis2_msg_ctx_set_svc_grp_ctx(new_msg_ctx, env, svc_grp_ctx); + + axis2_msg_ctx_set_is_soap_11(new_msg_ctx, env, axis2_msg_ctx_get_is_soap_11(in_msg_ctx, env)); + axis2_msg_ctx_set_keep_alive(new_msg_ctx, env, axis2_msg_ctx_is_keep_alive(in_msg_ctx, env)); + + axis2_msg_ctx_set_charset_encoding(new_msg_ctx, env, axis2_msg_ctx_get_charset_encoding( + in_msg_ctx, env)); + + return new_msg_ctx; +} + +AXIS2_EXTERN void AXIS2_CALL +axis2_core_utils_reset_out_msg_ctx( + const axutil_env_t * env, + axis2_msg_ctx_t * out_msg_ctx) +{ + axis2_msg_info_headers_t *msg_info_headers = NULL; + if(!out_msg_ctx) + return; + + msg_info_headers = axis2_msg_ctx_get_msg_info_headers(out_msg_ctx, env); + if(msg_info_headers) + { + axis2_msg_info_headers_set_to(msg_info_headers, env, NULL); + axis2_msg_info_headers_set_fault_to(msg_info_headers, env, NULL); + axis2_msg_info_headers_set_from(msg_info_headers, env, NULL); + axis2_msg_info_headers_set_reply_to(msg_info_headers, env, NULL); + } + + axis2_msg_ctx_set_op_ctx(out_msg_ctx, env, NULL); + axis2_msg_ctx_set_svc_ctx(out_msg_ctx, env, NULL); + axis2_msg_ctx_reset_transport_out_stream(out_msg_ctx, env); + axis2_msg_ctx_reset_out_transport_info(out_msg_ctx, env); + axis2_msg_ctx_set_svc_grp_ctx(out_msg_ctx, env, NULL); + + return; +} + +AXIS2_EXTERN axutil_qname_t *AXIS2_CALL +axis2_core_utils_get_module_qname( + const axutil_env_t * env, + const axis2_char_t * name, + const axis2_char_t * version) +{ + axutil_qname_t *ret_qname = NULL; + AXIS2_PARAM_CHECK(env->error, name, NULL); + + if(version && 0 != axutil_strlen(version)) + { + axis2_char_t *mod_name1 = NULL; + axis2_char_t *mod_name = NULL; + mod_name1 = axutil_stracat(env, name, "-"); + if(!mod_name1) + { + return NULL; + } + mod_name = axutil_stracat(env, mod_name1, version); + if(!mod_name) + { + AXIS2_FREE(env->allocator, mod_name1); + mod_name1 = NULL; + return NULL; + } + ret_qname = axutil_qname_create(env, mod_name, NULL, NULL); + AXIS2_FREE(env->allocator, mod_name); + AXIS2_FREE(env->allocator, mod_name1); + return ret_qname; + } + ret_qname = axutil_qname_create(env, name, NULL, NULL); + return ret_qname; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_core_utils_calculate_default_module_version( + const axutil_env_t * env, + axutil_hash_t * modules_map, + axis2_conf_t * axis_conf) +{ + axutil_hash_t *default_modules = NULL; + axutil_hash_index_t *hi = NULL; + void *val = NULL; + + AXIS2_PARAM_CHECK(env->error, modules_map, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, axis_conf, AXIS2_FAILURE); + + default_modules = axutil_hash_make(env); + if(!default_modules) + { + return AXIS2_FAILURE; + } + for(hi = axutil_hash_first(modules_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axis2_module_desc_t *mod_desc = NULL; + + axutil_hash_this(hi, NULL, NULL, &val); + mod_desc = (axis2_module_desc_t *)val; + if(mod_desc) + { + const axutil_qname_t *module_qname = NULL; + module_qname = axis2_module_desc_get_qname(mod_desc, env); + if(module_qname) + { + axis2_char_t *mod_name_with_ver = NULL; + mod_name_with_ver = axutil_qname_get_localpart(module_qname, env); + if(mod_name_with_ver) + { + axis2_char_t *module_name_str = NULL; + axis2_char_t *module_ver_str = NULL; + axis2_char_t *current_def_ver = NULL; + + module_name_str = axis2_core_utils_get_module_name(env, mod_name_with_ver); + if(!module_name_str) + { + return AXIS2_FAILURE; + } + module_ver_str = axis2_core_utils_get_module_version(env, mod_name_with_ver); + current_def_ver = axutil_hash_get(default_modules, module_name_str, + AXIS2_HASH_KEY_STRING); + if(current_def_ver) + { + if(module_ver_str && AXIS2_TRUE == axis2_core_utils_is_latest_mod_ver(env, + module_ver_str, current_def_ver)) + { + axutil_hash_set(default_modules, module_name_str, + AXIS2_HASH_KEY_STRING, module_ver_str); + } + else + { + if(module_name_str) + { + AXIS2_FREE(env->allocator, module_name_str); + } + if(module_ver_str) + { + AXIS2_FREE(env->allocator, module_ver_str); + } + } + } + else + { + axutil_hash_set(default_modules, module_name_str, AXIS2_HASH_KEY_STRING, + module_ver_str); + } + + if(module_name_str) + { + AXIS2_FREE(env->allocator, module_name_str); + } + } + } + } + val = NULL; + } + + hi = NULL; + val = NULL; + for(hi = axutil_hash_first(default_modules, env); hi; hi = axutil_hash_next(env, hi)) + { + void *key_string = NULL; + axutil_hash_this(hi, (const void **)&key_string, NULL, &val); + if(key_string && NULL != val) + { + axis2_conf_add_default_module_version(axis_conf, env, (axis2_char_t *)key_string, + (axis2_char_t *)val); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Added default module" + " version : %s for module : %s", (axis2_char_t *)val, (axis2_char_t *)key_string); + } + } + + if(default_modules) + { + axutil_hash_free(default_modules, env); + default_modules = NULL; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_core_utils_get_module_name( + const axutil_env_t * env, + axis2_char_t * module_name) +{ + axis2_char_t version_seperator = '-'; + axis2_char_t *name = NULL; + axis2_char_t *version_sep_loc = NULL; + + AXIS2_PARAM_CHECK(env->error, module_name, NULL); + + name = axutil_strdup(env, module_name); + if(!name) + { + return NULL; + } + version_sep_loc = axutil_rindex(name, version_seperator); + if(version_sep_loc) + { + *version_sep_loc = '\0'; + } + return name; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axis2_core_utils_get_module_version( + const axutil_env_t * env, + axis2_char_t * module_name) +{ + axis2_char_t version_seperator = '-'; + axis2_char_t *version_sep_loc = NULL; + + AXIS2_PARAM_CHECK(env->error, module_name, NULL); + + version_sep_loc = axutil_rindex(module_name, version_seperator); + if(version_sep_loc) + { + return axutil_strdup(env, version_sep_loc + sizeof(axis2_char_t)); + } + return NULL; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axis2_core_utils_is_latest_mod_ver( + const axutil_env_t * env, + axis2_char_t * module_ver, + axis2_char_t * current_def_ver) +{ + double cur_ver = 0.0; + double mod_ver = 0.0; + AXIS2_PARAM_CHECK(env->error, module_ver, AXIS2_FALSE); + AXIS2_PARAM_CHECK(env->error, current_def_ver, AXIS2_FALSE); + cur_ver = atof(current_def_ver); + mod_ver = atof(module_ver); + if(mod_ver > cur_ver) + { + return AXIS2_TRUE; + } + return AXIS2_FAILURE; +} + +/* build the rest map - external function */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_core_utils_prepare_rest_mapping( + const axutil_env_t * env, + axis2_char_t * url, + axutil_hash_t *rest_map, + axis2_op_t *op_desc) +{ + + axis2_char_t *first_delimitter = NULL; + axis2_char_t *next_level_url = NULL; + axis2_char_t *mapping_key = NULL; + axutil_core_utils_map_internal_t *mapping_struct = NULL; + axis2_status_t status = AXIS2_SUCCESS; + axis2_char_t *bracket_start = NULL; + + first_delimitter = axutil_strchr(url, '/'); + + if(first_delimitter) + { + /* if there is another recursive level, + this will get the url of that level */ + next_level_url = first_delimitter + 1; + *first_delimitter = '\0'; + } + + if((bracket_start = axutil_strchr(url, '{'))) + { + /* we support multiple param per url component, + but we validate only one param */ + if(axutil_strchr(bracket_start, '}')) + { + /* this is validated */ + } + + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_URL_FORMAT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Invalid URL Format, no closing bracket in declaring parameters"); + return AXIS2_FAILURE; + } + } + + /* only constants are allowed in this level, so here url become the mapping_key */ + mapping_key = url; + + if(*mapping_key == '\0') /* empty mapping key */ + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_URL_FORMAT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid URL Format: empty mapping key"); + return AXIS2_FAILURE; + } + + /* retrieve or create the mapping structure for the key*/ + mapping_struct = axutil_hash_get(rest_map, mapping_key, AXIS2_HASH_KEY_STRING); + if(!mapping_struct) + { + mapping_struct = (axutil_core_utils_map_internal_t*)AXIS2_MALLOC(env->allocator, + sizeof(axutil_core_utils_map_internal_t)); + if(!mapping_struct) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + return AXIS2_FAILURE; + + } + memset(mapping_struct, 0, sizeof(axutil_core_utils_map_internal_t)); + + mapping_key = axutil_strdup(env, mapping_key); + axutil_hash_set(rest_map, mapping_key, AXIS2_HASH_KEY_STRING, mapping_struct); + } + + if(!next_level_url) + { + /* if no next level url, put the op_desc in right this level */ + if(mapping_struct->op_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_DUPLICATE_URL_REST_MAPPING, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Duplicate URL Mapping found"); + return AXIS2_FAILURE; + } + mapping_struct->op_desc = op_desc; + } + else + { + /* we have to build the map_internal structure recursively */ + status = axis2_core_utils_internal_build_rest_map_recursively(env, next_level_url, + mapping_struct, op_desc); + } + + return status; + +} + +/* build the restmap recursively - internal function*/ +axis2_status_t AXIS2_CALL +axis2_core_utils_internal_build_rest_map_recursively( + const axutil_env_t * env, + axis2_char_t * url, + axutil_core_utils_map_internal_t *parent_mapping_struct, + axis2_op_t *op_desc) +{ + + /* Here url is expected to be in the form + {student}/marks/{subject} or + marks/{subject} + */ + + axis2_char_t *first_delimitter = NULL; + axis2_char_t *next_level_url = NULL; + axis2_char_t *mapping_key = NULL; + axutil_core_utils_map_internal_t *mapping_struct = NULL; + axutil_hash_t *cur_level_rest_map = NULL; + axis2_status_t status = AXIS2_SUCCESS; + axis2_char_t *bracket_start = NULL; + + axis2_bool_t is_key_a_param = AXIS2_FALSE; + + first_delimitter = axutil_strchr(url, '/'); + + if(first_delimitter) + { + /* if there is another recurisive level, + this will get the url of that level */ + next_level_url = first_delimitter + 1; + *first_delimitter = '\0'; + } + + if((bracket_start = axutil_strchr(url, '{'))) + { + /* we support multiple param per url component, + but we validate only one param */ + if(axutil_strchr(bracket_start, '}')) + { + is_key_a_param = AXIS2_TRUE; + } + + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_URL_FORMAT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Invalid URL Format, no closing bracket in declaring parameters"); + return AXIS2_FAILURE; + } + } + + /* here the url become the mapping_key */ + mapping_key = url; + + if(*mapping_key == '\0') /* empty mappng key */ + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_URL_FORMAT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid URL Format: empty mapping key"); + return AXIS2_FAILURE; + } + + if(is_key_a_param) + { + /* set the rest map as the params_map */ + if(parent_mapping_struct->params_map == NULL) + { + parent_mapping_struct->params_map = axutil_hash_make(env); + if(!parent_mapping_struct->params_map) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + return AXIS2_FAILURE; + } + } + cur_level_rest_map = parent_mapping_struct->params_map; + } + else + { + /* set the rest map as the consts_map */ + if(parent_mapping_struct->consts_map == NULL) + { + parent_mapping_struct->consts_map = axutil_hash_make(env); + if(!parent_mapping_struct->consts_map) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + return AXIS2_FAILURE; + } + } + cur_level_rest_map = parent_mapping_struct->consts_map; + } + + /* retrieve or create the maping structure for the key*/ + mapping_struct = axutil_hash_get(cur_level_rest_map, mapping_key, AXIS2_HASH_KEY_STRING); + if(!mapping_struct) + { + mapping_struct = (axutil_core_utils_map_internal_t*)AXIS2_MALLOC(env->allocator, + sizeof(axutil_core_utils_map_internal_t)); + if(!mapping_struct) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + return AXIS2_FAILURE; + + } + memset(mapping_struct, 0, sizeof(axutil_core_utils_map_internal_t)); + + mapping_key = axutil_strdup(env, mapping_key); + axutil_hash_set(cur_level_rest_map, mapping_key, AXIS2_HASH_KEY_STRING, mapping_struct); + } + + if(!next_level_url) + { + /* if no next level url, put the op_desc in right this level */ + if(mapping_struct->op_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_DUPLICATE_URL_REST_MAPPING, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Duplicate URL Mapping found"); + return AXIS2_FAILURE; + } + mapping_struct->op_desc = op_desc; + } + else + { + /* we have to build the map_internal structure recursively */ + status = axis2_core_utils_internal_build_rest_map_recursively(env, next_level_url, + mapping_struct, op_desc); + } + + return status; +} + +/* free the rest map recursively */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_core_utils_free_rest_map( + const axutil_env_t *env, + axutil_hash_t *rest_map) +{ + + axutil_hash_index_t *hi = NULL; + const void *key = NULL; + void *val = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + for(hi = axutil_hash_first(rest_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, &key, NULL, &val); + + if(val) + { + axutil_core_utils_map_internal_t *mapping_struct = NULL; + mapping_struct = (axutil_core_utils_map_internal_t*)val; + + /* freeing the consts_map and params_map */ + if(mapping_struct->consts_map) + { + axis2_core_utils_free_rest_map(env, mapping_struct->consts_map); + } + + if(mapping_struct->params_map) + { + axis2_core_utils_free_rest_map(env, mapping_struct->params_map); + } + AXIS2_FREE(env->allocator, mapping_struct); + } + + if(key) + { + AXIS2_FREE(env->allocator, (axis2_char_t *)key); + key = NULL; + } + } + axutil_hash_free(rest_map, env); + return status; +} + +AXIS2_EXTERN axis2_op_t *AXIS2_CALL +axis2_core_utils_get_rest_op_with_method_and_location( + axis2_svc_t *svc, + const axutil_env_t *env, + const axis2_char_t *method, + const axis2_char_t *location, + axutil_array_list_t *param_keys, + axutil_array_list_t *param_values) +{ + axis2_char_t *addition_params_str = NULL; + axis2_char_t *adjusted_local_url = NULL; + + axis2_char_t *live_mapping_url = NULL; + axis2_char_t *local_url = NULL; + + axis2_op_t *op = NULL; + + int key_len = 0; + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Checking for operation using " + "REST HTTP Location fragment : %s", location); + + /* we are creating a dup of the location */ + local_url = (axis2_char_t*)axutil_strdup(env, location); + if(!local_url) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create the live rest mapping url"); + return NULL; + } + + /* checking the existence of the addition parameters + after the question mark '?' */ + addition_params_str = strchr(local_url, '?'); + if(addition_params_str) + { + *addition_params_str = '\0'; + addition_params_str++; + } + + /* if the first character is '/' ignore that */ + if(*local_url == '/') + { + adjusted_local_url = local_url + 1; + } + else + { + adjusted_local_url = local_url; + } + + /* now create the mapping url */ + key_len = axutil_strlen(method) + axutil_strlen(adjusted_local_url) + 2; + + live_mapping_url + = (axis2_char_t *)(AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * key_len)); + + if(!live_mapping_url) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create the live rest mapping url"); + AXIS2_FREE(env->allocator, local_url); + return NULL; + } + + sprintf(live_mapping_url, "%s:%s", method, adjusted_local_url); + + op = axis2_core_utils_infer_op_from_parent_rest_map(env, axis2_svc_get_rest_map(svc, env), + live_mapping_url, param_keys, param_values); + + if(op) + { + axis2_char_t *params_str; + + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "Operation found using target endpoint uri fragment"); + + /* here we are going to extract out the additional parameters + * put after '?' mark */ + params_str = addition_params_str; + while(params_str && *params_str != '\0') + { + axis2_char_t *next_params_str = NULL; + axis2_char_t *key_value_seperator = NULL; + + axis2_char_t *key = NULL; + axis2_char_t *value = NULL; + + /* we take one parameter pair to the params_str */ + next_params_str = strchr(params_str, '&'); + if(next_params_str) + { + *next_params_str = '\0'; + } + + key_value_seperator = strchr(params_str, '='); + if(key_value_seperator) + { + /* devide the key value pair */ + *key_value_seperator = '\0'; + key = params_str; + value = key_value_seperator + 1; + } + else + { + /* there is no '=' symbol, that mean only the key exist */ + key = params_str; + } + if(key) + { + key = axutil_strdup(env, key); + axutil_array_list_add(param_keys, env, key); + } + if(value) + { + value = axutil_strdup(env, value); + axutil_array_list_add(param_values, env, value); + } + + if(next_params_str) + { + /* if there was an '&' character then */ + params_str = next_params_str + 1; + } + else + { + params_str = NULL; /* just to end the loop */ + } + } + } + + if(live_mapping_url) + { + AXIS2_FREE(env->allocator, live_mapping_url); + } + if(local_url) + { + AXIS2_FREE(env->allocator, local_url); + } + return op; +} + +/* infer op from the live url */ +axis2_op_t * +axis2_core_utils_infer_op_from_parent_rest_map( + const axutil_env_t *env, + axutil_hash_t *rest_map, + axis2_char_t *live_url, + axutil_array_list_t *param_keys, + axutil_array_list_t *param_values) +{ + axis2_char_t *first_delimitter = NULL; + axis2_char_t *next_level_url = NULL; + axis2_char_t *url_component = NULL; + + axis2_op_t *op_desc = NULL; + axutil_core_utils_map_internal_t *mapping_struct = NULL; + + first_delimitter = axutil_strchr(live_url, '/'); + + if(first_delimitter) + { + /* if there is another recursive level, + this will get the url of that level */ + next_level_url = first_delimitter + 1; + *first_delimitter = '\0'; + } + + /* so live url is the url_component */ + url_component = live_url; + + /* check it in the hash map */ + mapping_struct = (axutil_core_utils_map_internal_t*)axutil_hash_get(rest_map, url_component, + AXIS2_HASH_KEY_STRING); + + if(mapping_struct) + { + if(!next_level_url) + { + /* if no level exists, find it here */ + op_desc = mapping_struct->op_desc; + } + else + { + + op_desc = axis2_core_utils_internal_infer_op_from_rest_map_recursively(env, + mapping_struct, next_level_url, param_keys, param_values); + } + } + if(!op_desc) + { + /* if the url is not mapped to the given constant url + * we have to match it with the url pattern */ + + axutil_hash_index_t *hi = NULL; + const void *key = NULL; + void *val = NULL; + axis2_status_t matched_status = AXIS2_FAILURE; + + for(hi = axutil_hash_first(rest_map, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, &key, NULL, &val); + + if(key == url_component) + { + continue; /* skip the already checked key */ + } + if(key && val) + { + axis2_char_t *hash_key = (axis2_char_t*)key; + axis2_char_t *dup_url_component = NULL; + axis2_char_t *dup_pattern = NULL; + + /* temporary param keys and values for each entry */ + axutil_array_list_t *tmp_param_keys = NULL; + axutil_array_list_t *tmp_param_values = NULL; + + tmp_param_keys = axutil_array_list_create(env, 10); + if(!tmp_param_keys) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + + return NULL; + } + tmp_param_values = axutil_array_list_create(env, 10); + if(!tmp_param_values) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + axutil_array_list_free(tmp_param_keys, env); + return NULL; + } + + dup_url_component = axutil_strdup(env, url_component); + if(!dup_url_component) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + axutil_array_list_free(tmp_param_keys, env); + axutil_array_list_free(tmp_param_values, env); + return NULL; + } + dup_pattern = axutil_strdup(env, hash_key); + if(!dup_pattern) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + axutil_array_list_free(tmp_param_keys, env); + axutil_array_list_free(tmp_param_values, env); + AXIS2_FREE(env->allocator, dup_url_component); + return NULL; + } + + matched_status = axis2_core_utils_match_url_component_with_pattern(env, + dup_pattern, dup_url_component, tmp_param_keys, tmp_param_values); + + AXIS2_FREE(env->allocator, dup_url_component); + AXIS2_FREE(env->allocator, dup_pattern); + + if(matched_status == AXIS2_SUCCESS && val) + { + mapping_struct = (axutil_core_utils_map_internal_t*)val; + + if(!next_level_url) + { + op_desc = mapping_struct->op_desc; + } + else + { + + op_desc = axis2_core_utils_internal_infer_op_from_rest_map_recursively(env, + mapping_struct, next_level_url, tmp_param_keys, tmp_param_values); + } + if(op_desc) + { + /* we are done, the url is matched with a pattern */ + /* but before leaving should merge the param arrays */ + + int i = 0; + void *param_key = NULL; + void *param_value = NULL; + + for(i = 0; i < axutil_array_list_size(tmp_param_keys, env); i++) + { + /* size(tmp_param_keys) == size(tmp_param_values) */ + param_key = axutil_array_list_get(tmp_param_keys, env, i); + param_value = axutil_array_list_get(tmp_param_values, env, i); + + /* add it to original array */ + axutil_array_list_add(param_keys, env, param_key); + axutil_array_list_add(param_values, env, param_value); + + } + /* since of is found, no more searches needed */ + break; + } + } + /* freeing the temporary arrays */ + axutil_array_list_free(tmp_param_keys, env); + axutil_array_list_free(tmp_param_values, env); + } + } + } + + if(!op_desc) + { + /* no more to look up */ + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_URL_FORMAT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "REST maping structure is NULL for the accessed URL"); + return NULL; + } + + return op_desc; +} + +/* infer op from the live url recursively */ +axis2_op_t *AXIS2_CALL +axis2_core_utils_internal_infer_op_from_rest_map_recursively( + const axutil_env_t *env, + const axutil_core_utils_map_internal_t *parent_mapping_struct, + axis2_char_t *live_url, + axutil_array_list_t *param_keys, + axutil_array_list_t *param_values) +{ + + axis2_char_t *first_delimitter = NULL; + axis2_char_t *next_level_url = NULL; + axis2_char_t *url_component = NULL; + + axis2_op_t *op_desc = NULL; + axutil_core_utils_map_internal_t *child_mapping_struct = NULL; + + axutil_hash_index_t *hi = NULL; + const void *key = NULL; + void *val = NULL; + + first_delimitter = axutil_strchr(live_url, '/'); + + if(first_delimitter) + { + /* if there is another recurisive level, + this will get the url of that level */ + next_level_url = first_delimitter + 1; + *first_delimitter = '\0'; + } + + /* so live url is the url_component */ + url_component = live_url; + + /* first check the url component in the constants array list */ + if(parent_mapping_struct->consts_map) + { + child_mapping_struct = axutil_hash_get(parent_mapping_struct->consts_map, url_component, + AXIS2_HASH_KEY_STRING); + } + + /* if the url component exists in the consts_map, go through it inside */ + + if(child_mapping_struct) + { + if(!next_level_url) + { + /* there is no another level, so the op should be here */ + + op_desc = child_mapping_struct->op_desc; + + if(!op_desc) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "The operation descriptor not found constant given in the url"); + } + /* rather than returning NULL we continue to search params_map */ + + } + else + { + + op_desc = axis2_core_utils_internal_infer_op_from_rest_map_recursively(env, + child_mapping_struct, next_level_url, param_keys, param_values); + } + } + + if(op_desc) + { + /* if the op for the accessed url found, no further searching is needed */ + return op_desc; + } + + /* if it is not found in the consts_map we have to assume it is in a params_map */ + + if(!parent_mapping_struct->params_map) + { + /* wrong operation, abort to continue to let calling function to check other operations */ + if(first_delimitter) + { + /* restore the delimmiters */ + *first_delimitter = '/'; + } + return NULL; + } + + for(hi = axutil_hash_first(parent_mapping_struct->params_map, env); hi; hi = axutil_hash_next( + env, hi)) + { + axutil_hash_this(hi, &key, NULL, &val); + + if(key && val) + { + int i = 0; + axis2_char_t *hash_key = (axis2_char_t*)key; + axis2_status_t matched_status = AXIS2_SUCCESS; + axis2_char_t *dup_url_component = NULL; + axis2_char_t *dup_pattern = NULL; + + /* temporary param keys and values for each entry */ + axutil_array_list_t *tmp_param_keys; + axutil_array_list_t *tmp_param_values; + + tmp_param_keys = axutil_array_list_create(env, 10); + if(!tmp_param_keys) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + + return NULL; + } + tmp_param_values = axutil_array_list_create(env, 10); + if(!tmp_param_values) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + axutil_array_list_free(tmp_param_keys, env); + return NULL; + } + + dup_url_component = axutil_strdup(env, url_component); + if(!dup_url_component) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + axutil_array_list_free(tmp_param_keys, env); + axutil_array_list_free(tmp_param_values, env); + return NULL; + } + dup_pattern = axutil_strdup(env, hash_key); + if(!dup_pattern) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + axutil_array_list_free(tmp_param_keys, env); + axutil_array_list_free(tmp_param_values, env); + AXIS2_FREE(env->allocator, dup_url_component); + return NULL; + } + + matched_status = axis2_core_utils_match_url_component_with_pattern(env, dup_pattern, + dup_url_component, tmp_param_keys, tmp_param_values); + + AXIS2_FREE(env->allocator, dup_url_component); + AXIS2_FREE(env->allocator, dup_pattern); + + if(matched_status == AXIS2_SUCCESS) + { + child_mapping_struct = (axutil_core_utils_map_internal_t*)val; + + if(!next_level_url) + { + /* there is no another level, so the op should be here */ + op_desc = child_mapping_struct->op_desc; + + } + else + { + + /* if there is next level, we should check that level too */ + op_desc = axis2_core_utils_internal_infer_op_from_rest_map_recursively(env, + child_mapping_struct, next_level_url, tmp_param_keys, tmp_param_values); + } + + if(op_desc) + { + /* the operation is found */ + /* but before leaving should merge the param arrays */ + + int i = 0; + void *param_key = NULL; + void *param_value = NULL; + for(i = 0; i < axutil_array_list_size(tmp_param_keys, env); i++) + { + /* size(tmp_param_keys) == size(tmp_param_values) */ + param_key = axutil_array_list_get(tmp_param_keys, env, i); + param_value = axutil_array_list_get(tmp_param_values, env, i); + + /* add it to original array */ + axutil_array_list_add(param_keys, env, param_key); + axutil_array_list_add(param_values, env, param_value); + + } + + /* freeing the temporary arrays */ + axutil_array_list_free(tmp_param_keys, env); + axutil_array_list_free(tmp_param_values, env); + /* since of is found, no more searches needed */ + break; + } + } + + /* if we come here => op is not yet found */ + /* just freeing the temp key and value arrays */ + for(i = 0; i < axutil_array_list_size(tmp_param_keys, env); i++) + { + void *value = axutil_array_list_get(tmp_param_keys, env, i); + if(value) + { + AXIS2_FREE(env->allocator, value); + } + } + for(i = 0; i < axutil_array_list_size(tmp_param_values, env); i++) + { + void *value = axutil_array_list_get(tmp_param_values, env, i); + if(value) + { + AXIS2_FREE(env->allocator, value); + } + } + axutil_array_list_free(tmp_param_keys, env); + axutil_array_list_free(tmp_param_values, env); + } + } + + if(!op_desc) + { + /* this is not an error, since the calling function + may find another opertion match with the url */ + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "The operation descriptor not found for the accessed URL"); + + if(first_delimitter) + { + /* restore the delimmiters */ + *first_delimitter = '/'; + } + } + return op_desc; +} + +/* match a pattern with a url component */ +axis2_status_t +axis2_core_utils_match_url_component_with_pattern( + const axutil_env_t *env, + axis2_char_t *pattern, + axis2_char_t *url_component, + axutil_array_list_t *param_keys, + axutil_array_list_t *param_values) +{ + axutil_array_list_t *const_components = NULL; + axis2_char_t *c = NULL; + axis2_char_t *url_c = NULL; + axis2_char_t *pattern_c = NULL; + axis2_char_t *const_part = NULL; + axis2_char_t *param_part = NULL; + axis2_char_t *param_value = NULL; + axis2_status_t status = AXIS2_SUCCESS; + /* here the state can have following values + 0 - inside a constant + 1 - inside a param + */ + int loop_state = 0; + int i = 0; + int pattern_ending_with_param = 0; + + /* the constant that undergoing matching */ + int matching_constant_index = 0; + axis2_char_t *matching_constant = NULL; + + /* dividing the pattern to consts */ + const_components = axutil_array_list_create(env, 10); + if(!const_components) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + } + /* check whether the pattern ending with a param */ + if(*(pattern + axutil_strlen(pattern) - 1) == '}') + { + pattern_ending_with_param = 1; + } + + const_part = pattern; + /* a parse to fil the const array and key array */ + for(c = pattern; c && *c != '\0'; c++) + { + if(loop_state == 0) + { + /* inside a constant */ + if(*c == '{') + { + if(const_part == c) + { + /* no const part */ + } + else + { + /* add the constant */ + *c = '\0'; + const_part = axutil_strdup(env, const_part); + if(!const_part) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + + status = AXIS2_FAILURE; + break; + + } + axutil_array_list_add(const_components, env, const_part); + + } + param_part = c + 1; /* start the param */ + loop_state = 1; /* moving to the param from next iteration */ + } + else if(*c == '}') + { + /* invalid state */ + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_URL_FORMAT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in parsing the url for %s", + url_component); + + status = AXIS2_FAILURE; + break; + } + } + else + { + /* inside a param */ + if(*c == '}') + { + if(*(c + 1) == '{') /* you can not have two params without a constant in between */ + { + /* invalid state */ + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_URL_FORMAT, AXIS2_FAILURE); + AXIS2_LOG_ERROR( + env->log, + AXIS2_LOG_SI, + "Error in parsing the url for %s, Please put constant between 2 parameters", + url_component); + + status = AXIS2_FAILURE; + break; + } + if(param_part == c) + { + /* no param part */ + } + else + { + /* add the param */ + *c = '\0'; + param_part = axutil_strdup(env, param_part); + + if(param_part == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + status = AXIS2_FAILURE; + break; + } + axutil_array_list_add(param_keys, env, param_part); + + const_part = c + 1; /* start the const */ + } + loop_state = 0; /* moving to the const from next iteration */ + } + else if(*c == '{') + { + /* invalid state */ + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_URL_FORMAT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in parsing the url for %s", + url_component); + + status = AXIS2_FAILURE; + break; + + } + } + } + /* loop should stop in state 0 */ + if(loop_state != 0) + { + status = AXIS2_FAILURE; + } + + if(const_part != c) + { + /* add the tailing const */ + const_part = axutil_strdup(env, const_part); + if(!const_part) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + status = AXIS2_FAILURE; + } + axutil_array_list_add(const_components, env, const_part); + } + + if(axutil_array_list_size(const_components, env) == 0 && status == AXIS2_SUCCESS) + { + /* no constants mean, the url componenent itself is the value */ + url_component = axutil_strdup(env, url_component); + if(url_component) + { + axutil_array_list_add(param_values, env, url_component); + + /* free the empty const array */ + + axutil_array_list_free(const_components, env); + return AXIS2_SUCCESS; + } + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + status = AXIS2_FAILURE; + + } + + if(status == AXIS2_FAILURE) + { + /* invalid state */ + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_URL_FORMAT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in parsing the url for %s", url_component); + + /* free the const array */ + for(i = 0; i < axutil_array_list_size(const_components, env); i++) + { + void *value; + value = axutil_array_list_get(const_components, env, i); + + AXIS2_FREE(env->allocator, value); + } + + axutil_array_list_free(const_components, env); + + return status; + } + + /* we are tracking the loop_state here too - this is useful only to track start*/ + /* we are using the param_value part to track the matching param value */ + if(*pattern != '{') + { + /* starting_with_constant */ + loop_state = 0; + param_value = NULL; + } + else + { + /* starting_with_param */ + loop_state = 1; + param_value = url_component; + + } + + matching_constant_index = 0; + matching_constant = axutil_array_list_get(const_components, env, 0); + + /* now parse the url component */ + for(url_c = url_component; *url_c != '\0' && status == AXIS2_SUCCESS && matching_constant + != NULL; url_c++) + { + axis2_char_t *tmp_url_c = url_c; + pattern_c = matching_constant; + + while(*tmp_url_c == *pattern_c && *tmp_url_c != '\0' && *pattern_c != '\0') + { + tmp_url_c++; + pattern_c++; + } + + if(*pattern_c == '\0') + { + /* we finised matching the constant pattern successfuly*/ + if(loop_state == 0) + { + /* loop_state => we expected there is a constant */ + } + else + { + /* we expected a param, but the constant is found => + url_c should mark the end of the param */ + if(param_value == NULL) + { + /* unexpected invalid state */ + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_URL_FORMAT, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in parsing the url for %s", + url_component); + status = AXIS2_FAILURE; + } + *url_c = '\0'; + param_value = axutil_strdup(env, param_value); + + if(param_value == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + status = AXIS2_FAILURE; + break; + } + axutil_array_list_add(param_values, env, param_value); + + } + /* next the param part is starting */ + param_value = tmp_url_c; + + loop_state = 1; /* the end of the constant expects, start of a variable */ + + /* so we found one constant, go for the other */ + matching_constant_index++; + matching_constant = axutil_array_list_get(const_components, env, + matching_constant_index); + + tmp_url_c--; + /* increment the url_c to tmp_url_c */ + url_c = tmp_url_c; + } + else + { + /* pattern not matched */ + if(loop_state == 0) + { + /* we are expected this to be a constant, but it has not happend + * mean: the pattern match failed + */ + status = AXIS2_FAILURE; + break; + } + } + + } + + if(matching_constant_index != axutil_array_list_size(const_components, env)) + { + status = AXIS2_FAILURE; + } + + if(pattern_ending_with_param) + { + if(param_value) + { + param_value = axutil_strdup(env, param_value); + + if(param_value == NULL) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "No memory. Cannot create internal rest mapping structure"); + status = AXIS2_FAILURE; + } + else + { + axutil_array_list_add(param_values, env, param_value); + } + } + } + else if(*url_c != '\0') + { + /* here the pattern ending is a constant (not a param), and matches all are already made + * but some url part left => this is a not mach */ + status = AXIS2_FAILURE; + } + + /* finally freeing the const array */ + for(i = 0; i < axutil_array_list_size(const_components, env); i++) + { + void *value; + value = axutil_array_list_get(const_components, env, i); + + AXIS2_FREE(env->allocator, value); + } + axutil_array_list_free(const_components, env); + + return status; +} diff --git a/src/modules/Makefile.am b/src/modules/Makefile.am new file mode 100644 index 0000000..8dffd11 --- /dev/null +++ b/src/modules/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = mod_addr mod_log diff --git a/src/modules/mod_addr/Makefile.am b/src/modules/mod_addr/Makefile.am new file mode 100644 index 0000000..3e61c1e --- /dev/null +++ b/src/modules/mod_addr/Makefile.am @@ -0,0 +1,21 @@ +prglibdir=$(prefix)/modules/addressing +prglib_LTLIBRARIES = libaxis2_mod_addr.la +prglib_DATA= module.xml +EXTRA_DIST = module.xml +libaxis2_mod_addr_la_SOURCES = addr_in_handler.c \ + addr_out_handler.c \ + mod_addr.c + +libaxis2_mod_addr_la_LIBADD = $(top_builddir)/axiom/src/om/libaxis2_axiom.la \ + $(top_builddir)/util/src/libaxutil.la + +libaxis2_mod_addr_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/util/include \ + -I$(top_builddir)/axiom/include diff --git a/src/modules/mod_addr/addr_in_handler.c b/src/modules/mod_addr/addr_in_handler.c new file mode 100644 index 0000000..2c4de3b --- /dev/null +++ b/src/modules/mod_addr/addr_in_handler.c @@ -0,0 +1,746 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +axis2_status_t AXIS2_CALL +axis2_addr_in_handler_invoke( + struct axis2_handler * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx); + +axis2_bool_t +axis2_addr_in_check_element( + const axutil_env_t * env, + axutil_qname_t * expected_qname, + axutil_qname_t * actual_qname); + +axis2_status_t +axis2_addr_in_extract_svc_grp_ctx_id( + const axutil_env_t * env, + axiom_soap_header_t * soap_header, + axis2_msg_ctx_t * msg_ctx); + +axis2_status_t +axis2_addr_in_extract_ref_params( + const axutil_env_t * env, + axiom_soap_header_t * soap_header, + axis2_msg_info_headers_t * msg_info_headers); + +axis2_status_t +axis2_addr_in_extract_to_epr_ref_params( + const axutil_env_t * env, + axis2_endpoint_ref_t * to_epr, + axiom_soap_header_t * soap_header, + const axis2_char_t * addr_ns); + +axis2_status_t +axis2_addr_in_extract_epr_information( + const axutil_env_t * env, + axiom_soap_header_block_t * soap_header_block, + axis2_endpoint_ref_t * endpoint_ref, + const axis2_char_t * addr_ns); + +axis2_status_t +axis2_addr_in_extract_addr_params( + const axutil_env_t * env, + axiom_soap_header_t * soap_header, + axis2_msg_info_headers_t ** msg_info_headers, + axutil_array_list_t * addr_headers, + const axis2_char_t * addr_ns, + axis2_msg_ctx_t * msg_ctx); + +void +axis2_addr_in_create_fault_envelope( + const axutil_env_t * env, + const axis2_char_t * header_name, + const axis2_char_t * addr_ns_str, + axis2_msg_ctx_t * msg_ctx); + +/******************************************************************************/ + +AXIS2_EXTERN axis2_handler_t *AXIS2_CALL +axis2_addr_in_handler_create( + const axutil_env_t * env, + axutil_string_t * name) +{ + axis2_handler_t *handler = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + handler = axis2_handler_create(env); + if(!handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create addressing in handler"); + return NULL; + } + + /* Handler init is handled by conf loading, so no need to do it here */ + + axis2_handler_set_invoke(handler, env, axis2_addr_in_handler_invoke); + + return handler; +} + +axis2_status_t AXIS2_CALL +axis2_addr_in_handler_invoke( + struct axis2_handler * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_header_t *soap_header = NULL; + axutil_property_t *property = NULL; + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + AXIS2_LOG_INFO(env->log, "Starting addressing in handler"); + + soap_envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + + if(soap_envelope) + { + soap_header = axiom_soap_envelope_get_header(soap_envelope, env); + if(soap_header) + { + axutil_array_list_t *addr_headers = NULL; + axis2_ctx_t *ctx = NULL; + axis2_char_t *addr_ns_str = NULL; + axis2_msg_info_headers_t *msg_info_headers = axis2_msg_ctx_get_msg_info_headers( + msg_ctx, env); + + addr_headers = axiom_soap_header_get_header_blocks_with_namespace_uri(soap_header, env, + AXIS2_WSA_NAMESPACE_SUBMISSION); + if(addr_headers) + { + addr_ns_str = axutil_strdup(env, AXIS2_WSA_NAMESPACE_SUBMISSION); + /*status = + axis2_addr_in_extract_addr_submission_info(env, soap_header, + &msg_info_headers, + addr_headers, + msg_ctx);*/ + status = axis2_addr_in_extract_addr_params(env, soap_header, &msg_info_headers, + addr_headers, AXIS2_WSA_NAMESPACE_SUBMISSION, msg_ctx); + } + else + { + addr_headers = axiom_soap_header_get_header_blocks_with_namespace_uri(soap_header, + env, AXIS2_WSA_NAMESPACE); + if(addr_headers) + { + addr_ns_str = axutil_strdup(env, AXIS2_WSA_NAMESPACE); + /*status = axis2_addr_in_extract_addr_final_info(env, + soap_header, + &msg_info_headers, + addr_headers, + msg_ctx);*/ + status = axis2_addr_in_extract_addr_params(env, soap_header, &msg_info_headers, + addr_headers, AXIS2_WSA_NAMESPACE, msg_ctx); + + axis2_addr_in_extract_ref_params(env, soap_header, + axis2_msg_ctx_get_msg_info_headers(msg_ctx, env)); + + } + else + { + /* addressing headers are not present in the SOAP message */ + AXIS2_LOG_INFO(env->log, AXIS2_LOG_SI, + "No Addressing Headers present in the IN message. Addressing In Handler cannot do anything."); + return AXIS2_SUCCESS; /* no addressing heades means addressing not in use */ + } + } + + ctx = axis2_msg_ctx_get_base(msg_ctx, env); + if(ctx) + { + property = axutil_property_create(env); + axutil_property_set_scope(property, env, AXIS2_SCOPE_REQUEST); + axutil_property_set_value(property, env, addr_ns_str); + axis2_ctx_set_property(ctx, env, AXIS2_WSA_VERSION, property); + } + + /* extract service group context, if available */ + axis2_addr_in_extract_svc_grp_ctx_id(env, soap_header, msg_ctx); + + axutil_array_list_free(addr_headers, env); + return status; + } + } + + return AXIS2_SUCCESS; +} + +axis2_status_t +axis2_addr_in_extract_svc_grp_ctx_id( + const axutil_env_t * env, + axiom_soap_header_t * soap_header, + axis2_msg_ctx_t * msg_ctx) +{ + axiom_node_t *node = NULL; + axiom_element_t *element = NULL; + + node = axiom_soap_header_get_base_node(soap_header, env); + + if(node && axiom_node_get_node_type(node, env) == AXIOM_ELEMENT) + { + axutil_qname_t *qname = NULL; + + element = (axiom_element_t *)axiom_node_get_data_element(node, env); + qname = axutil_qname_create(env, AXIS2_SVC_GRP_ID, AXIS2_NAMESPACE_URI, + AXIS2_NAMESPACE_PREFIX); + if(qname) + { + axiom_node_t *child_node = NULL; + axiom_element_t *child_element = NULL; + + child_element = axiom_element_get_first_child_with_qname(element, env, qname, node, + &child_node); + if(child_element) + { + axis2_conf_ctx_t *conf_ctx = NULL; + + axis2_char_t *grp_id = axiom_element_get_text(child_element, env, child_node); + conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); + if(conf_ctx && grp_id) + { + axutil_string_t *svc_grp_ctx_id_str = axutil_string_create(env, grp_id); + axis2_svc_grp_ctx_t *svc_ctx_grp_ctx = axis2_conf_ctx_get_svc_grp_ctx(conf_ctx, + env, grp_id); + if(!svc_ctx_grp_ctx) + { + return AXIS2_FAILURE; + } + axis2_msg_ctx_set_svc_grp_ctx_id(msg_ctx, env, svc_grp_ctx_id_str); + axutil_string_free(svc_grp_ctx_id_str, env); + + return AXIS2_SUCCESS; + } + } + } + axutil_qname_free(qname, env); + } + return AXIS2_FAILURE; +} + +axis2_status_t +axis2_addr_in_extract_addr_params( + const axutil_env_t * env, + axiom_soap_header_t * soap_header, + axis2_msg_info_headers_t ** msg_info_headers_p, + axutil_array_list_t * addr_headers, + const axis2_char_t * addr_ns_str, + axis2_msg_ctx_t * msg_ctx) +{ + axutil_hash_t *header_block_ht = NULL; + axutil_hash_index_t *hash_index = NULL; + axis2_msg_info_headers_t *msg_info_headers = *(msg_info_headers_p); + axis2_status_t status = AXIS2_SUCCESS; + axis2_bool_t to_found = AXIS2_FALSE; + axis2_bool_t reply_to_found = AXIS2_FALSE; + axis2_bool_t fault_to_found = AXIS2_FALSE; + axis2_bool_t action_found = AXIS2_FALSE; + axis2_bool_t msg_id_found = AXIS2_FALSE; + + AXIS2_PARAM_CHECK(env->error, soap_header, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_info_headers_p, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, addr_headers, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, addr_ns_str, AXIS2_FAILURE); + + if(!msg_info_headers) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "No messgae info header. Creating new"); + msg_info_headers = axis2_msg_info_headers_create(env, NULL, NULL); + if(!msg_info_headers) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MSG_INFO_HEADERS, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No message information headers available"); + return AXIS2_FAILURE; + } + } + + header_block_ht = axiom_soap_header_get_all_header_blocks(soap_header, env); + if(!header_block_ht) + { + return AXIS2_FAILURE; + } + + /* Iterate thru header blocks */ + for(hash_index = axutil_hash_first(header_block_ht, env); hash_index; hash_index + = axutil_hash_next(env, hash_index)) + { + void *hb = NULL; + axiom_soap_header_block_t *header_block = NULL; + axiom_node_t *header_block_node = NULL; + axiom_element_t *header_block_ele = NULL; + axis2_char_t *ele_localname = NULL; + axis2_endpoint_ref_t *epr = NULL; + axis2_char_t *role = NULL; + + axutil_hash_this(hash_index, NULL, NULL, &hb); + + header_block = (axiom_soap_header_block_t *)hb; + header_block_node = axiom_soap_header_block_get_base_node(header_block, env); + header_block_ele = (axiom_element_t *)axiom_node_get_data_element(header_block_node, env); + ele_localname = axiom_element_get_localname(header_block_ele, env); + + role = axiom_soap_header_block_get_role(header_block, env); + if(role && !axutil_strcmp(role, AXIOM_SOAP12_SOAP_ROLE_NONE)) + { + /* Role is none, no need of processing */ + continue; + } + + if(!axutil_strcmp(ele_localname, AXIS2_WSA_TO)) + { + /* Here the addressing epr overidde what ever already there in the message context */ + + epr = axis2_endpoint_ref_create(env, axiom_element_get_text(header_block_ele, env, + header_block_node)); + if(AXIS2_TRUE == to_found) + { + /* Duplicate To */ + axis2_addr_in_create_fault_envelope(env, AXIS2_WSA_PREFIX_TO, addr_ns_str, msg_ctx); + status = AXIS2_FAILURE; + continue; + } + axis2_msg_info_headers_set_to(msg_info_headers, env, epr); + + axis2_addr_in_extract_to_epr_ref_params(env, epr, soap_header, addr_ns_str); + axiom_soap_header_block_set_processed(header_block, env); + to_found = AXIS2_TRUE; + } + else if(!axutil_strcmp(ele_localname, AXIS2_WSA_FROM)) + { + epr = axis2_msg_info_headers_get_from(msg_info_headers, env); + if(!epr) + { + /* The address is not known now. Pass the empty + string and fill this once the element + under this is processed. */ + + epr = axis2_endpoint_ref_create(env, ""); + axis2_msg_info_headers_set_from(msg_info_headers, env, epr); + } + axis2_addr_in_extract_epr_information(env, header_block, epr, addr_ns_str); + axiom_soap_header_block_set_processed(header_block, env); + } + else if(!axutil_strcmp(ele_localname, AXIS2_WSA_REPLY_TO)) + { + epr = axis2_msg_info_headers_get_reply_to(msg_info_headers, env); + + if(reply_to_found == AXIS2_TRUE) + { + /* Duplicate Reply To */ + axis2_addr_in_create_fault_envelope(env, AXIS2_WSA_PREFIX_REPLY_TO, addr_ns_str, + msg_ctx); + status = AXIS2_FAILURE; + continue; + } + + if(!epr) + { + epr = axis2_endpoint_ref_create(env, ""); + axis2_msg_info_headers_set_reply_to(msg_info_headers, env, epr); + } + axis2_addr_in_extract_epr_information(env, header_block, epr, addr_ns_str); + axiom_soap_header_block_set_processed(header_block, env); + reply_to_found = AXIS2_TRUE; + } + else if(!axutil_strcmp(ele_localname, AXIS2_WSA_FAULT_TO)) + { + epr = axis2_msg_info_headers_get_fault_to(msg_info_headers, env); + + if(fault_to_found == AXIS2_TRUE) + { + /* Duplicate Fault To */ + axis2_addr_in_create_fault_envelope(env, AXIS2_WSA_PREFIX_FAULT_TO, addr_ns_str, + msg_ctx); + status = AXIS2_FAILURE; + axis2_msg_info_headers_set_fault_to(msg_info_headers, env, NULL); + continue; + } + + if(!epr) + { + epr = axis2_endpoint_ref_create(env, ""); + axis2_msg_info_headers_set_fault_to(msg_info_headers, env, epr); + } + axis2_addr_in_extract_epr_information(env, header_block, epr, addr_ns_str); + axiom_soap_header_block_set_processed(header_block, env); + fault_to_found = AXIS2_TRUE; + } + else if(!axutil_strcmp(ele_localname, AXIS2_WSA_MESSAGE_ID)) + { + axis2_char_t *text = NULL; + + if(msg_id_found == AXIS2_TRUE) + { + /* Duplicate Message ID */ + axis2_addr_in_create_fault_envelope(env, AXIS2_WSA_PREFIX_MESSAGE_ID, addr_ns_str, + msg_ctx); + status = AXIS2_FAILURE; + continue; + } + + text = axiom_element_get_text(header_block_ele, env, header_block_node); + axis2_msg_info_headers_set_in_message_id(msg_info_headers, env, text); + axiom_soap_header_block_set_processed(header_block, env); + msg_id_found = AXIS2_TRUE; + } + else if(!axutil_strcmp(ele_localname, AXIS2_WSA_ACTION)) + { + axis2_char_t *text = NULL; + + if(action_found == AXIS2_TRUE) + { + /* Duplicate Action */ + axis2_addr_in_create_fault_envelope(env, AXIS2_WSA_PREFIX_ACTION, addr_ns_str, + msg_ctx); + status = AXIS2_FAILURE; + continue; + } + + text = axiom_element_get_text(header_block_ele, env, header_block_node); + axis2_msg_info_headers_set_action(msg_info_headers, env, text); + axiom_soap_header_block_set_processed(header_block, env); + action_found = AXIS2_TRUE; + } + else if(!axutil_strcmp(ele_localname, AXIS2_WSA_RELATES_TO)) + { + axis2_char_t *address = NULL; + axutil_qname_t *rqn = NULL; + axiom_attribute_t *relationship_type = NULL; + const axis2_char_t *relationship_type_value = NULL; + axis2_relates_to_t *relates_to = NULL; + + rqn = axutil_qname_create(env, AXIS2_WSA_RELATES_TO_RELATIONSHIP_TYPE, NULL, NULL); + relationship_type = axiom_element_get_attribute(header_block_ele, env, rqn); + + if(!relationship_type) + { + if(!axutil_strcmp(AXIS2_WSA_NAMESPACE_SUBMISSION, addr_ns_str)) + { + relationship_type_value = + AXIS2_WSA_RELATES_TO_RELATIONSHIP_TYPE_DEFAULT_VALUE_SUBMISSION; + } + else + { + relationship_type_value = + AXIS2_WSA_RELATES_TO_RELATIONSHIP_TYPE_DEFAULT_VALUE; + } + } + else + { + relationship_type_value = axiom_attribute_get_value(relationship_type, env); + } + + address = axiom_element_get_text(header_block_ele, env, header_block_node); + relates_to = axis2_relates_to_create(env, address, relationship_type_value); + + axis2_msg_info_headers_set_relates_to(msg_info_headers, env, relates_to); + axiom_soap_header_block_set_processed(header_block, env); + + axutil_qname_free(rqn, env); + } + } + + /* If an action is not found, it's a false*/ + if(action_found == AXIS2_FALSE) + { + axis2_addr_in_create_fault_envelope(env, AXIS2_WSA_PREFIX_ACTION, addr_ns_str, msg_ctx); + status = AXIS2_FAILURE; + } + + return status; +} + +axis2_status_t +axis2_addr_in_extract_epr_information( + const axutil_env_t * env, + axiom_soap_header_block_t * soap_header_block, + axis2_endpoint_ref_t * endpoint_ref, + const axis2_char_t * addr_ns_str) +{ + axutil_qname_t *epr_addr_qn = NULL; + axutil_qname_t *epr_ref_qn = NULL; + axutil_qname_t *wsa_meta_qn = NULL; + axiom_node_t *header_block_node = NULL; + axiom_element_t *header_block_ele = NULL; + axiom_child_element_iterator_t *child_ele_iter = NULL; + + AXIS2_PARAM_CHECK(env->error, soap_header_block, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, endpoint_ref, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, addr_ns_str, AXIS2_FAILURE); + + header_block_node = axiom_soap_header_block_get_base_node(soap_header_block, env); + header_block_ele = (axiom_element_t *)axiom_node_get_data_element(header_block_node, env); + + child_ele_iter = axiom_element_get_child_elements(header_block_ele, env, header_block_node); + if(!child_ele_iter) + { + return AXIS2_FAILURE; + } + + epr_addr_qn = axutil_qname_create(env, EPR_ADDRESS, addr_ns_str, NULL); + epr_ref_qn = axutil_qname_create(env, EPR_REFERENCE_PARAMETERS, addr_ns_str, NULL); + wsa_meta_qn = axutil_qname_create(env, AXIS2_WSA_METADATA, addr_ns_str, NULL); + + while(AXIOM_CHILD_ELEMENT_ITERATOR_HAS_NEXT(child_ele_iter, env)) + { + axiom_node_t *child_node = NULL; + axiom_element_t *child_ele = NULL; + axutil_qname_t *child_qn = NULL; + child_node = AXIOM_CHILD_ELEMENT_ITERATOR_NEXT(child_ele_iter, env); + child_ele = (axiom_element_t *)axiom_node_get_data_element(child_node, env); + + child_qn = axiom_element_get_qname(child_ele, env, child_node); + if(axis2_addr_in_check_element(env, epr_addr_qn, child_qn)) + { + axis2_endpoint_ref_set_address(endpoint_ref, env, axiom_element_get_text(child_ele, + env, child_node)); + } + else if(axis2_addr_in_check_element(env, epr_ref_qn, child_qn)) + { + axiom_child_element_iterator_t *ref_param_iter = NULL; + + ref_param_iter = axiom_element_get_child_elements(child_ele, env, child_node); + if(ref_param_iter) + { + while(AXIOM_CHILD_ELEMENT_ITERATOR_HAS_NEXT(ref_param_iter, env)) + { + axiom_node_t *om_node = NULL; + axiom_element_t *om_ele = NULL; + om_node = AXIOM_CHILD_ELEMENT_ITERATOR_NEXT(ref_param_iter, env); + om_ele = (axiom_element_t *)axiom_node_get_data_element(om_node, env); + axis2_endpoint_ref_add_ref_param(endpoint_ref, env, om_node); + } + } + + } + else if(axis2_addr_in_check_element(env, wsa_meta_qn, child_qn)) + { + /* FIXME : Can we remove this?*/ + } + } + axutil_qname_free(epr_addr_qn, env); + axutil_qname_free(epr_ref_qn, env); + axutil_qname_free(wsa_meta_qn, env); + + return AXIS2_SUCCESS; +} + +axis2_status_t +axis2_addr_in_extract_ref_params( + const axutil_env_t * env, + axiom_soap_header_t * soap_header, + axis2_msg_info_headers_t * msg_info_headers) +{ + axutil_hash_t *header_block_ht = NULL; + axutil_hash_index_t *hash_index = NULL; + axutil_qname_t *wsa_qname = NULL; + + AXIS2_PARAM_CHECK(env->error, soap_header, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_info_headers, AXIS2_FAILURE); + + header_block_ht = axiom_soap_header_get_all_header_blocks(soap_header, env); + if(!header_block_ht) + { + return AXIS2_FAILURE; + } + wsa_qname = axutil_qname_create(env, AXIS2_WSA_IS_REFERENCE_PARAMETER_ATTRIBUTE, + AXIS2_WSA_NAMESPACE, NULL); + + for(hash_index = axutil_hash_first(header_block_ht, env); hash_index; hash_index + = axutil_hash_next(env, hash_index)) + { + void *hb = NULL; + axiom_soap_header_block_t *header_block = NULL; + axiom_node_t *header_block_node = NULL; + axiom_element_t *header_block_ele = NULL; + + axutil_hash_this(hash_index, NULL, NULL, &hb); + + header_block = (axiom_soap_header_block_t *)hb; + header_block_node = axiom_soap_header_block_get_base_node(header_block, env); + + if(header_block_node && (axiom_node_get_node_type(header_block_node, env) == AXIOM_ELEMENT)) + { + axiom_attribute_t *om_attr = NULL; + axis2_char_t *attr_value = NULL; + header_block_ele = (axiom_element_t *)axiom_node_get_data_element(header_block_node, + env); + om_attr = axiom_element_get_attribute(header_block_ele, env, wsa_qname); + if(om_attr) + { + attr_value = axiom_attribute_get_value(om_attr, env); + if(!axutil_strcmp(attr_value, AXIS2_WSA_TYPE_ATTRIBUTE_VALUE)) + { + axis2_msg_info_headers_add_ref_param(msg_info_headers, env, header_block_node); + } + } + } + } + + axutil_qname_free(wsa_qname, env); + + return AXIS2_SUCCESS; +} + +axis2_status_t +axis2_addr_in_extract_to_epr_ref_params( + const axutil_env_t * env, + axis2_endpoint_ref_t * to_epr, + axiom_soap_header_t * soap_header, + const axis2_char_t * addr_ns_str) +{ + axutil_hash_t *header_blocks_ht = NULL; + axutil_hash_index_t *hash_index = NULL; + axutil_qname_t *is_ref_qn = NULL; + + AXIS2_PARAM_CHECK(env->error, to_epr, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, soap_header, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, addr_ns_str, AXIS2_FAILURE); + + header_blocks_ht = axiom_soap_header_get_all_header_blocks(soap_header, env); + if(!header_blocks_ht) + { + return AXIS2_FAILURE; + } + + is_ref_qn = axutil_qname_create(env, "IsReferenceParameter", addr_ns_str, NULL); + + if(!is_ref_qn) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create qname for %s", + addr_ns_str); + return AXIS2_FAILURE; + } + + for(hash_index = axutil_hash_first(header_blocks_ht, env); hash_index; hash_index + = axutil_hash_next(env, hash_index)) + { + axiom_element_t *header_block_ele = NULL; + axiom_node_t *header_block_node = NULL; + axiom_soap_header_block_t *header_block = NULL; + void *hb = NULL; + axiom_attribute_t *is_ref_param_attr = NULL; + axis2_char_t *attr_value = NULL; + + axutil_hash_this(hash_index, NULL, NULL, &hb); + if(hb) + { + header_block = (axiom_soap_header_block_t *)hb; + header_block_node = axiom_soap_header_block_get_base_node(header_block, env); + header_block_ele = (axiom_element_t *)axiom_node_get_data_element(header_block_node, + env); + is_ref_param_attr = axiom_element_get_attribute(header_block_ele, env, is_ref_qn); + if(is_ref_param_attr) + { + attr_value = axiom_attribute_get_localname(is_ref_param_attr, env); + if(!axutil_strcmp("true", attr_value)) + { + axis2_endpoint_ref_add_ref_param(to_epr, env, header_block_node); + } + } + } + } + + axutil_qname_free(is_ref_qn, env); + return AXIS2_SUCCESS; +} + +axis2_bool_t +axis2_addr_in_check_element( + const axutil_env_t * env, + axutil_qname_t * expected_qname, + axutil_qname_t * actual_qname) +{ + axis2_char_t *exp_qn_lpart = NULL; + axis2_char_t *act_qn_lpart = NULL; + axis2_char_t *exp_qn_nsuri = NULL; + axis2_char_t *act_qn_nsuri = NULL; + + AXIS2_PARAM_CHECK(env->error, expected_qname, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, actual_qname, AXIS2_FAILURE); + + exp_qn_lpart = axutil_qname_get_localpart(expected_qname, env); + act_qn_lpart = axutil_qname_get_localpart(actual_qname, env); + + exp_qn_nsuri = axutil_qname_get_localpart(expected_qname, env); + act_qn_nsuri = axutil_qname_get_localpart(actual_qname, env); + + return ((!axutil_strcmp(exp_qn_lpart, act_qn_lpart)) && (!axutil_strcmp(exp_qn_nsuri, + act_qn_nsuri))); +} + +void +axis2_addr_in_create_fault_envelope( + const axutil_env_t * env, + const axis2_char_t * header_name, + const axis2_char_t * addr_ns_str, + axis2_msg_ctx_t * msg_ctx) +{ + axiom_soap_envelope_t *envelope = NULL; + axutil_array_list_t *sub_codes = NULL; + int soap_version = AXIOM_SOAP12; + axiom_node_t *text_om_node = NULL; + axiom_element_t *text_om_ele = NULL; + axiom_namespace_t *ns1 = NULL; + + if(axis2_msg_ctx_get_is_soap_11(msg_ctx, env)) + { + soap_version = AXIOM_SOAP11; + } + + ns1 = axiom_namespace_create(env, addr_ns_str, AXIS2_WSA_DEFAULT_PREFIX); + text_om_ele = axiom_element_create(env, NULL, "ProblemHeaderQName", ns1, &text_om_node); + axiom_element_set_text(text_om_ele, env, header_name, text_om_node); + + sub_codes = axutil_array_list_create(env, 2); + if(sub_codes) + { + axutil_array_list_add(sub_codes, env, "wsa:InvalidAddressingHeader"); + axutil_array_list_add(sub_codes, env, "wsa:InvalidCardinality"); + } + + envelope + = axiom_soap_envelope_create_default_soap_fault_envelope( + env, + "soapenv:Sender", + "A header representing a Message Addressing Property is not valid and the message cannot be processed", + soap_version, sub_codes, text_om_node); + axis2_msg_ctx_set_fault_soap_envelope(msg_ctx, env, envelope); + axis2_msg_ctx_set_wsa_action(msg_ctx, env, "http://www.w3.org/2005/08/addressing/fault"); + return; +} diff --git a/src/modules/mod_addr/addr_out_handler.c b/src/modules/mod_addr/addr_out_handler.c new file mode 100644 index 0000000..dbf47a4 --- /dev/null +++ b/src/modules/mod_addr/addr_out_handler.c @@ -0,0 +1,833 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +axis2_status_t AXIS2_CALL +axis2_addr_out_handler_invoke( + struct axis2_handler * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx); + +axis2_status_t +axis2_addr_out_handler_add_to_soap_header( + const axutil_env_t * env, + axis2_endpoint_ref_t * endpoint_ref, + const axis2_char_t * type, + axiom_soap_header_t * soap_header, + const axis2_char_t * addr_ns); + +axis2_status_t +axis2_addr_out_handler_add_to_header( + const axutil_env_t * env, + axis2_endpoint_ref_t * epr, + axiom_node_t ** parent_node, + const axis2_char_t * addr_ns); + +axis2_status_t +axis2_addr_out_handler_process_any_content_type( + const axutil_env_t * env, + axis2_any_content_type_t * reference_values, + axiom_node_t * parent_ele_node, + const axis2_char_t * addr_ns); + +axiom_node_t * +axis2_addr_out_handler_process_string_info( + const axutil_env_t * env, + const axis2_char_t * value, + const axis2_char_t * type, + axiom_soap_header_t ** soap_header, + const axis2_char_t * addr_ns); + +AXIS2_EXTERN axis2_handler_t *AXIS2_CALL +axis2_addr_out_handler_create( + const axutil_env_t * env, + axutil_string_t * name) +{ + axis2_handler_t *handler = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + handler = axis2_handler_create(env); + if(!handler) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create addressing out handler"); + return NULL; + } + + axis2_handler_set_invoke(handler, env, axis2_addr_out_handler_invoke); + + return handler; +} + +axis2_status_t AXIS2_CALL +axis2_addr_out_handler_invoke( + struct axis2_handler * handler, + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx) +{ + axis2_char_t *addr_ver_from_msg_ctx = NULL; + const axis2_char_t *addr_ns = NULL; + axis2_msg_info_headers_t *msg_info_headers = NULL; + axis2_ctx_t *ctx = NULL; + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_soap_header_t *soap_header = NULL; + axiom_node_t *soap_header_node = NULL; + axiom_element_t *soap_header_ele = NULL; + axis2_endpoint_ref_t *epr_to = NULL; + axis2_endpoint_ref_t *epr_reply_to = NULL; + axis2_endpoint_ref_t *epr_from = NULL; + axis2_endpoint_ref_t *epr_fault_to = NULL; + axutil_property_t *property = NULL; + const axis2_char_t *wsa_action = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + AXIS2_LOG_INFO(env->log, "Starting addressing out handler"); + + soap_envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + if(!soap_envelope) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "No SOAP envelope. Stop processing addressing"); + return AXIS2_SUCCESS; /* Can happen in case of ONE-WAY services/clients */ + } + + msg_info_headers = axis2_msg_ctx_get_msg_info_headers(msg_ctx, env); + + if(msg_info_headers) + { + wsa_action = axis2_msg_info_headers_get_action(msg_info_headers, env); + } + else + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "No addressing in use"); + return AXIS2_SUCCESS; /* No addressing in use */ + } + + if(!wsa_action || !*wsa_action) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "No action present. Stop processing addressing"); + return AXIS2_SUCCESS; /* If no action present, assume no addressing in use */ + } + + ctx = axis2_msg_ctx_get_base(msg_ctx, env); + property = axis2_ctx_get_property(ctx, env, AXIS2_WSA_VERSION); + + if(property) + { + addr_ver_from_msg_ctx = axutil_property_get_value(property, env); + property = NULL; + } + + /* Setting version 1.0 as the default addressing namespace */ + addr_ns = AXIS2_WSA_NAMESPACE; + + if(addr_ver_from_msg_ctx) + { + if(!axutil_strcmp(AXIS2_WSA_NAMESPACE_SUBMISSION, addr_ver_from_msg_ctx)) + { + addr_ns = AXIS2_WSA_NAMESPACE_SUBMISSION; + } + } + else if(axis2_msg_ctx_get_op_ctx(msg_ctx, env)) + { + axis2_op_ctx_t *op_ctx = NULL; + axis2_msg_ctx_t *in_msg_ctx = NULL; + op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env); + + if(op_ctx) + { + in_msg_ctx = axis2_op_ctx_get_msg_ctx(op_ctx, env, AXIS2_WSDL_MESSAGE_LABEL_IN); + } + + if(in_msg_ctx) + { + axis2_ctx_t *in_ctx = NULL; + in_ctx = axis2_msg_ctx_get_base(in_msg_ctx, env); + + property = axis2_ctx_get_property(in_ctx, env, AXIS2_WSA_VERSION); + if(property) + { + addr_ns = axutil_property_get_value(property, env); + property = NULL; + } + + if(!addr_ns || !*addr_ns) + { + addr_ns = AXIS2_WSA_NAMESPACE; + } + } + } + + soap_header = axiom_soap_envelope_get_header(soap_envelope, env); + if(!soap_header) + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "No SOAP header. Stop processing addressing"); + return AXIS2_SUCCESS; /* No SOAP header, so no point proceeding */ + } + else + { + /* By this time, we definitely have some addressing information to be sent. This is because, + * we have tested at the start of this whether msg_info_headers are null or not. + * So rather than declaring addressing namespace in each and every addressing header, lets + * define that in the Header itself. + */ + const axis2_char_t *action = NULL; + const axis2_char_t *address = NULL; + const axis2_char_t *svc_group_context_id = NULL; + const axis2_char_t *message_id = NULL; + axis2_relates_to_t *relates_to = NULL; + axiom_node_t *relates_to_header_node = NULL; + axiom_element_t *relates_to_header_ele = NULL; + axiom_namespace_t *addressing_namespace = NULL; + + soap_header_node = axiom_soap_header_get_base_node(soap_header, env); + soap_header_ele = (axiom_element_t *)axiom_node_get_data_element(soap_header_node, env); + + addressing_namespace = axiom_namespace_create(env, addr_ns, AXIS2_WSA_DEFAULT_PREFIX); + + axiom_element_declare_namespace(soap_header_ele, env, soap_header_node, + addressing_namespace); + + epr_to = axis2_msg_info_headers_get_to(msg_info_headers, env); + + if(epr_to) + { + axiom_soap_body_t *body = axiom_soap_envelope_get_body(soap_envelope, env); + + if(body) + { + /* In case of a SOAP fault, we got to send the response to + the adress specified by FaultTo */ + if(axiom_soap_body_has_fault(body, env)) + { + axis2_endpoint_ref_t *epr_fault_to = axis2_msg_info_headers_get_fault_to( + msg_info_headers, env); + if(epr_fault_to) + { + const axis2_char_t *fault_to_address = axis2_endpoint_ref_get_address( + epr_fault_to, env); + if(fault_to_address) + { + if(axutil_strcmp(AXIS2_WSA_NONE_URL, fault_to_address) + && axutil_strcmp(AXIS2_WSA_NONE_URL_SUBMISSION, fault_to_address)) + { + axis2_endpoint_ref_set_address(epr_to, env, fault_to_address); + } + } + } + } + } + + address = axis2_endpoint_ref_get_address(epr_to, env); + if(address && *address) + { + axiom_node_t *to_header_block_node = NULL; + axiom_soap_header_block_t *to_header_block = NULL; + axutil_array_list_t *ref_param_list = NULL; + int size = 0; + + to_header_block = axiom_soap_header_add_header_block(soap_header, env, + AXIS2_WSA_TO, addressing_namespace); + to_header_block_node = axiom_soap_header_block_get_base_node(to_header_block, env); + if(to_header_block_node) + { + axiom_element_t *to_header_block_element = NULL; + to_header_block_element = (axiom_element_t *)axiom_node_get_data_element( + to_header_block_node, env); + if(to_header_block_element) + { + axiom_element_set_text(to_header_block_element, env, address, + to_header_block_node); + } + } + + ref_param_list = axis2_endpoint_ref_get_ref_param_list(epr_to, env); + + size = axutil_array_list_size(ref_param_list, env); + if(ref_param_list && size > 0) + { + axiom_soap_header_block_t *reference_header_block = NULL; + axiom_node_t *reference_node = NULL; + int i = 0; + + for(i = 0; i < size; i++) + { + axiom_node_t *temp_node = NULL; + + temp_node = (axiom_node_t *)axutil_array_list_get(ref_param_list, env, i); + if(temp_node) + { + axiom_element_t *temp_ele = NULL; + + temp_ele = axiom_node_get_data_element(temp_node, env); + if(temp_ele) + { + reference_header_block = axiom_soap_header_add_header_block( + soap_header, env, axiom_element_get_localname(temp_ele, env), + axiom_element_get_namespace(temp_ele, env, temp_node)); + + reference_node = axiom_soap_header_block_get_base_node( + reference_header_block, env); + if(reference_node) + { + axiom_element_t *reference_ele = NULL; + reference_ele = (axiom_element_t *)axiom_node_get_data_element( + reference_node, env); + + if(reference_ele) + { + axiom_namespace_t *addr_ns_obj = NULL; + axiom_attribute_t *reference_attr = NULL; + + addr_ns_obj = axiom_namespace_create(env, addr_ns, + AXIS2_WSA_DEFAULT_PREFIX); + reference_attr = axiom_attribute_create(env, + /*"isReferenceParameter"*/ + AXIS2_WSA_IS_REFERENCE_PARAMETER_ATTRIBUTE, "true", + addr_ns_obj); + axiom_element_add_attribute(reference_ele, env, + reference_attr, reference_node); + axiom_element_set_text(reference_ele, env, + axiom_element_get_text(temp_ele, env, temp_node), + reference_node); + } + } + } + } + } + } + } + }/* if(epr_to) */ + + action = axis2_msg_info_headers_get_action(msg_info_headers, env); + if(action && *action) + { + axis2_addr_out_handler_process_string_info(env, action, AXIS2_WSA_ACTION, &soap_header, + addr_ns); + } + + epr_reply_to = axis2_msg_info_headers_get_reply_to(msg_info_headers, env); + if(!epr_reply_to) + { + const axis2_char_t *anonymous_uri = NULL; + axis2_bool_t anonymous = axis2_msg_info_headers_get_reply_to_anonymous( + msg_info_headers, env); + axis2_bool_t none = axis2_msg_info_headers_get_reply_to_none(msg_info_headers, env); + if(!axutil_strcmp(addr_ns, AXIS2_WSA_NAMESPACE_SUBMISSION)) + { + if(none) + { + anonymous_uri = AXIS2_WSA_NONE_URL_SUBMISSION; + } + else if(anonymous) + { + anonymous_uri = AXIS2_WSA_ANONYMOUS_URL_SUBMISSION; + } + } + else + { + if(none) + { + anonymous_uri = AXIS2_WSA_NONE_URL; + } + else if(anonymous) + { + anonymous_uri = AXIS2_WSA_ANONYMOUS_URL; + } + } + + if(anonymous_uri) + { + epr_reply_to = axis2_endpoint_ref_create(env, anonymous_uri); + } + + if(epr_reply_to) + { + axis2_msg_info_headers_set_reply_to(msg_info_headers, env, epr_reply_to); + } + } + + /* add the service group id as a reference parameter */ + svc_group_context_id = axutil_string_get_buffer(axis2_msg_ctx_get_svc_grp_ctx_id(msg_ctx, + env), env); + + axis2_addr_out_handler_add_to_soap_header(env, epr_reply_to, AXIS2_WSA_REPLY_TO, + soap_header, addr_ns); + + epr_from = axis2_msg_info_headers_get_from(msg_info_headers, env); + + if(epr_from) + { + axis2_addr_out_handler_add_to_soap_header(env, epr_from, AXIS2_WSA_FROM, soap_header, + addr_ns); + + } + + epr_fault_to = axis2_msg_info_headers_get_fault_to(msg_info_headers, env); + if(!epr_fault_to) + { + const axis2_char_t *anonymous_uri = NULL; + axis2_bool_t anonymous = axis2_msg_info_headers_get_fault_to_anonymous( + msg_info_headers, env); + axis2_bool_t none = axis2_msg_info_headers_get_fault_to_none(msg_info_headers, env); + if(!axutil_strcmp(addr_ns, AXIS2_WSA_NAMESPACE_SUBMISSION)) + { + if(none) + { + anonymous_uri = AXIS2_WSA_NONE_URL_SUBMISSION; + } + else if(anonymous) + { + anonymous_uri = AXIS2_WSA_ANONYMOUS_URL_SUBMISSION; + } + } + else + { + if(none) + anonymous_uri = AXIS2_WSA_NONE_URL; + else if(anonymous) + anonymous_uri = AXIS2_WSA_ANONYMOUS_URL; + } + + if(anonymous_uri) + { + epr_fault_to = axis2_endpoint_ref_create(env, anonymous_uri); + } + } + + if(epr_fault_to) + { + /* optional */ + axis2_addr_out_handler_add_to_soap_header(env, epr_fault_to, AXIS2_WSA_FAULT_TO, + soap_header, addr_ns); + } + + message_id = axis2_msg_info_headers_get_message_id(msg_info_headers, env); + + if(message_id) + { + axis2_addr_out_handler_process_string_info(env, message_id, AXIS2_WSA_MESSAGE_ID, + &soap_header, addr_ns); + } + + relates_to = axis2_msg_info_headers_get_relates_to(msg_info_headers, env); + + if(relates_to) + { + const axis2_char_t *value = NULL; + value = axis2_relates_to_get_value(relates_to, env); + relates_to_header_node = axis2_addr_out_handler_process_string_info(env, value, + AXIS2_WSA_RELATES_TO, &soap_header, addr_ns); + } + + if(relates_to_header_node) + { + const axis2_char_t *relationship_type = NULL; + relationship_type = axis2_relates_to_get_relationship_type(relates_to, env); + if(relationship_type && *relationship_type) + { + axiom_attribute_t *om_attr = NULL; + axiom_namespace_t *addr_ns_obj = NULL; + axiom_namespace_t *dec_ns = NULL; + relates_to_header_ele = (axiom_element_t *)axiom_node_get_data_element( + relates_to_header_node, env); + if(relates_to_header_ele) + { + dec_ns = axiom_element_find_declared_namespace(relates_to_header_ele, env, + addr_ns, AXIS2_WSA_DEFAULT_PREFIX); + if(dec_ns) + { + addr_ns_obj = dec_ns; + } + else + { + addr_ns_obj + = axiom_namespace_create(env, addr_ns, AXIS2_WSA_DEFAULT_PREFIX); + } + + if(!axutil_strcmp(addr_ns, AXIS2_WSA_NAMESPACE_SUBMISSION)) + { + om_attr = axiom_attribute_create(env, + AXIS2_WSA_RELATES_TO_RELATIONSHIP_TYPE, + AXIS2_WSA_RELATES_TO_RELATIONSHIP_TYPE_DEFAULT_VALUE_SUBMISSION, + addr_ns_obj); + } + else + { + om_attr = axiom_attribute_create(env, + AXIS2_WSA_RELATES_TO_RELATIONSHIP_TYPE, + AXIS2_WSA_RELATES_TO_RELATIONSHIP_TYPE_DEFAULT_VALUE, addr_ns_obj); + } + + axiom_element_add_attribute(relates_to_header_ele, env, om_attr, + relates_to_header_node); + + dec_ns = axiom_element_find_declared_namespace(relates_to_header_ele, env, + addr_ns, AXIS2_WSA_DEFAULT_PREFIX); + if(!dec_ns) + { + dec_ns = axiom_element_find_namespace(relates_to_header_ele, env, + relates_to_header_node, addr_ns, AXIS2_WSA_DEFAULT_PREFIX); + if(dec_ns) + { + axiom_namespace_free(addr_ns_obj, env); + addr_ns_obj = NULL; + axiom_attribute_set_namespace(om_attr, env, dec_ns); + } + } + } + + } + } + } + return AXIS2_SUCCESS; +} + +axiom_node_t * +axis2_addr_out_handler_process_string_info( + const axutil_env_t * env, + const axis2_char_t * value, + const axis2_char_t * type, + axiom_soap_header_t ** soap_header_p, + const axis2_char_t * addr_ns) +{ + axiom_soap_header_t *soap_header = NULL; + axiom_soap_header_block_t *header_block = NULL; + axiom_node_t *header_block_node = NULL; + axiom_element_t *header_block_ele = NULL; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, value, NULL); + AXIS2_PARAM_CHECK(env->error, type, NULL); + AXIS2_PARAM_CHECK(env->error, soap_header_p, NULL); + AXIS2_PARAM_CHECK(env->error, addr_ns, NULL); + + soap_header = *(soap_header_p); + + if(value && *value) + { + axiom_namespace_t *addr_ns_obj = NULL; + addr_ns_obj = axiom_namespace_create(env, addr_ns, AXIS2_WSA_DEFAULT_PREFIX); + header_block = axiom_soap_header_add_header_block(soap_header, env, type, addr_ns_obj); + header_block_node = axiom_soap_header_block_get_base_node(header_block, env); + header_block_ele = (axiom_element_t *)axiom_node_get_data_element(header_block_node, env); + if(header_block_ele) + { + axiom_namespace_t *dec_ns = NULL; + axiom_element_set_text(header_block_ele, env, value, header_block_node); + dec_ns = axiom_element_find_declared_namespace(header_block_ele, env, addr_ns, + AXIS2_WSA_DEFAULT_PREFIX); + if(!dec_ns) + { + axiom_namespace_free(addr_ns_obj, env); + addr_ns_obj = NULL; + } + } + } + return header_block_node; +} + +axis2_status_t +axis2_addr_out_handler_add_to_soap_header( + const axutil_env_t * env, + axis2_endpoint_ref_t * endpoint_ref, + const axis2_char_t * type, + axiom_soap_header_t * soap_header, + const axis2_char_t * addr_ns) +{ + axiom_soap_header_block_t *header_block = NULL; + const axis2_char_t *address = NULL; + axutil_array_list_t *ref_param_list = NULL; + axutil_array_list_t *meta_data_list = NULL; + axutil_array_list_t *extension_list = NULL; + axiom_node_t *header_block_node = NULL; + axiom_node_t *header_node = NULL; + axiom_namespace_t *addr_ns_obj = NULL; + int size = 0; + + AXIS2_PARAM_CHECK(env->error, endpoint_ref, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, type, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, soap_header, AXIS2_FAILURE); + + header_node = axiom_soap_header_get_base_node(soap_header, env); + + addr_ns_obj = axiom_namespace_create(env, addr_ns, AXIS2_WSA_DEFAULT_PREFIX); + header_block = axiom_soap_header_add_header_block(soap_header, env, type, addr_ns_obj); + + if(addr_ns_obj) + { + axiom_namespace_free(addr_ns_obj, env); + addr_ns_obj = NULL; + } + + address = axis2_endpoint_ref_get_address(endpoint_ref, env); + if(address && *address) + { + axiom_node_t *hb_node = NULL; + axiom_element_t *hb_ele = NULL; + axiom_node_t *address_node = NULL; + axiom_element_t *address_ele = NULL; + hb_node = axiom_soap_header_block_get_base_node(header_block, env); + hb_ele = (axiom_element_t *)axiom_node_get_data_element(hb_node, env); + + addr_ns_obj = axiom_namespace_create(env, addr_ns, AXIS2_WSA_DEFAULT_PREFIX); + + address_ele = axiom_element_create(env, hb_node, EPR_ADDRESS, addr_ns_obj, &address_node); + if(address_ele) + { + axiom_namespace_t *dec_ns = NULL; + axiom_element_set_text(address_ele, env, address, address_node); + dec_ns = axiom_element_find_declared_namespace(address_ele, env, addr_ns, + AXIS2_WSA_DEFAULT_PREFIX); + } + } + + header_block_node = axiom_soap_header_block_get_base_node(header_block, env); + axis2_addr_out_handler_add_to_header(env, endpoint_ref, &header_block_node, addr_ns); + + ref_param_list = axis2_endpoint_ref_get_ref_param_list(endpoint_ref, env); + if(ref_param_list && axutil_array_list_size(ref_param_list, env) > 0) + { + axiom_node_t *reference_node = NULL; + axiom_element_t *reference_ele = NULL; + axutil_array_list_t *ref_attribute_list = NULL; + int i = 0; + + addr_ns_obj = axiom_namespace_create(env, addr_ns, AXIS2_WSA_DEFAULT_PREFIX); + + reference_ele = axiom_element_create(env, header_block_node, EPR_REFERENCE_PARAMETERS, + addr_ns_obj, &reference_node); + + ref_attribute_list = axis2_endpoint_ref_get_ref_attribute_list(endpoint_ref, env); + if(ref_attribute_list) + { + int j = 0; + + size = axutil_array_list_size(ref_attribute_list, env); + for(j = 0; j < size; j++) + { + axiom_attribute_t *attr = (axiom_attribute_t *)axutil_array_list_get( + ref_attribute_list, env, j); + if(attr) + { + axiom_element_add_attribute(reference_ele, env, attr, reference_node); + } + } + } + + size = axutil_array_list_size(ref_param_list, env); + for(i = 0; i < size; i++) + { + axiom_node_t *ref_node = (axiom_node_t *)axutil_array_list_get(ref_param_list, env, i); + if(ref_node) + { + axiom_node_add_child(reference_node, env, ref_node); + } + } + + } + + meta_data_list = axis2_endpoint_ref_get_metadata_list(endpoint_ref, env); + if(meta_data_list && axutil_array_list_size(meta_data_list, env) > 0) + { + axiom_node_t *reference_node = NULL; + axiom_element_t *reference_ele = NULL; + axutil_array_list_t *meta_attribute_list = NULL; + int i = 0; + + if(!reference_node) /* may be we alredy created this in ref params block */ + { + addr_ns_obj = axiom_namespace_create(env, addr_ns, AXIS2_WSA_DEFAULT_PREFIX); + + reference_ele = axiom_element_create(env, header_block_node, AXIS2_WSA_METADATA, + addr_ns_obj, &reference_node); + } + + meta_attribute_list = axis2_endpoint_ref_get_metadata_attribute_list(endpoint_ref, env); + if(meta_attribute_list) + { + int j = 0; + size = axutil_array_list_size(meta_attribute_list, env); + for(j = 0; j < size; j++) + { + axiom_attribute_t *attr = (axiom_attribute_t *)axutil_array_list_get( + meta_attribute_list, env, j); + if(attr) + { + axiom_element_add_attribute(reference_ele, env, attr, reference_node); + } + } + } + + size = axutil_array_list_size(meta_data_list, env); + for(i = 0; i < size; i++) + { + axiom_node_t *ref_node = (axiom_node_t *)axutil_array_list_get(meta_data_list, env, i); + if(ref_node) + { + axiom_node_add_child(reference_node, env, ref_node); + } + } + } + + extension_list = axis2_endpoint_ref_get_extension_list(endpoint_ref, env); + if(extension_list && axutil_array_list_size(extension_list, env) > 0) + { + int i = 0; + + size = axutil_array_list_size(extension_list, env); + for(i = 0; i < size; i++) + { + axiom_node_t *ref_node = (axiom_node_t *)axutil_array_list_get(extension_list, env, i); + if(ref_node) + { + axiom_node_add_child(header_block_node, env, ref_node); + } + } + } + + return AXIS2_SUCCESS; +} + +axis2_status_t +axis2_addr_out_handler_add_to_header( + const axutil_env_t * env, + axis2_endpoint_ref_t * epr, + axiom_node_t ** parent_node_p, + const axis2_char_t * addr_ns) +{ + axiom_node_t *parent_node = NULL; + const axutil_qname_t *interface_qname = NULL; + axiom_node_t *interface_node = NULL; + axiom_element_t *interface_ele = NULL; + const axis2_char_t *element_localname = NULL; + axis2_svc_name_t *service_name = NULL; + axiom_namespace_t *addr_ns_obj = NULL; + + AXIS2_PARAM_CHECK(env->error, epr, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, parent_node_p, AXIS2_FAILURE); + + parent_node = *(parent_node_p); + + interface_qname = axis2_endpoint_ref_get_interface_qname(epr, env); + + if(interface_qname) + { + axis2_char_t *text = NULL; + axis2_char_t *qname_prefix = NULL; + axis2_char_t *qname_localpart = NULL; + + addr_ns_obj = axiom_namespace_create(env, addr_ns, AXIS2_WSA_DEFAULT_PREFIX); + + if(!axutil_strcmp(addr_ns, AXIS2_WSA_NAMESPACE_SUBMISSION)) + { + element_localname = EPR_PORT_TYPE; + } + else + { + element_localname = AXIS2_WSA_INTERFACE_NAME; + } + + interface_ele = axiom_element_create(env, parent_node, element_localname, addr_ns_obj, + &interface_node); + qname_prefix = axutil_qname_get_prefix(interface_qname, env); + qname_localpart = axutil_qname_get_localpart(interface_qname, env); + + text = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (axutil_strlen(qname_prefix) + + axutil_strlen(qname_localpart) + 2)); + sprintf(text, "%s:%s", qname_prefix, qname_localpart); + axiom_element_set_text(interface_ele, env, text, interface_node); + AXIS2_FREE(env->allocator, text); + if(interface_ele) + { + axiom_namespace_t *dec_ns = NULL; + dec_ns = axiom_element_find_declared_namespace(interface_ele, env, addr_ns, + AXIS2_WSA_DEFAULT_PREFIX); + if(!dec_ns) + { + axiom_namespace_free(addr_ns_obj, env); + addr_ns_obj = NULL; + } + } + + } + + service_name = axis2_endpoint_ref_get_svc_name(epr, env); + return AXIS2_SUCCESS; +} + +axis2_status_t +axis2_addr_out_handler_process_any_content_type( + const axutil_env_t * env, + axis2_any_content_type_t * reference_values, + axiom_node_t * parent_ele_node, + const axis2_char_t * addr_ns) +{ + axutil_hash_t *value_ht = NULL; + axutil_hash_index_t *hash_index = NULL; + + if(reference_values) + { + const void *key = NULL; + void *val = NULL; + axis2_ssize_t len = 0; + value_ht = axis2_any_content_type_get_value_map(reference_values, env); + if(!value_ht) + { + return AXIS2_FAILURE; + } + + for(hash_index = axutil_hash_first(value_ht, env); hash_index; hash_index + = axutil_hash_next(env, hash_index)) + { + axutil_hash_this(hash_index, &key, &len, &val); + if(key) + { + axiom_node_t *node = NULL; + axiom_element_t *ele = NULL; + ele = axiom_element_create(env, parent_ele_node, key, NULL, &node); + if(ele) + { + if(!axutil_strcmp(AXIS2_WSA_NAMESPACE, addr_ns)) + { + axiom_namespace_t *addr_ns_obj = NULL; + axiom_attribute_t *att = NULL; + addr_ns_obj + = axiom_namespace_create(env, addr_ns, AXIS2_WSA_DEFAULT_PREFIX); + att = axiom_attribute_create(env, + AXIS2_WSA_IS_REFERENCE_PARAMETER_ATTRIBUTE, + AXIS2_WSA_TYPE_ATTRIBUTE_VALUE, addr_ns_obj); + } + axiom_element_set_text(ele, env, val, node); + } + } + } + } + return AXIS2_SUCCESS; +} diff --git a/src/modules/mod_addr/mod_addr.c b/src/modules/mod_addr/mod_addr.c new file mode 100644 index 0000000..f92400c --- /dev/null +++ b/src/modules/mod_addr/mod_addr.c @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include + +axis2_status_t AXIS2_CALL +axis2_mod_addr_shutdown( + axis2_module_t * module, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +axis2_mod_addr_init( + axis2_module_t * module, + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_module_desc_t * module_desc); + +axis2_status_t AXIS2_CALL +axis2_mod_addr_fill_handler_create_func_map( + axis2_module_t * module, + const axutil_env_t * env); + +static const axis2_module_ops_t addr_module_ops_var = { axis2_mod_addr_init, + axis2_mod_addr_shutdown, axis2_mod_addr_fill_handler_create_func_map }; + +axis2_module_t * +axis2_mod_addr_create( + const axutil_env_t * env) +{ + axis2_module_t *module = NULL; + + module = AXIS2_MALLOC(env->allocator, sizeof(axis2_module_t)); + + if(!module) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create the addressing module"); + return NULL; + } + + module->ops = &addr_module_ops_var; + module->handler_create_func_map = NULL; + + return module; +} + +axis2_status_t AXIS2_CALL +axis2_mod_addr_init( + axis2_module_t * module, + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_module_desc_t * module_desc) +{ + /* Any initialization stuff of mod_addr goes here */ + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_mod_addr_shutdown( + axis2_module_t * module, + const axutil_env_t * env) +{ + if(module->handler_create_func_map) + { + axutil_hash_free(module->handler_create_func_map, env); + module->handler_create_func_map = NULL; + } + + if(module) + { + AXIS2_FREE(env->allocator, module); + module = NULL; + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_mod_addr_fill_handler_create_func_map( + axis2_module_t * module, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, module, AXIS2_FAILURE); + + module->handler_create_func_map = axutil_hash_make(env); + + if(!module->handler_create_func_map) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create the function map"); + return AXIS2_FAILURE; + } + axutil_hash_set(module->handler_create_func_map, ADDR_IN_HANDLER, AXIS2_HASH_KEY_STRING, + axis2_addr_in_handler_create); + + axutil_hash_set(module->handler_create_func_map, ADDR_OUT_HANDLER, AXIS2_HASH_KEY_STRING, + axis2_addr_out_handler_create); + + return AXIS2_SUCCESS; +} + +/** + * Following block distinguish the exposed part of the dll. + */ + +AXIS2_EXPORT int +axis2_get_instance( + axis2_module_t ** inst, + const axutil_env_t * env) +{ + *inst = axis2_mod_addr_create(env); + if(!(*inst)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create addressing module"); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_module_t * inst, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + + if(inst) + { + status = axis2_mod_addr_shutdown(inst, env); + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_MODULE_NOT_FOUND, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Addressing module not found"); + } + + return status; +} diff --git a/src/modules/mod_addr/module.xml b/src/modules/mod_addr/module.xml new file mode 100644 index 0000000..8fd59a8 --- /dev/null +++ b/src/modules/mod_addr/module.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/mod_log/Makefile.am b/src/modules/mod_log/Makefile.am new file mode 100644 index 0000000..9e1064c --- /dev/null +++ b/src/modules/mod_log/Makefile.am @@ -0,0 +1,22 @@ +prglibdir=$(prefix)/modules/logging +prglib_LTLIBRARIES = libaxis2_mod_log.la +prglib_DATA= module.xml +EXTRA_DIST = module.xml mod_log.h +libaxis2_mod_log_la_SOURCES = log_in_handler.c \ + log_out_handler.c \ + mod_log.c + +libaxis2_mod_log_la_LIBADD = \ + $(top_builddir)/util/src/libaxutil.la \ + $(top_builddir)/axiom/src/om/libaxis2_axiom.la + +libaxis2_mod_log_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/util/include\ + -I$(top_builddir)/axiom/include diff --git a/src/modules/mod_log/log_in_handler.c b/src/modules/mod_log/log_in_handler.c new file mode 100644 index 0000000..e7f7464 --- /dev/null +++ b/src/modules/mod_log/log_in_handler.c @@ -0,0 +1,90 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +axis2_status_t AXIS2_CALL +axutil_log_in_handler_invoke( + struct axis2_handler * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx); + +AXIS2_EXTERN axis2_handler_t *AXIS2_CALL +axutil_log_in_handler_create( + const axutil_env_t * env, + axutil_string_t * name) +{ + axis2_handler_t *handler = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + handler = axis2_handler_create(env); + if(!handler) + { + return NULL; + } + + axis2_handler_set_invoke(handler, env, axutil_log_in_handler_invoke); + + return handler; +} + +axis2_status_t AXIS2_CALL +axutil_log_in_handler_invoke( + struct axis2_handler * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_node_t *ret_node = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + AXIS2_LOG_INFO(env->log, "Starting logging in handler ........."); + + soap_envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + + if(soap_envelope) + { + /* ensure SOAP buider state is in sync */ + axiom_soap_envelope_get_body(soap_envelope, env); + ret_node = axiom_soap_envelope_get_base_node(soap_envelope, env); + + if(ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if(om_str) + { + AXIS2_LOG_INFO(env->log, "Input message: %s", om_str); + } + } + } + + return AXIS2_SUCCESS; +} diff --git a/src/modules/mod_log/log_out_handler.c b/src/modules/mod_log/log_out_handler.c new file mode 100644 index 0000000..14af2b6 --- /dev/null +++ b/src/modules/mod_log/log_out_handler.c @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +axis2_status_t AXIS2_CALL +axutil_log_out_handler_invoke( + struct axis2_handler * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx); + +AXIS2_EXTERN axis2_handler_t *AXIS2_CALL +axutil_log_out_handler_create( + const axutil_env_t * env, + axutil_string_t * name) +{ + axis2_handler_t *handler = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + handler = axis2_handler_create(env); + if(!handler) + { + return NULL; + } + + axis2_handler_set_invoke(handler, env, axutil_log_out_handler_invoke); + + return handler; +} + +axis2_status_t AXIS2_CALL +axutil_log_out_handler_invoke( + struct axis2_handler * handler, + const axutil_env_t * env, + struct axis2_msg_ctx * msg_ctx) +{ + axiom_soap_envelope_t *soap_envelope = NULL; + axiom_node_t *ret_node = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); + + AXIS2_LOG_INFO(env->log, "Starting logging out handler ........."); + + soap_envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); + + if(soap_envelope) + { + ret_node = axiom_soap_envelope_get_base_node(soap_envelope, env); + + if(ret_node) + { + axis2_char_t *om_str = NULL; + om_str = axiom_node_to_string(ret_node, env); + if(om_str) + { + AXIS2_LOG_INFO(env->log, "Output message: %s", om_str); + } + } + } + + return AXIS2_SUCCESS; +} diff --git a/src/modules/mod_log/mod_log.c b/src/modules/mod_log/mod_log.c new file mode 100644 index 0000000..ce68c91 --- /dev/null +++ b/src/modules/mod_log/mod_log.c @@ -0,0 +1,141 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include + +#include "mod_log.h" + +axis2_status_t AXIS2_CALL +axis2_mod_log_shutdown( + axis2_module_t * module, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL +axis2_mod_log_init( + axis2_module_t * module, + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_module_desc_t * module_desc); + +axis2_status_t AXIS2_CALL +axis2_mod_log_fill_handler_create_func_map( + axis2_module_t * module, + const axutil_env_t * env); + +/** + * Module operations struct variable with functions assigned to members + */ +static const axis2_module_ops_t log_module_ops_var = { axis2_mod_log_init, axis2_mod_log_shutdown, + axis2_mod_log_fill_handler_create_func_map }; + +axis2_module_t * +axis2_mod_log_create( + const axutil_env_t * env) +{ + axis2_module_t *module = NULL; + module = AXIS2_MALLOC(env->allocator, sizeof(axis2_module_t)); + + /* initialize operations */ + module->ops = &log_module_ops_var; + + return module; +} + +axis2_status_t AXIS2_CALL +axis2_mod_log_init( + axis2_module_t * module, + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_module_desc_t * module_desc) +{ + /* Any initialization stuff related to this module can be here */ + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_mod_log_shutdown( + axis2_module_t * module, + const axutil_env_t * env) +{ + if(module->handler_create_func_map) + { + axutil_hash_free(module->handler_create_func_map, env); + } + + if(module) + { + AXIS2_FREE(env->allocator, module); + } + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axis2_mod_log_fill_handler_create_func_map( + axis2_module_t * module, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + module->handler_create_func_map = axutil_hash_make(env); + if(!module->handler_create_func_map) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + /* add in handler */ + axutil_hash_set(module->handler_create_func_map, "LoggingInHandler", AXIS2_HASH_KEY_STRING, + axutil_log_in_handler_create); + + /* add out handler */ + axutil_hash_set(module->handler_create_func_map, "LoggingOutHandler", AXIS2_HASH_KEY_STRING, + axutil_log_out_handler_create); + + return AXIS2_SUCCESS; +} + +/** + * Following functions are expected to be there in the module lib + * that helps to create and remove module instances + */ + +AXIS2_EXPORT int +axis2_get_instance( + axis2_module_t ** inst, + const axutil_env_t * env) +{ + *inst = axis2_mod_log_create(env); + if(!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_module_t * inst, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + if(inst) + { + status = axis2_mod_log_shutdown(inst, env); + } + return status; +} diff --git a/src/modules/mod_log/mod_log.h b/src/modules/mod_log/mod_log.h new file mode 100644 index 0000000..c399187 --- /dev/null +++ b/src/modules/mod_log/mod_log.h @@ -0,0 +1,50 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_MOD_LOG_H +#define AXIS2_MOD_LOG_H + +/** + * @file mod_log.h + * @brief Axis2 logging module interface + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN axis2_handler_t *AXIS2_CALL + axutil_log_in_handler_create( + const axutil_env_t * env, + axutil_string_t * name); + + AXIS2_EXTERN axis2_handler_t *AXIS2_CALL + axutil_log_out_handler_create( + const axutil_env_t * env, + axutil_string_t * name); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_MOD_LOG_H */ diff --git a/src/modules/mod_log/module.xml b/src/modules/mod_log/module.xml new file mode 100644 index 0000000..8518b20 --- /dev/null +++ b/src/modules/mod_log/module.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/test/Makefile.am b/test/Makefile.am new file mode 100644 index 0000000..c95f314 --- /dev/null +++ b/test/Makefile.am @@ -0,0 +1,2 @@ +TESTS = +SUBDIRS = core diff --git a/test/core/Makefile.am b/test/core/Makefile.am new file mode 100644 index 0000000..3fa8f58 --- /dev/null +++ b/test/core/Makefile.am @@ -0,0 +1,3 @@ +TESTS = +SUBDIRS = description context engine deployment addr transport clientapi + diff --git a/test/core/addr/Makefile.am b/test/core/addr/Makefile.am new file mode 100644 index 0000000..9d42172 --- /dev/null +++ b/test/core/addr/Makefile.am @@ -0,0 +1,21 @@ +TESTS = test_addr +check_PROGRAMS = test_addr +noinst_PROGRAMS = test_addr +SUBDIRS = +AM_CFLAGS = -g -pthread +test_addr_SOURCES = test_addr.c + +test_addr_LDADD = \ + ../../../util/src/libaxutil.la \ + ../../../axiom/src/om/libaxis2_axiom.la \ + ../../../axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + $(top_builddir)/neethi/src/libneethi.la \ + $(top_builddir)/src/core/engine/libaxis2_engine.la \ + $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la + +INCLUDES = -I${CUTEST_HOME}/include \ + -I$(top_builddir)/src/xml/guththila \ + -I$(top_builddir)/include \ + -I ../../../util/include \ + -I ../../../axiom/include + diff --git a/test/core/addr/test_addr.c b/test/core/addr/test_addr.c new file mode 100644 index 0000000..c013a57 --- /dev/null +++ b/test/core/addr/test_addr.c @@ -0,0 +1,182 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +int +axis2_test_msg_info_headers( + ) +{ + axis2_endpoint_ref_t *to = NULL; + axis2_endpoint_ref_t *from = NULL; + axis2_endpoint_ref_t *reply_to = NULL; + axis2_endpoint_ref_t *fault_to = NULL; + axis2_endpoint_ref_t *axis2_endpoint_ref = NULL; + axis2_status_t status = AXIS2_FAILURE; + axis2_msg_info_headers_t *axis2_msg_info_headers = NULL; + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + const axutil_env_t *env = axutil_env_create(allocator); + const axis2_char_t *action = "test action"; + const axis2_char_t *get_action = NULL; + to = axis2_endpoint_ref_create(env, "to"); + from = axis2_endpoint_ref_create(env, "from"); + reply_to = axis2_endpoint_ref_create(env, "reply to"); + fault_to = axis2_endpoint_ref_create(env, "fault to"); + + axis2_msg_info_headers = axis2_msg_info_headers_create(env, NULL, action); + if (axis2_msg_info_headers) + printf("SUCCESS axis2_msg_info_headers_create\n"); + else + { + printf("ERROR AXIS2_MSG_INFO_HEADERS_CREATE\n"); + return -1; + } + + status = axis2_msg_info_headers_set_to(axis2_msg_info_headers, env, to); + + if (status == AXIS2_SUCCESS) + printf("SUCCESS axis2_msg_info_headers_set_to\n"); + else + { + printf("ERROR axis2_msg_info_headers_set_to"); + return -1; + } + + axis2_endpoint_ref = + axis2_msg_info_headers_get_to(axis2_msg_info_headers, env); + + if (axis2_endpoint_ref) + printf("SUCCESS axis2_msg_info_headers_get_to\n"); + else + { + printf("ERROR axis2_msg_info_headers_get_to\n"); + return -1; + } + + status = AXIS2_FAILURE; + status = axis2_msg_info_headers_set_from(axis2_msg_info_headers, env, from); + + if (status) + printf("SUCCESS axis2_msg_info_headers_set_from\n"); + else + { + printf("ERROR axis2_msg_info_headers_set_from\n"); + return -1; + } + + axis2_endpoint_ref = NULL; + axis2_endpoint_ref = + axis2_msg_info_headers_get_from(axis2_msg_info_headers, env); + + if (axis2_endpoint_ref) + printf("SUCCESS axis2_msg_info_headers_get_from\n"); + else + { + printf("ERROR axis2_msg_info_headers_get_from\n"); + return -1; + } + + axis2_endpoint_ref = NULL; + axis2_endpoint_ref = + axis2_msg_info_headers_get_reply_to(axis2_msg_info_headers, env); + + if (status) + printf("SUCCESS axis2_msg_info_headers_get_reply_to\n"); + else + { + printf("ERROR axis2_msg_info_headers_get_reply_to\n"); + return -1; + } + + status = AXIS2_FAILURE; + status = + axis2_msg_info_headers_set_reply_to(axis2_msg_info_headers, env, + reply_to); + + if (status) + printf("SUCCESS axis2_msg_info_headers_set_reply_to\n"); + else + { + printf("ERROR axis2_msg_info_headers_set_reply_to\n"); + return -1; + } + + status = AXIS2_FAILURE; + status = + axis2_msg_info_headers_set_fault_to(axis2_msg_info_headers, env, + fault_to); + if (status) + printf("SUCCESS axis2_msg_info_headers_set_fault_to\n"); + else + { + printf("ERROR axis2_msg_info_headers_set_fault_to\n"); + return -1; + } + + axis2_endpoint_ref = NULL; + axis2_endpoint_ref = + axis2_msg_info_headers_get_fault_to(axis2_msg_info_headers, env); + if (axis2_endpoint_ref) + printf("SUCCESS axis2_msg_info_headers_get_fault_to\n"); + else + { + printf("ERROR axis2_msg_info_headers_get_fault_to\n"); + return -1; + } + + get_action = axis2_msg_info_headers_get_action(axis2_msg_info_headers, env); + if (get_action) + printf("SUCCESS axis2_msg_info_headers_get_action\n"); + else + { + printf("ERROR axis2_msg_info_headers_get_action\n"); + return -1; + } + + status = AXIS2_FAILURE; + status = + axis2_msg_info_headers_set_action(axis2_msg_info_headers, env, action); + if (status) + printf("SUCCESS axis2_msg_info_headers_set_action\n"); + else + { + printf("ERROR axis2_msg_info_headers_set_action\n"); + } + + status = AXIS2_FAILURE; + /* status = axis2_msg_info_headers_free(axis2_msg_info_headers, env); */ + if (status) + printf("SUCCESS axis2_msg_info_headers_free\n"); + else + { + printf("ERROR axis2_msg_info_headers_free\n"); + } + return 0; +} + +int +main( + ) +{ + axis2_test_msg_info_headers(); + return 0; +} diff --git a/test/core/clientapi/Makefile.am b/test/core/clientapi/Makefile.am new file mode 100644 index 0000000..e88c350 --- /dev/null +++ b/test/core/clientapi/Makefile.am @@ -0,0 +1,49 @@ +TESTS = test_client test_clientapi test_svc_client_handler_count +noinst_PROGRAMS = test_client test_clientapi test_svc_client_handler_count +check_PROGRAMS = test_client test_clientapi test_svc_client_handler_count +SUBDIRS = +AM_CFLAGS = -g -pthread +test_client_SOURCES = test_client.c +test_clientapi_SOURCES = test_clientapi.c +test_svc_client_handler_count_SOURCES = test_svc_client_handler_count.c + +test_clientapi_LDADD = \ + ../../../util/src/libaxutil.la \ + ../../../axiom/src/om/libaxis2_axiom.la \ + ../../../axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + $(top_builddir)/neethi/src/libneethi.la \ + -lpthread \ + $(top_builddir)/src/core/engine/libaxis2_engine.la \ + $(top_builddir)/src/core/transport/http/sender/libaxis2_http_sender.la + +test_client_LDADD = \ + ../../../util/src/libaxutil.la \ + ../../../axiom/src/om/libaxis2_axiom.la \ + ../../../axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + $(top_builddir)/neethi/src/libneethi.la \ + -lpthread \ + $(top_builddir)/src/core/engine/libaxis2_engine.la \ + $(top_builddir)/src/core/transport/http/sender/libaxis2_http_sender.la + +test_svc_client_handler_count_LDADD = \ + ../../../util/src/libaxutil.la \ + ../../../axiom/src/om/libaxis2_axiom.la \ + ../../../axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + $(top_builddir)/neethi/src/libneethi.la \ + -lpthread \ + $(top_builddir)/src/core/engine/libaxis2_engine.la \ + $(top_builddir)/src/core/transport/http/sender/libaxis2_http_sender.la + + +INCLUDES = -I${CUTEST_HOME}/include \ + -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/clientapi \ + -I ../../../util/include \ + -I ../../../neethi/include \ + -I ../../../axiom/include + diff --git a/test/core/clientapi/addr_echo.xml b/test/core/clientapi/addr_echo.xml new file mode 100644 index 0000000..85284bf --- /dev/null +++ b/test/core/clientapi/addr_echo.xml @@ -0,0 +1,23 @@ + + + + + uuid:967F11455D2EC0EC9411374901147634 + 1 + + + http://127.0.0.1:9090/axis2/services/echo + http://127.0.0.1:9090/axis2/services/echo/__OPERATION_OUT_IN__ + + http://192.168.1.217:9090/axis2/services/__ANONYMOUS_SERVICE__/__OPERATION_OUT_IN__ + + 38DDECF77196B604F511374901138822 + + + + + echo5 + + + \ No newline at end of file diff --git a/test/core/clientapi/echo.xml b/test/core/clientapi/echo.xml new file mode 100644 index 0000000..fad1895 --- /dev/null +++ b/test/core/clientapi/echo.xml @@ -0,0 +1 @@ +echo5 diff --git a/test/core/clientapi/test_client.c b/test/core/clientapi/test_client.c new file mode 100644 index 0000000..83a417e --- /dev/null +++ b/test/core/clientapi/test_client.c @@ -0,0 +1,182 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Function prototypes */ +int write_to_socket( + const char *address, + const char *port, + const char *filename, + const char *endpoint); + +/* End of function prototypes */ + +void +error( + const char *msg) +{ + perror(msg); + exit(0); +} + +int +main( + int argc, + char *argv[]) +{ + const axis2_char_t *hostname = "localhost"; + const axis2_char_t *port = "9090"; + const axis2_char_t *filename = "echo.xml"; + const axis2_char_t *endpoint = "/axis2/services/echo/echo"; + int c; + extern char *optarg; + + while ((c = getopt(argc, argv, ":h:p:f:e:")) != -1) + { + switch (c) + { + case 'h': + hostname = optarg; + break; + case 'p': + port = optarg; + break; + case 'f': + filename = optarg; + break; + case 'e': + endpoint = optarg; + break; + } + } + + write_to_socket(hostname, port, filename, endpoint); + return 0; +} + +int +write_to_socket( + const char *address, + const char *port, + const char *filename, + const char *endpoint) +{ + axis2_char_t buffer_l[4999]; + int sockfd, + portno, + n, + i; + struct sockaddr_in serv_addr; + struct hostent *server; + struct stat buf; + axis2_char_t *buffer; + axis2_char_t tmpstr[10]; + int bufsize = 0; + + portno = atoi(port); + sockfd = socket(AF_INET, SOCK_STREAM, 0); + if (sockfd < 0) + error("ERROR opening socket"); + server = gethostbyname(address); + if (server == NULL) + { + fprintf(stderr, "ERROR, no such host\n"); + exit(0); + } + bzero((char *) &serv_addr, sizeof(serv_addr)); + serv_addr.sin_family = AF_INET; + bcopy((char *) server->h_addr, + (char *) &serv_addr.sin_addr.s_addr, server->h_length); + serv_addr.sin_port = htons(portno); + if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) + error("ERROR connecting"); + + /* Read from file */ + stat(filename, &buf); + bufsize = (buf.st_size + 1) * sizeof(char); + buffer = (char *) malloc(bufsize); + int fd = open(filename, O_RDONLY, 0); + if (fd == -1) + { + printf("can't open file %s\n", filename); + return -1; + } + else + printf("opened file %s\n", filename); + + i = read(fd, buffer, bufsize - 1); + if (i > 0) + { + buffer[i] = '\0'; + printf("%s...\n", buffer); + } + sprintf(buffer_l, + "POST %s HTTP/1.1\r\nUser-Agent: Axis/2.0/C\r\nConnection: Keep-Alive\r\nHost: ", + endpoint); + strcat(buffer_l, address); + strcat(buffer_l, ":"); + strcat(buffer_l, port); + strcat(buffer_l, "\r\n"); + strcat(buffer_l, "Content-Length: "); + sprintf(tmpstr, "%d", (int) strlen(buffer)); + strcat(buffer_l, tmpstr); + strcat(buffer_l, "\r\n"); + /*strcat(buffer_l, "SOAPAction: http://localhost:9090/axis2/services/echo/echo\r\n"); */ + strcat(buffer_l, "Content-Type: application/soap+xml;\r\n"); + strcat(buffer_l, "\r\n"); + + printf("Writing buffer_1...\n%s", buffer_l); + n = write(sockfd, buffer_l, strlen(buffer_l)); + + n = write(sockfd, buffer, strlen(buffer)); + if (n < 0) + error("ERROR writing to socket"); + + printf("Done writing to server\n"); + + buffer[0] = '\0'; + + printf("Reading the reply from server :\n"); + while ((n = read(sockfd, buffer, bufsize - 1)) > 0) + { + buffer[n] = '\0'; + printf("%s", buffer); + } + printf("\nReading from server done ...\n"); + + if (n < 0) + { + error("ERROR reading from socket"); + buffer[0] = '\0'; + } + free(buffer); + return 0; +} diff --git a/test/core/clientapi/test_clientapi.c b/test/core/clientapi/test_clientapi.c new file mode 100644 index 0000000..e20d44a --- /dev/null +++ b/test/core/clientapi/test_clientapi.c @@ -0,0 +1,119 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +axiom_node_t *build_om_payload_for_echo_svc( + const axutil_env_t * env, + const axis2_char_t * echo_str); + +void +axis2_test_svc_client_blocking( + ) +{ + axutil_env_t *env = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + env = axutil_env_create(allocator); + axiom_element_t *result_ele = NULL; + const axis2_char_t *echo_text = "echo_text"; + axis2_char_t *result = NULL; + + address = "http://localhost:9090/axis2/services/echo/echo"; + endpoint_ref = axis2_endpoint_ref_create(env, address); + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home) + client_home = "../../deploy"; + + svc_client = axis2_svc_client_create(env, client_home); + + if (!svc_client) + { + printf("axis2_test axis2_svc_client_create FAILURE\n"); + printf + ("Client repository path not properly set. Please check AXIS2C_HOME setting\n"); + return; + } + + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + axis2_svc_client_set_options(svc_client, env, options); + + payload = build_om_payload_for_echo_svc(env, echo_text); + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + if (ret_node) + { + if (axiom_node_get_node_type(ret_node, env) == AXIOM_ELEMENT) + { + ret_node = axiom_node_get_first_child(ret_node, env); + result_ele = + (axiom_element_t *) axiom_node_get_data_element(ret_node, env); + result = axiom_element_get_text(result_ele, env, ret_node); + if (!strcmp(result, echo_text)) + printf("axis2_test SVC_CLIENT_SEND_RECEIVE SUCCESS\n"); + else + printf("axis2_test SVC_CLIENT_SEND_RECEIVE FAILURE\n"); + } + } + axis2_svc_client_free(svc_client, env); +} + +/* build SOAP request message content using OM */ +axiom_node_t * +build_om_payload_for_echo_svc( + const axutil_env_t * env, + const axis2_char_t * echo_text) +{ + axiom_node_t *echo_om_node = NULL; + axiom_element_t *echo_om_ele = NULL; + axiom_node_t *text_om_node = NULL; + axiom_element_t *text_om_ele = NULL; + axiom_namespace_t *ns1 = NULL; + + ns1 = + axiom_namespace_create(env, "http://ws.apache.org/axis2/c/samples", + "ns1"); + echo_om_ele = + axiom_element_create(env, NULL, "echoString", ns1, &echo_om_node); + text_om_ele = + axiom_element_create(env, echo_om_node, "text", NULL, &text_om_node); + axiom_element_set_text(text_om_ele, env, echo_text, text_om_node); + + return echo_om_node; +} + +int +main( + ) +{ + axis2_test_svc_client_blocking(); + return 0; +} diff --git a/test/core/clientapi/test_svc_client_handler_count.c b/test/core/clientapi/test_svc_client_handler_count.c new file mode 100644 index 0000000..a4904dd --- /dev/null +++ b/test/core/clientapi/test_svc_client_handler_count.c @@ -0,0 +1,22 @@ +#include +#include +#include + +int +main( + ) +{ + axutil_env_t *env = + axutil_env_create_all("hello_client.log", AXIS2_LOG_LEVEL_TRACE); + const int TIMES = 1000; + int i; + for (i = 1; i <= TIMES; ++i) + { + printf("%d\n", i); + axis2_svc_client_t *svc_client = + axis2_svc_client_create(env, AXIS2_GETENV("AXIS2C_HOME")); + axis2_svc_client_free(svc_client, env); + } + axutil_env_free(env); + return 0; +} diff --git a/test/core/context/Makefile.am b/test/core/context/Makefile.am new file mode 100644 index 0000000..01642e2 --- /dev/null +++ b/test/core/context/Makefile.am @@ -0,0 +1,21 @@ +TESTS = test_context +check_PROGRAMS = test_context +noinst_PROGRAMS = test_context +SUBDIRS = +AM_CFLAGS = -g -pthread +test_context_SOURCES = test_context.c + + +test_context_LDADD = ../../../util/src/libaxutil.la \ + ../../../axiom/src/om/libaxis2_axiom.la \ + ../../../axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + $(top_builddir)/src/core/engine/libaxis2_engine.la \ + $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la \ + $(top_builddir)/neethi/src/libneethi.la + +INCLUDES = -I${CUTEST_HOME}/include \ + -I$(top_builddir)/src/xml/guththila/src \ + -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/description \ + -I ../../../util/include \ + -I ../../../axiom/include diff --git a/test/core/context/test_context.c b/test/core/context/test_context.c new file mode 100644 index 0000000..253691a --- /dev/null +++ b/test/core/context/test_context.c @@ -0,0 +1,124 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +void +axis2_test_conf_ctx_init( + ) +{ + struct axis2_conf *conf = NULL; + struct axis2_svc_grp_ctx *svc_grp_ctx1 = NULL; + struct axis2_svc_grp_ctx *svc_grp_ctx2 = NULL; + struct axis2_svc_grp *svc_grp1 = NULL; + struct axis2_svc_grp *svc_grp2 = NULL; + struct axis2_conf_ctx *conf_ctx = NULL; + struct axis2_svc_ctx *svc_ctx1 = NULL; + struct axis2_svc_ctx *svc_ctx2 = NULL; + struct axis2_svc *svc1 = NULL; + struct axis2_svc *svc2 = NULL; + struct axutil_qname *qname1 = NULL; + struct axutil_qname *qname2 = NULL; + struct axis2_op_ctx *op_ctx1 = NULL; + struct axis2_op_ctx *op_ctx2 = NULL; + struct axis2_op *op = NULL; + struct axutil_hash_t *op_ctx_map = NULL; + struct axutil_hash_t *svc_ctx_map = NULL; + struct axutil_hash_t *svc_grp_ctx_map = NULL; + + axis2_status_t status = AXIS2_FAILURE; + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + const axutil_env_t *env = axutil_env_create(allocator); + + conf = axis2_conf_create(env); + + op = axis2_op_create(env); + + conf_ctx = axis2_conf_ctx_create(env, conf); + + svc_grp1 = axis2_svc_grp_create(env); + svc_grp2 = axis2_svc_grp_create(env); + + svc_grp_ctx1 = axis2_svc_grp_ctx_create(env, svc_grp1, conf_ctx); + svc_grp_ctx2 = axis2_svc_grp_ctx_create(env, svc_grp2, conf_ctx); + + qname1 = axutil_qname_create(env, "name1", NULL, NULL); + qname2 = axutil_qname_create(env, "name2", NULL, NULL); + + svc1 = axis2_svc_create_with_qname(env, qname1); + svc2 = axis2_svc_create_with_qname(env, qname2); + + svc_ctx1 = axis2_svc_ctx_create(env, svc1, svc_grp_ctx1); + svc_ctx2 = axis2_svc_ctx_create(env, svc2, svc_grp_ctx2); + + op = axis2_op_create(env); + op_ctx1 = axis2_op_ctx_create(env, op, svc_ctx1); + op_ctx2 = axis2_op_ctx_create(env, op, svc_ctx2); + + op_ctx_map = axis2_conf_ctx_get_op_ctx_map(conf_ctx, env); + + if (op_ctx_map) + { + axutil_hash_set(op_ctx_map, "op_ctx1", AXIS2_HASH_KEY_STRING, op_ctx1); + axutil_hash_set(op_ctx_map, "op_ctx2", AXIS2_HASH_KEY_STRING, op_ctx2); + } + + svc_ctx_map = axis2_conf_ctx_get_svc_ctx_map(conf_ctx, env); + + if (svc_ctx_map) + { + axutil_hash_set(svc_ctx_map, "svc_ctx1", AXIS2_HASH_KEY_STRING, + svc_ctx1); + axutil_hash_set(svc_ctx_map, "svc_ctx2", AXIS2_HASH_KEY_STRING, + svc_ctx2); + } + + svc_grp_ctx_map = axis2_conf_ctx_get_svc_grp_ctx_map(conf_ctx, env); + + if (svc_grp_ctx_map) + { + axutil_hash_set(svc_ctx_map, "svc_grp_ctx1", AXIS2_HASH_KEY_STRING, + svc_grp_ctx1); + axutil_hash_set(svc_ctx_map, "svc_grp_ctx2", AXIS2_HASH_KEY_STRING, + svc_grp_ctx2); + } + + status = axis2_conf_ctx_init(conf_ctx, env, conf); + + if (status != AXIS2_SUCCESS) + { + printf("ERROR %d\n", status); + } + else + printf("SUCCESS\n"); + + axis2_conf_ctx_free(conf_ctx, env); +} + +int +main( + ) +{ + axis2_test_conf_ctx_init(); + return 0; +} diff --git a/test/core/deployment/Makefile.am b/test/core/deployment/Makefile.am new file mode 100644 index 0000000..298457d --- /dev/null +++ b/test/core/deployment/Makefile.am @@ -0,0 +1,25 @@ +TESTS = test_deployment +noinst_PROGRAMS = test_deployment +SUBDIRS = +AM_CFLAGS = $(CFLAGS) -g -pthread +test_deployment_SOURCES = test_deployment.c + +test_deployment_LDADD = \ + ../../../util/src/libaxutil.la \ + ../../../axiom/src/om/libaxis2_axiom.la \ + ../../../axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + $(top_builddir)/neethi/src/libneethi.la \ + $(top_builddir)/src/core/engine/libaxis2_engine.la \ + $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/clientapi \ + -I$(top_builddir)/src/core/util \ + -I ../../../util/include \ + -I ../../../axiom/include \ + -I ../../../neethi/include diff --git a/test/core/deployment/axis2.xml b/test/core/deployment/axis2.xml new file mode 100644 index 0000000..fb4ccc4 --- /dev/null +++ b/test/core/deployment/axis2.xml @@ -0,0 +1,126 @@ + + + + + true + false + true + + + + + admin + axis2 + + . + + + + + + + + + + + + + + + + + + + + N:S + + + + + + + + + + + + + + + 6060 + + + + + + 6060 + + + + + + + + + + HTTP/1.1 + + + HTTP/1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/core/deployment/test_deployment.c b/test/core/deployment/test_deployment.c new file mode 100644 index 0000000..d0730d8 --- /dev/null +++ b/test/core/deployment/test_deployment.c @@ -0,0 +1,360 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const axutil_env_t *env = NULL; + +int +axis2_test_dep_engine_load( + ) +{ + axis2_dep_engine_t *dep_engine = NULL; + axis2_conf_t *conf = NULL; + axutil_hash_t *svc_map = NULL; + axutil_array_list_t *in_phases = NULL; + axis2_char_t *axis2c_home = NULL; + + printf("******************************************\n"); + printf("testing dep_engine_load method \n"); + printf("******************************************\n"); + + axis2c_home = AXIS2_GETENV("AXIS2C_HOME"); + dep_engine = axis2_dep_engine_create_with_repos_name(env, axis2c_home); + if (!dep_engine) + { + printf("dep engine is not created \n"); + return -1; + } + conf = axis2_dep_engine_load(dep_engine, env); + axis2_conf_set_dep_engine(conf, env, dep_engine); + if (!conf) + { + printf("conf is NULL\n)"); + return -1; + } + + svc_map = axis2_conf_get_all_svcs(conf, env); + if (svc_map) + printf("svc_map count = %d\n", axutil_hash_count(svc_map)); + else + printf("svc_map count = zero\n"); + + if (svc_map) + { + axutil_hash_index_t *hi = NULL; + void *service = NULL; + for (hi = axutil_hash_first(svc_map, env); + hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_t *ops = NULL; + axis2_svc_t *svc = NULL; + axutil_param_t *impl_info_param = NULL; + + axutil_hash_this(hi, NULL, NULL, &service); + svc = (axis2_svc_t *) service; + impl_info_param = + axis2_svc_get_param(svc, env, AXIS2_SERVICE_CLASS); + if (!impl_info_param) + { + printf("imple_info_param is null\n"); + } + ops = axis2_svc_get_all_ops(svc, env); + if (ops) + { + printf("ops count = %d\n", axutil_hash_count(ops)); + + axutil_hash_index_t *hi2 = NULL; + void *op = NULL; + axis2_char_t *oname = NULL; + + for (hi2 = axutil_hash_first(ops, env); hi2; + hi2 = axutil_hash_next(env, hi2)) + { + if (!hi2) + break; + axutil_hash_this(hi2, NULL, NULL, &op); + if (op) + { + const axutil_qname_t *qname = NULL; + qname = axis2_op_get_qname((axis2_op_t *) op, env); + oname = axutil_qname_get_localpart(qname, env); + printf("op name = %s\n", oname); + } + } + } + else + printf("ops count = zero\n"); + } + } + + in_phases = + axis2_conf_get_in_phases_upto_and_including_post_dispatch(conf, env); + if (!in_phases) + { + printf("in phases up to and including post dispatch is NULL\n"); + } + else + { + printf("dep engine load is successfull\n"); + } + axis2_conf_free(conf, env); + + return 0; +} + +int +axis2_test_transport_receiver_load( + ) +{ + axutil_dll_desc_t *dll_desc = NULL; + axis2_char_t *dll_name = NULL; + axis2_transport_receiver_t *transport_recv = NULL; + axutil_param_t *impl_info_param = NULL; + axis2_bool_t is_running = AXIS2_FALSE; + axis2_char_t *axis2c_home = NULL; + + printf("******************************************\n"); + printf("testing axis2_transport_recv load\n"); + printf("******************************************\n"); + + dll_desc = axutil_dll_desc_create(env); + + axis2c_home = AXIS2_GETENV("AXIS2C_HOME"); + dll_name = + axutil_stracat(env, axis2c_home, "/lib/libaxis2_http_receiver.so"); + printf("transport receiver name:%s\n", dll_name); + axutil_dll_desc_set_name(dll_desc, env, dll_name); + axutil_dll_desc_set_type(dll_desc, env, AXIS2_TRANSPORT_RECV_DLL); + impl_info_param = axutil_param_create(env, NULL, NULL); + axutil_param_set_value(impl_info_param, env, dll_desc); + axutil_class_loader_init(env); + transport_recv = + (axis2_transport_receiver_t *) axutil_class_loader_create_dll(env, + impl_info_param); + is_running = axis2_transport_receiver_is_running(transport_recv, env); + printf("is_running:%d\n", is_running); + AXIS2_FREE(env->allocator, dll_name); + printf("transport receiver load test successful\n"); + return 0; +} + +int +axis2_test_transport_sender_load( + ) +{ + axutil_dll_desc_t *dll_desc = NULL; + axis2_char_t *dll_name = NULL; + axis2_transport_sender_t *transport_sender = NULL; + axutil_param_t *impl_info_param = NULL; + axis2_char_t *axis2c_home = NULL; + axis2_msg_ctx_t *msg_ctx = NULL; + + printf("******************************************\n"); + printf("testing axis2_transport_sender load\n"); + printf("******************************************\n"); + + msg_ctx = (axis2_msg_ctx_t *) AXIS2_MALLOC(env->allocator, 5); + dll_desc = axutil_dll_desc_create(env); + + axis2c_home = AXIS2_GETENV("AXIS2C_HOME"); + dll_name = axutil_stracat(env, axis2c_home, "/lib/libaxis2_http_sender.so"); + printf("transport sender name:%s\n", dll_name); + axutil_dll_desc_set_name(dll_desc, env, dll_name); + axutil_dll_desc_set_type(dll_desc, env, AXIS2_TRANSPORT_SENDER_DLL); + impl_info_param = axutil_param_create(env, NULL, NULL); + axutil_param_set_value(impl_info_param, env, dll_desc); + axutil_class_loader_init(env); + transport_sender = + (axis2_transport_sender_t *) axutil_class_loader_create_dll(env, + impl_info_param); + + AXIS2_FREE(env->allocator, dll_name); + printf("transport sender load test successful\n"); + return 0; +} + +int +axis2_test_default_module_version( + ) +{ + + axis2_conf_t *axis_conf = NULL; + axutil_qname_t *mod_qname1 = NULL; + axutil_qname_t *mod_qname2 = NULL; + axutil_qname_t *mod_qname3 = NULL; + axutil_qname_t *mod_qname4 = NULL; + axutil_qname_t *mod_qname5 = NULL; + axis2_module_desc_t *module1 = NULL; + axis2_module_desc_t *module2 = NULL; + axis2_module_desc_t *module3 = NULL; + axis2_module_desc_t *module4 = NULL; + axis2_module_desc_t *module5 = NULL; + axis2_module_desc_t *def_mod = NULL; + axutil_array_list_t *engaged_modules = NULL; + axutil_qname_t *engage_qname = NULL; + axis2_bool_t found1 = AXIS2_FALSE; + axis2_bool_t found2 = AXIS2_FALSE; + axis2_bool_t found3 = AXIS2_FALSE; + + printf("******************************************\n"); + printf("testing axis2_default_module_version\n"); + printf("******************************************\n"); + + axis_conf = axis2_conf_create(env); + mod_qname1 = axutil_qname_create(env, "module1", NULL, NULL); + module1 = axis2_module_desc_create_with_qname(env, mod_qname1); + axis2_conf_add_module(axis_conf, env, module1); + + mod_qname2 = axutil_qname_create(env, "module2-0.90", NULL, NULL); + module2 = axis2_module_desc_create_with_qname(env, mod_qname2); + axis2_conf_add_module(axis_conf, env, module2); + + mod_qname3 = axutil_qname_create(env, "module2-0.92", NULL, NULL); + module3 = axis2_module_desc_create_with_qname(env, mod_qname3); + axis2_conf_add_module(axis_conf, env, module3); + + mod_qname4 = axutil_qname_create(env, "module2-0.91", NULL, NULL); + module4 = axis2_module_desc_create_with_qname(env, mod_qname4); + axis2_conf_add_module(axis_conf, env, module4); + + mod_qname5 = axutil_qname_create(env, "test_module-1.92", NULL, NULL); + module5 = axis2_module_desc_create_with_qname(env, mod_qname5); + axis2_conf_add_module(axis_conf, env, module5); + + axis2_core_utils_calculate_default_module_version(env, + axis2_conf_get_all_modules + (axis_conf, env), + axis_conf); + def_mod = axis2_conf_get_default_module(axis_conf, env, "module1"); + if (def_mod != module1) + { + printf("axis2_default_module_version (module1) .. FAILED\n"); + return AXIS2_FAILURE; + } + def_mod = axis2_conf_get_default_module(axis_conf, env, "module2"); + if (def_mod != module3) + { + printf("axis2_default_module_version (module2) .. FAILED\n"); + return AXIS2_FAILURE; + } + def_mod = axis2_conf_get_default_module(axis_conf, env, "test_module"); + if (def_mod != module5) + { + printf("axis2_default_module_version (test_module) .. FAILED\n"); + return AXIS2_FAILURE; + } + engage_qname = axutil_qname_create(env, "module2", NULL, NULL); + axis2_conf_engage_module(axis_conf, env, engage_qname); + axutil_qname_free(engage_qname, env); + engage_qname = NULL; + + engage_qname = axutil_qname_create(env, "module1", NULL, NULL); + axis2_conf_engage_module(axis_conf, env, engage_qname); + axutil_qname_free(engage_qname, env); + engage_qname = NULL; + + axis2_conf_engage_module_with_version(axis_conf, env, "test_module", + "1.92"); + + engaged_modules = axis2_conf_get_all_engaged_modules(axis_conf, env); + + if (engaged_modules) + { + int list_size = 0; + int i = 0; + list_size = axutil_array_list_size(engaged_modules, env); + for (i = 0; i < list_size; i++) + { + axutil_qname_t *engaged_mod_qname = NULL; + engaged_mod_qname = axutil_array_list_get(engaged_modules, env, i); + if (0 == axutil_strcmp("module2-0.92", + axutil_qname_get_localpart(engaged_mod_qname, + env))) + { + found1 = AXIS2_TRUE; + } + if (0 == axutil_strcmp("module1", + axutil_qname_get_localpart(engaged_mod_qname, + env))) + { + found2 = AXIS2_TRUE; + } + if (0 == axutil_strcmp("test_module-1.92", + axutil_qname_get_localpart(engaged_mod_qname, + env))) + { + found3 = AXIS2_TRUE; + } + + } + } + if (AXIS2_FALSE == found1) + { + printf("axis2_default_module_version (module2 engaging) .. FAILED\n"); + return AXIS2_FAILURE; + } + if (AXIS2_FALSE == found2) + { + printf("axis2_default_module_version (module1 engaging) .. FAILED\n"); + return AXIS2_FAILURE; + } + if (AXIS2_FALSE == found3) + { + printf + ("axis2_default_module_version (test_module engaging) .. FAILED\n"); + return AXIS2_FAILURE; + } + printf("axis2_default_module_version .. SUCCESS\n"); + axis2_conf_free(axis_conf, env); + return AXIS2_SUCCESS; +} + +int +main( + ) +{ + axutil_allocator_t *allocator = NULL; + axutil_error_t *error = NULL; + axutil_log_t *log = NULL; + + allocator = axutil_allocator_init(NULL); + error = axutil_error_create(allocator); + log = axutil_log_create(allocator, NULL, "test_deployment.log"); + env = axutil_env_create_with_error_log(allocator, error, log); + env->log->level = AXIS2_LOG_LEVEL_INFO; + /*axis2_test_transport_receiver_load(); + axis2_test_transport_sender_load(); */ + axis2_test_dep_engine_load(); + axis2_test_default_module_version(); + return 0; +} diff --git a/test/core/description/Makefile.am b/test/core/description/Makefile.am new file mode 100644 index 0000000..0241eeb --- /dev/null +++ b/test/core/description/Makefile.am @@ -0,0 +1,26 @@ +TESTS = test_description +noinst_PROGRAMS = test_description +SUBDIRS = +AM_CFLAGS = -g -O2 -pthread +test_description_SOURCES = test_description.c + +test_description_LDADD = \ + ../../../util/src/libaxutil.la \ + ../../../axiom/src/om/libaxis2_axiom.la \ + ../../../axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + -lpthread \ + $(top_builddir)/neethi/src/libneethi.la \ + $(top_builddir)/src/core/engine/libaxis2_engine.la \ + $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/context \ + -I$(top_builddir)/src/core/phaseresolver \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/src/core/transport \ + -I$(top_builddir)/src/core/engine \ + -I$(top_builddir)/src/core/clientapi \ + -I ../../../util/include \ + -I ../../../axiom/include + diff --git a/test/core/description/test_description.c b/test/core/description/test_description.c new file mode 100644 index 0000000..17675ba --- /dev/null +++ b/test/core/description/test_description.c @@ -0,0 +1,215 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +struct axis2_module_desc *create_module_desc( + const axutil_env_t * env); + +int +axis2_test_op_engage_module( + ) +{ + struct axis2_module_desc *moduleref = NULL; + axis2_conf_t *conf = NULL; + + axis2_status_t status = AXIS2_FAILURE; + + printf("******************************************\n"); + printf("testing axis2_op_engage_module\n"); + printf("******************************************\n"); + + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + axutil_env_t *env = axutil_env_create(allocator); + axis2_op_t *op = axis2_op_create(env); + + moduleref = axis2_module_desc_create(env); + conf = axis2_conf_create(env); + + status = axis2_op_engage_module(op, env, moduleref, conf); + moduleref = NULL; + if (status != AXIS2_SUCCESS) + { + axis2_op_free(op, env); + printf("ERROR %d\n", status); + } + + axis2_op_free(op, env); + axutil_env_free(env); + return 0; +} + +int +axis2_test_svc_add_module_ops( + ) +{ + struct axis2_svc *svc = NULL; + struct axutil_qname *qname = NULL; + struct axis2_module_desc *module_desc = NULL; + struct axis2_conf *axis2_config = NULL; + + axis2_status_t status = AXIS2_FAILURE; + + printf("******************************************\n"); + printf("testing axis2_svc_add_module_ops\n"); + printf("******************************************\n"); + + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + const axutil_env_t *env = axutil_env_create(allocator); + qname = axutil_qname_create(env, "name1", NULL, NULL); + svc = axis2_svc_create_with_qname(env, qname); + module_desc = axis2_module_desc_create(env); + axis2_config = axis2_conf_create(env); + status = axis2_svc_add_module_ops(svc, env, module_desc, axis2_config); + if (status != AXIS2_SUCCESS) + { + printf("axis2_test_description_add_module_ops ERROR %d\n", status); + } + else + printf("axis2_test_add_module_ops SUCCESS\n"); + + axis2_svc_free(svc, env); + axutil_qname_free(qname, env); + axis2_module_desc_free(module_desc, env); + axis2_conf_free(axis2_config, env); + + return 0; +} + +int +axis2_test_svc_engage_module( + ) +{ + axis2_svc_t *svc = NULL; + axutil_qname_t *qname = NULL; + axis2_module_desc_t *moduleref = NULL; + axis2_conf_t *axis2_config = NULL; + axis2_status_t status = AXIS2_FAILURE; + + printf("******************************************\n"); + printf("testing axis2_svc_engage_module\n"); + printf("******************************************\n"); + + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + const axutil_env_t *env = axutil_env_create(allocator); + qname = axutil_qname_create(env, "name1", NULL, NULL); + svc = axis2_svc_create_with_qname(env, qname); + moduleref = axis2_module_desc_create(env); + axis2_config = axis2_conf_create(env); + + status = axis2_svc_engage_module(svc, env, moduleref, axis2_config); + moduleref = NULL; + if (status != AXIS2_SUCCESS) + { + printf("axis2_test_description_svc_engage_module ERROR %d\n", status); + } + else + printf("axis2_test_svc_engage_module SUCCESS\n"); + + axis2_svc_free(svc, env); + axutil_qname_free(qname, env); + axis2_conf_free(axis2_config, env); + + return 0; +} + +int +axis2_test_svc_get_op( + ) +{ + struct axis2_svc *svc = NULL; + struct axutil_qname *qname = NULL; + struct axutil_hash_t *ops = NULL; + struct axis2_op *op = NULL; + axis2_status_t status = AXIS2_SUCCESS; + + printf("******************************************\n"); + printf("testing axis2_svc_get_op\n"); + printf("******************************************\n"); + + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + const axutil_env_t *env = axutil_env_create(allocator); + qname = axutil_qname_create(env, "op1", NULL, NULL); + op = axis2_op_create_with_qname(env, qname); + qname = axutil_qname_create(env, "svc1", NULL, NULL); + svc = axis2_svc_create_with_qname(env, qname); + + status = axis2_svc_add_op(svc, env, op); + + qname = axutil_qname_create(env, "op2", NULL, NULL); + op = axis2_op_create_with_qname(env, qname); + status = axis2_svc_add_op(svc, env, op); + + ops = axis2_svc_get_all_ops(svc, env); + + if (ops) + printf("SUCCESS AXIS2_SVC_GET_OPS\n"); + else + { + printf("ERROR AXIS2_SVC_GET_OPS\n"); + return -1; + } + + if (ops) + { + printf("ops count = %d\n", axutil_hash_count(ops)); + + axutil_hash_index_t *hi2 = NULL; + void *op2 = NULL; + axis2_char_t *oname = NULL; + int count = 0; + + for (hi2 = axutil_hash_first(ops, env); hi2; + hi2 = axutil_hash_next(env, hi2)) + { + printf("count = %d \n", count++); + axis2_svc_get_all_ops(svc, env); + if (!(hi2)) + break; + axutil_hash_this(hi2, NULL, NULL, &op2); + if (op2) + { + const axutil_qname_t *qname = NULL; + qname = axis2_op_get_qname((axis2_op_t *) op2, env); + oname = axutil_qname_get_localpart(qname, env); + printf("op name = %s\n", oname); + } + } + } + else + printf("ops count = zero\n"); + + return 0; +} + +int +main( + ) +{ + axis2_test_op_engage_module(); + axis2_test_svc_add_module_ops(); + axis2_test_svc_engage_module(); + axis2_test_svc_get_op(); + return 0; +} diff --git a/test/core/engine/Makefile.am b/test/core/engine/Makefile.am new file mode 100644 index 0000000..e6d41de --- /dev/null +++ b/test/core/engine/Makefile.am @@ -0,0 +1,25 @@ +TESTS = test_engine +check_PROGRAMS = test_engine +noinst_PROGRAMS = test_engine +SUBDIRS = +AM_CFLAGS = -g -pthread +test_engine_SOURCES = test_engine.c + + +test_engine_LDADD = \ + ../../../util/src/libaxutil.la \ + ../../../axiom/src/om/libaxis2_axiom.la \ + ../../../axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + $(top_builddir)/src/core/engine/libaxis2_engine.la \ + $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la \ + $(top_builddir)/neethi/src/libneethi.la + +INCLUDES = -I$(top_builddir)/src/xml/guththila \ + -I$(top_builddir)/include \ + -I$(top_builddir)/src/core/description \ + -I$(top_builddir)/src/core/deployment \ + -I$(top_builddir)/src/core/engine \ + -I ../../../util/include \ + -I ../../../axiom/include \ + -I ../../../neethi/include + diff --git a/test/core/engine/test_engine.c b/test/core/engine/test_engine.c new file mode 100644 index 0000000..4df5b1d --- /dev/null +++ b/test/core/engine/test_engine.c @@ -0,0 +1,123 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +int +axis2_test_engine_send( + ) +{ + axis2_status_t status = AXIS2_FAILURE; + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + const axutil_env_t *env = axutil_env_create(allocator); + struct axis2_conf *conf = NULL; + conf = axis2_conf_create(env); + + struct axis2_conf_ctx *conf_ctx; + struct axis2_msg_ctx *msg_ctx; + struct axis2_op_ctx *op_ctx; + struct axis2_op *op; + struct axis2_svc *svc; + struct axis2_svc_ctx *svc_ctx; + struct axis2_svc_grp *svc_grp; + struct axis2_svc_grp_ctx *svc_grp_ctx; + struct axutil_qname *qname; + + conf_ctx = axis2_conf_ctx_create(env, conf); + + svc_grp = axis2_svc_grp_create(env); + svc_grp_ctx = axis2_svc_grp_ctx_create(env, svc_grp, conf_ctx); + + qname = axutil_qname_create(env, "name1", NULL, NULL); + svc = axis2_svc_create_with_qname(env, qname); + svc_ctx = axis2_svc_ctx_create(env, svc, svc_grp_ctx); + + op = axis2_op_create(env); + op_ctx = axis2_op_ctx_create(env, op, svc_ctx); + + msg_ctx = axis2_msg_ctx_create(env, conf_ctx, NULL, NULL); + + axis2_msg_ctx_set_conf_ctx(msg_ctx, env, conf_ctx); + axis2_msg_ctx_set_op_ctx(msg_ctx, env, op_ctx); + axis2_msg_ctx_set_svc_ctx(msg_ctx, env, svc_ctx); + + axis2_engine_t *engine = axis2_engine_create(env, conf_ctx); + status = axis2_engine_send(engine, env, msg_ctx); + if (status != AXIS2_SUCCESS) + { + printf("axis2_test_engine_send ERROR %d\n", status); + } + else + printf("axis2_test_engine_send SUCCESS\n"); + + axis2_conf_ctx_free(conf_ctx, env); + axis2_msg_ctx_free(msg_ctx, env); + axutil_qname_free(qname, env); + axis2_svc_grp_ctx_free(svc_grp_ctx, env); + axis2_svc_ctx_free(svc_ctx, env); + axis2_svc_free(svc, env); + axis2_op_ctx_free(op_ctx, env); + axis2_op_free(op, env); + axis2_engine_free(engine, env); + return 0; +} + +int +axis2_test_engine_receive( + ) +{ + axis2_status_t status = AXIS2_FAILURE; + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + const axutil_env_t *env = axutil_env_create(allocator); + axis2_conf_t *conf = NULL; + conf = axis2_conf_create(env); + + struct axis2_conf_ctx *conf_ctx; + struct axis2_msg_ctx *msg_ctx; + conf_ctx = axis2_conf_ctx_create(env, conf); + + msg_ctx = axis2_msg_ctx_create(env, conf_ctx, NULL, NULL); + + axis2_engine_t *engine = axis2_engine_create(env, conf_ctx); + + status = axis2_engine_receive(engine, env, msg_ctx); + if (status != AXIS2_SUCCESS) + { + printf("axis2_test_engine_receive ERROR %d\n", status); + } + else + printf("axis2_test_engine_receive SUCCESS\n"); + axis2_conf_ctx_free(conf_ctx, env); + axis2_msg_ctx_free(msg_ctx, env); + axis2_engine_free(engine, env); + return 0; +} + +int +main( + ) +{ + axis2_test_engine_send(); + axis2_test_engine_receive(); + return 0; +} diff --git a/test/core/transport/Makefile.am b/test/core/transport/Makefile.am new file mode 100644 index 0000000..b7e93db --- /dev/null +++ b/test/core/transport/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = http diff --git a/test/core/transport/http/Makefile.am b/test/core/transport/http/Makefile.am new file mode 100644 index 0000000..34eeefe --- /dev/null +++ b/test/core/transport/http/Makefile.am @@ -0,0 +1,21 @@ +TESTS = test_http_transport +check_PROGRAMS = test_http_transport +noinst_PROGRAMS = test_http_transport +SUBDIRS = +AM_CFLAGS = -g -pthread +test_http_transport_SOURCES = test_http_transport.c + +test_http_transport_LDADD = \ + $(LDFLAGS) \ + ../../../../util/src/libaxutil.la \ + ../../../../axiom/src/om/libaxis2_axiom.la \ + $(top_builddir)/neethi/src/libneethi.la \ + ../../../../axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + $(top_builddir)/src/core/engine/libaxis2_engine.la \ + $(top_builddir)/src/core/transport/http/sender/libaxis2_http_sender.la + +INCLUDES = -I${CUTEST_HOME}/include \ + -I$(top_builddir)/include \ + -I ../../../../util/include \ + -I ../../../../axiom/include + diff --git a/test/core/transport/http/test_http_transport.c b/test/core/transport/http/test_http_transport.c new file mode 100644 index 0000000..69134bc --- /dev/null +++ b/test/core/transport/http/test_http_transport.c @@ -0,0 +1,274 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +typedef struct a +{ + axis2_char_t *value; +} +a; + +axutil_env_t * +test_init( + ) +{ + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + axutil_error_t *error = axutil_error_create(allocator); + axutil_env_t *env = axutil_env_create_with_error(allocator, error); + return env; +} + +void +test_http_request_line( + const axutil_env_t * env) +{ + const char *request_line_str = + "POST http://ws.apache.org/axis2/c/services/test_svc/test_op?x=1 HTTP/1.1\r\n"; + axis2_http_request_line_t *request_line; + + printf("Starting http_request_line tests\n"); + request_line = axis2_http_request_line_parse_line(env, request_line_str); + printf("Method: %s|URI: %s|HTTP Version: %s|\n", + axis2_http_request_line_get_method(request_line, env), + axis2_http_request_line_get_uri(request_line, env), + axis2_http_request_line_get_http_version(request_line, env)); + axis2_http_request_line_free(request_line, env); + printf("Finished http_request_line tests ..........\n\n"); +} + +void +test_http_status_line( + const axutil_env_t * env) +{ + const char *status_line_str = "HTTP/1.1 202 Accepted\r\n"; + axis2_http_status_line_t *status_line; + + printf("Starting http_status_line tests\n"); + status_line = axis2_http_status_line_create(env, status_line_str); + printf("Staus Line starts with HTTP ? :%d\n", + axis2_http_status_line_starts_with_http(status_line, env)); + printf("HTTP Version :%s|Status Code:%d|Reason Phrase:%s|\n", + axis2_http_status_line_get_http_version(status_line, env), + axis2_http_status_line_get_status_code(status_line, env), + axis2_http_status_line_get_reason_phrase(status_line, env)); + printf("to_string :%s\n", + axis2_http_status_line_to_string(status_line, env)); + axis2_http_status_line_free(status_line, env); + printf("Finished http_status_line tests ..........\n\n"); +} + +void +test_http_header( + const axutil_env_t * env) +{ + const char *header_name = "Content-Type"; + const char *header_value = "text/xml"; + const char *str_header = "Content-Type: text/xml; charset=UTF-8\r\n"; + axis2_http_header_t *http_header; + axis2_char_t *external_form = NULL; + + printf("Starting http_header tests\n"); + http_header = axis2_http_header_create(env, header_name, header_value); + external_form = axis2_http_header_to_external_form(http_header, env); + printf("Heder Name :%s|Header Value:%s|External Form:%s\n", + axis2_http_header_get_name(http_header, env), + axis2_http_header_get_value(http_header, env), external_form); + AXIS2_FREE(env->allocator, external_form); + axis2_http_header_free(http_header, env); + + http_header = axis2_http_header_create_by_str(env, str_header); + printf("Finished http_header tests ..........\n\n"); +} + +void +test_url( + const axutil_env_t * env) +{ + const axis2_char_t *str_url = "http://ws.apache.org/axis2/"; + axutil_url_t *url = axutil_url_parse_string(env, str_url); + if (!url) + { + printf("URL is NULL\n"); + return; + } + printf("Starting URL Test ....\n"); + printf + ("Parsed URL : \n Protocol :%s|\n Host :%s|\n Port :%d|\n Path : %s|\n", + axutil_url_get_protocol(url, env), axutil_url_get_host(url, env), + axutil_url_get_port(url, env), axutil_url_get_path(url, env)); + printf("End of URL Test ... \n"); + axutil_url_free(url, env); +} + +void +test_http_client( + const axutil_env_t * env) +{ + axis2_http_client_t *client = NULL; + axis2_http_simple_request_t *request = NULL; + axis2_http_request_line_t *request_line = NULL; + axutil_url_t *url = NULL; + axis2_http_header_t *header = NULL; + axutil_stream_t *request_body = NULL; + axis2_http_simple_response_t *response = NULL; + int status = 0; + char *body_bytes = NULL; + int body_bytes_len = 0; + + printf("Starting http_client tests\n"); + request_line = axis2_http_request_line_create(env, "GET", + "/axis2/services", + "HTTP/1.0"); + request_body = axutil_stream_create_basic(env); + request = axis2_http_simple_request_create(env, request_line, + NULL, 0, NULL); + url = axutil_url_create(env, "http", "localhost", 80, NULL); + header = + axis2_http_header_create(env, "Host", axutil_url_get_host(url, env)); + axis2_http_simple_request_add_header(request, env, header); + client = axis2_http_client_create(env, url); + + status = axis2_http_client_send(client, env, request, NULL); + if (status < 0) + { + printf("Test FAILED .........Can't send the request. Status :%d\n", + status); + return; + } + status = axis2_http_client_recieve_header(client, env); + if (status < 0) + { + printf("Test FAILED ......... Can't recieve. Status: %d\n", status); + return; + } + response = axis2_http_client_get_response(client, env); + if (!response) + { + printf("Test Failed : NULL response"); + return; + } + printf("Content Type :%s\n", + axis2_http_simple_response_get_content_type(response, env)); + printf("Content Length :%d\n", + axis2_http_simple_response_get_content_length(response, env)); + printf("Status code :%d\n", status); + body_bytes_len = + axis2_http_simple_response_get_body_bytes(response, env, &body_bytes); + printf("body :%s\n", body_bytes); + + axis2_http_client_free(client, env); + axis2_http_simple_request_free(request, env); + axutil_stream_free(request_body, env); + AXIS2_FREE(env->allocator, body_bytes); + printf("Finished http_client tests ..........\n\n"); +} + +void +test_https_client( + const axutil_env_t * env) +{ +#ifndef AXIS2_SSL_ENABLED + return; +#else + axis2_http_client_t *client = NULL; + axis2_http_simple_request_t *request = NULL; + axis2_http_request_line_t *request_line = NULL; + axutil_url_t *url = NULL; + axis2_http_header_t *header = NULL; + axutil_stream_t *request_body = NULL; + axis2_http_simple_response_t *response = NULL; + int status = 0; + char *body_bytes = NULL; + int body_bytes_len = 0; + + printf("Starting https_client tests\n"); + request_line = axis2_http_request_line_create(env, "GET", "/", "HTTP/1.0"); + request_body = axutil_stream_create_basic(env); + request = axis2_http_simple_request_create(env, request_line, + NULL, 0, NULL); + url = axutil_url_create(env, "https", "localhost", 9090, NULL); + + header = + axis2_http_header_create(env, "Host", axutil_url_get_host(url, env)); + axis2_http_simple_request_add_header(request, env, header); + client = axis2_http_client_create(env, url); + + /* if you weant to test the proxy uncomment following */ + /*axis2_http_client_set_proxy(client, env, "127.0.0.1", 8080); */ + + /* Add CA/Server certificate */ + status = axis2_http_client_set_server_cert(client, env, + "/home/dummy/dummyCA/demoCA/cacert.pem"); + + status = axis2_http_client_send(client, env, request, NULL); + if (status < 0) + { + printf("Test FAILED .........Can't send the request. Status :%d\n", + status); + return; + } + status = axis2_http_client_recieve_header(client, env); + if (status < 0) + { + printf("Test FAILED ......... Can't recieve. Status: %d\n", status); + return; + } + response = axis2_http_client_get_response(client, env); + if (!response) + { + printf("Test Failed : NULL response"); + return; + } + printf("Content Type :%s\n", + axis2_http_simple_response_get_content_type(response, env)); + printf("Content Length :%d\n", + axis2_http_simple_response_get_content_length(response, env)); + printf("Status code :%d\n", status); + body_bytes_len = + axis2_http_simple_response_get_body_bytes(response, env, &body_bytes); + + axis2_http_client_free(client, env); + axis2_http_simple_request_free(request, env); + axutil_stream_free(request_body, env); + AXIS2_FREE(env->allocator, body_bytes); + printf("Finished https_client tests ..........\n\n"); +#endif +} + +int +main( + void) +{ + axutil_env_t *env = test_init(); + test_http_request_line(env); + test_http_status_line(env); + test_http_header(env); + test_http_client(env); + test_https_client(env); + test_url(env); + + axutil_env_free(env); + return 0; +} diff --git a/test/find_policy.c b/test/find_policy.c new file mode 100644 index 0000000..9549fdf --- /dev/null +++ b/test/find_policy.c @@ -0,0 +1,303 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + axiom_node_t * return_policy_element(axis2_char_t * name, + const axutil_env_t * env, + axis2_char_t * wsdl_name); + axis2_char_t * get_policy_ref(axiom_node_t * node, const axutil_env_t * env); + void get_all_policy( + axis2_char_t * element_name, + const axutil_env_t * env, + axutil_array_list_t * policy_node_list, + axis2_char_t * wsdl_name); + + +/** + Define the environment related variables globaly so that they are available + for both functions +*/ + axutil_allocator_t * allocator = NULL; + axutil_env_t * environment = NULL; + axutil_stream_t * stream = NULL; + axutil_error_t * error = NULL; + axutil_log_t * axis_log = NULL; + FILE * f = NULL; + FILE * o = NULL; + + +/** a method that demonstrate creating a om model using an xml file */ + int AXIS2_CALL +read_input( + char *buffer, + int size, + void *ctx) +{ + int len = 0; + char *pos = NULL; + len = fread(buffer, sizeof(char), size, f); + if (buffer) + pos = strstr(buffer, "---"); + if (pos) + + { + len = pos - buffer; + *pos = '\0'; + } + return len; + } + int +main( + int argc, + char *argv[]) +{ + axutil_qname_t * qname = NULL; + axiom_node_t * policy_node = NULL, *node = NULL; + axiom_xml_writer_t * writer = NULL; + axiom_output_t * om_output = NULL; + axis2_char_t * pol_ref = NULL; + axiom_element_t * policy_element = NULL, *ele = NULL; + axiom_node_t * child_node = NULL; + axutil_array_list_t * policy_array = NULL; + char *buffer = NULL; + const char *file_name = + "C:\\OMWsdl\\wsdltest\\debug\\PolicyAttachments.wsdl"; + const char *out_file_name = "C:\\OMWsdl\\wsdltest\\debug\\out.xml"; + allocator = axutil_allocator_init(NULL); + axis_log = axutil_log_create(allocator, NULL, NULL); + error = axutil_error_create(allocator); + environment = + axutil_env_create_with_error_log(allocator, error, axis_log); + policy_array = axutil_array_list_create(environment, 10); + + /*get all the policy values of "Binding_2B"*/ + get_all_policy("Binding-2B", environment, policy_array, file_name); + node = + (axiom_node_t *) axutil_array_list_get(policy_array, environment, 2); + ele = (axiom_element_t *) axiom_node_get_data_element(node, environment); + qname = axiom_element_get_qname(ele, environment, node); + printf("qname %s\n", axutil_qname_get_uri(qname, environment)); + writer = + axiom_xml_writer_create_for_memory(environment, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_output = axiom_output_create(environment, writer); + axiom_node_serialize(node, environment, om_output); + buffer = (axis2_char_t *) axiom_xml_writer_get_xml(writer, environment); + if (buffer) + + { + + /*printf(outfilename);*/ + o = fopen("C:\\OMWsdl\\wsdltest\\debug\\out.xml", "w"); + if (!o) + return -1; + printf("Printing the Buffer...\n"); + printf("%s", buffer); + fprintf(o, "\n%s", buffer); + } + axiom_output_free(om_output, environment); + fclose(f); + axutil_env_free(environment); + return 0; + } + + axiom_node_t * return_policy_element(axis2_char_t * name, + const axutil_env_t * env, + axis2_char_t * wsdl_name) +{ + axiom_element_t * ele1 = NULL, *ele2 = NULL; + axiom_document_t * document = NULL; + axiom_node_t * node1 = NULL, *node2 = NULL, *policy_node = NULL; + axiom_namespace_t * ns = NULL; + axiom_xml_reader_t * reader = NULL; + axiom_stax_builder_t * builder = NULL; + char *buffer = NULL; + axiom_attribute_t * attr = NULL; + axis2_char_t * value = NULL; + axis2_char_t * val = NULL; + axutil_hash_t * attr_hash = NULL; + axis2_char_t * xml_output = NULL; + axutil_hash_index_t * hi; + f = fopen(wsdl_name, "r"); + if (!f) + return NULL; + reader = + axiom_xml_reader_create_for_io(environment, read_input, NULL, NULL, + NULL); + if (!reader) + + { + printf("ERROR CREATING PULLPARSER"); + return NULL; + } + builder = axiom_stax_builder_create(environment, reader); + if (!builder) + + { + printf("ERROR CREATING PULL PARSER"); + return NULL; + } + document = axiom_stax_builder_get_document(builder, environment); + if (!document) + return NULL; + node1 = axiom_document_get_root_element(document, environment); + if (!node1) + + { + printf(" root element null "); + axiom_stax_builder_free(builder, environment); + return NULL; + } + + do + + { + node2 = axiom_document_build_next(document, environment); + if (!node2) + break; + if (axiom_node_get_node_type(node2, environment) == AXIOM_ELEMENT) + + { + ele2 = + (axiom_element_t *) axiom_node_get_data_element(node2, + environment); + attr_hash = axiom_element_get_all_attributes(ele2, environment); + if (attr_hash) + + { + hi = axutil_hash_first(attr_hash, environment); + axutil_hash_this(hi, NULL, NULL, &attr); + if (axutil_strcmp + (axiom_attribute_get_value(attr, environment), name) == 0) + + { + policy_node = node2; + } + } + } + } + while (node2); + return policy_node; + } + + axis2_char_t * get_policy_ref(axiom_node_t * node, const axutil_env_t * env) +{ + axiom_element_t * policy_element = NULL; + axiom_children_iterator_t * children_iter = NULL; + axiom_node_t * child_node = NULL; + axutil_qname_t * qname = NULL; + axis2_char_t * value = NULL; + axis2_char_t * val = NULL; + axiom_attribute_t * attr = NULL; + policy_element = + (axiom_element_t *) axiom_node_get_data_element(node, env); + children_iter = axiom_element_get_children(policy_element, env, node); + while (axiom_children_iterator_has_next(children_iter, env)) + + { + child_node = axiom_children_iterator_next(children_iter, env); + if (axiom_node_get_node_type(child_node, environment) == AXIOM_ELEMENT) + + { + policy_element = + (axiom_element_t *) axiom_node_get_data_element(child_node, + environment); + if (axutil_strcmp + (axiom_element_get_localname(policy_element, environment), + "PolicyReference") == 0) + + { + qname = axutil_qname_create(environment, "URI", NULL, NULL); + attr = + axiom_element_get_attribute(policy_element, environment, + qname); + if (attr) + + { + value = axiom_attribute_get_value(attr, environment); + val = axutil_string_substring_starting_at(value, 1); + return val; + } + } + } + } + return NULL; + } + void +get_all_policy( + axis2_char_t * element_name, + const axutil_env_t * env, + axutil_array_list_t * policy_node_list, + axis2_char_t * wsdl_name) +{ + axutil_hash_t * attr_hash = NULL; + axutil_hash_index_t * hi = NULL; + axiom_element_t * element = NULL; + axiom_attribute_t * attribute = NULL; + axis2_char_t * attribute_val = NULL; + axiom_node_t * parent_policy_node = NULL, *parent_node = NULL; + parent_node = return_policy_element(element_name, env, wsdl_name); + if (!parent_node) + return; + parent_policy_node = + return_policy_element(get_policy_ref(parent_node, env), env, wsdl_name); + axutil_array_list_add(policy_node_list, env, parent_policy_node); + if (axiom_node_get_node_type(parent_node, env) == AXIOM_ELEMENT) + + { + element = + (axiom_element_t *) axiom_node_get_data_element(parent_node, env); + attr_hash = axiom_element_get_all_attributes(element, env); + if (attr_hash) + + { + hi = axutil_hash_next(env, axutil_hash_first(attr_hash, env)); + + do + + { + if (hi) + + { + axutil_hash_this(hi, NULL, NULL, &attribute); + attribute_val = axiom_attribute_get_value(attribute, env); + attribute_val = axutil_rindex(attribute_val, ':'); + attribute_val = + axutil_string_substring_starting_at(attribute_val, 1); + get_all_policy(attribute_val, env, policy_node_list, + wsdl_name); + hi = axutil_hash_next(env, hi); + } + } + while (hi); + } + } + return; + } diff --git a/test/itest/Makefile.am b/test/itest/Makefile.am new file mode 100644 index 0000000..150a20f --- /dev/null +++ b/test/itest/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = diff --git a/test/itest/whitemesa/Makefile.am b/test/itest/whitemesa/Makefile.am new file mode 100644 index 0000000..69a9094 --- /dev/null +++ b/test/itest/whitemesa/Makefile.am @@ -0,0 +1,2 @@ +TESTS = +SUBDIRS = round1 round2 diff --git a/test/itest/whitemesa/round1/Makefile.am b/test/itest/whitemesa/round1/Makefile.am new file mode 100644 index 0000000..2aef2ac --- /dev/null +++ b/test/itest/whitemesa/round1/Makefile.am @@ -0,0 +1,16 @@ +noinst_PROGRAMS = round1 +round1_SOURCES = round1_client.c + +round1_LDADD = $(LDFLAGS) \ + ../../../../util/src/libaxutil.la \ + ../../../../axiom/src/om/libaxis2_axiom.la \ + ../../../../axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + $(top_builddir)/src/core/engine/libaxis2_engine.la \ + $(top_builddir)//src/core/transport/http/sender/libaxis2_http_sender.la \ + $(top_builddir)/src/core/transport/http/receiver/libaxis2_http_receiver.la \ + $(top_builddir)/src/core/transport/http/common/libaxis2_http_common.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../../util/include \ + -I ../../../../axiom/include + diff --git a/test/itest/whitemesa/round1/README.txt b/test/itest/whitemesa/round1/README.txt new file mode 100644 index 0000000..821ebcb --- /dev/null +++ b/test/itest/whitemesa/round1/README.txt @@ -0,0 +1,2 @@ +Execute run.sh +service endpoint = http://www.mssoapinterop.org/asmx/simple.asmx diff --git a/test/itest/whitemesa/round1/input b/test/itest/whitemesa/round1/input new file mode 100644 index 0000000..13fdde9 --- /dev/null +++ b/test/itest/whitemesa/round1/input @@ -0,0 +1,6 @@ +String Hello string +Float 2.4 float +HexBinary 6A hexBinary +Decimal 2.4 decimal +Integer 5 int +Date 2005-06-30T12:00:00.0000000-07:00 dateTime diff --git a/test/itest/whitemesa/round1/round1_client.c b/test/itest/whitemesa/round1/round1_client.c new file mode 100644 index 0000000..f298327 --- /dev/null +++ b/test/itest/whitemesa/round1/round1_client.c @@ -0,0 +1,258 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +axiom_node_t *build_soap_body_content( + const axutil_env_t * env, + const axis2_char_t * echo_operation, + const axis2_char_t * echo_type, + const axis2_char_t * word_to_echo); + +int +main( + int argc, + char **argv) +{ + axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + axiom_element_t *ret_ele = NULL; + axis2_char_t *om_str = NULL; + axis2_char_t *result = NULL; + + const axis2_char_t *echo_operation = NULL; + const axis2_char_t *word_to_echo = NULL; + const axis2_char_t *echo_type = NULL; + axis2_char_t operation[32]; + axis2_char_t echo_response_buff[32]; + + echo_operation = "String"; + word_to_echo = "helloworld"; + echo_type = "string"; + + if ((argc > 1) && (axutil_strcmp("-h", argv[1]) == 0)) + { + printf("\nUsage : %s [echo_operation] [echo_value] [XSD_type]\n", + argv[0]); + printf("use -h for help\n"); + return 0; + } + + if (argc > 1) + echo_operation = argv[1]; + if (argc > 2) + word_to_echo = argv[2]; + if (argc > 3) + echo_type = argv[3]; + + /* address = "http://localhost:7070/cgi-bin/interopserver"; */ + address = "http://easysoap.sourceforge.net/cgi-bin/interopserver"; + + sprintf(operation, "echo%s", echo_operation); + + printf("Using endpoint : %s\n", address); + printf("Invoking %s with param %s\n", operation, word_to_echo); + + /* Set up the environment */ + env = axutil_env_create_all("echo.log", AXIS2_LOG_LEVEL_TRACE); + + /* Create EPR with given address */ + + endpoint_ref = axis2_endpoint_ref_create(env, address); + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + + /* this itest requried soap 1.1 message */ + axis2_options_set_soap_version(options, env, AXIOM_SOAP11); + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home) + client_home = "../../deploy"; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf("Error creating service client\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + axutil_error_get_message(env->error)); + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + payload = build_soap_body_content(env, echo_operation, + echo_type, word_to_echo); + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (ret_node) + { + om_str = AXIOM_NODE_TO_STRING(ret_node, env); + if (om_str) + printf("\nRecieving OM : %s\n", om_str); + if (AXIOM_NODE_GET_NODE_TYPE(ret_node, env) == AXIOM_ELEMENT) + { + + sprintf(echo_response_buff, "echo%sResponse", echo_operation); + ret_ele = + (axiom_element_t *) AXIOM_NODE_GET_DATA_ELEMENT(ret_node, env); + if (axutil_strcmp + (axiom_element_get_localname(ret_ele, env), + echo_response_buff) != 0) + { + printf("%s != %s\n", axiom_element_get_localname(ret_ele, env), + echo_response_buff); + printf("\nFAIL\n\n"); + return AXIS2_FAILURE; + } + + ret_node = AXIOM_NODE_GET_FIRST_CHILD(ret_node, env); + ret_ele = + (axiom_element_t *) AXIOM_NODE_GET_DATA_ELEMENT(ret_node, env); + result = axiom_element_get_text(ret_ele, env, ret_node); + if (!strcmp(word_to_echo, result)) + { + printf("\nSUCCESS\n\n"); + } + else + { + printf("\nFAIL\n\n"); + } + + } + else + { + printf("\nFAIL\n\n"); + return AXIS2_FAILURE; + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + axutil_error_get_message(env->error)); + printf("round1 stub invoke FAILED!\n"); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +axiom_node_t * +build_soap_body_content( + const axutil_env_t * env, + const axis2_char_t * echo_operation, + const axis2_char_t * echo_type, + const axis2_char_t * word_to_echo) +{ + + axiom_node_t *operation_om_node = NULL; + axiom_element_t *operation_om_ele = NULL; + + axiom_node_t *text_om_node = NULL; + axiom_element_t *text_om_ele = NULL; + + axiom_attribute_t *attri1 = NULL; + axiom_namespace_t *ns0 = NULL, + *ns1 = NULL, + *ns2 = NULL, + *ns3 = NULL, + *ns4 = NULL, + *ns5 = NULL; + axis2_char_t *om_str = NULL; + + axis2_char_t echo_operation_buff[32]; + axis2_char_t input_type_buff[32]; + axis2_char_t xsd_type_buff[32]; + + /*generating the requried parameters */ + sprintf(echo_operation_buff, "echo%s", echo_operation); + sprintf(input_type_buff, "input%s", echo_operation); + sprintf(xsd_type_buff, "xsd:%s", echo_type); + + ns0 = + axiom_namespace_create(env, + "http://schemas.xmlsoap.org/soap/envelope/", + "soapenv"); + ns1 = + axiom_namespace_create(env, + "http://www.w3.org/2001/XMLSchema-instance", + "xsi"); + ns2 = + axiom_namespace_create(env, "http://www.w3.org/2001/XMLSchema", "xsd"); + ns3 = + axiom_namespace_create(env, + "http://schemas.xmlsoap.org/soap/encoding/", + "soapenc"); + ns4 = axiom_namespace_create(env, "http://soapinterop.org/", "tns"); + ns5 = + axiom_namespace_create(env, "http://soapinterop.org/encodedTypes", + "types"); + + operation_om_ele = axiom_element_create(env, NULL, echo_operation_buff, + ns4, &operation_om_node); + + axiom_element_declare_namespace(operation_om_ele, env, + operation_om_node, ns0); + axiom_element_declare_namespace(operation_om_ele, env, + operation_om_node, ns1); + axiom_element_declare_namespace(operation_om_ele, env, + operation_om_node, ns2); + axiom_element_declare_namespace(operation_om_ele, env, + operation_om_node, ns3); + axiom_element_declare_namespace(operation_om_ele, env, + operation_om_node, ns4); + axiom_element_declare_namespace(operation_om_ele, env, + operation_om_node, ns5); + + attri1 = + axiom_attribute_create(env, "encodingStyle", + "http://schemas.xmlsoap.org/soap/encoding/", + ns0); + + operation_om_ele = AXIOM_NODE_GET_DATA_ELEMENT(operation_om_node, env); + axiom_element_add_attribute(operation_om_ele, env, attri1, + operation_om_node); + + text_om_ele = + axiom_element_create(env, operation_om_node, input_type_buff, NULL, + &text_om_node); + attri1 = axiom_attribute_create(env, "type", xsd_type_buff, ns1); + axiom_element_add_attribute(text_om_ele, env, attri1, text_om_node); + axiom_element_set_text(text_om_ele, env, word_to_echo, text_om_node); + + om_str = AXIOM_NODE_TO_STRING(operation_om_node, env); + if (om_str) + printf("\nSending OM : %s\n", om_str); + + return operation_om_node; +} diff --git a/test/itest/whitemesa/round1/run.sh b/test/itest/whitemesa/round1/run.sh new file mode 100644 index 0000000..433815a --- /dev/null +++ b/test/itest/whitemesa/round1/run.sh @@ -0,0 +1 @@ +while read x; do ./round1 $x; done < input diff --git a/test/itest/whitemesa/round1/todo b/test/itest/whitemesa/round1/todo new file mode 100644 index 0000000..b5c9f6b --- /dev/null +++ b/test/itest/whitemesa/round1/todo @@ -0,0 +1,19 @@ +# echoBase64 + +# echoBoolean + +# echoDecimal + +# echoFloatArray + +# echoHexBinary + +# echoIntegerArray + +# echoStringArray + +# echoStruct + +# echoStructArray + +# echoVoid diff --git a/test/itest/whitemesa/round2/Makefile.am b/test/itest/whitemesa/round2/Makefile.am new file mode 100644 index 0000000..a1ec399 --- /dev/null +++ b/test/itest/whitemesa/round2/Makefile.am @@ -0,0 +1,15 @@ +noinst_PROGRAMS = round2 +round2_SOURCES = round2_client.c + +round2_LDADD = $(LDFLAGS) \ + ../../../../util/src/libaxutil.la \ + ../../../../axiom/src/om/libaxis2_axiom.la \ + ../../../../axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la \ + $(top_builddir)/modules/core/engine/libaxis2_engine.la \ + $(top_builddir)/modules/core/transport/http/sender/libaxis2_http_sender.la \ + $(top_builddir)/modules/core/transport/http/receiver/libaxis2_http_receiver.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../../util/include \ + -I ../../../../axiom/include + diff --git a/test/itest/whitemesa/round2/README.txt b/test/itest/whitemesa/round2/README.txt new file mode 100644 index 0000000..f11b48a --- /dev/null +++ b/test/itest/whitemesa/round2/README.txt @@ -0,0 +1,8 @@ +In order to run this sample, you need to get a Google license key. +Please visit http://www.google.com/apis/ for details on how to get a license key. + +Use the '-h' option with the sample to get help on command line options. +e.g. +./google -h + +Samisa... diff --git a/test/itest/whitemesa/round2/input b/test/itest/whitemesa/round2/input new file mode 100644 index 0000000..ce75f3b --- /dev/null +++ b/test/itest/whitemesa/round2/input @@ -0,0 +1,6 @@ +String Hello +Integer 3 +Float 2.4 +Decimal 2.4 +Boolean true +Date 2005-06-30T12:00:00.0000000-07:00 diff --git a/test/itest/whitemesa/round2/readme b/test/itest/whitemesa/round2/readme new file mode 100644 index 0000000..09ee054 --- /dev/null +++ b/test/itest/whitemesa/round2/readme @@ -0,0 +1 @@ +www.whitemesa.net/interop diff --git a/test/itest/whitemesa/round2/round2_client.c b/test/itest/whitemesa/round2/round2_client.c new file mode 100644 index 0000000..a384ea8 --- /dev/null +++ b/test/itest/whitemesa/round2/round2_client.c @@ -0,0 +1,251 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +axiom_node_t *build_soap_body_content( + const axutil_env_t * env, + const axis2_char_t * echo_operation, + const axis2_char_t * echo_type, + const axis2_char_t * word_to_echo); + +int +main( + int argc, + char **argv) +{ + axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + axiom_element_t *ret_ele = NULL; + axis2_char_t *om_str = NULL; + axis2_char_t *result = NULL; + + const axis2_char_t *echo_operation = NULL; + const axis2_char_t *word_to_echo = NULL; + const axis2_char_t *echo_type = NULL; + axis2_char_t operation[32]; + axis2_char_t echo_response_buff[32]; + + echo_operation = "String"; + word_to_echo = "helloworld"; + echo_type = "string"; + + if ((argc > 1) && (axutil_strcmp("-h", argv[1]) == 0)) + { + printf("\nUsage : %s [echo_operation] [echo_value] [XSD_type]\n", + argv[0]); + printf("use -h for help\n"); + return 0; + } + + if (argc > 1) + echo_operation = argv[1]; + if (argc > 2) + word_to_echo = argv[2]; + if (argc > 3) + echo_type = argv[3]; + + /* address = "http://localhost:7070/asmx/simple.asmx"; */ + address = "http://www.mssoapinterop.org/asmx/simple.asmx"; + + sprintf(operation, "echo%s", echo_operation); + + printf("Using endpoint : %s\n", address); + printf("Invoking %s with param %s\n", operation, word_to_echo); + + /* Set up the environment */ + env = axutil_env_create_all("echo.log", AXIS2_LOG_LEVEL_TRACE); + + /* Create EPR with given address */ + + endpoint_ref = axis2_endpoint_ref_create(env, address); + options = axis2_options_create(env); + axis2_options_set_to(options, env, endpoint_ref); + + /* this itest requried soap 1.1 message */ + axis2_options_set_soap_version(options, env, AXIOM_SOAP11); + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home) + client_home = "../../deploy"; + + /* Create service client */ + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf("Error creating service client\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + axutil_error_get_message(env->error)); + } + + /* Set service client options */ + axis2_svc_client_set_options(svc_client, env, options); + + payload = build_soap_body_content(env, echo_operation, + echo_type, word_to_echo); + /* Send request */ + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (ret_node) + { + om_str = AXIOM_NODE_TO_STRING(ret_node, env); + if (om_str) + printf("\nRecieving OM : %s\n", om_str); + if (AXIOM_NODE_GET_NODE_TYPE(ret_node, env) == AXIOM_ELEMENT) + { + + sprintf(echo_response_buff, "echo%sResponse", echo_operation); + ret_ele = + (axiom_element_t *) AXIOM_NODE_GET_DATA_ELEMENT(ret_node, env); + if (axutil_strcmp + (axiom_element_get_localname(ret_ele, env), + echo_response_buff) != 0) + { + printf("%s != %s\n", axiom_element_get_localname(ret_ele, env), + echo_response_buff); + printf("\nFAIL\n\n"); + return AXIS2_FAILURE; + } + + ret_node = AXIOM_NODE_GET_FIRST_CHILD(ret_node, env); + ret_ele = + (axiom_element_t *) AXIOM_NODE_GET_DATA_ELEMENT(ret_node, env); + result = axiom_element_get_text(ret_ele, env, ret_node); + if (!strcmp(word_to_echo, result)) + { + printf("\nSUCCESS\n\n"); + } + else + { + printf("\nFAIL\n\n"); + } + + } + else + { + printf("\nFAIL\n\n"); + return AXIS2_FAILURE; + } + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + axutil_error_get_message(env->error)); + printf("round1 stub invoke FAILED!\n"); + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +axiom_node_t * +build_soap_body_content( + const axutil_env_t * env, + const axis2_char_t * echo_operation, + const axis2_char_t * echo_type, + const axis2_char_t * word_to_echo) +{ + + axiom_node_t *operation_om_node = NULL; + axiom_element_t *operation_om_ele = NULL; + + axiom_node_t *text_om_node = NULL; + axiom_element_t *text_om_ele = NULL; + + axiom_attribute_t *attri1 = NULL; + axiom_namespace_t *ns0 = NULL, + *ns1 = NULL, + *ns2 = NULL, + *ns3 = NULL, + *ns4 = NULL, + *ns5 = NULL; + axis2_char_t *om_str = NULL; + + axis2_char_t echo_operation_buff[32]; + axis2_char_t input_type_buff[32]; + + /*generating the requried parameters */ + sprintf(echo_operation_buff, "echo%s", echo_operation); + sprintf(input_type_buff, "input%s", echo_operation); + + ns0 = axiom_namespace_create(env, + "http://schemas.xmlsoap.org/soap/envelope/", + "soapenv"); + ns1 = + axiom_namespace_create(env, "http://www.w3.org/2001/XMLSchema-instance", + "xsi"); + ns2 = + axiom_namespace_create(env, "http://www.w3.org/2001/XMLSchema", "xsd"); + ns3 = + axiom_namespace_create(env, "http://schemas.xmlsoap.org/soap/encoding/", + "soapenc"); + ns4 = axiom_namespace_create(env, "http://soapinterop.org/", "tns"); + ns5 = axiom_namespace_create(env, + "http://soapinterop.org/encodedTypes", + "types"); + + operation_om_ele = axiom_element_create(env, NULL, echo_operation_buff, + ns4, &operation_om_node); + + axiom_element_declare_namespace(operation_om_ele, env, + operation_om_node, ns0); + axiom_element_declare_namespace(operation_om_ele, env, + operation_om_node, ns1); + axiom_element_declare_namespace(operation_om_ele, env, + operation_om_node, ns2); + axiom_element_declare_namespace(operation_om_ele, env, + operation_om_node, ns3); + axiom_element_declare_namespace(operation_om_ele, env, + operation_om_node, ns4); + axiom_element_declare_namespace(operation_om_ele, env, + operation_om_node, ns5); + + attri1 = + axiom_attribute_create(env, "encodingStyle", + "http://schemas.xmlsoap.org/soap/encoding/", + ns0); + + operation_om_ele = AXIOM_NODE_GET_DATA_ELEMENT(operation_om_node, env); + AXIOM_ELEMENT_ADD_ATTRIBUTE(operation_om_ele, env, attri1, + operation_om_node); + + text_om_ele = + axiom_element_create(env, operation_om_node, input_type_buff, NULL, + &text_om_node); + axiom_element_set_text(text_om_ele, env, word_to_echo, text_om_node); + + om_str = AXIOM_NODE_TO_STRING(operation_om_node, env); + if (om_str) + printf("\nSending OM : %s\n", om_str); + + return operation_om_node; +} diff --git a/test/itest/whitemesa/round2/run.sh b/test/itest/whitemesa/round2/run.sh new file mode 100644 index 0000000..43cef29 --- /dev/null +++ b/test/itest/whitemesa/round2/run.sh @@ -0,0 +1 @@ +while read x; do ./round2 $x; done < input diff --git a/test/itest/whitemesa/round2/todo b/test/itest/whitemesa/round2/todo new file mode 100644 index 0000000..84a0aed --- /dev/null +++ b/test/itest/whitemesa/round2/todo @@ -0,0 +1,8 @@ +* echoStringArray +* echoIntegerArray +* echoFloatArray +* echoStruct +* echoStructArray +* echoVoid +* echoBase64 +* echoHexBinary diff --git a/test/resources/services.xml b/test/resources/services.xml new file mode 100644 index 0000000..0fcdf07 --- /dev/null +++ b/test/resources/services.xml @@ -0,0 +1,22 @@ + + + + + add.so + + + + + + + + + multiply.so + + + + + + + + diff --git a/test/resources/wsdl/Attachment1.wsdl b/test/resources/wsdl/Attachment1.wsdl new file mode 100644 index 0000000..0fc52d0 --- /dev/null +++ b/test/resources/wsdl/Attachment1.wsdl @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/AttachmentService.wsdl b/test/resources/wsdl/AttachmentService.wsdl new file mode 100644 index 0000000..b94b757 --- /dev/null +++ b/test/resources/wsdl/AttachmentService.wsdl @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/AxisBench.wsdl b/test/resources/wsdl/AxisBench.wsdl new file mode 100644 index 0000000..3138179 --- /dev/null +++ b/test/resources/wsdl/AxisBench.wsdl @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/BasicAllTest.wsdl b/test/resources/wsdl/BasicAllTest.wsdl new file mode 100644 index 0000000..b73800c --- /dev/null +++ b/test/resources/wsdl/BasicAllTest.wsdl @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/test/resources/wsdl/BasicChoice.wsdl b/test/resources/wsdl/BasicChoice.wsdl new file mode 100644 index 0000000..d04d0c3 --- /dev/null +++ b/test/resources/wsdl/BasicChoice.wsdl @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/test/resources/wsdl/Calculator.wsdl b/test/resources/wsdl/Calculator.wsdl new file mode 100644 index 0000000..a485386 --- /dev/null +++ b/test/resources/wsdl/Calculator.wsdl @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/CalculatorDoc.wsdl b/test/resources/wsdl/CalculatorDoc.wsdl new file mode 100644 index 0000000..5600279 --- /dev/null +++ b/test/resources/wsdl/CalculatorDoc.wsdl @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/Choice.wsdl b/test/resources/wsdl/Choice.wsdl new file mode 100644 index 0000000..1b52f8c --- /dev/null +++ b/test/resources/wsdl/Choice.wsdl @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/test/resources/wsdl/CombinedAllTest.wsdl b/test/resources/wsdl/CombinedAllTest.wsdl new file mode 100644 index 0000000..be07bc5 --- /dev/null +++ b/test/resources/wsdl/CombinedAllTest.wsdl @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/test/resources/wsdl/CombinedChoice.wsdl b/test/resources/wsdl/CombinedChoice.wsdl new file mode 100644 index 0000000..f11939a --- /dev/null +++ b/test/resources/wsdl/CombinedChoice.wsdl @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/test/resources/wsdl/ComplexLists.wsdl b/test/resources/wsdl/ComplexLists.wsdl new file mode 100644 index 0000000..21674dc --- /dev/null +++ b/test/resources/wsdl/ComplexLists.wsdl @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/ComplexTypeAll.wsdl b/test/resources/wsdl/ComplexTypeAll.wsdl new file mode 100644 index 0000000..2703344 --- /dev/null +++ b/test/resources/wsdl/ComplexTypeAll.wsdl @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/DataHandlerService.wsdl b/test/resources/wsdl/DataHandlerService.wsdl new file mode 100644 index 0000000..41fcec4 --- /dev/null +++ b/test/resources/wsdl/DataHandlerService.wsdl @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/Enumeration.wsdl b/test/resources/wsdl/Enumeration.wsdl new file mode 100644 index 0000000..15f72ce --- /dev/null +++ b/test/resources/wsdl/Enumeration.wsdl @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/ExceptionTest.wsdl b/test/resources/wsdl/ExceptionTest.wsdl new file mode 100644 index 0000000..557ed0f --- /dev/null +++ b/test/resources/wsdl/ExceptionTest.wsdl @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/ExceptionTestDoc.wsdl b/test/resources/wsdl/ExceptionTestDoc.wsdl new file mode 100644 index 0000000..e51b20f --- /dev/null +++ b/test/resources/wsdl/ExceptionTestDoc.wsdl @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/ExtensibilityQuery.wsdl b/test/resources/wsdl/ExtensibilityQuery.wsdl new file mode 100644 index 0000000..27a2738 --- /dev/null +++ b/test/resources/wsdl/ExtensibilityQuery.wsdl @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/FaultMapping.wsdl b/test/resources/wsdl/FaultMapping.wsdl new file mode 100644 index 0000000..557ed0f --- /dev/null +++ b/test/resources/wsdl/FaultMapping.wsdl @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/FaultMappingDoc.wsdl b/test/resources/wsdl/FaultMappingDoc.wsdl new file mode 100644 index 0000000..e51b20f --- /dev/null +++ b/test/resources/wsdl/FaultMappingDoc.wsdl @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/FourLevelTestDoc.wsdl b/test/resources/wsdl/FourLevelTestDoc.wsdl new file mode 100644 index 0000000..7c82a05 --- /dev/null +++ b/test/resources/wsdl/FourLevelTestDoc.wsdl @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/InOut.wsdl b/test/resources/wsdl/InOut.wsdl new file mode 100644 index 0000000..11f6afa --- /dev/null +++ b/test/resources/wsdl/InOut.wsdl @@ -0,0 +1,429 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/InteropTestRound1.wsdl b/test/resources/wsdl/InteropTestRound1.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/InteropTestRound1.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/InteropTestRound1Doc.wsdl b/test/resources/wsdl/InteropTestRound1Doc.wsdl new file mode 100644 index 0000000..be1d09b --- /dev/null +++ b/test/resources/wsdl/InteropTestRound1Doc.wsdl @@ -0,0 +1,774 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/LargeReturningString.wsdl b/test/resources/wsdl/LargeReturningString.wsdl new file mode 100644 index 0000000..9b031da --- /dev/null +++ b/test/resources/wsdl/LargeReturningString.wsdl @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/LimitedAllTest.wsdl b/test/resources/wsdl/LimitedAllTest.wsdl new file mode 100644 index 0000000..75324b0 --- /dev/null +++ b/test/resources/wsdl/LimitedAllTest.wsdl @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/test/resources/wsdl/ManyTypeRefRoot.wsdl b/test/resources/wsdl/ManyTypeRefRoot.wsdl new file mode 100644 index 0000000..13dec3d --- /dev/null +++ b/test/resources/wsdl/ManyTypeRefRoot.wsdl @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/MathOps.wsdl b/test/resources/wsdl/MathOps.wsdl new file mode 100644 index 0000000..f7f810f --- /dev/null +++ b/test/resources/wsdl/MathOps.wsdl @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/MathOpsDoc.wsdl b/test/resources/wsdl/MathOpsDoc.wsdl new file mode 100644 index 0000000..e85ae96 --- /dev/null +++ b/test/resources/wsdl/MathOpsDoc.wsdl @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/MinOccurTest.wsdl b/test/resources/wsdl/MinOccurTest.wsdl new file mode 100644 index 0000000..29d8c78 --- /dev/null +++ b/test/resources/wsdl/MinOccurTest.wsdl @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/test/resources/wsdl/MultiOut.wsdl b/test/resources/wsdl/MultiOut.wsdl new file mode 100644 index 0000000..9590b29 --- /dev/null +++ b/test/resources/wsdl/MultiOut.wsdl @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/NestedArrays.wsdl b/test/resources/wsdl/NestedArrays.wsdl new file mode 100644 index 0000000..17760b7 --- /dev/null +++ b/test/resources/wsdl/NestedArrays.wsdl @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/NestedComplex.wsdl b/test/resources/wsdl/NestedComplex.wsdl new file mode 100644 index 0000000..6384ce1 --- /dev/null +++ b/test/resources/wsdl/NestedComplex.wsdl @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/NillableArrays.wsdl b/test/resources/wsdl/NillableArrays.wsdl new file mode 100644 index 0000000..42028f0 --- /dev/null +++ b/test/resources/wsdl/NillableArrays.wsdl @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/OtherFaultException.wsdl b/test/resources/wsdl/OtherFaultException.wsdl new file mode 100644 index 0000000..56b66d1 --- /dev/null +++ b/test/resources/wsdl/OtherFaultException.wsdl @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/PlainTextAttachment.wsdl b/test/resources/wsdl/PlainTextAttachment.wsdl new file mode 100644 index 0000000..89b3fb3 --- /dev/null +++ b/test/resources/wsdl/PlainTextAttachment.wsdl @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/PrimitiveAndArray.wsdl b/test/resources/wsdl/PrimitiveAndArray.wsdl new file mode 100644 index 0000000..083cbca --- /dev/null +++ b/test/resources/wsdl/PrimitiveAndArray.wsdl @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RPCAllTest.wsdl b/test/resources/wsdl/RPCAllTest.wsdl new file mode 100644 index 0000000..1a86d52 --- /dev/null +++ b/test/resources/wsdl/RPCAllTest.wsdl @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RecurseTypes.wsdl b/test/resources/wsdl/RecurseTypes.wsdl new file mode 100644 index 0000000..4c3546a --- /dev/null +++ b/test/resources/wsdl/RecurseTypes.wsdl @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcHttpHeaderTest1.wsdl b/test/resources/wsdl/RpcHttpHeaderTest1.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcHttpHeaderTest1.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcHttpHeaderTest2.wsdl b/test/resources/wsdl/RpcHttpHeaderTest2.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcHttpHeaderTest2.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcHttpHeaderTest3.wsdl b/test/resources/wsdl/RpcHttpHeaderTest3.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcHttpHeaderTest3.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcHttpHeaderTest4.wsdl b/test/resources/wsdl/RpcHttpHeaderTest4.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcHttpHeaderTest4.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcHttpHeaderTest5.wsdl b/test/resources/wsdl/RpcHttpHeaderTest5.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcHttpHeaderTest5.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcHttpHeaderTest7.wsdl b/test/resources/wsdl/RpcHttpHeaderTest7.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcHttpHeaderTest7.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcHttpHeaderTest8.wsdl b/test/resources/wsdl/RpcHttpHeaderTest8.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcHttpHeaderTest8.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcSoapHeaderTest1.wsdl b/test/resources/wsdl/RpcSoapHeaderTest1.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcSoapHeaderTest1.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcSoapHeaderTest10.wsdl b/test/resources/wsdl/RpcSoapHeaderTest10.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcSoapHeaderTest10.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcSoapHeaderTest2.wsdl b/test/resources/wsdl/RpcSoapHeaderTest2.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcSoapHeaderTest2.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcSoapHeaderTest3.wsdl b/test/resources/wsdl/RpcSoapHeaderTest3.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcSoapHeaderTest3.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcSoapHeaderTest4.wsdl b/test/resources/wsdl/RpcSoapHeaderTest4.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcSoapHeaderTest4.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcSoapHeaderTest6.wsdl b/test/resources/wsdl/RpcSoapHeaderTest6.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcSoapHeaderTest6.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcSoapHeaderTest8.wsdl b/test/resources/wsdl/RpcSoapHeaderTest8.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcSoapHeaderTest8.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/RpcSoapHeaderTest9.wsdl b/test/resources/wsdl/RpcSoapHeaderTest9.wsdl new file mode 100644 index 0000000..f7d1945 --- /dev/null +++ b/test/resources/wsdl/RpcSoapHeaderTest9.wsdl @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/SimpleArray.wsdl b/test/resources/wsdl/SimpleArray.wsdl new file mode 100644 index 0000000..ef42ca1 --- /dev/null +++ b/test/resources/wsdl/SimpleArray.wsdl @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/SimpleArrayDoc.wsdl b/test/resources/wsdl/SimpleArrayDoc.wsdl new file mode 100644 index 0000000..d079513 --- /dev/null +++ b/test/resources/wsdl/SimpleArrayDoc.wsdl @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/SimpleArrays.wsdl b/test/resources/wsdl/SimpleArrays.wsdl new file mode 100644 index 0000000..ae60352 --- /dev/null +++ b/test/resources/wsdl/SimpleArrays.wsdl @@ -0,0 +1,299 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/SimpleChoice.wsdl b/test/resources/wsdl/SimpleChoice.wsdl new file mode 100644 index 0000000..37329ed --- /dev/null +++ b/test/resources/wsdl/SimpleChoice.wsdl @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interoperable testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/test/resources/wsdl/SimpleRef.wsdl b/test/resources/wsdl/SimpleRef.wsdl new file mode 100644 index 0000000..58e2a99 --- /dev/null +++ b/test/resources/wsdl/SimpleRef.wsdl @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/SimpleRefDoc.wsdl b/test/resources/wsdl/SimpleRefDoc.wsdl new file mode 100644 index 0000000..543a472 --- /dev/null +++ b/test/resources/wsdl/SimpleRefDoc.wsdl @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/SimpleTypeArray.wsdl b/test/resources/wsdl/SimpleTypeArray.wsdl new file mode 100644 index 0000000..410ec86 --- /dev/null +++ b/test/resources/wsdl/SimpleTypeArray.wsdl @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/SimpleTypeInnerUnbounded.wsdl b/test/resources/wsdl/SimpleTypeInnerUnbounded.wsdl new file mode 100644 index 0000000..15e4eba --- /dev/null +++ b/test/resources/wsdl/SimpleTypeInnerUnbounded.wsdl @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/SimpleTypeInnerUnboundedInOutput.wsdl b/test/resources/wsdl/SimpleTypeInnerUnboundedInOutput.wsdl new file mode 100644 index 0000000..3aceb9f --- /dev/null +++ b/test/resources/wsdl/SimpleTypeInnerUnboundedInOutput.wsdl @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/StockQuotes.wsdl b/test/resources/wsdl/StockQuotes.wsdl new file mode 100644 index 0000000..a5be851 --- /dev/null +++ b/test/resources/wsdl/StockQuotes.wsdl @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + net.xmethods.services.stockquote.StockQuote web service + + + + + diff --git a/test/resources/wsdl/TestTransportTimeout.wsdl b/test/resources/wsdl/TestTransportTimeout.wsdl new file mode 100644 index 0000000..9a469d6 --- /dev/null +++ b/test/resources/wsdl/TestTransportTimeout.wsdl @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/UDDI.wsdl b/test/resources/wsdl/UDDI.wsdl new file mode 100644 index 0000000..1e0e527 --- /dev/null +++ b/test/resources/wsdl/UDDI.wsdl @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/UnboundedChoice.wsdl b/test/resources/wsdl/UnboundedChoice.wsdl new file mode 100644 index 0000000..69bee20 --- /dev/null +++ b/test/resources/wsdl/UnboundedChoice.wsdl @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/test/resources/wsdl/UnboundedStringChoice.wsdl b/test/resources/wsdl/UnboundedStringChoice.wsdl new file mode 100644 index 0000000..7a88296 --- /dev/null +++ b/test/resources/wsdl/UnboundedStringChoice.wsdl @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These operations implement DOC/LIT SOAP operations, for interop testing. Please email johnko@microsoft.com with any questions/coments. + + + + + + + + \ No newline at end of file diff --git a/test/resources/wsdl/XSDAttribute.wsdl b/test/resources/wsdl/XSDAttribute.wsdl new file mode 100644 index 0000000..2c3f44f --- /dev/null +++ b/test/resources/wsdl/XSDAttribute.wsdl @@ -0,0 +1,1046 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSDElement.wsdl b/test/resources/wsdl/XSDElement.wsdl new file mode 100644 index 0000000..13309e6 --- /dev/null +++ b/test/resources/wsdl/XSDElement.wsdl @@ -0,0 +1,1422 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSDElementNil.wsdl b/test/resources/wsdl/XSDElementNil.wsdl new file mode 100644 index 0000000..153530b --- /dev/null +++ b/test/resources/wsdl/XSDElementNil.wsdl @@ -0,0 +1,1414 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_ENTITIES.wsdl b/test/resources/wsdl/XSD_ENTITIES.wsdl new file mode 100644 index 0000000..56628fb --- /dev/null +++ b/test/resources/wsdl/XSD_ENTITIES.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_ENTITY.wsdl b/test/resources/wsdl/XSD_ENTITY.wsdl new file mode 100644 index 0000000..e18be29 --- /dev/null +++ b/test/resources/wsdl/XSD_ENTITY.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_ID.wsdl b/test/resources/wsdl/XSD_ID.wsdl new file mode 100644 index 0000000..06f931b --- /dev/null +++ b/test/resources/wsdl/XSD_ID.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_IDREF.wsdl b/test/resources/wsdl/XSD_IDREF.wsdl new file mode 100644 index 0000000..8306b44 --- /dev/null +++ b/test/resources/wsdl/XSD_IDREF.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_IDREFS.wsdl b/test/resources/wsdl/XSD_IDREFS.wsdl new file mode 100644 index 0000000..cdec7fb --- /dev/null +++ b/test/resources/wsdl/XSD_IDREFS.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_NCName.wsdl b/test/resources/wsdl/XSD_NCName.wsdl new file mode 100644 index 0000000..b65e656 --- /dev/null +++ b/test/resources/wsdl/XSD_NCName.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_NMTOKEN.wsdl b/test/resources/wsdl/XSD_NMTOKEN.wsdl new file mode 100644 index 0000000..184d47c --- /dev/null +++ b/test/resources/wsdl/XSD_NMTOKEN.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_NMTOKENS.wsdl b/test/resources/wsdl/XSD_NMTOKENS.wsdl new file mode 100644 index 0000000..6100b1a --- /dev/null +++ b/test/resources/wsdl/XSD_NMTOKENS.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_NOTATION.wsdl b/test/resources/wsdl/XSD_NOTATION.wsdl new file mode 100644 index 0000000..30c0fb4 --- /dev/null +++ b/test/resources/wsdl/XSD_NOTATION.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_Name.wsdl b/test/resources/wsdl/XSD_Name.wsdl new file mode 100644 index 0000000..5198b1c --- /dev/null +++ b/test/resources/wsdl/XSD_Name.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_QName.wsdl b/test/resources/wsdl/XSD_QName.wsdl new file mode 100644 index 0000000..7fca9ff --- /dev/null +++ b/test/resources/wsdl/XSD_QName.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_anyURI.wsdl b/test/resources/wsdl/XSD_anyURI.wsdl new file mode 100644 index 0000000..73410d8 --- /dev/null +++ b/test/resources/wsdl/XSD_anyURI.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_base64Binary.wsdl b/test/resources/wsdl/XSD_base64Binary.wsdl new file mode 100644 index 0000000..e7b1ae8 --- /dev/null +++ b/test/resources/wsdl/XSD_base64Binary.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_boolean.wsdl b/test/resources/wsdl/XSD_boolean.wsdl new file mode 100644 index 0000000..906ba02 --- /dev/null +++ b/test/resources/wsdl/XSD_boolean.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_byte.wsdl b/test/resources/wsdl/XSD_byte.wsdl new file mode 100644 index 0000000..52aa1d3 --- /dev/null +++ b/test/resources/wsdl/XSD_byte.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_date.wsdl b/test/resources/wsdl/XSD_date.wsdl new file mode 100644 index 0000000..013a3f9 --- /dev/null +++ b/test/resources/wsdl/XSD_date.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_dateTime.wsdl b/test/resources/wsdl/XSD_dateTime.wsdl new file mode 100644 index 0000000..5031ca6 --- /dev/null +++ b/test/resources/wsdl/XSD_dateTime.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_decimal.wsdl b/test/resources/wsdl/XSD_decimal.wsdl new file mode 100644 index 0000000..587107a --- /dev/null +++ b/test/resources/wsdl/XSD_decimal.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_double.wsdl b/test/resources/wsdl/XSD_double.wsdl new file mode 100644 index 0000000..51eb810 --- /dev/null +++ b/test/resources/wsdl/XSD_double.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_duration.wsdl b/test/resources/wsdl/XSD_duration.wsdl new file mode 100644 index 0000000..31a8b18 --- /dev/null +++ b/test/resources/wsdl/XSD_duration.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_float.wsdl b/test/resources/wsdl/XSD_float.wsdl new file mode 100644 index 0000000..dcc7464 --- /dev/null +++ b/test/resources/wsdl/XSD_float.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_gDay.wsdl b/test/resources/wsdl/XSD_gDay.wsdl new file mode 100644 index 0000000..2508f5d --- /dev/null +++ b/test/resources/wsdl/XSD_gDay.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_gMonth.wsdl b/test/resources/wsdl/XSD_gMonth.wsdl new file mode 100644 index 0000000..1d05d42 --- /dev/null +++ b/test/resources/wsdl/XSD_gMonth.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_gMonthDay.wsdl b/test/resources/wsdl/XSD_gMonthDay.wsdl new file mode 100644 index 0000000..6d06f45 --- /dev/null +++ b/test/resources/wsdl/XSD_gMonthDay.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_gYear.wsdl b/test/resources/wsdl/XSD_gYear.wsdl new file mode 100644 index 0000000..0135260 --- /dev/null +++ b/test/resources/wsdl/XSD_gYear.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_gYearMonth.wsdl b/test/resources/wsdl/XSD_gYearMonth.wsdl new file mode 100644 index 0000000..d0bd3f1 --- /dev/null +++ b/test/resources/wsdl/XSD_gYearMonth.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_hexBinary.wsdl b/test/resources/wsdl/XSD_hexBinary.wsdl new file mode 100644 index 0000000..1ace268 --- /dev/null +++ b/test/resources/wsdl/XSD_hexBinary.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_int.wsdl b/test/resources/wsdl/XSD_int.wsdl new file mode 100644 index 0000000..897ba94 --- /dev/null +++ b/test/resources/wsdl/XSD_int.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_integer.wsdl b/test/resources/wsdl/XSD_integer.wsdl new file mode 100644 index 0000000..162cc94 --- /dev/null +++ b/test/resources/wsdl/XSD_integer.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_language.wsdl b/test/resources/wsdl/XSD_language.wsdl new file mode 100644 index 0000000..e69a08a --- /dev/null +++ b/test/resources/wsdl/XSD_language.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_long.wsdl b/test/resources/wsdl/XSD_long.wsdl new file mode 100644 index 0000000..8d9b562 --- /dev/null +++ b/test/resources/wsdl/XSD_long.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_negativeInteger.wsdl b/test/resources/wsdl/XSD_negativeInteger.wsdl new file mode 100644 index 0000000..70abcda --- /dev/null +++ b/test/resources/wsdl/XSD_negativeInteger.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_nonNegativeInteger.wsdl b/test/resources/wsdl/XSD_nonNegativeInteger.wsdl new file mode 100644 index 0000000..b3baf36 --- /dev/null +++ b/test/resources/wsdl/XSD_nonNegativeInteger.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_nonPositiveInteger.wsdl b/test/resources/wsdl/XSD_nonPositiveInteger.wsdl new file mode 100644 index 0000000..ab95c37 --- /dev/null +++ b/test/resources/wsdl/XSD_nonPositiveInteger.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_normalizedString.wsdl b/test/resources/wsdl/XSD_normalizedString.wsdl new file mode 100644 index 0000000..4e44c2e --- /dev/null +++ b/test/resources/wsdl/XSD_normalizedString.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_positiveInteger.wsdl b/test/resources/wsdl/XSD_positiveInteger.wsdl new file mode 100644 index 0000000..ce5c1bb --- /dev/null +++ b/test/resources/wsdl/XSD_positiveInteger.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_short.wsdl b/test/resources/wsdl/XSD_short.wsdl new file mode 100644 index 0000000..f707d77 --- /dev/null +++ b/test/resources/wsdl/XSD_short.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_string.wsdl b/test/resources/wsdl/XSD_string.wsdl new file mode 100644 index 0000000..f325e17 --- /dev/null +++ b/test/resources/wsdl/XSD_string.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_time.wsdl b/test/resources/wsdl/XSD_time.wsdl new file mode 100644 index 0000000..fc47d5a --- /dev/null +++ b/test/resources/wsdl/XSD_time.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_token.wsdl b/test/resources/wsdl/XSD_token.wsdl new file mode 100644 index 0000000..6ff5990 --- /dev/null +++ b/test/resources/wsdl/XSD_token.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_unsignedByte.wsdl b/test/resources/wsdl/XSD_unsignedByte.wsdl new file mode 100644 index 0000000..4b13551 --- /dev/null +++ b/test/resources/wsdl/XSD_unsignedByte.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_unsignedInt.wsdl b/test/resources/wsdl/XSD_unsignedInt.wsdl new file mode 100644 index 0000000..2c60e37 --- /dev/null +++ b/test/resources/wsdl/XSD_unsignedInt.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_unsignedLong.wsdl b/test/resources/wsdl/XSD_unsignedLong.wsdl new file mode 100644 index 0000000..04de8dd --- /dev/null +++ b/test/resources/wsdl/XSD_unsignedLong.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/XSD_unsignedShort.wsdl b/test/resources/wsdl/XSD_unsignedShort.wsdl new file mode 100644 index 0000000..9338c34 --- /dev/null +++ b/test/resources/wsdl/XSD_unsignedShort.wsdl @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/inquire_v2.wsdl b/test/resources/wsdl/inquire_v2.wsdl new file mode 100644 index 0000000..44cf70c --- /dev/null +++ b/test/resources/wsdl/inquire_v2.wsdl @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + Copyright (c) 2000 - 2002 by Accenture, Ariba, Inc., Commerce One, Inc. + Fujitsu Limited, Hewlett-Packard Company, i2 Technologies, Inc., + Intel Corporation, International Business Machines Corporation, + Microsoft Corporation, Oracle Corporation, SAP AG, Sun Microsystems, Inc., + and VeriSign, Inc. All Rights Reserved. + + WSDL Service Interface for UDDI Inquiry API V2.0 + + This WSDL document defines the inquiry API calls for interacting with + the UDDI registry. The complete UDDI API specification is available + at http://www.uddi.org/specification.html. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This portType defines all of the UDDI inquiry operations. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/interoptestdoclitparameters.wsdl b/test/resources/wsdl/interoptestdoclitparameters.wsdl new file mode 100644 index 0000000..7cf3fa4 --- /dev/null +++ b/test/resources/wsdl/interoptestdoclitparameters.wsdl @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/nillableComplexType.wsdl b/test/resources/wsdl/nillableComplexType.wsdl new file mode 100644 index 0000000..ea224c2 --- /dev/null +++ b/test/resources/wsdl/nillableComplexType.wsdl @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/wsdl/nillableComplexType.xsd b/test/resources/wsdl/nillableComplexType.xsd new file mode 100644 index 0000000..765be56 --- /dev/null +++ b/test/resources/wsdl/nillableComplexType.xsd @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/xml/om/axis.xml b/test/resources/xml/om/axis.xml new file mode 100644 index 0000000..bc996c5 --- /dev/null +++ b/test/resources/xml/om/axis.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/xml/om/basic.xml b/test/resources/xml/om/basic.xml new file mode 100644 index 0000000..88385fb --- /dev/null +++ b/test/resources/xml/om/basic.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/test/resources/xml/om/basicupdate.xml b/test/resources/xml/om/basicupdate.xml new file mode 100644 index 0000000..57d458c --- /dev/null +++ b/test/resources/xml/om/basicupdate.xml @@ -0,0 +1,47 @@ + + + + + + Goudse kaas + Rond + + + + + + + More cheese! + + + + + Even more cheese! + + + + + No sausages today + + + + + + + + + + + + + + + + + + diff --git a/test/resources/xml/om/contents.xml b/test/resources/xml/om/contents.xml new file mode 100644 index 0000000..35e3ac7 --- /dev/null +++ b/test/resources/xml/om/contents.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + Java and XML + + + Introduction + + What Is It? + + + How Do I Use It? + + + Why Should I Use It? + + + What's Next? + + + + + Creating XML + An XML Document + The Header + The Content + What's Next? + + + + Parsing XML + Getting Prepared + SAX Readers + Content Handlers + Error Handlers + + A Better Way to Load a Parser + + "Gotcha!" + What's Next? + + + + + + Web Publishing Frameworks + Selecting a Framework + Installation + + Using a Publishing Framework + + XSP + Cocoon 2.0 and Beyond + What's Next? + + + diff --git a/test/resources/xml/om/defaultNamespace.xml b/test/resources/xml/om/defaultNamespace.xml new file mode 100644 index 0000000..1e32981 --- /dev/null +++ b/test/resources/xml/om/defaultNamespace.xml @@ -0,0 +1,6 @@ + + + + Hello + + diff --git a/test/resources/xml/om/evaluate.xml b/test/resources/xml/om/evaluate.xml new file mode 100644 index 0000000..90d06bd --- /dev/null +++ b/test/resources/xml/om/evaluate.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + brown + + + moderate + + diff --git a/test/resources/xml/om/fibo.xml b/test/resources/xml/om/fibo.xml new file mode 100644 index 0000000..9b5d0ec --- /dev/null +++ b/test/resources/xml/om/fibo.xml @@ -0,0 +1,29 @@ + + + 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + 55 + 89 + 144 + 233 + 377 + 610 + 987 + 1597 + 2584 + 4181 + 6765 + 10946 + 17711 + 28657 + 46368 + 75025 + diff --git a/test/resources/xml/om/id.xml b/test/resources/xml/om/id.xml new file mode 100644 index 0000000..749ab20 --- /dev/null +++ b/test/resources/xml/om/id.xml @@ -0,0 +1,21 @@ + + + + + + + + +]> + + + + baz + gouda + baz + cheddar + baz + + diff --git a/test/resources/xml/om/jaxen24.xml b/test/resources/xml/om/jaxen24.xml new file mode 100644 index 0000000..9b81996 --- /dev/null +++ b/test/resources/xml/om/jaxen24.xml @@ -0,0 +1,2 @@ + +

diff --git a/test/resources/xml/om/jaxen3.xml b/test/resources/xml/om/jaxen3.xml new file mode 100644 index 0000000..a87723a --- /dev/null +++ b/test/resources/xml/om/jaxen3.xml @@ -0,0 +1,15 @@ + + + + 2 + + CE-A + + + + 1 + + CE-B + + + diff --git a/test/resources/xml/om/lang.xml b/test/resources/xml/om/lang.xml new file mode 100644 index 0000000..49b45db --- /dev/null +++ b/test/resources/xml/om/lang.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/test/resources/xml/om/message.xml b/test/resources/xml/om/message.xml new file mode 100644 index 0000000..3b81df2 --- /dev/null +++ b/test/resources/xml/om/message.xml @@ -0,0 +1,27 @@ + + +
+ lookupformservice + 9 + stammdaten + new +
+ + + + + iteminfo + ELE + + + parentinfo + Pruefgebiete + + + id + 1 + + + + +
diff --git a/test/resources/xml/om/moreover.xml b/test/resources/xml/om/moreover.xml new file mode 100644 index 0000000..38d4c4f --- /dev/null +++ b/test/resources/xml/om/moreover.xml @@ -0,0 +1,244 @@ + + +
+ http://c.moreover.com/click/here.pl?x13563273 + e-Commerce Operators Present Version 1.0 of the XML Standard + StockAccess + text + moreover... + + http://www.stockaccess.com/index.html + Dec 24 2000 6:28AM + + +
+
+ http://c.moreover.com/click/here.pl?x13560995 + W3C Publishes XML Protocol Requirements Document + Xml + text + moreover... + + http://www.xml.com/ + Dec 24 2000 12:22AM + + +
+
+ http://c.moreover.com/click/here.pl?x13553521 + Prowler: Open Source XML-Based Content Management Framework + Xml + text + moreover... + + http://www.xml.com/ + Dec 23 2000 2:05PM + + +
+
+ http://c.moreover.com/click/here.pl?x13549013 + The Middleware Company Debuts Public Training Courses in Ejb, J2ee And Xml + Java Industry Connection + text + moreover... + + http://industry.java.sun.com/javanews/more/hotnews/ + Dec 23 2000 12:15PM + + +
+
+ http://c.moreover.com/click/here.pl?x13544467 + Revised Working Draft for the W3C XML Information Set + Xml + text + moreover... + + http://www.xml.com/ + Dec 23 2000 5:50AM + + +
+
+ http://c.moreover.com/click/here.pl?x13534836 + XML: Its The Great Peacemaker + ZDNet + text + moreover... + + http://www.zdnet.com/intweek/ + Dec 22 2000 9:05PM + + +
+
+ http://c.moreover.com/click/here.pl?x13533485 + Project eL - The XML Leningrad Codex Markup Project + Xml + text + moreover... + + http://www.xml.com/ + Dec 22 2000 8:34PM + + +
+
+ http://c.moreover.com/click/here.pl?x13533488 + XML Linking Language (XLink) and XML Base Specifications Issued as W3C Proposed Recommenda + Xml + text + moreover... + + http://www.xml.com/ + Dec 22 2000 8:34PM + + +
+
+ http://c.moreover.com/click/here.pl?x13533492 + W3C Releases XHTML Basic Specification as a W3C Recommendation + Xml + text + moreover... + + http://www.xml.com/ + Dec 22 2000 8:34PM + + +
+
+ http://c.moreover.com/click/here.pl?x13521827 + Java, Xml And Oracle9i(TM) Make A Great Team + Java Industry Connection + text + moreover... + + http://industry.java.sun.com/javanews/more/hotnews/ + Dec 22 2000 3:21PM + + +
+
+ http://c.moreover.com/click/here.pl?x13511233 + Competing initiatives to vie for security standard + ZDNet + text + moreover... + + http://www.zdnet.com/eweek/filters/news/ + Dec 22 2000 10:54AM + + +
+
+ http://c.moreover.com/click/here.pl?x13492397 + Oracle Provides Developers with Great Xml Reading This Holiday Season + Java Industry Connection + text + moreover... + + http://industry.java.sun.com/javanews/more/hotnews/ + Dec 21 2000 8:08PM + + +
+
+ http://c.moreover.com/click/here.pl?x13491292 + XML as the great peacemaker - Extensible Markup Language Accomplished The Seemingly Impossible This Year: It B + Hospitality Net + text + moreover... + + http://www.hospitalitynet.org/news/list.htm?c=2000 + Dec 21 2000 7:45PM + + +
+
+ http://c.moreover.com/click/here.pl?x13484758 + XML as the great peacemaker + CNET + text + moreover... + + http://news.cnet.com/news/0-1003.html?tag=st.ne.1002.dir.1003 + Dec 21 2000 4:41PM + + +
+
+ http://c.moreover.com/click/here.pl?x13480896 + COOP Switzerland Selects Mercator as Integration Platform + Stockhouse Canada + text + moreover... + + http://www.stockhouse.ca/news/ + Dec 21 2000 1:55PM + + +
+
+ http://c.moreover.com/click/here.pl?x13471023 + Competing XML Specs Move Toward a Union + Internet World + text + moreover... + + http://www.internetworld.com/ + Dec 21 2000 11:14AM + + +
+
+ http://c.moreover.com/click/here.pl?x13452280 + Next-generation XHTML stripped down for handhelds + CNET + text + moreover... + + http://news.cnet.com/news/0-1005.html?tag=st.ne.1002.dir.1005 + Dec 20 2000 9:11PM + + +
+
+ http://c.moreover.com/click/here.pl?x13451789 + Xml Powers Oracle9i(TM) Dynamic Services + Java Industry Connection + text + moreover... + + http://industry.java.sun.com/javanews/more/hotnews/ + Dec 20 2000 9:05PM + + +
+
+ http://c.moreover.com/click/here.pl?x13442097 + XML DOM reference guide + ASPWire + text + moreover... + + http://aspwire.com/ + Dec 20 2000 6:26PM + + +
+
+ http://c.moreover.com/click/here.pl?x13424117 + Repeat/Xqsite And Bowstreet Team to Deliver Integrated Xml Solutions + Java Industry Connection + text + moreover... + + http://industry.java.sun.com/javanews/more/hotnews/ + Dec 20 2000 9:04AM + + +
+
+ diff --git a/test/resources/xml/om/much_ado.xml b/test/resources/xml/om/much_ado.xml new file mode 100644 index 0000000..f008fad --- /dev/null +++ b/test/resources/xml/om/much_ado.xml @@ -0,0 +1,6850 @@ + + +Much Ado about Nothing + + +

Text placed in the public domain by Moby Lexical Tools, 1992.

+

SGML markup by Jon Bosak, 1992-1994.

+

XML version by Jon Bosak, 1996-1998.

+

This work may be freely copied and distributed worldwide.

+
+ + + +Dramatis Personae + +DON PEDRO, prince of Arragon. +DON JOHN, his bastard brother. +CLAUDIO, a young lord of Florence. +BENEDICK, a young lord of Padua. +LEONATO, governor of Messina. +ANTONIO, his brother. +BALTHASAR, attendant on Don Pedro. + + +CONRADE +BORACHIO +followers of Don John. + + +FRIAR FRANCIS +DOGBERRY, a constable. +VERGES, a headborough. +A Sexton. +A Boy. +HERO, daughter to Leonato. +BEATRICE, niece to Leonato. + + +MARGARET +URSULA +gentlewomen attending on Hero. + + +Messengers, Watch, Attendants, &c. + + +SCENE Messina. + +MUCH ADO ABOUT NOTHING + +ACT I + +SCENE I. Before LEONATO'S house. +Enter LEONATO, HERO, and BEATRICE, with a +Messenger + + +LEONATO +I learn in this letter that Don Peter of Arragon +comes this night to Messina. + + + +Messenger +He is very near by this: he was not three leagues off +when I left him. + + + +LEONATO +How many gentlemen have you lost in this action? + + + +Messenger +But few of any sort, and none of name. + + + +LEONATO +A victory is twice itself when the achiever brings +home full numbers. I find here that Don Peter hath +bestowed much honour on a young Florentine called Claudio. + + + +Messenger +Much deserved on his part and equally remembered by +Don Pedro: he hath borne himself beyond the +promise of his age, doing, in the figure of a lamb, +the feats of a lion: he hath indeed better +bettered expectation than you must expect of me to +tell you how. + + + +LEONATO +He hath an uncle here in Messina will be very much +glad of it. + + + +Messenger +I have already delivered him letters, and there +appears much joy in him; even so much that joy could +not show itself modest enough without a badge of +bitterness. + + + +LEONATO +Did he break out into tears? + + + +Messenger +In great measure. + + + +LEONATO +A kind overflow of kindness: there are no faces +truer than those that are so washed. How much +better is it to weep at joy than to joy at weeping! + + + +BEATRICE +I pray you, is Signior Mountanto returned from the +wars or no? + + + +Messenger +I know none of that name, lady: there was none such +in the army of any sort. + + + +LEONATO +What is he that you ask for, niece? + + + +HERO +My cousin means Signior Benedick of Padua. + + + +Messenger +O, he's returned; and as pleasant as ever he was. + + + +BEATRICE +He set up his bills here in Messina and challenged +Cupid at the flight; and my uncle's fool, reading +the challenge, subscribed for Cupid, and challenged +him at the bird-bolt. I pray you, how many hath he +killed and eaten in these wars? But how many hath +he killed? for indeed I promised to eat all of his killing. + + + +LEONATO +Faith, niece, you tax Signior Benedick too much; +but he'll be meet with you, I doubt it not. + + + +Messenger +He hath done good service, lady, in these wars. + + + +BEATRICE +You had musty victual, and he hath holp to eat it: +he is a very valiant trencherman; he hath an +excellent stomach. + + + +Messenger +And a good soldier too, lady. + + + +BEATRICE +And a good soldier to a lady: but what is he to a lord? + + + +Messenger +A lord to a lord, a man to a man; stuffed with all +honourable virtues. + + + +BEATRICE +It is so, indeed; he is no less than a stuffed man: +but for the stuffing,--well, we are all mortal. + + + +LEONATO +You must not, sir, mistake my niece. There is a +kind of merry war betwixt Signior Benedick and her: +they never meet but there's a skirmish of wit +between them. + + + +BEATRICE +Alas! he gets nothing by that. In our last +conflict four of his five wits went halting off, and +now is the whole man governed with one: so that if +he have wit enough to keep himself warm, let him +bear it for a difference between himself and his +horse; for it is all the wealth that he hath left, +to be known a reasonable creature. Who is his +companion now? He hath every month a new sworn brother. + + + +Messenger +Is't possible? + + + +BEATRICE +Very easily possible: he wears his faith but as +the fashion of his hat; it ever changes with the +next block. + + + +Messenger +I see, lady, the gentleman is not in your books. + + + +BEATRICE +No; an he were, I would burn my study. But, I pray +you, who is his companion? Is there no young +squarer now that will make a voyage with him to the devil? + + + +Messenger +He is most in the company of the right noble Claudio. + + + +BEATRICE +O Lord, he will hang upon him like a disease: he +is sooner caught than the pestilence, and the taker +runs presently mad. God help the noble Claudio! if +he have caught the Benedick, it will cost him a +thousand pound ere a' be cured. + + + +Messenger +I will hold friends with you, lady. + + + +BEATRICE +Do, good friend. + + + +LEONATO +You will never run mad, niece. + + + +BEATRICE +No, not till a hot January. + + + +Messenger +Don Pedro is approached. + + + +Enter DON PEDRO, DON JOHN, CLAUDIO, BENEDICK, +and BALTHASAR + + +DON PEDRO +Good Signior Leonato, you are come to meet your +trouble: the fashion of the world is to avoid +cost, and you encounter it. + + + +LEONATO +Never came trouble to my house in the likeness of +your grace: for trouble being gone, comfort should +remain; but when you depart from me, sorrow abides +and happiness takes his leave. + + + +DON PEDRO +You embrace your charge too willingly. I think this +is your daughter. + + + +LEONATO +Her mother hath many times told me so. + + + +BENEDICK +Were you in doubt, sir, that you asked her? + + + +LEONATO +Signior Benedick, no; for then were you a child. + + + +DON PEDRO +You have it full, Benedick: we may guess by this +what you are, being a man. Truly, the lady fathers +herself. Be happy, lady; for you are like an +honourable father. + + + +BENEDICK +If Signior Leonato be her father, she would not +have his head on her shoulders for all Messina, as +like him as she is. + + + +BEATRICE +I wonder that you will still be talking, Signior +Benedick: nobody marks you. + + + +BENEDICK +What, my dear Lady Disdain! are you yet living? + + + +BEATRICE +Is it possible disdain should die while she hath +such meet food to feed it as Signior Benedick? +Courtesy itself must convert to disdain, if you come +in her presence. + + + +BENEDICK +Then is courtesy a turncoat. But it is certain I +am loved of all ladies, only you excepted: and I +would I could find in my heart that I had not a hard +heart; for, truly, I love none. + + + +BEATRICE +A dear happiness to women: they would else have +been troubled with a pernicious suitor. I thank God +and my cold blood, I am of your humour for that: I +had rather hear my dog bark at a crow than a man +swear he loves me. + + + +BENEDICK +God keep your ladyship still in that mind! so some +gentleman or other shall 'scape a predestinate +scratched face. + + + +BEATRICE +Scratching could not make it worse, an 'twere such +a face as yours were. + + + +BENEDICK +Well, you are a rare parrot-teacher. + + + +BEATRICE +A bird of my tongue is better than a beast of yours. + + + +BENEDICK +I would my horse had the speed of your tongue, and +so good a continuer. But keep your way, i' God's +name; I have done. + + + +BEATRICE +You always end with a jade's trick: I know you of old. + + + +DON PEDRO +That is the sum of all, Leonato. Signior Claudio +and Signior Benedick, my dear friend Leonato hath +invited you all. I tell him we shall stay here at +the least a month; and he heartily prays some +occasion may detain us longer. I dare swear he is no +hypocrite, but prays from his heart. + + + +LEONATO +If you swear, my lord, you shall not be forsworn. +To DON JOHN +Let me bid you welcome, my lord: being reconciled to +the prince your brother, I owe you all duty. + + + +DON JOHN +I thank you: I am not of many words, but I thank +you. + + + +LEONATO +Please it your grace lead on? + + + +DON PEDRO +Your hand, Leonato; we will go together. + + + +Exeunt all except BENEDICK and CLAUDIO + + +CLAUDIO +Benedick, didst thou note the daughter of Signior Leonato? + + + +BENEDICK +I noted her not; but I looked on her. + + + +CLAUDIO +Is she not a modest young lady? + + + +BENEDICK +Do you question me, as an honest man should do, for +my simple true judgment; or would you have me speak +after my custom, as being a professed tyrant to their sex? + + + +CLAUDIO +No; I pray thee speak in sober judgment. + + + +BENEDICK +Why, i' faith, methinks she's too low for a high +praise, too brown for a fair praise and too little +for a great praise: only this commendation I can +afford her, that were she other than she is, she +were unhandsome; and being no other but as she is, I +do not like her. + + + +CLAUDIO +Thou thinkest I am in sport: I pray thee tell me +truly how thou likest her. + + + +BENEDICK +Would you buy her, that you inquire after her? + + + +CLAUDIO +Can the world buy such a jewel? + + + +BENEDICK +Yea, and a case to put it into. But speak you this +with a sad brow? or do you play the flouting Jack, +to tell us Cupid is a good hare-finder and Vulcan a +rare carpenter? Come, in what key shall a man take +you, to go in the song? + + + +CLAUDIO +In mine eye she is the sweetest lady that ever I +looked on. + + + +BENEDICK +I can see yet without spectacles and I see no such +matter: there's her cousin, an she were not +possessed with a fury, exceeds her as much in beauty +as the first of May doth the last of December. But I +hope you have no intent to turn husband, have you? + + + +CLAUDIO +I would scarce trust myself, though I had sworn the +contrary, if Hero would be my wife. + + + +BENEDICK +Is't come to this? In faith, hath not the world +one man but he will wear his cap with suspicion? +Shall I never see a bachelor of three-score again? +Go to, i' faith; an thou wilt needs thrust thy neck +into a yoke, wear the print of it and sigh away +Sundays. Look Don Pedro is returned to seek you. + + + +Re-enter DON PEDRO + + +DON PEDRO +What secret hath held you here, that you followed +not to Leonato's? + + + +BENEDICK +I would your grace would constrain me to tell. + + + +DON PEDRO +I charge thee on thy allegiance. + + + +BENEDICK +You hear, Count Claudio: I can be secret as a dumb +man; I would have you think so; but, on my +allegiance, mark you this, on my allegiance. He is +in love. With who? now that is your grace's part. +Mark how short his answer is;--With Hero, Leonato's +short daughter. + + + +CLAUDIO +If this were so, so were it uttered. + + + +BENEDICK +Like the old tale, my lord: 'it is not so, nor +'twas not so, but, indeed, God forbid it should be +so.' + + + +CLAUDIO +If my passion change not shortly, God forbid it +should be otherwise. + + + +DON PEDRO +Amen, if you love her; for the lady is very well worthy. + + + +CLAUDIO +You speak this to fetch me in, my lord. + + + +DON PEDRO +By my troth, I speak my thought. + + + +CLAUDIO +And, in faith, my lord, I spoke mine. + + + +BENEDICK +And, by my two faiths and troths, my lord, I spoke mine. + + + +CLAUDIO +That I love her, I feel. + + + +DON PEDRO +That she is worthy, I know. + + + +BENEDICK +That I neither feel how she should be loved nor +know how she should be worthy, is the opinion that +fire cannot melt out of me: I will die in it at the stake. + + + +DON PEDRO +Thou wast ever an obstinate heretic in the despite +of beauty. + + + +CLAUDIO +And never could maintain his part but in the force +of his will. + + + +BENEDICK +That a woman conceived me, I thank her; that she +brought me up, I likewise give her most humble +thanks: but that I will have a recheat winded in my +forehead, or hang my bugle in an invisible baldrick, +all women shall pardon me. Because I will not do +them the wrong to mistrust any, I will do myself the +right to trust none; and the fine is, for the which +I may go the finer, I will live a bachelor. + + + +DON PEDRO +I shall see thee, ere I die, look pale with love. + + + +BENEDICK +With anger, with sickness, or with hunger, my lord, +not with love: prove that ever I lose more blood +with love than I will get again with drinking, pick +out mine eyes with a ballad-maker's pen and hang me +up at the door of a brothel-house for the sign of +blind Cupid. + + + +DON PEDRO +Well, if ever thou dost fall from this faith, thou +wilt prove a notable argument. + + + +BENEDICK +If I do, hang me in a bottle like a cat and shoot +at me; and he that hits me, let him be clapped on +the shoulder, and called Adam. + + + +DON PEDRO +Well, as time shall try: 'In time the savage bull +doth bear the yoke.' + + + +BENEDICK +The savage bull may; but if ever the sensible +Benedick bear it, pluck off the bull's horns and set +them in my forehead: and let me be vilely painted, +and in such great letters as they write 'Here is +good horse to hire,' let them signify under my sign +'Here you may see Benedick the married man.' + + + +CLAUDIO +If this should ever happen, thou wouldst be horn-mad. + + + +DON PEDRO +Nay, if Cupid have not spent all his quiver in +Venice, thou wilt quake for this shortly. + + + +BENEDICK +I look for an earthquake too, then. + + + +DON PEDRO +Well, you temporize with the hours. In the +meantime, good Signior Benedick, repair to +Leonato's: commend me to him and tell him I will +not fail him at supper; for indeed he hath made +great preparation. + + + +BENEDICK +I have almost matter enough in me for such an +embassage; and so I commit you-- + + + +CLAUDIO +To the tuition of God: From my house, if I had it,-- + + + +DON PEDRO +The sixth of July: Your loving friend, Benedick. + + + +BENEDICK +Nay, mock not, mock not. The body of your +discourse is sometime guarded with fragments, and +the guards are but slightly basted on neither: ere +you flout old ends any further, examine your +conscience: and so I leave you. + + + +Exit + + +CLAUDIO +My liege, your highness now may do me good. + + + +DON PEDRO +My love is thine to teach: teach it but how, +And thou shalt see how apt it is to learn +Any hard lesson that may do thee good. + + + +CLAUDIO +Hath Leonato any son, my lord? + + + +DON PEDRO +No child but Hero; she's his only heir. +Dost thou affect her, Claudio? + + + +CLAUDIO +O, my lord, +When you went onward on this ended action, +I look'd upon her with a soldier's eye, +That liked, but had a rougher task in hand +Than to drive liking to the name of love: +But now I am return'd and that war-thoughts +Have left their places vacant, in their rooms +Come thronging soft and delicate desires, +All prompting me how fair young Hero is, +Saying, I liked her ere I went to wars. + + + +DON PEDRO +Thou wilt be like a lover presently +And tire the hearer with a book of words. +If thou dost love fair Hero, cherish it, +And I will break with her and with her father, +And thou shalt have her. Was't not to this end +That thou began'st to twist so fine a story? + + + +CLAUDIO +How sweetly you do minister to love, +That know love's grief by his complexion! +But lest my liking might too sudden seem, +I would have salved it with a longer treatise. + + + +DON PEDRO +What need the bridge much broader than the flood? +The fairest grant is the necessity. +Look, what will serve is fit: 'tis once, thou lovest, +And I will fit thee with the remedy. +I know we shall have revelling to-night: +I will assume thy part in some disguise +And tell fair Hero I am Claudio, +And in her bosom I'll unclasp my heart +And take her hearing prisoner with the force +And strong encounter of my amorous tale: +Then after to her father will I break; +And the conclusion is, she shall be thine. +In practise let us put it presently. + + + +Exeunt + + +SCENE II. A room in LEONATO's house. +Enter LEONATO and ANTONIO, meeting + + +LEONATO +How now, brother! Where is my cousin, your son? +hath he provided this music? + + + +ANTONIO +He is very busy about it. But, brother, I can tell +you strange news that you yet dreamt not of. + + + +LEONATO +Are they good? + + + +ANTONIO +As the event stamps them: but they have a good +cover; they show well outward. The prince and Count +Claudio, walking in a thick-pleached alley in mine +orchard, were thus much overheard by a man of mine: +the prince discovered to Claudio that he loved my +niece your daughter and meant to acknowledge it +this night in a dance: and if he found her +accordant, he meant to take the present time by the +top and instantly break with you of it. + + + +LEONATO +Hath the fellow any wit that told you this? + + + +ANTONIO +A good sharp fellow: I will send for him; and +question him yourself. + + + +LEONATO +No, no; we will hold it as a dream till it appear +itself: but I will acquaint my daughter withal, +that she may be the better prepared for an answer, +if peradventure this be true. Go you and tell her of it. +Enter Attendants +Cousins, you know what you have to do. O, I cry you +mercy, friend; go you with me, and I will use your +skill. Good cousin, have a care this busy time. + + + +Exeunt + + +SCENE III. The same. +Enter DON JOHN and CONRADE + + +CONRADE +What the good-year, my lord! why are you thus out +of measure sad? + + + +DON JOHN +There is no measure in the occasion that breeds; +therefore the sadness is without limit. + + + +CONRADE +You should hear reason. + + + +DON JOHN +And when I have heard it, what blessing brings it? + + + +CONRADE +If not a present remedy, at least a patient +sufferance. + + + +DON JOHN +I wonder that thou, being, as thou sayest thou art, +born under Saturn, goest about to apply a moral +medicine to a mortifying mischief. I cannot hide +what I am: I must be sad when I have cause and smile +at no man's jests, eat when I have stomach and wait +for no man's leisure, sleep when I am drowsy and +tend on no man's business, laugh when I am merry and +claw no man in his humour. + + + +CONRADE +Yea, but you must not make the full show of this +till you may do it without controlment. You have of +late stood out against your brother, and he hath +ta'en you newly into his grace; where it is +impossible you should take true root but by the +fair weather that you make yourself: it is needful +that you frame the season for your own harvest. + + + +DON JOHN +I had rather be a canker in a hedge than a rose in +his grace, and it better fits my blood to be +disdained of all than to fashion a carriage to rob +love from any: in this, though I cannot be said to +be a flattering honest man, it must not be denied +but I am a plain-dealing villain. I am trusted with +a muzzle and enfranchised with a clog; therefore I +have decreed not to sing in my cage. If I had my +mouth, I would bite; if I had my liberty, I would do +my liking: in the meantime let me be that I am and +seek not to alter me. + + + +CONRADE +Can you make no use of your discontent? + + + +DON JOHN +I make all use of it, for I use it only. +Who comes here? +Enter BORACHIO +What news, Borachio? + + + +BORACHIO +I came yonder from a great supper: the prince your +brother is royally entertained by Leonato: and I +can give you intelligence of an intended marriage. + + + +DON JOHN +Will it serve for any model to build mischief on? +What is he for a fool that betroths himself to +unquietness? + + + +BORACHIO +Marry, it is your brother's right hand. + + + +DON JOHN +Who? the most exquisite Claudio? + + + +BORACHIO +Even he. + + + +DON JOHN +A proper squire! And who, and who? which way looks +he? + + + +BORACHIO +Marry, on Hero, the daughter and heir of Leonato. + + + +DON JOHN +A very forward March-chick! How came you to this? + + + +BORACHIO +Being entertained for a perfumer, as I was smoking a +musty room, comes me the prince and Claudio, hand +in hand in sad conference: I whipt me behind the +arras; and there heard it agreed upon that the +prince should woo Hero for himself, and having +obtained her, give her to Count Claudio. + + + +DON JOHN +Come, come, let us thither: this may prove food to +my displeasure. That young start-up hath all the +glory of my overthrow: if I can cross him any way, I +bless myself every way. You are both sure, and will assist me? + + + +CONRADE +To the death, my lord. + + + +DON JOHN +Let us to the great supper: their cheer is the +greater that I am subdued. Would the cook were of +my mind! Shall we go prove what's to be done? + + + +BORACHIO +We'll wait upon your lordship. + + + +Exeunt + + + + +ACT II + +SCENE I. A hall in LEONATO'S house. +Enter LEONATO, ANTONIO, HERO, BEATRICE, and others + + +LEONATO +Was not Count John here at supper? + + + +ANTONIO +I saw him not. + + + +BEATRICE +How tartly that gentleman looks! I never can see +him but I am heart-burned an hour after. + + + +HERO +He is of a very melancholy disposition. + + + +BEATRICE +He were an excellent man that were made just in the +midway between him and Benedick: the one is too +like an image and says nothing, and the other too +like my lady's eldest son, evermore tattling. + + + +LEONATO +Then half Signior Benedick's tongue in Count John's +mouth, and half Count John's melancholy in Signior +Benedick's face,-- + + + +BEATRICE +With a good leg and a good foot, uncle, and money +enough in his purse, such a man would win any woman +in the world, if a' could get her good-will. + + + +LEONATO +By my troth, niece, thou wilt never get thee a +husband, if thou be so shrewd of thy tongue. + + + +ANTONIO +In faith, she's too curst. + + + +BEATRICE +Too curst is more than curst: I shall lessen God's +sending that way; for it is said, 'God sends a curst +cow short horns;' but to a cow too curst he sends none. + + + +LEONATO +So, by being too curst, God will send you no horns. + + + +BEATRICE +Just, if he send me no husband; for the which +blessing I am at him upon my knees every morning and +evening. Lord, I could not endure a husband with a +beard on his face: I had rather lie in the woollen. + + + +LEONATO +You may light on a husband that hath no beard. + + + +BEATRICE +What should I do with him? dress him in my apparel +and make him my waiting-gentlewoman? He that hath a +beard is more than a youth, and he that hath no +beard is less than a man: and he that is more than +a youth is not for me, and he that is less than a +man, I am not for him: therefore, I will even take +sixpence in earnest of the bear-ward, and lead his +apes into hell. + + + +LEONATO +Well, then, go you into hell? + + + +BEATRICE +No, but to the gate; and there will the devil meet +me, like an old cuckold, with horns on his head, and +say 'Get you to heaven, Beatrice, get you to +heaven; here's no place for you maids:' so deliver +I up my apes, and away to Saint Peter for the +heavens; he shows me where the bachelors sit, and +there live we as merry as the day is long. + + + +ANTONIO +To HERO Well, niece, I trust you will be ruled +by your father. + + + +BEATRICE +Yes, faith; it is my cousin's duty to make curtsy +and say 'Father, as it please you.' But yet for all +that, cousin, let him be a handsome fellow, or else +make another curtsy and say 'Father, as it please +me.' + + + +LEONATO +Well, niece, I hope to see you one day fitted with a husband. + + + +BEATRICE +Not till God make men of some other metal than +earth. Would it not grieve a woman to be +overmastered with a pierce of valiant dust? to make +an account of her life to a clod of wayward marl? +No, uncle, I'll none: Adam's sons are my brethren; +and, truly, I hold it a sin to match in my kindred. + + + +LEONATO +Daughter, remember what I told you: if the prince +do solicit you in that kind, you know your answer. + + + +BEATRICE +The fault will be in the music, cousin, if you be +not wooed in good time: if the prince be too +important, tell him there is measure in every thing +and so dance out the answer. For, hear me, Hero: +wooing, wedding, and repenting, is as a Scotch jig, +a measure, and a cinque pace: the first suit is hot +and hasty, like a Scotch jig, and full as +fantastical; the wedding, mannerly-modest, as a +measure, full of state and ancientry; and then comes +repentance and, with his bad legs, falls into the +cinque pace faster and faster, till he sink into his grave. + + + +LEONATO +Cousin, you apprehend passing shrewdly. + + + +BEATRICE +I have a good eye, uncle; I can see a church by daylight. + + + +LEONATO +The revellers are entering, brother: make good room. + + +All put on their masks +Enter DON PEDRO, CLAUDIO, BENEDICK, BALTHASAR, +DON JOHN, BORACHIO, MARGARET, URSULA and others, masked + + +DON PEDRO +Lady, will you walk about with your friend? + + + +HERO +So you walk softly and look sweetly and say nothing, +I am yours for the walk; and especially when I walk away. + + + +DON PEDRO +With me in your company? + + + +HERO +I may say so, when I please. + + + +DON PEDRO +And when please you to say so? + + + +HERO +When I like your favour; for God defend the lute +should be like the case! + + + +DON PEDRO +My visor is Philemon's roof; within the house is Jove. + + + +HERO +Why, then, your visor should be thatched. + + + +DON PEDRO +Speak low, if you speak love. + + + +Drawing her aside + + +BALTHASAR +Well, I would you did like me. + + + +MARGARET +So would not I, for your own sake; for I have many +ill-qualities. + + + +BALTHASAR +Which is one? + + + +MARGARET +I say my prayers aloud. + + + +BALTHASAR +I love you the better: the hearers may cry, Amen. + + + +MARGARET +God match me with a good dancer! + + + +BALTHASAR +Amen. + + + +MARGARET +And God keep him out of my sight when the dance is +done! Answer, clerk. + + + +BALTHASAR +No more words: the clerk is answered. + + + +URSULA +I know you well enough; you are Signior Antonio. + + + +ANTONIO +At a word, I am not. + + + +URSULA +I know you by the waggling of your head. + + + +ANTONIO +To tell you true, I counterfeit him. + + + +URSULA +You could never do him so ill-well, unless you were +the very man. Here's his dry hand up and down: you +are he, you are he. + + + +ANTONIO +At a word, I am not. + + + +URSULA +Come, come, do you think I do not know you by your +excellent wit? can virtue hide itself? Go to, +mum, you are he: graces will appear, and there's an +end. + + + +BEATRICE +Will you not tell me who told you so? + + + +BENEDICK +No, you shall pardon me. + + + +BEATRICE +Nor will you not tell me who you are? + + + +BENEDICK +Not now. + + + +BEATRICE +That I was disdainful, and that I had my good wit +out of the 'Hundred Merry Tales:'--well this was +Signior Benedick that said so. + + + +BENEDICK +What's he? + + + +BEATRICE +I am sure you know him well enough. + + + +BENEDICK +Not I, believe me. + + + +BEATRICE +Did he never make you laugh? + + + +BENEDICK +I pray you, what is he? + + + +BEATRICE +Why, he is the prince's jester: a very dull fool; +only his gift is in devising impossible slanders: +none but libertines delight in him; and the +commendation is not in his wit, but in his villany; +for he both pleases men and angers them, and then +they laugh at him and beat him. I am sure he is in +the fleet: I would he had boarded me. + + + +BENEDICK +When I know the gentleman, I'll tell him what you say. + + + +BEATRICE +Do, do: he'll but break a comparison or two on me; +which, peradventure not marked or not laughed at, +strikes him into melancholy; and then there's a +partridge wing saved, for the fool will eat no +supper that night. +Music +We must follow the leaders. + + + +BENEDICK +In every good thing. + + + +BEATRICE +Nay, if they lead to any ill, I will leave them at +the next turning. + + + +Dance. Then exeunt all except DON JOHN, BORACHIO, +and CLAUDIO + + +DON JOHN +Sure my brother is amorous on Hero and hath +withdrawn her father to break with him about it. +The ladies follow her and but one visor remains. + + + +BORACHIO +And that is Claudio: I know him by his bearing. + + + +DON JOHN +Are not you Signior Benedick? + + + +CLAUDIO +You know me well; I am he. + + + +DON JOHN +Signior, you are very near my brother in his love: +he is enamoured on Hero; I pray you, dissuade him +from her: she is no equal for his birth: you may +do the part of an honest man in it. + + + +CLAUDIO +How know you he loves her? + + + +DON JOHN +I heard him swear his affection. + + + +BORACHIO +So did I too; and he swore he would marry her to-night. + + + +DON JOHN +Come, let us to the banquet. + + + +Exeunt DON JOHN and BORACHIO + + +CLAUDIO +Thus answer I in the name of Benedick, +But hear these ill news with the ears of Claudio. +'Tis certain so; the prince wooes for himself. +Friendship is constant in all other things +Save in the office and affairs of love: +Therefore, all hearts in love use their own tongues; +Let every eye negotiate for itself +And trust no agent; for beauty is a witch +Against whose charms faith melteth into blood. +This is an accident of hourly proof, +Which I mistrusted not. Farewell, therefore, Hero! + + + +Re-enter BENEDICK + + +BENEDICK +Count Claudio? + + + +CLAUDIO +Yea, the same. + + + +BENEDICK +Come, will you go with me? + + + +CLAUDIO +Whither? + + + +BENEDICK +Even to the next willow, about your own business, +county. What fashion will you wear the garland of? +about your neck, like an usurer's chain? or under +your arm, like a lieutenant's scarf? You must wear +it one way, for the prince hath got your Hero. + + + +CLAUDIO +I wish him joy of her. + + + +BENEDICK +Why, that's spoken like an honest drovier: so they +sell bullocks. But did you think the prince would +have served you thus? + + + +CLAUDIO +I pray you, leave me. + + + +BENEDICK +Ho! now you strike like the blind man: 'twas the +boy that stole your meat, and you'll beat the post. + + + +CLAUDIO +If it will not be, I'll leave you. + + + +Exit + + +BENEDICK +Alas, poor hurt fowl! now will he creep into sedges. +But that my Lady Beatrice should know me, and not +know me! The prince's fool! Ha? It may be I go +under that title because I am merry. Yea, but so I +am apt to do myself wrong; I am not so reputed: it +is the base, though bitter, disposition of Beatrice +that puts the world into her person and so gives me +out. Well, I'll be revenged as I may. + + + +Re-enter DON PEDRO + + +DON PEDRO +Now, signior, where's the count? did you see him? + + + +BENEDICK +Troth, my lord, I have played the part of Lady Fame. +I found him here as melancholy as a lodge in a +warren: I told him, and I think I told him true, +that your grace had got the good will of this young +lady; and I offered him my company to a willow-tree, +either to make him a garland, as being forsaken, or +to bind him up a rod, as being worthy to be whipped. + + + +DON PEDRO +To be whipped! What's his fault? + + + +BENEDICK +The flat transgression of a schoolboy, who, being +overjoyed with finding a birds' nest, shows it his +companion, and he steals it. + + + +DON PEDRO +Wilt thou make a trust a transgression? The +transgression is in the stealer. + + + +BENEDICK +Yet it had not been amiss the rod had been made, +and the garland too; for the garland he might have +worn himself, and the rod he might have bestowed on +you, who, as I take it, have stolen his birds' nest. + + + +DON PEDRO +I will but teach them to sing, and restore them to +the owner. + + + +BENEDICK +If their singing answer your saying, by my faith, +you say honestly. + + + +DON PEDRO +The Lady Beatrice hath a quarrel to you: the +gentleman that danced with her told her she is much +wronged by you. + + + +BENEDICK +O, she misused me past the endurance of a block! +an oak but with one green leaf on it would have +answered her; my very visor began to assume life and +scold with her. She told me, not thinking I had been +myself, that I was the prince's jester, that I was +duller than a great thaw; huddling jest upon jest +with such impossible conveyance upon me that I stood +like a man at a mark, with a whole army shooting at +me. She speaks poniards, and every word stabs: +if her breath were as terrible as her terminations, +there were no living near her; she would infect to +the north star. I would not marry her, though she +were endowed with all that Adam bad left him before +he transgressed: she would have made Hercules have +turned spit, yea, and have cleft his club to make +the fire too. Come, talk not of her: you shall find +her the infernal Ate in good apparel. I would to God +some scholar would conjure her; for certainly, while +she is here, a man may live as quiet in hell as in a +sanctuary; and people sin upon purpose, because they +would go thither; so, indeed, all disquiet, horror +and perturbation follows her. + + + +DON PEDRO +Look, here she comes. + + + +Enter CLAUDIO, BEATRICE, HERO, and LEONATO + + +BENEDICK +Will your grace command me any service to the +world's end? I will go on the slightest errand now +to the Antipodes that you can devise to send me on; +I will fetch you a tooth-picker now from the +furthest inch of Asia, bring you the length of +Prester John's foot, fetch you a hair off the great +Cham's beard, do you any embassage to the Pigmies, +rather than hold three words' conference with this +harpy. You have no employment for me? + + + +DON PEDRO +None, but to desire your good company. + + + +BENEDICK +O God, sir, here's a dish I love not: I cannot +endure my Lady Tongue. + + + +Exit + + +DON PEDRO +Come, lady, come; you have lost the heart of +Signior Benedick. + + + +BEATRICE +Indeed, my lord, he lent it me awhile; and I gave +him use for it, a double heart for his single one: +marry, once before he won it of me with false dice, +therefore your grace may well say I have lost it. + + + +DON PEDRO +You have put him down, lady, you have put him down. + + + +BEATRICE +So I would not he should do me, my lord, lest I +should prove the mother of fools. I have brought +Count Claudio, whom you sent me to seek. + + + +DON PEDRO +Why, how now, count! wherefore are you sad? + + + +CLAUDIO +Not sad, my lord. + + + +DON PEDRO +How then? sick? + + + +CLAUDIO +Neither, my lord. + + + +BEATRICE +The count is neither sad, nor sick, nor merry, nor +well; but civil count, civil as an orange, and +something of that jealous complexion. + + + +DON PEDRO +I' faith, lady, I think your blazon to be true; +though, I'll be sworn, if he be so, his conceit is +false. Here, Claudio, I have wooed in thy name, and +fair Hero is won: I have broke with her father, +and his good will obtained: name the day of +marriage, and God give thee joy! + + + +LEONATO +Count, take of me my daughter, and with her my +fortunes: his grace hath made the match, and an +grace say Amen to it. + + + +BEATRICE +Speak, count, 'tis your cue. + + + +CLAUDIO +Silence is the perfectest herald of joy: I were +but little happy, if I could say how much. Lady, as +you are mine, I am yours: I give away myself for +you and dote upon the exchange. + + + +BEATRICE +Speak, cousin; or, if you cannot, stop his mouth +with a kiss, and let not him speak neither. + + + +DON PEDRO +In faith, lady, you have a merry heart. + + + +BEATRICE +Yea, my lord; I thank it, poor fool, it keeps on +the windy side of care. My cousin tells him in his +ear that he is in her heart. + + + +CLAUDIO +And so she doth, cousin. + + + +BEATRICE +Good Lord, for alliance! Thus goes every one to the +world but I, and I am sunburnt; I may sit in a +corner and cry heigh-ho for a husband! + + + +DON PEDRO +Lady Beatrice, I will get you one. + + + +BEATRICE +I would rather have one of your father's getting. +Hath your grace ne'er a brother like you? Your +father got excellent husbands, if a maid could come by them. + + + +DON PEDRO +Will you have me, lady? + + + +BEATRICE +No, my lord, unless I might have another for +working-days: your grace is too costly to wear +every day. But, I beseech your grace, pardon me: I +was born to speak all mirth and no matter. + + + +DON PEDRO +Your silence most offends me, and to be merry best +becomes you; for, out of question, you were born in +a merry hour. + + + +BEATRICE +No, sure, my lord, my mother cried; but then there +was a star danced, and under that was I born. +Cousins, God give you joy! + + + +LEONATO +Niece, will you look to those things I told you of? + + + +BEATRICE +I cry you mercy, uncle. By your grace's pardon. + + + +Exit + + +DON PEDRO +By my troth, a pleasant-spirited lady. + + + +LEONATO +There's little of the melancholy element in her, my +lord: she is never sad but when she sleeps, and +not ever sad then; for I have heard my daughter say, +she hath often dreamed of unhappiness and waked +herself with laughing. + + + +DON PEDRO +She cannot endure to hear tell of a husband. + + + +LEONATO +O, by no means: she mocks all her wooers out of suit. + + + +DON PEDRO +She were an excellent wife for Benedict. + + + +LEONATO +O Lord, my lord, if they were but a week married, +they would talk themselves mad. + + + +DON PEDRO +County Claudio, when mean you to go to church? + + + +CLAUDIO +To-morrow, my lord: time goes on crutches till love +have all his rites. + + + +LEONATO +Not till Monday, my dear son, which is hence a just +seven-night; and a time too brief, too, to have all +things answer my mind. + + + +DON PEDRO +Come, you shake the head at so long a breathing: +but, I warrant thee, Claudio, the time shall not go +dully by us. I will in the interim undertake one of +Hercules' labours; which is, to bring Signior +Benedick and the Lady Beatrice into a mountain of +affection the one with the other. I would fain have +it a match, and I doubt not but to fashion it, if +you three will but minister such assistance as I +shall give you direction. + + + +LEONATO +My lord, I am for you, though it cost me ten +nights' watchings. + + + +CLAUDIO +And I, my lord. + + + +DON PEDRO +And you too, gentle Hero? + + + +HERO +I will do any modest office, my lord, to help my +cousin to a good husband. + + + +DON PEDRO +And Benedick is not the unhopefullest husband that +I know. Thus far can I praise him; he is of a noble +strain, of approved valour and confirmed honesty. I +will teach you how to humour your cousin, that she +shall fall in love with Benedick; and I, with your +two helps, will so practise on Benedick that, in +despite of his quick wit and his queasy stomach, he +shall fall in love with Beatrice. If we can do this, +Cupid is no longer an archer: his glory shall be +ours, for we are the only love-gods. Go in with me, +and I will tell you my drift. + + + +Exeunt + + +SCENE II. The same. +Enter DON JOHN and BORACHIO + + +DON JOHN +It is so; the Count Claudio shall marry the +daughter of Leonato. + + + +BORACHIO +Yea, my lord; but I can cross it. + + + +DON JOHN +Any bar, any cross, any impediment will be +medicinable to me: I am sick in displeasure to him, +and whatsoever comes athwart his affection ranges +evenly with mine. How canst thou cross this marriage? + + + +BORACHIO +Not honestly, my lord; but so covertly that no +dishonesty shall appear in me. + + + +DON JOHN +Show me briefly how. + + + +BORACHIO +I think I told your lordship a year since, how much +I am in the favour of Margaret, the waiting +gentlewoman to Hero. + + + +DON JOHN +I remember. + + + +BORACHIO +I can, at any unseasonable instant of the night, +appoint her to look out at her lady's chamber window. + + + +DON JOHN +What life is in that, to be the death of this marriage? + + + +BORACHIO +The poison of that lies in you to temper. Go you to +the prince your brother; spare not to tell him that +he hath wronged his honour in marrying the renowned +Claudio--whose estimation do you mightily hold +up--to a contaminated stale, such a one as Hero. + + + +DON JOHN +What proof shall I make of that? + + + +BORACHIO +Proof enough to misuse the prince, to vex Claudio, +to undo Hero and kill Leonato. Look you for any +other issue? + + + +DON JOHN +Only to despite them, I will endeavour any thing. + + + +BORACHIO +Go, then; find me a meet hour to draw Don Pedro and +the Count Claudio alone: tell them that you know +that Hero loves me; intend a kind of zeal both to the +prince and Claudio, as,--in love of your brother's +honour, who hath made this match, and his friend's +reputation, who is thus like to be cozened with the +semblance of a maid,--that you have discovered +thus. They will scarcely believe this without trial: +offer them instances; which shall bear no less +likelihood than to see me at her chamber-window, +hear me call Margaret Hero, hear Margaret term me +Claudio; and bring them to see this the very night +before the intended wedding,--for in the meantime I +will so fashion the matter that Hero shall be +absent,--and there shall appear such seeming truth +of Hero's disloyalty that jealousy shall be called +assurance and all the preparation overthrown. + + + +DON JOHN +Grow this to what adverse issue it can, I will put +it in practise. Be cunning in the working this, and +thy fee is a thousand ducats. + + + +BORACHIO +Be you constant in the accusation, and my cunning +shall not shame me. + + + +DON JOHN +I will presently go learn their day of marriage. + + + +Exeunt + + +SCENE III. LEONATO'S orchard. +Enter BENEDICK + + +BENEDICK +Boy! + + + +Enter Boy + + +Boy +Signior? + + + +BENEDICK +In my chamber-window lies a book: bring it hither +to me in the orchard. + + + +Boy +I am here already, sir. + + + +BENEDICK +I know that; but I would have thee hence, and here again. +Exit Boy +I do much wonder that one man, seeing how much +another man is a fool when he dedicates his +behaviors to love, will, after he hath laughed at +such shallow follies in others, become the argument +of his own scorn by failing in love: and such a man +is Claudio. I have known when there was no music +with him but the drum and the fife; and now had he +rather hear the tabour and the pipe: I have known +when he would have walked ten mile a-foot to see a +good armour; and now will he lie ten nights awake, +carving the fashion of a new doublet. He was wont to +speak plain and to the purpose, like an honest man +and a soldier; and now is he turned orthography; his +words are a very fantastical banquet, just so many +strange dishes. May I be so converted and see with +these eyes? I cannot tell; I think not: I will not +be sworn, but love may transform me to an oyster; but +I'll take my oath on it, till he have made an oyster +of me, he shall never make me such a fool. One woman +is fair, yet I am well; another is wise, yet I am +well; another virtuous, yet I am well; but till all +graces be in one woman, one woman shall not come in +my grace. Rich she shall be, that's certain; wise, +or I'll none; virtuous, or I'll never cheapen her; +fair, or I'll never look on her; mild, or come not +near me; noble, or not I for an angel; of good +discourse, an excellent musician, and her hair shall +be of what colour it please God. Ha! the prince and +Monsieur Love! I will hide me in the arbour. + + +Withdraws +Enter DON PEDRO, CLAUDIO, and LEONATO + + +DON PEDRO +Come, shall we hear this music? + + + +CLAUDIO +Yea, my good lord. How still the evening is, +As hush'd on purpose to grace harmony! + + + +DON PEDRO +See you where Benedick hath hid himself? + + + +CLAUDIO +O, very well, my lord: the music ended, +We'll fit the kid-fox with a pennyworth. + + + +Enter BALTHASAR with Music + + +DON PEDRO +Come, Balthasar, we'll hear that song again. + + + +BALTHASAR +O, good my lord, tax not so bad a voice +To slander music any more than once. + + + +DON PEDRO +It is the witness still of excellency +To put a strange face on his own perfection. +I pray thee, sing, and let me woo no more. + + + +BALTHASAR +Because you talk of wooing, I will sing; +Since many a wooer doth commence his suit +To her he thinks not worthy, yet he wooes, +Yet will he swear he loves. + + + +DON PEDRO +Now, pray thee, come; +Or, if thou wilt hold longer argument, +Do it in notes. + + + +BALTHASAR +Note this before my notes; +There's not a note of mine that's worth the noting. + + + +DON PEDRO +Why, these are very crotchets that he speaks; +Note, notes, forsooth, and nothing. + + + +Air + + +BENEDICK +Now, divine air! now is his soul ravished! Is it +not strange that sheeps' guts should hale souls out +of men's bodies? Well, a horn for my money, when +all's done. + + + +The Song + + +BALTHASAR +Sigh no more, ladies, sigh no more, +Men were deceivers ever, +One foot in sea and one on shore, +To one thing constant never: +Then sigh not so, but let them go, +And be you blithe and bonny, +Converting all your sounds of woe +Into Hey nonny, nonny. +Sing no more ditties, sing no moe, +Of dumps so dull and heavy; +The fraud of men was ever so, +Since summer first was leafy: +Then sigh not so, &c. + + + +DON PEDRO +By my troth, a good song. + + + +BALTHASAR +And an ill singer, my lord. + + + +DON PEDRO +Ha, no, no, faith; thou singest well enough for a shift. + + + +BENEDICK +An he had been a dog that should have howled thus, +they would have hanged him: and I pray God his bad +voice bode no mischief. I had as lief have heard the +night-raven, come what plague could have come after +it. + + + +DON PEDRO +Yea, marry, dost thou hear, Balthasar? I pray thee, +get us some excellent music; for to-morrow night we +would have it at the Lady Hero's chamber-window. + + + +BALTHASAR +The best I can, my lord. + + + +DON PEDRO +Do so: farewell. +Exit BALTHASAR +Come hither, Leonato. What was it you told me of +to-day, that your niece Beatrice was in love with +Signior Benedick? + + + +CLAUDIO +O, ay: stalk on. stalk on; the fowl sits. I did +never think that lady would have loved any man. + + + +LEONATO +No, nor I neither; but most wonderful that she +should so dote on Signior Benedick, whom she hath in +all outward behaviors seemed ever to abhor. + + + +BENEDICK +Is't possible? Sits the wind in that corner? + + + +LEONATO +By my troth, my lord, I cannot tell what to think +of it but that she loves him with an enraged +affection: it is past the infinite of thought. + + + +DON PEDRO +May be she doth but counterfeit. + + + +CLAUDIO +Faith, like enough. + + + +LEONATO +O God, counterfeit! There was never counterfeit of +passion came so near the life of passion as she +discovers it. + + + +DON PEDRO +Why, what effects of passion shows she? + + + +CLAUDIO +Bait the hook well; this fish will bite. + + + +LEONATO +What effects, my lord? She will sit you, you heard +my daughter tell you how. + + + +CLAUDIO +She did, indeed. + + + +DON PEDRO +How, how, pray you? You amaze me: I would have I +thought her spirit had been invincible against all +assaults of affection. + + + +LEONATO +I would have sworn it had, my lord; especially +against Benedick. + + + +BENEDICK +I should think this a gull, but that the +white-bearded fellow speaks it: knavery cannot, +sure, hide himself in such reverence. + + + +CLAUDIO +He hath ta'en the infection: hold it up. + + + +DON PEDRO +Hath she made her affection known to Benedick? + + + +LEONATO +No; and swears she never will: that's her torment. + + + +CLAUDIO +'Tis true, indeed; so your daughter says: 'Shall +I,' says she, 'that have so oft encountered him +with scorn, write to him that I love him?' + + + +LEONATO +This says she now when she is beginning to write to +him; for she'll be up twenty times a night, and +there will she sit in her smock till she have writ a +sheet of paper: my daughter tells us all. + + + +CLAUDIO +Now you talk of a sheet of paper, I remember a +pretty jest your daughter told us of. + + + +LEONATO +O, when she had writ it and was reading it over, she +found Benedick and Beatrice between the sheet? + + + +CLAUDIO +That. + + + +LEONATO +O, she tore the letter into a thousand halfpence; +railed at herself, that she should be so immodest +to write to one that she knew would flout her; 'I +measure him,' says she, 'by my own spirit; for I +should flout him, if he writ to me; yea, though I +love him, I should.' + + + +CLAUDIO +Then down upon her knees she falls, weeps, sobs, +beats her heart, tears her hair, prays, curses; 'O +sweet Benedick! God give me patience!' + + + +LEONATO +She doth indeed; my daughter says so: and the +ecstasy hath so much overborne her that my daughter +is sometime afeared she will do a desperate outrage +to herself: it is very true. + + + +DON PEDRO +It were good that Benedick knew of it by some +other, if she will not discover it. + + + +CLAUDIO +To what end? He would make but a sport of it and +torment the poor lady worse. + + + +DON PEDRO +An he should, it were an alms to hang him. She's an +excellent sweet lady; and, out of all suspicion, +she is virtuous. + + + +CLAUDIO +And she is exceeding wise. + + + +DON PEDRO +In every thing but in loving Benedick. + + + +LEONATO +O, my lord, wisdom and blood combating in so tender +a body, we have ten proofs to one that blood hath +the victory. I am sorry for her, as I have just +cause, being her uncle and her guardian. + + + +DON PEDRO +I would she had bestowed this dotage on me: I would +have daffed all other respects and made her half +myself. I pray you, tell Benedick of it, and hear +what a' will say. + + + +LEONATO +Were it good, think you? + + + +CLAUDIO +Hero thinks surely she will die; for she says she +will die, if he love her not, and she will die, ere +she make her love known, and she will die, if he woo +her, rather than she will bate one breath of her +accustomed crossness. + + + +DON PEDRO +She doth well: if she should make tender of her +love, 'tis very possible he'll scorn it; for the +man, as you know all, hath a contemptible spirit. + + + +CLAUDIO +He is a very proper man. + + + +DON PEDRO +He hath indeed a good outward happiness. + + + +CLAUDIO +Before God! and, in my mind, very wise. + + + +DON PEDRO +He doth indeed show some sparks that are like wit. + + + +CLAUDIO +And I take him to be valiant. + + + +DON PEDRO +As Hector, I assure you: and in the managing of +quarrels you may say he is wise; for either he +avoids them with great discretion, or undertakes +them with a most Christian-like fear. + + + +LEONATO +If he do fear God, a' must necessarily keep peace: +if he break the peace, he ought to enter into a +quarrel with fear and trembling. + + + +DON PEDRO +And so will he do; for the man doth fear God, +howsoever it seems not in him by some large jests +he will make. Well I am sorry for your niece. Shall +we go seek Benedick, and tell him of her love? + + + +CLAUDIO +Never tell him, my lord: let her wear it out with +good counsel. + + + +LEONATO +Nay, that's impossible: she may wear her heart out first. + + + +DON PEDRO +Well, we will hear further of it by your daughter: +let it cool the while. I love Benedick well; and I +could wish he would modestly examine himself, to see +how much he is unworthy so good a lady. + + + +LEONATO +My lord, will you walk? dinner is ready. + + + +CLAUDIO +If he do not dote on her upon this, I will never +trust my expectation. + + + +DON PEDRO +Let there be the same net spread for her; and that +must your daughter and her gentlewomen carry. The +sport will be, when they hold one an opinion of +another's dotage, and no such matter: that's the +scene that I would see, which will be merely a +dumb-show. Let us send her to call him in to dinner. + + + +Exeunt DON PEDRO, CLAUDIO, and LEONATO + + +BENEDICK +Coming forward This can be no trick: the +conference was sadly borne. They have the truth of +this from Hero. They seem to pity the lady: it +seems her affections have their full bent. Love me! +why, it must be requited. I hear how I am censured: +they say I will bear myself proudly, if I perceive +the love come from her; they say too that she will +rather die than give any sign of affection. I did +never think to marry: I must not seem proud: happy +are they that hear their detractions and can put +them to mending. They say the lady is fair; 'tis a +truth, I can bear them witness; and virtuous; 'tis +so, I cannot reprove it; and wise, but for loving +me; by my troth, it is no addition to her wit, nor +no great argument of her folly, for I will be +horribly in love with her. I may chance have some +odd quirks and remnants of wit broken on me, +because I have railed so long against marriage: but +doth not the appetite alter? a man loves the meat +in his youth that he cannot endure in his age. +Shall quips and sentences and these paper bullets of +the brain awe a man from the career of his humour? +No, the world must be peopled. When I said I would +die a bachelor, I did not think I should live till I +were married. Here comes Beatrice. By this day! +she's a fair lady: I do spy some marks of love in +her. + + + +Enter BEATRICE + + +BEATRICE +Against my will I am sent to bid you come in to dinner. + + + +BENEDICK +Fair Beatrice, I thank you for your pains. + + + +BEATRICE +I took no more pains for those thanks than you take +pains to thank me: if it had been painful, I would +not have come. + + + +BENEDICK +You take pleasure then in the message? + + + +BEATRICE +Yea, just so much as you may take upon a knife's +point and choke a daw withal. You have no stomach, +signior: fare you well. + + + +Exit + + +BENEDICK +Ha! 'Against my will I am sent to bid you come in +to dinner;' there's a double meaning in that 'I took +no more pains for those thanks than you took pains +to thank me.' that's as much as to say, Any pains +that I take for you is as easy as thanks. If I do +not take pity of her, I am a villain; if I do not +love her, I am a Jew. I will go get her picture. + + + +Exit + + + + +ACT III + +SCENE I. LEONATO'S garden. +Enter HERO, MARGARET, and URSULA + + +HERO +Good Margaret, run thee to the parlor; +There shalt thou find my cousin Beatrice +Proposing with the prince and Claudio: +Whisper her ear and tell her, I and Ursula +Walk in the orchard and our whole discourse +Is all of her; say that thou overheard'st us; +And bid her steal into the pleached bower, +Where honeysuckles, ripen'd by the sun, +Forbid the sun to enter, like favourites, +Made proud by princes, that advance their pride +Against that power that bred it: there will she hide her, +To listen our purpose. This is thy office; +Bear thee well in it and leave us alone. + + + +MARGARET +I'll make her come, I warrant you, presently. + + + +Exit + + +HERO +Now, Ursula, when Beatrice doth come, +As we do trace this alley up and down, +Our talk must only be of Benedick. +When I do name him, let it be thy part +To praise him more than ever man did merit: +My talk to thee must be how Benedick +Is sick in love with Beatrice. Of this matter +Is little Cupid's crafty arrow made, +That only wounds by hearsay. +Enter BEATRICE, behind +Now begin; +For look where Beatrice, like a lapwing, runs +Close by the ground, to hear our conference. + + + +URSULA +The pleasant'st angling is to see the fish +Cut with her golden oars the silver stream, +And greedily devour the treacherous bait: +So angle we for Beatrice; who even now +Is couched in the woodbine coverture. +Fear you not my part of the dialogue. + + + +HERO +Then go we near her, that her ear lose nothing +Of the false sweet bait that we lay for it. +Approaching the bower +No, truly, Ursula, she is too disdainful; +I know her spirits are as coy and wild +As haggerds of the rock. + + + +URSULA +But are you sure +That Benedick loves Beatrice so entirely? + + + +HERO +So says the prince and my new-trothed lord. + + + +URSULA +And did they bid you tell her of it, madam? + + + +HERO +They did entreat me to acquaint her of it; +But I persuaded them, if they loved Benedick, +To wish him wrestle with affection, +And never to let Beatrice know of it. + + + +URSULA +Why did you so? Doth not the gentleman +Deserve as full as fortunate a bed +As ever Beatrice shall couch upon? + + + +HERO +O god of love! I know he doth deserve +As much as may be yielded to a man: +But Nature never framed a woman's heart +Of prouder stuff than that of Beatrice; +Disdain and scorn ride sparkling in her eyes, +Misprising what they look on, and her wit +Values itself so highly that to her +All matter else seems weak: she cannot love, +Nor take no shape nor project of affection, +She is so self-endeared. + + + +URSULA +Sure, I think so; +And therefore certainly it were not good +She knew his love, lest she make sport at it. + + + +HERO +Why, you speak truth. I never yet saw man, +How wise, how noble, young, how rarely featured, +But she would spell him backward: if fair-faced, +She would swear the gentleman should be her sister; +If black, why, Nature, drawing of an antique, +Made a foul blot; if tall, a lance ill-headed; +If low, an agate very vilely cut; +If speaking, why, a vane blown with all winds; +If silent, why, a block moved with none. +So turns she every man the wrong side out +And never gives to truth and virtue that +Which simpleness and merit purchaseth. + + + +URSULA +Sure, sure, such carping is not commendable. + + + +HERO +No, not to be so odd and from all fashions +As Beatrice is, cannot be commendable: +But who dare tell her so? If I should speak, +She would mock me into air; O, she would laugh me +Out of myself, press me to death with wit. +Therefore let Benedick, like cover'd fire, +Consume away in sighs, waste inwardly: +It were a better death than die with mocks, +Which is as bad as die with tickling. + + + +URSULA +Yet tell her of it: hear what she will say. + + + +HERO +No; rather I will go to Benedick +And counsel him to fight against his passion. +And, truly, I'll devise some honest slanders +To stain my cousin with: one doth not know +How much an ill word may empoison liking. + + + +URSULA +O, do not do your cousin such a wrong. +She cannot be so much without true judgment-- +Having so swift and excellent a wit +As she is prized to have--as to refuse +So rare a gentleman as Signior Benedick. + + + +HERO +He is the only man of Italy. +Always excepted my dear Claudio. + + + +URSULA +I pray you, be not angry with me, madam, +Speaking my fancy: Signior Benedick, +For shape, for bearing, argument and valour, +Goes foremost in report through Italy. + + + +HERO +Indeed, he hath an excellent good name. + + + +URSULA +His excellence did earn it, ere he had it. +When are you married, madam? + + + +HERO +Why, every day, to-morrow. Come, go in: +I'll show thee some attires, and have thy counsel +Which is the best to furnish me to-morrow. + + + +URSULA +She's limed, I warrant you: we have caught her, madam. + + + +HERO +If it proves so, then loving goes by haps: +Some Cupid kills with arrows, some with traps. + + + +Exeunt HERO and URSULA + + +BEATRICE +Coming forward +What fire is in mine ears? Can this be true? +Stand I condemn'd for pride and scorn so much? +Contempt, farewell! and maiden pride, adieu! +No glory lives behind the back of such. +And, Benedick, love on; I will requite thee, +Taming my wild heart to thy loving hand: +If thou dost love, my kindness shall incite thee +To bind our loves up in a holy band; +For others say thou dost deserve, and I +Believe it better than reportingly. + + + +Exit + + +SCENE II. A room in LEONATO'S house +Enter DON PEDRO, CLAUDIO, BENEDICK, and LEONATO + + +DON PEDRO +I do but stay till your marriage be consummate, and +then go I toward Arragon. + + + +CLAUDIO +I'll bring you thither, my lord, if you'll +vouchsafe me. + + + +DON PEDRO +Nay, that would be as great a soil in the new gloss +of your marriage as to show a child his new coat +and forbid him to wear it. I will only be bold +with Benedick for his company; for, from the crown +of his head to the sole of his foot, he is all +mirth: he hath twice or thrice cut Cupid's +bow-string and the little hangman dare not shoot at +him; he hath a heart as sound as a bell and his +tongue is the clapper, for what his heart thinks his +tongue speaks. + + + +BENEDICK +Gallants, I am not as I have been. + + + +LEONATO +So say I methinks you are sadder. + + + +CLAUDIO +I hope he be in love. + + + +DON PEDRO +Hang him, truant! there's no true drop of blood in +him, to be truly touched with love: if he be sad, +he wants money. + + + +BENEDICK +I have the toothache. + + + +DON PEDRO +Draw it. + + + +BENEDICK +Hang it! + + + +CLAUDIO +You must hang it first, and draw it afterwards. + + + +DON PEDRO +What! sigh for the toothache? + + + +LEONATO +Where is but a humour or a worm. + + + +BENEDICK +Well, every one can master a grief but he that has +it. + + + +CLAUDIO +Yet say I, he is in love. + + + +DON PEDRO +There is no appearance of fancy in him, unless it be +a fancy that he hath to strange disguises; as, to be +a Dutchman today, a Frenchman to-morrow, or in the +shape of two countries at once, as, a German from +the waist downward, all slops, and a Spaniard from +the hip upward, no doublet. Unless he have a fancy +to this foolery, as it appears he hath, he is no +fool for fancy, as you would have it appear he is. + + + +CLAUDIO +If he be not in love with some woman, there is no +believing old signs: a' brushes his hat o' +mornings; what should that bode? + + + +DON PEDRO +Hath any man seen him at the barber's? + + + +CLAUDIO +No, but the barber's man hath been seen with him, +and the old ornament of his cheek hath already +stuffed tennis-balls. + + + +LEONATO +Indeed, he looks younger than he did, by the loss of a beard. + + + +DON PEDRO +Nay, a' rubs himself with civet: can you smell him +out by that? + + + +CLAUDIO +That's as much as to say, the sweet youth's in love. + + + +DON PEDRO +The greatest note of it is his melancholy. + + + +CLAUDIO +And when was he wont to wash his face? + + + +DON PEDRO +Yea, or to paint himself? for the which, I hear +what they say of him. + + + +CLAUDIO +Nay, but his jesting spirit; which is now crept into +a lute-string and now governed by stops. + + + +DON PEDRO +Indeed, that tells a heavy tale for him: conclude, +conclude he is in love. + + + +CLAUDIO +Nay, but I know who loves him. + + + +DON PEDRO +That would I know too: I warrant, one that knows him not. + + + +CLAUDIO +Yes, and his ill conditions; and, in despite of +all, dies for him. + + + +DON PEDRO +She shall be buried with her face upwards. + + + +BENEDICK +Yet is this no charm for the toothache. Old +signior, walk aside with me: I have studied eight +or nine wise words to speak to you, which these +hobby-horses must not hear. + + + +Exeunt BENEDICK and LEONATO + + +DON PEDRO +For my life, to break with him about Beatrice. + + + +CLAUDIO +'Tis even so. Hero and Margaret have by this +played their parts with Beatrice; and then the two +bears will not bite one another when they meet. + + + +Enter DON JOHN + + +DON JOHN +My lord and brother, God save you! + + + +DON PEDRO +Good den, brother. + + + +DON JOHN +If your leisure served, I would speak with you. + + + +DON PEDRO +In private? + + + +DON JOHN +If it please you: yet Count Claudio may hear; for +what I would speak of concerns him. + + + +DON PEDRO +What's the matter? + + + +DON JOHN +To CLAUDIO Means your lordship to be married +to-morrow? + + + +DON PEDRO +You know he does. + + + +DON JOHN +I know not that, when he knows what I know. + + + +CLAUDIO +If there be any impediment, I pray you discover it. + + + +DON JOHN +You may think I love you not: let that appear +hereafter, and aim better at me by that I now will +manifest. For my brother, I think he holds you +well, and in dearness of heart hath holp to effect +your ensuing marriage;--surely suit ill spent and +labour ill bestowed. + + + +DON PEDRO +Why, what's the matter? + + + +DON JOHN +I came hither to tell you; and, circumstances +shortened, for she has been too long a talking of, +the lady is disloyal. + + + +CLAUDIO +Who, Hero? + + + +DON PEDRO +Even she; Leonato's Hero, your Hero, every man's Hero: + + + +CLAUDIO +Disloyal? + + + +DON JOHN +The word is too good to paint out her wickedness; I +could say she were worse: think you of a worse +title, and I will fit her to it. Wonder not till +further warrant: go but with me to-night, you shall +see her chamber-window entered, even the night +before her wedding-day: if you love her then, +to-morrow wed her; but it would better fit your honour +to change your mind. + + + +CLAUDIO +May this be so? + + + +DON PEDRO +I will not think it. + + + +DON JOHN +If you dare not trust that you see, confess not +that you know: if you will follow me, I will show +you enough; and when you have seen more and heard +more, proceed accordingly. + + + +CLAUDIO +If I see any thing to-night why I should not marry +her to-morrow in the congregation, where I should +wed, there will I shame her. + + + +DON PEDRO +And, as I wooed for thee to obtain her, I will join +with thee to disgrace her. + + + +DON JOHN +I will disparage her no farther till you are my +witnesses: bear it coldly but till midnight, and +let the issue show itself. + + + +DON PEDRO +O day untowardly turned! + + + +CLAUDIO +O mischief strangely thwarting! + + + +DON JOHN +O plague right well prevented! so will you say when +you have seen the sequel. + + + +Exeunt + + +SCENE III. A street. +Enter DOGBERRY and VERGES with the Watch + + +DOGBERRY +Are you good men and true? + + + +VERGES +Yea, or else it were pity but they should suffer +salvation, body and soul. + + + +DOGBERRY +Nay, that were a punishment too good for them, if +they should have any allegiance in them, being +chosen for the prince's watch. + + + +VERGES +Well, give them their charge, neighbour Dogberry. + + + +DOGBERRY +First, who think you the most desertless man to be +constable? + + + +First Watchman +Hugh Otecake, sir, or George Seacole; for they can +write and read. + + + +DOGBERRY +Come hither, neighbour Seacole. God hath blessed +you with a good name: to be a well-favoured man is +the gift of fortune; but to write and read comes by nature. + + + +Second Watchman +Both which, master constable,-- + + + +DOGBERRY +You have: I knew it would be your answer. Well, +for your favour, sir, why, give God thanks, and make +no boast of it; and for your writing and reading, +let that appear when there is no need of such +vanity. You are thought here to be the most +senseless and fit man for the constable of the +watch; therefore bear you the lantern. This is your +charge: you shall comprehend all vagrom men; you are +to bid any man stand, in the prince's name. + + + +Second Watchman +How if a' will not stand? + + + +DOGBERRY +Why, then, take no note of him, but let him go; and +presently call the rest of the watch together and +thank God you are rid of a knave. + + + +VERGES +If he will not stand when he is bidden, he is none +of the prince's subjects. + + + +DOGBERRY +True, and they are to meddle with none but the +prince's subjects. You shall also make no noise in +the streets; for, for the watch to babble and to +talk is most tolerable and not to be endured. + + + +Watchman +We will rather sleep than talk: we know what +belongs to a watch. + + + +DOGBERRY +Why, you speak like an ancient and most quiet +watchman; for I cannot see how sleeping should +offend: only, have a care that your bills be not +stolen. Well, you are to call at all the +ale-houses, and bid those that are drunk get them to bed. + + + +Watchman +How if they will not? + + + +DOGBERRY +Why, then, let them alone till they are sober: if +they make you not then the better answer, you may +say they are not the men you took them for. + + + +Watchman +Well, sir. + + + +DOGBERRY +If you meet a thief, you may suspect him, by virtue +of your office, to be no true man; and, for such +kind of men, the less you meddle or make with them, +why the more is for your honesty. + + + +Watchman +If we know him to be a thief, shall we not lay +hands on him? + + + +DOGBERRY +Truly, by your office, you may; but I think they +that touch pitch will be defiled: the most peaceable +way for you, if you do take a thief, is to let him +show himself what he is and steal out of your company. + + + +VERGES +You have been always called a merciful man, partner. + + + +DOGBERRY +Truly, I would not hang a dog by my will, much more +a man who hath any honesty in him. + + + +VERGES +If you hear a child cry in the night, you must call +to the nurse and bid her still it. + + + +Watchman +How if the nurse be asleep and will not hear us? + + + +DOGBERRY +Why, then, depart in peace, and let the child wake +her with crying; for the ewe that will not hear her +lamb when it baes will never answer a calf when he bleats. + + + +VERGES +'Tis very true. + + + +DOGBERRY +This is the end of the charge:--you, constable, are +to present the prince's own person: if you meet the +prince in the night, you may stay him. + + + +VERGES +Nay, by'r our lady, that I think a' cannot. + + + +DOGBERRY +Five shillings to one on't, with any man that knows +the statutes, he may stay him: marry, not without +the prince be willing; for, indeed, the watch ought +to offend no man; and it is an offence to stay a +man against his will. + + + +VERGES +By'r lady, I think it be so. + + + +DOGBERRY +Ha, ha, ha! Well, masters, good night: an there be +any matter of weight chances, call up me: keep your +fellows' counsels and your own; and good night. +Come, neighbour. + + + +Watchman +Well, masters, we hear our charge: let us go sit here +upon the church-bench till two, and then all to bed. + + + +DOGBERRY +One word more, honest neighbours. I pray you watch +about Signior Leonato's door; for the wedding being +there to-morrow, there is a great coil to-night. +Adieu: be vigitant, I beseech you. + + +Exeunt DOGBERRY and VERGES +Enter BORACHIO and CONRADE + + +BORACHIO +What Conrade! + + + +Watchman +Aside Peace! stir not. + + + +BORACHIO +Conrade, I say! + + + +CONRADE +Here, man; I am at thy elbow. + + + +BORACHIO +Mass, and my elbow itched; I thought there would a +scab follow. + + + +CONRADE +I will owe thee an answer for that: and now forward +with thy tale. + + + +BORACHIO +Stand thee close, then, under this pent-house, for +it drizzles rain; and I will, like a true drunkard, +utter all to thee. + + + +Watchman +Aside Some treason, masters: yet stand close. + + + +BORACHIO +Therefore know I have earned of Don John a thousand ducats. + + + +CONRADE +Is it possible that any villany should be so dear? + + + +BORACHIO +Thou shouldst rather ask if it were possible any +villany should be so rich; for when rich villains +have need of poor ones, poor ones may make what +price they will. + + + +CONRADE +I wonder at it. + + + +BORACHIO +That shows thou art unconfirmed. Thou knowest that +the fashion of a doublet, or a hat, or a cloak, is +nothing to a man. + + + +CONRADE +Yes, it is apparel. + + + +BORACHIO +I mean, the fashion. + + + +CONRADE +Yes, the fashion is the fashion. + + + +BORACHIO +Tush! I may as well say the fool's the fool. But +seest thou not what a deformed thief this fashion +is? + + + +Watchman +Aside I know that Deformed; a' has been a vile +thief this seven year; a' goes up and down like a +gentleman: I remember his name. + + + +BORACHIO +Didst thou not hear somebody? + + + +CONRADE +No; 'twas the vane on the house. + + + +BORACHIO +Seest thou not, I say, what a deformed thief this +fashion is? how giddily a' turns about all the hot +bloods between fourteen and five-and-thirty? +sometimes fashioning them like Pharaoh's soldiers +in the reeky painting, sometime like god Bel's +priests in the old church-window, sometime like the +shaven Hercules in the smirched worm-eaten tapestry, +where his codpiece seems as massy as his club? + + + +CONRADE +All this I see; and I see that the fashion wears +out more apparel than the man. But art not thou +thyself giddy with the fashion too, that thou hast +shifted out of thy tale into telling me of the fashion? + + + +BORACHIO +Not so, neither: but know that I have to-night +wooed Margaret, the Lady Hero's gentlewoman, by the +name of Hero: she leans me out at her mistress' +chamber-window, bids me a thousand times good +night,--I tell this tale vilely:--I should first +tell thee how the prince, Claudio and my master, +planted and placed and possessed by my master Don +John, saw afar off in the orchard this amiable encounter. + + + +CONRADE +And thought they Margaret was Hero? + + + +BORACHIO +Two of them did, the prince and Claudio; but the +devil my master knew she was Margaret; and partly +by his oaths, which first possessed them, partly by +the dark night, which did deceive them, but chiefly +by my villany, which did confirm any slander that +Don John had made, away went Claudio enraged; swore +he would meet her, as he was appointed, next morning +at the temple, and there, before the whole +congregation, shame her with what he saw o'er night +and send her home again without a husband. + + + +First Watchman +We charge you, in the prince's name, stand! + + + +Second Watchman +Call up the right master constable. We have here +recovered the most dangerous piece of lechery that +ever was known in the commonwealth. + + + +First Watchman +And one Deformed is one of them: I know him; a' +wears a lock. + + + +CONRADE +Masters, masters,-- + + + +Second Watchman +You'll be made bring Deformed forth, I warrant you. + + + +CONRADE +Masters,-- + + + +First Watchman +Never speak: we charge you let us obey you to go with us. + + + +BORACHIO +We are like to prove a goodly commodity, being taken +up of these men's bills. + + + +CONRADE +A commodity in question, I warrant you. Come, we'll obey you. + + + +Exeunt + + +SCENE IV. HERO's apartment. +Enter HERO, MARGARET, and URSULA + + +HERO +Good Ursula, wake my cousin Beatrice, and desire +her to rise. + + + +URSULA +I will, lady. + + + +HERO +And bid her come hither. + + + +URSULA +Well. + + + +Exit + + +MARGARET +Troth, I think your other rabato were better. + + + +HERO +No, pray thee, good Meg, I'll wear this. + + + +MARGARET +By my troth, 's not so good; and I warrant your +cousin will say so. + + + +HERO +My cousin's a fool, and thou art another: I'll wear +none but this. + + + +MARGARET +I like the new tire within excellently, if the hair +were a thought browner; and your gown's a most rare +fashion, i' faith. I saw the Duchess of Milan's +gown that they praise so. + + + +HERO +O, that exceeds, they say. + + + +MARGARET +By my troth, 's but a night-gown in respect of +yours: cloth o' gold, and cuts, and laced with +silver, set with pearls, down sleeves, side sleeves, +and skirts, round underborne with a bluish tinsel: +but for a fine, quaint, graceful and excellent +fashion, yours is worth ten on 't. + + + +HERO +God give me joy to wear it! for my heart is +exceeding heavy. + + + +MARGARET +'Twill be heavier soon by the weight of a man. + + + +HERO +Fie upon thee! art not ashamed? + + + +MARGARET +Of what, lady? of speaking honourably? Is not +marriage honourable in a beggar? Is not your lord +honourable without marriage? I think you would have +me say, 'saving your reverence, a husband:' and bad +thinking do not wrest true speaking, I'll offend +nobody: is there any harm in 'the heavier for a +husband'? None, I think, and it be the right husband +and the right wife; otherwise 'tis light, and not +heavy: ask my Lady Beatrice else; here she comes. + + + +Enter BEATRICE + + +HERO +Good morrow, coz. + + + +BEATRICE +Good morrow, sweet Hero. + + + +HERO +Why how now? do you speak in the sick tune? + + + +BEATRICE +I am out of all other tune, methinks. + + + +MARGARET +Clap's into 'Light o' love;' that goes without a +burden: do you sing it, and I'll dance it. + + + +BEATRICE +Ye light o' love, with your heels! then, if your +husband have stables enough, you'll see he shall +lack no barns. + + + +MARGARET +O illegitimate construction! I scorn that with my heels. + + + +BEATRICE +'Tis almost five o'clock, cousin; tis time you were +ready. By my troth, I am exceeding ill: heigh-ho! + + + +MARGARET +For a hawk, a horse, or a husband? + + + +BEATRICE +For the letter that begins them all, H. + + + +MARGARET +Well, and you be not turned Turk, there's no more +sailing by the star. + + + +BEATRICE +What means the fool, trow? + + + +MARGARET +Nothing I; but God send every one their heart's desire! + + + +HERO +These gloves the count sent me; they are an +excellent perfume. + + + +BEATRICE +I am stuffed, cousin; I cannot smell. + + + +MARGARET +A maid, and stuffed! there's goodly catching of cold. + + + +BEATRICE +O, God help me! God help me! how long have you +professed apprehension? + + + +MARGARET +Even since you left it. Doth not my wit become me rarely? + + + +BEATRICE +It is not seen enough, you should wear it in your +cap. By my troth, I am sick. + + + +MARGARET +Get you some of this distilled Carduus Benedictus, +and lay it to your heart: it is the only thing for a qualm. + + + +HERO +There thou prickest her with a thistle. + + + +BEATRICE +Benedictus! why Benedictus? you have some moral in +this Benedictus. + + + +MARGARET +Moral! no, by my troth, I have no moral meaning; I +meant, plain holy-thistle. You may think perchance +that I think you are in love: nay, by'r lady, I am +not such a fool to think what I list, nor I list +not to think what I can, nor indeed I cannot think, +if I would think my heart out of thinking, that you +are in love or that you will be in love or that you +can be in love. Yet Benedick was such another, and +now is he become a man: he swore he would never +marry, and yet now, in despite of his heart, he eats +his meat without grudging: and how you may be +converted I know not, but methinks you look with +your eyes as other women do. + + + +BEATRICE +What pace is this that thy tongue keeps? + + + +MARGARET +Not a false gallop. + + + +Re-enter URSULA + + +URSULA +Madam, withdraw: the prince, the count, Signior +Benedick, Don John, and all the gallants of the +town, are come to fetch you to church. + + + +HERO +Help to dress me, good coz, good Meg, good Ursula. + + + +Exeunt + + +SCENE V. Another room in LEONATO'S house. +Enter LEONATO, with DOGBERRY and VERGES + + +LEONATO +What would you with me, honest neighbour? + + + +DOGBERRY +Marry, sir, I would have some confidence with you +that decerns you nearly. + + + +LEONATO +Brief, I pray you; for you see it is a busy time with me. + + + +DOGBERRY +Marry, this it is, sir. + + + +VERGES +Yes, in truth it is, sir. + + + +LEONATO +What is it, my good friends? + + + +DOGBERRY +Goodman Verges, sir, speaks a little off the +matter: an old man, sir, and his wits are not so +blunt as, God help, I would desire they were; but, +in faith, honest as the skin between his brows. + + + +VERGES +Yes, I thank God I am as honest as any man living +that is an old man and no honester than I. + + + +DOGBERRY +Comparisons are odorous: palabras, neighbour Verges. + + + +LEONATO +Neighbours, you are tedious. + + + +DOGBERRY +It pleases your worship to say so, but we are the +poor duke's officers; but truly, for mine own part, +if I were as tedious as a king, I could find it in +my heart to bestow it all of your worship. + + + +LEONATO +All thy tediousness on me, ah? + + + +DOGBERRY +Yea, an 'twere a thousand pound more than 'tis; for +I hear as good exclamation on your worship as of any +man in the city; and though I be but a poor man, I +am glad to hear it. + + + +VERGES +And so am I. + + + +LEONATO +I would fain know what you have to say. + + + +VERGES +Marry, sir, our watch to-night, excepting your +worship's presence, ha' ta'en a couple of as arrant +knaves as any in Messina. + + + +DOGBERRY +A good old man, sir; he will be talking: as they +say, when the age is in, the wit is out: God help +us! it is a world to see. Well said, i' faith, +neighbour Verges: well, God's a good man; an two men +ride of a horse, one must ride behind. An honest +soul, i' faith, sir; by my troth he is, as ever +broke bread; but God is to be worshipped; all men +are not alike; alas, good neighbour! + + + +LEONATO +Indeed, neighbour, he comes too short of you. + + + +DOGBERRY +Gifts that God gives. + + + +LEONATO +I must leave you. + + + +DOGBERRY +One word, sir: our watch, sir, have indeed +comprehended two aspicious persons, and we would +have them this morning examined before your worship. + + + +LEONATO +Take their examination yourself and bring it me: I +am now in great haste, as it may appear unto you. + + + +DOGBERRY +It shall be suffigance. + + + +LEONATO +Drink some wine ere you go: fare you well. + + + +Enter a Messenger + + +Messenger +My lord, they stay for you to give your daughter to +her husband. + + + +LEONATO +I'll wait upon them: I am ready. + + + +Exeunt LEONATO and Messenger + + +DOGBERRY +Go, good partner, go, get you to Francis Seacole; +bid him bring his pen and inkhorn to the gaol: we +are now to examination these men. + + + +VERGES +And we must do it wisely. + + + +DOGBERRY +We will spare for no wit, I warrant you; here's +that shall drive some of them to a non-come: only +get the learned writer to set down our +excommunication and meet me at the gaol. + + + +Exeunt + + + + +ACT IV + +SCENE I. A church. +Enter DON PEDRO, DON JOHN, LEONATO, FRIAR FRANCIS, +CLAUDIO, BENEDICK, HERO, BEATRICE, and Attendants + + +LEONATO +Come, Friar Francis, be brief; only to the plain +form of marriage, and you shall recount their +particular duties afterwards. + + + +FRIAR FRANCIS +You come hither, my lord, to marry this lady. + + + +CLAUDIO +No. + + + +LEONATO +To be married to her: friar, you come to marry her. + + + +FRIAR FRANCIS +Lady, you come hither to be married to this count. + + + +HERO +I do. + + + +FRIAR FRANCIS +If either of you know any inward impediment why you +should not be conjoined, charge you, on your souls, +to utter it. + + + +CLAUDIO +Know you any, Hero? + + + +HERO +None, my lord. + + + +FRIAR FRANCIS +Know you any, count? + + + +LEONATO +I dare make his answer, none. + + + +CLAUDIO +O, what men dare do! what men may do! what men daily +do, not knowing what they do! + + + +BENEDICK +How now! interjections? Why, then, some be of +laughing, as, ah, ha, he! + + + +CLAUDIO +Stand thee by, friar. Father, by your leave: +Will you with free and unconstrained soul +Give me this maid, your daughter? + + + +LEONATO +As freely, son, as God did give her me. + + + +CLAUDIO +And what have I to give you back, whose worth +May counterpoise this rich and precious gift? + + + +DON PEDRO +Nothing, unless you render her again. + + + +CLAUDIO +Sweet prince, you learn me noble thankfulness. +There, Leonato, take her back again: +Give not this rotten orange to your friend; +She's but the sign and semblance of her honour. +Behold how like a maid she blushes here! +O, what authority and show of truth +Can cunning sin cover itself withal! +Comes not that blood as modest evidence +To witness simple virtue? Would you not swear, +All you that see her, that she were a maid, +By these exterior shows? But she is none: +She knows the heat of a luxurious bed; +Her blush is guiltiness, not modesty. + + + +LEONATO +What do you mean, my lord? + + + +CLAUDIO +Not to be married, +Not to knit my soul to an approved wanton. + + + +LEONATO +Dear my lord, if you, in your own proof, +Have vanquish'd the resistance of her youth, +And made defeat of her virginity,-- + + + +CLAUDIO +I know what you would say: if I have known her, +You will say she did embrace me as a husband, +And so extenuate the 'forehand sin: +No, Leonato, +I never tempted her with word too large; +But, as a brother to his sister, show'd +Bashful sincerity and comely love. + + + +HERO +And seem'd I ever otherwise to you? + + + +CLAUDIO +Out on thee! Seeming! I will write against it: +You seem to me as Dian in her orb, +As chaste as is the bud ere it be blown; +But you are more intemperate in your blood +Than Venus, or those pamper'd animals +That rage in savage sensuality. + + + +HERO +Is my lord well, that he doth speak so wide? + + + +LEONATO +Sweet prince, why speak not you? + + + +DON PEDRO +What should I speak? +I stand dishonour'd, that have gone about +To link my dear friend to a common stale. + + + +LEONATO +Are these things spoken, or do I but dream? + + + +DON JOHN +Sir, they are spoken, and these things are true. + + + +BENEDICK +This looks not like a nuptial. + + + +HERO +True! O God! + + + +CLAUDIO +Leonato, stand I here? +Is this the prince? is this the prince's brother? +Is this face Hero's? are our eyes our own? + + + +LEONATO +All this is so: but what of this, my lord? + + + +CLAUDIO +Let me but move one question to your daughter; +And, by that fatherly and kindly power +That you have in her, bid her answer truly. + + + +LEONATO +I charge thee do so, as thou art my child. + + + +HERO +O, God defend me! how am I beset! +What kind of catechising call you this? + + + +CLAUDIO +To make you answer truly to your name. + + + +HERO +Is it not Hero? Who can blot that name +With any just reproach? + + + +CLAUDIO +Marry, that can Hero; +Hero itself can blot out Hero's virtue. +What man was he talk'd with you yesternight +Out at your window betwixt twelve and one? +Now, if you are a maid, answer to this. + + + +HERO +I talk'd with no man at that hour, my lord. + + + +DON PEDRO +Why, then are you no maiden. Leonato, +I am sorry you must hear: upon mine honour, +Myself, my brother and this grieved count +Did see her, hear her, at that hour last night +Talk with a ruffian at her chamber-window +Who hath indeed, most like a liberal villain, +Confess'd the vile encounters they have had +A thousand times in secret. + + + +DON JOHN +Fie, fie! they are not to be named, my lord, +Not to be spoke of; +There is not chastity enough in language +Without offence to utter them. Thus, pretty lady, +I am sorry for thy much misgovernment. + + + +CLAUDIO +O Hero, what a Hero hadst thou been, +If half thy outward graces had been placed +About thy thoughts and counsels of thy heart! +But fare thee well, most foul, most fair! farewell, +Thou pure impiety and impious purity! +For thee I'll lock up all the gates of love, +And on my eyelids shall conjecture hang, +To turn all beauty into thoughts of harm, +And never shall it more be gracious. + + + +LEONATO +Hath no man's dagger here a point for me? + + + +HERO swoons + + +BEATRICE +Why, how now, cousin! wherefore sink you down? + + + +DON JOHN +Come, let us go. These things, come thus to light, +Smother her spirits up. + + + +Exeunt DON PEDRO, DON JOHN, and CLAUDIO + + +BENEDICK +How doth the lady? + + + +BEATRICE +Dead, I think. Help, uncle! +Hero! why, Hero! Uncle! Signior Benedick! Friar! + + + +LEONATO +O Fate! take not away thy heavy hand. +Death is the fairest cover for her shame +That may be wish'd for. + + + +BEATRICE +How now, cousin Hero! + + + +FRIAR FRANCIS +Have comfort, lady. + + + +LEONATO +Dost thou look up? + + + +FRIAR FRANCIS +Yea, wherefore should she not? + + + +LEONATO +Wherefore! Why, doth not every earthly thing +Cry shame upon her? Could she here deny +The story that is printed in her blood? +Do not live, Hero; do not ope thine eyes: +For, did I think thou wouldst not quickly die, +Thought I thy spirits were stronger than thy shames, +Myself would, on the rearward of reproaches, +Strike at thy life. Grieved I, I had but one? +Chid I for that at frugal nature's frame? +O, one too much by thee! Why had I one? +Why ever wast thou lovely in my eyes? +Why had I not with charitable hand +Took up a beggar's issue at my gates, +Who smirch'd thus and mired with infamy, +I might have said 'No part of it is mine; +This shame derives itself from unknown loins'? +But mine and mine I loved and mine I praised +And mine that I was proud on, mine so much +That I myself was to myself not mine, +Valuing of her,--why, she, O, she is fallen +Into a pit of ink, that the wide sea +Hath drops too few to wash her clean again +And salt too little which may season give +To her foul-tainted flesh! + + + +BENEDICK +Sir, sir, be patient. +For my part, I am so attired in wonder, +I know not what to say. + + + +BEATRICE +O, on my soul, my cousin is belied! + + + +BENEDICK +Lady, were you her bedfellow last night? + + + +BEATRICE +No, truly not; although, until last night, +I have this twelvemonth been her bedfellow. + + + +LEONATO +Confirm'd, confirm'd! O, that is stronger made +Which was before barr'd up with ribs of iron! +Would the two princes lie, and Claudio lie, +Who loved her so, that, speaking of her foulness, +Wash'd it with tears? Hence from her! let her die. + + + +FRIAR FRANCIS +Hear me a little; for I have only been +Silent so long and given way unto +This course of fortune +By noting of the lady. I have mark'd +A thousand blushing apparitions +To start into her face, a thousand innocent shames +In angel whiteness beat away those blushes; +And in her eye there hath appear'd a fire, +To burn the errors that these princes hold +Against her maiden truth. Call me a fool; +Trust not my reading nor my observations, +Which with experimental seal doth warrant +The tenor of my book; trust not my age, +My reverence, calling, nor divinity, +If this sweet lady lie not guiltless here +Under some biting error. + + + +LEONATO +Friar, it cannot be. +Thou seest that all the grace that she hath left +Is that she will not add to her damnation +A sin of perjury; she not denies it: +Why seek'st thou then to cover with excuse +That which appears in proper nakedness? + + + +FRIAR FRANCIS +Lady, what man is he you are accused of? + + + +HERO +They know that do accuse me; I know none: +If I know more of any man alive +Than that which maiden modesty doth warrant, +Let all my sins lack mercy! O my father, +Prove you that any man with me conversed +At hours unmeet, or that I yesternight +Maintain'd the change of words with any creature, +Refuse me, hate me, torture me to death! + + + +FRIAR FRANCIS +There is some strange misprision in the princes. + + + +BENEDICK +Two of them have the very bent of honour; +And if their wisdoms be misled in this, +The practise of it lives in John the bastard, +Whose spirits toil in frame of villanies. + + + +LEONATO +I know not. If they speak but truth of her, +These hands shall tear her; if they wrong her honour, +The proudest of them shall well hear of it. +Time hath not yet so dried this blood of mine, +Nor age so eat up my invention, +Nor fortune made such havoc of my means, +Nor my bad life reft me so much of friends, +But they shall find, awaked in such a kind, +Both strength of limb and policy of mind, +Ability in means and choice of friends, +To quit me of them throughly. + + + +FRIAR FRANCIS +Pause awhile, +And let my counsel sway you in this case. +Your daughter here the princes left for dead: +Let her awhile be secretly kept in, +And publish it that she is dead indeed; +Maintain a mourning ostentation +And on your family's old monument +Hang mournful epitaphs and do all rites +That appertain unto a burial. + + + +LEONATO +What shall become of this? what will this do? + + + +FRIAR FRANCIS +Marry, this well carried shall on her behalf +Change slander to remorse; that is some good: +But not for that dream I on this strange course, +But on this travail look for greater birth. +She dying, as it must so be maintain'd, +Upon the instant that she was accused, +Shall be lamented, pitied and excused +Of every hearer: for it so falls out +That what we have we prize not to the worth +Whiles we enjoy it, but being lack'd and lost, +Why, then we rack the value, then we find +The virtue that possession would not show us +Whiles it was ours. So will it fare with Claudio: +When he shall hear she died upon his words, +The idea of her life shall sweetly creep +Into his study of imagination, +And every lovely organ of her life +Shall come apparell'd in more precious habit, +More moving-delicate and full of life, +Into the eye and prospect of his soul, +Than when she lived indeed; then shall he mourn, +If ever love had interest in his liver, +And wish he had not so accused her, +No, though he thought his accusation true. +Let this be so, and doubt not but success +Will fashion the event in better shape +Than I can lay it down in likelihood. +But if all aim but this be levell'd false, +The supposition of the lady's death +Will quench the wonder of her infamy: +And if it sort not well, you may conceal her, +As best befits her wounded reputation, +In some reclusive and religious life, +Out of all eyes, tongues, minds and injuries. + + + +BENEDICK +Signior Leonato, let the friar advise you: +And though you know my inwardness and love +Is very much unto the prince and Claudio, +Yet, by mine honour, I will deal in this +As secretly and justly as your soul +Should with your body. + + + +LEONATO +Being that I flow in grief, +The smallest twine may lead me. + + + +FRIAR FRANCIS +'Tis well consented: presently away; +For to strange sores strangely they strain the cure. +Come, lady, die to live: this wedding-day +Perhaps is but prolong'd: have patience and endure. + + + +Exeunt all but BENEDICK and BEATRICE + + +BENEDICK +Lady Beatrice, have you wept all this while? + + + +BEATRICE +Yea, and I will weep a while longer. + + + +BENEDICK +I will not desire that. + + + +BEATRICE +You have no reason; I do it freely. + + + +BENEDICK +Surely I do believe your fair cousin is wronged. + + + +BEATRICE +Ah, how much might the man deserve of me that would right her! + + + +BENEDICK +Is there any way to show such friendship? + + + +BEATRICE +A very even way, but no such friend. + + + +BENEDICK +May a man do it? + + + +BEATRICE +It is a man's office, but not yours. + + + +BENEDICK +I do love nothing in the world so well as you: is +not that strange? + + + +BEATRICE +As strange as the thing I know not. It were as +possible for me to say I loved nothing so well as +you: but believe me not; and yet I lie not; I +confess nothing, nor I deny nothing. I am sorry for my cousin. + + + +BENEDICK +By my sword, Beatrice, thou lovest me. + + + +BEATRICE +Do not swear, and eat it. + + + +BENEDICK +I will swear by it that you love me; and I will make +him eat it that says I love not you. + + + +BEATRICE +Will you not eat your word? + + + +BENEDICK +With no sauce that can be devised to it. I protest +I love thee. + + + +BEATRICE +Why, then, God forgive me! + + + +BENEDICK +What offence, sweet Beatrice? + + + +BEATRICE +You have stayed me in a happy hour: I was about to +protest I loved you. + + + +BENEDICK +And do it with all thy heart. + + + +BEATRICE +I love you with so much of my heart that none is +left to protest. + + + +BENEDICK +Come, bid me do any thing for thee. + + + +BEATRICE +Kill Claudio. + + + +BENEDICK +Ha! not for the wide world. + + + +BEATRICE +You kill me to deny it. Farewell. + + + +BENEDICK +Tarry, sweet Beatrice. + + + +BEATRICE +I am gone, though I am here: there is no love in +you: nay, I pray you, let me go. + + + +BENEDICK +Beatrice,-- + + + +BEATRICE +In faith, I will go. + + + +BENEDICK +We'll be friends first. + + + +BEATRICE +You dare easier be friends with me than fight with mine enemy. + + + +BENEDICK +Is Claudio thine enemy? + + + +BEATRICE +Is he not approved in the height a villain, that +hath slandered, scorned, dishonoured my kinswoman? O +that I were a man! What, bear her in hand until they +come to take hands; and then, with public +accusation, uncovered slander, unmitigated rancour, +--O God, that I were a man! I would eat his heart +in the market-place. + + + +BENEDICK +Hear me, Beatrice,-- + + + +BEATRICE +Talk with a man out at a window! A proper saying! + + + +BENEDICK +Nay, but, Beatrice,-- + + + +BEATRICE +Sweet Hero! She is wronged, she is slandered, she is undone. + + + +BENEDICK +Beat-- + + + +BEATRICE +Princes and counties! Surely, a princely testimony, +a goodly count, Count Comfect; a sweet gallant, +surely! O that I were a man for his sake! or that I +had any friend would be a man for my sake! But +manhood is melted into courtesies, valour into +compliment, and men are only turned into tongue, and +trim ones too: he is now as valiant as Hercules +that only tells a lie and swears it. I cannot be a +man with wishing, therefore I will die a woman with grieving. + + + +BENEDICK +Tarry, good Beatrice. By this hand, I love thee. + + + +BEATRICE +Use it for my love some other way than swearing by it. + + + +BENEDICK +Think you in your soul the Count Claudio hath wronged Hero? + + + +BEATRICE +Yea, as sure as I have a thought or a soul. + + + +BENEDICK +Enough, I am engaged; I will challenge him. I will +kiss your hand, and so I leave you. By this hand, +Claudio shall render me a dear account. As you +hear of me, so think of me. Go, comfort your +cousin: I must say she is dead: and so, farewell. + + + +Exeunt + + +SCENE II. A prison. +Enter DOGBERRY, VERGES, and Sexton, in gowns; and +the Watch, with CONRADE and BORACHIO + + +DOGBERRY +Is our whole dissembly appeared? + + + +VERGES +O, a stool and a cushion for the sexton. + + + +Sexton +Which be the malefactors? + + + +DOGBERRY +Marry, that am I and my partner. + + + +VERGES +Nay, that's certain; we have the exhibition to examine. + + + +Sexton +But which are the offenders that are to be +examined? let them come before master constable. + + + +DOGBERRY +Yea, marry, let them come before me. What is your +name, friend? + + + +BORACHIO +Borachio. + + + +DOGBERRY +Pray, write down, Borachio. Yours, sirrah? + + + +CONRADE +I am a gentleman, sir, and my name is Conrade. + + + +DOGBERRY +Write down, master gentleman Conrade. Masters, do +you serve God? + + + +CONRADE +BORACHIO +Yea, sir, we hope. + + + +DOGBERRY +Write down, that they hope they serve God: and +write God first; for God defend but God should go +before such villains! Masters, it is proved already +that you are little better than false knaves; and it +will go near to be thought so shortly. How answer +you for yourselves? + + + +CONRADE +Marry, sir, we say we are none. + + + +DOGBERRY +A marvellous witty fellow, I assure you: but I +will go about with him. Come you hither, sirrah; a +word in your ear: sir, I say to you, it is thought +you are false knaves. + + + +BORACHIO +Sir, I say to you we are none. + + + +DOGBERRY +Well, stand aside. 'Fore God, they are both in a +tale. Have you writ down, that they are none? + + + +Sexton +Master constable, you go not the way to examine: +you must call forth the watch that are their accusers. + + + +DOGBERRY +Yea, marry, that's the eftest way. Let the watch +come forth. Masters, I charge you, in the prince's +name, accuse these men. + + + +First Watchman +This man said, sir, that Don John, the prince's +brother, was a villain. + + + +DOGBERRY +Write down Prince John a villain. Why, this is flat +perjury, to call a prince's brother villain. + + + +BORACHIO +Master constable,-- + + + +DOGBERRY +Pray thee, fellow, peace: I do not like thy look, +I promise thee. + + + +Sexton +What heard you him say else? + + + +Second Watchman +Marry, that he had received a thousand ducats of +Don John for accusing the Lady Hero wrongfully. + + + +DOGBERRY +Flat burglary as ever was committed. + + + +VERGES +Yea, by mass, that it is. + + + +Sexton +What else, fellow? + + + +First Watchman +And that Count Claudio did mean, upon his words, to +disgrace Hero before the whole assembly. and not marry her. + + + +DOGBERRY +O villain! thou wilt be condemned into everlasting +redemption for this. + + + +Sexton +What else? + + + +Watchman +This is all. + + + +Sexton +And this is more, masters, than you can deny. +Prince John is this morning secretly stolen away; +Hero was in this manner accused, in this very manner +refused, and upon the grief of this suddenly died. +Master constable, let these men be bound, and +brought to Leonato's: I will go before and show +him their examination. + + + +Exit + + +DOGBERRY +Come, let them be opinioned. + + + +VERGES +Let them be in the hands-- + + + +CONRADE +Off, coxcomb! + + + +DOGBERRY +God's my life, where's the sexton? let him write +down the prince's officer coxcomb. Come, bind them. +Thou naughty varlet! + + + +CONRADE +Away! you are an ass, you are an ass. + + + +DOGBERRY +Dost thou not suspect my place? dost thou not +suspect my years? O that he were here to write me +down an ass! But, masters, remember that I am an +ass; though it be not written down, yet forget not +that I am an ass. No, thou villain, thou art full of +piety, as shall be proved upon thee by good witness. +I am a wise fellow, and, which is more, an officer, +and, which is more, a householder, and, which is +more, as pretty a piece of flesh as any is in +Messina, and one that knows the law, go to; and a +rich fellow enough, go to; and a fellow that hath +had losses, and one that hath two gowns and every +thing handsome about him. Bring him away. O that +I had been writ down an ass! + + + +Exeunt + + + + +ACT V + +SCENE I. Before LEONATO'S house. +Enter LEONATO and ANTONIO + + +ANTONIO +If you go on thus, you will kill yourself: +And 'tis not wisdom thus to second grief +Against yourself. + + + +LEONATO +I pray thee, cease thy counsel, +Which falls into mine ears as profitless +As water in a sieve: give not me counsel; +Nor let no comforter delight mine ear +But such a one whose wrongs do suit with mine. +Bring me a father that so loved his child, +Whose joy of her is overwhelm'd like mine, +And bid him speak of patience; +Measure his woe the length and breadth of mine +And let it answer every strain for strain, +As thus for thus and such a grief for such, +In every lineament, branch, shape, and form: +If such a one will smile and stroke his beard, +Bid sorrow wag, cry 'hem!' when he should groan, +Patch grief with proverbs, make misfortune drunk +With candle-wasters; bring him yet to me, +And I of him will gather patience. +But there is no such man: for, brother, men +Can counsel and speak comfort to that grief +Which they themselves not feel; but, tasting it, +Their counsel turns to passion, which before +Would give preceptial medicine to rage, +Fetter strong madness in a silken thread, +Charm ache with air and agony with words: +No, no; 'tis all men's office to speak patience +To those that wring under the load of sorrow, +But no man's virtue nor sufficiency +To be so moral when he shall endure +The like himself. Therefore give me no counsel: +My griefs cry louder than advertisement. + + + +ANTONIO +Therein do men from children nothing differ. + + + +LEONATO +I pray thee, peace. I will be flesh and blood; +For there was never yet philosopher +That could endure the toothache patiently, +However they have writ the style of gods +And made a push at chance and sufferance. + + + +ANTONIO +Yet bend not all the harm upon yourself; +Make those that do offend you suffer too. + + + +LEONATO +There thou speak'st reason: nay, I will do so. +My soul doth tell me Hero is belied; +And that shall Claudio know; so shall the prince +And all of them that thus dishonour her. + + + +ANTONIO +Here comes the prince and Claudio hastily. + + + +Enter DON PEDRO and CLAUDIO + + +DON PEDRO +Good den, good den. + + + +CLAUDIO +Good day to both of you. + + + +LEONATO +Hear you. my lords,-- + + + +DON PEDRO +We have some haste, Leonato. + + + +LEONATO +Some haste, my lord! well, fare you well, my lord: +Are you so hasty now? well, all is one. + + + +DON PEDRO +Nay, do not quarrel with us, good old man. + + + +ANTONIO +If he could right himself with quarreling, +Some of us would lie low. + + + +CLAUDIO +Who wrongs him? + + + +LEONATO +Marry, thou dost wrong me; thou dissembler, thou:-- +Nay, never lay thy hand upon thy sword; +I fear thee not. + + + +CLAUDIO +Marry, beshrew my hand, +If it should give your age such cause of fear: +In faith, my hand meant nothing to my sword. + + + +LEONATO +Tush, tush, man; never fleer and jest at me: +I speak not like a dotard nor a fool, +As under privilege of age to brag +What I have done being young, or what would do +Were I not old. Know, Claudio, to thy head, +Thou hast so wrong'd mine innocent child and me +That I am forced to lay my reverence by +And, with grey hairs and bruise of many days, +Do challenge thee to trial of a man. +I say thou hast belied mine innocent child; +Thy slander hath gone through and through her heart, +And she lies buried with her ancestors; +O, in a tomb where never scandal slept, +Save this of hers, framed by thy villany! + + + +CLAUDIO +My villany? + + + +LEONATO +Thine, Claudio; thine, I say. + + + +DON PEDRO +You say not right, old man. + + + +LEONATO +My lord, my lord, +I'll prove it on his body, if he dare, +Despite his nice fence and his active practise, +His May of youth and bloom of lustihood. + + + +CLAUDIO +Away! I will not have to do with you. + + + +LEONATO +Canst thou so daff me? Thou hast kill'd my child: +If thou kill'st me, boy, thou shalt kill a man. + + + +ANTONIO +He shall kill two of us, and men indeed: +But that's no matter; let him kill one first; +Win me and wear me; let him answer me. +Come, follow me, boy; come, sir boy, come, follow me: +Sir boy, I'll whip you from your foining fence; +Nay, as I am a gentleman, I will. + + + +LEONATO +Brother,-- + + + +ANTONIO +Content yourself. God knows I loved my niece; +And she is dead, slander'd to death by villains, +That dare as well answer a man indeed +As I dare take a serpent by the tongue: +Boys, apes, braggarts, Jacks, milksops! + + + +LEONATO +Brother Antony,-- + + + +ANTONIO +Hold you content. What, man! I know them, yea, +And what they weigh, even to the utmost scruple,-- +Scrambling, out-facing, fashion-monging boys, +That lie and cog and flout, deprave and slander, +Go anticly, show outward hideousness, +And speak off half a dozen dangerous words, +How they might hurt their enemies, if they durst; +And this is all. + + + +LEONATO +But, brother Antony,-- + + + +ANTONIO +Come, 'tis no matter: +Do not you meddle; let me deal in this. + + + +DON PEDRO +Gentlemen both, we will not wake your patience. +My heart is sorry for your daughter's death: +But, on my honour, she was charged with nothing +But what was true and very full of proof. + + + +LEONATO +My lord, my lord,-- + + + +DON PEDRO +I will not hear you. + + + +LEONATO +No? Come, brother; away! I will be heard. + + + +ANTONIO +And shall, or some of us will smart for it. + + + +Exeunt LEONATO and ANTONIO + + +DON PEDRO +See, see; here comes the man we went to seek. + + + +Enter BENEDICK + + +CLAUDIO +Now, signior, what news? + + + +BENEDICK +Good day, my lord. + + + +DON PEDRO +Welcome, signior: you are almost come to part +almost a fray. + + + +CLAUDIO +We had like to have had our two noses snapped off +with two old men without teeth. + + + +DON PEDRO +Leonato and his brother. What thinkest thou? Had +we fought, I doubt we should have been too young for them. + + + +BENEDICK +In a false quarrel there is no true valour. I came +to seek you both. + + + +CLAUDIO +We have been up and down to seek thee; for we are +high-proof melancholy and would fain have it beaten +away. Wilt thou use thy wit? + + + +BENEDICK +It is in my scabbard: shall I draw it? + + + +DON PEDRO +Dost thou wear thy wit by thy side? + + + +CLAUDIO +Never any did so, though very many have been beside +their wit. I will bid thee draw, as we do the +minstrels; draw, to pleasure us. + + + +DON PEDRO +As I am an honest man, he looks pale. Art thou +sick, or angry? + + + +CLAUDIO +What, courage, man! What though care killed a cat, +thou hast mettle enough in thee to kill care. + + + +BENEDICK +Sir, I shall meet your wit in the career, and you +charge it against me. I pray you choose another subject. + + + +CLAUDIO +Nay, then, give him another staff: this last was +broke cross. + + + +DON PEDRO +By this light, he changes more and more: I think +he be angry indeed. + + + +CLAUDIO +If he be, he knows how to turn his girdle. + + + +BENEDICK +Shall I speak a word in your ear? + + + +CLAUDIO +God bless me from a challenge! + + + +BENEDICK +Aside to CLAUDIO You are a villain; I jest not: +I will make it good how you dare, with what you +dare, and when you dare. Do me right, or I will +protest your cowardice. You have killed a sweet +lady, and her death shall fall heavy on you. Let me +hear from you. + + + +CLAUDIO +Well, I will meet you, so I may have good cheer. + + + +DON PEDRO +What, a feast, a feast? + + + +CLAUDIO +I' faith, I thank him; he hath bid me to a calf's +head and a capon; the which if I do not carve most +curiously, say my knife's naught. Shall I not find +a woodcock too? + + + +BENEDICK +Sir, your wit ambles well; it goes easily. + + + +DON PEDRO +I'll tell thee how Beatrice praised thy wit the +other day. I said, thou hadst a fine wit: 'True,' +said she, 'a fine little one.' 'No,' said I, 'a +great wit:' 'Right,' says she, 'a great gross one.' +'Nay,' said I, 'a good wit:' 'Just,' said she, 'it +hurts nobody.' 'Nay,' said I, 'the gentleman +is wise:' 'Certain,' said she, 'a wise gentleman.' +'Nay,' said I, 'he hath the tongues:' 'That I +believe,' said she, 'for he swore a thing to me on +Monday night, which he forswore on Tuesday morning; +there's a double tongue; there's two tongues.' Thus +did she, an hour together, transshape thy particular +virtues: yet at last she concluded with a sigh, thou +wast the properest man in Italy. + + + +CLAUDIO +For the which she wept heartily and said she cared +not. + + + +DON PEDRO +Yea, that she did: but yet, for all that, an if she +did not hate him deadly, she would love him dearly: +the old man's daughter told us all. + + + +CLAUDIO +All, all; and, moreover, God saw him when he was +hid in the garden. + + + +DON PEDRO +But when shall we set the savage bull's horns on +the sensible Benedick's head? + + + +CLAUDIO +Yea, and text underneath, 'Here dwells Benedick the +married man'? + + + +BENEDICK +Fare you well, boy: you know my mind. I will leave +you now to your gossip-like humour: you break jests +as braggarts do their blades, which God be thanked, +hurt not. My lord, for your many courtesies I thank +you: I must discontinue your company: your brother +the bastard is fled from Messina: you have among +you killed a sweet and innocent lady. For my Lord +Lackbeard there, he and I shall meet: and, till +then, peace be with him. + + + +Exit + + +DON PEDRO +He is in earnest. + + + +CLAUDIO +In most profound earnest; and, I'll warrant you, for +the love of Beatrice. + + + +DON PEDRO +And hath challenged thee. + + + +CLAUDIO +Most sincerely. + + + +DON PEDRO +What a pretty thing man is when he goes in his +doublet and hose and leaves off his wit! + + + +CLAUDIO +He is then a giant to an ape; but then is an ape a +doctor to such a man. + + + +DON PEDRO +But, soft you, let me be: pluck up, my heart, and +be sad. Did he not say, my brother was fled? + + + +Enter DOGBERRY, VERGES, and the Watch, with CONRADE +and BORACHIO + + +DOGBERRY +Come you, sir: if justice cannot tame you, she +shall ne'er weigh more reasons in her balance: nay, +an you be a cursing hypocrite once, you must be looked to. + + + +DON PEDRO +How now? two of my brother's men bound! Borachio +one! + + + +CLAUDIO +Hearken after their offence, my lord. + + + +DON PEDRO +Officers, what offence have these men done? + + + +DOGBERRY +Marry, sir, they have committed false report; +moreover, they have spoken untruths; secondarily, +they are slanders; sixth and lastly, they have +belied a lady; thirdly, they have verified unjust +things; and, to conclude, they are lying knaves. + + + +DON PEDRO +First, I ask thee what they have done; thirdly, I +ask thee what's their offence; sixth and lastly, why +they are committed; and, to conclude, what you lay +to their charge. + + + +CLAUDIO +Rightly reasoned, and in his own division: and, by +my troth, there's one meaning well suited. + + + +DON PEDRO +Who have you offended, masters, that you are thus +bound to your answer? this learned constable is +too cunning to be understood: what's your offence? + + + +BORACHIO +Sweet prince, let me go no farther to mine answer: +do you hear me, and let this count kill me. I have +deceived even your very eyes: what your wisdoms +could not discover, these shallow fools have brought +to light: who in the night overheard me confessing +to this man how Don John your brother incensed me +to slander the Lady Hero, how you were brought into +the orchard and saw me court Margaret in Hero's +garments, how you disgraced her, when you should +marry her: my villany they have upon record; which +I had rather seal with my death than repeat over +to my shame. The lady is dead upon mine and my +master's false accusation; and, briefly, I desire +nothing but the reward of a villain. + + + +DON PEDRO +Runs not this speech like iron through your blood? + + + +CLAUDIO +I have drunk poison whiles he utter'd it. + + + +DON PEDRO +But did my brother set thee on to this? + + + +BORACHIO +Yea, and paid me richly for the practise of it. + + + +DON PEDRO +He is composed and framed of treachery: +And fled he is upon this villany. + + + +CLAUDIO +Sweet Hero! now thy image doth appear +In the rare semblance that I loved it first. + + + +DOGBERRY +Come, bring away the plaintiffs: by this time our +sexton hath reformed Signior Leonato of the matter: +and, masters, do not forget to specify, when time +and place shall serve, that I am an ass. + + + +VERGES +Here, here comes master Signior Leonato, and the +Sexton too. + + + +Re-enter LEONATO and ANTONIO, with the Sexton + + +LEONATO +Which is the villain? let me see his eyes, +That, when I note another man like him, +I may avoid him: which of these is he? + + + +BORACHIO +If you would know your wronger, look on me. + + + +LEONATO +Art thou the slave that with thy breath hast kill'd +Mine innocent child? + + + +BORACHIO +Yea, even I alone. + + + +LEONATO +No, not so, villain; thou beliest thyself: +Here stand a pair of honourable men; +A third is fled, that had a hand in it. +I thank you, princes, for my daughter's death: +Record it with your high and worthy deeds: +'Twas bravely done, if you bethink you of it. + + + +CLAUDIO +I know not how to pray your patience; +Yet I must speak. Choose your revenge yourself; +Impose me to what penance your invention +Can lay upon my sin: yet sinn'd I not +But in mistaking. + + + +DON PEDRO +By my soul, nor I: +And yet, to satisfy this good old man, +I would bend under any heavy weight +That he'll enjoin me to. + + + +LEONATO +I cannot bid you bid my daughter live; +That were impossible: but, I pray you both, +Possess the people in Messina here +How innocent she died; and if your love +Can labour ought in sad invention, +Hang her an epitaph upon her tomb +And sing it to her bones, sing it to-night: +To-morrow morning come you to my house, +And since you could not be my son-in-law, +Be yet my nephew: my brother hath a daughter, +Almost the copy of my child that's dead, +And she alone is heir to both of us: +Give her the right you should have given her cousin, +And so dies my revenge. + + + +CLAUDIO +O noble sir, +Your over-kindness doth wring tears from me! +I do embrace your offer; and dispose +For henceforth of poor Claudio. + + + +LEONATO +To-morrow then I will expect your coming; +To-night I take my leave. This naughty man +Shall face to face be brought to Margaret, +Who I believe was pack'd in all this wrong, +Hired to it by your brother. + + + +BORACHIO +No, by my soul, she was not, +Nor knew not what she did when she spoke to me, +But always hath been just and virtuous +In any thing that I do know by her. + + + +DOGBERRY +Moreover, sir, which indeed is not under white and +black, this plaintiff here, the offender, did call +me ass: I beseech you, let it be remembered in his +punishment. And also, the watch heard them talk of +one Deformed: they say be wears a key in his ear and +a lock hanging by it, and borrows money in God's +name, the which he hath used so long and never paid +that now men grow hard-hearted and will lend nothing +for God's sake: pray you, examine him upon that point. + + + +LEONATO +I thank thee for thy care and honest pains. + + + +DOGBERRY +Your worship speaks like a most thankful and +reverend youth; and I praise God for you. + + + +LEONATO +There's for thy pains. + + + +DOGBERRY +God save the foundation! + + + +LEONATO +Go, I discharge thee of thy prisoner, and I thank thee. + + + +DOGBERRY +I leave an arrant knave with your worship; which I +beseech your worship to correct yourself, for the +example of others. God keep your worship! I wish +your worship well; God restore you to health! I +humbly give you leave to depart; and if a merry +meeting may be wished, God prohibit it! Come, neighbour. + + + +Exeunt DOGBERRY and VERGES + + +LEONATO +Until to-morrow morning, lords, farewell. + + + +ANTONIO +Farewell, my lords: we look for you to-morrow. + + + +DON PEDRO +We will not fail. + + + +CLAUDIO +To-night I'll mourn with Hero. + + + +LEONATO +To the Watch Bring you these fellows on. We'll +talk with Margaret, +How her acquaintance grew with this lewd fellow. + + + +Exeunt, severally + + +SCENE II. LEONATO'S garden. +Enter BENEDICK and MARGARET, meeting + + +BENEDICK +Pray thee, sweet Mistress Margaret, deserve well at +my hands by helping me to the speech of Beatrice. + + + +MARGARET +Will you then write me a sonnet in praise of my beauty? + + + +BENEDICK +In so high a style, Margaret, that no man living +shall come over it; for, in most comely truth, thou +deservest it. + + + +MARGARET +To have no man come over me! why, shall I always +keep below stairs? + + + +BENEDICK +Thy wit is as quick as the greyhound's mouth; it catches. + + + +MARGARET +And yours as blunt as the fencer's foils, which hit, +but hurt not. + + + +BENEDICK +A most manly wit, Margaret; it will not hurt a +woman: and so, I pray thee, call Beatrice: I give +thee the bucklers. + + + +MARGARET +Give us the swords; we have bucklers of our own. + + + +BENEDICK +If you use them, Margaret, you must put in the +pikes with a vice; and they are dangerous weapons for maids. + + + +MARGARET +Well, I will call Beatrice to you, who I think hath legs. + + + +BENEDICK +And therefore will come. +Exit MARGARET +Sings +The god of love, +That sits above, +And knows me, and knows me, +How pitiful I deserve,-- +I mean in singing; but in loving, Leander the good +swimmer, Troilus the first employer of panders, and +a whole bookful of these quondam carpet-mangers, +whose names yet run smoothly in the even road of a +blank verse, why, they were never so truly turned +over and over as my poor self in love. Marry, I +cannot show it in rhyme; I have tried: I can find +out no rhyme to 'lady' but 'baby,' an innocent +rhyme; for 'scorn,' 'horn,' a hard rhyme; for, +'school,' 'fool,' a babbling rhyme; very ominous +endings: no, I was not born under a rhyming planet, +nor I cannot woo in festival terms. +Enter BEATRICE +Sweet Beatrice, wouldst thou come when I called thee? + + + +BEATRICE +Yea, signior, and depart when you bid me. + + + +BENEDICK +O, stay but till then! + + + +BEATRICE +'Then' is spoken; fare you well now: and yet, ere +I go, let me go with that I came; which is, with +knowing what hath passed between you and Claudio. + + + +BENEDICK +Only foul words; and thereupon I will kiss thee. + + + +BEATRICE +Foul words is but foul wind, and foul wind is but +foul breath, and foul breath is noisome; therefore I +will depart unkissed. + + + +BENEDICK +Thou hast frighted the word out of his right sense, +so forcible is thy wit. But I must tell thee +plainly, Claudio undergoes my challenge; and either +I must shortly hear from him, or I will subscribe +him a coward. And, I pray thee now, tell me for +which of my bad parts didst thou first fall in love with me? + + + +BEATRICE +For them all together; which maintained so politic +a state of evil that they will not admit any good +part to intermingle with them. But for which of my +good parts did you first suffer love for me? + + + +BENEDICK +Suffer love! a good epithet! I do suffer love +indeed, for I love thee against my will. + + + +BEATRICE +In spite of your heart, I think; alas, poor heart! +If you spite it for my sake, I will spite it for +yours; for I will never love that which my friend hates. + + + +BENEDICK +Thou and I are too wise to woo peaceably. + + + +BEATRICE +It appears not in this confession: there's not one +wise man among twenty that will praise himself. + + + +BENEDICK +An old, an old instance, Beatrice, that lived in +the lime of good neighbours. If a man do not erect +in this age his own tomb ere he dies, he shall live +no longer in monument than the bell rings and the +widow weeps. + + + +BEATRICE +And how long is that, think you? + + + +BENEDICK +Question: why, an hour in clamour and a quarter in +rheum: therefore is it most expedient for the +wise, if Don Worm, his conscience, find no +impediment to the contrary, to be the trumpet of his +own virtues, as I am to myself. So much for +praising myself, who, I myself will bear witness, is +praiseworthy: and now tell me, how doth your cousin? + + + +BEATRICE +Very ill. + + + +BENEDICK +And how do you? + + + +BEATRICE +Very ill too. + + + +BENEDICK +Serve God, love me and mend. There will I leave +you too, for here comes one in haste. + + + +Enter URSULA + + +URSULA +Madam, you must come to your uncle. Yonder's old +coil at home: it is proved my Lady Hero hath been +falsely accused, the prince and Claudio mightily +abused; and Don John is the author of all, who is +fed and gone. Will you come presently? + + + +BEATRICE +Will you go hear this news, signior? + + + +BENEDICK +I will live in thy heart, die in thy lap, and be +buried in thy eyes; and moreover I will go with +thee to thy uncle's. + + + +Exeunt + + +SCENE III. A church. +Enter DON PEDRO, CLAUDIO, and three or four +with tapers + + +CLAUDIO +Is this the monument of Leonato? + + + +Lord +It is, my lord. + + + +CLAUDIO +Reading out of a scroll +Done to death by slanderous tongues +Was the Hero that here lies: +Death, in guerdon of her wrongs, +Gives her fame which never dies. +So the life that died with shame +Lives in death with glorious fame. +Hang thou there upon the tomb, +Praising her when I am dumb. +Now, music, sound, and sing your solemn hymn. +SONG. +Pardon, goddess of the night, +Those that slew thy virgin knight; +For the which, with songs of woe, +Round about her tomb they go. +Midnight, assist our moan; +Help us to sigh and groan, +Heavily, heavily: +Graves, yawn and yield your dead, +Till death be uttered, +Heavily, heavily. + + + +CLAUDIO +Now, unto thy bones good night! +Yearly will I do this rite. + + + +DON PEDRO +Good morrow, masters; put your torches out: +The wolves have prey'd; and look, the gentle day, +Before the wheels of Phoebus, round about +Dapples the drowsy east with spots of grey. +Thanks to you all, and leave us: fare you well. + + + +CLAUDIO +Good morrow, masters: each his several way. + + + +DON PEDRO +Come, let us hence, and put on other weeds; +And then to Leonato's we will go. + + + +CLAUDIO +And Hymen now with luckier issue speed's +Than this for whom we render'd up this woe. + + + +Exeunt + + +SCENE IV. A room in LEONATO'S house. +Enter LEONATO, ANTONIO, BENEDICK, BEATRICE, +MARGARET, URSULA, FRIAR FRANCIS, and HERO + + +FRIAR FRANCIS +Did I not tell you she was innocent? + + + +LEONATO +So are the prince and Claudio, who accused her +Upon the error that you heard debated: +But Margaret was in some fault for this, +Although against her will, as it appears +In the true course of all the question. + + + +ANTONIO +Well, I am glad that all things sort so well. + + + +BENEDICK +And so am I, being else by faith enforced +To call young Claudio to a reckoning for it. + + + +LEONATO +Well, daughter, and you gentle-women all, +Withdraw into a chamber by yourselves, +And when I send for you, come hither mask'd. +Exeunt Ladies +The prince and Claudio promised by this hour +To visit me. You know your office, brother: +You must be father to your brother's daughter +And give her to young Claudio. + + + +ANTONIO +Which I will do with confirm'd countenance. + + + +BENEDICK +Friar, I must entreat your pains, I think. + + + +FRIAR FRANCIS +To do what, signior? + + + +BENEDICK +To bind me, or undo me; one of them. +Signior Leonato, truth it is, good signior, +Your niece regards me with an eye of favour. + + + +LEONATO +That eye my daughter lent her: 'tis most true. + + + +BENEDICK +And I do with an eye of love requite her. + + + +LEONATO +The sight whereof I think you had from me, +From Claudio and the prince: but what's your will? + + + +BENEDICK +Your answer, sir, is enigmatical: +But, for my will, my will is your good will +May stand with ours, this day to be conjoin'd +In the state of honourable marriage: +In which, good friar, I shall desire your help. + + + +LEONATO +My heart is with your liking. + + + +FRIAR FRANCIS +And my help. +Here comes the prince and Claudio. + + + +Enter DON PEDRO and CLAUDIO, and two or +three others + + +DON PEDRO +Good morrow to this fair assembly. + + + +LEONATO +Good morrow, prince; good morrow, Claudio: +We here attend you. Are you yet determined +To-day to marry with my brother's daughter? + + + +CLAUDIO +I'll hold my mind, were she an Ethiope. + + + +LEONATO +Call her forth, brother; here's the friar ready. + + + +Exit ANTONIO + + +DON PEDRO +Good morrow, Benedick. Why, what's the matter, +That you have such a February face, +So full of frost, of storm and cloudiness? + + + +CLAUDIO +I think he thinks upon the savage bull. +Tush, fear not, man; we'll tip thy horns with gold +And all Europa shall rejoice at thee, +As once Europa did at lusty Jove, +When he would play the noble beast in love. + + + +BENEDICK +Bull Jove, sir, had an amiable low; +And some such strange bull leap'd your father's cow, +And got a calf in that same noble feat +Much like to you, for you have just his bleat. + + + +CLAUDIO +For this I owe you: here comes other reckonings. +Re-enter ANTONIO, with the Ladies masked +Which is the lady I must seize upon? + + + +ANTONIO +This same is she, and I do give you her. + + + +CLAUDIO +Why, then she's mine. Sweet, let me see your face. + + + +LEONATO +No, that you shall not, till you take her hand +Before this friar and swear to marry her. + + + +CLAUDIO +Give me your hand: before this holy friar, +I am your husband, if you like of me. + + + +HERO +And when I lived, I was your other wife: +Unmasking +And when you loved, you were my other husband. + + + +CLAUDIO +Another Hero! + + + +HERO +Nothing certainer: +One Hero died defiled, but I do live, +And surely as I live, I am a maid. + + + +DON PEDRO +The former Hero! Hero that is dead! + + + +LEONATO +She died, my lord, but whiles her slander lived. + + + +FRIAR FRANCIS +All this amazement can I qualify: +When after that the holy rites are ended, +I'll tell you largely of fair Hero's death: +Meantime let wonder seem familiar, +And to the chapel let us presently. + + + +BENEDICK +Soft and fair, friar. Which is Beatrice? + + + +BEATRICE +Unmasking I answer to that name. What is your will? + + + +BENEDICK +Do not you love me? + + + +BEATRICE +Why, no; no more than reason. + + + +BENEDICK +Why, then your uncle and the prince and Claudio +Have been deceived; they swore you did. + + + +BEATRICE +Do not you love me? + + + +BENEDICK +Troth, no; no more than reason. + + + +BEATRICE +Why, then my cousin Margaret and Ursula +Are much deceived; for they did swear you did. + + + +BENEDICK +They swore that you were almost sick for me. + + + +BEATRICE +They swore that you were well-nigh dead for me. + + + +BENEDICK +'Tis no such matter. Then you do not love me? + + + +BEATRICE +No, truly, but in friendly recompense. + + + +LEONATO +Come, cousin, I am sure you love the gentleman. + + + +CLAUDIO +And I'll be sworn upon't that he loves her; +For here's a paper written in his hand, +A halting sonnet of his own pure brain, +Fashion'd to Beatrice. + + + +HERO +And here's another +Writ in my cousin's hand, stolen from her pocket, +Containing her affection unto Benedick. + + + +BENEDICK +A miracle! here's our own hands against our hearts. +Come, I will have thee; but, by this light, I take +thee for pity. + + + +BEATRICE +I would not deny you; but, by this good day, I yield +upon great persuasion; and partly to save your life, +for I was told you were in a consumption. + + + +BENEDICK +Peace! I will stop your mouth. + + + +Kissing her + + +DON PEDRO +How dost thou, Benedick, the married man? + + + +BENEDICK +I'll tell thee what, prince; a college of +wit-crackers cannot flout me out of my humour. Dost +thou think I care for a satire or an epigram? No: +if a man will be beaten with brains, a' shall wear +nothing handsome about him. In brief, since I do +purpose to marry, I will think nothing to any +purpose that the world can say against it; and +therefore never flout at me for what I have said +against it; for man is a giddy thing, and this is my +conclusion. For thy part, Claudio, I did think to +have beaten thee, but in that thou art like to be my +kinsman, live unbruised and love my cousin. + + + +CLAUDIO +I had well hoped thou wouldst have denied Beatrice, +that I might have cudgelled thee out of thy single +life, to make thee a double-dealer; which, out of +question, thou wilt be, if my cousin do not look +exceedingly narrowly to thee. + + + +BENEDICK +Come, come, we are friends: let's have a dance ere +we are married, that we may lighten our own hearts +and our wives' heels. + + + +LEONATO +We'll have dancing afterward. + + + +BENEDICK +First, of my word; therefore play, music. Prince, +thou art sad; get thee a wife, get thee a wife: +there is no staff more reverend than one tipped with horn. + + + +Enter a Messenger + + +Messenger +My lord, your brother John is ta'en in flight, +And brought with armed men back to Messina. + + + +BENEDICK +Think not on him till to-morrow: +I'll devise thee brave punishments for him. +Strike up, pipers. + + +Dance +Exeunt + + +
diff --git a/test/resources/xml/om/namespaces.xml b/test/resources/xml/om/namespaces.xml new file mode 100644 index 0000000..e8e4df8 --- /dev/null +++ b/test/resources/xml/om/namespaces.xml @@ -0,0 +1,18 @@ + + + + Hello + + + + Hey + + + + Hey2 + + + + Hey3 + + diff --git a/test/resources/xml/om/nitf.xml b/test/resources/xml/om/nitf.xml new file mode 100644 index 0000000..269d99e --- /dev/null +++ b/test/resources/xml/om/nitf.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Use of Napster Quadruples + + By PETER SVENSSON + AP Business Writer + + The Associated Press + + NEW YORK + + + + +

Despite the uncertain legality of the Napster online music-sharing service, the number of people +using it more than quadrupled in just five months, Media Metrix said Monday.

+

That made Napster the fastest-growing software application ever recorded by the Internet research +company.

+

From 1.1 million home users in the United States in February, the first month Media Metrix +tracked the application, Napster use rocketed to 4.9 million users in July.

+

That represents 6 percent of U.S. home PC users who have modems, said Media Metrix, which pays +people to install monitoring software on their computers.

+

It estimates total usage from a panel of about 50,000 people in the United States.

+

Napster was also used at work by 887,000 people in July, Media Metrix said.

+

Napster Inc. has been sued by the recording industry for allegedly enabling copyright +infringement. The federal government weighed in on the case Friday, saying the service is not protected +under a key copyright law, as the San Mateo, Calif., company claims.

+

Bruce Ryon, head of Media Metrix's New Media Group, said Napster was used by "the full spectrum of PC users, not just the youth with time on their hands and a passion for music."

+

The Napster program allows users to copy digital music files from the hard drives of other +users over the Internet.

+

Napster Inc. said last week that 28 million people had downloaded its program. It does not reveal +its own figures for how many people actually use the software.

+

Because the program connects to the company's computers over the Internet every time +it is run, Napster Inc. can track usage exactly.

+

__

+

On the Net:

+

+http://www.napster.com

+

+http://www.mediametrix.com

+
+
+ +
diff --git a/test/resources/xml/om/numbers.xml b/test/resources/xml/om/numbers.xml new file mode 100644 index 0000000..a1791cd --- /dev/null +++ b/test/resources/xml/om/numbers.xml @@ -0,0 +1,18 @@ + + + + + 3 + 24 + 55 + 11 + 2 + -3 + + + + + + + + diff --git a/test/resources/xml/om/pi.xml b/test/resources/xml/om/pi.xml new file mode 100644 index 0000000..980bbf9 --- /dev/null +++ b/test/resources/xml/om/pi.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/test/resources/xml/om/pi2.xml b/test/resources/xml/om/pi2.xml new file mode 100644 index 0000000..46bce45 --- /dev/null +++ b/test/resources/xml/om/pi2.xml @@ -0,0 +1,6 @@ + + + foo + + bar + diff --git a/test/resources/xml/om/simple.xml b/test/resources/xml/om/simple.xml new file mode 100644 index 0000000..3cff71a --- /dev/null +++ b/test/resources/xml/om/simple.xml @@ -0,0 +1,2 @@ + +abd diff --git a/test/resources/xml/om/spaces.xml b/test/resources/xml/om/spaces.xml new file mode 100644 index 0000000..4c46c63 --- /dev/null +++ b/test/resources/xml/om/spaces.xml @@ -0,0 +1,10 @@ + + + baz + + baz + + baz + + ]]> + \ No newline at end of file diff --git a/test/resources/xml/om/test.xml b/test/resources/xml/om/test.xml new file mode 100644 index 0000000..3a83612 --- /dev/null +++ b/test/resources/xml/om/test.xml @@ -0,0 +1,12 @@ + + + Axis2C OM HOWTO + 1748491379 + + + +

+ This is vey good book on OM! +

+
+
diff --git a/test/resources/xml/om/testNamespaces.xml b/test/resources/xml/om/testNamespaces.xml new file mode 100644 index 0000000..50f7c93 --- /dev/null +++ b/test/resources/xml/om/testNamespaces.xml @@ -0,0 +1,22 @@ + diff --git a/test/resources/xml/om/underscore.xml b/test/resources/xml/om/underscore.xml new file mode 100644 index 0000000..111446f --- /dev/null +++ b/test/resources/xml/om/underscore.xml @@ -0,0 +1,6 @@ + + + 1 + <_b>2 + + diff --git a/test/resources/xml/om/web.xml b/test/resources/xml/om/web.xml new file mode 100644 index 0000000..972cf5d --- /dev/null +++ b/test/resources/xml/om/web.xml @@ -0,0 +1,42 @@ + + + + snoop + SnoopServlet + + + file + ViewFile + + initial + + 1000 + + + The initial value for the counter + + + + + + mv + + + *.wm + + + + + + + + manager + + + director + + + president + + + diff --git a/test/resources/xml/om/web2.xml b/test/resources/xml/om/web2.xml new file mode 100644 index 0000000..7d479d3 --- /dev/null +++ b/test/resources/xml/om/web2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/test/resources/xml/soap/OMElementTest.xml b/test/resources/xml/soap/OMElementTest.xml new file mode 100644 index 0000000..9cd474c --- /dev/null +++ b/test/resources/xml/soap/OMElementTest.xml @@ -0,0 +1,22 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + This is some text + 2 + Some Other Text + + +
\ No newline at end of file diff --git a/test/resources/xml/soap/badsoap/bodyNotQualified.xml b/test/resources/xml/soap/badsoap/bodyNotQualified.xml new file mode 100644 index 0000000..eef7895 --- /dev/null +++ b/test/resources/xml/soap/badsoap/bodyNotQualified.xml @@ -0,0 +1,19 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + +
\ No newline at end of file diff --git a/test/resources/xml/soap/badsoap/envelopeMissing.xml b/test/resources/xml/soap/badsoap/envelopeMissing.xml new file mode 100644 index 0000000..4106495 --- /dev/null +++ b/test/resources/xml/soap/badsoap/envelopeMissing.xml @@ -0,0 +1,20 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + + +
\ No newline at end of file diff --git a/test/resources/xml/soap/badsoap/haederBodyWrongOrder.xml b/test/resources/xml/soap/badsoap/haederBodyWrongOrder.xml new file mode 100644 index 0000000..e71c49a --- /dev/null +++ b/test/resources/xml/soap/badsoap/haederBodyWrongOrder.xml @@ -0,0 +1,20 @@ + + + + + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+
\ No newline at end of file diff --git a/test/resources/xml/soap/badsoap/notnamespaceQualified.xml b/test/resources/xml/soap/badsoap/notnamespaceQualified.xml new file mode 100644 index 0000000..dfc013c --- /dev/null +++ b/test/resources/xml/soap/badsoap/notnamespaceQualified.xml @@ -0,0 +1,15 @@ + +
+ uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + +
\ No newline at end of file diff --git a/test/resources/xml/soap/badsoap/twoBodymessage.xml b/test/resources/xml/soap/badsoap/twoBodymessage.xml new file mode 100644 index 0000000..a96a401 --- /dev/null +++ b/test/resources/xml/soap/badsoap/twoBodymessage.xml @@ -0,0 +1,24 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + + + + + + +
\ No newline at end of file diff --git a/test/resources/xml/soap/badsoap/twoheaders.xml b/test/resources/xml/soap/badsoap/twoheaders.xml new file mode 100644 index 0000000..3064771 --- /dev/null +++ b/test/resources/xml/soap/badsoap/twoheaders.xml @@ -0,0 +1,29 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + +
\ No newline at end of file diff --git a/test/resources/xml/soap/badsoap/wrongSoapNs.xml b/test/resources/xml/soap/badsoap/wrongSoapNs.xml new file mode 100644 index 0000000..7d84398 --- /dev/null +++ b/test/resources/xml/soap/badsoap/wrongSoapNs.xml @@ -0,0 +1,20 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + + +
\ No newline at end of file diff --git a/test/resources/xml/soap/emtyBodymessage.xml b/test/resources/xml/soap/emtyBodymessage.xml new file mode 100644 index 0000000..ea20929 --- /dev/null +++ b/test/resources/xml/soap/emtyBodymessage.xml @@ -0,0 +1,18 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + +
\ No newline at end of file diff --git a/test/resources/xml/soap/invalidMustUnderstandSOAP12.xml b/test/resources/xml/soap/invalidMustUnderstandSOAP12.xml new file mode 100644 index 0000000..1b5183f --- /dev/null +++ b/test/resources/xml/soap/invalidMustUnderstandSOAP12.xml @@ -0,0 +1,13 @@ + + + + foo + + + + + + \ No newline at end of file diff --git a/test/resources/xml/soap/minimalMessage.xml b/test/resources/xml/soap/minimalMessage.xml new file mode 100644 index 0000000..ea76d72 --- /dev/null +++ b/test/resources/xml/soap/minimalMessage.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/test/resources/xml/soap/reallyReallyBigMessage.xml b/test/resources/xml/soap/reallyReallyBigMessage.xml new file mode 100644 index 0000000..687ed22 --- /dev/null +++ b/test/resources/xml/soap/reallyReallyBigMessage.xml @@ -0,0 +1,2529 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/resources/xml/soap/sample1.txt b/test/resources/xml/soap/sample1.txt new file mode 100644 index 0000000..a5f7560 --- /dev/null +++ b/test/resources/xml/soap/sample1.txt @@ -0,0 +1,12 @@ +POST /axis/services/EchoService HTTP/1.1 +Host: 127.0.0.1 +Content-Type: application/soap+xml; charset="utf-8" + + + + + + + + + \ No newline at end of file diff --git a/test/resources/xml/soap/sample1.xml b/test/resources/xml/soap/sample1.xml new file mode 100644 index 0000000..9d74dfe --- /dev/null +++ b/test/resources/xml/soap/sample1.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/test/resources/xml/soap/security2-soap.xml b/test/resources/xml/soap/security2-soap.xml new file mode 100644 index 0000000..4d6c272 --- /dev/null +++ b/test/resources/xml/soap/security2-soap.xml @@ -0,0 +1,54 @@ + + + + + http://fabrikam123.com/getQuote + http://fabrikam123.com/stocks + mailto:johnsmith@fabrikam123.com + uuid:84b9f5d0-33fb-4a81-b02b-5b760641c1d6 + + + + MIIEZzCCA9CgAwIBAgIQEmtJZc0rqrKh5i... + + + + + + + + + + + + EULddytSo1... + + + + BL8jdfToEb1l/vXcMZNNjPOV... + + + + + + + + + + + + QQQ + + + \ No newline at end of file diff --git a/test/resources/xml/soap/soap11/soap11fault.xml b/test/resources/xml/soap/soap11/soap11fault.xml new file mode 100644 index 0000000..c9acd34 --- /dev/null +++ b/test/resources/xml/soap/soap11/soap11fault.xml @@ -0,0 +1,16 @@ + + + Test + + + + SOAP-ENV:MustUnderstand + SOAP Must Understand Error + Actor + Detail text + Some Element Text + + + + \ No newline at end of file diff --git a/test/resources/xml/soap/soap11/soap11message.xml b/test/resources/xml/soap/soap11/soap11message.xml new file mode 100644 index 0000000..8a0b231 --- /dev/null +++ b/test/resources/xml/soap/soap11/soap11message.xml @@ -0,0 +1,46 @@ + + + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+ + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + + http://localhost:8081/axis/services/BankPort + +
+ + + + env:Sender + + Sender Timeout + + http://schemas.xmlsoap.org/soap/envelope/actor/ultimateReceiver + + + Details of error + + P5M + + + + P3M + + + + + +
+ diff --git a/test/resources/xml/soap/soap12message.xml b/test/resources/xml/soap/soap12message.xml new file mode 100644 index 0000000..5830e6c --- /dev/null +++ b/test/resources/xml/soap/soap12message.xml @@ -0,0 +1,58 @@ + + + + foo + + + foo + + + foo + + + + + + env:Sender + + m:MessageTimeout In First Subcode + + m:MessageTimeout In Second Subcode + + m:MessageTimeout In Third Subcode + + + + + + Sender Timeout + + + http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver + + + ultimateReceiver + + + Details of error + + P5M\n + + + + P3M\n + + + + + + \ No newline at end of file diff --git a/test/resources/xml/soap/soapmessage.txt b/test/resources/xml/soap/soapmessage.txt new file mode 100644 index 0000000..acae3b5 --- /dev/null +++ b/test/resources/xml/soap/soapmessage.txt @@ -0,0 +1,16 @@ +POST /axis/services/EchoService HTTP/1.1 +Host: 127.0.0.1 +Content-Type: application/soap+xml; charset="utf-8" + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + http://localhost:8081/axis/services/BankPort + +
http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous
+
+
+ + + +
\ No newline at end of file diff --git a/test/resources/xml/soap/soapmessage.xml b/test/resources/xml/soap/soapmessage.xml new file mode 100644 index 0000000..0f49778 --- /dev/null +++ b/test/resources/xml/soap/soapmessage.xml @@ -0,0 +1,20 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + + +
\ No newline at end of file diff --git a/test/resources/xml/soap/soapmessage1.xml b/test/resources/xml/soap/soapmessage1.xml new file mode 100644 index 0000000..3d69585 --- /dev/null +++ b/test/resources/xml/soap/soapmessage1.xml @@ -0,0 +1,27 @@ + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+
+ + + + + 1001 + + +
\ No newline at end of file diff --git a/test/resources/xml/soap/test.xml b/test/resources/xml/soap/test.xml new file mode 100644 index 0000000..3a303d4 --- /dev/null +++ b/test/resources/xml/soap/test.xml @@ -0,0 +1,59 @@ + + + + foo + + + foo + + + foo + + + + + + env:Sender + + m:MessageTimeout In First Subcode + + m:MessageTimeout In Second Subcode + + m:MessageTimeout In Third Subcode + + + + + + Sender Timeout + + + http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver + + + ultimateReceiver + + + Details of error + + P5M\n + + + + P3M\n + + + + + + + diff --git a/test/resources/xml/soap/whitespacedMessage.xml b/test/resources/xml/soap/whitespacedMessage.xml new file mode 100644 index 0000000..0af632b --- /dev/null +++ b/test/resources/xml/soap/whitespacedMessage.xml @@ -0,0 +1,27 @@ + + + + + + + + uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5 + + http://localhost:8081/axis/services/BankPort + +
+ http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous +
+
+ +
+ + + + + + + + +
\ No newline at end of file diff --git a/test/resources/xml/soap/wrongEnvelopeNamespace.xml b/test/resources/xml/soap/wrongEnvelopeNamespace.xml new file mode 100644 index 0000000..ff81835 --- /dev/null +++ b/test/resources/xml/soap/wrongEnvelopeNamespace.xml @@ -0,0 +1,12 @@ + + + + + + IBM + + + + \ No newline at end of file diff --git a/tools/codegen/javatool/README b/tools/codegen/javatool/README new file mode 100644 index 0000000..395bbb0 --- /dev/null +++ b/tools/codegen/javatool/README @@ -0,0 +1,29 @@ +WSDL2C.sh and WSDL2C.bat +======================== + +These scripts are provided to simplify the C code generation using WSDL2C Java tool that comes with Apache Axis2/Java. + +How to use +---------- +1. Set AXIS2_HOME envionment vaiable to you Axis2 Java installation directory. + eg: 'export AXIS2_HOME=/home/axis2java' +3. Run WSDL2C.sh giving WSDL2C command line arguments as the arguments to the shell script. + +Note: Do the same for the bat file on Windows. + + +Examples +-------- + +To generate a sevice skeleton in C: +Linux: + sh WSDL2C.sh -uri interoptestdoclitparameters.wsdl -ss -sd -d adb -u +Windows: + WSDL2C.bat -uri interoptestdoclitparameters.wsdl -ss -sd -d adb -u + +To generate a client stub in C: +Linux: + sh WSDL2C.sh -uri interoptestdoclitparameters.wsdl -d adb -u +Windows + WSDL2C.bat -uri interoptestdoclitparameters.wsdl -d adb -u + diff --git a/tools/codegen/javatool/WSDL2C.bat b/tools/codegen/javatool/WSDL2C.bat new file mode 100644 index 0000000..d97b038 --- /dev/null +++ b/tools/codegen/javatool/WSDL2C.bat @@ -0,0 +1,9 @@ +echo off +REM set AXIS2_HOME=C:\axis2-SNAPSHOT +setlocal EnableDelayedExpansion +set AXIS2_CLASSPATH=%AXIS2_HOME% +FOR %%c in ("%AXIS2_HOME%\lib\*.jar") DO set AXIS2_CLASSPATH=!AXIS2_CLASSPATH!;%%c; + +java -classpath %AXIS2_CLASSPATH% org.apache.axis2.wsdl.WSDL2C %* + + diff --git a/tools/codegen/javatool/WSDL2C.sh b/tools/codegen/javatool/WSDL2C.sh new file mode 100755 index 0000000..7882533 --- /dev/null +++ b/tools/codegen/javatool/WSDL2C.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +#export AXIS2_HOME=/home/axis2java +for f in $AXIS2_HOME/lib/*.jar +do + AXIS2_CLASSPATH=$AXIS2_CLASSPATH:$f +done +export AXIS2_CLASSPATH + +echo the classpath $AXIS2_CLASSPATH +java -classpath $AXIS2_CLASSPATH org.apache.axis2.wsdl.WSDL2C $* diff --git a/tools/md5/AUTHORS b/tools/md5/AUTHORS new file mode 100644 index 0000000..e69de29 diff --git a/tools/md5/COPYING b/tools/md5/COPYING new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/tools/md5/COPYING @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/tools/md5/ChangeLog b/tools/md5/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/tools/md5/INSTALL b/tools/md5/INSTALL new file mode 100644 index 0000000..a151ea5 --- /dev/null +++ b/tools/md5/INSTALL @@ -0,0 +1,14 @@ +Getting Axis2/C md5 Source Working on Linux +============================================== +Build the source +This can be done using the following command sequence: + ./configure + make + make install + use './configure --help' for options + +NOTE: If you don't provide a --prefix configure option, it will by default +install into /usr/local/md5 directory. + + + diff --git a/tools/md5/LICENSE b/tools/md5/LICENSE new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/tools/md5/LICENSE @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/tools/md5/Makefile.am b/tools/md5/Makefile.am new file mode 100644 index 0000000..0020f57 --- /dev/null +++ b/tools/md5/Makefile.am @@ -0,0 +1,5 @@ +datadir=$(prefix)/bin/tools/md5 +SUBDIRS = src +includedir=$(prefix)/include/axis2-1.6.0 +data_DATA= INSTALL README AUTHORS NEWS LICENSE COPYING +EXTRA_DIST=LICENSE diff --git a/tools/md5/NEWS b/tools/md5/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/tools/md5/README b/tools/md5/README new file mode 100644 index 0000000..48433b8 --- /dev/null +++ b/tools/md5/README @@ -0,0 +1,21 @@ + Axis2C MD5 Generator + ====================== + +What is it? +----------- + +Axis2 MD5 project is aimed at generating md5 checksums for files. It works only in command line interface. + +How to run the MD5 Generator? +----------------------------- + +Run the file called md5 with the File Name. +For instruction run md5 -h + + +Installation +------------ + +Please see the file called INSTALL. + + diff --git a/tools/md5/autogen.sh b/tools/md5/autogen.sh new file mode 100755 index 0000000..718c23c --- /dev/null +++ b/tools/md5/autogen.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +echo -n 'Running libtoolize...' +if [ `uname -s` = Darwin ] +then + LIBTOOLIZE=glibtoolize +else + LIBTOOLIZE=libtoolize +fi + +if $LIBTOOLIZE --force > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running aclocal...' +if aclocal > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoheader...' +if autoheader > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoconf...' +if autoconf > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running automake...' +if automake --add-missing > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo 'done' diff --git a/tools/md5/build.sh b/tools/md5/build.sh new file mode 100644 index 0000000..17d3548 --- /dev/null +++ b/tools/md5/build.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +./autogen.sh + +if test -z ${AXIS2C_HOME} +then + AXIS2C_HOME=`pwd`/../deploy +fi + +export AXIS2C_HOME + +./configure --prefix=${AXIS2C_HOME} --enable-tests=no +make diff --git a/tools/md5/configure.ac b/tools/md5/configure.ac new file mode 100644 index 0000000..213ab14 --- /dev/null +++ b/tools/md5/configure.ac @@ -0,0 +1,75 @@ +dnl run autogen.sh to generate the configure script. + +AC_PREREQ(2.59) + +AC_INIT(md5-src, 1.6.0) +AC_CANONICAL_SYSTEM +AM_CONFIG_HEADER(config.h) +AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION) +AC_PREFIX_DEFAULT(/usr/local/md5) + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_CPP +AC_PROG_LIBTOOL +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET + + +CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE -g" +if test "$GCC" = "yes"; then + CFLAGS="$CFLAGS -ansi -Wall -Wno-implicit-function-declaration" +fi + +LDFLAGS="$LDFLAGS -lpthread" + +dnl Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([stdio.h stdlib.h string.h]) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST + +dnl Checks for library functions. +AC_FUNC_MALLOC +AC_FUNC_REALLOC +AC_CHECK_FUNCS([memmove]) + +AC_CHECK_LIB(z, inflate) +dnl AC_CHECK_LIB(cutest, CuTestInit) + + +AC_MSG_CHECKING(whether to build tests) +AC_ARG_ENABLE(tests, +[ --enable-tests build tests. default=no], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + TESTDIR="" + ;; + *) + AC_MSG_RESULT(yes) + TESTDIR="test" + + ;; + esac ], + AC_MSG_RESULT(no) + TESTDIR="" +) + + +UTILINC=$axis2_utilinc + +AC_SUBST(UTILINC) +AC_SUBST(TESTDIR) +AC_SUBST(WRAPPER_DIR) + +CFLAGS="$CFLAGS" + +AC_CONFIG_FILES([Makefile \ + src/Makefile \ + ]) + +AC_OUTPUT diff --git a/tools/md5/src/Makefile.am b/tools/md5/src/Makefile.am new file mode 100644 index 0000000..40be3c9 --- /dev/null +++ b/tools/md5/src/Makefile.am @@ -0,0 +1,14 @@ +prgbindir=$(prefix)/bin/tools/md5 + +prgbin_PROGRAMS = md5 + +md5_SOURCES = md5.c + +md5_LDADD = \ + ../../../util/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../util/include \ + -I ../../../include \ + -I ../include + diff --git a/tools/md5/src/md5.c b/tools/md5/src/md5.c new file mode 100644 index 0000000..81ae359 --- /dev/null +++ b/tools/md5/src/md5.c @@ -0,0 +1,80 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +static void md5_file (char *filename, const axutil_env_t * env) +{ + FILE * file; + axutil_md5_ctx_t * context; + int len, i; + unsigned char buffer[1024], digest[16]; + + if ((file = fopen (filename, "rb")) == NULL) + { + printf ("%s can't be opened\n", filename); + } + else + { + context = axutil_md5_ctx_create(env); + while ((len = fread (buffer, 1, 1024, file)) != 0) + { + axutil_md5_update(context, env, buffer, len); + } + axutil_md5_final(context, env, digest); + axutil_md5_ctx_free(context, env); + fclose (file); + printf ("MD5 (%s) = ", filename); + for (i = 0; i < 16; i++) + { + printf ("%02x", digest[i]); + } + printf ("\n"); + } +} + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + + env = axutil_env_create_all("md5.log", AXIS2_LOG_LEVEL_DEBUG); + if (argc > 1) + { + if (axutil_strcmp(argv[1], "-h") == 0) + { + printf("Usage : %s [file_name]\n", argv[0]); + printf("use -h for help\n"); + return 0; + } + else + { + md5_file(argv[1], env); + } + } + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + return 0; +} diff --git a/tools/md5/test/Makefile.am b/tools/md5/test/Makefile.am new file mode 100644 index 0000000..85eb6ca --- /dev/null +++ b/tools/md5/test/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = unit diff --git a/tools/tcpmon/AUTHORS b/tools/tcpmon/AUTHORS new file mode 100644 index 0000000..e69de29 diff --git a/tools/tcpmon/COPYING b/tools/tcpmon/COPYING new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/tools/tcpmon/COPYING @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/tools/tcpmon/ChangeLog b/tools/tcpmon/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/tools/tcpmon/INSTALL b/tools/tcpmon/INSTALL new file mode 100644 index 0000000..fb59719 --- /dev/null +++ b/tools/tcpmon/INSTALL @@ -0,0 +1,14 @@ +Getting Axis2/C tcpmon Source Working on Linux +============================================= +Build the source +This can be done using the following command sequence: + ./configure + make + make install + use './configure --help' for options + +NOTE: If you don't provide a --prefix configure option, it will by default +install into /usr/local/tcpmon directory. + + + diff --git a/tools/tcpmon/LICENSE b/tools/tcpmon/LICENSE new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/tools/tcpmon/LICENSE @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/tools/tcpmon/Makefile.am b/tools/tcpmon/Makefile.am new file mode 100644 index 0000000..243c271 --- /dev/null +++ b/tools/tcpmon/Makefile.am @@ -0,0 +1,6 @@ +datadir=$(prefix)/bin/tools/tcpmon +SUBDIRS = src +includedir=$(prefix)/include/axis2-1.6.0 +include_HEADERS=$(top_builddir)/include/*.h +data_DATA= INSTALL README AUTHORS NEWS LICENSE COPYING +EXTRA_DIST=LICENSE diff --git a/tools/tcpmon/NEWS b/tools/tcpmon/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/tools/tcpmon/README b/tools/tcpmon/README new file mode 100644 index 0000000..23755f4 --- /dev/null +++ b/tools/tcpmon/README @@ -0,0 +1,21 @@ + Axis2C TCP Monitor + ======================= + +What is it? +----------- + +Axis2 TCP monitor project is aimed at capture the SOAP messages sent and received. It works only in command line interface. + +How to run the TCP monitor? +--------------------------- + +Run the file called tcpmon with the Listen Port, Target port and Host name. +For instruction run tcpmon -h + + +Installation +------------ + +Please see the file called INSTALL. + + diff --git a/tools/tcpmon/autogen.sh b/tools/tcpmon/autogen.sh new file mode 100755 index 0000000..718c23c --- /dev/null +++ b/tools/tcpmon/autogen.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +echo -n 'Running libtoolize...' +if [ `uname -s` = Darwin ] +then + LIBTOOLIZE=glibtoolize +else + LIBTOOLIZE=libtoolize +fi + +if $LIBTOOLIZE --force > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running aclocal...' +if aclocal > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoheader...' +if autoheader > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoconf...' +if autoconf > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running automake...' +if automake --add-missing > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo 'done' diff --git a/tools/tcpmon/build.sh b/tools/tcpmon/build.sh new file mode 100644 index 0000000..17d3548 --- /dev/null +++ b/tools/tcpmon/build.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +./autogen.sh + +if test -z ${AXIS2C_HOME} +then + AXIS2C_HOME=`pwd`/../deploy +fi + +export AXIS2C_HOME + +./configure --prefix=${AXIS2C_HOME} --enable-tests=no +make diff --git a/tools/tcpmon/configure.ac b/tools/tcpmon/configure.ac new file mode 100644 index 0000000..5619c87 --- /dev/null +++ b/tools/tcpmon/configure.ac @@ -0,0 +1,122 @@ +dnl run autogen.sh to generate the configure script. + +AC_PREREQ(2.59) + +AC_INIT(tcpmon-src, 1.6.0) +AC_CANONICAL_SYSTEM +AM_CONFIG_HEADER(config.h) +AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION) +AC_PREFIX_DEFAULT(/usr/local/tcpmon) + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_CPP +AC_PROG_LIBTOOL +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET + + +CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE -g" +if test "$GCC" = "yes"; then + CFLAGS="$CFLAGS -ansi -Wall -Wno-implicit-function-declaration" +fi + +LDFLAGS="$LDFLAGS -lpthread" + +dnl Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([stdio.h stdlib.h string.h]) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST + +dnl Checks for library functions. +AC_FUNC_MALLOC +AC_FUNC_REALLOC +AC_CHECK_FUNCS([memmove]) + +AC_CHECK_LIB(z, inflate) +dnl AC_CHECK_LIB(cutest, CuTestInit) + + +AC_MSG_CHECKING(whether to build tests) +AC_ARG_ENABLE(tests, +[ --enable-tests build tests. default=no], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + TESTDIR="" + ;; + *) + AC_MSG_RESULT(yes) + TESTDIR="test" + + ;; + esac ], + AC_MSG_RESULT(no) + TESTDIR="" +) + +GUTHTHILA_LIBS="" + +AC_MSG_CHECKING(whether to build guththila xml parser library) +AC_ARG_ENABLE(guththila, [ --enable-guththila + build Guththila XML parser library wrapper (default=yes)], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + CFLAGS="$CFLAGS -DAXIS2_GUTHTHILA_ENABLED" + CPPFLAGS="$CPPFLAGS -DAXIS2_GUTHTHILA_ENABLED" + WRAPPER_DIR="guththila" + + ;; + esac ], + AC_MSG_RESULT(yes) + WRAPPER_DIR="guththila" + CFLAGS="$CFLAGS -DAXIS2_GUTHTHILA_ENABLED" + CPPFLAGS="$CPPFLAGS -DAXIS2_GUTHTHILA_ENABLED" + AC_CONFIG_SUBDIRS(guththila) + GUTHTHILA_LIBS="/guththila/src/" + GUTHTHILA_DIR="guththila" +) + + +AC_MSG_CHECKING(whether to build libxml2 xml parser library) +AC_ARG_ENABLE(libxml2, [ --enable-libxml2 + build Libxml2 XML parser library wrapper (default=no)], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + WRAPPER_DIR="" + ;; + *) + AC_MSG_RESULT(yes) + WRAPPER_DIR="libxml2" + PKG_CHECK_MODULES(LIBXML2, libxml-2.0) + CFLAGS="$CFLAGS -DAXIS2_LIBXML2_ENABLED" + CPPFLAGS="$CPPFLAGS $PARSER_CFLAGS -DAXIS2_LIBXML2_ENABLED" + LDFLAGS="$LDFLAGS $PARSER_LIBS" + ;; + esac ], + AC_MSG_RESULT(no) +) + + +UTILINC=$axis2_utilinc + +AC_SUBST(UTILINC) +AC_SUBST(TESTDIR) +AC_SUBST(WRAPPER_DIR) + +CFLAGS="$CFLAGS" + +AC_CONFIG_FILES([Makefile \ + src/Makefile \ + ]) + +AC_OUTPUT diff --git a/tools/tcpmon/include/tcpmon_entry.h b/tools/tcpmon/include/tcpmon_entry.h new file mode 100644 index 0000000..b918ad5 --- /dev/null +++ b/tools/tcpmon/include/tcpmon_entry.h @@ -0,0 +1,234 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef TCPMON_ENTRY_H +#define TCPMON_ENTRY_H + +#include +#include + +/** + * @file tcpmon_entry.h + * @brief represent entry of tcpmon + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup represent entry of tcpmon + * @ingroup tcpmon + * @{ + */ + + typedef struct tcpmon_entry_ops tcpmon_entry_ops_t; + typedef struct tcpmon_entry tcpmon_entry_t; + + struct tcpmon_entry_ops + { + + /** + * free the tcpmon_entry. + * @param entry represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE. + */ + axis2_status_t( + AXIS2_CALL + * free)( + tcpmon_entry_t * entry, + const axutil_env_t * env); + + /** + * retrieve the arrived_time + * @param entry represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + */ + axis2_char_t *( + AXIS2_CALL + * arrived_time)( + tcpmon_entry_t * entry, + const axutil_env_t * env); + + /** + * retrieve the sent_time + * @param entry represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + */ + axis2_char_t *( + AXIS2_CALL + * sent_time)( + tcpmon_entry_t * entry, + const axutil_env_t * env); + + /** + * retrieve the arrived_time - sent_time ( in seconds) + * @param entry represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + */ + axis2_char_t *( + AXIS2_CALL + * time_diff)( + tcpmon_entry_t * entry, + const axutil_env_t * env); + + /** + * retrieve the sent data + * @param entry represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + */ + axis2_char_t *( + AXIS2_CALL + * sent_data)( + tcpmon_entry_t * entry, + const axutil_env_t * env); + + /** + * retrieve the arrived data + * @param entry represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + */ + axis2_char_t *( + AXIS2_CALL + * arrived_data)( + tcpmon_entry_t * entry, + const axutil_env_t * env); + + /** + * retrieve the sent headers + * @param entry represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + */ + axis2_char_t *( + AXIS2_CALL + * sent_headers)( + tcpmon_entry_t * entry, + const axutil_env_t * env); + + /** + * retrieve the arrived headers + * @param entry represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + */ + axis2_char_t *( + AXIS2_CALL + * arrived_headers)( + tcpmon_entry_t * entry, + const axutil_env_t * env); + + /** + * retrieve whether the transportation success + * @param entry represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + */ + axis2_bool_t( + AXIS2_CALL + * is_success)( + tcpmon_entry_t * entry, + const axutil_env_t * env); + + int( + AXIS2_CALL + * get_format_bit)( + tcpmon_entry_t * entry, + const axutil_env_t * env); + + int( + AXIS2_CALL + * get_sent_data_length)( + tcpmon_entry_t * entry, + const axutil_env_t * env); + + int( + AXIS2_CALL + * get_arrived_data_length)( + tcpmon_entry_t * entry, + const axutil_env_t * env); + + axis2_status_t( + AXIS2_CALL + * set_format_bit)( + tcpmon_entry_t * entry, + const axutil_env_t * env, + int format_bit); + }; + + struct tcpmon_entry + { + tcpmon_entry_ops_t *ops; + }; + + /** + * Creates tcpmon_entry struct + * @param env double pointer to environment struct. MUST NOT be NULL + * @return pointer to newly created tcpmon_entry struct + */ + tcpmon_entry_t *AXIS2_CALL + tcpmon_entry_create( + const axutil_env_t * env); + + /*************************** Function macros **********************************/ + +#define TCPMON_ENTRY_FREE(entry, env) \ + ((entry)->ops->free (entry, env)) + +#define TCPMON_ENTRY_ARRIVED_TIME(entry, env) \ + ((entry)->ops->arrived_time(entry, env)) + +#define TCPMON_ENTRY_SENT_TIME(entry, env) \ + ((entry)->ops->sent_time(entry, env)) + +#define TCPMON_ENTRY_TIME_DIFF(entry, env) \ + ((entry)->ops->time_diff(entry, env)) + +#define TCPMON_ENTRY_SENT_DATA(entry, env) \ + ((entry)->ops->sent_data(entry, env)) + +#define TCPMON_ENTRY_ARRIVED_DATA(entry, env) \ + ((entry)->ops->arrived_data(entry, env)) + +#define TCPMON_ENTRY_SENT_HEADERS(entry, env) \ + ((entry)->ops->sent_headers(entry, env)) + +#define TCPMON_ENTRY_ARRIVED_HEADERS(entry, env) \ + ((entry)->ops->arrived_headers(entry, env)) + +#define TCPMON_ENTRY_IS_SUCCESS(entry, env) \ + ((entry)->ops->is_success(entry, env)) + +#define TCPMON_ENTRY_SET_FORMAT_BIT(entry, env, format_bit) \ + ((entry)->ops->set_format_bit(entry, env, format_bit)) + +#define TCPMON_ENTRY_GET_FORMAT_BIT(entry, env) \ + ((entry)->ops->get_format_bit(entry, env)) + +#define TCPMON_ENTRY_GET_SENT_DATA_LENGTH(entry, env) \ + ((entry)->ops->get_sent_data_length(entry, env)) + +#define TCPMON_ENTRY_GET_ARRIVED_DATA_LENGTH(entry, env) \ + ((entry)->ops->get_arrived_data_length(entry, env)) + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* TCPMON_ENTRY_H */ diff --git a/tools/tcpmon/include/tcpmon_session.h b/tools/tcpmon/include/tcpmon_session.h new file mode 100644 index 0000000..53181c5 --- /dev/null +++ b/tools/tcpmon/include/tcpmon_session.h @@ -0,0 +1,291 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef TCPMON_SESSION_H +#define TCPMON_SESSION_H + +#include +#include +#include + +/** + * @file tcpmon_session.h + * @brief represent session of tcpmon + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup represent session of tcpmon + * @ingroup tcpmon + * @{ + */ + + typedef struct tcpmon_session_ops tcpmon_session_ops_t; + typedef struct tcpmon_session tcpmon_session_t; + + /** + * callback functions for the tcpmon session + */ + typedef int( + *TCPMON_SESSION_NEW_ENTRY_FUNCT)( + const axutil_env_t * env, + tcpmon_entry_t * entry, + int status); /* 0-started, 1-finished */ + + typedef int( + *TCPMON_SESSION_TRANS_ERROR_FUNCT)( + const axutil_env_t * env, + axis2_char_t * error_message); + + struct tcpmon_session_ops + { + + /** + * free the tcpmon_session. + * @param session represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE. + */ + axis2_status_t( + AXIS2_CALL + * free)( + tcpmon_session_t * session, + const axutil_env_t * env); + + axis2_status_t( + AXIS2_CALL + * set_test_bit)( + tcpmon_session_t * session, + const axutil_env_t * env, + int test_bit); + + axis2_status_t( + AXIS2_CALL + * get_test_bit)( + tcpmon_session_t * session, + const axutil_env_t * env); + axis2_status_t( + AXIS2_CALL + * set_format_bit)( + tcpmon_session_t * session, + const axutil_env_t * env, + int format_bit); + + int( + AXIS2_CALL + * get_format_bit)( + tcpmon_session_t * session, + const axutil_env_t * env); + + /** + * configure the listening port. + * @param session represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + * @param listen_port listening port ( port of a localhost). + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE. + */ + axis2_status_t( + AXIS2_CALL + * set_listen_port)( + tcpmon_session_t * session, + const axutil_env_t * env, + int listen_port); + + /** + * retrieve the listening port + * @param session represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + */ + int( + AXIS2_CALL + * get_listen_port)( + tcpmon_session_t * session, + const axutil_env_t * env); + + /** + * configure the target port + * @param session represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + * @param target_port tartet port + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE. + */ + axis2_status_t( + AXIS2_CALL + * set_target_port)( + tcpmon_session_t * session, + const axutil_env_t * env, + int target_port); + + /** + * retrieve the target port + * @param session represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + */ + int( + AXIS2_CALL + * get_target_port)( + tcpmon_session_t * session, + const axutil_env_t * env); + + /** + * configure the target host + * @param session represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + * @param target_host url of the target host + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE. + */ + axis2_status_t( + AXIS2_CALL + * set_target_host)( + tcpmon_session_t * session, + const axutil_env_t * env, + axis2_char_t * target_host); + + /** + * retrieve the base uri of the target host + * @param session represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + */ + axis2_char_t *( + AXIS2_CALL + * get_target_host)( + tcpmon_session_t * session, + const axutil_env_t * env); + + /** + * start the session + * @param session represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + */ + axis2_status_t( + AXIS2_CALL + * start)( + tcpmon_session_t * session, + const axutil_env_t * env); + + /** + * stop the session. + * @param session represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + */ + axis2_status_t( + AXIS2_CALL + * stop)( + tcpmon_session_t * session, + const axutil_env_t * env); + + /** + * set on new entry. + * @param session represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + * @param on_new_entry_funct function to triger on new entry + */ + axis2_status_t( + AXIS2_CALL + * on_new_entry)( + tcpmon_session_t * session, + const axutil_env_t * env, + TCPMON_SESSION_NEW_ENTRY_FUNCT on_new_entry_funct); + + /** + * set on new entry. + * @param session represet the type object. + * @param env pointer to environment struct. MUST NOT be NULL. + * @param on_new_entry function to triger on new entry + */ + axis2_status_t( + AXIS2_CALL + * on_trans_fault)( + tcpmon_session_t * session, + const axutil_env_t * env, + TCPMON_SESSION_TRANS_ERROR_FUNCT on_trans_fault_funct); + + }; + + struct tcpmon_session + { + tcpmon_session_ops_t *ops; + }; + + /** + * Creates tcpmon_session struct + * @param env double pointer to environment struct. MUST NOT be NULL + * @return pointer to newly created tcpmon_session struct + */ + tcpmon_session_t *AXIS2_CALL + tcpmon_session_create( + const axutil_env_t * env); + + /*************************** Function macros **********************************/ + +#define TCPMON_SESSION_FREE(session, env) \ + ((session)->ops->free (session, env)) + +#define TCPMON_SESSION_SET_TEST_BIT(session, env, test_bit) \ + ((session)->ops->set_test_bit(session, env, test_bit)) + +#define TCPMON_SESSION_GET_TEST_BIT(session, env) \ + ((session)->ops->get_test_bit(session, env)) + +#define TCPMON_SESSION_SET_FORMAT_BIT(session, env, format_bit) \ + ((session)->ops->set_format_bit(session, env, format_bit)) + +#define TCPMON_SESSION_GET_FORMAT_BIT(session, env) \ + ((session)->ops->get_format_bit(session, env)) + +#define TCPMON_SESSION_SET_LISTEN_PORT(session, env, listen_port) \ + ((session)->ops->set_listen_port(session, env, listen_port)) + +#define TCPMON_SESSION_GET_LISTEN_PORT(session, env) \ + ((session)->ops->get_listen_port(session, env)) + +#define TCPMON_SESSION_SET_TARGET_PORT(session, env, target_port) \ + ((session)->ops->set_target_port(session, env, target_port)) + +#define TCPMON_SESSION_GET_TARGET_PORT(session, env) \ + ((session)->ops->get_target_port(session, env)) + +#define TCPMON_SESSION_SET_TARGET_HOST(session, env, target_host) \ + ((session)->ops->set_target_host(session, env, target_host)) + +#define TCPMON_SESSION_GET_TARGET_HOST(session, env) \ + ((session)->ops->get_target_host(session, env)) + +#define TCPMON_SESSION_START(session, env) \ + ((session)->ops->start(session, env)) + +#define TCPMON_SESSION_STOP(session, env) \ + ((session)->ops->stop(session, env)) + +#define TCPMON_SESSION_ON_TRANS_FAULT(session, env, funct) \ + ((session)->ops->on_trans_fault(session, env, funct)) + +#define TCPMON_SESSION_ON_NEW_ENTRY(session, env, funct) \ + ((session)->ops->on_new_entry(session, env, funct)) + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* TCPMON_SESSION_H */ diff --git a/tools/tcpmon/include/tcpmon_util.h b/tools/tcpmon/include/tcpmon_util.h new file mode 100644 index 0000000..646be66 --- /dev/null +++ b/tools/tcpmon/include/tcpmon_util.h @@ -0,0 +1,91 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef TCPMON_UTIL_H +#define TCPMON_UTIL_H + +#include +#include +#include + +/** + * @file tcpmon_util.h + * @brief hold util functions of tcpmon + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup hold util functions of tcpmon + * @ingroup tcpmon + * @{ + */ + + /** + * format the data as xml + * @param env pointer to environment struct. MUST NOT be NULL. + * @param data to be formatted + */ + axis2_char_t *tcpmon_util_format_as_xml( + const axutil_env_t * env, + axis2_char_t * data, + int format); + + char *str_replace( + char *str, + const char *search, + const char *replace); + + axis2_char_t * tcpmon_util_strcat( + axis2_char_t * dest, + axis2_char_t * source, + int *buff_size, + const axutil_env_t * env); + + axis2_char_t * + tcpmon_util_read_current_stream( + const axutil_env_t * env, + axutil_stream_t * stream, + int *stream_size, + axis2_char_t ** header, + axis2_char_t ** data); + + char * + tcpmon_util_str_replace( + const axutil_env_t *env, + char *str, + const char *search, + const char *replace); + + int + tcpmon_util_write_to_file( + char *filename, + char *buffer); + + + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* TCPMON_UTIL_H */ diff --git a/tools/tcpmon/src/Makefile.am b/tools/tcpmon/src/Makefile.am new file mode 100644 index 0000000..674fbca --- /dev/null +++ b/tools/tcpmon/src/Makefile.am @@ -0,0 +1,21 @@ +prgbindir=$(prefix)/bin/tools/tcpmon + +prgbin_PROGRAMS = tcpmon + +tcpmon_SOURCES = tcpmon.c \ + entry.c \ + session.c \ + util.c + +tcpmon_LDADD = \ + ../../../util/src/libaxutil.la \ + ../../../axiom/src/om/libaxis2_axiom.la \ + ../../../axiom/src/parser/$(WRAPPER_DIR)/libaxis2_parser.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../util/include \ + -I ../../../axiom/include \ + -I ../../../include \ + -I ../include + +EXTRA_DIST=tcpmon_entry_local.h tcpmon_session_local.h diff --git a/tools/tcpmon/src/entry.c b/tools/tcpmon/src/entry.c new file mode 100644 index 0000000..37d2af1 --- /dev/null +++ b/tools/tcpmon/src/entry.c @@ -0,0 +1,656 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "tcpmon_entry_local.h" +#include "tcpmon_session_local.h" +#include "tcpmon_util.h" + +#define AXIS2_TCPMON + +/** + * @brief + */ +typedef struct tcpmon_entry_impl +{ + tcpmon_entry_t entry; + + axis2_char_t *arrived_time; + axis2_char_t *sent_time; + axis2_char_t *sent_data; + axis2_char_t *arrived_data; + axis2_char_t *sent_headers; + axis2_char_t *arrived_headers; + axis2_bool_t is_success; + axis2_char_t *time_diff; + axis2_char_t *test_file_name; + int format_bit; + int sent_data_length; + int arrived_data_length; +} +tcpmon_entry_impl_t; + +#define AXIS2_INTF_TO_IMPL(entry) \ + ((tcpmon_entry_impl_t *) entry) + +/************************* Function prototypes ********************************/ + + +axis2_status_t AXIS2_CALL tcpmon_entry_free( + tcpmon_entry_t * entry, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL tcpmon_entry_arrived_time( + tcpmon_entry_t * entry, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL tcpmon_entry_sent_time( + tcpmon_entry_t * entry, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL tcpmon_entry_time_diff( + tcpmon_entry_t * entry, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL tcpmon_entry_sent_data( + tcpmon_entry_t * entry, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL tcpmon_entry_sent_headers( + tcpmon_entry_t * entry, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL tcpmon_entry_arrived_data( + tcpmon_entry_t * entry, + const axutil_env_t * env); + +axis2_char_t *AXIS2_CALL tcpmon_entry_arrived_headers( + tcpmon_entry_t * entry, + const axutil_env_t * env); + +axis2_bool_t AXIS2_CALL tcpmon_entry_is_success( + tcpmon_entry_t * entry, + const axutil_env_t * env); + +axis2_char_t *get_current_stream_to_buffer( + const axutil_env_t * env, + axutil_stream_t * stream, + int *stream_size); + + +int AXIS2_CALL tcpmon_entry_get_format_bit( + tcpmon_entry_t * entry, + const axutil_env_t * env); + +int AXIS2_CALL tcpmon_entry_get_sent_data_length( + tcpmon_entry_t * entry, + const axutil_env_t * env); + +int AXIS2_CALL tcpmon_entry_get_arrived_data_length( + tcpmon_entry_t * entry, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL tcpmon_entry_set_format_bit( + tcpmon_entry_t * entry, + const axutil_env_t * env, + int format_bit); + +/************************** End of function prototypes ************************/ + +tcpmon_entry_t *AXIS2_CALL +tcpmon_entry_create( + const axutil_env_t * env) +{ + tcpmon_entry_impl_t *entry_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + entry_impl = (tcpmon_entry_impl_t *) AXIS2_MALLOC(env-> + allocator, + sizeof + (tcpmon_entry_impl_t)); + + if (!entry_impl) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + entry_impl->arrived_time = AXIS2_MALLOC(env->allocator, 32); + entry_impl->sent_time = AXIS2_MALLOC(env->allocator, 32); + entry_impl->time_diff = AXIS2_MALLOC(env->allocator, 32); + entry_impl->arrived_data = NULL; + entry_impl->sent_data = NULL; + entry_impl->arrived_headers = NULL; + entry_impl->sent_headers = NULL; + entry_impl->is_success = AXIS2_FALSE; + entry_impl->format_bit = 0; + entry_impl->sent_data_length = 0; + entry_impl->arrived_data_length = 0; + + entry_impl->entry.ops = + AXIS2_MALLOC(env->allocator, sizeof(tcpmon_entry_ops_t)); + if (!entry_impl->entry.ops) + { + tcpmon_entry_free(&(entry_impl->entry), env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + entry_impl->entry.ops->free = tcpmon_entry_free; + entry_impl->entry.ops->arrived_time = tcpmon_entry_arrived_time; + entry_impl->entry.ops->sent_time = tcpmon_entry_sent_time; + entry_impl->entry.ops->time_diff = tcpmon_entry_time_diff; + entry_impl->entry.ops->sent_data = tcpmon_entry_sent_data; + entry_impl->entry.ops->sent_headers = tcpmon_entry_sent_headers; + entry_impl->entry.ops->arrived_data = tcpmon_entry_arrived_data; + entry_impl->entry.ops->arrived_headers = tcpmon_entry_arrived_headers; + entry_impl->entry.ops->is_success = tcpmon_entry_is_success; + entry_impl->entry.ops->set_format_bit = tcpmon_entry_set_format_bit; + entry_impl->entry.ops->get_format_bit = tcpmon_entry_get_format_bit; + entry_impl->entry.ops->get_sent_data_length = tcpmon_entry_get_sent_data_length; + entry_impl->entry.ops->get_arrived_data_length = tcpmon_entry_get_arrived_data_length; + + return &(entry_impl->entry); +} + +/***************************Function implementation****************************/ + +axis2_status_t AXIS2_CALL +tcpmon_entry_free( + tcpmon_entry_t * entry, + const axutil_env_t * env) +{ + tcpmon_entry_impl_t *entry_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + entry_impl = AXIS2_INTF_TO_IMPL(entry); + + if (entry->ops) + { + AXIS2_FREE(env->allocator, entry->ops); + entry->ops = NULL; + } + + if (entry_impl->arrived_time) + { + AXIS2_FREE(env->allocator, entry_impl->arrived_time); + entry_impl->arrived_time = NULL; + } + if (entry_impl->sent_time) + { + AXIS2_FREE(env->allocator, entry_impl->sent_time); + entry_impl->sent_time = NULL; + } + if (entry_impl->time_diff) + { + AXIS2_FREE(env->allocator, entry_impl->time_diff); + entry_impl->time_diff = NULL; + } + if (entry_impl->arrived_data) + { + AXIS2_FREE(env->allocator, entry_impl->arrived_data); + entry_impl->arrived_data = NULL; + } + if (entry_impl->sent_data) + { + AXIS2_FREE(env->allocator, entry_impl->sent_data); + entry_impl->sent_data = NULL; + } + if (entry_impl->arrived_headers) + { + AXIS2_FREE(env->allocator, entry_impl->arrived_headers); + entry_impl->arrived_headers = NULL; + } + if (entry_impl->sent_headers) + { + AXIS2_FREE(env->allocator, entry_impl->sent_headers); + entry_impl->sent_headers = NULL; + } + + if (entry_impl) + { + AXIS2_FREE(env->allocator, entry_impl); + entry_impl = NULL; + } + + return AXIS2_SUCCESS; +} + +axis2_char_t *AXIS2_CALL +tcpmon_entry_arrived_time( + tcpmon_entry_t * entry, + const axutil_env_t * env) +{ + tcpmon_entry_impl_t *entry_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + entry_impl = AXIS2_INTF_TO_IMPL(entry); + + return entry_impl->arrived_time; +} + +axis2_char_t *AXIS2_CALL +tcpmon_entry_sent_time( + tcpmon_entry_t * entry, + const axutil_env_t * env) +{ + tcpmon_entry_impl_t *entry_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + entry_impl = AXIS2_INTF_TO_IMPL(entry); + + return entry_impl->sent_time; +} + +axis2_char_t *AXIS2_CALL +tcpmon_entry_time_diff( + tcpmon_entry_t * entry, + const axutil_env_t * env) +{ + tcpmon_entry_impl_t *entry_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + entry_impl = AXIS2_INTF_TO_IMPL(entry); + + return entry_impl->time_diff; +} + +axis2_char_t *AXIS2_CALL +tcpmon_entry_sent_data( + tcpmon_entry_t * entry, + const axutil_env_t * env) +{ + tcpmon_entry_impl_t *entry_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + entry_impl = AXIS2_INTF_TO_IMPL(entry); + + return entry_impl->sent_data; +} + +axis2_char_t *AXIS2_CALL +tcpmon_entry_sent_headers( + tcpmon_entry_t * entry, + const axutil_env_t * env) +{ + tcpmon_entry_impl_t *entry_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + entry_impl = AXIS2_INTF_TO_IMPL(entry); + + return entry_impl->sent_headers; +} + +axis2_char_t *AXIS2_CALL +tcpmon_entry_arrived_data( + tcpmon_entry_t * entry, + const axutil_env_t * env) +{ + tcpmon_entry_impl_t *entry_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + entry_impl = AXIS2_INTF_TO_IMPL(entry); + + return entry_impl->arrived_data; +} + +axis2_char_t *AXIS2_CALL +tcpmon_entry_arrived_headers( + tcpmon_entry_t * entry, + const axutil_env_t * env) +{ + tcpmon_entry_impl_t *entry_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + entry_impl = AXIS2_INTF_TO_IMPL(entry); + + return entry_impl->arrived_headers; +} + +axis2_bool_t AXIS2_CALL +tcpmon_entry_is_success( + tcpmon_entry_t * entry, + const axutil_env_t * env) +{ + tcpmon_entry_impl_t *entry_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + entry_impl = AXIS2_INTF_TO_IMPL(entry); + + return entry_impl->is_success; +} + +int AXIS2_CALL +tcpmon_entry_get_format_bit( + tcpmon_entry_t * entry, + const axutil_env_t * env) +{ + tcpmon_entry_impl_t *entry_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + entry_impl = AXIS2_INTF_TO_IMPL(entry); + + return entry_impl->format_bit; +} + +int AXIS2_CALL +tcpmon_entry_get_sent_data_length( + tcpmon_entry_t * entry, + const axutil_env_t * env) +{ + tcpmon_entry_impl_t *entry_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + entry_impl = AXIS2_INTF_TO_IMPL(entry); + + return entry_impl->sent_data_length; +} + +int AXIS2_CALL +tcpmon_entry_get_arrived_data_length( + tcpmon_entry_t * entry, + const axutil_env_t * env) +{ + tcpmon_entry_impl_t *entry_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + entry_impl = AXIS2_INTF_TO_IMPL(entry); + + return entry_impl->arrived_data_length; +} + +axis2_status_t AXIS2_CALL +tcpmon_entry_set_format_bit( + tcpmon_entry_t * entry, + const axutil_env_t * env, + int format_bit) +{ + tcpmon_entry_impl_t *entry_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + entry_impl = AXIS2_INTF_TO_IMPL(entry); + + entry_impl->format_bit = format_bit; + + return AXIS2_SUCCESS; +} + +/** implimentations for protected methods */ + +/** executes as new entry arises */ +void *AXIS2_CALL +tcpmon_entry_new_entry_funct( + axutil_thread_t * thd, + void *data) +{ + tcpmon_entry_request_data_t *req_data = (tcpmon_entry_request_data_t *) data; + const axutil_env_t *env = NULL; + int client_socket = -1; + int host_socket = -1; + tcpmon_session_t *session; + TCPMON_SESSION_TRANS_ERROR_FUNCT on_trans_fault_funct; + TCPMON_SESSION_NEW_ENTRY_FUNCT on_new_entry; + + axutil_stream_t *client_stream = NULL; + axutil_stream_t *host_stream = NULL; + int buffer_size = 0; + axis2_char_t *headers = NULL; + axis2_char_t *content = NULL; + axis2_char_t *buffer = NULL; + time_t now; + struct tm *localTime = NULL; + int arrived_secs = 0; + int sent_secs = 0; + int time_diff_i = 0; + int target_port = 0; + axis2_char_t *target_host = NULL; + int test_bit = 0; + int format_bit = 0; + tcpmon_entry_t *entry = NULL; + tcpmon_entry_impl_t *entry_impl = NULL; + + env = req_data->env; + client_socket = req_data->socket; + session = req_data->session; + on_trans_fault_funct = tcpmon_session_get_on_trans_fault(session, env); + on_new_entry = tcpmon_session_get_on_new_entry(session, env); + + entry = tcpmon_entry_create(env); + entry_impl = AXIS2_INTF_TO_IMPL(entry); + + target_port = TCPMON_SESSION_GET_TARGET_PORT(session, env); + target_host = TCPMON_SESSION_GET_TARGET_HOST(session, env); + if (target_port == -1 || target_host == NULL) + { + axutil_network_handler_close_socket(env, client_socket); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Missing target port and host" + "input missing"); + if (on_trans_fault_funct) + { + (on_trans_fault_funct) (env, "Missing target port and host"); + } + if (thd) + { + AXIS2_FREE(env->allocator, thd); + } + if (data) + { + AXIS2_FREE(env->allocator, (tcpmon_entry_request_data_t *)data); + } + return NULL; + } + client_stream = axutil_stream_create_socket(env, client_socket); + if (!client_stream) + { + axutil_network_handler_close_socket(env, client_socket); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Error in creating client stream" "handling response"); + + /** call the callback */ + if (on_trans_fault_funct) + { + (on_trans_fault_funct) (env, "error in creating the client stream"); + } + if (thd) + { + AXIS2_FREE(env->allocator, thd); + } + if (data) + { + AXIS2_FREE(env->allocator, (tcpmon_entry_request_data_t *)data); + } + return NULL; + } + + buffer = tcpmon_util_read_current_stream(env, client_stream, &buffer_size, + &headers, &content); + + headers =(char *) tcpmon_util_str_replace(env, headers,"localhost", target_host); + test_bit = TCPMON_SESSION_GET_TEST_BIT(session, env); + + if (test_bit) + { + tcpmon_util_write_to_file("reqest", buffer); + } + + format_bit = TCPMON_SESSION_GET_FORMAT_BIT(session, env); + TCPMON_ENTRY_SET_FORMAT_BIT(entry, env, format_bit); + + now = time(NULL); + localTime = localtime(&now); + + sprintf(entry_impl->sent_time, "%d:%d:%d", localTime->tm_hour, + localTime->tm_min, localTime->tm_sec); + sent_secs = + localTime->tm_hour * 60 * 60 + localTime->tm_min * 60 + + localTime->tm_sec; + + /*free ( localTime); */ + + entry_impl->sent_headers = headers; + entry_impl->sent_data = content; + entry_impl->sent_data_length = buffer_size; + + if (on_new_entry) + { + (on_new_entry) (env, entry, 0); + } + + host_socket = + (int)axutil_network_handler_open_socket(env, target_host, target_port); + if (-1 == host_socket) + { + axutil_stream_write(client_stream, env, NULL, 0); + axutil_stream_free(client_stream, env); + axutil_network_handler_close_socket(env, client_socket); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in creating host_socket" + "creating socket"); + + /** call the callback */ + if (on_trans_fault_funct) + { + (on_trans_fault_funct) (env, "error in creating the host socket"); + } + if (thd) + { + AXIS2_FREE(env->allocator, thd); + } + if (data) + { + AXIS2_FREE(env->allocator, (tcpmon_entry_request_data_t *)data); + } + return NULL; + } + + host_stream = axutil_stream_create_socket(env, host_socket); + if (!host_stream) + { + axutil_stream_write(client_stream, env, NULL, 0); + axutil_stream_free(client_stream, env); + axutil_network_handler_close_socket(env, client_socket); + axutil_network_handler_close_socket(env, host_socket); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in creating host stream" + "handling response"); + + /** call the callback */ + if (on_trans_fault_funct) + { + (on_trans_fault_funct) (env, "error in creating the host stream"); + } + if (thd) + { + AXIS2_FREE(env->allocator, thd); + } + if (data) + { + AXIS2_FREE(env->allocator, (tcpmon_entry_request_data_t *)data); + } + return NULL; + } + + axutil_stream_write(host_stream, env, buffer, buffer_size); + AXIS2_FREE(env->allocator, buffer); + + buffer = tcpmon_util_read_current_stream(env, host_stream, &buffer_size, + &headers, &content); + + test_bit = TCPMON_SESSION_GET_TEST_BIT(session, env); + if (test_bit) + { + tcpmon_util_write_to_file("response", buffer); + } + + now = time(NULL); + localTime = localtime(&now); + + sprintf(entry_impl->arrived_time, "%d:%d:%d", localTime->tm_hour, + localTime->tm_min, localTime->tm_sec); + arrived_secs = + localTime->tm_hour * 60 * 60 + localTime->tm_min * 60 + + localTime->tm_sec; + /*free ( localTime); */ + + time_diff_i = arrived_secs - sent_secs; + if (time_diff_i < 0) + { + time_diff_i += 24 * 60 * 60; + } + sprintf(entry_impl->time_diff, "%d sec(s)", time_diff_i); + + entry_impl->arrived_headers = headers; + entry_impl->arrived_data = content; + entry_impl->arrived_data_length = buffer_size; + if (buffer == NULL || buffer_size == 0) + { + entry_impl->is_success = 0; + } + else + { + entry_impl->is_success = 1; + } + + if (on_new_entry) + { + (on_new_entry) (env, entry, 1); + } + + axutil_stream_write(client_stream, env, buffer, buffer_size); + AXIS2_FREE(env->allocator, buffer); + + axutil_stream_free(client_stream, env); + axutil_stream_free(host_stream, env); + axutil_network_handler_close_socket(env, client_socket); + axutil_network_handler_close_socket(env, host_socket); + + if (entry_impl) + { + tcpmon_entry_free(&(entry_impl->entry), env); + } + if (thd) + { + AXIS2_FREE(env->allocator, thd); + } + if (data) + { + AXIS2_FREE(env->allocator, (tcpmon_entry_request_data_t *)data); + } + return NULL; +} + + diff --git a/tools/tcpmon/src/session.c b/tools/tcpmon/src/session.c new file mode 100644 index 0000000..29d4c78 --- /dev/null +++ b/tools/tcpmon/src/session.c @@ -0,0 +1,632 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "tcpmon_session_local.h" +#include "tcpmon_entry_local.h" +#include "tcpmon_util.h" + +/** + * @brief + */ +typedef struct tcpmon_session_impl +{ + tcpmon_session_t session; + int listen_port; + int target_port; + int test_bit; + int format_bit; + axis2_char_t *target_host; + TCPMON_SESSION_NEW_ENTRY_FUNCT on_new_entry_funct; + TCPMON_SESSION_TRANS_ERROR_FUNCT on_trans_fault_funct; + axutil_array_list_t *entries; + + axis2_bool_t is_running; +} +tcpmon_session_impl_t; + +typedef struct tcpmon_session_server_thread_data +{ + tcpmon_session_impl_t *session_impl; + const axutil_env_t *env; +} +tcpmon_session_server_thread_data_t; + +#define AXIS2_INTF_TO_IMPL(session) \ + ((tcpmon_session_impl_t *) session) +axutil_thread_t *server_thread = NULL; +tcpmon_session_server_thread_data_t *thread_data = NULL; + + +/************************* Function prototypes ********************************/ + +axis2_status_t AXIS2_CALL tcpmon_session_free( + tcpmon_session_t * session, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL tcpmon_session_set_listen_port( + tcpmon_session_t * session, + const axutil_env_t * env, + int listen_port); + +int AXIS2_CALL tcpmon_session_get_listen_port( + tcpmon_session_t * session, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL tcpmon_session_set_target_port( + tcpmon_session_t * session, + const axutil_env_t * env, + int target_port); + +int AXIS2_CALL tcpmon_session_get_target_port( + tcpmon_session_t * session, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL tcpmon_session_set_target_host( + tcpmon_session_t * session, + const axutil_env_t * env, + axis2_char_t * target_host); + +axis2_char_t *AXIS2_CALL tcpmon_session_get_target_host( + tcpmon_session_t * session, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL tcpmon_session_start( + tcpmon_session_t * session, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL tcpmon_session_stop( + tcpmon_session_t * session, + const axutil_env_t * env); + +axis2_status_t AXIS2_CALL tcpmon_session_on_new_entry( + tcpmon_session_t * session, + const axutil_env_t * env, + TCPMON_SESSION_NEW_ENTRY_FUNCT on_new_entry_funct); + +axis2_status_t AXIS2_CALL tcpmon_session_on_trans_fault( + tcpmon_session_t * session, + const axutil_env_t * env, + TCPMON_SESSION_TRANS_ERROR_FUNCT on_trans_fault_funct); + +int AXIS2_CALL tcpmon_session_get_test_bit( + tcpmon_session_t * session, + const axutil_env_t * env); + +int AXIS2_CALL tcpmon_session_set_test_bit( + tcpmon_session_t * session, + const axutil_env_t * env, + int test_bit); + +int AXIS2_CALL tcpmon_session_get_format_bit( + tcpmon_session_t * session, + const axutil_env_t * env); + +int AXIS2_CALL tcpmon_session_set_format_bit( + tcpmon_session_t * session, + const axutil_env_t * env, + int format_bit); + +/** internal implementations */ + +static void *AXIS2_THREAD_FUNC server_funct( + axutil_thread_t * thd, + void *data); + +/************************** End of function prototypes ************************/ + +tcpmon_session_t *AXIS2_CALL +tcpmon_session_create( + const axutil_env_t * env) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + session_impl = (tcpmon_session_impl_t *) AXIS2_MALLOC(env-> + allocator, + sizeof + (tcpmon_session_impl_t)); + + if (!session_impl) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + session_impl->listen_port = -1; + session_impl->target_port = -1; + session_impl->test_bit = -1; + session_impl->format_bit = 0; + session_impl->target_host = NULL; + + session_impl->on_new_entry_funct = NULL; + session_impl->on_trans_fault_funct = NULL; + session_impl->entries = + axutil_array_list_create(env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY); + + session_impl->session.ops = + AXIS2_MALLOC(env->allocator, sizeof(tcpmon_session_ops_t)); + if (!session_impl->session.ops) + { + tcpmon_session_free(&(session_impl->session), env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + + session_impl->is_running = AXIS2_FALSE; + session_impl->session.ops->free = tcpmon_session_free; + session_impl->session.ops->set_test_bit = tcpmon_session_set_test_bit; + session_impl->session.ops->get_test_bit = tcpmon_session_get_test_bit; + session_impl->session.ops->get_format_bit = tcpmon_session_get_format_bit; + session_impl->session.ops->set_format_bit = tcpmon_session_set_format_bit; + session_impl->session.ops->set_listen_port = tcpmon_session_set_listen_port; + session_impl->session.ops->get_listen_port = tcpmon_session_get_listen_port; + session_impl->session.ops->set_target_port = tcpmon_session_set_target_port; + session_impl->session.ops->get_target_port = tcpmon_session_get_target_port; + session_impl->session.ops->set_target_host = tcpmon_session_set_target_host; + session_impl->session.ops->get_target_host = tcpmon_session_get_target_host; + session_impl->session.ops->start = tcpmon_session_start; + session_impl->session.ops->stop = tcpmon_session_stop; + session_impl->session.ops->on_new_entry = tcpmon_session_on_new_entry; + session_impl->session.ops->on_trans_fault = tcpmon_session_on_trans_fault; + + return &(session_impl->session); +} + +/***************************Function implementation****************************/ + +axis2_status_t AXIS2_CALL +tcpmon_session_free( + tcpmon_session_t * session, + const axutil_env_t * env) +{ + tcpmon_session_impl_t *session_impl = NULL; + int entries_size = 0; + tcpmon_entry_t *entry = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + for (entries_size = axutil_array_list_size(session_impl->entries, env) - 1; + entries_size >= 0; entries_size--) + { + TCPMON_ENTRY_FREE(entry, env); + } + axutil_array_list_free(session_impl->entries, env); + + if (session->ops) + { + AXIS2_FREE(env->allocator, session->ops); + session->ops = NULL; + } + + if (session_impl->target_host) + { + AXIS2_FREE(env->allocator, session_impl->target_host); + session_impl->target_host = NULL; + } + + if (session_impl) + { + AXIS2_FREE(env->allocator, session_impl); + session_impl = NULL; + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +tcpmon_session_set_test_bit( + tcpmon_session_t * session, + const axutil_env_t * env, + int test_bit) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + session_impl = AXIS2_INTF_TO_IMPL(session); + session_impl->test_bit = test_bit; + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +tcpmon_session_get_test_bit( + tcpmon_session_t * session, + const axutil_env_t * env) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + return session_impl->test_bit; +} + +axis2_status_t AXIS2_CALL +tcpmon_session_set_format_bit( + tcpmon_session_t * session, + const axutil_env_t * env, + int format_bit) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + session_impl->format_bit = format_bit; + + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +tcpmon_session_get_format_bit( + tcpmon_session_t * session, + const axutil_env_t * env) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + return session_impl->format_bit; +} + +axis2_status_t AXIS2_CALL +tcpmon_session_set_listen_port( + tcpmon_session_t * session, + const axutil_env_t * env, + int listen_port) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + session_impl->listen_port = listen_port; + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +tcpmon_session_get_listen_port( + tcpmon_session_t * session, + const axutil_env_t * env) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, -1); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + return session_impl->listen_port; +} + +axis2_status_t AXIS2_CALL +tcpmon_session_set_target_port( + tcpmon_session_t * session, + const axutil_env_t * env, + int target_port) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + session_impl->target_port = target_port; + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +tcpmon_session_get_target_port( + tcpmon_session_t * session, + const axutil_env_t * env) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, -1); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + return session_impl->target_port; +} + +axis2_status_t AXIS2_CALL +tcpmon_session_set_target_host( + tcpmon_session_t * session, + const axutil_env_t * env, + axis2_char_t * target_host) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + session_impl->target_host = + (axis2_char_t *) axutil_strdup(env, target_host); + return AXIS2_SUCCESS; +} + +axis2_char_t *AXIS2_CALL +tcpmon_session_get_target_host( + tcpmon_session_t * session, + const axutil_env_t * env) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + return session_impl->target_host; +} + +axis2_status_t AXIS2_CALL +tcpmon_session_start( + tcpmon_session_t * session, + const axutil_env_t * env) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + thread_data = + (tcpmon_session_server_thread_data_t *) AXIS2_MALLOC(env->allocator, + sizeof + (tcpmon_session_server_thread_data_t)); + thread_data->session_impl = session_impl; + thread_data->env = env; + + session_impl->is_running = AXIS2_TRUE; + server_thread = axutil_thread_pool_get_thread(env->thread_pool, + server_funct, + (void *) thread_data); + if (!server_thread) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Thread creation failed" + "server thread"); + if (session_impl->on_trans_fault_funct) + { + (session_impl->on_trans_fault_funct) (env, + "error in creating the server thread"); + } + } + + axutil_thread_pool_thread_detach(env->thread_pool, server_thread); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +tcpmon_session_stop( + tcpmon_session_t * session, + const axutil_env_t * env) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + session_impl = AXIS2_INTF_TO_IMPL(session); + session_impl->is_running = AXIS2_FALSE; + + if (server_thread) + { + AXIS2_FREE(env->allocator, server_thread); + server_thread = NULL; + } + if (thread_data) + { + AXIS2_FREE(env->allocator, (tcpmon_session_server_thread_data_t *)thread_data); + thread_data = NULL; + } + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +tcpmon_session_on_new_entry( + tcpmon_session_t * session, + const axutil_env_t * env, + TCPMON_SESSION_NEW_ENTRY_FUNCT on_new_entry_funct) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + session_impl->on_new_entry_funct = on_new_entry_funct; + + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +tcpmon_session_on_trans_fault( + tcpmon_session_t * session, + const axutil_env_t * env, + TCPMON_SESSION_TRANS_ERROR_FUNCT on_trans_fault_funct) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + session_impl->on_trans_fault_funct = on_trans_fault_funct; + return AXIS2_SUCCESS; +} + +/** internal implementations */ +static void *AXIS2_THREAD_FUNC +server_funct( + axutil_thread_t * thd, + void *data) +{ + tcpmon_session_server_thread_data_t *thread_data = (tcpmon_session_server_thread_data_t *)data; + tcpmon_session_impl_t *session_impl = NULL; + const axutil_env_t *env = NULL; + int listen_socket = -1; + int socket = -1; + axutil_thread_t *request_thread = NULL; + tcpmon_entry_request_data_t *request_thread_data = NULL; + + session_impl = thread_data->session_impl; + env = thread_data->env; + + listen_socket = (int)axutil_network_handler_create_server_socket + (env, session_impl->listen_port); + if (-1 == listen_socket) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "error in creating the server socket, " + "port may be already occupied", "create socket"); + if (session_impl->on_trans_fault_funct) + { + (session_impl->on_trans_fault_funct) (env, + "error in creating the server socket, " + "port may be already occupied"); + } + if (thd) + { + AXIS2_FREE(env->allocator, server_thread); + server_thread = NULL; + } + if (data) + { + AXIS2_FREE(env->allocator, (tcpmon_session_server_thread_data_t *)data); + thread_data = NULL; + } + return NULL; + } + while (session_impl->is_running) + { + socket = (int)axutil_network_handler_svr_socket_accept(env, listen_socket); + if (socket == -1) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "error in creating the socket" "create socket"); + if (session_impl->on_trans_fault_funct) + { + (session_impl->on_trans_fault_funct) (env, + "error in creating the socket"); + } + break; + } + + request_thread_data = + (tcpmon_entry_request_data_t *) AXIS2_MALLOC(env->allocator, + sizeof + (tcpmon_entry_request_data_t)); + request_thread_data->env = env; + request_thread_data->socket = socket; + request_thread_data->session = (tcpmon_session_t *) session_impl; + + request_thread = axutil_thread_pool_get_thread(env->thread_pool, + tcpmon_entry_new_entry_funct, + (void *) + request_thread_data); + if (!request_thread) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Thread creation failed" + "request thread"); + if (session_impl->on_trans_fault_funct) + { + (session_impl->on_trans_fault_funct) (env, + "fail in creating the thread"); + } + break; + } + + axutil_thread_pool_thread_detach(env->thread_pool, request_thread); + } + axutil_network_handler_close_socket(env, listen_socket); + if (thd) + { + AXIS2_FREE(env->allocator, server_thread); + server_thread = NULL; + } + if (data) + { + AXIS2_FREE(env->allocator, (tcpmon_session_server_thread_data_t *)data); + thread_data = NULL; + } + return NULL; +} + +/* implementations for protected functions */ + +axis2_status_t +tcpmon_session_add_new_entry( + tcpmon_session_t * session, + const axutil_env_t * env, + tcpmon_entry_t * entry) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + axutil_array_list_add(session_impl->entries, env, entry); + return AXIS2_SUCCESS; + +} + +TCPMON_SESSION_TRANS_ERROR_FUNCT +tcpmon_session_get_on_trans_fault( + tcpmon_session_t * session, + const axutil_env_t * env) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + return session_impl->on_trans_fault_funct; +} + +TCPMON_SESSION_NEW_ENTRY_FUNCT +tcpmon_session_get_on_new_entry( + tcpmon_session_t * session, + const axutil_env_t * env) +{ + tcpmon_session_impl_t *session_impl = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + session_impl = AXIS2_INTF_TO_IMPL(session); + + return session_impl->on_new_entry_funct; +} diff --git a/tools/tcpmon/src/tcpmon.c b/tools/tcpmon/src/tcpmon.c new file mode 100644 index 0000000..567bfc3 --- /dev/null +++ b/tools/tcpmon/src/tcpmon.c @@ -0,0 +1,1037 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define SIZE 1024 +axis2_char_t *tcpmon_traffic_log = "tcpmon_traffic.log"; +axutil_env_t *system_env = NULL; +tcpmon_session_t *session = NULL; +char *target_host = NULL; + +int on_new_entry( + const axutil_env_t * env, + tcpmon_entry_t * entry, + int status); + +int on_new_entry_to_file( + const axutil_env_t * env, + tcpmon_entry_t * entry, + int status); + +int on_error_func( + const axutil_env_t * env, + char *error_message); + + +void sig_handler( + int signal); + +int resend_request( + const axutil_env_t * env, + int status); + +int +main( + int argc, + char **argv) +{ + axutil_env_t *env = NULL; + int c; + int listen_port = 9099, + target_port = 9090; /* the default port simple axis2 server is run on 9090 */ + int test_bit = 0; + int format_bit = 0; /* pretty print the request/response SOAP messages */ + int ii = 1; + + if (!axutil_strcmp(argv[1], "-h")) + { + printf + ("Usage : %s [-lp LISTEN_PORT] [-tp TARGET_PORT] [-th TARGET_HOST] [-f LOG_FILE] [options]\n", + argv[0]); + fprintf(stdout, " Options :\n"); + fprintf(stdout, + "\t-lp LISTEN_PORT \tport number to listen on, default is 9099\n"); + fprintf(stdout, + "\t-tp TARGET_PORT \tport number to connect and re-direct messages, default is 9090\n"); + fprintf(stdout, + "\t-th TARGET_HOST \ttarget host to connect, default is localhost\n"); + fprintf(stdout, + "\t-f LOG_FILE \tfile to write the messages to, default is %s\n", + tcpmon_traffic_log); + fprintf(stdout, + "\t--format \tenable xml formatting\n"); + fprintf(stdout, + "\t--test \tenable testing last request/response by logging it separately\n"); + fprintf(stdout, " Help :\n\t-h \tdisplay this help screen.\n\n"); + return 0; + } + + env = axutil_env_create_all("axis2_tcpmon.log", AXIS2_LOG_LEVEL_DEBUG); + + signal(SIGINT, sig_handler); + system_env = env; +#ifndef WIN32 + signal(SIGPIPE, sig_handler); +#endif + + target_host = axutil_strdup(env, "localhost"); + + while (ii < argc) + { + if (!strcmp("-lp", argv[ii])) + { + ii++; + if (argv[ii]) + { + listen_port = atoi(argv[ii++]); + if (listen_port == 0) + { + printf("INVALID value for listen port\n"); + printf("Use -h for help\n"); + AXIS2_FREE(env->allocator, target_host); + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + return 0; + } + } + } + else if (!strcmp("-tp", argv[ii])) + { + ii++; + if (argv[ii]) + { + target_port = atoi(argv[ii++]); + if (target_port == 0) + { + printf("INVALID value for target port\n"); + printf("Use -h for help\n"); + AXIS2_FREE(env->allocator, target_host); + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + return 0; + } + } + } + else if (!strcmp("-th", argv[ii])) + { + ii++; + if (argv[ii]) + { + AXIS2_FREE(env->allocator, target_host); + target_host = (char *) axutil_strdup(env, argv[ii++]); + } + } + else if (!strcmp("--test", argv[ii])) + { + ii++; + test_bit = 1; + } + else if (!strcmp("--format", argv[ii])) + { + ii++; + format_bit = 1; + } + else if (!strcmp("-f", argv[ii])) + { + ii++; + if (argv[ii]) + { + tcpmon_traffic_log = argv[ii++]; + } + } + else + { + printf("INVALID value for tcpmon \n"); + printf("Use -h for help\n"); + AXIS2_FREE(env->allocator, target_host); + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + return 0; + } + } + + if (!(listen_port && target_port && target_host)) + { + printf("ERROR: essential argument missing \n"); + printf + ("Please recheck values of listen_port (-lp), target_port(-tp) and target_host (-th)\n"); + AXIS2_FREE(env->allocator, target_host); + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + return 0; + } + + printf("Listen port : %d Target port : %d Target host: %s\n", + listen_port, target_port, target_host); + session = tcpmon_session_create(env); + + TCPMON_SESSION_SET_LISTEN_PORT(session, env, listen_port); + TCPMON_SESSION_SET_TARGET_PORT(session, env, target_port); + TCPMON_SESSION_SET_TARGET_HOST(session, env, target_host); + TCPMON_SESSION_ON_TRANS_FAULT(session, env, on_error_func); + + TCPMON_SESSION_ON_NEW_ENTRY(session, env, on_new_entry_to_file); + + TCPMON_SESSION_SET_TEST_BIT(session, env, test_bit); + TCPMON_SESSION_SET_FORMAT_BIT(session, env, format_bit); + TCPMON_SESSION_START(session, env); + + do + { + c = getchar(); + if (c == 'f') + { + format_bit = format_bit ? 0 : 1; + TCPMON_SESSION_SET_FORMAT_BIT(session, env, format_bit); + } + else if (c == 'r') + { + resend_request(env, 0); + } + } + while (c != 'q'); + printf("\n\n"); + + TCPMON_SESSION_STOP(session, env); + TCPMON_SESSION_FREE(session, env); + AXIS2_FREE(env->allocator, target_host); + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + return 0; +} + +int +on_new_entry_to_file( + const axutil_env_t * env, + tcpmon_entry_t * entry, + int status) +{ + char *plain_buffer = NULL; + char *formated_buffer = NULL; + int format = 0; + FILE *file; + char *convert = NULL; + char *uuid = NULL; + int resend = 0; + + file = fopen(tcpmon_traffic_log, "ab"); + + if (NULL == file) + { + printf("\ncould not create or open log-file\n"); + return -1; + } + + fprintf(file, + "\n= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =\n"); + + format = TCPMON_ENTRY_GET_FORMAT_BIT(entry, env); + + if (status == 0) + { + if (strstr(TCPMON_ENTRY_SENT_HEADERS(entry, env), AXIS2_HTTP_HEADER_USER_AGENT + ": " AXIS2_HTTP_HEADER_SERVER_AXIS2C "TCPMon\r\n")) + { + resend = 1; + } + plain_buffer = TCPMON_ENTRY_SENT_DATA(entry, env); + if (plain_buffer) /* this can be possible as no xml present */ + { + if (TCPMON_ENTRY_GET_SENT_DATA_LENGTH(entry, env) != + (int)strlen(TCPMON_ENTRY_SENT_HEADERS(entry, env)) + + (int)strlen(plain_buffer) + 4) + { + format = 0; /* mtom scenario */ + } + formated_buffer = tcpmon_util_format_as_xml + (env, plain_buffer, format); + } + else + { + formated_buffer = ""; + } + /* 2 screen */ + printf("\n\n%s\n", resend ? "RESENDING DATA..": "SENDING DATA.."); + printf("/* sending time = %s*/\n", TCPMON_ENTRY_SENT_TIME(entry, env)); + uuid = axutil_uuid_gen(env); + printf("/* message uuid = %s*/\n", uuid); + printf("---------------------\n"); + + if (format || TCPMON_ENTRY_GET_SENT_DATA_LENGTH(entry, env) == + (int)strlen(TCPMON_ENTRY_SENT_HEADERS(entry, env)) + + (int)strlen(formated_buffer) + 4) + { + printf("%s\n\n%s\n\n", TCPMON_ENTRY_SENT_HEADERS(entry, env), + formated_buffer); + } + else + { + int count = 0; + int printed = 0; + axis2_char_t *formated_buffer_temp = formated_buffer; + printf("%s\n\n", TCPMON_ENTRY_SENT_HEADERS(entry, env)); + count = TCPMON_ENTRY_GET_SENT_DATA_LENGTH(entry, env) - 4 - + (int)strlen(TCPMON_ENTRY_SENT_HEADERS(entry, env)); + while (count > printed) + { + int plen = 0; + plen = ((int)strlen(formated_buffer) + 1); + if (plen != 1) + { + printf("%s", formated_buffer); + } + printed += plen; + if (count > printed) + { + printf("%c", '\0'); + formated_buffer += plen; + } + } + formated_buffer = formated_buffer_temp; + } + + /* 2 file */ + fprintf(file, "%s\n", resend ? "RESENDING DATA..": "SENDING DATA.."); + fprintf(file, "/* sending time = %s*/\n", + TCPMON_ENTRY_SENT_TIME(entry, env)); + fprintf(file, "/* message uuid = %s*/\n", uuid); + AXIS2_FREE(env->allocator, uuid); + fprintf(file, "---------------------\n"); + + convert = axutil_strdup(env, TCPMON_ENTRY_SENT_HEADERS(entry, env)); + convert = tcpmon_util_str_replace(env, convert, "; ", ";\n\t"); + fprintf(file, "%s\r\n\r\n", convert); + if (convert) + { + AXIS2_FREE(env->allocator, convert); + convert = NULL; + } + if (strcmp(formated_buffer, "") != 0) + { + if (format || TCPMON_ENTRY_GET_SENT_DATA_LENGTH(entry, env) == + (int)strlen(TCPMON_ENTRY_SENT_HEADERS(entry, env)) + + (int)strlen(formated_buffer) + 4) + { + convert = axutil_strdup(env, formated_buffer); + convert = tcpmon_util_str_replace(env, convert, "><", ">\n<"); + fprintf(file, "%s", convert); + if (convert) + { + AXIS2_FREE(env->allocator, convert); + convert = NULL; + } + } + else + { + int count = 0; + int printed = 0; + count = TCPMON_ENTRY_GET_SENT_DATA_LENGTH(entry, env) - 4 - + (int)strlen(TCPMON_ENTRY_SENT_HEADERS(entry, env)); + while (count > printed) + { + int plen = 0; + plen = ((int)strlen(formated_buffer) + 1); + if (plen != 1) + { + fprintf(file, "%s", formated_buffer); + } + printed += plen; + if (count > printed) + { + fprintf(file, "%c", '\0'); + formated_buffer += plen; + } + } + } + } + } + if (status == 1) + { + plain_buffer = TCPMON_ENTRY_ARRIVED_DATA(entry, env); + if (plain_buffer) /* this can be possible as no xml present */ + { + if (TCPMON_ENTRY_GET_ARRIVED_DATA_LENGTH(entry, env) != + (int)strlen(TCPMON_ENTRY_ARRIVED_HEADERS(entry, env)) + + (int)strlen(plain_buffer) + 4) + { + format = 0; /* mtom scenario */ + } + formated_buffer = tcpmon_util_format_as_xml + (env, plain_buffer, format); + } + else + { + formated_buffer = ""; + } + /* 2 screen */ + printf("\n\n%s\n", "RETRIEVING DATA.."); + printf("/* retrieving time = %s*/\n", + TCPMON_ENTRY_ARRIVED_TIME(entry, env)); + printf("/* time throughput = %s*/\n", + TCPMON_ENTRY_TIME_DIFF(entry, env)); + printf("---------------------\n"); + + if (format || TCPMON_ENTRY_GET_ARRIVED_DATA_LENGTH(entry, env) == + (int)strlen(TCPMON_ENTRY_ARRIVED_HEADERS(entry, env)) + + (int)strlen(formated_buffer) + 4) + { + printf("%s\n\n%s\n\n", TCPMON_ENTRY_ARRIVED_HEADERS(entry, env), + formated_buffer); + } + else + { + int count = 0; + int printed = 0; + axis2_char_t *formated_buffer_temp = formated_buffer; + printf("%s\n\n", TCPMON_ENTRY_ARRIVED_HEADERS(entry, env)); + count = TCPMON_ENTRY_GET_ARRIVED_DATA_LENGTH(entry, env) - 4 - + (int)strlen(TCPMON_ENTRY_ARRIVED_HEADERS(entry, env)); + while (count > printed) + { + int plen = 0; + plen = ((int)strlen(formated_buffer) + 1); + if (plen != 1) + { + printf("%s", formated_buffer); + } + printed += plen; + if (count > printed) + { + printf("%c", '\0'); + formated_buffer += plen; + } + } + formated_buffer = formated_buffer_temp; + } + + /* 2 file */ + fprintf(file, "%s\n", "RETRIEVING DATA.."); + fprintf(file, "/* retrieving time = %s*/\n", + TCPMON_ENTRY_ARRIVED_TIME(entry, env)); + fprintf(file, "/* time throughput = %s*/\n", + TCPMON_ENTRY_TIME_DIFF(entry, env)); + fprintf(file, "---------------------\n"); + + convert = axutil_strdup(env, TCPMON_ENTRY_ARRIVED_HEADERS(entry, env)); + convert = tcpmon_util_str_replace(env, convert, "; ", ";\n\t"); + fprintf(file, "%s\r\n\r\n", convert); + if (convert) + { + AXIS2_FREE(env->allocator, convert); + convert = NULL; + } + if (strcmp(formated_buffer, "") != 0) + { + if (format || TCPMON_ENTRY_GET_ARRIVED_DATA_LENGTH(entry, env) == + (int)strlen(TCPMON_ENTRY_ARRIVED_HEADERS(entry, env)) + + (int)strlen(formated_buffer) + 4) + { + convert = axutil_strdup(env, formated_buffer); + convert = tcpmon_util_str_replace(env, convert, "><", ">\n<"); + fprintf(file, "%s", convert); + if (convert) + { + AXIS2_FREE(env->allocator, convert); + convert = NULL; + } + } + else + { + int count = 0; + int printed = 0; + count = TCPMON_ENTRY_GET_ARRIVED_DATA_LENGTH(entry, env) - 4 - + (int)strlen(TCPMON_ENTRY_ARRIVED_HEADERS(entry, env)); + while (count > printed) + { + int plen = 0; + plen = ((int)strlen(formated_buffer) + 1); + if (plen != 1) + { + fprintf(file, "%s", formated_buffer); + } + printed += plen; + if (count > printed) + { + fprintf(file, "%c", '\0'); + formated_buffer += plen; + } + } + } + } + } + fclose(file); + return 0; +} + +int +resend_request( + const axutil_env_t * env, + int status) +{ + FILE *file; + axis2_char_t *uuid = NULL; + axis2_char_t *buffer = NULL; + int read_len = 0; + + if (status == 0) + { + int c; + int i = 0; + do + { + c = getchar(); + } + while (c == ' '); + uuid = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * 37); + for (i = 0; i < 36; i++) + { + if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || c == '-') + { + uuid[i] = (axis2_char_t)c; + } + else if (c >= 'A' && c <= 'F') + { + uuid[i] = (axis2_char_t)(c + 32); + } + else + { + return 0; + } + c = getchar(); + } + uuid[i] = '\0'; + } + + file = fopen(tcpmon_traffic_log, "rb"); + + if (!file) + { + printf("\ncould not create or open log-file\n"); + return -1; + } + + buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * SIZE); + if (!buffer) + { + printf("\ngimme more memory\n"); + return -1; + } + buffer[SIZE - 1] = '\0'; + + read_len = (int)fread(buffer, sizeof(char), SIZE - 1, file); + + while(read_len) + { + axis2_char_t *search = "/* message uuid = "; + axis2_char_t *tmp1 = NULL; + axis2_char_t *tmp2 = NULL; + axis2_char_t *tmp3 = NULL; + axis2_char_t *uuid_match = NULL; + int offset = 0; + int loop_state = 1; + int end_reached = 0; + int rounds = 0; + + offset = (int)strlen(search); + tmp3 = buffer; + if (read_len >= SIZE) + { + AXIS2_FREE(env->allocator, buffer); + AXIS2_FREE(env->allocator, uuid); + printf("\nbuffer overflow\n"); + return -1; + } + if (read_len < SIZE - 1) + { + end_reached = 1; + } + while (loop_state) + { + int temp_len = 0; + tmp1 = strstr(tmp3, search); + temp_len = (int)strlen(tmp3) + 1; + /* loop below is for mtom cases */ + while (!tmp1 && (read_len - rounds > temp_len)) + { + tmp3 += (int)strlen(tmp3) + 1; + tmp1 = strstr(tmp3, search); + temp_len += (int)strlen(tmp3) + 1; + } + if (!tmp1) + { + if (end_reached) + { + break; + } + memmove(buffer, buffer + (SIZE - 1 - offset), offset); + read_len = (int)fread(buffer + offset, sizeof(char), + SIZE - 1 - offset, file) + offset; + break; + } + else + { + rounds = (int)(tmp1 - tmp3) + offset + 36; + tmp3 = tmp1 + offset + 36; + } + if (read_len - offset - 36 < (int)(tmp1 - buffer)) + { + if (end_reached) + { + break; + } + offset += 36; + memmove(buffer, buffer + (SIZE - 1 - offset), offset); + read_len = (int)fread(buffer + offset, sizeof(char), + SIZE - 1 - offset, file) + offset; + break; + } + tmp2 = tmp1 + offset; + uuid_match = AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * 37); + if (!uuid_match) + { + printf("\ngimme more memory\n"); + return -1; + } + memcpy(uuid_match, tmp2, 36); + uuid_match[36] = '\0'; + if (!axutil_strcasecmp(uuid_match, uuid)) + { + axis2_char_t *header_str = "*/\n---------------------\n"; + axis2_char_t *footer_str = + "\n= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ="; + int seek_len = 0; + int has_raw_binary = 0; + axis2_char_t *request_buffer = NULL; + AXIS2_FREE(env->allocator, uuid_match); + AXIS2_FREE(env->allocator, uuid); + end_reached = 1; + tmp2 += 36; + offset = (int)strlen(header_str); + if (read_len - offset < (int)(tmp2 - buffer)) + { + seek_len = (int)(tmp2 - buffer) + offset - read_len; + if (seek_len > 0) + { + read_len = fread(buffer, sizeof(char), seek_len, file); + } + seek_len = 0; + } + else + { + seek_len = read_len - (int)(tmp2 - buffer) - offset; + } + request_buffer = AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * (48 * 1024 + 1)); + if (!request_buffer) + { + printf("\ngimme more memory\n"); + return -1; + } + if (seek_len > 0) + { + memcpy(request_buffer, buffer + (read_len - seek_len), seek_len); + } + read_len = (int)fread(request_buffer + seek_len, + sizeof(char), 48 * 1024 - seek_len, file) + seek_len; + tmp1 = NULL; + tmp3 = request_buffer; + tmp1 = strstr(tmp3, footer_str); + temp_len = (int)strlen(tmp3) + 1; + /* loop below is for mtom cases */ + while (!tmp1 && (read_len > temp_len)) + { + if (!has_raw_binary) + { + has_raw_binary = 1; + } + tmp3 += (int)strlen(tmp3) + 1; + tmp1 = strstr(tmp3, footer_str); + temp_len += (int)strlen(tmp3) + 1; + } + if (tmp1) + { + axis2_char_t *req_header = NULL; + axis2_char_t *req_payload = NULL; + int req_content_len = 0; + req_content_len = (int)(tmp1 - request_buffer) - 4; + *tmp1 = '\0'; + tmp1 = NULL; + tmp1 = strstr(request_buffer, "\r\n\r\n"); + if (tmp1) + { + axis2_char_t *listen_host = "localhost"; + int write_socket = -1; + axutil_stream_t *write_stream = NULL; + tmp1 += 2; + *tmp1 = '\0'; + req_payload = tmp1 + 2; + tmp1 = axutil_strdup(env, request_buffer); + req_content_len -= (int)strlen(tmp1); + tmp1 = tcpmon_util_str_replace(env, tmp1, ";\n\t", "; "); + req_header = tmp1; + tmp2 = strstr(req_header, AXIS2_HTTP_HEADER_USER_AGENT ":"); + if (tmp2) + { + tmp3 = strstr(tmp2, "\r\n"); + if (tmp3) + { + int header_len = 0; + axis2_char_t *user_agent = AXIS2_HTTP_HEADER_USER_AGENT + ": " AXIS2_HTTP_HEADER_SERVER_AXIS2C " TCPMon"; + header_len = (int)(tmp3 - tmp2) + 2; + tmp1 = AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * header_len + 1); + memcpy(tmp1, tmp2, header_len); + tmp1[header_len] = '\0'; + header_len = 2 + (int)strlen(user_agent); + tmp2 = AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * (header_len + 1)); + sprintf(tmp2, "%s\r\n", user_agent); + req_header = tcpmon_util_str_replace(env, req_header, tmp1, tmp2); + AXIS2_FREE(env->allocator, tmp1); + AXIS2_FREE(env->allocator, tmp2); + tmp1 = NULL; + tmp2 = NULL; + } + } + if (!has_raw_binary) + { + tmp2 = strstr(req_header, AXIS2_HTTP_HEADER_CONTENT_LENGTH ":"); + if (tmp2) + { + tmp3 = strstr(tmp2, "\r\n"); + if (tmp3) + { + int header_len = 0; + header_len = (int)(tmp3 - tmp2) + 2; + tmp1 = AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * header_len + 1); + memcpy(tmp1, tmp2, header_len); + tmp1[header_len] = '\0'; + tmp2 = AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * (header_len + 2)); + req_content_len = (int)strlen(req_payload); + sprintf(tmp2, "%s%d\r\n", AXIS2_HTTP_HEADER_CONTENT_LENGTH + ": ", req_content_len); + req_header = tcpmon_util_str_replace(env, req_header, tmp1, tmp2); + AXIS2_FREE(env->allocator, tmp1); + AXIS2_FREE(env->allocator, tmp2); + tmp1 = NULL; + tmp2 = NULL; + } + } + } + tmp2 = strstr(req_header, AXIS2_HTTP_HEADER_HOST ":"); + if (tmp2) + { + tmp3 = strstr(tmp2, "\r\n"); + if (tmp3) + { + int header_len = 0; + header_len = (int)(tmp3 - tmp2) + 2; + tmp1 = AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * header_len + 1); + memcpy(tmp1, tmp2, header_len); + tmp1[header_len] = '\0'; + header_len = 16 + (int)strlen(target_host); + tmp2 = AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * (header_len + 1)); + sprintf(tmp2, "%s%s:%d\r\n", AXIS2_HTTP_HEADER_HOST ": ", target_host, + TCPMON_SESSION_GET_LISTEN_PORT(session, env)); + req_header = tcpmon_util_str_replace(env, req_header, tmp1, tmp2); + AXIS2_FREE(env->allocator, tmp1); + AXIS2_FREE(env->allocator, tmp2); + tmp1 = NULL; + tmp2 = NULL; + } + } + write_socket = + (int)axutil_network_handler_open_socket(env, listen_host, + TCPMON_SESSION_GET_LISTEN_PORT(session, env)); + if (write_socket == -1) + { + printf("\nerror in creating socket\n"); + } + else + { + write_stream = axutil_stream_create_socket(env, write_socket); + } + if (!write_stream) + { + printf("\nerror in creating stream\n"); + } + else + { + axutil_stream_write(write_stream, env, req_header, strlen(req_header)); + axutil_stream_write(write_stream, env, "\r\n", 2); + axutil_stream_write(write_stream, env, req_payload, req_content_len); + axutil_stream_free(write_stream, env); + axutil_network_handler_close_socket(env, write_socket); + } + AXIS2_FREE(env->allocator, req_header); + } + } + else if (read_len == 48 * 1024) + { + printf("\nrequest size greater than buffer\n"); + } + AXIS2_FREE(env->allocator, request_buffer); + break; + } + AXIS2_FREE(env->allocator, uuid_match); + } + if (end_reached) + { + break; + } + } + AXIS2_FREE(env->allocator, buffer); + + fclose(file); + return 0; +} + +int +on_new_entry( + const axutil_env_t * env, + tcpmon_entry_t * entry, + int status) +{ + char *plain_buffer = NULL; + char *formated_buffer = NULL; + int format = 0; + char *uuid = NULL; + int resend = 0; + + format = TCPMON_ENTRY_GET_FORMAT_BIT(entry, env); + + if (status == 0) + { + if (strstr(TCPMON_ENTRY_SENT_HEADERS(entry, env), + AXIS2_HTTP_HEADER_USER_AGENT ": "\ + AXIS2_HTTP_HEADER_SERVER_AXIS2C " TCPMon\r\n")) + { + resend = 1; + } + plain_buffer = TCPMON_ENTRY_SENT_DATA(entry, env); + if (plain_buffer) /* this can be possible as no xml present */ + { + if (TCPMON_ENTRY_GET_SENT_DATA_LENGTH(entry, env) == + (int)strlen(TCPMON_ENTRY_SENT_HEADERS(entry, env)) + + (int)strlen(plain_buffer) + 4) + { + format = 0; /* mtom scenario */ + } + formated_buffer = tcpmon_util_format_as_xml + (env, plain_buffer, format); + } + else + { + formated_buffer = ""; + } + printf("\n\n%s\n", resend ? "RESENDING DATA..": "SENDING DATA.."); + printf("/* sending time = %s*/\n", TCPMON_ENTRY_SENT_TIME(entry, env)); + uuid = axutil_uuid_gen(env); + printf("/* message uuid = %s*/\n", uuid); + AXIS2_FREE(env->allocator, uuid); + printf("---------------------\n"); + + if (format || TCPMON_ENTRY_GET_SENT_DATA_LENGTH(entry, env) == + (int)strlen(TCPMON_ENTRY_SENT_HEADERS(entry, env)) + + (int)strlen(formated_buffer) + 4) + { + printf("%s\n\n%s\n\n", TCPMON_ENTRY_SENT_HEADERS(entry, env), + formated_buffer); + } + else + { + int count = 0; + int printed = 0; + axis2_char_t *formated_buffer_temp = formated_buffer; + printf("%s\n", TCPMON_ENTRY_SENT_HEADERS(entry, env)); + count = TCPMON_ENTRY_GET_SENT_DATA_LENGTH(entry, env) - 4 - + (int)strlen(TCPMON_ENTRY_SENT_HEADERS(entry, env)); + while (count > printed) + { + int plen = 0; + plen = ((int)strlen(formated_buffer) + 1); + if (plen != 1) + { + printf("%s", formated_buffer); + } + printed += plen; + if (count > printed) + { + printf("%c", '\0'); + formated_buffer += plen; + } + } + formated_buffer = formated_buffer_temp; + } + } + if (status == 1) + { + plain_buffer = TCPMON_ENTRY_ARRIVED_DATA(entry, env); + if (plain_buffer) /* this can be possible as no xml present */ + { + if (TCPMON_ENTRY_GET_ARRIVED_DATA_LENGTH(entry, env) == + (int)strlen(TCPMON_ENTRY_ARRIVED_HEADERS(entry, env)) + + (int)strlen(plain_buffer) + 4) + { + format = 0; /* mtom scenario */ + } + formated_buffer = tcpmon_util_format_as_xml + (env, plain_buffer, format); + } + else + { + formated_buffer = ""; + } + printf("\n\n%s\n", "RETRIEVING DATA.."); + printf("/* retrieving time = %s*/\n", + TCPMON_ENTRY_ARRIVED_TIME(entry, env)); + printf("/* time throughput = %s*/\n", + TCPMON_ENTRY_TIME_DIFF(entry, env)); + printf("---------------------\n"); + + if (format || TCPMON_ENTRY_GET_ARRIVED_DATA_LENGTH(entry, env) == + (int)strlen(TCPMON_ENTRY_ARRIVED_HEADERS(entry, env)) + + (int)strlen(formated_buffer) + 4) + { + printf("%s\n\n%s\n\n", TCPMON_ENTRY_ARRIVED_HEADERS(entry, env), + formated_buffer); + } + else + { + int count = 0; + int printed = 0; + axis2_char_t *formated_buffer_temp = formated_buffer; + printf("%s\n", TCPMON_ENTRY_ARRIVED_HEADERS(entry, env)); + count = TCPMON_ENTRY_GET_ARRIVED_DATA_LENGTH(entry, env) - 4 - + (int)strlen(TCPMON_ENTRY_ARRIVED_HEADERS(entry, env)); + while (count > printed) + { + int plen = 0; + plen = ((int)strlen(formated_buffer) + 1); + if (plen != 1) + { + printf("%s", formated_buffer); + } + printed += plen; + if (count > printed) + { + printf("%c", '\0'); + formated_buffer += plen; + } + } + formated_buffer = formated_buffer_temp; + } + } + return 0; +} + +int +on_error_func( + const axutil_env_t * env, + char *error_message) +{ + fprintf(stderr, "ERROR: %s\n", error_message); + return 0; +} + + +/** + * Signal handler + */ +void +sig_handler( + int signal) +{ + + if (!system_env) + { + AXIS2_LOG_ERROR(system_env->log, AXIS2_LOG_SI, + "Received signal %d, unable to proceed system_env is NULL,\ + system exit with -1", signal); + _exit (-1); + } + + switch (signal) + { + case SIGINT: + { + AXIS2_LOG_INFO(system_env->log, "Received signal SIGINT. Utility " + "shutting down"); + printf("\n\n"); + TCPMON_SESSION_STOP(session, system_env); + TCPMON_SESSION_FREE(session, system_env); + AXIS2_FREE(system_env->allocator, target_host); + if (system_env) + { + axutil_env_free(system_env); + } + exit(0); + } +#ifndef WIN32 + case SIGPIPE: + { + AXIS2_LOG_INFO(system_env->log, "Received signal SIGPIPE. Operation " + "aborted"); + return; + } +#endif + case SIGSEGV: + { + fprintf(stderr, "Received deadly signal SIGSEGV. Terminating\n"); + _exit(-1); + } + } +} + diff --git a/tools/tcpmon/src/tcpmon_entry_local.h b/tools/tcpmon/src/tcpmon_entry_local.h new file mode 100644 index 0000000..8ba9c6a --- /dev/null +++ b/tools/tcpmon/src/tcpmon_entry_local.h @@ -0,0 +1,16 @@ +#include +#include "tcpmon_entry.h" +#include "tcpmon_session_local.h" + +typedef struct tcpmon_entry_request_data +{ + const axutil_env_t *env; + int socket; + tcpmon_session_t *session; +} +tcpmon_entry_request_data_t; + +void *AXIS2_CALL +tcpmon_entry_new_entry_funct( + axutil_thread_t * thd, + void *data); diff --git a/tools/tcpmon/src/tcpmon_session_local.h b/tools/tcpmon/src/tcpmon_session_local.h new file mode 100644 index 0000000..eee9cc6 --- /dev/null +++ b/tools/tcpmon/src/tcpmon_session_local.h @@ -0,0 +1,15 @@ +#include +#include + +axis2_status_t tcpmon_session_add_new_entry( + tcpmon_session_t * session, + const axutil_env_t * env, + tcpmon_entry_t * entry); + +TCPMON_SESSION_TRANS_ERROR_FUNCT tcpmon_session_get_on_trans_fault( + tcpmon_session_t * session, + const axutil_env_t * env); + +TCPMON_SESSION_NEW_ENTRY_FUNCT tcpmon_session_get_on_new_entry( + tcpmon_session_t * session, + const axutil_env_t * env); diff --git a/tools/tcpmon/src/util.c b/tools/tcpmon/src/util.c new file mode 100644 index 0000000..d4a73ee --- /dev/null +++ b/tools/tcpmon/src/util.c @@ -0,0 +1,806 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include + +#define START_ELEMENT 1 +#define CHAR_VALUE 2 +#define END_ELEMENT 3 +#define EMPTY_ELEMENT 4 + +typedef struct tcpmon_util_allocator +{ + int allocated; + int index; + axis2_char_t *buffer; +} +tcpmon_util_allocator_t; + +/*static void add_string(const axutil_env_t* env, + tcpmon_util_allocator_t* allocator, + axis2_char_t* string); +*/ + +/*static void add_axis2_char_t(const axutil_env_t* env, + tcpmon_util_allocator_t* allocator, + axis2_char_t c, + int turns); +*/ +axis2_char_t * +tcpmon_util_format_as_xml( + const axutil_env_t * env, + axis2_char_t * data, + int format) +{ + if (format) + { + int c; + int tab_pos = 0; + int has_value = 0; + int has_space = 0; + int start_ele = 0; + int prev_case = 0; + int buffer_size = 0; + + axis2_char_t *out; + + axiom_xml_reader_t *xml_reader = NULL; + + buffer_size = 2 * ((int)strlen(data)); + /* We are sure that the difference lies within the int range */ + out = AXIS2_MALLOC(env->allocator, buffer_size * sizeof(axis2_char_t)); + + if (data) + { + int size = 0; + size = (int)strlen(data); + /* We are sure that the difference lies within the int range */ + xml_reader = + axiom_xml_reader_create_for_memory(env, data, size, "utf-8", + AXIS2_XML_PARSER_TYPE_BUFFER); + if (!xml_reader) + return NULL; + } + + axiom_xml_reader_init(); + + while ((c = axiom_xml_reader_next(xml_reader, env)) != -1) + { + switch (c) + { + case AXIOM_XML_READER_START_DOCUMENT: + { + int ix; + + tcpmon_util_strcat(out, " 0; ix--) + { + axis2_char_t *attr_prefix; + axis2_char_t *attr_name; + axis2_char_t *attr_value; + + attr_prefix = + (axis2_char_t *) + axiom_xml_reader_get_attribute_prefix_by_number + (xml_reader, env, ix); + if (attr_prefix) + { + tcpmon_util_strcat(out, attr_prefix, &buffer_size, env); + tcpmon_util_strcat(out, ":", &buffer_size, env); + } + + attr_name = + (axis2_char_t *) + axiom_xml_reader_get_attribute_name_by_number + (xml_reader, env, ix); + if (attr_name) + { + tcpmon_util_strcat(out, attr_name, &buffer_size, env); + tcpmon_util_strcat(out, "=\"", &buffer_size, env); + } + + attr_value = + (axis2_char_t *) + axiom_xml_reader_get_attribute_value_by_number + (xml_reader, env, ix); + if (attr_value) + { + tcpmon_util_strcat(out, attr_value, &buffer_size, env); + tcpmon_util_strcat(out, "\"", &buffer_size, env); + } + } + + printf("?>"); + } + break; + case AXIOM_XML_READER_START_ELEMENT: + { + int i, + ix, + has_prefix = 0; + + axis2_char_t *ele_name; + axis2_char_t *ele_prefix; + + prev_case = START_ELEMENT; + + has_value = 0; + has_space = 0; + + if (start_ele != 0) + tcpmon_util_strcat(out, "\n", &buffer_size, env); + + for (i = 0; i < tab_pos; i++) + tcpmon_util_strcat(out, "\t", &buffer_size, env); + + tcpmon_util_strcat(out, "<", &buffer_size, env); + + ele_prefix = + (axis2_char_t *) axiom_xml_reader_get_prefix(xml_reader, + env); + if (ele_prefix) + { + tcpmon_util_strcat(out, ele_prefix, &buffer_size, env); + tcpmon_util_strcat(out, ":", &buffer_size, env); + } + + ele_name = + (axis2_char_t *) axiom_xml_reader_get_name(xml_reader, + env); + if (ele_name) + { + tcpmon_util_strcat(out, ele_name, &buffer_size, env); + } + + ix = axiom_xml_reader_get_attribute_count(xml_reader, env); + for (; ix > 0; ix--) + { + axis2_char_t *attr_prefix; + axis2_char_t *attr_name; + axis2_char_t *attr_value; + + attr_prefix = + (axis2_char_t *) + axiom_xml_reader_get_attribute_prefix_by_number + (xml_reader, env, ix); + if (attr_prefix) + { + has_prefix = 1; + tcpmon_util_strcat(out, " ", &buffer_size, env); + tcpmon_util_strcat(out, attr_prefix, &buffer_size, env); + tcpmon_util_strcat(out, ":", &buffer_size, env); + } + + attr_name = + (axis2_char_t *) + axiom_xml_reader_get_attribute_name_by_number + (xml_reader, env, ix); + if (attr_name) + { + if (has_prefix) + { + tcpmon_util_strcat(out, attr_name, &buffer_size, + env); + tcpmon_util_strcat(out, "=\"", &buffer_size, env); + } + else + { + tcpmon_util_strcat(out, " ", &buffer_size, env); + tcpmon_util_strcat(out, attr_name, &buffer_size, + env); + tcpmon_util_strcat(out, "=\"", &buffer_size, env); + } + + has_prefix = 0; + } + + attr_value = + (axis2_char_t *) + axiom_xml_reader_get_attribute_value_by_number + (xml_reader, env, ix); + if (attr_value) + { + tcpmon_util_strcat(out, attr_value, &buffer_size, env); + tcpmon_util_strcat(out, "\"", &buffer_size, env); + } + } + + tcpmon_util_strcat(out, ">", &buffer_size, env); + + tab_pos++; + start_ele = 1; + } + break; + case AXIOM_XML_READER_CHARACTER: + { + axis2_char_t *ele_value; + + prev_case = CHAR_VALUE; + + ele_value = axiom_xml_reader_get_value(xml_reader, env); + if (ele_value) + tcpmon_util_strcat(out, ele_value, &buffer_size, env); + + has_value = 1; + + } + break; + case AXIOM_XML_READER_EMPTY_ELEMENT: + { + int i, + ix, + has_prefix = 0; + + axis2_char_t *ele_name; + axis2_char_t *ele_prefix; + + prev_case = EMPTY_ELEMENT; + + has_value = 0; + has_space = 0; + + if (start_ele != 0) + tcpmon_util_strcat(out, "\n", &buffer_size, env); + + for (i = 0; i < tab_pos; i++) + tcpmon_util_strcat(out, "\t", &buffer_size, env); + + tcpmon_util_strcat(out, "<", &buffer_size, env); + + ele_prefix = + (axis2_char_t *) axiom_xml_reader_get_prefix(xml_reader, + env); + if (ele_prefix) + { + tcpmon_util_strcat(out, ele_prefix, &buffer_size, env); + tcpmon_util_strcat(out, ":", &buffer_size, env); + } + + ele_name = + (axis2_char_t *) axiom_xml_reader_get_name(xml_reader, + env); + if (ele_name) + tcpmon_util_strcat(out, ele_name, &buffer_size, env); + + ix = axiom_xml_reader_get_attribute_count(xml_reader, env); + for (; ix > 0; ix--) + { + axis2_char_t *attr_prefix; + axis2_char_t *attr_name; + axis2_char_t *attr_value; + + attr_prefix = + (axis2_char_t *) + axiom_xml_reader_get_attribute_prefix_by_number + (xml_reader, env, ix); + if (attr_prefix) + { + has_prefix = 1; + tcpmon_util_strcat(out, " ", &buffer_size, env); + tcpmon_util_strcat(out, attr_prefix, &buffer_size, env); + tcpmon_util_strcat(out, ":", &buffer_size, env); + } + + attr_name = + (axis2_char_t *) + axiom_xml_reader_get_attribute_name_by_number + (xml_reader, env, ix); + if (attr_name) + { + if (has_prefix) + { + tcpmon_util_strcat(out, attr_name, &buffer_size, + env); + tcpmon_util_strcat(out, "=\"", &buffer_size, env); + } + else + { + tcpmon_util_strcat(out, " ", &buffer_size, env); + tcpmon_util_strcat(out, attr_name, &buffer_size, + env); + tcpmon_util_strcat(out, "=\"", &buffer_size, env); + } + has_prefix = 0; + } + + attr_value = + (axis2_char_t *) + axiom_xml_reader_get_attribute_value_by_number + (xml_reader, env, ix); + if (attr_value) + { + tcpmon_util_strcat(out, attr_value, &buffer_size, env); + tcpmon_util_strcat(out, "\"", &buffer_size, env); + } + } + + tcpmon_util_strcat(out, "/>", &buffer_size, env); + start_ele = 1; + } + break; + case AXIOM_XML_READER_END_ELEMENT: + { + int i; + + axis2_char_t *ele_prefix; + axis2_char_t *ele_name; + + tab_pos--; + + if (has_value == 0 && prev_case != START_ELEMENT) + { + tcpmon_util_strcat(out, "\n", &buffer_size, env); + for (i = 0; i < tab_pos; i++) + tcpmon_util_strcat(out, "\t", &buffer_size, env); + } + + has_value = 0; + + tcpmon_util_strcat(out, "", &buffer_size, env); + } + prev_case = END_ELEMENT; + + } + break; + } + } + return out; + } + return data; +} + +/*void add_string(const axutil_env_t* env, + tcpmon_util_allocator_t* allocator, + axis2_char_t* string) +{ + int additional_len = 0; + void* dest = NULL; + void* src = NULL; + int count = 0; + + additional_len = axutil_strlen(string) + 1; + if (allocator-> index + additional_len >= allocator-> allocated) + { + if (allocator-> allocated == 0) + { + allocator-> buffer = + AXIS2_MALLOC(env-> allocator, additional_len); + } + else + { + allocator-> buffer = + AXIS2_REALLOC(env-> allocator, allocator-> buffer, + allocator-> allocated + additional_len); + } + allocator-> allocated += additional_len; + } + + dest = allocator-> buffer + allocator-> index; + src = string; + count = additional_len; + memcpy(dest, src, count); + + allocator-> index += count - 1; +} +*/ + +/*void add_axis2_char_t(const axutil_env_t* env, + tcpmon_util_allocator_t* allocator, + axis2_char_t c, + int turns) +{ + int additional_len = 0; + + additional_len = turns + 1; + if (allocator-> index + additional_len >= allocator-> allocated) + { + if (allocator-> allocated == 0) + { + allocator-> buffer = + AXIS2_MALLOC(env-> allocator, additional_len); + } + else + { + allocator-> buffer = + AXIS2_REALLOC(env-> allocator, allocator-> buffer, + allocator-> allocated + additional_len); + } + allocator-> allocated += additional_len; + } + + memset(allocator-> buffer + allocator-> index, c, turns); + + allocator-> index += turns; + +} */ + +axis2_char_t * +tcpmon_util_strcat( + axis2_char_t * dest, + axis2_char_t * source, + int *buff_size, + const axutil_env_t * env) +{ + int cur_len = 0; + int source_len = 0; + + axis2_char_t *tmp; + cur_len = (int)strlen(dest); + /* We are sure that the difference lies within the int range */ + source_len = (int)strlen(source); + /* We are sure that the difference lies within the int range */ + + if ((*buff_size - cur_len) < source_len) + { + *buff_size = *buff_size + (*buff_size * 2); + tmp = + (axis2_char_t *) AXIS2_REALLOC(env->allocator, dest, + *buff_size * sizeof(axis2_char_t)); + dest = tmp; + strcat((char *) dest, (char *) source); + } + else + { + strcat((char *) dest, (char *) source); + } + + return dest; +} + +char * +tcpmon_util_str_replace( + const axutil_env_t *env, + char *str, + const char *search, + const char *replace) +{ + char *str_return = NULL; + char *str_tmp = NULL; + char *str_relic = NULL; + int size = ((int)strlen(str)) * 2; + /* We are sure that the difference lies within the int range */ + int addmem = size; + int diff = (int)(strlen(replace) - strlen(search)); + /* We are sure that the difference lies within the int range */ + + str_return = (char *) AXIS2_MALLOC(env->allocator, ((size + 1) * sizeof(char))); + str_tmp = (char *) AXIS2_MALLOC(env->allocator, (size * sizeof(char))); + + + if (str_return == NULL || str_tmp == NULL) + { + AXIS2_FREE(env->allocator, str_return); + str_return = NULL; + AXIS2_FREE(env->allocator, str_tmp); + str_tmp = NULL; + return "function tcpmon_util_str_replace : give me more memory"; + } + if (!strcmp(search, replace)) + { + AXIS2_FREE(env->allocator, str_return); + str_return = NULL; + AXIS2_FREE(env->allocator, str_tmp); + str_tmp = NULL; + return str; + } + + strcpy(str_return, str); + + while ((str_relic = strstr(str_return, search)) != NULL) + { + if ((int)strlen(str_return) + diff >= addmem) + /* We are sure that the difference lies within the int range */ + { + str_return = (char *) realloc(str_return, addmem += size); + str_tmp = (char *) realloc(str_tmp, addmem); + + if (str_return == NULL || str_tmp == NULL) + { + AXIS2_FREE(env->allocator, str_return); + str_return = NULL; + AXIS2_FREE(env->allocator, str_tmp); + str_tmp = NULL; + return "function tcpmon_str_replace : gimme more memory"; + } + } + + strcpy(str_tmp, replace); + strcat(str_tmp, (str_relic + strlen(search))); + *str_relic = '\0'; + + strcat(str_return, str_tmp); + } + + AXIS2_FREE(env->allocator, str_tmp); + str_tmp = NULL; + /* free(str); */ /* we are not allocating memory using str */ + str_return[addmem] = '\0'; + return (str_return); +} + + +axis2_char_t * +tcpmon_util_read_current_stream( + const axutil_env_t * env, + axutil_stream_t * stream, + int *stream_size, + axis2_char_t ** header, + axis2_char_t ** data) +{ + int read_size = 0; + axis2_char_t *buffer = NULL; + axis2_char_t *header_ptr = NULL; + axis2_char_t *body_ptr = NULL; + int header_found = 0; + int header_just_finished = 0; + int read = 0; + int header_width = 0; + int current_line_offset = 0; + int mtom_optimized = 0; + axis2_char_t *current_line = NULL; + int line_just_ended = 1; + axis2_char_t *length_char = 0; + int length = -1; + int chunked_encoded = 0; + int is_get = 0; + int zero_content_length = 0; + + buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t)); + *data = NULL; + *header = NULL; + do + { + buffer = AXIS2_REALLOC(env->allocator, buffer, + sizeof(axis2_char_t) * (read_size + 1)); + *(buffer + read_size) = '\0'; + read = axutil_stream_read(stream, env, buffer + read_size, 1); + + if (header_just_finished) + { + header_just_finished = 0; + header_width = read_size; + } + + /** identify the content lenth*/ + if (!header_found && *(buffer + read_size) == '\r') + { + *(buffer + read_size) = '\0'; + current_line = buffer + current_line_offset; + if (!mtom_optimized && strstr(current_line, "multipart/related")) + mtom_optimized = 1; + if (strstr(current_line, "Content-Length")) + { + length_char = strstr(current_line, ":"); + if (length_char) + { + length_char++; + length = atoi(length_char); + if (length == 0) + { + zero_content_length = 1; + } + } + } + if (strstr(current_line, "GET") || strstr(current_line, "HEAD") + || strstr(current_line, "DELETE")) + { + is_get = 1; + /** Captures GET style requests */ + } + *(buffer + read_size) = '\r'; + } + if (!header_found && line_just_ended) + { + line_just_ended = 0; + current_line_offset = read_size; + } + if (!header_found && *(buffer + read_size) == '\n') + { + line_just_ended = 1; /* set for the next loop to read */ + } + if (header_found) + { + length--; + } + if (header_found && + read_size >= 4 && + chunked_encoded == 1 && + *(buffer + read_size) == '\n' && + *(buffer + read_size - 1) == '\r' && + *(buffer + read_size - 2) == '\n' && + *(buffer + read_size - 3) == '\r' && + *(buffer + read_size - 4) == '0') + { + + length = 0; /** this occurs in chunked transfer encoding */ + } + + /** identify the end of the header */ + if (!header_found && + read_size >= 3 && + *(buffer + read_size) == '\n' && + *(buffer + read_size - 1) == '\r' && + *(buffer + read_size - 2) == '\n' && + *(buffer + read_size - 3) == '\r') + { + header_found = 1; + *(buffer + read_size - 3) = '\0'; + if (header_ptr) + { + AXIS2_FREE(env->allocator, header_ptr); + } + header_ptr = (axis2_char_t *) axutil_strdup(env, buffer); + header_just_finished = 1; + *(buffer + read_size - 3) = '\r'; + if (is_get && length == -1) + { + break; + } + } + read_size++; + if (!chunked_encoded && length < -1) + { + header_width = 0; + /* break; */ + + /** this is considered as transfer-encoding = chunked */ + chunked_encoded = 1; + header_found = 1; + *(buffer + read_size - 3) = '\0'; + if (header_ptr) + { + AXIS2_FREE(env->allocator, header_ptr); + } + header_ptr = (axis2_char_t *) axutil_strdup(env, buffer); + header_just_finished = 1; + *(buffer + read_size - 3) = '\r'; + } + if (!(*(buffer + read_size - 1))) + { + if (!mtom_optimized) + { + read_size--; + length = 0; + } + else + { + /**(buffer + read_size - 1) = ' ';*/ + } + } + } + while (length != 0); + + if (is_get) + { + read_size++; + } + else if (zero_content_length) + { + read_size += 3; + } + + buffer = AXIS2_REALLOC(env->allocator, buffer, + sizeof(axis2_char_t) * (read_size + 1)); + *(buffer + read_size) = '\0'; + + if (header_width != 0) + { + body_ptr = buffer + header_width; + if (body_ptr && *body_ptr) + { + if (mtom_optimized) + { + int count = read_size - (int)strlen(header_ptr) - 4; + int copied = 0; + int plen = 0; + axis2_char_t *temp = NULL; + temp = AXIS2_MALLOC(env->allocator, + sizeof(axis2_char_t) * count + 1); + while(count > copied) + { + plen = 0; + plen = ((int)strlen(body_ptr) + 1); + if (plen != 1) + { + sprintf(temp, "%s", body_ptr); + } + copied += plen; + if (count > copied) + { + temp += plen; + body_ptr += plen; + } + } + copied -= plen; + temp -= copied; + temp[count] = '\0'; + *data = temp; + } + else + { + *data = (axis2_char_t *) axutil_strdup(env, body_ptr); + } + } + body_ptr = NULL; + } + else + { + /** soap body part is unavailable */ + if (is_get) + { + *data = (axis2_char_t *) axutil_strdup(env, "\n"); + *(buffer + read_size - 1) = '\n'; + } + else if (zero_content_length) + { + *data = (axis2_char_t *) axutil_strdup(env, "\n"); + *(buffer + read_size - 3) = '\n'; + *(buffer + read_size - 2) = '\r'; + *(buffer + read_size - 1) = '\n'; + } + if (header_ptr) + { + AXIS2_FREE(env->allocator, header_ptr); + } + header_ptr = (axis2_char_t *) axutil_strdup(env, buffer); + } + + *header = header_ptr; + *stream_size = read_size; + return buffer; +} + + +int +tcpmon_util_write_to_file( + char *filename, + char *buffer) +{ + int size = 0; + if (filename) + { + FILE *fp = fopen(filename, "ab"); + size = (int)fwrite(buffer, 1, strlen(buffer), fp); + /* We are sure that the difference lies within the int range */ + fclose(fp); + } + return size; +} + diff --git a/tools/tcpmon/test/Makefile.am b/tools/tcpmon/test/Makefile.am new file mode 100644 index 0000000..85eb6ca --- /dev/null +++ b/tools/tcpmon/test/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = unit diff --git a/tools/tcpmon/test/unit/Makefile.am b/tools/tcpmon/test/unit/Makefile.am new file mode 100644 index 0000000..719bd16 --- /dev/null +++ b/tools/tcpmon/test/unit/Makefile.am @@ -0,0 +1,19 @@ +TESTS = +prgbindir=$(prefix)/bin/unit_test +prgbin_PROGRAMS = tcpmon_unit_test_suite + +tcpmon_unit_test_suite_SOURCES = main.c tcpmon_test.c + +tcpmon_unit_test_suite_LDADD = \ + $(top_builddir)/src/libaxis2_tcpmon.la \ + -L$(CUTEST_HOME)/lib \ + -lcutest \ + ../../../../util/src/libaxutil.la \ + ../../../../axiom/src/om/libaxis2_axiom.la \ + $(NULL) + + +INCLUDES = -I${CUTEST_HOME}/include \ + -I$(top_builddir)/include \ + -I ../../../../util/include \ + $(NULL) diff --git a/tools/tcpmon/test/unit/main.c b/tools/tcpmon/test/unit/main.c new file mode 100644 index 0000000..531ed66 --- /dev/null +++ b/tools/tcpmon/test/unit/main.c @@ -0,0 +1,44 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "tcpmon_test.h" + +void +RunAllTests( + void) +{ + CuString *output = CuStringNew(); + CuSuite *suite = CuSuiteNew(); + + CuSuiteAddSuite(suite, (CuSuite *) tcpmon_GetSuite()); + + CuSuiteRun(suite); + CuSuiteSummary(suite, output); + CuSuiteDetails(suite, output); + printf("%s\n", output->buffer); +} + +int +main( + void) +{ + RunAllTests(); + return 0; +} diff --git a/tools/tcpmon/test/unit/result b/tools/tcpmon/test/unit/result new file mode 100644 index 0000000..130ca3a --- /dev/null +++ b/tools/tcpmon/test/unit/result @@ -0,0 +1,14 @@ +F + +There was 1 failure: +1) test_format_xml: tcpmon_test.c:28: expected < + check for one step + + > but was < + check for one step + +í> + +!!!FAILURES!!! +Runs: 1 Passes: 0 Fails: 1 + diff --git a/tools/tcpmon/test/unit/tcpmon_test.c b/tools/tcpmon/test/unit/tcpmon_test.c new file mode 100644 index 0000000..f5ee7be --- /dev/null +++ b/tools/tcpmon/test/unit/tcpmon_test.c @@ -0,0 +1,85 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "tcpmon_test.h" +#include +#include + +#include + +void +test_format_xml( + CuTest * tc) +{ + axutil_env_t *env; + axutil_allocator_t *allocator; + axis2_char_t *input; + axis2_char_t *actual; + axis2_char_t *expected; + + allocator = axutil_allocator_init(NULL); + env = axutil_env_create(allocator); + + input = (char *) axutil_strdup(env, "check for one step"); + actual = (char *) tcpmon_util_format_as_xml(env, input); + expected = "\n" "\tcheck for one step\n" "\n"; + CuAssertStrEquals(tc, expected, actual); + free(actual); + free(input); + + input = + (char *) axutil_strdup(env, + "check for one step"); + actual = (char *) tcpmon_util_format_as_xml(env, input); + expected = + "\n" + "\t\n" + "\t\t\n" + "\t\t\tcheck for one step\n" + "\t\t\n" "\t\n" "\n"; + + CuAssertStrEquals(tc, expected, actual); + free(actual); + free(input); + + input = (char *) axutil_strdup(env, + "check for one step"); + actual = (char *) tcpmon_util_format_as_xml(env, input); + expected = "\n" + "\n" + "\t\n" + "\t\t\n" + "\t\t\tcheck for one step\n" + "\t\t\n" "\t\n" "\n"; + + CuAssertStrEquals(tc, expected, actual); + free(actual); + free(input); + +} + +CuSuite * +tcpmon_GetSuite( + ) +{ + CuSuite *suite = CuSuiteNew(); + SUITE_ADD_TEST(suite, test_format_xml); + return suite; +} diff --git a/tools/tcpmon/test/unit/tcpmon_test.h b/tools/tcpmon/test/unit/tcpmon_test.h new file mode 100644 index 0000000..66c2e0a --- /dev/null +++ b/tools/tcpmon/test/unit/tcpmon_test.h @@ -0,0 +1,9 @@ +#ifndef TCPMON_TEST_H +#define TCPMON_TEST_H + +#include + +CuSuite *tcpmon_GetSuite( +); + +#endif /* TCPMON_TEST_H */ diff --git a/util/AUTHORS b/util/AUTHORS new file mode 100644 index 0000000..e69de29 diff --git a/util/COPYING b/util/COPYING new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/util/COPYING @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/util/CREDITS b/util/CREDITS new file mode 100644 index 0000000..e69de29 diff --git a/util/ChangeLog b/util/ChangeLog new file mode 100644 index 0000000..10da7b3 --- /dev/null +++ b/util/ChangeLog @@ -0,0 +1,6 @@ +Apache Axis2/C Util + + * Seperated Util module from Axis2/C + +-- Axis2-C team Thu, 18 May 2006 + diff --git a/util/INSTALL b/util/INSTALL new file mode 100644 index 0000000..8654e1f --- /dev/null +++ b/util/INSTALL @@ -0,0 +1,14 @@ +Getting Axis2/C Utils source working on Linux +============================================= +Build the source +This can be done using the following command sequence: + ./configure + make + make install + use './configure --help' for options + +NOTE: If you don't provide a --prefix configure option, it will by default +install into /usr/local/axis2_util directory. + + + diff --git a/util/LICENSE b/util/LICENSE new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/util/LICENSE @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/util/Makefile.am b/util/Makefile.am new file mode 100644 index 0000000..a7b0aaa --- /dev/null +++ b/util/Makefile.am @@ -0,0 +1,11 @@ +datadir=$(prefix) +tmpincludedir=$(prefix)/include/axis2-1.6.0/ +includedir=$(prefix)/include/axis2-1.6.0/ +SUBDIRS = src $(TESTDIR) include +include_HEADERS=$(top_builddir)/include/*.h +tmpinclude_DATA=config.h +data_DATA= INSTALL README AUTHORS NEWS CREDITS LICENSE COPYING +EXTRA_DIST = build.sh autogen.sh CREDITS LICENSE +dist-hook: + rm -rf `find $(distdir)/ -type d -name .svn` + rm -rf `find $(distdir)/ -type d -name .deps` diff --git a/util/NEWS b/util/NEWS new file mode 100644 index 0000000..6466fb3 --- /dev/null +++ b/util/NEWS @@ -0,0 +1,7 @@ +Util module seperated from Axis2/C +====================================== +Initially this was inside Axis2/C code base as util directory. As the +project expands it's moved to the top level with the view of making it a +seperate Apache project called Apache Axis2/C util. + +-- Axis2-C team Thu, 18 May 2006 diff --git a/util/README b/util/README new file mode 100644 index 0000000..1779690 --- /dev/null +++ b/util/README @@ -0,0 +1,55 @@ + + Apache Axis2/C Util + ==================== + + What is it? + ----------- + Axis2/C Util project is supposed to contain some utilities which are going to be + used across the Axis2/C platform. Initially this was inside Axis2/C code base + as util folder. But as the project expands and as related projects were emerging + there was a need to use those utilities across those projects of Axis2 C platform. + The resulting was springing of a new project called Axis2 C/Util. + + As a project of the Apache Software Foundation, the + developers aim to collaboratively develop and maintain a robust, + commercial-grade, standards-based Web Services stack implementation with + freely available source code. + + The Latest Version + ------------------ + + You can get the latest svn checkout of Apache Axis2/C util module from + + https://svn.apache.org/repos/asf/webservices/axis2/trunk/c/util + + Installation + ------------ + + Please see the file called INSTALL. + + Licensing + --------- + + Please see the file called LICENSE. + + Contacts + -------- + + o If you want freely available support for using Apache Axis2/C Util please + join the Apache Axis2/C user community by subscribing to users mailing + list, axis-c-user@ws.apache.org' as described at + http://ws.apache.org/axis2/c/mail-lists.html + + o If you have a bug report for Apache Axis2/C Guththila please log-in and create a JIRA issue + at http://issues.apache.org/jira/browse/AXIS2C + + o If you want to participate actively in developing Apache Axis2/C Guththila please + subscribe to the `axis-c-dev@ws.apache.org' mailing list as described at + http://ws.apache.org/axis2/c/mail-lists.html + + + Acknowledgments + ---------------- + + Apache Axis2/C Util relies heavily on the use of autoconf, automake and libtool + to provide a build environment. diff --git a/util/autogen.sh b/util/autogen.sh new file mode 100755 index 0000000..3862edc --- /dev/null +++ b/util/autogen.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +echo -n 'Running libtoolize...' +if [ `uname -s` = Darwin ] +then + LIBTOOLIZE=glibtoolize +else + LIBTOOLIZE=libtoolize +fi + +if $LIBTOOLIZE --force > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running aclocal...' +if aclocal > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoheader...' +if autoheader > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running autoconf...' +if autoconf > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo -n 'Running automake...' +if automake --add-missing > /dev/null 2>&1; then + echo 'done.' +else + echo 'failed.' + exit 1 +fi + +echo 'done' diff --git a/util/build.sh b/util/build.sh new file mode 100755 index 0000000..99458e3 --- /dev/null +++ b/util/build.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +./autogen.sh +./configure --prefix=${AXIS2C_HOME} --enable-static=no +make +make install diff --git a/util/configure.ac b/util/configure.ac new file mode 100644 index 0000000..720b42c --- /dev/null +++ b/util/configure.ac @@ -0,0 +1,275 @@ +dnl run autogen.sh to generate the configure script. + +AC_PREREQ(2.59) + +AC_INIT(axis2_util-src, 1.6.0) +AC_CANONICAL_SYSTEM +AM_CONFIG_HEADER(config.h) +AM_INIT_AUTOMAKE +AC_PREFIX_DEFAULT(/usr/local/axis2_util) + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_CPP +AC_PROG_LIBTOOL +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET + +dnl check for flavours of varargs macros (test from GLib) +AC_MSG_CHECKING(for ISO C99 varargs macros in C) +AC_TRY_COMPILE([],[ +int a(int p1, int p2, int p3); +#define call_a(...) a(1,__VA_ARGS__) +call_a(2,3); +],axis2c_have_iso_c_varargs=yes,axis2c_have_iso_c_varargs=no) +AC_MSG_RESULT($axis2c_have_iso_c_varargs) + +AC_MSG_CHECKING(for GNUC varargs macros) +AC_TRY_COMPILE([],[ +int a(int p1, int p2, int p3); +#define call_a(params...) a(1,params) +call_a(2,3); +],axis2c_have_gnuc_varargs=yes,axis2c_have_gnuc_varargs=no) +AC_MSG_RESULT($axis2c_have_gnuc_varargs) + +dnl Output varargs tests +if test x$axis2c_have_iso_c_varargs = xyes; then + AC_DEFINE(HAVE_ISO_VARARGS,1,[Have ISO C99 varargs macros]) +fi +if test x$axis2c_have_gnuc_varargs = xyes; then + AC_DEFINE(HAVE_GNUC_VARARGS,1,[Have GNU-style varargs macros]) +fi + +dnl Checks for libraries. +AC_CHECK_LIB(dl, dlopen) +AC_CHECK_LIB(z, inflate) +AC_CHECK_LIB(socket, socket) + +dnl This can be removed when the ftime call in +dnl ./util/src/platforms/unix/date_time_util_unix.c +dnl is changed to call gettimeofday +AC_CHECK_LIB(compat, ftime) + +#CFLAGS="$CFLAGS -ansi -Wall -D_LARGEFILE64_SOURCE -Wno-implicit-function-declaration" +CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE" +if test "$GCC" = "yes"; then + CFLAGS="$CFLAGS -ansi -Wall -Werror -Wno-implicit-function-declaration -D_GNU_SOURCE" +fi + +dnl Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([stdio.h stdlib.h string.h]) +AC_CHECK_HEADERS([sys/socket.h]) +AC_CHECK_HEADERS([net/if.h], [], [], +[#include +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_SYS_SOCKET_H +# include +#endif +]) +AC_CHECK_HEADERS([linux/if.h],[],[], +[ +#if HAVE_SYS_SOCKET_H +# include +#endif +]) +AC_CHECK_HEADERS([net/if_types.h net/if_dl.h]) + +dnl This is a check to see if we are running MacOS X +dnl It may be better to do a Darwin check +AC_CHECK_HEADER([sys/appleapiopts.h], + [AC_DEFINE([IS_MACOSX],[1],[Define to 1 if compiling on MacOS X])], + []) + +dnl Checks for typedefs, structures, and compiler characteristics. +dnl AC_C_CONST +AC_CHECK_TYPES([struct lifreq]) +AC_CHECK_TYPES([struct sockaddr_dl], [], [], +[ +#if HAVE_NET_IF_DL_H +# include +#endif +]) + +dnl Checks for library functions. +dnl AC_FUNC_MALLOC +dnl AC_FUNC_REALLOC +#AC_CHECK_FUNCS([memmove]) +AC_CHECK_FUNCS(getifaddrs) + +# System-dependent adjustments. +cygwin=no +darwin=no +solaris=no +no_undefined=no + +case "${host_cpu}" in +alpha*) + if test x"$GCC" = xyes + then + CFLAGS="$CFLAGS -mfp-rounding-mode=d -mieee" + CXXFLAGS="$CXXFLAGS -mfp-rounding-mode=d -mieee" + else + CFLAGS="$CFLAGS -fprm d -ieee -underflow_to_zero" + CXXFLAGS="$CXXFLAGS -fprm d -ieee -underflow_to_zero" + fi + ;; +*) + ;; +esac + +case "${host_os}" in +cygwin) + cygwin=yes + no_undefined=yes + ;; +darwin*) + darwin=yes + if test x"$GCC" = xyes + then + CFLAGS="$CFLAGS -Wno-long-double" + CXXFLAGS="$CXXFLAGS -Wno-long-double" + fi + ;; +solaris*) + solaris=yes + AC_DEFINE(AXIS2_SOLARIS,1,[Am I on Solaris?]) + + ;; +*) + ;; +esac + +AM_CONDITIONAL(HOST_OS_CYGWIN, test x$cygwin = xyes) +AM_CONDITIONAL(HOST_OS_DARWIN, test x$darwin = xyes) +AM_CONDITIONAL(HOST_OS_SOLARIS, test x$solaris = xyes) +AM_CONDITIONAL(NO_UNDEFINED, test x$no_undefined = xyes) + + +AC_MSG_CHECKING(whether to build guththila xml parser library) +AC_ARG_ENABLE(guththila, [ --enable-guththila build guththila xml parser library wrapper. default=no], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + GUTHTHILA_DIR="" + ;; + *) + AC_MSG_RESULT(yes) + GUTHTHILA_DIR="guththila" + + ;; + esac ], + AC_MSG_RESULT(no) + GUTHTHILA_DIR="" +) + +AC_MSG_CHECKING(whether to enable trace) +AC_ARG_ENABLE(trace, [ --enable-trace + enable logging trace messages useful when debugging (default=no)], +[ case "${enableval}" in + no) + AC_MSG_RESULT(no) + CFLAGS="$CFLAGS" + ;; + *) + AC_MSG_RESULT(yes) + CFLAGS="$CFLAGS -DAXIS2_TRACE" + ;; + esac ], + AC_MSG_RESULT(no) + CFLAGS="$CFLAGS" +) + +AC_MSG_CHECKING(whether to build tests) +AC_ARG_ENABLE(tests, [ --enable-tests build tests. default=yes], +[ case "${enableval}" in + yes) + AC_MSG_RESULT(yes) + TESTDIR="test" + ;; + *) + AC_MSG_RESULT(no) + TESTDIR="" + + ;; + esac ], + AC_MSG_RESULT(no) + TESTDIR="" +) + +AC_MSG_CHECKING(whether to use archive) +AC_ARG_WITH(archive, +[ --with-archive[=PATH] Find the zlib header files in 'PATH'. + If you omit the '=PATH' part completely, the configure script will search + '/usr/include/' for zlib headers.], +[ case "$withval" in + no) + AC_MSG_RESULT(no) + ZLIBBUILD="" + zliblibs="" + ;; + *) + AC_MSG_RESULT(yes) + zliblibs="minizip/libaxis2_minizip.la" + CFLAGS="$CFLAGS -DAXIS2_ARCHIVE_ENABLED" + if test -d $withval; then + zlibinc="-I$withval" + elif test -d '/usr/include'; then + zlibinc="-I/usr/include" + else + AC_MSG_ERROR(could not find zlib stop) + fi + ZLIBBUILD="minizip" + ;; + esac ], + AC_MSG_RESULT(no) +) + + + +CFLAGS="$CFLAGS $GUTHTHILA_CFLAGS" + +UTILINC=$axis2_utilinc +ZLIBINC=$zlibinc +ZLIBLIBS=$zliblibs +VERSION_NO="6:0:6" + +AC_SUBST(VERSION_NO) +AC_SUBST(UTILINC) +AC_SUBST(ZLIBINC) +AC_SUBST(ZLIBLIBS) +AC_SUBST(ZLIBBUILD) +AC_SUBST(GUTHTHILA_DIR) +AC_SUBST(GUTHTHILA_LIBS) +AC_SUBST(TESTDIR) + +AC_CONFIG_FILES([Makefile \ + src/Makefile \ + src/platforms/unix/Makefile \ + src/minizip/Makefile \ + include/Makefile \ + test/Makefile \ + test/util/Makefile \ + test/allocator/Makefile \ + test/date_time/Makefile \ + test/duration/Makefile \ + test/link_list/Makefile \ + test/properties/Makefile \ + test/rand/Makefile \ + test/stack/Makefile \ + test/string_util/Makefile \ + test/uri/Makefile \ + test/url/Makefile \ + test/utils/Makefile \ + ]) + +AC_OUTPUT diff --git a/util/include/Makefile.am b/util/include/Makefile.am new file mode 100644 index 0000000..3cf1d6d --- /dev/null +++ b/util/include/Makefile.am @@ -0,0 +1,2 @@ +includedir=$(prefix)/include/axis2-1.6.0/ +nobase_include_HEADERS= platforms/axutil_platform_auto_sense.h platforms/unix/*.h platforms/windows/*.h diff --git a/util/include/axutil_allocator.h b/util/include/axutil_allocator.h new file mode 100644 index 0000000..698ebfe --- /dev/null +++ b/util/include/axutil_allocator.h @@ -0,0 +1,200 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_ALLOCATOR_H +#define AXUTIL_ALLOCATOR_H + +/** + * @file axutil_allocator.h + * @brief Axis2 memory allocator interface + */ + +#include +#include +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_allocator allocator + * @ingroup axis2_util + * @{ + */ + + /** + * \brief Axis2 memory allocator + * + * Encapsulator for memory allocating routines + */ + typedef struct axutil_allocator + { + + /** + * Function pointer representing the function that allocates memory. + * @param allocator pointer to allocator struct. In the default + * implementation this is not used, however this parameter is useful + * when the allocator implementation is dealing with a memory pool. + * @param size size of the memory block to be allocated + * @return pointer to the allocated memory block + */ + void *( + AXIS2_CALL + * malloc_fn)( + struct axutil_allocator * allocator, + size_t size); + + /** + * Function pointer representing the function that re-allocates memory. + * @param allocator pointer to allocator struct. In the default + * implementation this is not used, however this parameter is useful + * when the allocator implementation is dealing with a memory pool. + * @param ptr memory block who's size to be changed + * @param size size of the memory block to be allocated + * @return pointer to the allocated memory block + */ + void *( + AXIS2_CALL + * realloc)( + struct axutil_allocator * allocator, + void *ptr, + size_t size); + + /** + * Function pointer representing the function that frees memory. + * @param allocator pointer to allocator struct. In the default + * implementation this is not used, however this parameter is useful + * when the allocator implementation is dealing with a memory pool. + * @param ptr pointer to be freed + * @return void + */ + void( + AXIS2_CALL + * free_fn)( + struct axutil_allocator * allocator, + void *ptr); + + /** + * Local memory pool. Local pool is used to allocate per request + * local values. + */ + void *local_pool; + + /** + * Global memory pool. Global pool is used to allocate values that + * live beyond a request + */ + void *global_pool; + + /** + * Memory pool currently in use. The functions + * axutil_allocator_switch_to_global_pool and + * axutil_allocator_switch_to_local_pool should be used to + * set the current pool to global pool or to local pool respectively. + */ + void *current_pool; + + /** + * This variable has meaning only when allocator is initialized when Axis2/C is used in + * Apache2 module. When switching to global poo this ref counter is increased by one. When + * switching to local pool it is descreased by one. When creating allocator this variable + * is initialized to 0 which means it points to the local pool. If user has switched to the + * global pool several times without switching back to the local pool this ref counter has + * a positive value. If at this stage switching to lcoal pool called then this ref counter + * is reduced and checked if its value is zero. If only it's value is zero then pool is + * switched to local pool. This functionality avoid unintended switching to localpool by + * some code fragment. Still user has to make sure that each global switch has a + * corresponding local switch. + */ + int global_pool_ref; + + } + axutil_allocator_t; + + /** + * Initializes (creates) a memory allocator. + * @param allocator user defined allocator. If NULL, a default allocator + * will be returned. + * @return initialized allocator. NULL on error. + */ + AXIS2_EXTERN axutil_allocator_t *AXIS2_CALL + axutil_allocator_init( + axutil_allocator_t * allocator); + + /** + * Creates a clone of given allocator + * @param allocator user defined allocator. Cannot be NULL + * @return initialized allocator. NULL on error. + */ + AXIS2_EXTERN axutil_allocator_t *AXIS2_CALL + axutil_allocator_clone( + axutil_allocator_t * allocator); + + /** + * This function should be used to deallocate memory if the default + * allocator was provided by the axutil_allocator_init() call. + * @param allocator allocator struct to be freed + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_allocator_free( + axutil_allocator_t * allocator); + + /** + * Swaps the local_pool and global_pool and makes the global pool the + * current pool. + * In case of using pools, local_pool is supposed to hold the pool out of which + * local values are allocated. In case of values that live beyond a request + * global pool should be used, hence this method has to be called to switch to + * global pool for allocation. + * @param allocator allocator whose memory pools are to be switched + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_allocator_switch_to_global_pool( + axutil_allocator_t * allocator); + + /** + * Swaps the local_pool and global_pool and makes the local pool the + * current pool. + * In case of using pools, local_pool is supposed to hold the pool out of which + * local values are allocated. In case of values that live beyond a request + * global pool should be used. This method can be used to inverse the switching + * done by axutil_allocator_switch_to_global_pool, to start using the local pool again. + * @param allocator allocator whose memory pools are to be switched + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_allocator_switch_to_local_pool( + axutil_allocator_t * allocator); + +#define AXIS2_MALLOC(allocator, size) \ + ((allocator)->malloc_fn(allocator, size)) + +#define AXIS2_REALLOC(allocator, ptr, size) \ + ((allocator)->realloc(allocator, ptr, size)) + +#define AXIS2_FREE(allocator, ptr) \ + ((allocator)->free_fn(allocator, ptr)) + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_ALLOCATOR_H */ diff --git a/util/include/axutil_array_list.h b/util/include/axutil_array_list.h new file mode 100644 index 0000000..792df3b --- /dev/null +++ b/util/include/axutil_array_list.h @@ -0,0 +1,250 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_ARRAY_LIST_H +#define AXUTIL_ARRAY_LIST_H + +/** + * @defgroup axutil_array_list array list + * @ingroup axis2_util + * Description. + * @{ + */ + +/** + * @file axutil_array_list.h + * @brief Axis2 array_list interface + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define AXIS2_ARRAY_LIST_DEFAULT_CAPACITY 16 + + /** + * Array List struct + */ + typedef struct axutil_array_list axutil_array_list_t; + + /** + * Constructs a new array list with the supplied initial capacity. + * If capacity is invalid (<= 0) then default capacity is used + * @param env pointer to environment struct + * @param capacity initial capacity of this array_list + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axutil_array_list_create( + const axutil_env_t * env, + int capacity); + + /** + * Free array passed as void pointer. + * @param array_list pointer to array list + * @param env pointer to environment struct + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_array_list_free_void_arg( + void *array_list, + const axutil_env_t * env); + + /** + * Guarantees that this list will have at least enough capacity to + * hold min_capacity elements. This implementation will grow the list to + * max(current * 2, min_capacity) + * @param array_list pointer to array_list + * @param env pointer to environment struct + * @param min_capacity the minimum guaranteed capacity + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_array_list_ensure_capacity( + struct axutil_array_list *array_list, + const axutil_env_t * env, + int min_capacity); + + /** + * Returns the number of elements in this list. + * @param array_list pointer to array list + * @param env pointer to environment struct + * @return the list size + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_array_list_size( + struct axutil_array_list *array_list, + const axutil_env_t * env); + + /** + * Checks if the list is empty. + * @param array_list pointer to array list + * @param env pointer to environment struct + * @return true if there are no elements, else false + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_array_list_is_empty( + struct axutil_array_list *array_list, + const axutil_env_t * env); + + /** + * Returns true iff element is in this array_list. + * @param array_list pointer to array list + * @param env pointer to environment struct + * @param e the element whose inclusion in the List is being tested + * @return true if the list contains e + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_array_list_contains( + struct axutil_array_list *array_list, + const axutil_env_t * env, + void *e); + + /** + * Returns the lowest index at which element appears in this List, or + * -1 if it does not appear. This looks for the pointer value equality only, + * does not look into pointer content + * @param array_list pointer to array list + * @param env pointer to environment struct + * @param e the element whose inclusion in the List is being tested + * @return the index where e was found + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_array_list_index_of( + struct axutil_array_list *array_list, + const axutil_env_t * env, + void *e); + + /** + * Retrieves the element at the user-supplied index. + * @param array_list pointer to array list + * @param env pointer to environment struct + * @param index the index of the element we are fetching + * @return element at the given index + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_array_list_get( + struct axutil_array_list *array_list, + const axutil_env_t * env, + int index); + + /** + * Sets the element at the specified index. The new element, e, + * can be an object of any type or null. + * @param array_list pointer to array list + * @param env pointer to environment struct + * @param index the index at which the element is being set + * @param e the element to be set + * @return the element previously at the specified index + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_array_list_set( + struct axutil_array_list *array_list, + const axutil_env_t * env, + int index, + void *e); + + /** + * Appends the supplied element to the end of this list. + * The element, e, can be a pointer of any type or NULL. + * @param array_list pointer to array list + * @param env pointer to environment struct + * @param e the element to be appended to this list + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_array_list_add( + struct axutil_array_list *array_list, + const axutil_env_t * env, + const void *e); + + /** + * Adds the supplied element at the specified index, shifting all + * elements currently at that index or higher one to the right. + * The element, e, can be a pointer of any type or NULL. + * @param array_list pointer to array list + * @param env pointer to environment struct + * @param index the index at which the element is being added + * @param e the item being added + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_array_list_add_at( + struct axutil_array_list *array_list, + const axutil_env_t * env, + const int index, + const void *e); + + /** + * Removes the element at the user-supplied index. + * @param array_list pointer to array list + * @param env pointer to environment struct + * @param index the index of the element to be removed + * @return the removed void* pointer + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_array_list_remove( + struct axutil_array_list *array_list, + const axutil_env_t * env, + int index); + + /** + * Checks that the index is in the range of possible elements (inclusive). + * @param array_list pointer to array list + * @param env pointer to environment struct + * @param index the index to check + * @return AXIS2_FALSE if index > size or index < 0, else AXIS2_TRUE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axutil_array_list_check_bound_inclusive( + struct axutil_array_list *array_list, + const axutil_env_t * env, + int index); + + /** + * Checks that the index is in the range of existing elements (exclusive). + * @param array_list pointer to array list + * @param env pointer to environment struct + * @param index the index to check + * @return AXIS2_FALSE if index >= size or index < 0, else AXIS2_TRUE + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axutil_array_list_check_bound_exclusive( + struct axutil_array_list *array_list, + const axutil_env_t * env, + int index); + + /** + * @param array_list pointer to array list + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_array_list_free( + struct axutil_array_list *array_list, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_ARRAY_LIST_H */ diff --git a/util/include/axutil_base64.h b/util/include/axutil_base64.h new file mode 100644 index 0000000..d52e3af --- /dev/null +++ b/util/include/axutil_base64.h @@ -0,0 +1,122 @@ + +/* + * Copyright 2003-2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +/* + * @file axutil_base64.h + * @brief AXIS2-UTIL Base64 Encoding + */ +#ifndef AXUTIL_BASE64_H +#define AXUTIL_BASE64_H + +#ifdef __cplusplus +extern "C" +{ +#endif + + /* + * @defgroup AXIS2_Util_Base64 base64 encoding + * @ingroup AXIS2_Util + */ + + /* Simple BASE64 encode/decode functions. + * + * As we might encode binary strings, hence we require the length of + * the incoming plain source. And return the length of what we decoded. + * + * The decoding function takes any non valid char (i.e. whitespace, \0 + * or anything non A-Z,0-9 etc as terminal. + * + * plain strings/binary sequences are not assumed '\0' terminated. Encoded + * strings are neither. But probably should. + * + */ + + /* + * Given the length of an un-encrypted string, get the length of the + * encrypted string. + * @param len the length of an unencrypted string. + * @return the length of the string after it is encrypted + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_base64_encode_len( + int len); + + /* + * Encode a text string using base64encoding. + * @param coded_dst The destination string for the encoded string. + * @param plain_src The original string in plain text + * @param len_plain_src The length of the plain text string + * @return the length of the encoded string + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_base64_encode( + char *coded_dst, + const char *plain_src, + int len_plain_src); + + /* + * Encode an EBCDIC string using base64encoding. + * @param coded_dst The destination string for the encoded string. + * @param plain_src The original string in plain text + * @param len_plain_src The length of the plain text string + * @return the length of the encoded string + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_base64_encode_binary( + char *coded_dst, + const unsigned char *plain_src, + int len_plain_src); + + /* + * Determine the length of a plain text string given the encoded version + * @param coded_src The encoded string + * @return the length of the plain text string + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_base64_decode_len( + const char *coded_src); + + /* + * Decode a string to plain text + * @param plain_dst The destination string for the plain text. size of this should be axutil_base64_decode_len + 1 + * @param coded_src The encoded string + * @return the length of the plain text string + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_base64_decode( + char *plain_dst, + const char *coded_src); + + /* + * Decode an EBCDIC string to plain text + * @param plain_dst The destination string for the plain text. size of this should be axutil_base64_decode_len + * @param coded_src The encoded string + * @return the length of the plain text string + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_base64_decode_binary( + unsigned char *plain_dst, + const char *coded_src); + + /* @} */ +#ifdef __cplusplus +} +#endif + +#endif /* !AXIS2_BASE64_H */ diff --git a/util/include/axutil_base64_binary.h b/util/include/axutil_base64_binary.h new file mode 100644 index 0000000..ba99f0a --- /dev/null +++ b/util/include/axutil_base64_binary.h @@ -0,0 +1,173 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_BASE64_BINARY_H +#define AXUTIL_BASE64_BINARY_H + +#include +#include +#include + +/** + * @defgroup axutil_base64_binary encoding holder + * @ingroup axis2_util + * @{ + */ + +/** + * @file axutil_base64_binary.h + * @brief axis2-util base64 encoding holder + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axutil_base64_binary */ + typedef struct axutil_base64_binary axutil_base64_binary_t; + + /** + * Creates axutil_base64_binary struct + * @param env double pointer to environment struct. MUST NOT be NULL + * @return pointer to newly created axutil_base64_binary struct + */ + AXIS2_EXTERN axutil_base64_binary_t *AXIS2_CALL + + axutil_base64_binary_create( + const axutil_env_t * env); + + /** + * Creates axutil_base64_binary struct + * @param env double pointer to environment struct. MUST NOT be NULL + * @param plain_binary binary buffer to initialize + * @return pointer to newly created axutil_base64_binary struct + */ + AXIS2_EXTERN axutil_base64_binary_t *AXIS2_CALL + + axutil_base64_binary_create_with_plain_binary( + const axutil_env_t * env, + const unsigned char *plain_binary, + int plain_binary_len); + + /** + * Creates axutil_base64_binary struct. + * @param env double pointer to environment struct. MUST NOT be NULL + * @param encoded_binary binary buffer to initialize + * @return pointer to newly created axutil_base64_binary struct + */ + AXIS2_EXTERN axutil_base64_binary_t *AXIS2_CALL + + axutil_base64_binary_create_with_encoded_binary( + const axutil_env_t * env, + const char *encoded_binary); + + /** + * free the axutil_base64_binary. + * @param base64_binary represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_base64_binary_free( + axutil_base64_binary_t * base64_binary, + const axutil_env_t * env); + + /** + * store the value from plain binary. + * @param base64_binary represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @param plain_binary binary buffer to store + * @param plain_binary_len length of the plain_binary binary buffer + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axutil_base64_binary_set_plain_binary( + axutil_base64_binary_t * base64_binary, + const axutil_env_t * env, + const unsigned char *plain_binary, + int plain_binary_len); + + /** + * retrieve the value from plain binary. + * @param base64_binary represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @param plain_binary_len length of the plain_binary binary buffer + * @return the plain binary + */ + + AXIS2_EXTERN unsigned char *AXIS2_CALL + + axutil_base64_binary_get_plain_binary( + axutil_base64_binary_t * base64_binary, + const axutil_env_t * env, + int *plain_binary_len); + + /** + * store the value from encoded binary. + * @param base64_binary represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @param encoded_binary encoded binary buffer to store + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axutil_base64_binary_set_encoded_binary( + axutil_base64_binary_t * base64_binary, + const axutil_env_t * env, + const char *encoded_binary); + + /** + * retrieve the value from encoded binary. + * @param base64_binary represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return the encoded binary + */ + AXIS2_EXTERN char *AXIS2_CALL + axutil_base64_binary_get_encoded_binary( + axutil_base64_binary_t * base64_binary, + const axutil_env_t * env); + + /** + * retrieve the value from encoded binary length. + * @param base64_binary represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return the encoded binary length + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_base64_binary_get_encoded_binary_len( + axutil_base64_binary_t * base64_binary, + const axutil_env_t * env); + + /** + * retrieve the value from decoded binary length. + * @param base64_binary represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return the decoded binary length + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_base64_binary_get_decoded_binary_len( + axutil_base64_binary_t * base64_binary, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_BASE64_BINARY_H */ diff --git a/util/include/axutil_class_loader.h b/util/include/axutil_class_loader.h new file mode 100644 index 0000000..99a0f95 --- /dev/null +++ b/util/include/axutil_class_loader.h @@ -0,0 +1,63 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_CLASS_LOADER_H +#define AXUTIL_CLASS_LOADER_H + +/** + * @file axutil_class_loader.h + * @brief axis2 class loader interface + */ + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @defgroup axutil_class_loader class loader + * @ingroup axis2_util + * @{ + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_class_loader_init( + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_class_loader_delete_dll( + const axutil_env_t * env, + axutil_dll_desc_t * dll_desc); + + AXIS2_EXTERN void *AXIS2_CALL + axutil_class_loader_create_dll( + const axutil_env_t * env, + axutil_param_t * impl_info_param); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_CLASS_LOADER_H */ diff --git a/util/include/axutil_config.h b/util/include/axutil_config.h new file mode 100644 index 0000000..a35c0bd --- /dev/null +++ b/util/include/axutil_config.h @@ -0,0 +1,42 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_CONFIG_H +#define AXUTIL_CONFIG_H + +/* undef unwated cnfig macros to avoid conflicts with APR macros */ +#undef PACKAGE +#undef PACKAGE_BUGREPORT +#undef PACKAGE_NAME +#undef PACKAGE_STRING +#undef PACKAGE_TARNAME +#undef PACKAGE_VERSION +#undef VERSION + +#include + +/* undef unwated cnfig macros to avoid conflicts with APR macros */ +#undef PACKAGE +#undef PACKAGE_BUGREPORT +#undef PACKAGE_NAME +#undef PACKAGE_STRING +#undef PACKAGE_TARNAME +#undef PACKAGE_VERSION +#undef VERSION + +#endif /* AXIS2_UTILS_H */ diff --git a/util/include/axutil_date_time.h b/util/include/axutil_date_time.h new file mode 100644 index 0000000..eeac9e6 --- /dev/null +++ b/util/include/axutil_date_time.h @@ -0,0 +1,350 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_DATE_TIME_H +#define AXUTIL_DATE_TIME_H + +#include +#include + +/** + * @file axutil_date_time.h + * @brief axis2-util + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_date_time + * @ingroup axis2_util + * @{ + */ + + typedef struct axutil_date_time axutil_date_time_t; + + typedef enum + { + AXIS2_DATE_TIME_COMP_RES_FAILURE = -1, + AXIS2_DATE_TIME_COMP_RES_UNKNOWN, + AXIS2_DATE_TIME_COMP_RES_EXPIRED, + AXIS2_DATE_TIME_COMP_RES_EQUAL, + AXIS2_DATE_TIME_COMP_RES_NOT_EXPIRED + } axutil_date_time_comp_result_t; + + /** + * Creates axutil_date_time struct with current date time + * @param env double pointer to environment struct. MUST NOT be NULL + * @return pointer to newly created axutil_date_time struct + */ + AXIS2_EXTERN axutil_date_time_t *AXIS2_CALL + axutil_date_time_create( + const axutil_env_t * env); + + /* + * Creates axutil_date_time struct with an additional offset value + * If the offset is a positive value then the time will be in the future + * offset is 0, then the time will be the current time + * offset is a negative value then the time is in the past. + * @param env double pointer to environment struct. MUST NOT be NULL + * @param offset the offset from the current time in seconds + * @return pointer to newly created axutil_date_time struct + **/ + AXIS2_EXTERN axutil_date_time_t *AXIS2_CALL + + axutil_date_time_create_with_offset( + const axutil_env_t * env, + int offset); + + /** + * free the axutil_date_time. + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_date_time_free( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + /** + * store the time value from plain text. + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @param time time as a string format HH:MM:TTZ + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_date_time_deserialize_time( + axutil_date_time_t * date_time, + const axutil_env_t * env, + const axis2_char_t * time_str); + + /** + * store the date value from plain text. + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @param date date as a string format YYYY-MM-DD + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_date_time_deserialize_date( + axutil_date_time_t * date_time, + const axutil_env_t * env, + const axis2_char_t * date_str); + + /** + * store the date value from plain text. + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @param date_time string format YYYY-MM-DDTHH:MM:SSZ + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axutil_date_time_deserialize_date_time( + axutil_date_time_t * date_time, + const axutil_env_t * env, + const axis2_char_t * date_time_str); + + /** + * store the date value from set of values + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @param year Integer -1 can be used to ignore + * @param month Integer -1 can be used to ignore + * @param date Integer -1 can be used to ignore + * @param hour Integer -1 can be used to ignore + * @param min Integer -1 can be used to ignore + * @param second Integer -1 can be used to ignore + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_date_time_set_date_time( + axutil_date_time_t * date_time, + const axutil_env_t * env, + int year, + int month, + int date, + int hour, + int min, + int second, + int milliseconds); + + /** + * retrive the stored time as a string + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return time as a string format HH:MM:SSZ + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_date_time_serialize_time( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + /** + * retrive the stored date as a string + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return date as a string format YYYY-MM-DD + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_date_time_serialize_date( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + /** + * retrive the stored date time as a string with millisecond precision + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return time as a string format YYYY-MM-DDTHH:MM:SS.msZ + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axutil_date_time_serialize_date_time( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + /** + * retrive the stored date time as a string without millisecond + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return time as a string format YYYY-MM-DDTHH:MM:SSZ + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_date_time_serialize_date_time_without_millisecond( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + /** + * retrieve the year of the date time + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return year as an integer + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_date_time_get_year( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + /** + * retrieve the month of the date time + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return month as an integer + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_date_time_get_month( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + /** + * retrieve the date of the date time + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return date as an integer + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_date_time_get_date( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + /** + * retrieve the hour of the date time + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return hour as an integer + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_date_time_get_hour( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + /** + * retrieve the minute of the date time + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return minute as an integer + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_date_time_get_minute( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + /** + * retrieve the second of the date time + * @param date_time represet the type object + * @param env pointer to environment struct. MUST NOT be NULL + * @return second as an integer + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_date_time_get_second( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + AXIS2_EXTERN int AXIS2_CALL + axutil_date_time_get_msec( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + /** + * Compare the date and time of @date_time with the reference @ref. + * If the @date_time < @ref this returns NOT_EXPIRED. + * If the @date_time > @ref this returns EXPIRED. + * If the @date_time = @ref this returns EQUAL. + * @param date_time the date time to be compared + * @param env pointer to environment struct. MUST NOT be NULL + * @ref the reference date time + * @return NOT_EXPIRED/EXPIRED/EQUAL if valid otherwise return FAILURE + */ + AXIS2_EXTERN axutil_date_time_comp_result_t AXIS2_CALL + axutil_date_time_compare( + axutil_date_time_t * date_time, + const axutil_env_t * env, + axutil_date_time_t * ref); + + AXIS2_EXTERN axutil_date_time_t *AXIS2_CALL + axutil_date_time_utc_to_local( + axutil_date_time_t * date_time, + const axutil_env_t * env, + axis2_bool_t is_positive, + int hour, + int min); + + AXIS2_EXTERN axutil_date_time_t *AXIS2_CALL + axutil_date_time_local_to_utc( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + AXIS2_EXTERN int AXIS2_CALL + axutil_date_time_get_time_zone_hour( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + AXIS2_EXTERN int AXIS2_CALL + axutil_date_time_get_time_zone_minute( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_date_time_is_time_zone_positive( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_date_time_set_time_zone( + axutil_date_time_t * date_time, + const axutil_env_t * env, + axis2_bool_t is_positive, + int hour, + int min); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_date_time_deserialize_date_time_with_time_zone( + axutil_date_time_t * date_time, + const axutil_env_t * env, + const axis2_char_t * date_time_str); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_date_time_deserialize_time_with_time_zone( + axutil_date_time_t * date_time, + const axutil_env_t * env, + const axis2_char_t * time_str); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_date_time_serialize_date_time_with_time_zone( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_date_time_serialize_time_with_time_zone( + axutil_date_time_t * date_time, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_date_time_is_utc( + axutil_date_time_t * date_time, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_DATE_TIME_H */ diff --git a/util/include/axutil_date_time_util.h b/util/include/axutil_date_time_util.h new file mode 100644 index 0000000..bd4aca0 --- /dev/null +++ b/util/include/axutil_date_time_util.h @@ -0,0 +1,51 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain count copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_DATE_TIME_UTIL_H +#define AXUTIL_DATE_TIME_UTIL_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_uuid_gen UUID generator + * @ingroup axis2_util + * @{ + */ + + /** + * generate a uuid + * @return generated uuid as a string + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_get_milliseconds( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_DATE_TIME_UTIL_H */ diff --git a/util/include/axutil_digest_calc.h b/util/include/axutil_digest_calc.h new file mode 100644 index 0000000..ac27ab0 --- /dev/null +++ b/util/include/axutil_digest_calc.h @@ -0,0 +1,109 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_DIGEST_CALC_H +#define AXUTIL_DIGEST_CALC_H + +/** + * @file axutil_digest_calc.h + * @brief implements the calculations of H(A1), H(A2), + * request-digest and response-digest for Axis2 based on rfc2617. + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axis2_util utilities + * @ingroup axis2 + * @{ + * @} + */ + + /** + * @defgroup axutil_digest_calc digest_calc + * @ingroup axis2_util + * @{ + */ + + #define AXIS2_DIGEST_HASH_LEN 16 + #define AXIS2_DIGEST_HASH_HEX_LEN 32 + + typedef unsigned char axutil_digest_hash_t[AXIS2_DIGEST_HASH_LEN]; + typedef unsigned char axutil_digest_hash_hex_t[AXIS2_DIGEST_HASH_HEX_LEN + 1]; + + /** + * calculate H(A1) as per HTTP Digest spec + * @param env, pointer to env struct + * @param algorithm, algorithm + * @param user_name, user name + * @param realm, reaalm + * @param password, password + * @param nonce, nonce from server + * @param cnonce, client nonce + * @param session_key, H(A1) + * @return AXIS2_SUCCESS on success or AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_digest_calc_get_h_a1( + const axutil_env_t * env, + char * algorithm, + char * user_name, + char * realm, + char * password, + char * nonce, + char * cnonce, + axutil_digest_hash_hex_t session_key); + + /** + * calculate request-digest/response-digest as per HTTP Digest spec + * @param env, pointer to env struct + * @param h_a1, H(A1) + * @param nonce, nonce from server + * @param cnonce, client nonce + * @param qop, qop-value: "", "auth", "auth-int" + * @param method, method from the request + * @param digest_uri, requested URL + * @param h_entry, H(entity body) if qop="auth-int" + * @param response, request-digest or response-digest + * @return AXIS2_SUCCESS on success or AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_digest_calc_get_response( + const axutil_env_t * env, + axutil_digest_hash_hex_t h_a1, + char * nonce, + char * nonce_count, + char * cnonce, + char * qop, + char * method, + char * digest_uri, + axutil_digest_hash_hex_t h_entity, + axutil_digest_hash_hex_t response); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_DIGEST_CALC_H */ diff --git a/util/include/axutil_dir_handler.h b/util/include/axutil_dir_handler.h new file mode 100644 index 0000000..d66e42e --- /dev/null +++ b/util/include/axutil_dir_handler.h @@ -0,0 +1,73 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_DIR_HANDLER_H +#define AXUTIL_DIR_HANDLER_H + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_dir_handler dir handler + * @ingroup axis2_util + * @{ + */ + + /** + * List the dll files in the given service or module folder path + * @param pathname path to your service or module directory + * @return array list of dll file names + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axutil_dir_handler_list_services_or_modules_in_dir( + const axutil_env_t * env, + const axis2_char_t * pathname); + + /** + * List services or modules directories in the services or modules folder + * respectively + * @param pathname path your modules or services folder + * @return array list of contents of services or modules folder + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axutil_dir_handler_list_service_or_module_dirs( + const axutil_env_t * env, + const axis2_char_t * pathname); + + /* + *extentions for module and service archives + */ +#define AXIS2_AAR_SUFFIX ".aar" +#define AXIS2_MAR_SUFFIX ".mar" + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_DIR_HANDLER_H */ diff --git a/util/include/axutil_dll_desc.h b/util/include/axutil_dll_desc.h new file mode 100644 index 0000000..30f69f1 --- /dev/null +++ b/util/include/axutil_dll_desc.h @@ -0,0 +1,191 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_DLL_DESC_H +#define AXUTIL_DLL_DESC_H + +/** + * @file axutil_dll_desc.h + * @brief Axis2 dll_desc interface + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_dll_desc DLL description + * @ingroup axis2_util + * @{ + */ + + typedef struct axutil_dll_desc axutil_dll_desc_t; + + typedef int( + *CREATE_FUNCT)( + void **inst, + const axutil_env_t * env); + + typedef int( + *DELETE_FUNCT)( + void *inst, + const axutil_env_t * env); + + typedef int axis2_dll_type_t; + + /** + * creates dll_desc struct + * @param qname qname, can be NULL + */ + AXIS2_EXTERN axutil_dll_desc_t *AXIS2_CALL + axutil_dll_desc_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + axutil_dll_desc_free_void_arg( + void *dll_desc, + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + axutil_dll_desc_free( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env); + + /** + * Set path qualified platform specific dll name + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_dll_desc_set_name( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env, + axis2_char_t * name); + + /** + * Return the path qualified platform specific dll name + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_dll_desc_get_name( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_dll_desc_set_type( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env, + axis2_dll_type_t type); + + AXIS2_EXTERN axis2_dll_type_t AXIS2_CALL + axutil_dll_desc_get_type( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_dll_desc_set_load_options( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env, + int options); + + AXIS2_EXTERN int AXIS2_CALL + axutil_dll_desc_get_load_options( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_dll_desc_set_dl_handler( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env, + AXIS2_DLHANDLER dl_handler); + + AXIS2_EXTERN AXIS2_DLHANDLER AXIS2_CALL + axutil_dll_desc_get_dl_handler( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_dll_desc_set_create_funct( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env, + CREATE_FUNCT funct); + + AXIS2_EXTERN CREATE_FUNCT AXIS2_CALL + axutil_dll_desc_get_create_funct( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_dll_desc_set_delete_funct( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env, + DELETE_FUNCT funct); + + AXIS2_EXTERN DELETE_FUNCT AXIS2_CALL + axutil_dll_desc_get_delete_funct( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_dll_desc_set_timestamp( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env, + AXIS2_TIME_T timestamp); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_dll_desc_set_error_code( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env, + axutil_error_codes_t error_code); + + AXIS2_EXTERN axutil_error_codes_t AXIS2_CALL + + axutil_dll_desc_get_error_code( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env); + + AXIS2_EXTERN AXIS2_TIME_T AXIS2_CALL + axutil_dll_desc_get_timestamp( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env); + + /** + * This function will accept the library name without any platform + * dependant prefixes or suffixes. It then prefix and suffix + * platform dependant prefix and suffix macros to the original name + * and return the platform specific dll name + * + * @param class_name + * @return platform specific dll name + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axutil_dll_desc_create_platform_specific_dll_name( + axutil_dll_desc_t * dll_desc, + const axutil_env_t * env, + const axis2_char_t * class_name); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_DLL_DESC_H */ diff --git a/util/include/axutil_duration.h b/util/include/axutil_duration.h new file mode 100644 index 0000000..7de4fda --- /dev/null +++ b/util/include/axutil_duration.h @@ -0,0 +1,181 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_DURATION_H +#define AXUTIL_DURATION_H + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_duration + * @ingroup axis2_util + * @{ + */ + + typedef struct axutil_duration axutil_duration_t; + + /** + * Creates axutil_duration struct with current date time + * @param env double pointer to environment struct. MUST NOT be NULL + * @return pointer to newly created axutil_duration struct + */ + AXIS2_EXTERN axutil_duration_t *AXIS2_CALL + axutil_duration_create( + axutil_env_t * env); + + AXIS2_EXTERN axutil_duration_t *AXIS2_CALL + + axutil_duration_create_from_values( + const axutil_env_t * env, + axis2_bool_t negative, + int years, + int months, + int days, + int hours, + int minutes, + double seconds); + + AXIS2_EXTERN axutil_duration_t *AXIS2_CALL + + axutil_duration_create_from_string( + const axutil_env_t * env, + const axis2_char_t * duration_str); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_duration_free( + axutil_duration_t * duration, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axutil_duration_deserialize_duration( + axutil_duration_t * duration, + const axutil_env_t * env, + const char *duration_str); + + AXIS2_EXTERN char *AXIS2_CALL + axutil_duration_serialize_duration( + axutil_duration_t * duration, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_duration_set_duration( + axutil_duration_t * duration, + const axutil_env_t * env, + axis2_bool_t negative, + int years, + int months, + int days, + int hours, + int mins, + double seconds); + + AXIS2_EXTERN int AXIS2_CALL + axutil_duration_get_years( + axutil_duration_t * duration, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_duration_set_years( + axutil_duration_t * duration, + const axutil_env_t * env, + int years); + + AXIS2_EXTERN int AXIS2_CALL + axutil_duration_get_months( + axutil_duration_t * duration, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_duration_set_months( + axutil_duration_t * duration, + const axutil_env_t * env, + int months); + + AXIS2_EXTERN int AXIS2_CALL + axutil_duration_get_days( + axutil_duration_t * duration, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_duration_set_days( + axutil_duration_t * duration, + const axutil_env_t * env, + int days); + + AXIS2_EXTERN int AXIS2_CALL + axutil_duration_get_hours( + axutil_duration_t * duration, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_duration_set_hours( + axutil_duration_t * duration, + const axutil_env_t * env, + int hours); + + AXIS2_EXTERN int AXIS2_CALL + axutil_duration_get_mins( + axutil_duration_t * duration, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_duration_set_mins( + axutil_duration_t * duration, + const axutil_env_t * env, + int mins); + + AXIS2_EXTERN double AXIS2_CALL + axutil_duration_get_seconds( + axutil_duration_t * duration, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_duration_set_seconds( + axutil_duration_t * duration, + const axutil_env_t * env, + double seconds); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_duration_get_is_negative( + axutil_duration_t * duration, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_duration_set_is_negative( + axutil_duration_t * duration, + const axutil_env_t * env, + axis2_bool_t is_negative); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_duration_compare( + axutil_duration_t * duration_one, + axutil_duration_t * duration_two, + axutil_env_t * env); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_DURATION_H */ diff --git a/util/include/axutil_env.h b/util/include/axutil_env.h new file mode 100644 index 0000000..d59e5de --- /dev/null +++ b/util/include/axutil_env.h @@ -0,0 +1,233 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_ENV_H +#define AXUTIL_ENV_H + +/** + * @file axutil_env.h + * @brief Axis2 environment that acts as a container for error, log and memory + * allocator routines + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axis2_util utilities + * @ingroup axis2 + * @{ + * @} + */ + + struct axutil_env; + struct axutil_env_ops; + + /** + * @defgroup axutil_env environment + * @ingroup axis2_util + * @{ + */ + + /** + * \brief Axis2 Environment struct + * + * Environment acts as a container for error, log, memory allocator and + * threading routines + */ + typedef struct axutil_env + { + + /** Memory allocation routines */ + axutil_allocator_t *allocator; + + /** Error handling */ + axutil_error_t *error; + + /** Logging routines */ + axutil_log_t *log; + + /** This flag indicate whether logging is enabled or not */ + axis2_bool_t log_enabled; + + /** Thread pool routines */ + axutil_thread_pool_t *thread_pool; + + int ref; + + axis2_status_t (*set_session_fn)(void*, const char*, const char*); + char * (*get_session_fn)(void*, const char*); + } + axutil_env_t; + + /** + * Creates an environment struct. Would include a default log and error + * structs within the created environment. By default, logging would be enabled + * and the default log level would be debug. + * @param allocator pointer to an instance of allocator struct. Must not be NULL + * @return pointer to the newly created environment struct + */ + AXIS2_EXTERN axutil_env_t *AXIS2_CALL + axutil_env_create( + axutil_allocator_t * allocator); + + /** + * Creates an environment struct with all of its default parts, + * that is an allocator, error, log and a thread pool. + * @param log_file name of the log file. If NULL, a default log would be created. + * @param log_level log level to be used. If not valid, debug would be + * used as the default log level + * @return pointer to the newly created environment struct + */ + AXIS2_EXTERN axutil_env_t *AXIS2_CALL + axutil_env_create_all( + const axis2_char_t * log_file, + const axutil_log_levels_t log_level); + + + /** + * Creates an environment struct with given error struct. + * @param allocator pointer to an instance of allocator struct. Must not be NULL + * @param error pointer to an instance of error struct. Must not be NULL + * @return pointer to the newly created environment struct + */ + AXIS2_EXTERN axutil_env_t *AXIS2_CALL + axutil_env_create_with_error( + axutil_allocator_t * allocator, + axutil_error_t * error); + + /** + * Creates an environment struct with given error and log structs. + * @param allocator pointer to an instance of allocator struct. Must not be NULL + * @param error pointer to an instance of error struct. Must not be NULL + * @param log pointer to an instance of log struct. If NULL it would be + * assumed that logging is disabled. + * @return pointer to the newly created environment struct + */ + AXIS2_EXTERN axutil_env_t *AXIS2_CALL + axutil_env_create_with_error_log( + axutil_allocator_t * allocator, + axutil_error_t * error, + axutil_log_t * log); + + /** + * Creates an environment struct with given error, log and thread pool structs. + * @param allocator pointer to an instance of allocator struct. Must not be NULL + * @param error pointer to an instance of error struct. Must not be NULL + * @param log pointer to an instance of log struct. If NULL it would be + * assumed that logging is disabled. + * @param pool pointer to an instance of thread_pool. Must not be NULL + * @return pointer to the newly created environment struct + */ + AXIS2_EXTERN axutil_env_t *AXIS2_CALL + axutil_env_create_with_error_log_thread_pool( + axutil_allocator_t * allocator, + axutil_error_t * error, + axutil_log_t * log, + axutil_thread_pool_t * pool); + + /** + * Enable or disable logging. + * @param env pointer to environment struct + * @param enable AXIS2_TRUE to enable logging and AXIS2_FALSE to + * disable logging + * @return AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_env_enable_log( + axutil_env_t * env, + axis2_bool_t enable); + + /** + * Checks the status code of environment stored within error struct. + * @param env pointer to environment struct + * @return error status code or AXIS2_CRITICAL_FAILURE in case of + * a failure + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_env_check_status( + const axutil_env_t * env); + + /** + * Frees an environment struct instance. + * @param env pointer to environment struct instance to be freed. + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_env_free( + axutil_env_t * env); + + + #define AXIS_ENV_FREE_LOG 0x1 + #define AXIS_ENV_FREE_ERROR 0x2 + #define AXIS_ENV_FREE_THREADPOOL 0x4 + + /** + * Frees the environment components based on the mask. + * @param env pointer to environment struct to be freed + * @param mask bit pattern indicating which components of the env + * struct are to be freed + * AXIS_ENV_FREE_LOG - Frees the log + * AXIS_ENV_FREE_ERROR - Frees the error + * AXIS_ENV_FREE_THREADPOOL - Frees the thread pool + * You can use combinations to free multiple components as well + * E.g : AXIS_ENV_FREE_LOG | AXIS_ENV_FREE_ERROR frees both log and error, but not the thread pool + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_env_free_masked( + axutil_env_t * env, + char mask); + + /** + * Incrent the reference count.This is used when objects are created + * using this env and keeping this for future use. + * @param env pointer to environment struct instance to be freed. + * @return void + */ + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_env_increment_ref( + axutil_env_t * env); + + + +/* AXIS2_ENV_CHECK is a macro to check environment pointer. + Currently this is set to an empty value. + But it was used to be defined as: + #define AXIS2_ENV_CHECK(env, error_return) \ + if(!env) \ + { \ + return error_return; \ + } +*/ +#define AXIS2_ENV_CHECK(env, error_return) + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_ENV_H */ diff --git a/util/include/axutil_error.h b/util/include/axutil_error.h new file mode 100644 index 0000000..3b27a81 --- /dev/null +++ b/util/include/axutil_error.h @@ -0,0 +1,876 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_ERROR_H +#define AXUTIL_ERROR_H + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#define AXUTIL_ERROR_MESSAGE_BLOCK_SIZE 512 +#define AXUTIL_ERROR_LAST AXUTIL_ERROR_MESSAGE_BLOCK_SIZE +#define NEETHI_ERROR_CODES_START AXIS2_ERROR_LAST +#define RAMPART_ERROR_CODES_START (NEETHI_ERROR_CODES_START + AXUTIL_ERROR_MESSAGE_BLOCK_SIZE) +#define SANDESHA2_ERROR_CODES_START (RAMPART_ERROR_CODES_START + AXUTIL_ERROR_MESSAGE_BLOCK_SIZE) +#define SAVAN_ERROR_CODES_START (SANDESHA2_ERROR_CODES_START + AXUTIL_ERROR_MESSAGE_BLOCK_SIZE) +#define USER_ERROR_CODES_START (SAVAN_ERROR_CODES_START + AXUTIL_ERROR_MESSAGE_BLOCK_SIZE) + +/* AXUTIL_ERROR_MAX define the maximum size of the error array */ +#define AXUTIL_ERROR_MAX (USER_ERROR_CODES_START + AXUTIL_ERROR_MESSAGE_BLOCK_SIZE) + + + /** + * \brief Axis2 status codes + * + * Possible status values for Axis2 + */ + enum axis2_status_codes + { + /** Critical Failure state */ + AXIS2_CRITICAL_FAILURE = -1, + + /** Failure state */ + AXIS2_FAILURE, + + /** Success state */ + AXIS2_SUCCESS + }; + + /** + * \brief Axis2 error codes + * + * Set of error codes for Axis2 + */ + enum axutil_error_codes + { + + /** + * No error. + * This must be the first error all the time and the assigned value of 0 + * must not be changed as it is assumed in the error message array that + * the error list starts with a value of 0. + * Further, none of the error codes in this enum should not be initialized + * to an arbitrary value as it is assumed in the implementation when mapping + * error codes to error messages that the error codes are contiguous and + * the last error value is always AXIS2_ERROR_LAST. + */ + AXIS2_ERROR_NONE = 0, + + /* + * Group - Common Errors + */ + + /** Out of memory */ + AXIS2_ERROR_NO_MEMORY, + + /** NULL parameter was passed when a non NULL parameter was expected */ + AXIS2_ERROR_INVALID_NULL_PARAM, + + /* + * Group - core:addr + */ + + /* + * Group - core:clientapi + */ + + /** Blocking invocation expects response */ + AXIS2_ERROR_BLOCKING_INVOCATION_EXPECTS_RESPONSE, + + /** cannot infer transport from URL */ + AXIS2_ERROR_CANNOT_INFER_TRANSPORT, + + /** Client side support only one configuration context */ + AXIS2_ERROR_CLIENT_SIDE_SUPPORT_ONLY_ONE_CONF_CTX, + /* MEP cannot be NULL in MEP client */ + AXIS2_ERROR_MEP_CANNOT_BE_NULL_IN_MEP_CLIENT, + /* MEP Mismatch */ + AXIS2_ERROR_MEP_MISMATCH_IN_MEP_CLIENT, + + /** Two way channel needs addressing module to be engaged */ + AXIS2_ERROR_TWO_WAY_CHANNEL_NEEDS_ADDRESSING, + + /** Unknown Transport */ + AXIS2_ERROR_UNKNOWN_TRANSPORT, + /* Unsupported SOAP style */ + AXIS2_ERROR_UNSUPPORTED_TYPE, + /* Options object is not set */ + AXIS2_ERROR_OPTIONS_OBJECT_IS_NOT_SET, + + /* Session Timeout */ + AXIS2_ERROR_SESSION_TIMEOUT, + /* + * Group - core:clientapi:diclient + */ + + /* + * Group - core:context + */ + + /** Invalid SOAP envelope state */ + AXIS2_ERROR_INVALID_SOAP_ENVELOPE_STATE, + + /** Invalid message context state */ + AXIS2_ERROR_INVALID_STATE_MSG_CTX, + + /** Service accessed has invalid state */ + AXIS2_ERROR_INVALID_STATE_SVC, + + /** Service group accessed has invalid state */ + AXIS2_ERROR_INVALID_STATE_SVC_GRP, + + /** Service not yet found */ + AXIS2_ERROR_SERVICE_NOT_YET_FOUND, + + /* + * Group - core:deployment + */ + /* Invalid phase found in phase validation */ + AXI2_ERROR_INVALID_PHASE, + /* axis2.xml cannot be found */ + AXIS2_ERROR_CONFIG_NOT_FOUND, + /* Data element of the OM Node is null */ + AXIS2_ERROR_DATA_ELEMENT_IS_NULL, + /* In transport sender, Inflow is not allowed */ + AXIS2_ERROR_IN_FLOW_NOT_ALLOWED_IN_TRS_OUT, + + /** Invalid handler state */ + AXIS2_ERROR_INVALID_HANDLER_STATE, + /* Invalid Module Ref encountered */ + AXIS2_ERROR_INVALID_MODUELE_REF, + /* Invalid Module Reference by Operation */ + AXIS2_ERROR_INVALID_MODUELE_REF_BY_OP, + /* Invalid Module Configuration */ + AXIS2_ERROR_INVALID_MODULE_CONF, + /* Description Builder is found to be in invalid state */ + AXIS2_ERROR_INVALID_STATE_DESC_BUILDER, + /* Module Not Found */ + AXIS2_ERROR_MODULE_NOT_FOUND, + /* Module Validation Failed */ + AXIS2_ERROR_MODULE_VALIDATION_FAILED, + + /** Module xml file is not found in the given path */ + AXIS2_ERROR_MODULE_XML_NOT_FOUND_FOR_THE_MODULE, + /* No dispatcher found */ + AXIS2_ERROR_NO_DISPATCHER_FOUND, + /* Operation name is missing */ + AXIS2_ERROR_OP_NAME_MISSING, + /* In transport Receiver, Outflow is not allowed */ + AXIS2_ERROR_OUT_FLOW_NOT_ALLOWED_IN_TRS_IN, + /* Repository name cannot be NULL */ + AXIS2_ERROR_REPO_CAN_NOT_BE_NULL, + /* Repository in path does not exist */ + AXIS2_ERROR_REPOSITORY_NOT_EXIST, + /* Repository Listener initialization failed */ + AXIS2_ERROR_REPOS_LISTENER_INIT_FAILED, + + /** Service xml file is not found in the given path */ + AXIS2_ERROR_SERVICE_XML_NOT_FOUND, + /* Service Name Error */ + AXIS2_ERROR_SVC_NAME_ERROR, + /* Transport Sender Error */ + AXIS2_ERROR_TRANSPORT_SENDER_ERROR, + /* Path to Config can not be NULL */ + AXIS2_PATH_TO_CONFIG_CAN_NOT_BE_NULL, + /* Invalid Service */ + AXIS2_ERROR_INVALID_SVC, + + + /* + * Group - core:description + */ + /* Cannot correlate message */ + AXIS2_ERROR_CANNOT_CORRELATE_MSG, + + /** Could not Map the MEP URI to a axis MEP constant value */ + AXIS2_ERROR_COULD_NOT_MAP_MEP_URI_TO_MEP_CONSTANT, + /* Invalid message addition , operation context completed */ + AXIS2_ERROR_INVALID_MESSAGE_ADDITION, + + /** Module description accessed has invalid state */ + AXIS2_ERROR_INVALID_STATE_MODULE_DESC, + + /** Parameter container not set */ + AXIS2_ERROR_INVALID_STATE_PARAM_CONTAINER, + + /** module has already engaged to the op op terminated !!! */ + AXIS2_ERROR_MODULE_ALREADY_ENGAGED_TO_OP, + + /** module has already been engaged on the service.Operation terminated !!! */ + AXIS2_ERROR_MODULE_ALREADY_ENGAGED_TO_SVC, + + /** module has already been engaged on the service. Group Operation terminated !!! */ + AXIS2_ERROR_MODULE_ALREADY_ENGAGED_TO_SVC_GRP, + + /** Parameter locked, Cannot override */ + AXIS2_ERROR_PARAMETER_LOCKED_CANNOT_OVERRIDE, + /* schema list is empty or NULL in svc */ + AXIS2_ERROR_EMPTY_SCHEMA_LIST, + /* + * Group - core:engine + */ + + /** Both before and after handlers cannot be the same */ + AXIS2_ERROR_BEFORE_AFTER_HANDLERS_SAME, + + /** Invalid handler rules */ + AXIS2_ERROR_INVALID_HANDLER_RULES, + /* Invalid Module */ + AXIS2_ERROR_INVALID_MODULE, + + /** Invalid first handler for phase */ + AXIS2_ERROR_INVALID_PHASE_FIRST_HANDLER, + + /** Invalid last handler for phase */ + AXIS2_ERROR_INVALID_PHASE_LAST_HANDLER, + + /** Invalid engine config state */ + AXIS2_ERROR_INVALID_STATE_CONF, + + /** Message context processing a fault already */ + AXIS2_ERROR_INVALID_STATE_PROCESSING_FAULT_ALREADY, + + /** fault to field not specified in message context */ + AXIS2_ERROR_NOWHERE_TO_SEND_FAULT, + + /** Only one handler allowed for phase, adding handler is not allowed */ + AXIS2_ERROR_PHASE_ADD_HANDLER_INVALID, + + /** First handler of phase already set */ + AXIS2_ERROR_PHASE_FIRST_HANDLER_ALREADY_SET, + + /** Last handler of phase already set */ + AXIS2_ERROR_PHASE_LAST_HANDLER_ALREADY_SET, + + /**Two service can not have same name, a service with same name already + exist in the system */ + AXIS2_ERROR_TWO_SVCS_CANNOT_HAVE_SAME_NAME, + /* + * Group - core:phase resolver + */ + /* Invalid Module Ref */ + AXIS2_ERROR_INVALID_MODULE_REF, + /* Invalid Phase */ + AXIS2_ERROR_INVALID_PHASE, + /* No Transport Receiver is configured */ + AXIS2_ERROR_NO_TRANSPORT_IN_CONFIGURED, + /* No Transport Sender is configured */ + AXIS2_ERROR_NO_TRANSPORT_OUT_CONFIGURED, + /* Phase is not specified */ + AXIS2_ERROR_PHASE_IS_NOT_SPECIFED, + /* Service module can not refer global phase */ + AXIS2_ERROR_SERVICE_MODULE_CAN_NOT_REFER_GLOBAL_PHASE, + + /* + * Group - core:wsdl + */ + + /** Schema is NULL */ + AXIS2_ERROR_WSDL_SCHEMA_IS_NULL, + /* + * Group - core:receivers + */ + /* Om Element has invalid state */ + AXIS2_ERROR_OM_ELEMENT_INVALID_STATE, + /* Om Elements do not match */ + AXIS2_ERROR_OM_ELEMENT_MISMATCH, + /* RPC style SOAP body don't have a child element */ + AXIS2_ERROR_RPC_NEED_MATCHING_CHILD, + /* Operation Description has unknown operation style */ + AXIS2_ERROR_UNKNOWN_STYLE, + /* String does not represent a valid NCName */ + AXIS2_ERROR_STRING_DOES_NOT_REPRESENT_A_VALID_NC_NAME, + /* + * Group - core:transport + */ + + /* + * Group - core:transport:http + */ + /* Error occurred in transport */ + AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR, + + /** A read attempt(HTTP) for the reply without sending the request */ + AXIS2_ERROR_HTTP_REQUEST_NOT_SENT, + + /** Invalid string passed as a http header */ + AXIS2_ERROR_INVALID_HEADER, + /* Invalid header start line (request line or response line) */ + AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE, + /* Transport protocol is unsupported by axis2 */ + AXIS2_ERROR_INVALID_TRANSPORT_PROTOCOL, + + /** No body present in the request or the response */ + AXIS2_ERROR_NULL_BODY, + /* A valid conf_ctx is reqd for the http worker */ + AXIS2_ERROR_NULL_CONFIGURATION_CONTEXT, + /* HTTP version cannot be null in the status/request line */ + AXIS2_ERROR_NULL_HTTP_VERSION, + /* Input stream is NULL in msg_ctx */ + AXIS2_ERROR_NULL_IN_STREAM_IN_MSG_CTX, + /* OM output is NULL */ + AXIS2_ERROR_NULL_OM_OUTPUT, + /* Null SOAP envelope in msg_ctx */ + AXIS2_ERROR_NULL_SOAP_ENVELOPE_IN_MSG_CTX, + /* NULL stream in the http chucked stream */ + AXIS2_ERROR_NULL_STREAM_IN_CHUNKED_STREAM, + /* We got a NULL stream in the response body */ + AXIS2_ERROR_NULL_STREAM_IN_RESPONSE_BODY, + + /** URL NULL in http client */ + AXIS2_ERROR_NULL_URL, + /** Invalid URL format */ + AXIS2_ERROR_INVALID_URL_FORMAT, + /** Duplicate URL REST Mapping */ + AXIS2_ERROR_DUPLICATE_URL_REST_MAPPING, + /* We need transport_info in msg_ctx */ + AXIS2_ERROR_OUT_TRNSPORT_INFO_NULL, + /*Content-Type header missing in HTTP response" */ + AXIS2_ERROR_RESPONSE_CONTENT_TYPE_MISSING, + + /** Response timed out */ + AXIS2_ERROR_RESPONSE_TIMED_OUT, + + /** Server shutdown*/ + AXIS2_ERROR_RESPONSE_SERVER_SHUTDOWN, + + /** SOAP envelope or SOAP body NULL */ + AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL, + /* Error occurred in SSL engine */ + AXIS2_ERROR_SSL_ENGINE, + /* Either axis2c cannot find certificates or the env variable is not set */ + AXIS2_ERROR_SSL_NO_CA_FILE, + /* Error in writing the response in response writer */ + AXIS2_ERROR_WRITING_RESPONSE, + /* Required parameter is missing in URL encoded request */ + AXIS2_ERROR_REQD_PARAM_MISSING, + /* Unsupported schema type in REST */ + AXIS2_ERROR_UNSUPPORTED_SCHEMA_TYPE, + /* Service or operation not found */ + AXIS2_ERROR_SVC_OR_OP_NOT_FOUND, + /* + * Group - mod_addr + */ + AXIS2_ERROR_NO_MSG_INFO_HEADERS, + /* + * Group - platforms + */ + + /* + * Group - utils + */ + + /** Could not open the axis2 file */ + AXIS2_ERROR_COULD_NOT_OPEN_FILE, + /* Failed in creating DLL */ + AXIS2_ERROR_DLL_CREATE_FAILED, + /* DLL loading failed */ + AXIS2_ERROR_DLL_LOADING_FAILED, + + /** Environment passed is null */ + AXIS2_ERROR_ENVIRONMENT_IS_NULL, + /* Axis2 File does not have a file name */ + AXIS2_ERROR_FILE_NAME_NOT_SET, + /* DLL Description Info Object has invalid state */ + AXIS2_ERROR_INVALID_STATE_DLL_DESC, + /* Failed in creating Handler */ + AXIS2_ERROR_HANDLER_CREATION_FAILED, + + /** Array list index out of bounds */ + AXIS2_ERROR_INDEX_OUT_OF_BOUNDS, + + /** Invalid IP or host name */ + AXIS2_ERROR_INVALID_ADDRESS, + + /** Trying to do operation on invalid file descriptor */ + AXIS2_ERROR_INVALID_FD, + + /** Trying to do operation on closed/not opened socket */ + AXIS2_ERROR_INVALID_SOCKET, + + /** Parameter not set */ + AXIS2_ERROR_INVALID_STATE_PARAM, + /* Module create failed */ + AXIS2_ERROR_MODULE_CREATION_FAILED, + /* Failed in creating Message Receiver */ + AXIS2_ERROR_MSG_RECV_CREATION_FAILED, + + /** No such element */ + AXIS2_ERROR_NO_SUCH_ELEMENT, + + /** Socket bind failed. Another process may be already using this port*/ + AXIS2_ERROR_SOCKET_BIND_FAILED, + + /** Error creating a socket. Most probably error returned by OS */ + AXIS2_ERROR_SOCKET_ERROR, + /* Listen failed for the server socket */ + AXIS2_ERROR_SOCKET_LISTEN_FAILED, + /* Failed in creating Service Skeleton */ + AXIS2_ERROR_SVC_SKELETON_CREATION_FAILED, + /* Failed in creating Transport Receiver */ + AXIS2_ERROR_TRANSPORT_RECV_CREATION_FAILED, + /* Failed in creating Transport Sender */ + AXIS2_ERROR_TRANSPORT_SENDER_CREATION_FAILED, + /* Generation of platform dependent uuid failed */ + AXIS2_ERROR_UUID_GEN_FAILED, + /* Possible deadlock */ + AXIS2_ERROR_POSSIBLE_DEADLOCK, + /* + * Group - WSDL + */ + /* Interface or Port Type not found for the binding */ + AXIS2_ERROR_INTERFACE_OR_PORT_TYPE_NOT_FOUND_FOR_THE_BINDING, + /* Interfaces or Ports not found for the partially built WOM */ + AXIS2_ERROR_INTERFACES_OR_PORTS_NOT_FOUND_FOR_PARTIALLY_BUILT_WOM, + + /** Wsdl op accessed has invalid state */ + AXIS2_ERROR_INVALID_STATE_WSDL_OP, + + /** Wsdl Service accessed has invalid state */ + AXIS2_ERROR_INVALID_STATE_WSDL_SVC, + /* Cannot determine MEP */ + AXIS2_ERROR_MEP_CANNOT_DETERMINE_MEP, + /* Wsdl binding name cannot be NULL(Is required) */ + AXIS2_ERROR_WSDL_BINDING_NAME_IS_REQUIRED, + /* PortType/Interface name cannot be null(Required) */ + AXIS2_ERROR_WSDL_INTERFACE_NAME_IS_REQUIRED, + /* Wsdl parsing has resulted in an invalid state */ + AXIS2_ERROR_WSDL_PARSER_INVALID_STATE, + /* Wsdl svc name cannot be null(Required) */ + AXIS2_ERROR_WSDL_SVC_NAME_IS_REQUIRED, + /* + * Group - xml + */ + + /* + * Group - xml:attachments + */ + /** Attachment is missing */ + AXIS2_ERROR_ATTACHMENT_MISSING, + + /* + * Group - xml:om + */ + + /** Builder done with pulling. Cannot pull any more */ + AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL, + + /** Discard failed because the builder state is invalid */ + AXIS2_ERROR_INVALID_BUILDER_STATE_CANNOT_DISCARD, + + /** Builder's last node is NULL when it is not supposed to be NULL */ + AXIS2_ERROR_INVALID_BUILDER_STATE_LAST_NODE_NULL, + + /** Document root is NULL, when it is not supposed to be NULL */ + AXIS2_ERROR_INVALID_DOCUMENT_STATE_ROOT_NULL, + + /** Undefined namespace used */ + AXIS2_ERROR_INVALID_DOCUMENT_STATE_UNDEFINED_NAMESPACE, + + /** error a namespace should have a valid uri */ + AXIS2_ERROR_INVALID_EMPTY_NAMESPACE_URI, + + /** next method has not been called so cannot remove + an element before calling next valid for any om iterator */ + AXIS2_ERROR_ITERATOR_NEXT_METHOD_HAS_NOT_YET_BEEN_CALLED, + + /** remove method has already been called once so cannot remove till + next method is called valid for any om children iterator*/ + AXIS2_ERROR_ITERATOR_REMOVE_HAS_ALREADY_BEING_CALLED, + + /** axiom_xml_reader returned NULL element */ + AXIS2_ERROR_XML_READER_ELEMENT_NULL, + + /** axiom_xml_reader returned NULL value */ + AXIS2_ERROR_XML_READER_VALUE_NULL, + /* + * Group - xml:parser + */ + + /** error occurred creating xml stream reader */ + AXIS2_ERROR_CREATING_XML_STREAM_READER, + + /** error occurred creating xml stream writer */ + AXIS2_ERROR_CREATING_XML_STREAM_WRITER, + + /** error in writing attribute */ + AXIS2_ERROR_WRITING_ATTRIBUTE, + + /** error in writing attribute with namespace */ + AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE, + + /** error in writing attribute with namespace prefix */ + AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE_PREFIX, + + /** error in writing comment */ + AXIS2_ERROR_WRITING_COMMENT, + + /** error in writing data source*/ + AXIS2_ERROR_WRITING_DATA_SOURCE, + + /** error in writing default namespace */ + AXIS2_ERROR_WRITING_DEFAULT_NAMESPACE, + + /** error in writing DDT */ + AXIS2_ERROR_WRITING_DTD, + + /** error occurred in writing empty element */ + AXIS2_ERROR_WRITING_EMPTY_ELEMENT, + + /** error occurred in writing empty element with namespace */ + AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE, + + /** error in writing empty element with namespace prefix */ + AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE_PREFIX, + + /** error occurred in writing end document in xml writer */ + AXIS2_ERROR_WRITING_END_DOCUMENT, + + /** error occurred in writing end element in xml writer */ + AXIS2_ERROR_WRITING_END_ELEMENT, + + /** error in writing processing instruction */ + AXIS2_ERROR_WRITING_PROCESSING_INSTRUCTION, + + /** error occurred in writing start element in start document in xml writer */ + AXIS2_ERROR_WRITING_START_DOCUMENT, + + /** error occurred in writing start element in xml writer */ + AXIS2_ERROR_WRITING_START_ELEMENT, + + /** error occurred in writing start element with namespace in xml writer*/ + AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE, + + /** error occurred in writing start element with namespace prefix */ + AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE_PREFIX, + + /** error in writing cdata section */ + AXIS2_ERROR_WRITING_CDATA, + + /** AXIS2_XML_PARSER_TYPE_BUFFER or AXIS2_XML_PARSER_TYPE_DOC is expected */ + AXIS2_ERROR_XML_PARSER_INVALID_MEM_TYPE, + + /* + * Group - xml:SOAP + */ + + /** invalid type passed */ + AXIS2_ERROR_INVALID_BASE_TYPE, + + /** invalid SOAP namespace uri found */ + AXIS2_ERROR_INVALID_SOAP_NAMESPACE_URI, + + /** Invalid SOAP version */ + AXIS2_ERROR_INVALID_SOAP_VERSION, + /* invalid value found in must understand attribute */ + AXIS2_ERROR_INVALID_VALUE_FOUND_IN_MUST_UNDERSTAND, + /*multiple code elements encountered in SOAP fault element */ + AXIS2_ERROR_MULTIPLE_CODE_ELEMENTS_ENCOUNTERED, + /*multiple detail elements encountered in SOAP fault element */ + AXIS2_ERROR_MULTIPLE_DETAIL_ELEMENTS_ENCOUNTERED, + /*multiple node elements encountered in SOAP fault element */ + AXIS2_ERROR_MULTIPLE_NODE_ELEMENTS_ENCOUNTERED, + /*multiple reason elements encountered in SOAP fault element */ + AXIS2_ERROR_MULTIPLE_REASON_ELEMENTS_ENCOUNTERED, + /*multiple role elements encountered in SOAP fault element */ + AXIS2_ERROR_MULTIPLE_ROLE_ELEMENTS_ENCOUNTERED, + /*multiple sub code values encountered in SOAP fault element */ + AXIS2_ERROR_MULTIPLE_SUB_CODE_VALUES_ENCOUNTERED, + /* multiple value elements encountered */ + AXIS2_ERROR_MULTIPLE_VALUE_ENCOUNTERED_IN_CODE_ELEMENT, + /* must understand attribute should have values of true or false */ + AXIS2_ERROR_MUST_UNDERSTAND_SHOULD_BE_1_0_TRUE_FALSE, + + /** om element is expected */ + AXIS2_ERROR_OM_ELEMENT_EXPECTED, + /* processing SOAP 1.1 fault value element should have only + text as its children */ + AXIS2_ERROR_ONLY_CHARACTERS_ARE_ALLOWED_HERE, + + /** only one SOAP fault allowed in SOAP body */ + AXIS2_ERROR_ONLY_ONE_SOAP_FAULT_ALLOWED_IN_BODY, + /*SOAP 1.1 fault actor element should not have child elements */ + AXIS2_ERROR_SOAP11_FAULT_ACTOR_SHOULD_NOT_HAVE_CHILD_ELEMENTS, + + /** SOAP builder found a child element other than header or body in envelope + element */ + AXIS2_ERROR_SOAP_BUILDER_ENVELOPE_CAN_HAVE_ONLY_HEADER_AND_BODY, + + /** SOAP builder encountered body element first and header next */ + AXIS2_ERROR_SOAP_BUILDER_HEADER_BODY_WRONG_ORDER, + + /** SOAP builder multiple body elements encountered */ + AXIS2_ERROR_SOAP_BUILDER_MULTIPLE_BODY_ELEMENTS_ENCOUNTERED, + + /** SOAP builder encountered multiple headers */ + AXIS2_ERROR_SOAP_BUILDER_MULTIPLE_HEADERS_ENCOUNTERED, + /*SOAP fault code element should a mandatory fault value element */ + AXIS2_ERROR_SOAP_FAULT_CODE_DOES_NOT_HAVE_A_VALUE, + /*SOAP fault reason element should have a text */ + AXIS2_ERROR_SOAP_FAULT_REASON_ELEMENT_SHOULD_HAVE_A_TEXT, + /*SOAP fault role element should have a text value */ + AXIS2_ERROR_SOAP_FAULT_ROLE_ELEMENT_SHOULD_HAVE_A_TEXT, + /* SOAP fault value should be present before sub code element in SOAP fault code */ + AXIS2_ERROR_SOAP_FAULT_VALUE_SHOULD_BE_PRESENT_BEFORE_SUB_CODE, + + /** SOAP message does not have an envelope element */ + AXIS2_ERROR_SOAP_MESSAGE_DOES_NOT_CONTAIN_AN_ENVELOPE, + /*SOAP message first element must contain a localname */ + AXIS2_ERROR_SOAP_MESSAGE_FIRST_ELEMENT_MUST_CONTAIN_LOCAL_NAME, + /* this localname is not supported inside a reason element */ + AXIS2_ERROR_THIS_LOCALNAME_IS_NOT_SUPPORTED_INSIDE_THE_REASON_ELEMENT, + /*this localname is not supported inside a sub code element */ + AXIS2_ERROR_THIS_LOCALNAME_IS_NOT_SUPPORTED_INSIDE_THE_SUB_CODE_ELEMENT, + /*this localname is not supported inside the code element */ + AXIS2_ERROR_THIS_LOCALNAME_NOT_SUPPORTED_INSIDE_THE_CODE_ELEMENT, + /*transport level identified SOAP version does not match with the SOAP version */ + AXIS2_ERROR_TRANSPORT_LEVEL_INFORMATION_DOES_NOT_MATCH_WITH_SOAP, + /*unsupported element in SOAP fault element */ + AXIS2_ERROR_UNSUPPORTED_ELEMENT_IN_SOAP_FAULT_ELEMENT, + /*wrong element order encountered */ + AXIS2_ERROR_WRONG_ELEMENT_ORDER_ENCOUNTERED, + /* + * Group - services + */ + + /** Invalid XML format in request */ + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + + /** Input OM node NULL, Probably error in SOAP request */ + AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, + + /** Invalid parameters for service operation in SOAP request */ + AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST, + + /* + * Group - repos + */ + /* not authenticated */ + AXIS2_ERROR_REPOS_NOT_AUTHENTICATED, + /* unsupported mode */ + AXIS2_ERROR_REPOS_UNSUPPORTED_MODE, + /* expired */ + AXIS2_ERROR_REPOS_EXPIRED, + /* not implemented */ + AXIS2_ERROR_REPOS_NOT_IMPLEMENTED, + /* not found */ + AXIS2_ERROR_REPOS_NOT_FOUND, + /* bad search text */ + AXIS2_ERROR_REPOS_BAD_SEARCH_TEXT, + + /* + *Group - Neethi + */ + /* No Namespace */ + AXIS2_ERROR_NEETHI_ELEMENT_WITH_NO_NAMESPACE, + /*Policy cannot be created from element */ + AXIS2_ERROR_NEETHI_POLICY_CREATION_FAILED_FROM_ELEMENT, + /*All Cannot be created from element */ + AXIS2_ERROR_NEETHI_ALL_CREATION_FAILED_FROM_ELEMENT, + /*Exactly one Cannot be created element */ + AXIS2_ERROR_NEETHI_EXACTLYONE_CREATION_FAILED_FROM_ELEMENT, + /*Reference Cannot be created from element */ + AXIS2_ERROR_NEETHI_REFERENCE_CREATION_FAILED_FROM_ELEMENT, + /*Assertion Cannot be created from element */ + AXIS2_ERROR_NEETHI_ASSERTION_CREATION_FAILED_FROM_ELEMENT, + /*All creation failed */ + AXIS2_ERROR_NEETHI_ALL_CREATION_FAILED, + /*Exactly one creation failed */ + AXIS2_ERROR_NEETHI_EXACTLYONE_CREATION_FAILED, + /*Policy Creation failed */ + AXIS2_ERROR_NEETHI_POLICY_CREATION_FAILED, + /*Normalization failed */ + AXIS2_ERROR_NEETHI_NORMALIZATION_FAILED, + /*Merging Failed. Wrong Input */ + AXIS2_ERROR_NEETHI_WRONG_INPUT_FOR_MERGE, + /*Merging Failed. Cross Product failed */ + AXIS2_ERROR_NEETHI_CROSS_PRODUCT_FAILED, + /*No Children Policy Components */ + AXIS2_ERROR_NEETHI_NO_CHILDREN_POLICY_COMPONENTS, + /*Uri Not specified */ + AXIS2_ERROR_NEETHI_URI_NOT_SPECIFIED, + /*Policy NULL for the given uri */ + AXIS2_ERROR_NEETHI_NO_ENTRY_FOR_THE_GIVEN_URI, + /*Exactly one not found in Normalized policy */ + AXIS2_ERROR_NEETHI_EXACTLYONE_NOT_FOUND_IN_NORMALIZED_POLICY, + /*Exactly one is Empty */ + AXIS2_ERROR_NEETHI_EXACTLYONE_IS_EMPTY, + /*Exactly one not found while getting cross product */ + AXIS2_ERROR_NEETHI_ALL_NOT_FOUND_WHILE_GETTING_CROSS_PRODUCT, + /*Unknown Assertion*/ + AXIS2_ERROR_NEETHI_UNKNOWN_ASSERTION, + /** + * The following has to be the last error value all the time. + * All other error codes should appear above this. + * AXIS2_ERROR_LAST is used to track the number of error codes present + * for the purpose of sizing the error messages array. + */ + AXIS2_ERROR_LAST + }; + + struct axutil_error; + typedef enum axis2_status_codes axis2_status_codes_t; + typedef enum axutil_error_codes axutil_error_codes_t; + + /** + * @defgroup axutil_error error + * @ingroup axis2_util + * @{ + */ + + /** + * Axutil error struct. + * Error holds the last error number, the status code as well as the + * last error message. + */ + typedef struct axutil_error + { + /** + * Memory allocator associated with the error struct. + * It is this allocator that would be used to allocate memory + * for the error struct instance in create method. + */ + axutil_allocator_t *allocator; + + /** Last error number. */ + int error_number; + /** Last status code. */ + int status_code; + /** + * Error message. This could be set to a custom message to be + * returned, instead of standard errors set in the error messages + * array by the axutil_error_init function call. + */ + axis2_char_t *message; + } + axutil_error_t; + + /** + * Gets the error message corresponding to the last error occurred. + * @param error pointer to error struct + * @return string representing the error message for the last error occurred + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axutil_error_get_message( + const struct axutil_error *error); + + /** + * This function is supposed to be overridden in an extended error structure. + * For example in Sandesha error structure this function is overridden so that + * errors of axis2 range call the get_message function of error struct but + * errors of sandesha2 range get the messages from an array of that struct. + * @return error message for the extended struct. + * @deprecated this function is not in use, so should be removed. + */ + /*AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axutil_error_get_extended_message( + const struct axutil_error *error);*/ + + /** + * Sets the error number. + * @param error pointer to error struct + * @param error_number error number to be set + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_error_set_error_number( + struct axutil_error *error, + axutil_error_codes_t error_number); + + /** + * Sets the status code. + * @param error pointer to error struct + * @param status_code status code to be set + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_error_set_status_code( + struct axutil_error *error, + axis2_status_codes_t status_code); + + /** + * Gets the status code. + * @param error pointer to error struct + * @return last status code set on error struct + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_error_get_status_code( + struct axutil_error *error); + + /** + * Sets error message to the given value. + * @param error pointer to error struct + * @param message error message to be set + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_error_set_error_message( + struct axutil_error *error, + axis2_char_t *message); + + /** + * Initializes the axutil_error_messages array. This array holds the + * error messages that corresponds to the error codes. This function + * must be call before using the error struct instance. + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_error_init(void); + + /** + * De-allocates an error struct instance. + * @param error pointer to error struct instance to be freed. + * @return void + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_error_free( + struct axutil_error *error); + +/** + * @deprecated The following macros are no longer useful as we can use the + * function calls directly. Hence these macros should be removed + */ + +#define AXIS2_ERROR_FREE(error) axutil_error_free(error) + +#define AXIS2_ERROR_GET_MESSAGE(error) \ + axutil_error_get_message(error) + +#define AXIS2_ERROR_SET_MESSAGE(error, message) \ + axutil_error_set_error_message(error, message) + +#define AXIS2_ERROR_SET_ERROR_NUMBER(error, error_number) \ + axutil_error_set_error_number(error, error_number) + +#define AXIS2_ERROR_SET_STATUS_CODE(error, status_code) \ + axutil_error_set_status_code(error, status_code) + +#define AXIS2_ERROR_GET_STATUS_CODE(error) axutil_error_get_status_code(error) + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_ERROR_H */ diff --git a/util/include/axutil_error_default.h b/util/include/axutil_error_default.h new file mode 100644 index 0000000..82a611c --- /dev/null +++ b/util/include/axutil_error_default.h @@ -0,0 +1,52 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_ERROR_DEFAULT_H +#define AXUTIL_ERROR_DEFAULT_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_error error + * @ingroup axis2_util + * @{ + */ + + /** + * Creates an error struct + * @param allocator allocator to be used. Mandatory, cannot be NULL + * @return pointer to the newly created error struct + */ + AXIS2_EXTERN axutil_error_t *AXIS2_CALL + axutil_error_create( + axutil_allocator_t * allocator); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_ERROR_DEFAULT_H */ diff --git a/util/include/axutil_file.h b/util/include/axutil_file.h new file mode 100644 index 0000000..d03e4df --- /dev/null +++ b/util/include/axutil_file.h @@ -0,0 +1,99 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_FILE_H +#define AXUTIL_FILE_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axutil_file axutil_file_t; + + /** + * @defgroup axutil_file file + * @ingroup axis2_util + * @{ + */ + + /** + * create new file + * @return file newly created file + */ + AXIS2_EXTERN axutil_file_t *AXIS2_CALL + axutil_file_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + axutil_file_free( + axutil_file_t * file, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_file_set_name( + axutil_file_t * file, + const axutil_env_t * env, + axis2_char_t * name); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_file_get_name( + axutil_file_t * file, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_file_set_path( + axutil_file_t * file, + const axutil_env_t * env, + axis2_char_t * path); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_file_get_path( + axutil_file_t * file, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_file_set_timestamp( + axutil_file_t * file, + const axutil_env_t * env, + AXIS2_TIME_T timestamp); + + AXIS2_EXTERN AXIS2_TIME_T AXIS2_CALL + axutil_file_get_timestamp( + axutil_file_t * file, + const axutil_env_t * env); + + /** + * create a newly allocated clone of the argument file + */ + AXIS2_EXTERN axutil_file_t *AXIS2_CALL + axutil_file_clone( + axutil_file_t * file, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_FILE_H */ diff --git a/util/include/axutil_file_handler.h b/util/include/axutil_file_handler.h new file mode 100644 index 0000000..18bc92a --- /dev/null +++ b/util/include/axutil_file_handler.h @@ -0,0 +1,91 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain count copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_FILE_HANDLER_H +#define AXUTIL_FILE_HANDLER_H + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_file_handler file handler + * @ingroup axis2_util + * @{ + */ + + /** + * open a file for read according to the file options given + * @param file_name file to be opened + * @param options file options given. + * @return status code + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_file_handler_open( + const char *file_name, + const char *options); + + /** + * close a file + * @param file_ptr file pointer of the file need to be closed + * @return status code + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_file_handler_close( + void *file_ptr); + + /** + * determine accessibility of file + * checks the named file for accessibility according to mode + * @param path path name naming a file + * @param mode + * AXIS2_R_OK + * - test for read permission + * AXIS2_W_OK + * - test for write permission + * AXIS2_X_OK + * - test for execute or search permission + * AXIS2_F_OK + * - test whether the directories leading to the file can be searched and the + * file exists + * @return status + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_file_handler_access( + const axis2_char_t * path, + int mode); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_file_handler_copy( + FILE *from, + FILE *to); + + AXIS2_EXTERN long AXIS2_CALL + axutil_file_handler_size( + const axis2_char_t *const name); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_FILE_HANDLER_H */ diff --git a/util/include/axutil_generic_obj.h b/util/include/axutil_generic_obj.h new file mode 100644 index 0000000..b724b9a --- /dev/null +++ b/util/include/axutil_generic_obj.h @@ -0,0 +1,85 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_GENERIC_OBJ_H +#define AXUTIL_GENERIC_OBJ_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axutil_generic_obj axutil_generic_obj_t; + + /** + * @defgroup axutil_generic_obj generic object + * @ingroup axis2_util + * @{ + */ + + /** + * create new generic_obj + * @return generic_obj newly created generic_obj + */ + AXIS2_EXTERN axutil_generic_obj_t *AXIS2_CALL + axutil_generic_obj_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + axutil_generic_obj_free( + axutil_generic_obj_t * generic_obj, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_generic_obj_set_free_func( + axutil_generic_obj_t * generic_obj, + const axutil_env_t * env, + AXIS2_FREE_VOID_ARG free_func); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_generic_obj_set_value( + axutil_generic_obj_t * generic_obj, + const axutil_env_t * env, + void *value); + + AXIS2_EXTERN void *AXIS2_CALL + axutil_generic_obj_get_value( + axutil_generic_obj_t * generic_obj, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_generic_obj_set_type( + axutil_generic_obj_t * generic_obj, + const axutil_env_t * env, + int type); + + AXIS2_EXTERN int AXIS2_CALL + axutil_generic_obj_get_type( + axutil_generic_obj_t * generic_obj, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_GENERIC_OBJ_H */ diff --git a/util/include/axutil_hash.h b/util/include/axutil_hash.h new file mode 100644 index 0000000..084f2bc --- /dev/null +++ b/util/include/axutil_hash.h @@ -0,0 +1,301 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_HASH_H +#define AXUTIL_HASH_H + +/** + * @file axutil_hash.h + * @brief Axis2 Hash Tables + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_hash hash + * @ingroup axis2_util + * @{ + */ + + /** + * When passing a key to axutil_hash_set or axutil_hash_get, this value can be + * passed to indicate a string-valued key, and have axutil_hash compute the + * length automatically. + * + * @remark axutil_hash will use strlen(key) for the length. The NUL terminator + * is not included in the hash value (why throw a constant in?). + * Since the hash table merely references the provided key (rather + * than copying it), axutil_hash_this() will return the NUL-term'd key. + */ +#define AXIS2_HASH_KEY_STRING (unsigned int)(-1) + + /** + * Abstract type for hash tables. + */ + typedef struct axutil_hash_t axutil_hash_t; + + /** + * Abstract type for scanning hash tables. + */ + typedef struct axutil_hash_index_t axutil_hash_index_t; + + /** + * Callback functions for calculating hash values. + * @param key The key. + * @param klen The length of the key, or AXIS2_HASH_KEY_STRING to use the string + * length. If AXIS2_HASH_KEY_STRING then returns the actual key length. + */ + typedef unsigned int( + *axutil_hashfunc_t)( + const char *key, + axis2_ssize_t * klen); + + /** + * The default hash function. + */ + unsigned int axutil_hashfunc_default( + const char *key, + axis2_ssize_t * klen); + + /** + * Create a hash table. + * @param env The environment to allocate the hash table out of + * @return The hash table just created + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axutil_hash_make( + const axutil_env_t * env); + + /** + * Create a hash table with a custom hash function + * @param env The environment to allocate the hash table out of + * @param hash_func A custom hash function. + * @return The hash table just created + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axutil_hash_make_custom( + const axutil_env_t * env, + axutil_hashfunc_t hash_func); + + /** + * Make a copy of a hash table + * @param ht The hash table to clone + * @param env The environment from which to allocate the new hash table + * @return The hash table just created + * @remark Makes a shallow copy + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axutil_hash_copy( + const axutil_hash_t * ht, + const axutil_env_t * env); + + /** + * Associate a value with a key in a hash table. + * @param ht The hash table + * @param key Pointer to the key + * @param klen Length of the key. Can be AXIS2_HASH_KEY_STRING to use the string length. + * @param val Value to associate with the key + * @remark If the value is NULL the hash entry is deleted. + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_hash_set( + axutil_hash_t * ht, + const void *key, + axis2_ssize_t klen, + const void *val); + + /** + * Look up the value associated with a key in a hash table. + * @param ht The hash table + * @param key Pointer to the key + * @param klen Length of the key. Can be AXIS2_HASH_KEY_STRING to use the string length. + * @return Returns NULL if the key is not present. + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_hash_get( + axutil_hash_t * ht, + const void *key, + axis2_ssize_t klen); + + /** + * Start iterating over the entries in a hash table. + * @param ht The hash table + * @param p The environment to allocate the axutil_hash_index_t iterator. If this + * environment is NULL, then an internal, non-thread-safe iterator is used. + * @remark There is no restriction on adding or deleting hash entries during + * an iteration (although the results may be unpredictable unless all you do + * is delete the current entry) and multiple iterations can be in + * progress at the same time. + + * @example + */ + + /** + *
+     *
+     * int sum_values(const axutil_env_t *env, axutil_hash_t *ht)
+     * {
+     *     axutil_hash_index_t *hi;
+     *     void *val;
+     *     int sum = 0;
+     *     for (hi = axutil_hash_first(p, ht); hi; hi = axutil_hash_next(p, hi)) {
+     *         axutil_hash_this(hi, NULL, NULL, &val);
+     *         sum += *(int *)val;
+     *     }
+     *     return sum;
+     * }
+     * 
+ */ + AXIS2_EXTERN axutil_hash_index_t *AXIS2_CALL + axutil_hash_first( + axutil_hash_t * ht, + const axutil_env_t * env); + + /** + * Continue iterating over the entries in a hash table. + * @param hi The iteration state + * @return a pointer to the updated iteration state. NULL if there are no more + * entries. + */ + AXIS2_EXTERN axutil_hash_index_t *AXIS2_CALL + axutil_hash_next( + const axutil_env_t * env, + axutil_hash_index_t * hi); + + /** + * Get the current entry's details from the iteration state. + * @param hi The iteration state + * @param key Return pointer for the pointer to the key. + * @param klen Return pointer for the key length. + * @param val Return pointer for the associated value. + * @remark The return pointers should point to a variable that will be set to the + * corresponding data, or they may be NULL if the data isn't interesting. + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_hash_this( + axutil_hash_index_t * hi, + const void **key, + axis2_ssize_t * klen, + void **val); + + /** + * Get the number of key/value pairs in the hash table. + * @param ht The hash table + * @return The number of key/value pairs in the hash table. + */ + AXIS2_EXTERN unsigned int AXIS2_CALL + axutil_hash_count( + axutil_hash_t * ht); + + /** + * Merge two hash tables into one new hash table. The values of the overlay + * hash override the values of the base if both have the same key. Both + * hash tables must use the same hash function. + * @param overlay The table to add to the initial table + * @param p The environment to use for the new hash table + * @param base The table that represents the initial values of the new table + * @return A new hash table containing all of the data from the two passed in + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axutil_hash_overlay( + const axutil_hash_t * overlay, + const axutil_env_t * env, + const axutil_hash_t * base); + + /** + * Merge two hash tables into one new hash table. If the same key + * is present in both tables, call the supplied merge function to + * produce a merged value for the key in the new table. Both + * hash tables must use the same hash function. + * @param h1 The first of the tables to merge + * @param p The environment to use for the new hash table + * @param h2 The second of the tables to merge + * @param merger A callback function to merge values, or NULL to + * make values from h1 override values from h2 (same semantics as + * axutil_hash_overlay()) + * @param data Client data to pass to the merger function + * @return A new hash table containing all of the data from the two passed in + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axutil_hash_merge( + const axutil_hash_t * h1, + const axutil_env_t * env, + const axutil_hash_t * h2, + void *(*merger)(const axutil_env_t * env, + const void *key, + axis2_ssize_t klen, + const void *h1_val, + const void *h2_val, + const void *data), + const void *data); + + /** + * Query whether the hash table provided as parameter contains the + * key provided as parameter. + * + * @param ht hash table to be queried for key + * @return return whether hash table contains key + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_hash_contains_key( + axutil_hash_t * ht, + const axutil_env_t * env, + const axis2_char_t * key); + + /** + * @param ht hash table to be freed + * @param env The environment to use for hash table + * @return return status code + * + */ + + AXIS2_EXTERN void AXIS2_CALL + axutil_hash_free( + axutil_hash_t * ht, + const axutil_env_t * env); + + /** + * Free a hash table with hash table given as void + * @param ht hash table to be freed as a void * + * @param env The environment to use for hash table + * @return return status code + */ + + AXIS2_EXTERN void AXIS2_CALL + axutil_hash_free_void_arg( + void *ht_void, + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + axutil_hash_set_env( + axutil_hash_t * ht, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* !AXIS2_HASH_H */ diff --git a/util/include/axutil_http_chunked_stream.h b/util/include/axutil_http_chunked_stream.h new file mode 100644 index 0000000..7fc7a18 --- /dev/null +++ b/util/include/axutil_http_chunked_stream.h @@ -0,0 +1,132 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXUTIL_HTTP_CHUNKED_STREAM_H +#define AXUTIL_HTTP_CHUNKED_STREAM_H + +/** + * @defgroup axutil_http_chunked_stream http chunked stream + * @ingroup axis2_core_trans_http + * Description + * @{ + */ + +/** + * @file axutil_http_chunked_stream.h + * @brief axis2 HTTP Chunked Stream + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** Type name for struct axutil_http_chunked_stream */ + typedef struct axutil_http_chunked_stream axutil_http_chunked_stream_t; + + struct axis2_callback_info + { + const axutil_env_t *env; + void *in_stream; + int content_length; + int unread_len; + axutil_http_chunked_stream_t *chunked_stream; + }; + typedef struct axis2_callback_info axis2_callback_info_t; + + + /** + * @param chunked_stream pointer to chunked stream + * @param env pointer to environment struct + * @param buffer + * @param count + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_http_chunked_stream_read( + axutil_http_chunked_stream_t * chunked_stream, + const axutil_env_t * env, + void *buffer, + size_t count); + + /** + * @param env pointer to environment struct + * @param buffer + * @param count + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_http_chunked_stream_write( + axutil_http_chunked_stream_t * chunked_stream, + const axutil_env_t * env, + const void *buffer, + size_t count); + + /** + * @param chunked_stream pointer to chunked stream + * @param env pointer to environment struct + */ + AXIS2_EXTERN int AXIS2_CALL + + axutil_http_chunked_stream_get_current_chunk_size( + const axutil_http_chunked_stream_t * chunked_stream, + const axutil_env_t * env); + + /** + * @param chunked_stream pointer to chunked stream + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axutil_http_chunked_stream_write_last_chunk( + axutil_http_chunked_stream_t * chunked_stream, + const axutil_env_t * env); + + /** + * @param chunked_stream pointer to chunked stream + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_http_chunked_stream_free( + axutil_http_chunked_stream_t * chunked_stream, + const axutil_env_t * env); + + /** + * @param env pointer to environment struct + * @param stream pointer to stream + */ + AXIS2_EXTERN axutil_http_chunked_stream_t *AXIS2_CALL + + axutil_http_chunked_stream_create( + const axutil_env_t * env, + axutil_stream_t * stream); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_http_chunked_stream_get_end_of_chunks( + axutil_http_chunked_stream_t * chunked_stream, + const axutil_env_t * env); + + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXUTIL_HTTP_CHUNKED_STREAM_H */ diff --git a/util/include/axutil_linked_list.h b/util/include/axutil_linked_list.h new file mode 100644 index 0000000..59454d5 --- /dev/null +++ b/util/include/axutil_linked_list.h @@ -0,0 +1,334 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_LINKED_LIST_H +#define AXUTIL_LINKED_LIST_H + +/** + * @file axutil_linked_list.h + * @brief Axis2 linked_list interface + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axutil_linked_list axutil_linked_list_t; + + /** + * @defgroup axutil_linked_list linked list + * @ingroup axis2_util + * @{ + */ + + /** + * Struct to represent an entry in the list. Holds a single element. + */ + typedef struct entry_s + { + + /** The element in the list. */ + void *data; + + /** The next list entry, null if this is last. */ + struct entry_s *next; + + /** The previous list entry, null if this is first. */ + struct entry_s *previous; + + } + entry_t; /* struct entry */ + + /** + * Create an empty linked list. + */ + AXIS2_EXTERN axutil_linked_list_t *AXIS2_CALL + axutil_linked_list_create( + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + axutil_linked_list_free( + axutil_linked_list_t * linked_list, + const axutil_env_t * env); + + /** + * Obtain the Entry at a given position in a list. This method of course + * takes linear time, but it is intelligent enough to take the shorter of the + * paths to get to the Entry required. This implies that the first or last + * entry in the list is obtained in constant time, which is a very desirable + * property. + * For speed and flexibility, range checking is not done in this method: + * Incorrect values will be returned if (n < 0) or (n >= size). + * + * @param n the number of the entry to get + * @return the entry at position n + */ + AXIS2_EXTERN entry_t *AXIS2_CALL + axutil_linked_list_get_entry( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + int n); + + /** + * Remove an entry from the list. This will adjust size and deal with + * `first' and `last' appropriatly. + * + * @param e the entry to remove + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_linked_list_remove_entry( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + entry_t * e); + + /** + * Checks that the index is in the range of possible elements (inclusive). + * + * @param index the index to check + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axutil_linked_list_check_bounds_inclusive( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + int index); + + /** + * Checks that the index is in the range of existing elements (exclusive). + * + * @param index the index to check + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axutil_linked_list_check_bounds_exclusive( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + int index); + + /** + * Returns the first element in the list. + * + * @return the first list element + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_linked_list_get_first( + axutil_linked_list_t * linked_list, + const axutil_env_t * env); + + /** + * Returns the last element in the list. + * + * @return the last list element + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_linked_list_get_last( + axutil_linked_list_t * linked_list, + const axutil_env_t * env); + + /** + * Remove and return the first element in the list. + * + * @return the former first element in the list + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_linked_list_remove_first( + axutil_linked_list_t * linked_list, + const axutil_env_t * env); + + /** + * Remove and return the last element in the list. + * + * @return the former last element in the list + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_linked_list_remove_last( + axutil_linked_list_t * linked_list, + const axutil_env_t * env); + + /** + * Insert an element at the first of the list. + * + * @param o the element to insert + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_linked_list_add_first( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + void *o); + + /** + * Insert an element at the last of the list. + * + * @param o the element to insert + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_linked_list_add_last( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + void *o); + + /** + * Returns true if the list contains the given object. Comparison is done by + * o == null ? e = null : o.equals(e). + * + * @param o the element to look for + * @return true if it is found + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_linked_list_contains( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + void *o); + + /** + * Returns the size of the list. + * + * @return the list size + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_linked_list_size( + axutil_linked_list_t * linked_list, + const axutil_env_t * env); + + /** + * Adds an element to the end of the list. + * + * @param e the entry to add + * @return true, as it always succeeds + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_linked_list_add( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + void *o); + + /** + * Removes the entry at the lowest index in the list that matches the given + * object, comparing by o == null ? e = null : o.equals(e). + * + * @param o the object to remove + * @return true if an instance of the object was removed + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_linked_list_remove( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + void *o); + + /** + * Remove all elements from this list. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_linked_list_clear( + axutil_linked_list_t * linked_list, + const axutil_env_t * env); + + /** + * Return the element at index. + * + * @param index the place to look + * @return the element at index + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_linked_list_get( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + int index); + + /** + * Replace the element at the given location in the list. + * + * @param index which index to change + * @param o the new element + * @return the prior element + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_linked_list_set( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + int index, + void *o); + + /** + * Inserts an element in the given position in the list. + * + * @param index where to insert the element + * @param o the element to insert + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_linked_list_add_at_index( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + int index, + void *o); + + /** + * Removes the element at the given position from the list. + * + * @param index the location of the element to remove + * @return the removed element + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_linked_list_remove_at_index( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + int index); + + /** + * Returns the first index where the element is located in the list, or -1. + * + * @param o the element to look for + * @return its position, or -1 if not found + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_linked_list_index_of( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + void *o); + + /** + * Returns the last index where the element is located in the list, or -1. + * + * @param o the element to look for + * @return its position, or -1 if not found + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_linked_list_last_index_of( + axutil_linked_list_t * linked_list, + const axutil_env_t * env, + void *o); + + /** + * Returns an array which contains the elements of the list in order. + * + * @return an array containing the list elements + */ + AXIS2_EXTERN void **AXIS2_CALL + axutil_linked_list_to_array( + axutil_linked_list_t * linked_list, + const axutil_env_t * env); + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_LINKED_LIST_H */ diff --git a/util/include/axutil_log.h b/util/include/axutil_log.h new file mode 100644 index 0000000..09e9242 --- /dev/null +++ b/util/include/axutil_log.h @@ -0,0 +1,259 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_LOG_H +#define AXUTIL_LOG_H + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axutil_log_ops axutil_log_ops_t; + typedef struct axutil_log axutil_log_t; + +#define AXIS2_LOG_SI __FILE__,__LINE__ + + /** + * @defgroup axutil_log log + * @ingroup axis2_util + * @{ + */ + + /** + *Examples + *To write debug information to log + *AXIS2_LOG_DEBUG(log,AXIS2_LOG_SI,"log this %s %d","test",123); + *This would log + *"log this test 123" into the log file + * + *similar macros are defined for different log levels: CRITICAL,ERROR,WARNING and INFO + * and SERVICE + * + *CRITICAL and ERROR logs are always written to file and other logs are written + *depending on the log level set (log->level) + */ + + /** + * \brief Axis2 log levels + */ + typedef enum axutil_log_levels + { + + /** Critical level, logs only critical errors */ + AXIS2_LOG_LEVEL_CRITICAL = 0, + + /** Error level, logs only errors */ + AXIS2_LOG_LEVEL_ERROR, + + /** Warning level, logs only warnings */ + AXIS2_LOG_LEVEL_WARNING, + + /** Info level, logs information */ + AXIS2_LOG_LEVEL_INFO, + + /** Debug level, logs everything */ + AXIS2_LOG_LEVEL_DEBUG, + + /** User level, logs only user level debug messages */ + AXIS2_LOG_LEVEL_USER, + + /** Trace level, Enable with compiler time option AXIS2_TRACE */ + AXIS2_LOG_LEVEL_TRACE + + } axutil_log_levels_t; + + /** + * \brief Axis2 log ops struct + * + * Encapsulator struct for ops of axutil_log + */ + struct axutil_log_ops + { + + /** + * deletes the log + * @return axis2_status_t AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + + void( + AXIS2_CALL + * free)( + axutil_allocator_t * allocator, + struct axutil_log * log); + + /** + * writes to the log + * @param buffer buffer to be written to log + * @param size size of the buffer to be written to log + * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + void( + AXIS2_CALL + * write)( + axutil_log_t * log, + const axis2_char_t * buffer, + axutil_log_levels_t level, + const axis2_char_t * file, + const int line); + }; + + /** + * \brief Axis2 Log struct + * + * Log is the encapsulating struct for all log related data and ops + */ + struct axutil_log + { + + /** Log related ops */ + const axutil_log_ops_t *ops; + + /** Log level */ + axutil_log_levels_t level; + + /** Maximum log file size */ + int size; + + /** Is logging enabled? */ + axis2_bool_t enabled; + + }; + + AXIS2_EXTERN void AXIS2_CALL + axutil_log_impl_log_critical( + axutil_log_t * log, + const axis2_char_t * filename, + const int linenumber, + const axis2_char_t * format, + ...); + + AXIS2_EXTERN void AXIS2_CALL + axutil_log_impl_log_error( + axutil_log_t * log, + const axis2_char_t * filename, + const int linenumber, + const axis2_char_t * format, + ...); + + AXIS2_EXTERN void AXIS2_CALL + axutil_log_impl_log_warning( + axutil_log_t * log, + const axis2_char_t * filename, + const int linenumber, + const axis2_char_t * format, + ...); + + AXIS2_EXTERN void AXIS2_CALL + axutil_log_impl_log_info( + axutil_log_t * log, + const axis2_char_t * format, + ...); + + AXIS2_EXTERN void AXIS2_CALL + axutil_log_impl_log_user( + axutil_log_t * log, + const axis2_char_t * filename, + const int linenumber, + const axis2_char_t * format, + ...); + + AXIS2_EXTERN void AXIS2_CALL + axutil_log_impl_log_debug( + axutil_log_t * log, + const axis2_char_t * filename, + const int linenumber, + const axis2_char_t * format, + ...); + + AXIS2_EXTERN void AXIS2_CALL + axutil_log_impl_log_trace( + axutil_log_t * log, + const axis2_char_t * filename, + const int linenumber, + const axis2_char_t * format, + ...); + + AXIS2_EXTERN void AXIS2_CALL + axutil_log_free( + axutil_allocator_t * allocator, + struct axutil_log *log); + + AXIS2_EXTERN void AXIS2_CALL + axutil_log_write( + axutil_log_t * log, + const axis2_char_t * buffer, + axutil_log_levels_t level, + const axis2_char_t * file, + const int line); + + +#define AXIS2_LOG_FREE(allocator, log) \ + axutil_log_free(allocator, log) + +#define AXIS2_LOG_WRITE(log, buffer, level, file) \ + axutil_log_write(log, buffer, level, file, AXIS2_LOG_SI) + +#define AXIS2_LOG_USER axutil_log_impl_log_user +#define AXIS2_LOG_DEBUG axutil_log_impl_log_debug +#define AXIS2_LOG_INFO axutil_log_impl_log_info +#define AXIS2_LOG_WARNING axutil_log_impl_log_warning +#define AXIS2_LOG_ERROR axutil_log_impl_log_error +#define AXIS2_LOG_CRITICAL axutil_log_impl_log_critical + +#ifdef AXIS2_TRACE +#define AXIS2_LOG_TRACE axutil_log_impl_log_trace +#else +# ifdef HAVE_GNUC_VARARGS +# define AXIS2_LOG_TRACE(params, args ...) +# elif defined HAVE_ISO_VARARGS +# define AXIS2_LOG_TRACE(params, ...) +# elif __STDC__ && __STDC_VERSION > 199901L +# define AXIS2_LOG_TRACE(params, ...) +# elif WIN32 +# define AXIS2_LOG_TRACE axutil_log_impl_log_trace +# else +# define AXIS2_LOG_TRACE axutil_log_impl_log_trace +# endif +#endif + +#ifndef AXIS2_LOG_PROJECT_PREFIX + /** Each module/project should undef and define the following.. */ +#define AXIS2_LOG_PROJECT_PREFIX "[axis2c]" +#endif + +#define AXIS2_LOG_USER_MSG(log, msg) AXIS2_LOG_USER (log, AXIS2_LOG_SI, "%s %s", AXIS2_LOG_PROJECT_PREFIX, msg) +#define AXIS2_LOG_DEBUG_MSG(log, msg) AXIS2_LOG_DEBUG (log, AXIS2_LOG_SI, "%s %s", AXIS2_LOG_PROJECT_PREFIX, msg) +#define AXIS2_LOG_INFO_MSG(log, msg) AXIS2_LOG_INFO (log, "%s %s", AXIS2_LOG_PROJECT_PREFIX, msg) +#define AXIS2_LOG_WARNING_MSG(log, msg) AXIS2_LOG_WARNING (log, AXIS2_LOG_SI, "%s %s", AXIS2_LOG_PROJECT_PREFIX, msg) +#define AXIS2_LOG_ERROR_MSG(log, msg) AXIS2_LOG_ERROR (log, AXIS2_LOG_SI, "%s %s", AXIS2_LOG_PROJECT_PREFIX, msg) +#define AXIS2_LOG_CRITICAL_MSG(log, msg) AXIS2_LOG_CRITICAL (log, AXIS2_LOG_SI, "%s %s", AXIS2_LOG_PROJECT_PREFIX, msg) +#define AXIS2_LOG_TRACE_MSG(log, msg) AXIS2_LOG_TRACE (log, AXIS2_LOG_SI, "%s %s", AXIS2_LOG_PROJECT_PREFIX, msg) + + +#define IF_AXIS2_LOG_DEBUG_ENABLED(log) if(AXIS2_LOG_LEVEL_DEBUG <= log->level && log->level != AXIS2_LOG_LEVEL_USER) + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_LOG_H */ diff --git a/util/include/axutil_log_default.h b/util/include/axutil_log_default.h new file mode 100644 index 0000000..4165f85 --- /dev/null +++ b/util/include/axutil_log_default.h @@ -0,0 +1,64 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_LOG_DEFAULT_H +#define AXUTIL_LOG_DEFAULT_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_log Log + * @ingroup axis2_util + * @{ + */ + +#define AXIS2_LEN_VALUE 6000 + + /** + * Creates a log struct + * @param allocator allocator to be used. Mandatory, cannot be NULL + * @return pointer to the newly created log struct + */ + AXIS2_EXTERN axutil_log_t *AXIS2_CALL + axutil_log_create( + axutil_allocator_t * allocator, + axutil_log_ops_t * ops, + const axis2_char_t * stream_name); + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_log_impl_get_time_str( + void); + + AXIS2_EXTERN axutil_log_t *AXIS2_CALL + axutil_log_create_default( + axutil_allocator_t * allocator); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_LOG_DEFAULT_H */ diff --git a/util/include/axutil_md5.h b/util/include/axutil_md5.h new file mode 100644 index 0000000..b13bcb1 --- /dev/null +++ b/util/include/axutil_md5.h @@ -0,0 +1,130 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_MD5_H +#define AXUTIL_MD5_H + +/** + * @file axutil_md5.h + * @brief MD5 Implementation for Axis2 based on rfc1321. + */ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axis2_util utilities + * @ingroup axis2 + * @{ + * @} + */ + + /** + * @defgroup axutil_md5 md5 + * @ingroup axis2_util + * @{ + */ + + /** The MD5 digest size */ + #define AXIS2_MD5_DIGESTSIZE 16 + + typedef struct axutil_md5_ctx + { + /** state (ABCD) */ + unsigned int state[4]; + /** number of bits, modulo 2^64 (lsb first) */ + unsigned int count[2]; + /** input buffer */ + unsigned char buffer[64]; + } + axutil_md5_ctx_t; + + /** + * Creates md5_ctx struct, which is used for the MD5 message-digest + * operation. Initialization of the struct is done during the creation + * process. + * @param env, pointer to the env struct. + * @return pointer to md5_ctx struct created. + */ + AXIS2_EXTERN axutil_md5_ctx_t *AXIS2_CALL + axutil_md5_ctx_create( + const axutil_env_t * env); + + /** + * Frees the md5_ctx struct + * @param md5_ctx, pointer to struct to free. + * @param env, pointer to the env struct. + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_md5_ctx_free( + axutil_md5_ctx_t * md5_ctx, + const axutil_env_t * env); + + /** + * MD5 block update operation. Continue an MD5 message-digest operation, + * processing another message block, and updating the context. + * @param context The MD5 content to update. + * @param env, pointer to the env struct. + * @param input_str next message block to update + * @param inputLen The length of the next message block + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_md5_update( + axutil_md5_ctx_t *context, + const axutil_env_t * env, + const void *input_str, + size_t inputLen); + + /** + * MD5 finalization. Ends an MD5 message-digest operation, writing the + * message digest and zeroing the context. + * @param digest The final MD5 digest. + * @param env, pointer to the env struct. + * @param context The MD5 content we are finalizing. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_md5_final( + axutil_md5_ctx_t *context, + const axutil_env_t * env, + unsigned char digest[AXIS2_MD5_DIGESTSIZE]); + + /** + * MD5 in one step. + * @param env, pointer to the env struct. + * @param digest The final MD5 digest. + * @param input_str The message block to use. + * @param inputLen The length of the message block. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_md5( + const axutil_env_t * env, + unsigned char digest[AXIS2_MD5_DIGESTSIZE], + const void *input_str, + size_t inputLen); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_MD5_H */ diff --git a/util/include/axutil_network_handler.h b/util/include/axutil_network_handler.h new file mode 100644 index 0000000..3d55cd1 --- /dev/null +++ b/util/include/axutil_network_handler.h @@ -0,0 +1,194 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain count copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_NETWORK_HANDLER_H +#define AXUTIL_NETWORK_HANDLER_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_network_handler network handler + * @ingroup axis2_util + * @{ + */ + + /** + * open a socket for a given server + * @param server ip address or the fqn of the server + * @param port port of the service + * @return opened socket + */ + AXIS2_EXTERN axis2_socket_t AXIS2_CALL + + axutil_network_handler_open_socket( + const axutil_env_t * env, + char *server, + int port); + + /** + * creates a server socket for a given port + * @param port port of the socket to be bound + * @return creates server socket + */ + AXIS2_EXTERN axis2_socket_t AXIS2_CALL + + axutil_network_handler_create_server_socket( + const axutil_env_t * env, + int port); + + /** + * closes a socket + * @param opened socket that need to be closed + * @return status code + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axutil_network_handler_close_socket( + const axutil_env_t * env, + axis2_socket_t socket); + + /** + * used to set up socket options such as timeouts, non-blocking ..etc + * @param socket valid socket (obtained by socket() or similar call) + * @param option the name of the option + * @param value Value to be set + * @return status of the operations as axis2_status_t + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + + axutil_network_handler_set_sock_option( + const axutil_env_t * env, + axis2_socket_t socket, + int option, + int value); + + /** + * Accepts remote connections for a server socket + * @param socket valid server socket (obtained by socket() or similar call) + * @return created socket to handle the incoming client connection + */ + AXIS2_EXTERN axis2_socket_t AXIS2_CALL + + axutil_network_handler_svr_socket_accept( + const axutil_env_t * env, + axis2_socket_t socket); + + /** + * Returns the ip address of the server associated with the socket + * @param socket valid socket (obtained by accept() or similar call) + * @return ip address asoociated with the socket or NULL + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_network_handler_get_svr_ip( + const axutil_env_t * env, + axis2_socket_t socket); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_network_handler_get_peer_ip( + const axutil_env_t * env, + axis2_socket_t socket); + + /* + * Create a datagram socket. + * @param env pointer to env + * @return a datagram socket + */ + AXIS2_EXTERN axis2_socket_t AXIS2_CALL + axutil_network_handler_open_dgram_socket(const axutil_env_t *env); + + /* + * Send a UDP packet to the given source and port address. + * Read a incoming UDP packet from the port and server address. + * @param env pointer to the env structure + * @param socket a datagram socket + * @param buffer a buffer containing the data to be sent + * @param buf_len length of the buffer + * @param addr address of the source field + * @param port udp port number + * @return success if everything goes well + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_network_handler_send_dgram(const axutil_env_t *env, axis2_socket_t socket, + axis2_char_t *buff, int *buf_len, + axis2_char_t *addr, int dest_port, int *source_port); + + /* + * Read a incoming UDP packet from the port and server address. + * @param env pointer to the env structure + * @param socket a datagram socket + * @param buffer a buffer allocated and passed to be filled + * @param buf_len length of the buffer allocated. In return buffer len + contains the length of the data read + * @param addr address of the sender. This is a return value. + * @param port senders port address. Return value + * @return if everything goes well return success + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_network_handler_read_dgram(const axutil_env_t *env, axis2_socket_t socket, + axis2_char_t *buffer, int *buf_len, + axis2_char_t **addr, int *port); + + /* + * Create a datagram socket to receive incoming UDP packets. + * @param env a pointer to the env structure + * @param port udp port to listen + * @return AXIS2_SUCCESS if everything goes well + */ + AXIS2_EXTERN axis2_socket_t AXIS2_CALL + axutil_network_handler_create_dgram_svr_socket( + const axutil_env_t *env, + int port); + + /* + * Bind a socket to the specified address + * @param env a pointer to the env structure + * @param sock socket + * @param port port number to bind to + * @return AXIS2_SUCCESS if binding is performed + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_network_handler_bind_socket(const axutil_env_t *env, + axis2_socket_t sock, int port); + + /* + * Create a multicast socket for listening on the given port. + * @param env a pointer to the env structure + * @param port udp port to listen + * @param mul_addr multicast address to join. The address should be valid and in dotted format. + * @param ttl TTL value. + * @return AXIS2_SUCCESS if everything goes well.s + */ + AXIS2_EXTERN axis2_socket_t AXIS2_CALL + axutil_network_hadler_create_multicast_svr_socket(const axutil_env_t *env, + int port, axis2_char_t *mul_addr); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_NETWORK_HANDLER_H */ diff --git a/util/include/axutil_param.h b/util/include/axutil_param.h new file mode 100644 index 0000000..415e201 --- /dev/null +++ b/util/include/axutil_param.h @@ -0,0 +1,200 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_PARAM_H +#define AXUTIL_PARAM_H + +/** + * @file axutil_param.h + * @brief Axis2 param interface + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_param parameter + * @ingroup axis2_util + * @{ + */ + + /** + * TEXT PARAM + */ +#define AXIS2_TEXT_PARAM 0 + + /** + * Field DOM_PARAM + */ +#define AXIS2_DOM_PARAM 1 + + typedef struct axutil_param axutil_param_t; + + /** + * each type which is passed as a param value to a parameter, must have this + * type of function implemented. When the param value is set this function + * should also be assigned to param free function + */ + typedef void( + AXIS2_CALL + * AXIS2_PARAM_VALUE_FREE) ( + void *param_value, + const axutil_env_t * env); + + /** + * creates param struct + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + axutil_param_create( + const axutil_env_t * env, + axis2_char_t * name, + void *value); + + /** + * Parameter name accessor + * @return name of the param + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_param_get_name( + struct axutil_param *param, + const axutil_env_t * env); + + /** + * Parameter value accessor + * @return Object + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_param_get_value( + struct axutil_param *param, + const axutil_env_t * env); + + /** + * param name mutator + * @param name + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_param_set_name( + struct axutil_param *param, + const axutil_env_t * env, + const axis2_char_t * name); + + /** + * Method setValue + * + * @param value + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_param_set_value( + struct axutil_param *param, + const axutil_env_t * env, + const void *value); + + /** + * Method isLocked + * + * @return boolean + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_param_is_locked( + struct axutil_param *param, + const axutil_env_t * env); + + /** + * Method setLocked + * + * @param value + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_param_set_locked( + struct axutil_param *param, + const axutil_env_t * env, + axis2_bool_t value); + + /** + * Method getParameterType + * + * @return int + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_param_get_param_type( + struct axutil_param *param, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_param_set_param_type( + struct axutil_param *param, + const axutil_env_t * env, + int type); + + AXIS2_EXTERN void AXIS2_CALL + axutil_param_free( + struct axutil_param *param, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_param_set_attributes( + struct axutil_param *param, + const axutil_env_t * env, + axutil_hash_t * attrs); + + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axutil_param_get_attributes( + struct axutil_param *param, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_param_set_value_list( + struct axutil_param *param, + const axutil_env_t * env, + axutil_array_list_t * value_list); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axutil_param_get_value_list( + struct axutil_param *param, + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + axutil_param_value_free( + void *param_value, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_param_set_value_free( + struct axutil_param *param, + const axutil_env_t * env, + AXIS2_PARAM_VALUE_FREE free_fn); + + AXIS2_EXTERN void AXIS2_CALL + axutil_param_dummy_free_fn( + void *param, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_PARAM_H */ diff --git a/util/include/axutil_param_container.h b/util/include/axutil_param_container.h new file mode 100644 index 0000000..e61b9d5 --- /dev/null +++ b/util/include/axutil_param_container.h @@ -0,0 +1,134 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_PARAM_CONTAINER_H +#define AXUTIL_PARAM_CONTAINER_H + +/** @defgroup axutil_param_container Parameter Container + * @ingroup axis2_descript + * @{ + */ + +/** + * @file axutil_param_container.h + * @brief Axis2 Param container interface + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/*#include */ +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef struct axutil_param_container axutil_param_container_t; + + /** + * Creates param container struct + * @return pointer to newly created param container + */ + AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL + + axutil_param_container_create( + const axutil_env_t * env); + + /** + * Free param_container passed as void pointer. This will be + * cast into appropriate type and then pass the cast object + * into the param_container structure's free method + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_param_container_free_void_arg( + void *param_container, + const axutil_env_t * env); + + /** De-allocate memory + * @return status code + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_param_container_free( + axutil_param_container_t * param_container, + const axutil_env_t * env); + + /** Add a param + * @param param param to be added + * @return status code + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_param_container_add_param( + axutil_param_container_t * param_container, + const axutil_env_t * env, + axutil_param_t * param); + + /** To get a param in a given description + * @param name param name + * @return param + */ + AXIS2_EXTERN axutil_param_t *AXIS2_CALL + axutil_param_container_get_param( + axutil_param_container_t * param_container, + const axutil_env_t * env, + const axis2_char_t * name); + + /** To get all the params in a given description + * @return all the params contained + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + + axutil_param_container_get_params( + axutil_param_container_t * param_container, + const axutil_env_t * env); + + /** To check whether the paramter is locked at any level + * @param param_name name of the param + * @return whether param is locked + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axutil_param_container_is_param_locked( + axutil_param_container_t * param_container, + const axutil_env_t * env, + const axis2_char_t * param_name); + + /** Remove parameter from the param container + * @param parameter name of the param to be removed + * @return status of AXIS2_SUCCESS or AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_param_container_delete_param( + axutil_param_container_t *param_container, + const axutil_env_t *env, + const axis2_char_t *param_name); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_PARAM_CONTAINER_H */ diff --git a/util/include/axutil_properties.h b/util/include/axutil_properties.h new file mode 100644 index 0000000..d5610f3 --- /dev/null +++ b/util/include/axutil_properties.h @@ -0,0 +1,137 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_PROPERTIES_H +#define AXUTIL_PROPERTIES_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_properties properties + * @ingroup axis2_util + * @{ + */ + + typedef struct axutil_properties axutil_properties_t; + + /** + * create new properties + * @return properties newly created properties + */ + AXIS2_EXTERN axutil_properties_t *AXIS2_CALL + axutil_properties_create( + const axutil_env_t * env); + + /** + * free w2c_properties. + * @param properties pointer to properties struct + * @param env Environment. MUST NOT be NULL + * @return status of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_properties_free( + axutil_properties_t * properties, + const axutil_env_t * env); + + /** + * get string value for property with specified key. + * @param properties pointer to properties struct + * @param env Environment. MUST NOT be NULL + * @param key MUST NOT be NULL + * @return value of the property + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_properties_get_property( + axutil_properties_t * properties, + const axutil_env_t * env, + axis2_char_t * key); + + /** + * set a property ( key, value) pair. + * @param properties pointer to properties struct + * @param env Environment. MUST NOT be NULL + * @param key Property Key. MUST NOT be NULL + * @param value Property Value + * @return status of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_properties_set_property( + axutil_properties_t * properties, + const axutil_env_t * env, + axis2_char_t * key, + axis2_char_t * value); + + /** + * retrieve the hash with all the properties + * @param properties pointer to properties struct + * @param env Environment. MUST NOT be NULL + * @return hash (key,value) + */ + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + axutil_properties_get_all( + axutil_properties_t * properties, + const axutil_env_t * env); + + /** + * load properties + * @param properties pointer to properties struct + * @param env Environment. MUST NOT be NULL + * @param input Input Stream. MUST NOT be NULL + * @return status of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_properties_load( + axutil_properties_t * properties, + const axutil_env_t * env, + axis2_char_t * input_filename); + + /** + * store properties + * @param properties pointer to properties struct + * @param env Environment. MUST NOT be NULL + * @param ouput Output Stream. MUST NOT be NULL + * @return status of the op. AXIS2_SUCCESS on success + * else AXIS2_FAILURE + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_properties_store( + axutil_properties_t * properites, + const axutil_env_t * env, + FILE * output); + + /*************************** End of function macros ***************************/ + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_PROPERTIES_H */ diff --git a/util/include/axutil_property.h b/util/include/axutil_property.h new file mode 100644 index 0000000..335db25 --- /dev/null +++ b/util/include/axutil_property.h @@ -0,0 +1,124 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_PROPERTY_H +#define AXUTIL_PROPERTY_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_property property + * @ingroup axis2_util + * @{ + */ + + typedef struct axutil_property axutil_property_t; + + /** + * create new property + * @return property newly created property + */ + AXIS2_EXTERN axutil_property_t *AXIS2_CALL + axutil_property_create( + const axutil_env_t * env); + + /** + * create new property + * @param env axis2 environment + * @param scope scope can be one of following + * AXIS2_SCOPE_REQUEST + * AXIS2_SCOPE_SESSION + * AXIS2_SCOPE_APPLICATION + * pass 0 to use default scope of AXIS2_SCOPE_REQUEST + * @param own_value whether value is owned by the property or not. + * if the value is owned by the property it should be freed + * by the proeprty. + * @param free_func free function for the value freeing. Pass 0 if + * param value is a string + * @param value value of the property + * @return property newly created property + */ + AXIS2_EXTERN axutil_property_t *AXIS2_CALL + + axutil_property_create_with_args( + const axutil_env_t * env, + axis2_scope_t scope, + axis2_bool_t own_value, + AXIS2_FREE_VOID_ARG free_func, + void *value); + + AXIS2_EXTERN void AXIS2_CALL + axutil_property_free( + axutil_property_t * property, + const axutil_env_t * env); + + /** + * Default scope is AXIS2_SCOPE_REQUEST + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_property_set_scope( + axutil_property_t * property, + const axutil_env_t * env, + axis2_scope_t scope); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_property_set_free_func( + axutil_property_t * property, + const axutil_env_t * env, + AXIS2_FREE_VOID_ARG free_func); + + /*************************** Function macros **********************************/ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_property_set_value( + axutil_property_t * property, + const axutil_env_t * env, + void *value); + + AXIS2_EXTERN void *AXIS2_CALL + axutil_property_get_value( + axutil_property_t * property, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_property_set_own_value( + axutil_property_t * property, + const axutil_env_t * env, + axis2_bool_t own_value); + + AXIS2_EXTERN axutil_property_t *AXIS2_CALL + axutil_property_clone( + axutil_property_t * property, + const axutil_env_t * env); + + /*************************** End of function macros ***************************/ + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_PROPERTY_H */ diff --git a/util/include/axutil_qname.h b/util/include/axutil_qname.h new file mode 100644 index 0000000..da78461 --- /dev/null +++ b/util/include/axutil_qname.h @@ -0,0 +1,142 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXUTIL_QNAME_H +#define AXUTIL_QNAME_H + +/** + * @file axutil_qname.h + * @brief represents a qualified name + */ + +#include +#include + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_qname qname + * @ingroup axis2_util + * @{ + */ + + typedef struct axutil_qname axutil_qname_t; + + /** + * creates a qname struct + * returns a pointer to a qname struct + * @localpart mandatory + * @prefix mandatory + * @ns_uri optional + * The prefix. Must not be null. Use "" (empty string) to indicate that no + * namespace URI is present or the namespace URI is not relevant + * if null is passed for prefix and uri , "'(empty string ) will be assinged to + * those fields + * @return a pointer to newly created qname struct + */ + + AXIS2_EXTERN axutil_qname_t *AXIS2_CALL + axutil_qname_create( + const axutil_env_t * env, + const axis2_char_t * localpart, + const axis2_char_t * namespace_uri, + const axis2_char_t * prefix); + + /** + * returns a newly created qname using a string genarated from + * axutil_qname_to_string method + * freeing the returned qname is users responsibility + */ + + AXIS2_EXTERN axutil_qname_t *AXIS2_CALL + axutil_qname_create_from_string( + const axutil_env_t * env, + const axis2_char_t * string); + + /** + * Free a qname struct + * @return Status code + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_qname_free( + struct axutil_qname *qname, + const axutil_env_t * env); + + /** + * Compare two qnames + * prefix is ignored when comparing + * If ns_uri and localpart of qname1 and qname2 is equal returns true + * @return true if qname1 equals qname2, false otherwise + */ + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_qname_equals( + const struct axutil_qname *qname, + const axutil_env_t * env, + const struct axutil_qname *qname1); + + /** + * clones a given qname + * @param qname , qname struct instance to be cloned + * @env environment , double pointer to environment + * @returns the newly cloned qname struct instance + */ + + AXIS2_EXTERN struct axutil_qname *AXIS2_CALL + axutil_qname_clone( + struct axutil_qname *qname, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_qname_get_uri( + const struct axutil_qname *qname, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_qname_get_prefix( + const struct axutil_qname *qname, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_qname_get_localpart( + const struct axutil_qname *qname, + const axutil_env_t * env); + + /** + * returns a unique string created by concatanting namespace uri + * and localpart . + * The string is of the form localpart|url + * The returned char* is freed when qname free function is called. + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_qname_to_string( + struct axutil_qname *qname, + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_QNAME_H */ diff --git a/util/include/axutil_rand.h b/util/include/axutil_rand.h new file mode 100644 index 0000000..f89f283 --- /dev/null +++ b/util/include/axutil_rand.h @@ -0,0 +1,83 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_RAND_H +#define AXUTIL_RAND_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_rand rand + * @ingroup axis2_util + * @{ + */ + + /** + * @file axutil_rand.h + * @brief A simple thread safe and reentrant random number generator + */ + + /** + * This is reentrant and thread safe simple random number generator + * function. it is passed an pointer to an unsigned int state value + * which is used inside the function and changed in each call. + * @param seedp pointer to an unsigned int used as the internal state + * @return int int + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_rand( + unsigned int *seedp); + + /** + * This is reentrant and thread safe simple random number generator + * function. it is passed an pointer to an unsigned int state value + * which is used inside the function and changed in each call. Also + * it is passed a range in which the random number is selected + * @param seedp pointer to an unsigned int used as the internal state + * @param start start of the range + * @param end end of the range + * @return int If invalid range is entered -1 is returned int + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_rand_with_range( + unsigned int *seedp, + int start, + int end); + + /** + * A random seed value generated based on the time + */ + AXIS2_EXTERN unsigned int AXIS2_CALL + + axutil_rand_get_seed_value_based_on_time( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_RAND_H */ diff --git a/util/include/axutil_stack.h b/util/include/axutil_stack.h new file mode 100644 index 0000000..5eba102 --- /dev/null +++ b/util/include/axutil_stack.h @@ -0,0 +1,93 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_STACK_H +#define AXUTIL_STACK_H + +/** +* @file axutil_stack.h +* @brief represents a stack +*/ + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axis2_util_stack stack + * @ingroup axis2_util + * @{ + */ + + typedef struct axutil_stack axutil_stack_t; + + AXIS2_EXTERN axutil_stack_t *AXIS2_CALL + axutil_stack_create( + const axutil_env_t * env); + + /** + * Free function of the stack + * @param stack pointer to stack + * @param env environemnt + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_stack_free( + axutil_stack_t * stack, + const axutil_env_t * env); + + AXIS2_EXTERN void *AXIS2_CALL + axutil_stack_pop( + axutil_stack_t * stack, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_stack_push( + axutil_stack_t * stack, + const axutil_env_t * env, + void *value); + + AXIS2_EXTERN int AXIS2_CALL + axutil_stack_size( + axutil_stack_t * stack, + const axutil_env_t * env); + + /** + * returns the last put value from the stack + * without removing it from stack + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_stack_get( + axutil_stack_t * stack, + const axutil_env_t * env); + + AXIS2_EXTERN void *AXIS2_CALL + axutil_stack_get_at( + axutil_stack_t * stack, + const axutil_env_t * env, + int i); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_STACK_H */ diff --git a/util/include/axutil_stream.h b/util/include/axutil_stream.h new file mode 100644 index 0000000..729f1e3 --- /dev/null +++ b/util/include/axutil_stream.h @@ -0,0 +1,294 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain count copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_STREAM_H +#define AXUTIL_STREAM_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define AXIS2_STREAM_DEFAULT_BUF_SIZE 2048 + + /** + * @defgroup axutil_stream stream + * @ingroup axis2_util + * @{ + */ + + /** + * \brief Axis2 stream types + * + * This is used to create a stream to correspond to + * particular i/o mtd + */ + enum axutil_stream_type + { + AXIS2_STREAM_BASIC = 0, + AXIS2_STREAM_FILE, + AXIS2_STREAM_SOCKET, + AXIS2_STREAM_MANAGED /* Example Wrapper stream for Apache2 read mechanism */ + }; + + typedef enum axutil_stream_type axutil_stream_type_t; + typedef struct axutil_stream axutil_stream_t; + + typedef int( + AXIS2_CALL + * AXUTIL_STREAM_READ)( + axutil_stream_t * stream, + const axutil_env_t * env, + void *buffer, + size_t count); + + typedef int( + AXIS2_CALL + * AXUTIL_STREAM_WRITE)( + axutil_stream_t * stream, + const axutil_env_t * env, + const void *buffer, + size_t count); + + typedef int( + AXIS2_CALL + * AXUTIL_STREAM_SKIP)( + axutil_stream_t * stream, + const axutil_env_t * env, + int count); + + struct axutil_stream + { + axutil_stream_type_t stream_type; + int len; + int max_len; + /* Only one of these is used for a perticlar + * instance depending on the type + */ + axis2_char_t *buffer; + axis2_char_t *buffer_head; + FILE *fp; + int socket; + + int axis2_eof; + + /** + * reads from stream + * @param buffer buffer into which the content is to be read + * @param count size of the buffer + * @return no: of bytes read + */ + int( + AXIS2_CALL + * read)( + axutil_stream_t * stream, + const axutil_env_t * env, + void *buffer, + size_t count); + + /** + * writes into stream + * @param buffer buffer to be written + * @param count size of the buffer + * @return no: of bytes actually written + */ + int( + AXIS2_CALL + * write)( + axutil_stream_t * stream, + const axutil_env_t * env, + const void *buffer, + size_t count); + + /** + * Skips over and discards n bytes of data from this input stream. + * @param count number of bytes to be discarded + * @return no: of bytes actually skipped + */ + int( + AXIS2_CALL + * skip)( + axutil_stream_t * stream, + const axutil_env_t * env, + int count); + }; + + /** + * Deletes the stream + * @return axis2_status_t AXIS2_SUCCESS on success else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_stream_free( + axutil_stream_t * stream, + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + axutil_stream_free_void_arg( + void *stream, + const axutil_env_t * env); + + /** + * reads from stream + * @param buffer buffer into which the content is to be read + * @param count size of the buffer + * @return no: of bytes read + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_stream_read( + axutil_stream_t * stream, + const axutil_env_t * env, + void *buffer, + size_t count); + + /** + * writes into stream + * @param buffer buffer to be written + * @param count size of the buffer + * @return no: of bytes actually written + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_stream_write( + axutil_stream_t * stream, + const axutil_env_t * env, + const void *buffer, + size_t count); + + /** + * Skips over and discards n bytes of data from this input stream. + * @param count number of bytes to be discarded + * @return no: of bytes actually skipped + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_stream_skip( + axutil_stream_t * stream, + const axutil_env_t * env, + int count); + + /** + * Returns the length of the stream (applicable only to basic stream) + * @return Length of the buffer if its type is basic, else -1 + * (we can't define a length of a stream unless it is just a buffer) + */ + AXIS2_EXTERN int AXIS2_CALL + axutil_stream_get_len( + axutil_stream_t * stream, + const axutil_env_t * env); + + /** \brief Constructor for creating an in memory stream + * @return axutil_stream (in memory) + */ + AXIS2_EXTERN axutil_stream_t *AXIS2_CALL + axutil_stream_create_basic( + const axutil_env_t * env); + + /** \brief Constructor for creating a file stream + * @param valid file pointer (opened file) + * @return axutil_stream (file) + */ + AXIS2_EXTERN axutil_stream_t *AXIS2_CALL + axutil_stream_create_file( + const axutil_env_t * env, + FILE * fp); + + /** \brief Constructor for creating a file stream + * @param valid socket (opened socket) + * @return axutil_stream (socket) + */ + AXIS2_EXTERN axutil_stream_t *AXIS2_CALL + axutil_stream_create_socket( + const axutil_env_t * env, + int socket); + + /** + *Free stream + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_stream_free( + axutil_stream_t * stream, + const axutil_env_t * env); + + /** + * Free stream passed as void pointer. This will be + * cast into appropriate type and then pass the cast object + * into the module_desc structure's free method + */ + + AXIS2_EXTERN void AXIS2_CALL + axutil_stream_free_void_arg( + void *stream, + const axutil_env_t * env); + + /** + * Gets the buffer + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_stream_get_buffer( + const axutil_stream_t * stream, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_stream_flush_buffer( + axutil_stream_t * stream, + const axutil_env_t * env); + + AXIS2_EXTERN int AXIS2_CALL + axutil_stream_peek_socket( + axutil_stream_t * stream, + const axutil_env_t * env, + void *buffer, + size_t count); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_stream_flush( + axutil_stream_t * stream, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_stream_close( + axutil_stream_t * stream, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_stream_set_read( + axutil_stream_t * stream, + const axutil_env_t * env, + AXUTIL_STREAM_READ func); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_stream_set_write( + axutil_stream_t * stream, + const axutil_env_t * env, + AXUTIL_STREAM_WRITE func); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_stream_set_skip( + axutil_stream_t * stream, + const axutil_env_t * env, + AXUTIL_STREAM_SKIP func); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_STREAM_H */ diff --git a/util/include/axutil_string.h b/util/include/axutil_string.h new file mode 100644 index 0000000..6331cd8 --- /dev/null +++ b/util/include/axutil_string.h @@ -0,0 +1,350 @@ + +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_STRING_H +#define AXUTIL_STRING_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_string string + * @ingroup axis2_util + * @{ + */ + + typedef struct axutil_string axutil_string_t; + + /** + * Creates a string struct. + * @param str pointer to string. string struct would create a duplicate of + * this + * @param env pointer to environment struct + * @return a pointer to newly created string struct + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + axutil_string_create( + const axutil_env_t * env, + const axis2_char_t * str); + + /** + * Creates a string struct. + * @param str pointer to string. string struct would not create a duplicate + * of this, but would assume ownership + * @param env pointer to environment struct + * @return a pointer to newly created string struct + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + + axutil_string_create_assume_ownership( + const axutil_env_t * env, + axis2_char_t ** str); + + /** + * Creates a string struct. + * @param str pointer to string. string struct would not create a duplicate + * of this and assumes the str would have longer life than that of itself + * @param env pointer to environment struct + * @return a pointer to newly created string struct + */ + AXIS2_EXTERN axutil_string_t *AXIS2_CALL + axutil_string_create_const( + const axutil_env_t * env, + axis2_char_t ** str); + + /** + * Frees string struct. + * @param string pointer to string struct + * @param env pointer to environment struct + * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_string_free( + struct axutil_string *string, + const axutil_env_t * env); + + /** + * Compares two strings. Checks if the two strings point to the same buffer. + * Do not cmpare the buffer contents. + * @param string pointer to string struct + * @param env pointer to environment struct + * @param string1 pointer to string struct to be compared + * @return AXIS2_TRUE if string equals string1, AXIS2_FALSE otherwise + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_string_equals( + const struct axutil_string *string, + const axutil_env_t * env, + const struct axutil_string *string1); + + /** + * Clones a given string. Does not duplicate the buffer, rather + * increments the reference count. Each call to clone needs to have a + * matching free, when the clone is done with. + * @param string pointer to string struct + * @param env pointer to environment struct + * @returns pointer to cloned string struct instance + */ + AXIS2_EXTERN struct axutil_string *AXIS2_CALL + axutil_string_clone( + struct axutil_string *string, + const axutil_env_t * env); + + /** + * Gets string buffer. + * @param string pointer to string struct + * @param env pointer to environment struct + * @returns pointer to string buffer + */ + AXIS2_EXTERN const axis2_char_t *AXIS2_CALL + axutil_string_get_buffer( + const struct axutil_string *string, + const axutil_env_t * env); + + /** + * Gets string length. * @param string pointer to string struct * @param env pointer to environment struct * @returns buffer length */ + AXIS2_EXTERN unsigned int AXIS2_CALL + axutil_string_get_length( + const struct axutil_string *string, + const axutil_env_t * env); + + /** @} */ + + /** + * @defgroup axutil_string_utils string_utils + * @ingroup axis2_util + * @{ + */ + + AXIS2_EXTERN void *AXIS2_CALL + axutil_strdup( + const axutil_env_t * env, + const void *ptr); + + /** + * duplicate the first n characters of a string into memory allocated + * the new string will be null-terminated + * @param ptr The string to duplicate + * @param n The number of characters to duplicate + * @return The new string + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_strndup( + const axutil_env_t * env, + const void *ptr, + int n); + + /** + * Create a null-terminated string by making a copy of a sequence + * of characters and appending a null byte + * @param ptr The block of characters to duplicate + * @param n The number of characters to duplicate + * @return The new string + * @remark This is a faster alternative to axis2_strndup, for use + * when you know that the string being duplicated really + * has 'n' or more characters. If the string might contain + * fewer characters, use axis2_strndup. + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_strmemdup( + const void *ptr, + size_t n, + const axutil_env_t * env); + + AXIS2_EXTERN void *AXIS2_CALL + axutil_memchr( + const void *ptr, + int c, + size_t n); + + AXIS2_EXTERN int AXIS2_CALL + axutil_strcmp( + const axis2_char_t * s1, + const axis2_char_t * s2); + + AXIS2_EXTERN int AXIS2_CALL + axutil_strncmp( + const axis2_char_t * s1, + const axis2_char_t * s2, + int n); + + AXIS2_EXTERN axis2_ssize_t AXIS2_CALL + axutil_strlen( + const axis2_char_t * s); + + AXIS2_EXTERN int AXIS2_CALL + axutil_strcasecmp( + const axis2_char_t * s1, + const axis2_char_t * s2); + + AXIS2_EXTERN int AXIS2_CALL + axutil_strncasecmp( + const axis2_char_t * s1, + const axis2_char_t * s2, + const int n); + + /* much similar to the strcat behaviour. But the difference is + * this allocates new memory to put the conatenated string rather than + * modifying the first argument. The user should free the allocated + * memory for the return value + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_stracat( + const axutil_env_t * env, + const axis2_char_t * s1, + const axis2_char_t * s2); + + /** + * Concatenate multiple strings, allocating memory + * @param ... The strings to concatenate. The final string must be NULL + * @return The new string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_strcat( + const axutil_env_t * env, + ...); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_strstr( + const axis2_char_t * heystack, + const axis2_char_t * needle); + + /** + * Finds the first occurrence of a character in a string + * @param s String in which the character is searched + * @param ch Character to be searched + * @return Pointer to to the first occurence of the charecter if it could + * be found in the string, NULL otherwise + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_strchr( + const axis2_char_t * s, + axis2_char_t ch); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_rindex( + const axis2_char_t * s, + axis2_char_t c); + + /* replaces s1 with s2 */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_replace( + const axutil_env_t * env, + axis2_char_t * str, + int s1, + int s2); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_strltrim( + const axutil_env_t * env, + const axis2_char_t * _s, + const axis2_char_t * _trim); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_strrtrim( + const axutil_env_t * env, + const axis2_char_t * _s, + const axis2_char_t * _trim); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_strtrim( + const axutil_env_t * env, + const axis2_char_t * _s, + const axis2_char_t * _trim); + + /** + * replace given axis2_character with a new one. + * @param str string operation apply + * @param old_char the old axis2_character which would be replaced + * @param new_char new axis2_char_tacter + * @return replaced string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_string_replace( + axis2_char_t * str, + axis2_char_t old_char, + axis2_char_t new_char); + + /** + * gives a sub string starting with given index. + * @param str string operation apply + * @param c starting index + * @return substring + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axutil_string_substring_starting_at( + axis2_char_t * str, + int s); + + /** + * gives a sub string ending with given index. + * @param str string operation apply + * @param c ending index + * @return substring + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_string_substring_ending_at( + axis2_char_t * str, + int e); + + /** + * set a string to lowercase. + * @param str string + * @return string with lowercase + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_string_tolower( + axis2_char_t * str); + + /** + * set a string to uppercase. + * @param str string + * @return string with uppercase + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_string_toupper( + axis2_char_t * str); + + /** + * Finds the first occurrence of the substring needle in the string + * haystack, ignores the case of both arguments. + * @param haystack string in which the given string is to be found + * @param needle string to be found in haystack + * @return pointer to the beginning of the substring, + * or NULL if the substring is not found + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_strcasestr( + const axis2_char_t * heystack, + const axis2_char_t * needle); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_STRING_H */ diff --git a/util/include/axutil_string_util.h b/util/include/axutil_string_util.h new file mode 100644 index 0000000..e1de886 --- /dev/null +++ b/util/include/axutil_string_util.h @@ -0,0 +1,56 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_STRING_UTIL_H +#define AXUTIL_STRING_UTIL_H + +#include +#include +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axutil_tokenize( + const axutil_env_t * env, + axis2_char_t * in, + int delim); + + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axutil_first_token( + const axutil_env_t * env, + axis2_char_t * in, + int delim); + + /** + * @return returns array_list containing, the string portion + * without the last token as the first item and the last + * token as the second. If the last token was the only token + * found, the first item will be a "" string. + */ + AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL + axutil_last_token( + const axutil_env_t * env, + axis2_char_t * in, + int delim); + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_STRING_UTIL_H */ diff --git a/util/include/axutil_thread.h b/util/include/axutil_thread.h new file mode 100644 index 0000000..271c2aa --- /dev/null +++ b/util/include/axutil_thread.h @@ -0,0 +1,272 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_THREAD_H +#define AXUTIL_THREAD_H + +/** + * @file axutil_thread.h + * @brief axis2 thread api + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_thread thread + * @ingroup axis2_util + * @{ + */ + + /** + * Thread callbacks from axis2 functions must be declared with AXIS2_THREAD_FUNC + * so that they follow the platform's calling convention. + */ + /*#define AXIS2_THREAD_FUNC */ + + /** Thread structure. */ + typedef struct axutil_thread_t axutil_thread_t; + + /** Thread attributes structure. */ + typedef struct axutil_threadattr_t axutil_threadattr_t; + + /** Control variable for one-time atomic variables. */ + typedef struct axutil_thread_once_t axutil_thread_once_t; + + /** + * The prototype for any AXIS2 thread worker functions. + */ + typedef void *( + AXIS2_THREAD_FUNC * axutil_thread_start_t)( + axutil_thread_t *, + void *); + + /** Thread private address space. */ + typedef struct axutil_threadkey_t axutil_threadkey_t; + + /* Thread Function definitions */ + + /** + * Create and initialize a new threadattr variable + * @param cont The pool to use + * @return Newly created thread attribute + */ + AXIS2_EXTERN axutil_threadattr_t *AXIS2_CALL + axutil_threadattr_create( + axutil_allocator_t * allocator); + + /** + * Set if newly created threads should be created in detached state. + * @param attr The threadattr to affect + * @param on Non-zero if detached threads should be created. + * @return The status of the operation + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_threadattr_detach_set( + axutil_threadattr_t * attr, + axis2_bool_t detached); + + /** + * Get the detach state for this threadattr. + * @param attr The threadattr to reference + * @return AXIS2_TRUE if threads are to be detached, or AXIS2_FALSE + * if threads are to be joinable. + */ + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axutil_threadattr_is_detach( + axutil_threadattr_t * attr, + axutil_allocator_t * allocator); + + /** + * Create a new thread of execution + * @param attr The threadattr to use to determine how to create the thread + * @param func The function to start the new thread in + * @param data Any data to be passed to the starting function + * @param cont The pool to use + * @return The newly created thread handle. + */ + AXIS2_EXTERN axutil_thread_t *AXIS2_CALL + axutil_thread_create( + axutil_allocator_t * allocator, + axutil_threadattr_t * attr, + axutil_thread_start_t func, + void *data); + + /** + * Stop the current thread + * @param thd The thread to stop + * @return The status of the operation + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_exit( + axutil_thread_t * thd, + axutil_allocator_t * allocator); + + /** + * Block until the desired thread stops executing. + * @param thd The thread to join + * @return The status of the operation + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_join( + axutil_thread_t * thd); + + /** + * force the current thread to yield the processor + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_thread_yield(void + ); + + /** + * function is used to allocate a new key. This key now becomes valid for all threads in our process. + * When a key is created, the value it points to defaults to NULL. Later on each thread may change + * its copy of the value as it wishes. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_key_create( + axutil_threadkey_t * axis2_key); + /** + * This function is used to get the value of a given key + * @return void*. A key's value is simply a void pointer (void*) + */ + AXIS2_EXTERN void *AXIS2_CALL + axutil_thread_getspecific( + axutil_threadkey_t * axis2_key); + + /** + * This function is used to get the value of a given key + * @param keys value. A key's value is simply a void pointer (void*), so we can + * store in it anything that we want + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_setspecific( + axutil_threadkey_t * axis2_key, + void *value); + + /** + * This function is used free the tls key. + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_thread_key_free( + axutil_threadkey_t * axis2_key); + + /** + * Initialize the control variable for axutil_thread_once. + * @param control The control variable to initialize + * @return The status of the operation + */ + AXIS2_EXTERN axutil_thread_once_t *AXIS2_CALL + axutil_thread_once_init( + axutil_allocator_t * allocator); + + /** + * Run the specified function one time, regardless of how many threads + * call it. + * @param control The control variable. The same variable should + * be passed in each time the function is tried to be + * called. This is how the underlying functions determine + * if the function has ever been called before. + * @param func The function to call. + * @return The status of the operation + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_once( + axutil_thread_once_t * control, + void(*func)(void)); + + /** + * detach a thread + * @param thd The thread to detach + * @return The status of the operation + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_detach( + axutil_thread_t * thd); + + + /*************************Thread locking functions*****************************/ + + /** Opaque thread-local mutex structure */ + typedef struct axutil_thread_mutex_t axutil_thread_mutex_t; + +#define AXIS2_THREAD_MUTEX_DEFAULT 0x0 /**< platform-optimal lock behavior */ + +#define AXIS2_THREAD_MUTEX_NESTED 0x1 /**< enable nested (recursive) locks */ + +#define AXIS2_THREAD_MUTEX_UNNESTED 0x2 /**< disable nested locks */ + + /** + * Create and initialize a mutex that can be used to synchronize threads. + * @param allocator Memory allocator to allocate memory for the mutex + * @warning Be cautious in using AXIS2_THREAD_MUTEX_DEFAULT. While this is the + * most optimal mutex based on a given platform's performance characteristics, + * it will behave as either a nested or an unnested lock. + */ + AXIS2_EXTERN axutil_thread_mutex_t *AXIS2_CALL + + axutil_thread_mutex_create( + axutil_allocator_t * allocator, + unsigned int flags); + + /** + * Acquire the lock for the given mutex. If the mutex is already locked, + * the current thread will be put to sleep until the lock becomes available. + * @param mutex the mutex on which to acquire the lock. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_mutex_lock( + axutil_thread_mutex_t * mutex); + + /** + * Attempt to acquire the lock for the given mutex. If the mutex has already + * been acquired, the call returns immediately + * @param mutex the mutex on which to attempt the lock acquiring. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_mutex_trylock( + axutil_thread_mutex_t * mutex); + + /** + * Release the lock for the given mutex. + * @param mutex the mutex from which to release the lock. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_mutex_unlock( + axutil_thread_mutex_t * mutex); + + /** + * Destroy the mutex and free the memory associated with the lock. + * @param mutex the mutex to destroy. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_mutex_destroy( + axutil_thread_mutex_t * mutex); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_THREAD_H */ diff --git a/util/include/axutil_thread_pool.h b/util/include/axutil_thread_pool.h new file mode 100644 index 0000000..d8bd8a0 --- /dev/null +++ b/util/include/axutil_thread_pool.h @@ -0,0 +1,126 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_THREAD_POOL_H +#define AXUTIL_THREAD_POOL_H + +/** + * @file axutil_thread_pool.h + * @brief Axis2 thread pool interface + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_thread_pool thread pool + * @ingroup axis2_util + * @{ + */ + + typedef struct axutil_thread_pool axutil_thread_pool_t; + struct axutil_env; + + /** + * Retrives a thread from the thread pool + * @param func function to be executed in the new thread + * @param data arguments to be passed to the function + * @return pointer to a thread in ready state. + */ + AXIS2_EXTERN axutil_thread_t *AXIS2_CALL + axutil_thread_pool_get_thread( + axutil_thread_pool_t * pool, + axutil_thread_start_t func, + void *data); + + /** + * Blocks until the desired thread stops executing. + * @param thd The thread to joined + * @return status of the operation + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_pool_join_thread( + axutil_thread_pool_t * pool, + axutil_thread_t * thd); + + /** + * Stop the execution of current thread + * @param thd thread to be stopped + * @return status of the operation + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_pool_exit_thread( + axutil_thread_pool_t * pool, + axutil_thread_t * thd); + + /** + * Detaches a thread + * @param thd thread to be detached + * @return status of the operation + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_thread_pool_thread_detach( + axutil_thread_pool_t * pool, + axutil_thread_t * thd); + + /** + * Frees resources used by thread_pool + * @param pool thread_pool to be freed + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_thread_pool_free( + axutil_thread_pool_t * pool); + + /** + * Initializes (creates) an thread_pool. + * @param allocator user defined allocator for the memory allocation. + * @return initialized thread_pool. NULL on error. + */ + AXIS2_EXTERN axutil_thread_pool_t *AXIS2_CALL + axutil_thread_pool_init( + axutil_allocator_t * allocator); + + /** + * This function can be used to initialize the environment in case of + * spawning a new thread via a thread function + */ + AXIS2_EXTERN struct axutil_env *AXIS2_CALL + axutil_init_thread_env( + const struct axutil_env *system_env); + + /** + * This function can be used to free the environment that was used + * in a thread function + */ + AXIS2_EXTERN void AXIS2_CALL + axutil_free_thread_env( + struct axutil_env *thread_env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_THREAD_POOL_H */ diff --git a/util/include/axutil_types.h b/util/include/axutil_types.h new file mode 100644 index 0000000..d6df339 --- /dev/null +++ b/util/include/axutil_types.h @@ -0,0 +1,73 @@ + +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_TYPES_H +#define AXUTIL_TYPES_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_types type convertors + * @ingroup axis2_util + * @{ + */ + + AXIS2_EXTERN int AXIS2_CALL + axutil_atoi( + const char *s); + +#define AXIS2_ATOI(s) axutil_atoi(s) + + AXIS2_EXTERN uint64_t AXIS2_CALL + axutil_strtoul( + const char *nptr, + char **endptr, + int base); + +#define AXIS2_STRTOUL(s, e, b) axutil_strtoul(s, e, b) + + AXIS2_EXTERN int64_t AXIS2_CALL + axutil_strtol( + const char *nptr, + char **endptr, + int base); + +#define AXIS2_STRTOL(s, e, b) axutil_strtol(s, e, b) + + + AXIS2_EXTERN int64_t AXIS2_CALL + axutil_atol( + const char *s); + +#define AXIS2_ATOL(s) axutil_atol(s) + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_TYPES_H */ diff --git a/util/include/axutil_uri.h b/util/include/axutil_uri.h new file mode 100644 index 0000000..45edc64 --- /dev/null +++ b/util/include/axutil_uri.h @@ -0,0 +1,277 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_URI_H +#define AXUTIL_URI_H + +/** + * @file axutil_uri.h + * @brief AXIS2-UTIL URI Routines + * axutil_uri.h: External Interface of axutil_uri.c + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_uri URI + * @ingroup axis2_util + * @{ + */ + +#define AXIS2_URI_FTP_DEFAULT_PORT 21 /**< default FTP port */ + +#define AXIS2_URI_SSH_DEFAULT_PORT 22 /**< default SSH port */ + +#define AXIS2_URI_TELNET_DEFAULT_PORT 23 /**< default telnet port */ + +#define AXIS2_URI_GOPHER_DEFAULT_PORT 70 /**< default Gopher port */ + +#define AXIS2_URI_HTTP_DEFAULT_PORT 80 /**< default HTTP port */ + +#define AXIS2_URI_POP_DEFAULT_PORT 110 /**< default POP port */ + +#define AXIS2_URI_NNTP_DEFAULT_PORT 119 /**< default NNTP port */ + +#define AXIS2_URI_IMAP_DEFAULT_PORT 143 /**< default IMAP port */ + +#define AXIS2_URI_PROSPERO_DEFAULT_PORT 191 /**< default Prospero port */ + +#define AXIS2_URI_WAIS_DEFAULT_PORT 210 /**< default WAIS port */ + +#define AXIS2_URI_LDAP_DEFAULT_PORT 389 /**< default LDAP port */ + +#define AXIS2_URI_HTTPS_DEFAULT_PORT 443 /**< default HTTPS port */ + +#define AXIS2_URI_RTSP_DEFAULT_PORT 554 /**< default RTSP port */ + +#define AXIS2_URI_SNEWS_DEFAULT_PORT 563 /**< default SNEWS port */ + +#define AXIS2_URI_ACAP_DEFAULT_PORT 674 /**< default ACAP port */ + +#define AXIS2_URI_NFS_DEFAULT_PORT 2049 /**< default NFS port */ + +#define AXIS2_URI_TIP_DEFAULT_PORT 3372 /**< default TIP port */ + +#define AXIS2_URI_SIP_DEFAULT_PORT 5060 /**< default SIP port */ + + /** Flags passed to unparse_uri_components(): */ + + /** suppress "scheme://user\@site:port" */ +#define AXIS2_URI_UNP_OMITSITEPART (1U<<0) + + /** Just omit user */ +#define AXIS2_URI_UNP_OMITUSER (1U<<1) + + /** Just omit password */ +#define AXIS2_URI_UNP_OMITPASSWORD (1U<<2) + + /** omit "user:password\@" part */ +#define AXIS2_URI_UNP_OMITUSERINFO (AXIS2_URI_UNP_OMITUSER | \ + AXIS2_URI_UNP_OMITPASSWORD) + + /** Show plain text password (default: show XXXXXXXX) */ +#define AXIS2_URI_UNP_REVEALPASSWORD (1U<<3) + + /** Show "scheme://user\@site:port" only */ +#define AXIS2_URI_UNP_OMITPATHINFO (1U<<4) + + /** Omit the "?queryarg" from the path */ +#define AXIS2_URI_UNP_OMITQUERY_ONLY (1U<<5) + + /** Omit the "#fragment" from the path */ +#define AXIS2_URI_UNP_OMITFRAGMENT_ONLY (1U<<6) + + /** Omit the "?queryarg" and "#fragment" from the path */ +#define AXIS2_URI_UNP_OMITQUERY (AXIS2_URI_UNP_OMITQUERY_ONLY | \ + AXIS2_URI_UNP_OMITFRAGMENT_ONLY) + + /** @see axutil_uri_t */ + typedef unsigned short axis2_port_t; + /* axutil_uri.c */ + + typedef struct axutil_uri axutil_uri_t; + + /** + * Creates axutil_uri struct. + * @param env pointer to environment struct. MUST NOT be NULL + * @return pointer to newly created axutil_uri struct + */ + AXIS2_EXTERN axutil_uri_t *AXIS2_CALL + axutil_uri_create( + const axutil_env_t * env); + + /** + * Return the default port for a given scheme. The schemes recognized are + * http, ftp, https, gopher, wais, nntp, snews, and prospero + * @param scheme_str The string that contains the current scheme + * @return The default port for this scheme + */ + AXIS2_EXTERN axis2_port_t AXIS2_CALL + axutil_uri_port_of_scheme( + const axis2_char_t * scheme_str); + + /** + * Parse a given URI, fill in all supplied fields of a axutil_uri + * structure. This eliminates the necessity of extracting host, port, + * path, query info repeatedly in the modules. + * @param uri The uri to parse + * @param uptr The axutil_uri_t to fill out + * @return AXIS2_SUCCESS for success or error code + */ + AXIS2_EXTERN axutil_uri_t *AXIS2_CALL + axutil_uri_parse_string( + const axutil_env_t * env, + const axis2_char_t * uri); + + /** + * Special case for CONNECT parsing: it comes with the hostinfo part only + * @param hostinfo The hostinfo string to parse + * @param uptr The axutil_uri_t to fill out + * @return AXIS2_SUCCESS for success or error code + */ + AXIS2_EXTERN axutil_uri_t *AXIS2_CALL + axutil_uri_parse_hostinfo( + const axutil_env_t * env, + const axis2_char_t * hostinfo); + + /** Resolve relative to a base. This means host/etc, and (crucially) path */ + AXIS2_EXTERN axutil_uri_t *AXIS2_CALL + axutil_uri_resolve_relative( + const axutil_env_t * env, + const axutil_uri_t * base, + axutil_uri_t * uptr); + + /** + * Return a URI created from a context URI and a relative URI. + * If a valid URI cannot be created the only other possibility + * this method will consider is that an absolute file path has + * been passed in as the relative URI argument, and it will try + * to create a 'file' URI from it. + * + * @param context_uri the document base URI + * @param uri a file URI relative to the context_uri or an + * absolute file path + * @return the URIcreated from context_uri and uri + */ + AXIS2_EXTERN axutil_uri_t *AXIS2_CALL + axutil_uri_parse_relative( + const axutil_env_t * env, + const axutil_uri_t * base, + const char *uri); + + AXIS2_EXTERN void AXIS2_CALL + axutil_uri_free( + axutil_uri_t * uri, + const axutil_env_t * env); + + /** + * Unparse a axutil_uri_t structure to an URI string. Optionally + * suppress the password for security reasons. + * @param uptr All of the parts of the uri + * @param flags How to unparse the uri. One of: + *
+     *    AXIS2_URI_UNP_OMITSITEPART        Suppress "scheme://user\@site:port" 
+     *    AXIS2_URI_UNP_OMITUSER            Just omit user 
+     *    AXIS2_URI_UNP_OMITPASSWORD        Just omit password 
+     *    AXIS2_URI_UNP_OMITUSERINFO        Omit "user:password\@" part
+     *    AXIS2_URI_UNP_REVEALPASSWORD      Show plain text password (default: show XXXXXXXX)
+     *    AXIS2_URI_UNP_OMITPATHINFO        Show "scheme://user\@site:port" only 
+     *    AXIS2_URI_UNP_OMITQUERY           Omit "?queryarg" or "#fragment" 
+     * 
+ * @return The uri as a string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_uri_to_string( + const axutil_uri_t * uri, + const axutil_env_t * env, + unsigned flags); + + /** + * @return returns actual reference, not a cloned copy. + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_uri_get_protocol( + axutil_uri_t * uri, + const axutil_env_t * env); + + /** + * @return returns actual reference, not a cloned copy. + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_uri_get_server( + axutil_uri_t * uri, + const axutil_env_t * env); + + /** + * @return returns actual reference, not a cloned copy. + * For IPv6 addresses, the IPv6 Address will be returned + * rather than the IP-literal as defined in RFC3986. + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_uri_get_host( + axutil_uri_t * uri, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_port_t AXIS2_CALL + axutil_uri_get_port( + axutil_uri_t * uri, + const axutil_env_t * env); + + /** + * @return returns actual reference, not a cloned copy. + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_uri_get_path( + axutil_uri_t * uri, + const axutil_env_t * env); + + AXIS2_EXTERN axutil_uri_t *AXIS2_CALL + axutil_uri_clone( + const axutil_uri_t * uri, + const axutil_env_t * env); + + /** + * @return returns actual reference, not a cloned copy. + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_uri_get_query( + axutil_uri_t * uri, + const axutil_env_t * env); + + /** + * @return returns actual reference, not a cloned copy. + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_uri_get_fragment( + axutil_uri_t * uri, + const axutil_env_t * env); + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_URI_H */ diff --git a/util/include/axutil_url.h b/util/include/axutil_url.h new file mode 100644 index 0000000..7a42c2a --- /dev/null +++ b/util/include/axutil_url.h @@ -0,0 +1,149 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_URL_H +#define AXUTIL_URL_H + +/** + * @file axutil_url.h + * @brief axis2 URL container implementation + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @ingroup axis2_core_transport_http + * @{ + */ + + typedef struct axutil_url axutil_url_t; + + AXIS2_EXTERN axutil_url_t *AXIS2_CALL + axutil_url_create( + const axutil_env_t * env, + const axis2_char_t * protocol, + const axis2_char_t * host, + const int port, + const axis2_char_t * path); + + AXIS2_EXTERN axutil_url_t *AXIS2_CALL + axutil_url_parse_string( + const axutil_env_t * env, + const axis2_char_t * str_url); + + AXIS2_EXTERN axutil_uri_t *AXIS2_CALL + axutil_url_to_uri( + axutil_url_t * url, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_url_to_external_form( + axutil_url_t * url, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_url_set_protocol( + axutil_url_t * url, + const axutil_env_t * env, + axis2_char_t * protocol); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_url_get_protocol( + axutil_url_t * url, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_url_set_host( + axutil_url_t * url, + const axutil_env_t * env, + axis2_char_t * host); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_url_get_host( + axutil_url_t * url, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_url_set_server( + axutil_url_t * url, + const axutil_env_t * env, + axis2_char_t * server); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_url_get_server( + axutil_url_t * url, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_url_set_port( + axutil_url_t * url, + const axutil_env_t * env, + int port); + + AXIS2_EXTERN int AXIS2_CALL + axutil_url_get_port( + axutil_url_t * url, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_url_set_path( + axutil_url_t * url, + const axutil_env_t * env, + axis2_char_t * path); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_url_get_path( + axutil_url_t * url, + const axutil_env_t * env); + + AXIS2_EXTERN axutil_url_t *AXIS2_CALL + axutil_url_clone( + axutil_url_t * url, + const axutil_env_t * env); + + AXIS2_EXTERN void AXIS2_CALL + axutil_url_free( + axutil_url_t * url, + const axutil_env_t * env); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_url_encode ( + const axutil_env_t * env, + axis2_char_t * dest, + axis2_char_t * buff, int len); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_url_get_query( + axutil_url_t * url, + const axutil_env_t * env); + + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_URL_H */ diff --git a/util/include/axutil_utils.h b/util/include/axutil_utils.h new file mode 100644 index 0000000..8c156d1 --- /dev/null +++ b/util/include/axutil_utils.h @@ -0,0 +1,263 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_UTILS_H +#define AXUTIL_UTILS_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_utils utils + * @ingroup axis2_util + * @{ + */ + + /** + * @file axutil_utils.h + */ + +#define AXUTIL_LOG_FILE_SIZE 1024 * 1024 * 32 +#define AXUTIL_LOG_FILE_NAME_SIZE 512 + + /** This macro is called to check whether structure on which function is called + * is NULL and to check whether the environment structure passed is valid. + * @param object structure on which function is called + * @param env environment to be checked for validity + * @param error_return If function return a status it should pass here + * AXIS2_FAILURE. If function return a type pointer it should + * pass NULL + * @return If function return a status code return AXIS2_SUCCESS. Else if + * function return a type pointer return NULL + */ +#define AXIS2_FUNC_PARAM_CHECK(object, env, error_return) \ + if (!object) \ + { \ + AXIS2_ERROR_SET_ERROR_NUMBER(env->error, AXIS2_ERROR_INVALID_NULL_PARAM); \ + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_FAILURE); \ + return error_return; \ + } \ + else \ + { \ + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_SUCCESS); \ + } + + + /**This macro is called to check whether an object is NULL. + * if object is NULL error number and status code is set + * @param object object to be check for NULL + * @param error_return If function return a status it should pass here + * AXIS2_FAILURE. If function return a type pointer it should + * pass NULL + * @return If function return a status code return AXIS2_SUCCESS. Else if + * function return a type pointer return NULL + */ +#define AXIS2_PARAM_CHECK(error, object, error_return) \ + if (!object) \ + { \ + AXIS2_ERROR_SET_ERROR_NUMBER(error, AXIS2_ERROR_INVALID_NULL_PARAM); \ + AXIS2_ERROR_SET_STATUS_CODE(error, AXIS2_FAILURE); \ + return error_return; \ + } \ + else \ + { \ + AXIS2_ERROR_SET_STATUS_CODE(error, AXIS2_SUCCESS); \ + } + + + +#define AXIS2_PARAM_CHECK_VOID(error, object) \ + if (!object) \ + { \ + AXIS2_ERROR_SET_ERROR_NUMBER(error, AXIS2_ERROR_INVALID_NULL_PARAM); \ + AXIS2_ERROR_SET_STATUS_CODE(error, AXIS2_FAILURE); \ + return; \ + } + + + + /**This macro is used to handle error situation. + * @param error_number Error number for the error occured + * @param error_return If function return a status it should pass here + * AXIS2_FAILURE. If function return a type pointer it should + * pass NULL + * @return If function return a status code return AXIS2_SUCCESS. Else if + * function return a type pointer return NULL + */ +#define AXIS2_ERROR_SET(error, error_number, status_code) \ + { \ + AXIS2_ERROR_SET_ERROR_NUMBER(error, error_number); \ + AXIS2_ERROR_SET_STATUS_CODE(error, status_code); \ + } + + /** + * This macro is used to set and error, and log it. In addition to that + * you are capable of specifying the file name and line number + * @param env Reference to env struct + * @param error_number Error number for the error occured + * @param status_code The Error Status to be set + * @param file_name_line_no File name and line number constant + */ +#define AXIS2_HANDLE_ERROR_WITH_FILE(env, error_number, \ + status_code, file_name_line_no) \ + { \ + AXIS2_ERROR_SET(env->error, error_number, status_code); \ + AXIS2_LOG_ERROR(env->log, file_name_line_no, \ + AXIS2_ERROR_GET_MESSAGE(env->error)); \ + } + + /** + * This macro is used to set and error, and log it + * @param env Reference to env struct + * @param error_number Error number for the error occured + * @param status_code The Error Status to be set + */ +#define AXIS2_HANDLE_ERROR(env, error_number, status_code) \ + AXIS2_HANDLE_ERROR_WITH_FILE(env, error_number, status_code, \ + AXIS2_LOG_SI) \ + + /** Method names in the loadable libraries */ + +#define AXIS2_CREATE_FUNCTION "axis2_get_instance" +#define AXIS2_DELETE_FUNCTION "axis2_remove_instance" + + typedef void( + AXIS2_CALL + * AXIS2_FREE_VOID_ARG)( + void *obj_to_be_freed, + const axutil_env_t * env); + + /* Function pointer typedef for read callback */ + typedef int( + AXIS2_CALL + * AXIS2_READ_INPUT_CALLBACK)( + char *buffer, + int size, + void *ctx); + + /* Function pointer typedef for close callback */ + typedef int( + AXIS2_CALL + * AXIS2_CLOSE_INPUT_CALLBACK)( + void *ctx); + + /** + * \brief Axis2 scopes + * + * Possible scope value for Axis2 + */ + enum axis2_scopes + { + + /** Request scope */ + AXIS2_SCOPE_REQUEST = 0, + + /** Session scope */ + AXIS2_SCOPE_SESSION, + + /** Application scope */ + AXIS2_SCOPE_APPLICATION + }; + +#define AXIS2_TARGET_EPR "target_epr" +#define AXIS2_DUMP_INPUT_MSG_TRUE "dump" + + /** + * This function allows the user match a REST URL template with the + * Request URL. It returns a 3-dimensional array with pairs of elements + * of axis2_char_t arrays (strings). The caller is responsible to free + * the memory allocated by the function for the return value. + * @param env pointer to environment struct + * @param tmpl Template to Match + * @param url Request URL + * @param match_count variable to store match count + * @param matches axis2_char_t *** axis2_char_t *** + * @return AXIS2_SUCCESS if all matches were found or AXIS2_FAILURE. + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_parse_rest_url_for_params( + const axutil_env_t * env, + const axis2_char_t * tmpl, + const axis2_char_t * url, + int * match_count, + axis2_char_t **** matches); + + /** + * This function allows users to resolve the service and op from the + * url. It returns an array of 2 elements of axis2_char_t arrays (strings). + * The caller is responsible to free the memory allocated by the function + * for the return value. + * @param env pointer to environment struct + * @param request url + * @return axis2_char_t ** axis2_char_t ** + */ + AXIS2_EXTERN axis2_char_t **AXIS2_CALL + axutil_parse_request_url_for_svc_and_op( + const axutil_env_t * env, + const axis2_char_t * request); + + /** + * Quotes an XML string. + * Replace '<', '>', and '&' with '<', '>', and '&'. + * If quotes is true, then replace '"' with '"'. + * @param env pointer to environment struct + * @param s string to be quoted + * @param quotes if AXIS2_TRUE then replace '"' with '"'. + * quotes is typically set to true for XML strings that will occur within + * double quotes -- attribute values. + * @return Encoded string if there are characters to be encoded, else NULL. + * The caller is responsible to free the memory allocated by the function + * for the return value + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_xml_quote_string( + const axutil_env_t * env, + const axis2_char_t * s, + axis2_bool_t quotes); + + AXIS2_EXTERN int AXIS2_CALL + axutil_hexit(axis2_char_t c); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axutil_url_decode( + const axutil_env_t * env, + axis2_char_t * dest, + axis2_char_t * src); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_char_2_byte( + const axutil_env_t *env, + axis2_char_t *char_buffer, + axis2_byte_t **byte_buffer, + int *byte_buffer_size); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_UTILS_H */ diff --git a/util/include/axutil_utils_defines.h b/util/include/axutil_utils_defines.h new file mode 100644 index 0000000..c12c842 --- /dev/null +++ b/util/include/axutil_utils_defines.h @@ -0,0 +1,226 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_UTILS_DEFINES_H +#define AXUTIL_UTILS_DEFINES_H + +#include + +#if !defined(_WIN32) +#include +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +#if defined(_WIN32) && !defined(AXIS2_SKIP_INT_TYPEDEFS) + /** + * ANSI Type definitions for Windows + */ + typedef unsigned __int8 uint8_t; + typedef __int8 int8_t; + typedef unsigned __int16 uint16_t; + typedef __int16 int16_t; + typedef unsigned __int32 uint32_t; + typedef __int32 int32_t; + typedef unsigned __int64 uint64_t; + typedef __int64 int64_t; +#endif + +/** + * Definition of format specifiers + * for printf family of functions + */ + +#if defined(_WIN32) +#define AXIS2_PRINTF_INT64_FORMAT_SPECIFIER "%I64d" +#define AXIS2_PRINTF_UINT64_FORMAT_SPECIFIER "%I64u" +#define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%I32d" +#define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%I32u" +#else +#if __WORDSIZE == 64 +#define AXIS2_PRINTF_INT64_FORMAT_SPECIFIER "%ld" +#define AXIS2_PRINTF_UINT64_FORMAT_SPECIFIER "%lu" +#else +#define AXIS2_PRINTF_INT64_FORMAT_SPECIFIER "%lld" +#define AXIS2_PRINTF_UINT64_FORMAT_SPECIFIER "%llu" +#endif +#define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%d" +#define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%u" +#endif + + /** + * Type definitions + */ + typedef char axis2_char_t; + typedef int axis2_bool_t; + typedef int axis2_status_t; + typedef int axis2_scope_t; + typedef unsigned int axis2_ssize_t; + typedef char axis2_byte_t; + typedef unsigned char axis2_unsigned_byte_t; + +#define AXIS2_STRING(s) s + +#define AXIS2_CHAR(c) c + +#define AXIS2_CRLF_LENGTH 2 + +#define AXIS2_CRLF "\r\n" + + /* These constant definitions should later be moved to platform dependant + * files + */ + +#define AXIS2_EOLN '\0' + + /** + * Boolean values + */ +#define AXIS2_TRUE 1 +#define AXIS2_FALSE 0 + + /** + * Exporting + */ +#if defined(_WIN32) && !defined(AXIS2_DECLARE_STATIC) +#define AXIS2_EXPORT __declspec(dllexport) +#else +#define AXIS2_EXPORT +#endif + + /** + * Importing + */ +#if defined(_WIN32) +#define AXIS2_IMPORT __declspec(dllimport) +#else +#define AXIS2_IMPORT +#endif + + /** + * Calling Conventions + */ +#if defined(__GNUC__) +#if defined(__i386) +#define AXIS2_CALL __attribute__((cdecl)) +#define AXIS2_WUR __attribute__((warn_unused_result)) +#else +#define AXIS2_CALL +#define AXIS2_WUR + + +#endif +#else +#if defined(__unix) +#define AXIS2_CALL +#define AXIS2_WUR + + +#else /* WIN32 */ +#define AXIS2_CALL __stdcall +#define AXIS2_WUR +#endif +#endif +#define AXIS2_THREAD_FUNC AXIS2_CALL + + +#ifdef DOXYGEN + + /* define these just so doxygen documents them */ + + /** + * AXIS2_DECLARE_STATIC is defined when including Axis2's Core headers, + * to provide static linkage when the dynamic library may be unavailable. + * + * @see AXIS2_DECLARE_EXPORT + * + * AXIS2_DECLARE_STATIC and AXIS2_DECLARE_EXPORT are left undefined when + * including Axis2's Core headers, to import and link the symbols from the + * dynamic Axis2 Core library and assure appropriate indirection and calling + * conventions at compile time. + */ +# define AXIS2_DECLARE_STATIC + + /** + * AXIS2_DECLARE_EXPORT is defined when building the Axis2 Core dynamic + * library, so that all public symbols are exported. + * + * @see AXIS2_DECLARE_STATIC + */ +# define AXIS2_DECLARE_EXPORT + +#endif /* def DOXYGEN */ + +#if !defined(_WIN32) + + /** + * Axis2 Core functions are declared with AXIS2_EXTERN AXIS2_CALL + + , so they may + * use the most appropriate calling convention. Other + * Core functions with variable arguments must use AXIS2_DECLARE_NONSTD(). + * @code + * AXIS2_EXTERN rettype) axis2_func(args AXIS2_CALL + + + * @endcode + */ +#define AXIS2_EXTERN + + /** + * Axis2 Core variable argument and hook functions are declared with + * AXIS2_DECLARE_NONSTD(), as they must use the C language calling convention. + * @see AXIS2_DECLARE + * @code + * AXIS2_DECLARE_NONSTD(rettype) axis2_func(args [...]) + * @endcode + */ +#define AXIS2_DECLARE_NONSTD(type) type + + /** + * Axis2 Core variables are declared with AXIS2_DECLARE_DATA. + * This assures the appropriate indirection is invoked at compile time. + * + * @code + * AXIS2_DECLARE_DATA type axis2_variable + * @endcode + */ +#define AXIS2_DECLARE_DATA + +#elif defined(AXIS2_DECLARE_STATIC) +#define AXIS2_EXTERN +#define AXIS2_EXTERN_NONSTD +#define AXIS2_DECLARE_DATA +#elif defined(AXIS2_DECLARE_EXPORT) +#define AXIS2_EXTERN AXIS2_EXPORT +#define AXIS2_EXTERN_NONSTD AXIS2_EXPORT +#define AXIS2_DECLARE_DATA +#else +#define AXIS2_EXTERN AXIS2_IMPORT +#define AXIS2_EXTERN_NONSTD AXIS2_IMPORT +#define AXIS2_DECLARE_DATA +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_UTILS_DEFINES_H */ diff --git a/util/include/axutil_uuid_gen.h b/util/include/axutil_uuid_gen.h new file mode 100644 index 0000000..2db4583 --- /dev/null +++ b/util/include/axutil_uuid_gen.h @@ -0,0 +1,51 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain count copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_UUID_GEN_H +#define AXUTIL_UUID_GEN_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_uuid_gen UUID generator + * @ingroup axis2_util + * @{ + */ + + /** + * generate a uuid + * @return generated uuid as a string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axutil_uuid_gen( + const axutil_env_t * env); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_UUID_GEN_H */ diff --git a/util/include/axutil_version.h b/util/include/axutil_version.h new file mode 100644 index 0000000..116ddfa --- /dev/null +++ b/util/include/axutil_version.h @@ -0,0 +1,140 @@ + +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_VERSION_H +#define AXUTIL_VERSION_H + +/* The numeric compile-time version constants. These constants are the + * authoritative version numbers for AXIS2. + */ + +/** major version + * Major API changes that could cause compatibility problems for older + * programs such as structure size changes. No binary compatibility is + * possible across a change in the major version. + */ +#define AXIS2_MAJOR_VERSION 1 + +/** minor version + * Minor API changes that do not cause binary compatibility problems. + * Reset to 0 when upgrading AXIS2_MAJOR_VERSION + */ +#define AXIS2_MINOR_VERSION 6 + +/** patch level + * The Patch Level never includes API changes, simply bug fixes. + * Reset to 0 when upgrading AXIS2_MINOR_VERSION + */ +#define AXIS2_PATCH_VERSION 0 + +/** + * The symbol AXIS2_IS_DEV_VERSION is only defined for internal, + * "development" copies of AXIS2. It is undefined for released versions + * of AXIS2. + */ +#undef AXIS2_IS_DEV_VERSION + +#if defined(AXIS2_IS_DEV_VERSION) || defined(DOXYGEN) + +/** Internal: string form of the "is dev" flag */ +#define AXIS2_IS_DEV_STRING "-dev" +#else +#define AXIS2_IS_DEV_STRING "" +#endif + +/** Properly quote a value as a string in the C preprocessor */ +#define AXIS2_STRINGIFY(n) AXIS2_STRINGIFY_HELPER(n) + +/** Helper macro for AXIS2_STRINGIFY */ +#define AXIS2_STRINGIFY_HELPER(n) #n + +/** The formatted string of AXIS2's version */ +#define AXIS2_VERSION_STRING \ + AXIS2_STRINGIFY(AXIS2_MAJOR_VERSION) "." \ + AXIS2_STRINGIFY(AXIS2_MINOR_VERSION) "." \ + AXIS2_STRINGIFY(AXIS2_PATCH_VERSION) \ + AXIS2_IS_DEV_STRING + +/** An alternative formatted string of AXIS2's version */ + +/* macro for Win32 .rc files using numeric csv representation */ +#define AXIS2_VERSION_STRING_CSV AXIS2_MAJOR_VERSION ##, \ + ##AXIS2_MINOR_VERSION ##, \ + ##AXIS2_PATCH_VERSION + +#ifndef AXIS2_VERSION_ONLY + +/* The C language API to access the version at run time, + * as opposed to compile time. AXIS2_VERSION_ONLY may be defined + * externally when preprocessing axutil_version.h to obtain strictly + * the C Preprocessor macro declarations. + */ + +#include "axutil_env.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * The numeric version information is broken out into fields within this + * structure. + */ + typedef struct + { + + int major; + + /**< major number */ + + int minor; + + /**< minor number */ + + int patch; + + /**< patch number */ + + int is_dev; + + /**< is development (1 or 0) */ + } + axis2_version_t; + + /** + * Return AXIS2's version information information in a numeric form. + * + * @param pvsn Pointer to a version structure for returning the version + * information. + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_version( + axis2_version_t * pvsn); + + /** Return AXIS2's version information as a string. */ + AXIS2_EXTERN const char *AXIS2_CALL + axis2_version_string( + void); + +#ifdef __cplusplus +} +#endif +#endif + +#endif /* AXIS2_VERSION_H */ diff --git a/util/include/platforms/axutil_platform_auto_sense.h b/util/include/platforms/axutil_platform_auto_sense.h new file mode 100644 index 0000000..feec323 --- /dev/null +++ b/util/include/platforms/axutil_platform_auto_sense.h @@ -0,0 +1,63 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_PLATFORM_AUTOSENSE_H +#define AXIS2_PLATFORM_AUTOSENSE_H + +/** + * @file axutil_platform_auto_sense.h + * @brief axis2 platform auto sense + */ + +/* +#ifdef __cplusplus +extern "C" +{ +#endif +*/ + + /** @defgroup axis2_platform_auto_sense + * @ingroup axis2_platforms + * @{ + */ + +#if defined(_WIN32 ) +#include "windows/axutil_windows.h" +#include "windows/axutil_dir_windows.h" +#include "windows/axutil_uuid_gen_windows.h" +#include "windows/axutil_getopt_windows.h" +#include "windows/axutil_date_time_util_windows.h" +#include "windows/axutil_thread_windows.h" +#elif defined ( __OS400__ ) +#include +#elif defined ( AIX ) +#include +#elif defined ( HPUX ) +#include +#else +#include +#endif + + /** @} */ +/* +#ifdef __cplusplus +} +#endif +*/ + +#endif /* AXIS2_PLATFORM_AUTOSENSE_H */ diff --git a/util/include/platforms/unix/axutil_date_time_util_unix.h b/util/include/platforms/unix/axutil_date_time_util_unix.h new file mode 100644 index 0000000..9979395 --- /dev/null +++ b/util/include/platforms/unix/axutil_date_time_util_unix.h @@ -0,0 +1,46 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain count copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_DATE_TIME_UTIL_UNIX_H +#define AXUTIL_DATE_TIME_UTIL_UNIX_H + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axis2_milliseconds + * @ingroup axis2_milliseconds + * @{ + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_platform_get_milliseconds(void + ); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/util/include/platforms/unix/axutil_thread_unix.h b/util/include/platforms/unix/axutil_thread_unix.h new file mode 100644 index 0000000..5ee5992 --- /dev/null +++ b/util/include/platforms/unix/axutil_thread_unix.h @@ -0,0 +1,59 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_THREAD_UNIX_H +#define AXUTIL_THREAD_UNIX_H + +#include +#include + +#define SHELL_PATH "/bin/sh" + +typedef pthread_t axis2_os_thread_t; /* Native thread */ + +struct axutil_thread_t +{ + pthread_t *td; + void *data; + axutil_thread_start_t func; + axis2_bool_t try_exit; +}; + +struct axutil_threadattr_t +{ + pthread_attr_t attr; +}; + +struct axutil_threadkey_t +{ + pthread_key_t key; +}; + +struct axutil_thread_once_t +{ + pthread_once_t once; +}; + +/*************************Thread locking functions*****************************/ +struct axutil_thread_mutex_t +{ + axutil_allocator_t *allocator; + pthread_mutex_t mutex; +}; + +#endif /* AXIS2_THREAD_UNIX_H */ diff --git a/util/include/platforms/unix/axutil_unix.h b/util/include/platforms/unix/axutil_unix.h new file mode 100644 index 0000000..fa23eae --- /dev/null +++ b/util/include/platforms/unix/axutil_unix.h @@ -0,0 +1,279 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_UNIX_H +#define AXIS2_UNIX_H + +#include + +/** + * @file axutil_unix.h + * @brief axis2 unix platform specific interface + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @defgroup axis2_unix Platform Specific + * @ingroup axis2_platforms_unix + * @{ + */ + + /*************************************************************** + * Default paths to shared library/DLLs and files + *************************************************************** + */ + +#define AXIS2_PLATFORM_DEFAULT_DEPLOY_PATH "" + +#define AXIS2_PLATFORM_XMLPARSER_PATH "libaxis2_parser.so" +#define AXIS2_PLATFORM_TRANSPORTHTTP_PATH "libhttp_transport.so" +#define AXIS2_PLATFORM_CHANNEL_PATH "libhttp_channel.so" +#define AXIS2_PLATFORM_SSLCHANNEL_PATH "Unknown" + +#define AXIS2_PLATFORM_LOG_PATH "/usr/local/axis2/log/axutil_log" +#define AXIS2_PLATFORM_CLIENTLOG_PATH "/usr/local/axis2/log/axis2_client_log" +#define AXIS2_PLATFORM_CONFIG_PATH "/etc/axiscpp.conf" +#define AXIS2_PLATFORM_SECUREINFO "" + + /** + * Resource that contains the configuration + */ +#define AXIS2_CONFIGURATION_RESOURCE "/usr/local/axis2/axis2.xml" + + /***************************************************************** + * Library loading and procedure resolution + ****************************************************************/ +#ifdef USE_LTDL +#include +#define AXIS2_DLHANDLER lt_dlhandle + +#define AXIS2_PLATFORM_LOADLIBINIT lt_dlinit +#define AXIS2_PLATFORM_LOADLIB(_lib) lt_dlopen(_lib) +#define AXIS2_PLATFORM_UNLOADLIB lt_dlclose +#define AXIS2_PLATFORM_GETPROCADDR lt_dlsym +#define AXIS2_PLATFORM_LOADLIBEXIT lt_dlexit +#define AXIS2_PLATFORM_LOADLIB_ERROR lt_dlerror() +#else +#include +#define AXIS2_DLHANDLER void* + +#define AXIS2_PLATFORM_LOADLIBINIT() +#define AXIS2_PLATFORM_LOADLIB(_lib) dlopen(_lib, RTLD_LAZY) + /*#define AXIS2_PLATFORM_LOADLIB(_lib) dlopen(_lib, RTLD_NOW) */ + +#define AXIS2_PLATFORM_UNLOADLIB dlclose +#define AXIS2_PLATFORM_GETPROCADDR dlsym +#define AXIS2_PLATFORM_LOADLIBEXIT() +#define AXIS2_PLATFORM_LOADLIB_ERROR dlerror() + +#endif + + /*************************************************************** + * National Language Support + ****************************************************************/ + + /* STRTOASC is to translate single byte 'native' character representation to ASCII */ + + /* ASCTOSTR is to translate single byte ascii representation to 'native' character */ + + /* CANNOT be used with constants */ +#define AXIS2_PLATFORM_STRTOASC( x ) ( x ) +#define AXIS2_PLATFORM_ASCTOSTR( x ) ( x ) + + /*************************************************************** + * Miscellaneous + ****************************************************************/ +#include +#include + + /*#include */ +#include +#include +#include +#include +#include +#include +#include +#include +#include "axutil_uuid_gen_unix.h" /* uuid_gen unix implementation */ +#include /* TCP_NODELAY */ +#include +#include +#include "axutil_date_time_util_unix.h" + + /* for file access handling */ +#ifdef HAVE_UNISTD_H +#include +#endif /*HAVE_UNISTD_H */ + + /* network handling */ +#include +#include +#include +#include +#include + +#include + + /* dir handling */ +#include +#include + +#define AXIS2_STRRCHR(x, y) (strrchr(x, y)) + +#define AXIS2_PLATFORM_SLEEP(x) sleep(0); + + /** sleep function abstraction */ +#define AXIS2_SLEEP sleep +#define AXIS2_USLEEP usleep + + /** + * Get the last error code from the system. + * Please ensure that this is a thread safe implementation + * and that it returns a long + * @return long the last error message for this thread + */ + + /*#define AXIS2_GETLASTERROR errno; */ + + /** + * From the last error number get a sensible std::string representing it + * @param errorNumber the error Number you are trying to get a message for + * @return the error message. NOTE: The caller is responsible for deleting the returned string + */ + + /*#define AXIS2_PLATFORM_GET_ERROR_MESSAGE(errorNumber) new string(strerror(errorNumber)); */ + + /** + * Platform specific method to obtain current thread ID + */ +#include +#define AXIS2_PLATFORM_GET_THREAD_ID() pthread_self() + + /** + * Platform specific method to obtain current time in milli seconds + */ +#define AXIS2_PLATFORM_GET_TIME_IN_MILLIS ftime +#define AXIS2_PLATFORM_TIMEB timeb + + /** + * type to be used for 64bit integers + */ +#define AXIS2_LONGLONG long long +#define AXIS2_LONGLONGVALUE(value) value##LL +#define AXIS2_UNSIGNED_LONGLONGVALUE(value) value##ULL + + /** + * Format string to be used in printf for 64bit integers + */ +#define AXIS2_PRINTF_LONGLONG_FORMAT_SPECIFIER "%lld" +#define AXIS2_PRINTF_LONGLONG_FORMAT_SPECIFIER_CHARS "lld" +#define AXIS2_PRINTF_UNSIGNED_LONGLONG_FORMAT_SPECIFIER "%llu" +#define AXIS2_PRINTF_UNSIGNED_LONGLONG_FORMAT_SPECIFIER_CHARS "llu" + + /** + * Platform specific path separator char + */ +#ifdef IS_MACOSX +#define AXIS2_PATH_SEP_CHAR '/' +#define AXIS2_PATH_SEP_STR "/" +#define AXIS2_LIB_PREFIX "lib" +#define AXIS2_LIB_SUFFIX ".dylib" +#else +#define AXIS2_PATH_SEP_CHAR '/' +#define AXIS2_PATH_SEP_STR "/" +#define AXIS2_LIB_PREFIX "lib" +#define AXIS2_LIB_SUFFIX ".so" +#endif + + /** + * Platform specific time + */ +#define AXIS2_TIME_T time_t + + /** + * Platform specific file handling + */ +#define AXIS2_FOPEN fopen +#define AXIS2_FREAD fread +#define AXIS2_FWRITE fwrite +#define AXIS2_FCLOSE fclose +#define AXIS2_FTELL ftell +#define AXIS2_ACCESS(zpath,imode) access(zpath,imode) +#define AXIS2_R_OK R_OK /* test for read permission */ +#define AXIS2_W_OK W_OK /* test for write permission */ +#define AXIS2_X_OK X_OK /* test for execute or search permission */ +#define AXIS2_F_OK F_OK /* test whether the directories leading to the file can be + searched and the file exists */ + + /** + * Platform specific environment variable access method + */ +#define AXIS2_GETENV(_env_var_name) getenv(_env_var_name) + + /** + * unix specific directory handling functions + */ +#define AXIS2_SCANDIR scandir +#define AXIS2_ALPHASORT alphasort +#define AXIS2_OPENDIR opendir +#define AXIS2_CLOSEDIR closedir +#define AXIS2_READDIR readdir +#define AXIS2_READDIR_R readdir_r +#define AXIS2_REWINDDIR rewinddir +#define AXIS2_MKDIR mkdir +#define AXIS2_GETCWD getcwd +#define AXIS2_CHDIR chdir + + /** + * network specific functions and defs + */ +#define axis2_socket_t int +#define AXIS2_INVALID_SOCKET -1 +#define AXIS2_INADDR_NONE (in_addr_t)-1 +#define axis2_unsigned_short_t uint16_t +#define AXIS2_CLOSE_SOCKET(sock) close(sock) +#define AXIS2_CLOSE_SOCKET_ON_EXIT(sock) fcntl(sock,F_SETFD, FD_CLOEXEC); +#define axis2_socket_len_t socklen_t +#define AXIS2_SHUT_WR SHUT_WR + + /** getopt function */ +#define AXIS2_GETOPT getopt + + /** minizip functions */ +#define axis2_fill_win32_filefunc(ffunc) +#define AXIS2_UNZOPEN2(zipfilename,ffunc) unzOpen2(zipfilename,NULL); memset(&ffunc, 0, sizeof(ffunc)); + + /** + * handling variable number of arguments (for log.c) + */ +#define AXIS2_VSNPRINTF vsnprintf + +#define AXIS2_SNPRINTF snprintf + +#define axis2_gmtime_r gmtime_r + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_UNIX_H */ diff --git a/util/include/platforms/unix/axutil_uuid_gen_unix.h b/util/include/platforms/unix/axutil_uuid_gen_unix.h new file mode 100644 index 0000000..d3b25ba --- /dev/null +++ b/util/include/platforms/unix/axutil_uuid_gen_unix.h @@ -0,0 +1,94 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain count copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_UUID_GEN_UNIX_H +#define AXUTIL_UUID_GEN_UNIX_H + +#include +#include + +#define UUIDS_PER_TICK 100 +#define UUID_TIMEOFFSET AXIS2_UNSIGNED_LONGLONGVALUE(0x01B21DD213814000) +#define AXIS2_LOCAL_MAC_ADDR "000000" + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_uuid_gen UUID Generator + * @ingroup axis2_util + * @{ + */ + + struct axutil_uuid + { + unsigned int time_low; + unsigned short int time_mid; + unsigned short int time_high_version; + short int clock_variant; + unsigned char mac_addr[6]; + }; + + /* bits 0-59 time field + * bits 60-63 version + * bits 64-65 2 bit variant + * bits 66-79 clock sequence + * bits 80-107 node MAC address + */ + struct axutil_uuid_st + { + unsigned char mac[6]; /* pre-determined MAC address */ + struct timeval time_last; /* last retrieved timestamp */ + unsigned long time_seq; /* last timestamp sequence counter */ + short int clock; /* clock tick - incremented random number */ + }; + + typedef struct axutil_uuid axutil_uuid_t; + + /** + * Returns the mac address of the first ethernet intsrface + * @return MAC address as a char[6] + */ + char *AXIS2_CALL + axutil_uuid_get_mac_addr(void + ); + + /** + * Generates a uuid in version1 format (node - timestamp based) + * @return generated uuid as a axutil_uuid_t + */ + axutil_uuid_t *AXIS2_CALL + axutil_uuid_gen_v1(void + ); + + /** + * Generates a uuid + * @return generated uuid as a string + */ + axis2_char_t *AXIS2_CALL + axutil_platform_uuid_gen( + char *s); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_UUID_GEN_UNIX_H */ diff --git a/util/include/platforms/windows/axutil_date_time_util_windows.h b/util/include/platforms/windows/axutil_date_time_util_windows.h new file mode 100644 index 0000000..2c5eef9 --- /dev/null +++ b/util/include/platforms/windows/axutil_date_time_util_windows.h @@ -0,0 +1,45 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain count copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXUTIL_DATE_TIME_UTIL_WINDOWS_H +#define AXUTIL_DATE_TIME_UTIL_WINDOWS_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * @defgroup axutil_date_time_util + * @ingroup axutil_date_time_util + * @{ + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_platform_get_milliseconds( + ); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/util/include/platforms/windows/axutil_dir_windows.h b/util/include/platforms/windows/axutil_dir_windows.h new file mode 100644 index 0000000..89ba297 --- /dev/null +++ b/util/include/platforms/windows/axutil_dir_windows.h @@ -0,0 +1,123 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef READDIR_H +#define READDIR_H +#include +#include +#include +#include +#include +#include +#include +#include + + +/* struct dirent - same as Unix dirent.h */ +struct dirent +{ + long d_ino; /* inode number (always 1 in WIN32) */ + off_t d_off; /* offset to this dirent */ + unsigned short d_reclen; /* length of d_name */ + char d_name[_MAX_FNAME + 1]; /* filename (null terminated) */ + + /*unsigned char d_type; *//*type of file */ +}; + + +/* def struct DIR - different from Unix DIR */ +typedef struct +{ + long handle; /* _findfirst/_findnext handle */ + short offset; /* offset into directory */ + short finished; /* 1 if there are not more files */ + struct _finddata_t fileinfo; /* from _findfirst/_findnext */ + char *dirname; /* the dir we are reading */ + struct dirent dent; /* the dirent to return */ + +} +AXIS2_DIR; + + +/* Function prototypes */ + + +/** + * open a directory on a given name + * returns a DIR if successful, or NULL if the path cannot be opened + */ +AXIS2_EXTERN AXIS2_DIR * AXIS2_CALL + axis2_opendir(const char *); + + +/** + * Close the directory stream DIRP. + * Return 0 if successful, -1 otherwise. + */ +AXIS2_EXTERN int AXIS2_CALL + axis2_closedir( + AXIS2_DIR *); + + +/** + * Read a directory entry from DIRP. Return a pointer to a `struct + * dirent' describing the entry, or NULL for EOF or error. + */ +AXIS2_EXTERN struct dirent *AXIS2_CALL + axis2_readdir( + AXIS2_DIR *); + + +/** + * Reentrant version of `readdir' + */ +AXIS2_EXTERN int AXIS2_CALL + axis2_readdir_r( + AXIS2_DIR *, + struct dirent *, + struct dirent **); + + +/** + * Rewind DIRP to the beginning of the directory. + */ +AXIS2_EXTERN int AXIS2_CALL + axis2_rewinddir( + AXIS2_DIR *); + + +/** + * Scan the directory DIR + * Returns the number of entries selected, or -1 on error + */ +AXIS2_EXTERN int AXIS2_CALL + axis2_scandir( + const char *_dirname, + struct dirent **__namelist[], + int(*selector)(const struct dirent * entry), + int(*compare)(const struct dirent ** a, + const struct dirent ** b)); + + +/** + * Compare two `struct dirent's alphabetically + */ +extern int alphasort( + const struct dirent **__d1, + const struct dirent **__d2); + +#endif /* READDIR_H */ diff --git a/util/include/platforms/windows/axutil_getopt_windows.h b/util/include/platforms/windows/axutil_getopt_windows.h new file mode 100644 index 0000000..8234fba --- /dev/null +++ b/util/include/platforms/windows/axutil_getopt_windows.h @@ -0,0 +1,79 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef _AXIS2_GETOPT_WINDOWS_H_ +#define _AXIS2_GETOPT_WINDOWS_H_ + +#include + +/** + * @file axis2_getopt_windows.h + * @brief windows cutdown version of getopt function in unix + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @defgroup axis2_getopt_windows getopt + * @ingroup axis2_windows + * @{ + */ +#ifndef AXIS2_GET_OPT_DEFINE_MODE_NO_IMPORT + AXIS2_IMPORT extern int opterr; + AXIS2_IMPORT extern int optopt; + AXIS2_IMPORT extern char *optarg; +#else + AXIS2_EXPORT int opterr; + AXIS2_EXPORT int optopt; + AXIS2_EXPORT char *optarg; +#endif + + /** + * return and log error + * @param __optopt option + * @param __err error code + * @param __showerr whether or not send to stderr + * @return ':' or '?' + */ + int _axis2_opt_error( + int __optopt, + int __err, + int __showerr); + + /** + * cutdown version of getopt in unix + * @param __argc no of arguments + * @param __argv list of arguments + * @param __shortopts options + * @return option char if successful, -1 if over, ':' or '?' if error + */ + AXIS2_EXTERN int AXIS2_CALL + axis2_getopt( + int __argc, + char *const *__argv, + const char *__shortopts); + + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/util/include/platforms/windows/axutil_thread_mutex_windows.h b/util/include/platforms/windows/axutil_thread_mutex_windows.h new file mode 100644 index 0000000..4fed951 --- /dev/null +++ b/util/include/platforms/windows/axutil_thread_mutex_windows.h @@ -0,0 +1,44 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef AXIS2_THREAD_MUTEX_WINDOWS_H +#define AXIS2_THREAD_MUTEX_WINDOWS_H + +#include +#include +#include +typedef enum thread_mutex_type +{ + thread_mutex_critical_section, + thread_mutex_unnested_event, + thread_mutex_nested_mutex +} thread_mutex_type; + +/* handle applies only to unnested_event on all platforms + * and nested_mutex on Win9x only. Otherwise critical_section + * is used for NT nexted mutexes providing optimal performance. + */ +struct axutil_thread_mutex_t +{ + thread_mutex_type type; + HANDLE handle; + CRITICAL_SECTION section; + axutil_allocator_t *allocator; +}; + +#endif /* AXIS2_THREAD_MUTEX_WINDOWS_H */ diff --git a/util/include/platforms/windows/axutil_thread_windows.h b/util/include/platforms/windows/axutil_thread_windows.h new file mode 100644 index 0000000..739b4c2 --- /dev/null +++ b/util/include/platforms/windows/axutil_thread_windows.h @@ -0,0 +1,140 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_THREAD_WINDOWS_H +#define AXIS2_THREAD_WINDOWS_H + +#include +#include +#include + +#define SHELL_PATH "cmd.exe" + +typedef HANDLE axis2_os_thread_t; /* Native thread */ + +/* Chosen for us by apr_initialize */ + +struct axutil_thread_t +{ + HANDLE *td; + void *data; + axutil_thread_start_t func; + axis2_bool_t try_exit; +}; + +struct axutil_threadattr_t +{ + int detach; + size_t stacksize; +}; + +struct axutil_threadkey_t +{ + DWORD key; +}; + +struct axutil_thread_once_t +{ + long value; +}; + +AXIS2_EXTERN axutil_threadattr_t *AXIS2_CALL +axutil_threadattr_create( + axutil_allocator_t * allocator); + +/* Destroy the threadattr object */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +threadattr_cleanup( + void *data); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_threadattr_detach_set( + axutil_threadattr_t * attr, + axis2_bool_t detached); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_threadattr_detach_get( + axutil_threadattr_t * attr, + const axutil_env_t * env); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_threadattr_stacksize_set( + axutil_threadattr_t * attr, + size_t stacksize); + +AXIS2_EXTERN axutil_thread_t *AXIS2_CALL +axutil_thread_create( + axutil_allocator_t * allocator, + axutil_threadattr_t * attr, + axutil_thread_start_t func, + void *data); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_exit( + axutil_thread_t * thd, + axutil_allocator_t * allocator); + +AXIS2_EXTERN axis2_os_thread_t AXIS2_CALL +axis2_os_thread_current( + void); + +AXIS2_EXTERN int AXIS2_CALL +axis2_os_thread_equal( + axis2_os_thread_t tid1, + axis2_os_thread_t tid2); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_join( + axutil_thread_t * thd); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_detach( + axutil_thread_t * thd); + +AXIS2_EXTERN axis2_os_thread_t AXIS2_CALL +axis2_os_thread_get( + axutil_thread_t * thd, + const axutil_env_t * env); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_key_create( + axutil_threadkey_t * axis2_key); + +AXIS2_EXTERN void *AXIS2_CALL +axutil_thread_getspecific( + axutil_threadkey_t * axis2_key); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_setspecific( + axutil_threadkey_t * axis2_key, + void *value); + +AXIS2_EXTERN void AXIS2_CALL +axutil_thread_key_free( + axutil_threadkey_t * axis2_key); + +AXIS2_EXTERN axutil_thread_once_t *AXIS2_CALL +axutil_thread_once_init( + axutil_allocator_t * allocator); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_once( + axutil_thread_once_t * control, + void(*func)(void)); + +#endif /* AXIS2_THREAD_WINDOWS_H */ diff --git a/util/include/platforms/windows/axutil_uuid_gen_windows.h b/util/include/platforms/windows/axutil_uuid_gen_windows.h new file mode 100644 index 0000000..f8c0872 --- /dev/null +++ b/util/include/platforms/windows/axutil_uuid_gen_windows.h @@ -0,0 +1,46 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_UDDI_GEN_WINDOWS_H +#define AXIS2_UDDI_GEN_WINDOWS_H + +#include + +#ifdef __cplusplus +extern "C" +{ + +#endif /* */ + + /* Function prototypes */ + + + /** + * Generate universally unique id + * @return a char pointer to uuid + */ + AXIS2_EXTERN axis2_char_t * AXIS2_CALL + axutil_platform_uuid_gen( + char *s); + + + /** @} */ +#ifdef __cplusplus +} +#endif /* */ + +#endif /* AXIS2_UDDI_GEN_WINDOWS_H */ diff --git a/util/include/platforms/windows/axutil_windows.h b/util/include/platforms/windows/axutil_windows.h new file mode 100644 index 0000000..a473264 --- /dev/null +++ b/util/include/platforms/windows/axutil_windows.h @@ -0,0 +1,278 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_WINDOWS_H +#define AXIS2_WINDOWS_H + +/** + * @file axutil_unix.h + * @brief axis2 unix platform specific interface + */ +#include +#define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */ +#include + + /*for minizip uncompression library */ +# include + + /*for file access check */ +#include +#include + + /*for network handling */ +#include +#include +#include +#include + + /* for time */ +#include +#include + + /* get opt */ +#include "axutil_getopt_windows.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** @defgroup axis2_unix Platform Specific + * @ingroup axis2_platforms_unix + * @{ + */ + + /*enum platform_error_codes + { + PLATFORM_ERROR_UUID_NO_ADDRESS = 0, + PLATFORM_ERROR_OUT_OF_MEMORY = 1 + }; */ + + + + AXIS2_EXTERN HMODULE AXIS2_CALL + callLoadLib( + char *lib); + + AXIS2_EXTERN struct tm *AXIS2_CALL + axis2_win_gmtime( + const time_t * timep, + struct tm *result); + + + /* Get the last Error */ + AXIS2_EXTERN void AXIS2_CALL + axutil_win32_get_last_error(axis2_char_t *buff, + unsigned int buf_size); + + /* Get the last Socket Error */ + AXIS2_EXTERN void AXIS2_CALL + axutil_win32_get_last_wsa_error(axis2_char_t *buff, + unsigned int buf_size); + +#define AXUTIL_WIN32_ERROR_BUFSIZE 256 + + /*************************************************************** + * Default paths to shared library/DLLs and files + *************************************************************** + */ + +#define AXIS2_PLATFORM_DEFAULT_DEPLOY_PATH "" + +#define AXIS2_PLATFORM_XMLPARSER_PATH "axis2_parser.dll" +#define AXIS2_PLATFORM_TRANSPORTHTTP_PATH "http_transport.dll" +#define AXIS2_PLATFORM_CHANNEL_PATH "http_channel.dll" +#define AXIS2_PLATFORM_SSLCHANNEL_PATH "Unknown" + +#define AXIS2_PLATFORM_LOG_PATH "" /*/usr/local/axis2/log/axutil_log */ +#define AXIS2_PLATFORM_CLIENTLOG_PATH "" /* /usr/local/axis2/log/axis2_client_log */ +#define AXIS2_PLATFORM_CONFIG_PATH "" /* /etc/axiscpp.conf */ +#define AXIS2_PLATFORM_SECUREINFO "" + + /** + * Resource that contains the configuration + */ +#define AXIS2_CONFIGURATION_RESOURCE "" /* should be set */ + +/* + * ============================================================= + * Library loading and procedure resolution + * ============================================================= + */ +#define DLHandler HINSTANCE +#define RTLD_LAZY 0 /* not sure this is needed? */ + +#define AXIS2_PLATFORM_LOADLIBINIT() +#define AXIS2_PLATFORM_LOADLIB(_lib) /*LoadLibrary(_lib) */ callLoadLib(_lib) +#define AXIS2_PLATFORM_UNLOADLIB FreeLibrary +#define AXIS2_PLATFORM_GETPROCADDR GetProcAddress +#define AXIS2_PLATFORM_LOADLIBEXIT() +#define AXIS2_PLATFORM_LOADLIB_ERROR axutil_win32_get_last_error() + +#define AXIS2_DLHANDLER void* + + +/* + * ============================================================= + * National Language Support + * ============================================================= + */ + +/* + * STRTOASC is to translate single byte 'native' character representation to ASCII + * ASCTOSTR is to translate single byte ascii representation to 'native' character + * CANNOT be used with constants + */ +#define AXIS2_PLATFORM_STRTOASC( x ) ( x ) +#define AXIS2_PLATFORM_ASCTOSTR( x ) ( x ) + +/* + * ============================================================= + * Miscellaneous + * ============================================================= + */ + +#define AXIS2_STRRCHR(x, y) (strrchr(x, y)) + +#define AXIS2_PLATFORM_SLEEP(x) Sleep(0); + +#define AXIS2_SLEEP(x) Sleep((x)*1000) +#define AXIS2_USLEEP(x) Sleep((x)/1000); + + /** + * Get the last error code from the system. + * Please ensure that this is a thread safe implementation + * and that it returns a long + * @return long the last error message for this thread + */ +#define AXIS2_GETLASTERROR GetLastError(); + + /** + * From the last error number get a sensible std::string representing it + * @param errorNumber the error Number you are trying to get a message for + * @return the error message. NOTE: The caller is responsible for deleting the returned string + */ +#define AXIS2_PLATFORM_GET_ERROR_MESSAGE(errorNumber) getPlatformErrorMessage(errorNumber); + + /** + * Platform specific method to obtain current thread ID + */ +#define AXIS2_PLATFORM_GET_THREAD_ID() GetCurrentThreadId() + /** + * type to be used for 64bit integers + */ +#define AXIS2_LONGLONG __int64 + + /** + * Format string to be used in printf for 64bit integers + */ +#define AXIS2_PRINTF_LONGLONG_FORMAT_SPECIFIER "%I64d" +#define AXIS2_PRINTF_LONGLONG_FORMAT_SPECIFIER_CHARS "I64d" + + + /** + * Platform specific path separator char + */ +#define AXIS2_PATH_SEP_CHAR '/' +#define AXIS2_PATH_SEP_STR "/" +#define AXIS2_LIB_PREFIX "" +#define AXIS2_LIB_SUFFIX ".dll" + + /** + * Platform specific time + */ +#define AXIS2_TIME_T time_t + + /** + * Platform specific method to obtain current time in milli seconds + */ +#define AXIS2_PLATFORM_GET_TIME_IN_MILLIS _ftime +#define AXIS2_PLATFORM_TIMEB _timeb + + /** + * Platform specific file handling + */ +#define AXIS2_FOPEN fopen +#define AXIS2_FREAD fread +#define AXIS2_FWRITE fwrite +#define AXIS2_FCLOSE fclose +#define AXIS2_FTELL ftell +#define AXIS2_ACCESS(zpath,imode) _access(zpath,imode) +#define AXIS2_R_OK 04 /* test for read permission */ +#define AXIS2_W_OK 02 /* test for write permission */ +#define AXIS2_X_OK 00 /* test for execute or search permission */ +#define AXIS2_F_OK 00 /* test whether the directories leading to the file can be + searched and the file exists * / + + /** + * windows specific directory handling functions + */ +#define AXIS2_SCANDIR axis2_scandir +#define AXIS2_ALPHASORT alphasort +#define AXIS2_OPENDIR axis2_opendir +#define AXIS2_CLOSEDIR axis2_closedir +#define AXIS2_READDIR axis2_readdir +#define AXIS2_READDIR_R axis2_readdir_r +#define AXIS2_REWINDDIR axis2_rewinddir +#define AXIS2_MKDIR(path,x) _mkdir(path) +#define AXIS2_GETCWD _getcwd +#define AXIS2_CHDIR _chdir + + /** + * network specific functions and defs + */ +#define axis2_socket_t SOCKET + +#define AXIS2_INVALID_SOCKET INVALID_SOCKET +#define AXIS2_INADDR_NONE INADDR_NONE +#define axis2_unsigned_short_t u_short +#define AXIS2_CLOSE_SOCKET(sock) closesocket(sock) +#define AXIS2_CLOSE_SOCKET_ON_EXIT(sock) +#define axis2_socket_len_t int +#define AXIS2_SHUT_WR SD_SEND + + /** + * Platform specific environment variable access method + */ +#define AXIS2_GETENV(_env_var_name) getenv(_env_var_name) + + /** + * minizip functions + */ +#define axis2_fill_win32_filefunc(ffunc) fill_win32_filefunc(ffunc) +#define AXIS2_UNZOPEN2(zipfilename,ffunc) unzOpen2(zipfilename,NULL) + + /** + * handling variable number of arguments (for log.c) + */ + + /** getopt function */ +#define AXIS2_GETOPT axis2_getopt + + /** string functions */ +#define AXIS2_VSNPRINTF _vsnprintf + +#define AXIS2_SNPRINTF _snprintf + +#define axis2_gmtime_r axis2_win_gmtime + + /** @} */ +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_WINDOWS_H */ diff --git a/util/src/Makefile.am b/util/src/Makefile.am new file mode 100644 index 0000000..5b1ab14 --- /dev/null +++ b/util/src/Makefile.am @@ -0,0 +1,51 @@ +SUBDIRS = platforms/unix @ZLIBBUILD@ +lib_LTLIBRARIES = libaxutil.la +libaxutil_la_SOURCES = hash.c \ + allocator.c \ + env.c \ + error.c \ + stream.c \ + log.c \ + string.c \ + string_util.c \ + qname.c \ + array_list.c \ + linked_list.c \ + utils.c \ + dir_handler.c \ + file_handler.c \ + class_loader.c\ + network_handler.c \ + file.c\ + uuid_gen.c\ + thread_pool.c \ + property.c \ + types.c \ + param.c \ + param_container.c \ + dll_desc.c\ + url.c\ + stack.c \ + generic_obj.c \ + base64.c \ + uri.c \ + date_time.c \ + base64_binary.c \ + properties.c \ + rand.c \ + date_time_util.c \ + version.c \ + duration.c \ + md5.c \ + http_chunked_stream.c \ + digest_calc.c + +libaxutil_la_LIBADD = $(top_builddir)/src/platforms/unix/libaxis2_unix.la \ + -lpthread \ + @ZLIBLIBS@ + +libaxutil_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include + +EXTRA_DIST=platforms/windows string_util.c diff --git a/util/src/allocator.c b/util/src/allocator.c new file mode 100644 index 0000000..1b31048 --- /dev/null +++ b/util/src/allocator.c @@ -0,0 +1,151 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +void *AXIS2_CALL axutil_allocator_malloc_impl( + axutil_allocator_t * allocator, + size_t size); + +void *AXIS2_CALL axutil_allocator_realloc_impl( + axutil_allocator_t * allocator, + void *ptr, + size_t size); + +void AXIS2_CALL axutil_allocator_free_impl( + axutil_allocator_t * allocator, + void *ptr); + +AXIS2_EXTERN axutil_allocator_t *AXIS2_CALL +axutil_allocator_init( + axutil_allocator_t * allocator) +{ + if(allocator) + return allocator; + + else + { + allocator = (axutil_allocator_t *)malloc(sizeof(axutil_allocator_t)); + memset(allocator, 0, sizeof(axutil_allocator_t)); + if(allocator) + { + allocator->malloc_fn = axutil_allocator_malloc_impl; + allocator->realloc = axutil_allocator_realloc_impl; + allocator->free_fn = axutil_allocator_free_impl; + allocator->global_pool_ref = 0; + + return allocator; + } + } + return NULL; +} + +AXIS2_EXTERN axutil_allocator_t *AXIS2_CALL +axutil_allocator_clone( + axutil_allocator_t * allocator) +{ + if(!allocator) + return NULL; + + else + { + axutil_allocator_t* clone = NULL; + clone = (axutil_allocator_t *)malloc(sizeof(axutil_allocator_t)); + memset(clone, 0, sizeof(axutil_allocator_t)); + if(clone) + { + clone->malloc_fn = allocator->malloc_fn; + clone->realloc = allocator->realloc; + clone->free_fn = allocator->free_fn; + clone->current_pool = allocator->current_pool; + clone->global_pool = allocator->global_pool; + clone->local_pool = allocator->local_pool; + clone->global_pool_ref = 0; + + return clone; + } + } + return NULL; +} +AXIS2_EXTERN void AXIS2_CALL +axutil_allocator_free( + axutil_allocator_t * allocator) +{ + if(allocator) + { + allocator->free_fn(allocator, allocator); + } + return; +} + +void *AXIS2_CALL +axutil_allocator_malloc_impl( + axutil_allocator_t * allocator, + size_t size) +{ + return malloc(size); +} + +void *AXIS2_CALL +axutil_allocator_realloc_impl( + axutil_allocator_t * allocator, + void *ptr, + size_t size) +{ + return realloc(ptr, size); +} + +void AXIS2_CALL +axutil_allocator_free_impl( + axutil_allocator_t * allocator, + void *ptr) +{ + free(ptr); +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_allocator_switch_to_global_pool( + axutil_allocator_t * allocator) +{ + if(!allocator) + return; + allocator->global_pool_ref++; + allocator->current_pool = allocator->global_pool; + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_allocator_switch_to_local_pool( + axutil_allocator_t * allocator) +{ + if(!allocator) + return; + if(allocator->global_pool_ref > 0) + { + allocator->global_pool_ref--; + } + + if(allocator->global_pool_ref == 0) + { + allocator->current_pool = allocator->local_pool; + } + return; +} + diff --git a/util/src/array_list.c b/util/src/array_list.c new file mode 100644 index 0000000..a40ecf9 --- /dev/null +++ b/util/src/array_list.c @@ -0,0 +1,304 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axutil_array_list +{ + + /**The number of elements in this list. */ + int size; + + /**Current capacity of this list. */ + int capacity; + + /** Where the data is stored. */ + void **data; +}; + +AXIS2_EXTERN struct axutil_array_list *AXIS2_CALL +axutil_array_list_create( + const axutil_env_t * env, + int capacity) +{ + axutil_array_list_t *array_list = NULL; + + array_list = AXIS2_MALLOC(env->allocator, sizeof(axutil_array_list_t)); + if(!array_list) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + array_list->size = 0; + array_list->capacity = 0; + array_list->data = NULL; + + /* Check capacity, and set the default if error */ + if(capacity <= 0) + capacity = AXIS2_ARRAY_LIST_DEFAULT_CAPACITY; + array_list->data = AXIS2_MALLOC(env->allocator, sizeof(void *) * capacity); + if(!array_list->data) + { + axutil_array_list_free(array_list, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + array_list->capacity = capacity; + + return array_list; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_array_list_ensure_capacity( + struct axutil_array_list * array_list, + const axutil_env_t * env, + int min_capacity) +{ + AXIS2_PARAM_CHECK(env->error, array_list, AXIS2_FAILURE); + if(min_capacity > array_list->capacity) + { + int new_capacity = (array_list->capacity * 2 > min_capacity) ? (array_list->capacity * 2) + : min_capacity; + void **data = (void **)AXIS2_MALLOC(env->allocator, sizeof(void *) * new_capacity); + if(!data) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return AXIS2_FAILURE; + } + memcpy(data, array_list->data, sizeof(void *) * array_list->capacity); + + AXIS2_FREE(env->allocator, array_list->data); + + array_list->data = data; + array_list->capacity = new_capacity; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_array_list_size( + struct axutil_array_list *array_list, + const axutil_env_t * env) +{ + /* Don't use AXIS2_PARAM_CHECK to verify array_list, as it clobbers + env->error->status_code on no error destroying the information + therein that an error has already occurred. */ + if(!array_list) + return 0; + return array_list->size; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_array_list_is_empty( + struct axutil_array_list * array_list, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK(env->error, array_list, AXIS2_FAILURE); + return array_list->size == 0; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_array_list_contains( + struct axutil_array_list * array_list, + const axutil_env_t * env, + void *e) +{ + AXIS2_PARAM_CHECK(env->error, array_list, AXIS2_FAILURE); + return axutil_array_list_index_of(array_list, env, e) != -1; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_array_list_index_of( + struct axutil_array_list *array_list, + const axutil_env_t * env, + void *e) +{ + int i = 0; + + AXIS2_PARAM_CHECK(env->error, array_list, AXIS2_FAILURE); + for(i = 0; i < array_list->size; i++) + if(e == array_list->data[i]) + return i; + return -1; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_array_list_get( + struct axutil_array_list *array_list, + const axutil_env_t * env, + int index) +{ + /* Don't use AXIS2_PARAM_CHECK to verify array_list, as it clobbers + env->error->status_code on no error destroying the information + therein that an error has already occurred. */ + if(axutil_array_list_check_bound_exclusive(array_list, env, index)) + return array_list->data[index]; + else + return NULL; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_array_list_set( + struct axutil_array_list *array_list, + const axutil_env_t * env, + int index, + void *e) +{ + void *result = NULL; + + AXIS2_PARAM_CHECK(env->error, array_list, NULL); + if(axutil_array_list_check_bound_exclusive(array_list, env, index)) + { + result = array_list->data[index]; + array_list->data[index] = e; + } + return result; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_array_list_add( + struct axutil_array_list * array_list, + const axutil_env_t * env, + const void *e) +{ + AXIS2_PARAM_CHECK(env->error, array_list, AXIS2_FAILURE); + if(array_list->size == array_list->capacity) + if(axutil_array_list_ensure_capacity(array_list, env, array_list->size + 1) + != AXIS2_SUCCESS) + return AXIS2_FAILURE; + array_list->data[array_list->size++] = (void *)e; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_array_list_add_at( + struct axutil_array_list * array_list, + const axutil_env_t * env, + const int index, + const void *e) +{ + int i = 0; + AXIS2_PARAM_CHECK(env->error, array_list, AXIS2_FAILURE); + + if(!axutil_array_list_check_bound_inclusive(array_list, env, index)) + return AXIS2_FAILURE; + if(array_list->size == array_list->capacity) + { + if(axutil_array_list_ensure_capacity(array_list, env, array_list->size + 1) + != AXIS2_SUCCESS) + return AXIS2_FAILURE; + } + if(index != array_list->size) + { + for(i = array_list->size; i > index; i--) + array_list->data[i] = array_list->data[i - 1]; + } + array_list->data[index] = (void *)e; + array_list->size++; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_array_list_remove( + struct axutil_array_list *array_list, + const axutil_env_t * env, + int index) +{ + void *result = NULL; + int i = 0; + AXIS2_PARAM_CHECK(env->error, array_list, NULL); + + if(axutil_array_list_check_bound_exclusive(array_list, env, index)) + { + result = array_list->data[index]; + for(i = index; i < array_list->size - 1; i++) + array_list->data[i] = array_list->data[i + 1]; + array_list->size--; + } + + return result; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_array_list_check_bound_inclusive( + struct axutil_array_list * array_list, + const axutil_env_t * env, + int index) +{ + /* Don't use AXIS2_PARAM_CHECK to verify array_list, as it clobbers + env->error->status_code on no error destroying the information + therein that an error has already occurred. */ + if(!array_list || index < 0 || index > array_list->size) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INDEX_OUT_OF_BOUNDS, AXIS2_FAILURE); + return AXIS2_FALSE; + } + return AXIS2_TRUE; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_array_list_check_bound_exclusive( + struct axutil_array_list * array_list, + const axutil_env_t * env, + int index) +{ + /* Don't use AXIS2_PARAM_CHECK to verify array_list, as it clobbers + env->error->status_code on no error destroying the information + therein that an error has already occurred. */ + if(!array_list || index < 0 || index >= array_list->size) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INDEX_OUT_OF_BOUNDS, AXIS2_FAILURE); + return AXIS2_FALSE; + } + return AXIS2_TRUE; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_array_list_free( + struct axutil_array_list *array_list, + const axutil_env_t * env) +{ + AXIS2_PARAM_CHECK_VOID(env->error, array_list); + + if(array_list->data) + { + AXIS2_FREE(env->allocator, array_list->data); + } + AXIS2_FREE(env->allocator, array_list); + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_array_list_free_void_arg( + void *array_list, + const axutil_env_t * env) +{ + axutil_array_list_t *array_list_l = NULL; + + AXIS2_PARAM_CHECK_VOID(env->error, array_list); + + array_list_l = (axutil_array_list_t *)array_list; + axutil_array_list_free(array_list_l, env); + return; +} + diff --git a/util/src/base64.c b/util/src/base64.c new file mode 100644 index 0000000..0789169 --- /dev/null +++ b/util/src/base64.c @@ -0,0 +1,284 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* base64 encoder/decoder. Originally part of main/util.c + * but moved here so that support/ab and axis2_sha1.c could + * use it. This meant removing the axis2_palloc()s and adding + * ugly 'len' functions, which is quite a nasty cost. + */ + +#include + +static const unsigned char pr2six[256] = { +#ifndef __OS400__ + /* ASCII table */ + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, 64, 64, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64, 64, 64, 64, + 64, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 64, 64, 64, 64, 64, + 64, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64 +#else /* __OS400__ */ + /* EBCDIC table */ + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 26, 27, 28, 29, 30, 31, 32, 33, 34, 64, 64, 64, 64, 64, 64, + 64, 35, 36, 37, 38, 39, 40, 41, 42, 43, 64, 64, 64, 64, 64, 64, + 64, 64, 44, 45, 46, 47, 48, 49, 50, 51, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 0, 1, 2, 3, 4, 5, 6, 7, 8, 64, 64, 64, 64, 64, 64, + 64, 9, 10, 11, 12, 13, 14, 15, 16, 17, 64, 64, 64, 64, 64, 64, + 64, 64, 18, 19, 20, 21, 22, 23, 24, 25, 64, 64, 64, 64, 64, 64, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64, 64, 64, 64 +#endif /* AXIS2_CHARSET_EBCDIC */ +}; + +#ifdef __OS400__ + +static unsigned char os_toascii[256] = { + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ + 0, 1, 2, 3, 156, 9, 134, 127, 151, 141, 142, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 157, 133, 8, 135, 24, 25, 146, 143, 28, 29, 30, 31, + 128, 129, 130, 131, 132, 10, 23, 27, 136, 137, 138, 139, 140, 5, 6, 7, + 144, 145, 22, 147, 148, 149, 150, 4, 152, 153, 154, 155, 20, 21, 158, 26, + 32, 160, 226, 228, 224, 225, 227, 229, 231, 241, 162, 46, 60, 40, 43, 124, + 38, 233, 234, 235, 232, 237, 238, 239, 236, 223, 33, 36, 42, 41, 59, 172, + 45, 47, 194, 196, 192, 193, 195, 197, 199, 209, 166, 44, 37, 95, 62, 63, + 248, 201, 202, 203, 200, 205, 206, 207, 204, 96, 58, 35, 64, 39, 61, 34, + 216, 97, 98, 99, 100, 101, 102, 103, 104, 105, 171, 187, 240, 253, 254, 177, + 176, 106, 107, 108, 109, 110, 111, 112, 113, 114, 170, 186, 230, 184, 198, + 164, + 181, 126, 115, 116, 117, 118, 119, 120, 121, 122, 161, 191, 208, 221, 222, + 174, + 94, 163, 165, 183, 169, 167, 182, 188, 189, 190, 91, 93, 175, 168, 180, 215, + 123, 65, 66, 67, 68, 69, 70, 71, 72, 73, 173, 244, 246, 242, 243, 245, + 125, 74, 75, 76, 77, 78, 79, 80, 81, 82, 185, 251, 252, 249, 250, 255, + 92, 247, 83, 84, 85, 86, 87, 88, 89, 90, 178, 212, 214, 210, 211, 213, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 179, 219, 220, 217, 218, 159 +}; + +#endif /* __OS400__ */ + +AXIS2_EXTERN int AXIS2_CALL +axutil_base64_decode_len( + const char *bufcoded) +{ + int nbytesdecoded; + register const unsigned char *bufin; + register int nprbytes; + + if(!bufcoded) + { + return -1; + } + + bufin = (const unsigned char *)bufcoded; + while(pr2six[*(bufin++)] <= 63) + ; + + nprbytes = (int)(bufin - (const unsigned char *)bufcoded) - 1; + /* We are sure that the difference lies within the int range */ + + nbytesdecoded = ((nprbytes >> 2) * 3); + + if(nprbytes & 0x03) + nbytesdecoded += (nprbytes & 0x03) - 1; + + return nbytesdecoded; + +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_base64_decode( + char *bufplain, + const char *bufcoded) +{ + int len; + len = axutil_base64_decode_binary((unsigned char *)bufplain, bufcoded); + bufplain[len] = '\0'; + return len; +} + +/* This is the same as axutil_base64_decode() except on EBCDIC machines, where + * the conversion of the output to ebcdic is left out. + */ + +AXIS2_EXTERN int AXIS2_CALL +axutil_base64_decode_binary( + unsigned char *bufplain, + const char *bufcoded) +{ + int nbytesdecoded; + register const unsigned char *bufin; + register unsigned char *bufout; + register int nprbytes; + + if(!bufcoded) + { + return -1; + } + + bufin = (const unsigned char *)bufcoded; + while(pr2six[*(bufin++)] <= 63) + ; + nprbytes = (int)(bufin - (const unsigned char *)bufcoded) - 1; + /* We are sure that the difference lies within the int range */ + nbytesdecoded = ((nprbytes + 3) / 4) * 3; + + bufout = (unsigned char *)bufplain; + bufin = (const unsigned char *)bufcoded; + + while(nprbytes > 4) + { + *(bufout++) = (unsigned char)(pr2six[*bufin] << 2 | pr2six[bufin[1]] >> 4); + *(bufout++) = (unsigned char)(pr2six[bufin[1]] << 4 | pr2six[bufin[2]] >> 2); + *(bufout++) = (unsigned char)(pr2six[bufin[2]] << 6 | pr2six[bufin[3]]); + bufin += 4; + nprbytes -= 4; + } + + /* Note: (nprbytes == 1) would be an error, so just ingore that case */ + if(nprbytes > 1) + { + *(bufout++) = (unsigned char)(pr2six[*bufin] << 2 | pr2six[bufin[1]] >> 4); + } + if(nprbytes > 2) + { + *(bufout++) = (unsigned char)(pr2six[bufin[1]] << 4 | pr2six[bufin[2]] >> 2); + } + if(nprbytes > 3) + { + *(bufout++) = (unsigned char)(pr2six[bufin[2]] << 6 | pr2six[bufin[3]]); + } + + nbytesdecoded -= (4 - nprbytes) & 3; + return nbytesdecoded; +} + +static const char basis_64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +AXIS2_EXTERN int AXIS2_CALL +axutil_base64_encode_len( + int len) +{ + return ((len + 2) / 3 * 4) + 1; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_base64_encode( + char *encoded, + const char *string, + int len) +{ +#ifndef __OS400__ + return axutil_base64_encode_binary(encoded, (const unsigned char *)string, len); +#else /* __OS400__ */ + int i; + char *p; + + p = encoded; + for (i = 0; i < len - 2; i += 3) + { + *p++ = basis_64[(os_toascii[string[i]] >> 2) & 0x3F]; + *p++ = + basis_64[((os_toascii[string[i]] & 0x3) << 4) | + ((int) (os_toascii[string[i + 1]] & 0xF0) >> 4)]; + *p++ = + basis_64[((os_toascii[string[i + 1]] & 0xF) << 2) | + ((int) (os_toascii[string[i + 2]] & 0xC0) >> 6)]; + *p++ = basis_64[os_toascii[string[i + 2]] & 0x3F]; + } + if (i < len) + { + *p++ = basis_64[(os_toascii[string[i]] >> 2) & 0x3F]; + if (i == (len - 1)) + { + *p++ = basis_64[((os_toascii[string[i]] & 0x3) << 4)]; + *p++ = '='; + } + else + { + *p++ = + basis_64[((os_toascii[string[i]] & 0x3) << 4) | + ((int) (os_toascii[string[i + 1]] & 0xF0) >> 4)]; + *p++ = basis_64[((os_toascii[string[i + 1]] & 0xF) << 2)]; + } + *p++ = '='; + } + + *p++ = '\0'; + return p - encoded; +#endif /* __OS400__ */ +} + +/* This is the same as axutil_base64_encode() except on EBCDIC machines, where + * the conversion of the input to ascii is left out. + */ +AXIS2_EXTERN int AXIS2_CALL +axutil_base64_encode_binary( + char *encoded, + const unsigned char *string, + int len) +{ + int i; + char *p; + + p = encoded; + for(i = 0; i < len - 2; i += 3) + { + *p++ = basis_64[(string[i] >> 2) & 0x3F]; + *p++ = basis_64[((string[i] & 0x3) << 4) | ((int)(string[i + 1] & 0xF0) >> 4)]; + *p++ = basis_64[((string[i + 1] & 0xF) << 2) | ((int)(string[i + 2] & 0xC0) >> 6)]; + *p++ = basis_64[string[i + 2] & 0x3F]; + } + if(i < len) + { + *p++ = basis_64[(string[i] >> 2) & 0x3F]; + if(i == (len - 1)) + { + *p++ = basis_64[((string[i] & 0x3) << 4)]; + *p++ = '='; + } + else + { + *p++ = basis_64[((string[i] & 0x3) << 4) | ((int)(string[i + 1] & 0xF0) >> 4)]; + *p++ = basis_64[((string[i + 1] & 0xF) << 2)]; + } + *p++ = '='; + } + + *p++ = '\0'; + return (int)(p - encoded); + /* We are sure that the difference lies within the int range */ +} diff --git a/util/src/base64_binary.c b/util/src/base64_binary.c new file mode 100644 index 0000000..2d3ff87 --- /dev/null +++ b/util/src/base64_binary.c @@ -0,0 +1,258 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axutil_base64_binary +{ + unsigned char *plain_binary; + int plain_binary_len; +}; + +AXIS2_EXTERN axutil_base64_binary_t *AXIS2_CALL +axutil_base64_binary_create( + const axutil_env_t * env) +{ + axutil_base64_binary_t *base64_binary = NULL; + AXIS2_ENV_CHECK(env, NULL); + + base64_binary = (axutil_base64_binary_t *)AXIS2_MALLOC(env->allocator, + sizeof(axutil_base64_binary_t)); + + if(!base64_binary) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + base64_binary->plain_binary = NULL; + base64_binary->plain_binary_len = 0; + return base64_binary; +} + +AXIS2_EXTERN axutil_base64_binary_t *AXIS2_CALL +axutil_base64_binary_create_with_plain_binary( + const axutil_env_t * env, + const unsigned char *plain_binary, + int plain_binary_len) +{ + axutil_base64_binary_t *base64_binary = NULL; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, plain_binary, NULL); + + base64_binary = (axutil_base64_binary_t *)axutil_base64_binary_create(env); + if(!base64_binary) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + base64_binary->plain_binary = AXIS2_MALLOC(env->allocator, sizeof(unsigned char) + * plain_binary_len); + + if(!base64_binary->plain_binary) + { + axutil_base64_binary_free(base64_binary, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + memcpy(base64_binary->plain_binary, plain_binary, plain_binary_len); + base64_binary->plain_binary_len = plain_binary_len; + + return base64_binary; +} + +AXIS2_EXTERN axutil_base64_binary_t *AXIS2_CALL +axutil_base64_binary_create_with_encoded_binary( + const axutil_env_t * env, + const char *encoded_binary) +{ + axutil_base64_binary_t *base64_binary = NULL; + int plain_binary_len = 0; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, encoded_binary, NULL); + + base64_binary = (axutil_base64_binary_t *)axutil_base64_binary_create(env); + if(!base64_binary) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + plain_binary_len = axutil_base64_decode_len(encoded_binary); + base64_binary->plain_binary = AXIS2_MALLOC(env->allocator, sizeof(unsigned char) + * plain_binary_len); + + if(!base64_binary->plain_binary) + { + axutil_base64_binary_free(base64_binary, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + axutil_base64_decode_binary(base64_binary->plain_binary, encoded_binary); + base64_binary->plain_binary_len = plain_binary_len; + + return base64_binary; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_base64_binary_free( + axutil_base64_binary_t *base64_binary, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(!base64_binary) + { + return; + } + + if(base64_binary->plain_binary) + { + AXIS2_FREE(env->allocator, base64_binary->plain_binary); + } + + if(base64_binary) + { + AXIS2_FREE(env->allocator, base64_binary); + } + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_base64_binary_set_plain_binary( + axutil_base64_binary_t *base64_binary, + const axutil_env_t *env, + const unsigned char *plain_binary, + int plain_binary_len) +{ + + AXIS2_PARAM_CHECK(env->error, plain_binary, AXIS2_FAILURE); + + base64_binary->plain_binary = AXIS2_MALLOC(env->allocator, sizeof(unsigned char) + * plain_binary_len); + if(!base64_binary->plain_binary) + { + axutil_base64_binary_free(base64_binary, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return AXIS2_FAILURE; + } + memcpy(base64_binary->plain_binary, plain_binary, plain_binary_len); + base64_binary->plain_binary_len = plain_binary_len; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN unsigned char *AXIS2_CALL +axutil_base64_binary_get_plain_binary( + axutil_base64_binary_t *base64_binary, + const axutil_env_t *env, + int *plain_binary_len) +{ + AXIS2_PARAM_CHECK(env->error, base64_binary, NULL); + *plain_binary_len = base64_binary->plain_binary_len; + return base64_binary->plain_binary; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_base64_binary_set_encoded_binary( + axutil_base64_binary_t *base64_binary, + const axutil_env_t *env, + const char *encoded_binary) +{ + int plain_binary_len = 0; + + AXIS2_PARAM_CHECK(env->error, base64_binary, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, encoded_binary, AXIS2_FAILURE); + + plain_binary_len = axutil_base64_decode_len(encoded_binary); + base64_binary->plain_binary = AXIS2_MALLOC(env->allocator, sizeof(unsigned char) + * plain_binary_len); + + if(!base64_binary->plain_binary) + { + axutil_base64_binary_free(base64_binary, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return AXIS2_FAILURE; + } + axutil_base64_decode_binary(base64_binary->plain_binary, encoded_binary); + base64_binary->plain_binary_len = plain_binary_len; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN char *AXIS2_CALL +axutil_base64_binary_get_encoded_binary( + axutil_base64_binary_t *base64_binary, + const axutil_env_t *env) +{ + char *encoded_binary = NULL; + int encoded_binary_len = 0; + AXIS2_PARAM_CHECK(env->error, base64_binary, NULL); + + encoded_binary_len = axutil_base64_encode_len(base64_binary->plain_binary_len); + encoded_binary = AXIS2_MALLOC(env->allocator, sizeof(char) * encoded_binary_len); + + if(!encoded_binary) + { + axutil_base64_binary_free(base64_binary, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + axutil_base64_encode_binary(encoded_binary, base64_binary->plain_binary, + base64_binary->plain_binary_len); + return encoded_binary; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_base64_binary_get_encoded_binary_len( + axutil_base64_binary_t *base64_binary, + const axutil_env_t *env) +{ + int encoded_binary_len = 0; + if(!base64_binary) + { + return 0; + } + + encoded_binary_len = axutil_base64_encode_len(base64_binary->plain_binary_len); + return encoded_binary_len; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_base64_binary_get_decoded_binary_len( + axutil_base64_binary_t *base64_binary, + const axutil_env_t *env) +{ + if(!base64_binary) + { + return 0; + } + return base64_binary->plain_binary_len; +} diff --git a/util/src/class_loader.c b/util/src/class_loader.c new file mode 100644 index 0000000..ea3be7d --- /dev/null +++ b/util/src/class_loader.c @@ -0,0 +1,189 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +axis2_status_t +axutil_class_loader_load_lib( + const axutil_env_t *env, + axutil_dll_desc_t *dll_desc); + +axis2_status_t +axutil_class_loader_unload_lib( + const axutil_env_t *env, + axutil_dll_desc_t *dll_desc); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_class_loader_init( + const axutil_env_t *env) +{ + AXIS2_PLATFORM_LOADLIBINIT(); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_class_loader_delete_dll( + const axutil_env_t *env, + axutil_dll_desc_t *dll_desc) +{ + if(!dll_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_DLL_CREATE_FAILED, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + axutil_class_loader_unload_lib(env, dll_desc); + AXIS2_PLATFORM_LOADLIBEXIT(); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_class_loader_create_dll( + const axutil_env_t *env, + axutil_param_t *impl_info_param) +{ + void *obj = NULL; + CREATE_FUNCT create_funct = NULL; + DELETE_FUNCT delete_funct = NULL; + AXIS2_DLHANDLER dl_handler = NULL; + axutil_dll_desc_t *dll_desc = NULL; + axis2_status_t status = AXIS2_FAILURE; + axutil_error_codes_t error_code = AXIS2_ERROR_NONE; + + dll_desc = axutil_param_get_value(impl_info_param, env); + if(!dll_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_DLL_CREATE_FAILED, AXIS2_FAILURE); + return NULL; + } + dl_handler = axutil_dll_desc_get_dl_handler(dll_desc, env); + if(!dl_handler) + { + status = axutil_class_loader_load_lib(env, dll_desc); + if(AXIS2_SUCCESS != status) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_DLL_CREATE_FAILED, AXIS2_FAILURE); + return NULL; + } + dl_handler = axutil_dll_desc_get_dl_handler(dll_desc, env); + if(!dl_handler) + { + return NULL; + } + + create_funct = (CREATE_FUNCT)AXIS2_PLATFORM_GETPROCADDR(dl_handler, AXIS2_CREATE_FUNCTION); + if(!create_funct) + { + return NULL; + } + status = axutil_dll_desc_set_create_funct(dll_desc, env, create_funct); + if(AXIS2_FAILURE == status) + { + axutil_class_loader_unload_lib(env, dll_desc); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_DLL_CREATE_FAILED, AXIS2_FAILURE); + return NULL; + } + + delete_funct = (DELETE_FUNCT)AXIS2_PLATFORM_GETPROCADDR(dl_handler, AXIS2_DELETE_FUNCTION); + if(!delete_funct) + { + return NULL; + } + status = axutil_dll_desc_set_delete_funct(dll_desc, env, delete_funct); + if(AXIS2_FAILURE == status) + { + axutil_class_loader_unload_lib(env, dll_desc); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_DLL_CREATE_FAILED, AXIS2_FAILURE); + return NULL; + } + } + create_funct = axutil_dll_desc_get_create_funct(dll_desc, env); + if(!create_funct) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_DLL_DESC, AXIS2_FAILURE); + return NULL; + } + error_code = axutil_dll_desc_get_error_code(dll_desc, env); + + create_funct(&obj, env); + if(!obj) + { + axutil_class_loader_unload_lib(env, dll_desc); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Object create function returned NULL"); + AXIS2_ERROR_SET(env->error, error_code, AXIS2_FAILURE); + return NULL; + } + else + { + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "%s shared lib loaded successfully", + axutil_dll_desc_get_name(dll_desc, env)); + } + + return obj; +} + +axis2_status_t +axutil_class_loader_load_lib( + const axutil_env_t * env, + axutil_dll_desc_t * dll_desc) +{ + axis2_char_t *dll_name = NULL; + AXIS2_DLHANDLER dl_handler = NULL; + axis2_status_t status = AXIS2_FAILURE; + + dll_name = axutil_dll_desc_get_name(dll_desc, env); + dl_handler = AXIS2_PLATFORM_LOADLIB(dll_name); + if(!dl_handler) + { +#ifndef WIN32 + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Loading shared library %s Failed. DLERROR IS %s", + dll_name, AXIS2_PLATFORM_LOADLIB_ERROR); +#else + axis2_char_t buff[AXUTIL_WIN32_ERROR_BUFSIZE]; + axutil_win32_get_last_error(buff, AXUTIL_WIN32_ERROR_BUFSIZE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Loading shared library %s Failed. DLERROR IS %s", + dll_name, buff); +#endif + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_DLL_LOADING_FAILED, AXIS2_FAILURE); + + return AXIS2_FAILURE; + } + status = axutil_dll_desc_set_dl_handler(dll_desc, env, dl_handler); + + if(AXIS2_SUCCESS != status) + { + AXIS2_PLATFORM_UNLOADLIB(dl_handler); + dl_handler = NULL; + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_DLL_LOADING_FAILED, AXIS2_FAILURE); + return status; + } + + return AXIS2_SUCCESS; +} + +axis2_status_t +axutil_class_loader_unload_lib( + const axutil_env_t * env, + axutil_dll_desc_t * dll_desc) +{ + AXIS2_DLHANDLER dl_handler = axutil_dll_desc_get_dl_handler(dll_desc, env); + if(dl_handler) + { + AXIS2_PLATFORM_UNLOADLIB(dl_handler); + } + + return AXIS2_SUCCESS; +} diff --git a/util/src/date_time.c b/util/src/date_time.c new file mode 100644 index 0000000..ad15774 --- /dev/null +++ b/util/src/date_time.c @@ -0,0 +1,1034 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +struct axutil_date_time +{ + int year; + int mon; + int day; + int hour; + int min; + float sec; + axis2_bool_t tz_pos; + int tz_hour; + int tz_min; +}; + +AXIS2_EXTERN axutil_date_time_t *AXIS2_CALL +axutil_date_time_create_with_offset( + const axutil_env_t *env, + int offset) +{ + axutil_date_time_t *date_time = NULL; + time_t t; + struct tm *utc_time = NULL; + AXIS2_ENV_CHECK(env, NULL); + + date_time = (axutil_date_time_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_date_time_t)); + + if(!date_time) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + t = time(NULL) + offset; + + utc_time = gmtime(&t); + + date_time->year = utc_time->tm_year; + date_time->mon = utc_time->tm_mon; + date_time->day = utc_time->tm_mday; + date_time->hour = utc_time->tm_hour; + date_time->min = utc_time->tm_min; + date_time->sec = (float)utc_time->tm_sec; + date_time->sec += (float)axutil_get_milliseconds(env) / 1000; + date_time->tz_hour = 0; + date_time->tz_min = 0; + date_time->tz_pos = AXIS2_TRUE; + + return date_time; +} + +AXIS2_EXTERN axutil_date_time_t *AXIS2_CALL +axutil_date_time_create( + const axutil_env_t *env) +{ + return axutil_date_time_create_with_offset(env, 0); +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_date_time_free( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(date_time) + { + AXIS2_FREE(env->allocator, date_time); + } + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_date_time_deserialize_time( + axutil_date_time_t *date_time, + const axutil_env_t *env, + const axis2_char_t *time_str) +{ + int hour; + int min; + float sec; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + sscanf(time_str, "%d:%d:%fZ", &hour, &min, &sec); + if(hour < 0 || hour > 23) + { + return AXIS2_FAILURE; + } + if(min < 0 || min > 59) + { + return AXIS2_FAILURE; + } + if(sec < 0 || sec >= 60) + { + return AXIS2_FAILURE; + } + date_time->hour = hour; + date_time->min = min; + date_time->sec = sec; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_date_time_deserialize_time_with_time_zone( + axutil_date_time_t *date_time, + const axutil_env_t *env, + const axis2_char_t *time_str) +{ + int hour; + int min; + float sec; + int tz_hour; + int tz_min; + + axis2_bool_t tz_pos = AXIS2_TRUE; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(strchr(time_str, 'Z')) + { + return AXIS2_FAILURE; + } + else if(!strchr(time_str, '+')) + { + tz_pos = AXIS2_FALSE; + } + + if(tz_pos) + { + sscanf(time_str, "%d:%d:%f+%d:%d", &hour, &min, &sec, &tz_hour, &tz_min); + } + else + { + sscanf(time_str, "%d:%d:%f-%d:%d", &hour, &min, &sec, &tz_hour, &tz_min); + } + if(hour < 0 || hour > 23) + { + return AXIS2_FAILURE; + } + if(min < 0 || min > 59) + { + return AXIS2_FAILURE; + } + if(sec < 0 || sec >= 60) + { + return AXIS2_FAILURE; + } + if(tz_hour < 0 || tz_hour > 14) + { + return AXIS2_FAILURE; + } + if(tz_min < 0 || tz_min > 59) + { + return AXIS2_FAILURE; + } + if(tz_hour == 14 && tz_min != 0) + { + return AXIS2_FAILURE; + } + date_time->hour = hour; + date_time->min = min; + date_time->sec = sec; + date_time->tz_pos = tz_pos; + date_time->tz_hour = tz_hour; + date_time->tz_min = tz_min; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_date_time_deserialize_date( + axutil_date_time_t *date_time, + const axutil_env_t *env, + const axis2_char_t *date_str) +{ + int year; + int mon; + int day; + int is_year_neg = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(!date_str || *date_str == '+') + { + return AXIS2_FAILURE; + } + if(strchr(date_str,'T')) + { + return AXIS2_FAILURE; + } + if(*date_str == '-') + { + is_year_neg++; + } + sscanf(date_str + is_year_neg, "%d-%d-%d", &year, &mon, &day); + if(is_year_neg) + { + year *= -1; + } + if(mon < 1 || mon > 12) + { + return AXIS2_FAILURE; + } + if(day < 1 || day > 31) + { + return AXIS2_FAILURE; + } + if(day == 31 && (mon == 2 || mon == 4 || mon == 6 || mon == 9 || mon == 11)) + { + return AXIS2_FAILURE; + } + if(day == 30 && mon == 2) + { + return AXIS2_FAILURE; + } + if(day == 29 && mon == 2) + { + if(year % 4 != 0 || year % 400 == 0) + { + return AXIS2_FAILURE; + } + } + date_time->year = year - 1900; + date_time->mon = mon - 1; + date_time->day = day; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_date_time_deserialize_date_time( + axutil_date_time_t *date_time, + const axutil_env_t *env, + const axis2_char_t *date_time_str) +{ + int year; + int mon; + int day; + int hour; + int min; + float sec; + int is_year_neg = 0; + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(!date_time_str || *date_time_str == '+') + { + return AXIS2_FAILURE; + } + if(*date_time_str == '-') + { + is_year_neg++; + } + sscanf(date_time_str + is_year_neg, "%d-%d-%dT%d:%d:%fZ", &year, &mon, &day, &hour, &min, &sec); + + if(is_year_neg) + { + year *= -1; + } + if(mon < 1 || mon > 12) + { + return AXIS2_FAILURE; + } + if(day < 1 || day > 31) + { + return AXIS2_FAILURE; + } + if(day == 31 && (mon == 2 || mon == 4 || mon == 6 || mon == 9 || mon == 11)) + { + return AXIS2_FAILURE; + } + if(day == 30 && mon == 2) + { + return AXIS2_FAILURE; + } + if(day == 29 && mon == 2) + { + if(year % 4 != 0 || year % 400 == 0) + { + return AXIS2_FAILURE; + } + } + if(hour < 0 || hour > 23) + { + return AXIS2_FAILURE; + } + if(min < 0 || min > 59) + { + return AXIS2_FAILURE; + } + if(sec < 0 || sec >= 60) + { + return AXIS2_FAILURE; + } + date_time->year = year - 1900; + date_time->mon = mon - 1; + date_time->day = day; + date_time->hour = hour; + date_time->min = min; + date_time->sec = sec; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_date_time_deserialize_date_time_with_time_zone( + axutil_date_time_t *date_time, + const axutil_env_t *env, + const axis2_char_t *date_time_str) +{ + int year; + int mon; + int day; + int hour; + int min; + float sec; + int tz_hour; + int tz_min; + int is_year_neg = 0; + axis2_bool_t tz_pos = AXIS2_FALSE; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(!date_time_str || *date_time_str == '+') + { + return AXIS2_FAILURE; + } + if(*date_time_str == '-') + { + is_year_neg++; + } + + if(strchr(date_time_str, 'Z')) + { + return AXIS2_FAILURE; + } + else if(strchr(date_time_str, '+')) + { + tz_pos = AXIS2_TRUE; + } + + if(tz_pos) + { + sscanf(date_time_str + is_year_neg, "%d-%d-%dT%d:%d:%f+%d:%d", &year, &mon, &day, &hour, + &min, &sec, &tz_hour, &tz_min); + } + else + { + sscanf(date_time_str + is_year_neg, "%d-%d-%dT%d:%d:%f-%d:%d", &year, &mon, &day, &hour, + &min, &sec, &tz_hour, &tz_min); + } + + if(is_year_neg) + { + year *= -1; + } + if(mon < 1 || mon > 12) + { + return AXIS2_FAILURE; + } + if(day < 1 || day > 31) + { + return AXIS2_FAILURE; + } + if(day == 31 && (mon == 2 || mon == 4 || mon == 6 || mon == 9 || mon == 11)) + { + return AXIS2_FAILURE; + } + if(day == 30 && mon == 2) + { + return AXIS2_FAILURE; + } + if(day == 29 && mon == 2) + { + if(year % 4 != 0 || year % 400 == 0) + { + return AXIS2_FAILURE; + } + } + if(hour < 0 || hour > 23) + { + return AXIS2_FAILURE; + } + if(min < 0 || min > 59) + { + return AXIS2_FAILURE; + } + if(sec < 0 || sec >= 60) + { + return AXIS2_FAILURE; + } + if(tz_hour < 0 || tz_hour > 14) + { + return AXIS2_FAILURE; + } + if(tz_min < 0 || tz_min > 59) + { + return AXIS2_FAILURE; + } + if(tz_hour == 14 && tz_min != 0) + { + return AXIS2_FAILURE; + } + date_time->year = year - 1900; + date_time->mon = mon - 1; + date_time->day = day; + date_time->hour = hour; + date_time->min = min; + date_time->sec = sec; + date_time->tz_pos = tz_pos; + date_time->tz_hour = tz_hour; + date_time->tz_min = tz_min; + return AXIS2_SUCCESS; +} + +/*Check if the @data_time is not expired, compared to @ref*/ +AXIS2_EXTERN axutil_date_time_comp_result_t AXIS2_CALL +axutil_date_time_compare( + axutil_date_time_t *date_time, + const axutil_env_t *env, + axutil_date_time_t *ref) +{ + int dt_min; + int ref_min; + int dt_hour; + int ref_hour; + AXIS2_ENV_CHECK(env, AXIS2_DATE_TIME_COMP_RES_FAILURE); + + if(date_time->year < ref->year) + { + return AXIS2_DATE_TIME_COMP_RES_NOT_EXPIRED; + } + else if(date_time->year > ref->year) + { + return AXIS2_DATE_TIME_COMP_RES_EXPIRED; + } + + if(date_time->mon < ref->mon) + { + return AXIS2_DATE_TIME_COMP_RES_NOT_EXPIRED; + } + else if(date_time->mon > ref->mon) + { + return AXIS2_DATE_TIME_COMP_RES_EXPIRED; + } + + if(date_time->day < ref->day) + { + return AXIS2_DATE_TIME_COMP_RES_NOT_EXPIRED; + } + else if(date_time->day > ref->day) + { + return AXIS2_DATE_TIME_COMP_RES_EXPIRED; + } + + dt_min = date_time->tz_min; + dt_hour = date_time->tz_hour; + ref_min = ref->tz_min; + ref_hour = ref->tz_hour; + if(date_time->tz_pos) + { + dt_min *= -1; + dt_hour *= -1; + } + if(ref->tz_pos) + { + ref_min *= -1; + ref_hour *= -1; + } + + dt_min += date_time->min; + dt_hour += date_time->hour; + ref_min += ref->min; + ref_hour += ref->hour; + + if(dt_hour < ref_hour) + { + return AXIS2_DATE_TIME_COMP_RES_NOT_EXPIRED; + } + else if(dt_hour > ref_hour) + { + return AXIS2_DATE_TIME_COMP_RES_EXPIRED; + } + + if(dt_min < ref_min) + { + return AXIS2_DATE_TIME_COMP_RES_NOT_EXPIRED; + } + else if(dt_min > ref_min) + { + return AXIS2_DATE_TIME_COMP_RES_EXPIRED; + } + + if(date_time->sec < ref->sec) + { + return AXIS2_DATE_TIME_COMP_RES_NOT_EXPIRED; + } + else if(date_time->sec > ref->sec) + { + return AXIS2_DATE_TIME_COMP_RES_EXPIRED; + } + + return AXIS2_DATE_TIME_COMP_RES_EQUAL; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_date_time_set_time_zone( + axutil_date_time_t *date_time, + const axutil_env_t *env, + axis2_bool_t is_positive, + int hour, + int min) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(hour < 0 || hour > 14) + { + return AXIS2_FAILURE; + } + if(min < 0 || min > 59) + { + return AXIS2_FAILURE; + } + if(hour == 14 && min != 0) + { + return AXIS2_FAILURE; + } + date_time->tz_pos = is_positive; + date_time->tz_hour = hour; + date_time->tz_min = min; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_date_time_set_date_time( + axutil_date_time_t *date_time, + const axutil_env_t *env, + int year, + int mon, + int day, + int hour, + int min, + int sec, + int msec) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(mon < 1 || mon > 12) + { + return AXIS2_FAILURE; + } + if(day < 1 || day > 31) + { + return AXIS2_FAILURE; + } + if(day == 31 && (mon == 2 || mon == 4 || mon == 6 || mon == 9 || mon == 11)) + { + return AXIS2_FAILURE; + } + if(day == 30 && mon == 2) + { + return AXIS2_FAILURE; + } + if(day == 29 && mon == 2) + { + if(year % 4 != 0 || year % 400 == 0) + { + return AXIS2_FAILURE; + } + } + if(hour < 0 || hour > 23) + { + return AXIS2_FAILURE; + } + if(min < 0 || min > 59) + { + return AXIS2_FAILURE; + } + if(sec < 0 || sec > 59) + { + return AXIS2_FAILURE; + } + if(msec < 0 || msec > 999) + { + return AXIS2_FAILURE; + } + + date_time->year = year - 1900; + date_time->mon = mon - 1; + date_time->day = day; + date_time->hour = hour; + date_time->min = min; + date_time->sec = (float)sec; + date_time->sec += (float)msec / 1000; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_date_time_serialize_time( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + axis2_char_t *time_str = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + time_str = (axis2_char_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * 32); + sprintf(time_str, "%02d:%02d:%06.3fZ", date_time->hour, date_time->min, date_time->sec); + return time_str; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_date_time_serialize_time_with_time_zone( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + axis2_char_t *time_str = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + if(!date_time->tz_hour && !date_time->tz_min) + { + return axutil_date_time_serialize_time(date_time, env); + } + + time_str = (axis2_char_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * 37); + sprintf(time_str, "%02d:%02d:%06.3f%c%02d:%02d", date_time->hour, date_time->min, + date_time->sec, date_time->tz_pos ? '+' : '-', date_time->tz_hour, date_time->tz_min); + return time_str; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_date_time_serialize_date( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + axis2_char_t *date_str = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + date_str = (axis2_char_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * 32); + + sprintf(date_str, "%d-%02d-%02d", date_time->year + 1900, date_time->mon + 1, date_time->day); + return date_str; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_date_time_serialize_date_time( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + axis2_char_t *date_time_str = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + date_time_str = AXIS2_MALLOC(env->allocator, sizeof(char) * 32); + sprintf(date_time_str, "%d-%02d-%02dT%02d:%02d:%06.3fZ", date_time->year + 1900, date_time->mon + + 1, date_time->day, date_time->hour, date_time->min, date_time->sec); + return date_time_str; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_date_time_serialize_date_time_without_millisecond( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + axis2_char_t *date_time_str = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + date_time_str = AXIS2_MALLOC(env->allocator, sizeof(char) * 32); + sprintf(date_time_str, "%d-%02d-%02dT%02d:%02d:%02.0fZ", date_time->year + 1900, date_time->mon + + 1, date_time->day, date_time->hour, date_time->min, date_time->sec); + return date_time_str; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_date_time_serialize_date_time_with_time_zone( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + axis2_char_t *date_time_str = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + if(!date_time->tz_hour && !date_time->tz_min) + { + return axutil_date_time_serialize_date_time(date_time, env); + } + + date_time_str = AXIS2_MALLOC(env->allocator, sizeof(char) * 37); + sprintf(date_time_str, "%d-%02d-%02dT%02d:%02d:%06.3f%c%02d:%02d", date_time->year + 1900, + date_time->mon + 1, date_time->day, date_time->hour, date_time->min, date_time->sec, + date_time->tz_pos ? '+' : '-', date_time->tz_hour, date_time->tz_min); + return date_time_str; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_date_time_get_year( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + return (date_time->year + 1900); +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_date_time_get_month( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + return (date_time->mon + 1); +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_date_time_get_date( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + return (date_time->day); +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_date_time_get_hour( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + return (date_time->hour); +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_date_time_get_minute( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + return (date_time->min); +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_date_time_get_second( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + return (int)(date_time->sec); +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_date_time_get_msec( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + /* Precision is 1/100 of a millisecond */ + float ret = (float)((date_time->sec - (float)((int)date_time->sec)) * 1000.0); + return (int)((ret * 100.0 + 0.5) / 100.0); +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_date_time_get_time_zone_hour( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + return (date_time->tz_hour); +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_date_time_get_time_zone_minute( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + return (date_time->tz_min); +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_date_time_is_time_zone_positive( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + return (date_time->tz_pos); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_date_time_is_utc( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + axis2_bool_t is_utc = AXIS2_TRUE; + if(date_time->tz_hour || date_time->tz_min) + { + is_utc = AXIS2_FALSE; + } + return is_utc; +} + +AXIS2_EXTERN axutil_date_time_t *AXIS2_CALL +axutil_date_time_local_to_utc( + axutil_date_time_t *date_time, + const axutil_env_t *env) +{ + int year; + int mon; + int day; + int hour; + int min; + float sec; + int tz_hour; + int tz_min; + axis2_bool_t tz_pos = AXIS2_FALSE; + + axutil_date_time_t *ret = NULL; + + year = date_time->year; + mon = date_time->mon; + day = date_time->day; + hour = date_time->hour; + min = date_time->min; + sec = date_time->sec; + tz_pos = date_time->tz_pos; + tz_hour = date_time->tz_hour; + tz_min = date_time->tz_min; + + if(tz_pos) + { + tz_hour *= -1; + tz_min *= -1; + } + hour += tz_hour; + min += tz_min; + + if(min > 59) + { + hour += min / 60; + min %= 60; + } + while(min < 0) + { + hour--; + min += 60; + } + + if(hour > 23) + { + day += hour / 24; + hour %= 24; + } + while(hour < 0) + { + day--; + hour += 24; + } + + mon--; + while(mon < 0) + { + mon += 12; + year--; + } + while(mon > 11) + { + mon -= 12; + year++; + } + mon++; + + day--; + while(day > 27) + { + if(mon == 2) + { + if(year % 4 != 0 || year % 400 == 0) + { + day -= 28; + mon++; + } + else if(day > 28) + { + day -= 29; + mon++; + } + else + { + break; + } + } + else if(day > 29) + { + if(mon == 4 || mon == 6 || mon == 9 || mon == 11) + { + day -= 30; + } + else if(day > 30) + { + day -= 31; + } + else + { + break; + } + mon++; + } + else + { + break; + } + if(mon > 12) + { + mon = 1; + year++; + } + } + while(day < 0) + { + if(mon == 3) + { + day += 28; + if(year % 4 == 0 || year % 400 != 0) + { + day++; + } + } + if(mon == 5 || mon == 7 || mon == 10 || mon == 12) + { + day += 30; + } + else + { + day += 31; + } + mon--; + if(mon < 1) + { + mon = 12; + year--; + } + } + day++; + + if(mon < 1 || mon > 12) + { + return NULL; + } + if(day < 1 || day > 31) + { + return NULL; + } + if(day == 31 && (mon == 2 || mon == 4 || mon == 6 || mon == 9 || mon == 11)) + { + return NULL; + } + if(day == 30 && mon == 2) + { + return NULL; + } + if(day == 29 && mon == 2) + { + if(year % 4 != 0 || year % 400 == 0) + { + return NULL; + } + } + if(hour < 0 || hour > 23) + { + return NULL; + } + if(min < 0 || min > 59) + { + return NULL; + } + if(sec < 0 || sec >= 60) + { + return NULL; + } + + ret = axutil_date_time_create(env); + ret->year = year - 1900; + ret->mon = mon - 1; + ret->day = day; + ret->hour = hour; + ret->min = min; + ret->sec = sec; + return ret; +} + +AXIS2_EXTERN axutil_date_time_t *AXIS2_CALL +axutil_date_time_utc_to_local( + axutil_date_time_t *date_time_in, + const axutil_env_t *env, + axis2_bool_t is_positive, + int hour, + int min) +{ + axutil_date_time_t *date_time = NULL; + axutil_date_time_t *ret = NULL; + if(date_time_in->tz_hour && date_time_in->tz_min) + { + return NULL; + } + date_time->year = date_time_in->year; + date_time->mon = date_time_in->mon; + date_time->day = date_time_in->day; + date_time->hour = date_time_in->hour; + date_time->min = date_time_in->min; + date_time->sec = date_time_in->sec; + date_time->tz_hour = hour; + date_time->tz_min = min; + + date_time->tz_pos = is_positive ? AXIS2_FALSE : AXIS2_TRUE; + ret = axutil_date_time_local_to_utc(date_time, env); + ret->tz_hour = hour; + ret->tz_min = min; + + ret->tz_pos = is_positive; + + axutil_date_time_free(date_time, env); + return ret; +} diff --git a/util/src/date_time_util.c b/util/src/date_time_util.c new file mode 100644 index 0000000..ec1149c --- /dev/null +++ b/util/src/date_time_util.c @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +AXIS2_EXTERN int AXIS2_CALL +axutil_get_milliseconds( + const axutil_env_t *env) +{ + return axis2_platform_get_milliseconds(); +} diff --git a/util/src/digest_calc.c b/util/src/digest_calc.c new file mode 100644 index 0000000..f89a902 --- /dev/null +++ b/util/src/digest_calc.c @@ -0,0 +1,144 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +void AXIS2_CALL convert_to_hex( + axutil_digest_hash_t bin, + axutil_digest_hash_hex_t hex); + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_digest_calc_get_h_a1( + const axutil_env_t *env, + char *algorithm, + char *user_name, + char *realm, + char *password, + char *nonce, + char *cnonce, + axutil_digest_hash_hex_t session_key) +{ + axutil_md5_ctx_t *ctx; + axutil_digest_hash_t ha1; + + ctx = axutil_md5_ctx_create(env); + if(!ctx) + return AXIS2_FAILURE; + axutil_md5_update(ctx, env, user_name, strlen(user_name)); + axutil_md5_update(ctx, env, ":", 1); + axutil_md5_update(ctx, env, realm, strlen(realm)); + axutil_md5_update(ctx, env, ":", 1); + axutil_md5_update(ctx, env, password, strlen(password)); + axutil_md5_final(ctx, env, ha1); + axutil_md5_ctx_free(ctx, env); + if(!axutil_strcasecmp(algorithm, "md5-sess")) + { + ctx = axutil_md5_ctx_create(env); + if(!ctx) + return AXIS2_FAILURE; + axutil_md5_update(ctx, env, ha1, AXIS2_DIGEST_HASH_LEN); + axutil_md5_update(ctx, env, ":", 1); + axutil_md5_update(ctx, env, nonce, strlen(nonce)); + axutil_md5_update(ctx, env, ":", 1); + axutil_md5_update(ctx, env, cnonce, strlen(cnonce)); + axutil_md5_final(ctx, env, ha1); + axutil_md5_ctx_free(ctx, env); + } + convert_to_hex(ha1, session_key); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_digest_calc_get_response( + const axutil_env_t *env, + axutil_digest_hash_hex_t h_a1, + char *nonce, + char *nonce_count, + char *cnonce, + char *qop, + char *method, + char *digest_uri, + axutil_digest_hash_hex_t h_entity, + axutil_digest_hash_hex_t response) +{ + axutil_md5_ctx_t *ctx; + axutil_digest_hash_t ha2; + axutil_digest_hash_t resp_hash; + axutil_digest_hash_hex_t ha2_hex; + + ctx = axutil_md5_ctx_create(env); + if(!ctx) + return AXIS2_FAILURE; + axutil_md5_update(ctx, env, method, strlen(method)); + axutil_md5_update(ctx, env, ":", 1); + axutil_md5_update(ctx, env, digest_uri, strlen(digest_uri)); + if(!axutil_strcasecmp(qop, "auth-int")) + { + axutil_md5_update(ctx, env, ":", 1); + axutil_md5_update(ctx, env, h_entity, AXIS2_DIGEST_HASH_HEX_LEN); + }; + axutil_md5_final(ctx, env, ha2); + axutil_md5_ctx_free(ctx, env); + convert_to_hex(ha2, ha2_hex); + + ctx = axutil_md5_ctx_create(env); + if(!ctx) + return AXIS2_FAILURE; + axutil_md5_update(ctx, env, h_a1, AXIS2_DIGEST_HASH_HEX_LEN); + axutil_md5_update(ctx, env, ":", 1); + axutil_md5_update(ctx, env, nonce, strlen(nonce)); + axutil_md5_update(ctx, env, ":", 1); + if(*qop) + { + axutil_md5_update(ctx, env, nonce_count, strlen(nonce_count)); + axutil_md5_update(ctx, env, ":", 1); + axutil_md5_update(ctx, env, cnonce, strlen(cnonce)); + axutil_md5_update(ctx, env, ":", 1); + axutil_md5_update(ctx, env, qop, strlen(qop)); + axutil_md5_update(ctx, env, ":", 1); + }; + axutil_md5_update(ctx, env, ha2_hex, AXIS2_DIGEST_HASH_HEX_LEN); + axutil_md5_final(ctx, env, resp_hash); + axutil_md5_ctx_free(ctx, env); + convert_to_hex(resp_hash, response); + return AXIS2_SUCCESS; +} + +void AXIS2_CALL convert_to_hex( + axutil_digest_hash_t bin, + axutil_digest_hash_hex_t hex) +{ + unsigned short i; + unsigned char j; + + for (i = 0; i < AXIS2_DIGEST_HASH_LEN; i++) + { + j = (bin[i] >> 4) & 0xf; + if (j <= 9) + hex[i*2] = (j + '0'); + else + hex[i*2] = (j + 'a' - 10); + j = bin[i] & 0xf; + if (j <= 9) + hex[i*2+1] = (j + '0'); + else + hex[i*2+1] = (j + 'a' - 10); + } + hex[AXIS2_DIGEST_HASH_HEX_LEN] = '\0'; +} diff --git a/util/src/dir_handler.c b/util/src/dir_handler.c new file mode 100644 index 0000000..4a5e51e --- /dev/null +++ b/util/src/dir_handler.c @@ -0,0 +1,371 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#ifndef S_ISDIR +# define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR) +#endif + +#ifdef AXIS2_ARCHIVE_ENABLED +#include +#endif + + +extern int AXIS2_ALPHASORT( + ); +#ifdef IS_MACOSX +int dir_select( + struct dirent *entry); +int file_select( + struct dirent *entry); +#else +int dir_select( + const struct dirent *entry); +int file_select( + const struct dirent *entry); +#endif + +/** + * List the dll files in the given service or module folder path + * @param pathname path to your service or module directory + * @return array list of dll file names + */ +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axutil_dir_handler_list_services_or_modules_in_dir( + const axutil_env_t *env, + const axis2_char_t *pathname) +{ + axutil_array_list_t *file_list = NULL; + struct stat *buf = NULL; + int count = 1; + int i = 0; + struct dirent **files = NULL; + /*int file_select( + );*/ + /* Removed un-wanted redefinition leading to warnings on + * Windows. If this is the desired behaviour, please look + * into the file_select function definition below and comment + * out the code if neccessary. + */ + axis2_status_t status = AXIS2_FAILURE; + + AXIS2_ENV_CHECK(env, NULL); + file_list = axutil_array_list_create(env, 100); + count = AXIS2_SCANDIR(pathname, &files, file_select, AXIS2_ALPHASORT); + /* If no files found, make a non-selectable menu item */ + if(count <= 0) + { + axutil_array_list_free(file_list, env); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "No files in the path %s.", pathname); + return NULL; + } + + for(i = 1; i < (count + 1); ++i) + { + axis2_char_t *fname = NULL; + axutil_file_t *arch_file = NULL; + axis2_char_t *path = NULL; + axis2_char_t *temp_path = NULL; + + fname = files[i - 1]->d_name; + arch_file = (axutil_file_t *)axutil_file_create(env); + if(!arch_file) + { + int size = 0; + int j = 0; + axutil_file_t *del_file = NULL; + + size = axutil_array_list_size(file_list, env); + for(j = 0; j < size; j++) + { + del_file = axutil_array_list_get(file_list, env, j); + axutil_file_free(del_file, env); + } + axutil_array_list_free(file_list, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + axutil_file_set_name(arch_file, env, fname); + temp_path = axutil_stracat(env, pathname, AXIS2_PATH_SEP_STR); + path = axutil_stracat(env, temp_path, fname); + AXIS2_FREE(env->allocator, temp_path); + if(!path) + { + int size = 0; + int j = 0; + axutil_file_t *del_file = NULL; + + axutil_file_free(arch_file, env); + size = axutil_array_list_size(file_list, env); + for(j = 0; j < size; j++) + { + del_file = axutil_array_list_get(file_list, env, j); + axutil_file_free(del_file, env); + } + axutil_array_list_free(file_list, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + axutil_file_set_path(arch_file, env, path); + buf = AXIS2_MALLOC(env->allocator, sizeof(struct stat)); + if(!buf) + { + int size = 0; + int j = 0; + axutil_file_t *del_file = NULL; + + AXIS2_FREE(env->allocator, path); + axutil_file_free(arch_file, env); + size = axutil_array_list_size(file_list, env); + for(j = 0; j < size; j++) + { + del_file = axutil_array_list_get(file_list, env, j); + axutil_file_free(del_file, env); + } + axutil_array_list_free(file_list, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + stat(path, buf); + axutil_file_set_timestamp(arch_file, env, (time_t)buf->st_ctime); + status = axutil_array_list_add(file_list, env, arch_file); + if(AXIS2_SUCCESS != status) + { + int size = 0; + int j = 0; + axutil_file_t *del_file = NULL; + + axutil_file_free(arch_file, env); + AXIS2_FREE(env->allocator, path); + AXIS2_FREE(env->allocator, buf); + size = axutil_array_list_size(file_list, env); + for(j = 0; j < size; j++) + { + del_file = axutil_array_list_get(file_list, env, j); + axutil_file_free(del_file, env); + } + axutil_array_list_free(file_list, env); + return NULL; + } + AXIS2_FREE(env->allocator, path); + AXIS2_FREE(env->allocator, buf); + + } + return file_list; +} + +/** + * List services or modules directories in the services or modules folder + * respectively + * @param pathname path your modules or services folder + * @return array list of contents of services or modules folder + */ +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axutil_dir_handler_list_service_or_module_dirs( + const axutil_env_t *env, + const axis2_char_t *pathname) +{ + axutil_array_list_t *file_list = NULL; + struct stat *buf = NULL; + int count = 1; + int i = 0; + struct dirent **files = NULL; + char cwd[500]; + int chdir_result = 0; + + /**FIXME: + * This magic number 500 was selected as a temporary solution. It has to be + * replaced with dynamic memory allocation. This will be done once the use of + * errno after getwcd() on Windows is figured out. + */ + + axis2_status_t status = AXIS2_FAILURE; + AXIS2_ENV_CHECK(env, NULL); + file_list = axutil_array_list_create(env, 0); + if(!AXIS2_GETCWD(cwd, 500)) + exit(1); + + /* pathname is path of services directory or modules directory. */ + chdir_result = AXIS2_CHDIR(pathname); +#ifdef AXIS2_ARCHIVE_ENABLED + axis2_archive_extract(); +#endif + + count = AXIS2_SCANDIR(pathname, &files, dir_select, AXIS2_ALPHASORT); + chdir_result = AXIS2_CHDIR(cwd); + + /* If no files found, make a non-selectable menu item */ + if(count <= 0) + { + axutil_array_list_free(file_list, env); + AXIS2_LOG_INFO(env->log, "No files in the path %s.", pathname); + return NULL; + } + + for(i = 1; i < (count + 1); ++i) + { + axis2_char_t *fname = NULL; + axutil_file_t *arch_file = NULL; + axis2_char_t *path = NULL; + axis2_char_t *temp_path = NULL; + + fname = files[i - 1]->d_name; + arch_file = (axutil_file_t *)axutil_file_create(env); + if(!arch_file) + { + int size = 0; + int j = 0; + axutil_file_t *del_file = NULL; + + size = axutil_array_list_size(file_list, env); + for(j = 0; j < size; j++) + { + del_file = axutil_array_list_get(file_list, env, j); + axutil_file_free(del_file, env); + } + axutil_array_list_free(file_list, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + axutil_file_set_name(arch_file, env, fname); + temp_path = axutil_stracat(env, pathname, AXIS2_PATH_SEP_STR); + path = axutil_stracat(env, temp_path, fname); + if(!path) + { + int size = 0; + int j = 0; + axutil_file_t *del_file = NULL; + + axutil_file_free(arch_file, env); + size = axutil_array_list_size(file_list, env); + for(j = 0; j < size; j++) + { + del_file = axutil_array_list_get(file_list, env, j); + axutil_file_free(del_file, env); + } + axutil_array_list_free(file_list, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + axutil_file_set_path(arch_file, env, path); + AXIS2_FREE(env->allocator, temp_path); + buf = AXIS2_MALLOC(env->allocator, sizeof(struct stat)); + if(!buf) + { + int size = 0; + int j = 0; + axutil_file_t *del_file = NULL; + + axutil_file_free(arch_file, env); + AXIS2_FREE(env->allocator, path); + size = axutil_array_list_size(file_list, env); + for(j = 0; j < size; j++) + { + del_file = axutil_array_list_get(file_list, env, j); + axutil_file_free(del_file, env); + } + axutil_array_list_free(file_list, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + stat(path, buf); + axutil_file_set_timestamp(arch_file, env, (time_t)buf->st_ctime); + status = axutil_array_list_add(file_list, env, arch_file); + if(AXIS2_SUCCESS != status) + { + int size = 0; + int j = 0; + axutil_file_t *del_file = NULL; + + axutil_file_free(arch_file, env); + AXIS2_FREE(env->allocator, path); + AXIS2_FREE(env->allocator, buf); + size = axutil_array_list_size(file_list, env); + for(j = 0; j < size; j++) + { + del_file = axutil_array_list_get(file_list, env, j); + axutil_file_free(del_file, env); + } + axutil_array_list_free(file_list, env); + return NULL; + } + AXIS2_FREE(env->allocator, path); + AXIS2_FREE(env->allocator, buf); + } + + for(i = 0; i < count; i++) + { + free(files[i]); + } + free(files); + return file_list; +} + +#ifdef IS_MACOSX + int file_select(struct dirent *entry) +{ +#else + int file_select(const struct dirent *entry) +{ +#endif + /** FIXME: + * This block of code has been sitting here doing nothing. + * I have made the existing logic use this code portion. + * Have no idea about the side-effects of this modification. + * If this code block is not required, we might as well remove + * it. + */ + axis2_char_t *ptr; + + if((strcmp(entry->d_name, ".") == 0) || (strcmp(entry->d_name, "..") == 0)) + return (AXIS2_FALSE); + + /* Check for filename extensions */ + ptr = axutil_rindex(entry->d_name, '.'); + if((ptr) && ((strcmp(ptr, AXIS2_LIB_SUFFIX) == 0))) + { + return (AXIS2_TRUE); + } + else + return (AXIS2_FALSE); +} + +#ifdef IS_MACOSX +int +dir_select( + struct dirent *entry) +#else +int +dir_select( + const struct dirent *entry) +#endif +{ + struct stat stat_p; + + if(-1 == stat(entry->d_name, &stat_p)) + return (AXIS2_FALSE); + + if((entry->d_name[0] == '.') || (!S_ISDIR(stat_p.st_mode))) + { + return (AXIS2_FALSE); + } + + return AXIS2_TRUE; +} diff --git a/util/src/dll_desc.c b/util/src/dll_desc.c new file mode 100644 index 0000000..697caf3 --- /dev/null +++ b/util/src/dll_desc.c @@ -0,0 +1,298 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axutil_dll_desc +{ + axis2_char_t *dll_name; + axis2_char_t *path_qualified_dll_name; + axis2_dll_type_t dll_type; + int load_options; + AXIS2_DLHANDLER dl_handler; + CREATE_FUNCT create_funct; + DELETE_FUNCT delete_funct; + AXIS2_TIME_T timestamp; + axutil_error_codes_t error_code; + +}; + +AXIS2_EXTERN axutil_dll_desc_t *AXIS2_CALL +axutil_dll_desc_create( + const axutil_env_t *env) +{ + axutil_dll_desc_t *dll_desc = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + dll_desc = (axutil_dll_desc_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_dll_desc_t)); + + if(!dll_desc) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + dll_desc->dll_name = NULL; + dll_desc->path_qualified_dll_name = NULL; + dll_desc->dll_type = 0; + dll_desc->load_options = 0; + dll_desc->dl_handler = NULL; + dll_desc->create_funct = NULL; + dll_desc->delete_funct = NULL; + dll_desc->timestamp = 0; + dll_desc->error_code = AXIS2_ERROR_NONE; + + return dll_desc; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_dll_desc_free( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(dll_desc->dl_handler) + { + axutil_class_loader_delete_dll(env, dll_desc); + } + + if(dll_desc->dll_name) + { + AXIS2_FREE(env->allocator, dll_desc->dll_name); + dll_desc->dll_name = NULL; + } + + if(dll_desc->path_qualified_dll_name) + { + AXIS2_FREE(env->allocator, dll_desc->path_qualified_dll_name); + dll_desc->path_qualified_dll_name = NULL; + } + + if(dll_desc) + { + AXIS2_FREE(env->allocator, dll_desc); + } + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_dll_desc_free_void_arg( + void *dll_desc, + const axutil_env_t *env) +{ + axutil_dll_desc_t *dll_desc_l = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + dll_desc_l = (axutil_dll_desc_t *)dll_desc; + axutil_dll_desc_free(dll_desc_l, env); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_dll_desc_set_name( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env, + axis2_char_t *name) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, name, AXIS2_FAILURE); + + if(dll_desc->path_qualified_dll_name) + { + AXIS2_FREE(env->allocator, dll_desc->path_qualified_dll_name); + dll_desc->path_qualified_dll_name = NULL; + } + + dll_desc->path_qualified_dll_name = axutil_strdup(env, name); + if(!dll_desc->path_qualified_dll_name) + { + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_dll_desc_get_name( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env) +{ + return dll_desc->path_qualified_dll_name; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_dll_desc_set_load_options( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env, + int options) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + dll_desc->load_options = options; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_dll_desc_set_type( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env, + axis2_dll_type_t type) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + dll_desc->dll_type = type; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_dll_type_t AXIS2_CALL +axutil_dll_desc_get_type( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env) +{ + return dll_desc->dll_type; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_dll_desc_get_load_options( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env) +{ + return dll_desc->load_options; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_dll_desc_set_dl_handler( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env, + AXIS2_DLHANDLER dl_handler) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, dl_handler, AXIS2_FAILURE); + + if(dll_desc->dl_handler) + { + AXIS2_FREE(env->allocator, dll_desc->dl_handler); + } + dll_desc->dl_handler = dl_handler; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN AXIS2_DLHANDLER AXIS2_CALL +axutil_dll_desc_get_dl_handler( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env) +{ + return dll_desc->dl_handler; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_dll_desc_set_create_funct( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env, + CREATE_FUNCT funct) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + dll_desc->create_funct = funct; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN CREATE_FUNCT AXIS2_CALL +axutil_dll_desc_get_create_funct( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env) +{ + return dll_desc->create_funct; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_dll_desc_set_delete_funct( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env, + DELETE_FUNCT funct) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + dll_desc->delete_funct = funct; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN DELETE_FUNCT AXIS2_CALL +axutil_dll_desc_get_delete_funct( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env) +{ + return dll_desc->delete_funct; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_dll_desc_set_timestamp( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env, + AXIS2_TIME_T timestamp) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + dll_desc->timestamp = timestamp; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN AXIS2_TIME_T AXIS2_CALL +axutil_dll_desc_get_timestamp( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env) +{ + return dll_desc->timestamp; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_dll_desc_set_error_code( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env, + axutil_error_codes_t error_code) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + dll_desc->error_code = error_code; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_error_codes_t AXIS2_CALL +axutil_dll_desc_get_error_code( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env) +{ + return dll_desc->error_code; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_dll_desc_create_platform_specific_dll_name( + axutil_dll_desc_t *dll_desc, + const axutil_env_t *env, + const axis2_char_t *class_name) +{ + axis2_char_t *temp_name = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + temp_name = axutil_stracat(env, AXIS2_LIB_PREFIX, class_name); + dll_desc->dll_name = axutil_stracat(env, temp_name, AXIS2_LIB_SUFFIX); + AXIS2_FREE(env->allocator, temp_name); + return dll_desc->dll_name; +} diff --git a/util/src/duration.c b/util/src/duration.c new file mode 100644 index 0000000..381f025 --- /dev/null +++ b/util/src/duration.c @@ -0,0 +1,576 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include +#include +#include +#include + +struct axutil_duration +{ + axis2_bool_t is_negative; + int years; + int months; + int days; + int hours; + int mins; + double secs; +}; + +AXIS2_EXTERN axutil_duration_t *AXIS2_CALL +axutil_duration_create( + axutil_env_t *env) +{ + return axutil_duration_create_from_values(env, 0, 0, 0, 0, 0, 0, 0.0); +} + +AXIS2_EXTERN axutil_duration_t *AXIS2_CALL +axutil_duration_create_from_values( + const axutil_env_t *env, + axis2_bool_t negative, + int years, + int months, + int days, + int hours, + int minutes, + double seconds) +{ + axutil_duration_t *duration = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + duration = (axutil_duration_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_duration_t)); + if(!duration) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + duration->is_negative = negative; + if(years > -1) + { + duration->years = years; + } + else + { + duration->years = 0; + } + if(months > -1) + { + duration->months = months; + } + else + { + duration->months = 0; + } + if(days > -1) + { + duration->days = days; + } + else + { + duration->days = 0; + } + if(hours > -1) + { + duration->hours = hours; + } + else + { + duration->hours = 0; + } + if(minutes > -1) + { + duration->mins = minutes; + } + else + { + duration->mins = 0; + } + if(seconds >= 0) + { + duration->secs = seconds; + } + else + { + duration->secs = 0.0; + } + return duration; +} + +AXIS2_EXTERN axutil_duration_t *AXIS2_CALL +axutil_duration_create_from_string( + const axutil_env_t *env, + const axis2_char_t *duration_str) +{ + axutil_duration_t *duration = NULL; + + duration = (axutil_duration_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_duration_t)); + if(!duration) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + axutil_duration_deserialize_duration(duration, env, duration_str); + return duration; +} + +/***************************Function implementation****************************/ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_duration_free( + axutil_duration_t *duration, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(duration) + { + AXIS2_FREE(env->allocator, duration); + duration = NULL; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_duration_deserialize_duration( + axutil_duration_t *duration, + const axutil_env_t *env, + const axis2_char_t *duration_str) +{ + const axis2_char_t *cur = duration_str; + double num; + int num_type = 0; + unsigned int seq = 0; + const char desig[] = { 'Y', 'M', 'D', 'H', 'M', 'S' }; + + AXIS2_PARAM_CHECK(env->error, duration, AXIS2_FAILURE); + + duration->is_negative = AXIS2_FALSE; + duration->years = duration->months = duration->days = duration->hours = duration->mins = 0; + duration->secs = 0; + + if(!duration_str) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + if(*cur == '-') + { + duration->is_negative = 1; + cur++; + } + + if(*cur++ != 'P') + { + duration->is_negative = AXIS2_FALSE; + duration->years = duration->months = duration->days = duration->hours = duration->mins = 0; + duration->secs = 0; + + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NONE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + if(!*cur) + { + duration->is_negative = AXIS2_FALSE; + duration->years = duration->months = duration->days = duration->hours = duration->mins = 0; + duration->secs = 0; + + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NONE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + while(*cur) + { + if(seq >= sizeof(desig)) + { + duration->is_negative = AXIS2_FALSE; + duration->years = duration->months = duration->days = duration->hours = duration->mins + = 0; + duration->secs = 0; + + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NONE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + if(*cur == 'T') + { + if(!(seq > 3)) + { + seq = 3; + cur++; + } + else + { + duration->is_negative = AXIS2_FALSE; + duration->years = duration->months = duration->days = duration->hours + = duration->mins = 0; + duration->secs = 0; + + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NONE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + num = 0; + + if((*cur < '0') || (*cur > '9')) + num_type = -1; + else + { + num_type = 0; + while((*cur >= '0') && (*cur <= '9')) + { + num = num * 10 + (*cur - '0'); + cur++; + } + } + + if(!num_type && (*cur == '.')) + { + double mult = 1; + cur++; + if((*cur < '0') || (*cur > '9')) + num_type = -1; + else + num_type = 1; + while((*cur >= '0') && (*cur <= '9')) + { + mult /= 10; + num += (*cur - '0') * mult; + cur++; + } + } + + if((num_type == -1) || (*cur == 0)) + { + duration->is_negative = AXIS2_FALSE; + duration->years = duration->months = duration->days = duration->hours = duration->mins + = 0; + duration->secs = 0; + + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NONE, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + + while(seq < sizeof(desig)) + { + if(*cur == desig[seq]) + { + num_type = 0; + /*if (seq < (sizeof(desig) - 1)) + { + duration->is_negative = AXIS2_FALSE; + duration->years = duration->months = duration->days = duration->hours = duration->mins = 0; + duration->secs = 0; + + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NONE, + AXIS2_FAILURE); + return AXIS2_FAILURE; + }*/ + + switch(seq) + { + case 0: + duration->years = (int)num; + seq++; + break; + case 1: + duration->months = (int)num; + seq++; + break; + case 2: + duration->days = (int)num; + seq++; + break; + case 3: + duration->hours = (int)num; + seq++; + break; + case 4: + duration->mins = (int)num; + seq++; + break; + case 5: + duration->secs = num; + seq++; + break; + } + break; + } + if((++seq == 3) || (seq == 6)) + return AXIS2_SUCCESS; + } + cur++; + } + return AXIS2_SUCCESS; + +} + +AXIS2_EXTERN char *AXIS2_CALL +axutil_duration_serialize_duration( + axutil_duration_t *duration, + const axutil_env_t *env) +{ + axis2_char_t *duration_str = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + duration_str = (axis2_char_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * 64); + + if(duration->is_negative == 0) + sprintf(duration_str, "P%dY%dM%dDT%dH%dM%fS", duration->years, duration->months, + duration->days, duration->hours, duration->mins, duration->secs); + else + sprintf(duration_str, "-P%dY%dM%dDT%dH%dM%fS", duration->years, duration->months, + duration->days, duration->hours, duration->mins, duration->secs); + + return duration_str; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_duration_set_duration( + axutil_duration_t *duration, + const axutil_env_t *env, + axis2_bool_t negative, + int years, + int months, + int days, + int hours, + int mins, + double seconds) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(years > -1) + duration->years = years; + if(months > -1) + duration->months = months; + if(days > -1) + duration->days = days; + if(hours > -1) + duration->hours = hours; + if(mins > -1) + duration->mins = mins; + if(seconds >= 0) + duration->secs = seconds; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_duration_get_years( + axutil_duration_t *duration, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + return duration->years; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_duration_set_years( + axutil_duration_t *duration, + const axutil_env_t *env, + int years) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(years > -1) + { + duration->years = years; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_duration_get_months( + axutil_duration_t *duration, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + return duration->months; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_duration_set_months( + axutil_duration_t *duration, + const axutil_env_t *env, + int months) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(months > -1) + { + duration->months = months; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_duration_get_days( + axutil_duration_t *duration, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + return duration->days; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_duration_set_days( + axutil_duration_t *duration, + const axutil_env_t *env, + int days) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(days > -1) + { + duration->days = days; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_duration_get_hours( + axutil_duration_t *duration, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + return duration->hours; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_duration_set_hours( + axutil_duration_t *duration, + const axutil_env_t *env, + int hours) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(hours > -1) + { + duration->hours = hours; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_duration_get_mins( + axutil_duration_t *duration, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + return duration->mins; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_duration_set_mins( + axutil_duration_t *duration, + const axutil_env_t *env, + int mins) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(mins > -1) + { + duration->mins = mins; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN double AXIS2_CALL +axutil_duration_get_seconds( + axutil_duration_t *duration, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + return duration->secs; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_duration_set_seconds( + axutil_duration_t *duration, + const axutil_env_t *env, + double seconds) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(seconds >= 0) + { + duration->secs = seconds; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_duration_get_is_negative( + axutil_duration_t *duration, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + return duration->is_negative; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_duration_set_is_negative( + axutil_duration_t *duration, + const axutil_env_t *env, + axis2_bool_t is_negative) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + duration->is_negative = is_negative; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_duration_compare( + axutil_duration_t *duration_one, + axutil_duration_t *duration_two, + axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + if(!duration_one || !duration_two) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + return AXIS2_FALSE; + } + + if(duration_one->is_negative != duration_two->is_negative) + return AXIS2_FALSE; + if(duration_one->years != duration_two->years) + return AXIS2_FALSE; + if(duration_one->months != duration_two->months) + return AXIS2_FALSE; + if(duration_one->days != duration_two->days) + return AXIS2_FALSE; + if(duration_one->hours != duration_two->hours) + return AXIS2_FALSE; + if(duration_one->mins != duration_two->mins) + return AXIS2_FALSE; + if(duration_one->secs != duration_two->secs) + return AXIS2_FALSE; + return AXIS2_SUCCESS; +} + diff --git a/util/src/env.c b/util/src/env.c new file mode 100644 index 0000000..38b89d3 --- /dev/null +++ b/util/src/env.c @@ -0,0 +1,305 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +AXIS2_EXTERN axutil_env_t *AXIS2_CALL +axutil_env_create( + axutil_allocator_t *allocator) +{ + axutil_env_t *env; + + if(!allocator) + return NULL; + + env = (axutil_env_t *)AXIS2_MALLOC(allocator, sizeof(axutil_env_t)); + + if(!env) + return NULL; + + memset(env, 0, sizeof(axutil_env_t)); + + env->allocator = allocator; + + env->log = axutil_log_create_default(allocator); + env->log->level = AXIS2_LOG_LEVEL_DEBUG; /* default log level is debug */ + env->log_enabled = AXIS2_TRUE; + + /* Create default error struct */ + env->error = axutil_error_create(allocator); + if(!env->error) + { + AXIS2_FREE(allocator, env); + return NULL; + } + + /* Call error init to fill in the axutil_error_messages array. + This array holds the error messages with respect to error codes */ + axutil_error_init(); + + env->ref = 1; + env->get_session_fn = NULL; + env->set_session_fn = NULL; + + return env; +} + +AXIS2_EXTERN axutil_env_t *AXIS2_CALL +axutil_env_create_with_error_log( + axutil_allocator_t *allocator, + axutil_error_t *error, + axutil_log_t *log) +{ + axutil_env_t *env; + if(!allocator || !error) + return NULL; + + env = (axutil_env_t *)AXIS2_MALLOC(allocator, sizeof(axutil_env_t)); + + if(!env) + return NULL; + + memset(env, 0, sizeof(axutil_env_t)); + + env->allocator = allocator; + env->error = error; + env->log = log; + + if(env->log) + env->log_enabled = AXIS2_TRUE; + else + env->log_enabled = AXIS2_FALSE; + + axutil_error_init(); + + env->ref = 1; + env->get_session_fn = NULL; + env->set_session_fn = NULL; + + return env; +} + +AXIS2_EXTERN axutil_env_t *AXIS2_CALL +axutil_env_create_with_error( + axutil_allocator_t *allocator, + axutil_error_t *error) +{ + return axutil_env_create_with_error_log(allocator, error, NULL); +} + +AXIS2_EXTERN axutil_env_t *AXIS2_CALL +axutil_env_create_with_error_log_thread_pool( + axutil_allocator_t *allocator, + axutil_error_t *error, + axutil_log_t *log, + axutil_thread_pool_t *pool) +{ + axutil_env_t *env; + if(!allocator || !error || !pool) + return NULL; + + env = (axutil_env_t *)AXIS2_MALLOC(allocator, sizeof(axutil_env_t)); + + if(!env) + return NULL; + + memset(env, 0, sizeof(axutil_env_t)); + + env->allocator = allocator; + env->error = error; + env->log = log; + + env->thread_pool = pool; + + if(env->log) + env->log_enabled = AXIS2_TRUE; + else + env->log_enabled = AXIS2_FALSE; + + axutil_error_init(); + + env->ref = 1; + env->get_session_fn = NULL; + env->set_session_fn = NULL; + + return env; +} + +AXIS2_EXTERN axutil_env_t *AXIS2_CALL +axutil_env_create_all( + const axis2_char_t *log_file, + const axutil_log_levels_t log_level) +{ + axutil_env_t *env = NULL; + axutil_error_t *error = NULL; + axutil_log_t *log = NULL; + axutil_allocator_t *allocator = NULL; + axutil_thread_pool_t *thread_pool = NULL; + + allocator = axutil_allocator_init(NULL); + error = axutil_error_create(allocator); + + if(log_file) + { + log = axutil_log_create(allocator, NULL, log_file); + } + + /* if log file name was not given or the log could not be create with + given name, create default log */ + if(!log) + { + log = axutil_log_create_default(allocator); + } + + thread_pool = axutil_thread_pool_init(allocator); + + env = axutil_env_create_with_error_log_thread_pool(allocator, error, log, thread_pool); + if(env->log) + { + if(AXIS2_LOG_LEVEL_CRITICAL <= log_level && log_level <= AXIS2_LOG_LEVEL_TRACE) + { + env->log->level = log_level; + } + else + { + env->log->level = AXIS2_LOG_LEVEL_DEBUG; /* default log level is debug */ + } + } + + env->ref = 1; + env->get_session_fn = NULL; + env->set_session_fn = NULL; + + return env; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_env_check_status( + const axutil_env_t *env) +{ + if(env && env->error) + return AXIS2_ERROR_GET_STATUS_CODE(env->error); + + return AXIS2_CRITICAL_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_env_enable_log( + axutil_env_t *env, + axis2_bool_t enable) +{ + if(env) + { + env->log_enabled = enable; + return AXIS2_SUCCESS; + } + + return AXIS2_CRITICAL_FAILURE; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_env_free( + axutil_env_t *env) +{ + axutil_allocator_t *allocator = NULL; + + if(!env) + return; + + if(--(env->ref) > 0) + { + return; + } + + allocator = env->allocator; + + if(env->log) + { + AXIS2_LOG_FREE(env->allocator, env->log); + } + + if(env->error) + { + AXIS2_ERROR_FREE(env->error); + } + + if(env->thread_pool) + { + axutil_thread_pool_free(env->thread_pool); + } + + if(env->allocator) + { + AXIS2_FREE(env->allocator, env); + } + + if(allocator) + { + AXIS2_FREE(allocator, allocator); + } + + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_env_free_masked( + axutil_env_t *env, + char mask) +{ + if(!env) + return; + + if(--(env->ref) > 0) + { + return; + } + + if(mask & AXIS_ENV_FREE_LOG) + { + AXIS2_LOG_FREE(env->allocator, env->log); + } + + if(mask & AXIS_ENV_FREE_ERROR) + { + AXIS2_ERROR_FREE(env->error); + } + + if(mask & AXIS_ENV_FREE_THREADPOOL) + { + axutil_thread_pool_free(env->thread_pool); + } + + if(env) + AXIS2_FREE(env->allocator, env); + + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_env_increment_ref( + axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + env->ref++; + return AXIS2_SUCCESS; +} + diff --git a/util/src/error.c b/util/src/error.c new file mode 100644 index 0000000..bb35d96 --- /dev/null +++ b/util/src/error.c @@ -0,0 +1,565 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "axutil_error_default.h" + +#define AXIS2_ERROR_MESSAGE_ARRAY_SIZE AXUTIL_ERROR_MAX + +/** + * Array to hold error messages corresponding to the pre-defined error codes. + * Note that array has capacity for additional error messages. These are + * reserved for modules. + * + * TODO: We have to review and change the following definition and also + * need to come up with a reserve strategy for module error code blocks. + * + * In writing a module following steps must be followed in extending Axis2/C + * errors + * 1. Declare and register the start of error messages for the new + * module. + * 2. New module can use up to 1000 messages for its errors. + * 3. In axis2c documentation an entry about new modules error range must + * be inserted so that another new module can know about the already + * occupied spaces. + */ + +AXIS2_EXPORT const axis2_char_t* axutil_error_messages[AXIS2_ERROR_MESSAGE_ARRAY_SIZE]; + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_error_init() +{ + int i = 0; + for(i = 0; i < AXIS2_ERROR_MESSAGE_ARRAY_SIZE; i++) + { + axutil_error_messages[i] = "Unknown Error :("; + } + + /* Common Errors */ + axutil_error_messages[AXIS2_ERROR_NONE] = "No Error"; + axutil_error_messages[AXIS2_ERROR_NO_MEMORY] = "Out of memory"; + axutil_error_messages[AXIS2_ERROR_INVALID_NULL_PARAM] + = "NULL parameter was passed when a non NULL parameter was expected"; + /* core:addr */ + + /* core:clientapi */ + axutil_error_messages[AXIS2_ERROR_BLOCKING_INVOCATION_EXPECTS_RESPONSE] + = "Blocking invocation expects response"; + axutil_error_messages[AXIS2_ERROR_CANNOT_INFER_TRANSPORT] = "Cannot infer transport from URL"; + axutil_error_messages[AXIS2_ERROR_CLIENT_SIDE_SUPPORT_ONLY_ONE_CONF_CTX] + = "Client side support only one configuration context"; + axutil_error_messages[AXIS2_ERROR_MEP_CANNOT_BE_NULL_IN_MEP_CLIENT] + = "MEP cannot be NULL in MEP client"; + axutil_error_messages[AXIS2_ERROR_MEP_MISMATCH_IN_MEP_CLIENT] = "MEP mismatch"; + axutil_error_messages[AXIS2_ERROR_TWO_WAY_CHANNEL_NEEDS_ADDRESSING] + = "Two way channel needs addressing module to be engaged"; + axutil_error_messages[AXIS2_ERROR_UNKNOWN_TRANSPORT] = "Unknown transport"; + axutil_error_messages[AXIS2_ERROR_UNSUPPORTED_TYPE] = "Type is not supported"; + axutil_error_messages[AXIS2_ERROR_OPTIONS_OBJECT_IS_NOT_SET] = "Options object is not set"; + axutil_error_messages[AXIS2_ERROR_SESSION_TIMEOUT] = "Session Timeout"; + /* core:clientapi:diclient */ + + /* core:context */ + axutil_error_messages[AXIS2_ERROR_INVALID_SOAP_ENVELOPE_STATE] = "Invalid SOAP envelope state"; + axutil_error_messages[AXIS2_ERROR_INVALID_STATE_MSG_CTX] = "Invalid message context state"; + axutil_error_messages[AXIS2_ERROR_INVALID_STATE_SVC] = "Service accessed has invalid state"; + axutil_error_messages[AXIS2_ERROR_INVALID_STATE_SVC_GRP] + = "Service group accessed has invalid state"; + axutil_error_messages[AXIS2_ERROR_SERVICE_NOT_YET_FOUND] = "Service not yet found"; + /* core:deployment */ + axutil_error_messages[AXI2_ERROR_INVALID_PHASE] = "Invalid phase found in phase validation*"; + axutil_error_messages[AXIS2_ERROR_CONFIG_NOT_FOUND] = "Configuration file cannot be found"; + axutil_error_messages[AXIS2_ERROR_DATA_ELEMENT_IS_NULL] = "Data element of the OM Node is NULL"; + axutil_error_messages[AXIS2_ERROR_IN_FLOW_NOT_ALLOWED_IN_TRS_OUT] + = "In transport sender, Inflow is not allowed"; + axutil_error_messages[AXIS2_ERROR_INVALID_HANDLER_STATE] = "Invalid handler state"; + axutil_error_messages[AXIS2_ERROR_INVALID_MODUELE_REF] = "Invalid module reference encountered"; + axutil_error_messages[AXIS2_ERROR_INVALID_MODUELE_REF_BY_OP] + = "Invalid module referenced by operation"; + axutil_error_messages[AXIS2_ERROR_INVALID_MODULE_CONF] = "Invalid module configuration"; + axutil_error_messages[AXIS2_ERROR_INVALID_STATE_DESC_BUILDER] + = "Description builder is found to be in invalid state"; + axutil_error_messages[AXIS2_ERROR_MODULE_NOT_FOUND] = "Module not found"; + axutil_error_messages[AXIS2_ERROR_MODULE_VALIDATION_FAILED] = "Module validation failed"; + axutil_error_messages[AXIS2_ERROR_MODULE_XML_NOT_FOUND_FOR_THE_MODULE] + = "Module XML file is not found in the given path"; + axutil_error_messages[AXIS2_ERROR_NO_DISPATCHER_FOUND] = "No dispatcher found"; + axutil_error_messages[AXIS2_ERROR_OP_NAME_MISSING] = "Operation name is missing"; + axutil_error_messages[AXIS2_ERROR_OUT_FLOW_NOT_ALLOWED_IN_TRS_IN] + = "In transport receiver, outflow is not allowed"; + axutil_error_messages[AXIS2_ERROR_REPO_CAN_NOT_BE_NULL] = "Repository name cannot be NULL"; + axutil_error_messages[AXIS2_ERROR_REPOSITORY_NOT_EXIST] = "Repository in path does not exist"; + axutil_error_messages[AXIS2_ERROR_REPOS_LISTENER_INIT_FAILED] + = "Repository listener initialization failed"; + axutil_error_messages[AXIS2_ERROR_SERVICE_XML_NOT_FOUND] + = "Service XML file is not found in the given path"; + axutil_error_messages[AXIS2_ERROR_SVC_NAME_ERROR] = "Service name error"; + axutil_error_messages[AXIS2_ERROR_TRANSPORT_SENDER_ERROR] = "Transport sender error"; + axutil_error_messages[AXIS2_PATH_TO_CONFIG_CAN_NOT_BE_NULL] + = "Path to configuration file can not be NULL"; + axutil_error_messages[AXIS2_ERROR_INVALID_SVC] = "Invalid service"; + /* core:description */ + axutil_error_messages[AXIS2_ERROR_CANNOT_CORRELATE_MSG] = "Cannot correlate message"; + axutil_error_messages[AXIS2_ERROR_COULD_NOT_MAP_MEP_URI_TO_MEP_CONSTANT] + = "Could not map the MEP URI to an Axis2/C MEP constant value"; + axutil_error_messages[AXIS2_ERROR_INVALID_MESSAGE_ADDITION] + = "Invalid message addition operation context completed"; + axutil_error_messages[AXIS2_ERROR_INVALID_STATE_MODULE_DESC] + = "Module description accessed has invalid state"; + axutil_error_messages[AXIS2_ERROR_INVALID_STATE_PARAM_CONTAINER] + = "Parameter container not set"; + axutil_error_messages[AXIS2_ERROR_MODULE_ALREADY_ENGAGED_TO_OP] + = "Module has already been engaged to the operation"; + axutil_error_messages[AXIS2_ERROR_MODULE_ALREADY_ENGAGED_TO_SVC] + = "Module has already been engaged on the service."; + axutil_error_messages[AXIS2_ERROR_MODULE_ALREADY_ENGAGED_TO_SVC_GRP] + = "Module has already been engaged on the service."; + axutil_error_messages[AXIS2_ERROR_PARAMETER_LOCKED_CANNOT_OVERRIDE] + = "Parameter locked, cannot override"; + axutil_error_messages[AXIS2_ERROR_EMPTY_SCHEMA_LIST] + = "Schema list is empty or NULL in service"; + /* core:engine */ + axutil_error_messages[AXIS2_ERROR_BEFORE_AFTER_HANDLERS_SAME] + = "Both before and after handlers cannot be the same"; + axutil_error_messages[AXIS2_ERROR_INVALID_HANDLER_RULES] = "Invalid handler rules"; + axutil_error_messages[AXIS2_ERROR_INVALID_MODULE] = "Invalid module"; + axutil_error_messages[AXIS2_ERROR_INVALID_PHASE_FIRST_HANDLER] + = "Invalid first handler for phase"; + axutil_error_messages[AXIS2_ERROR_INVALID_PHASE_LAST_HANDLER] + = "Invalid last handler for phase"; + axutil_error_messages[AXIS2_ERROR_INVALID_STATE_CONF] = "Invalid engine configuration state"; + axutil_error_messages[AXIS2_ERROR_INVALID_STATE_PROCESSING_FAULT_ALREADY] + = "Message context processing a fault already"; + axutil_error_messages[AXIS2_ERROR_NOWHERE_TO_SEND_FAULT] + = "fault to field not specified in message context"; + axutil_error_messages[AXIS2_ERROR_PHASE_ADD_HANDLER_INVALID] + = "Only one handler allowed for phase, adding another handler is not allowed"; + axutil_error_messages[AXIS2_ERROR_PHASE_FIRST_HANDLER_ALREADY_SET] + = "First handler of phase already set"; + axutil_error_messages[AXIS2_ERROR_PHASE_LAST_HANDLER_ALREADY_SET] + = "Last handler of phase already set"; + axutil_error_messages[AXIS2_ERROR_TWO_SVCS_CANNOT_HAVE_SAME_NAME] + = "Two service can not have same name, a service with same name already"; + /* core:phaseresolver */ + axutil_error_messages[AXIS2_ERROR_INVALID_MODULE_REF] = "Invalid module reference"; + axutil_error_messages[AXIS2_ERROR_INVALID_PHASE] = "Invalid Phase"; + axutil_error_messages[AXIS2_ERROR_NO_TRANSPORT_IN_CONFIGURED] + = "There are no in transport chains configured"; + axutil_error_messages[AXIS2_ERROR_NO_TRANSPORT_OUT_CONFIGURED] + = "There are no out transport chains configured"; + axutil_error_messages[AXIS2_ERROR_PHASE_IS_NOT_SPECIFED] = "Phase is not specified"; + axutil_error_messages[AXIS2_ERROR_SERVICE_MODULE_CAN_NOT_REFER_GLOBAL_PHASE] + = "Service module can not refer global phase"; + /* core:wsdl */ + axutil_error_messages[AXIS2_ERROR_WSDL_SCHEMA_IS_NULL] = "Schema is NULL"; + /* core:receivers */ + axutil_error_messages[AXIS2_ERROR_OM_ELEMENT_INVALID_STATE] = "AXIOM element has invalid state"; + axutil_error_messages[AXIS2_ERROR_OM_ELEMENT_MISMATCH] = "AXIOM elements do not match"; + axutil_error_messages[AXIS2_ERROR_RPC_NEED_MATCHING_CHILD] + = "RPC style SOAP body don't have a child element"; + axutil_error_messages[AXIS2_ERROR_UNKNOWN_STYLE] + = "Operation description has unknown operation style"; + axutil_error_messages[AXIS2_ERROR_STRING_DOES_NOT_REPRESENT_A_VALID_NC_NAME] + = "String does not represent a valid NCName"; + /* core:transport */ + + /* core:transport:http */ + axutil_error_messages[AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR] = "Error occurred in transport"; + axutil_error_messages[AXIS2_ERROR_HTTP_REQUEST_NOT_SENT] + = "A read attempt(HTTP) for the reply without sending the request"; + axutil_error_messages[AXIS2_ERROR_INVALID_HEADER] = "Invalid string passed as a HTTP header"; + axutil_error_messages[AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE] + = "Invalid status line or invalid request line"; + axutil_error_messages[AXIS2_ERROR_INVALID_TRANSPORT_PROTOCOL] + = "Transport protocol is unsupported by axis2"; + axutil_error_messages[AXIS2_ERROR_NULL_BODY] = "No body present in the request or the response"; + axutil_error_messages[AXIS2_ERROR_NULL_CONFIGURATION_CONTEXT] + = "A valid configuration context is required for the HTTP worker"; + axutil_error_messages[AXIS2_ERROR_NULL_HTTP_VERSION] + = "HTTP version cannot be NULL in the status/request line"; + axutil_error_messages[AXIS2_ERROR_NULL_IN_STREAM_IN_MSG_CTX] + = "Input stream is NULL in message context"; + axutil_error_messages[AXIS2_ERROR_NULL_OM_OUTPUT] = "OM output is NULL"; + axutil_error_messages[AXIS2_ERROR_NULL_SOAP_ENVELOPE_IN_MSG_CTX] + = "NULL SOAP envelope in message context"; + axutil_error_messages[AXIS2_ERROR_NULL_STREAM_IN_CHUNKED_STREAM] + = "NULL stream in the HTTP chucked stream"; + axutil_error_messages[AXIS2_ERROR_NULL_STREAM_IN_RESPONSE_BODY] + = "NULL stream in the response body"; + axutil_error_messages[AXIS2_ERROR_NULL_URL] = "URL NULL in HTTP client"; + axutil_error_messages[AXIS2_ERROR_OUT_TRNSPORT_INFO_NULL] + = "Transport information must be set in message context"; + axutil_error_messages[AXIS2_ERROR_RESPONSE_CONTENT_TYPE_MISSING] + = "Content-Type header missing in HTTP response"; + axutil_error_messages[AXIS2_ERROR_RESPONSE_TIMED_OUT] = "Response timed out"; + axutil_error_messages[AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL] + = "SOAP envelope or SOAP body NULL"; + axutil_error_messages[AXIS2_ERROR_SSL_ENGINE] = "Error occurred in SSL engine"; + axutil_error_messages[AXIS2_ERROR_SSL_NO_CA_FILE] = "Cannot find certificates"; + axutil_error_messages[AXIS2_ERROR_WRITING_RESPONSE] + = "Error in writing the response in response writer"; + axutil_error_messages[AXIS2_ERROR_REQD_PARAM_MISSING] + = "Required parameter is missing in URL encoded request"; + axutil_error_messages[AXIS2_ERROR_UNSUPPORTED_SCHEMA_TYPE] = " Unsupported schema type in REST"; + axutil_error_messages[AXIS2_ERROR_SVC_OR_OP_NOT_FOUND] = "Service or operation not found"; + /* mod_addr */ + axutil_error_messages[AXIS2_ERROR_NO_MSG_INFO_HEADERS] = "No messgae info headers"; + /* platforms */ + + /* utils */ + axutil_error_messages[AXIS2_ERROR_COULD_NOT_OPEN_FILE] = "Could not open the file"; + axutil_error_messages[AXIS2_ERROR_DLL_CREATE_FAILED] = "Failed in creating DLL"; + axutil_error_messages[AXIS2_ERROR_DLL_LOADING_FAILED] = "DLL loading failed"; + axutil_error_messages[AXIS2_ERROR_ENVIRONMENT_IS_NULL] = "Environment passed is NULL"; + axutil_error_messages[AXIS2_ERROR_FILE_NAME_NOT_SET] = "Axis2 File does not have a file name"; + axutil_error_messages[AXIS2_ERROR_INVALID_STATE_DLL_DESC] + = "DLL description has invalid state of not having valid DLL create function, \ + of valid delete function or valid dll_handler"; + axutil_error_messages[AXIS2_ERROR_HANDLER_CREATION_FAILED] = "Failed in creating Handler"; + axutil_error_messages[AXIS2_ERROR_INDEX_OUT_OF_BOUNDS] = "Array list index out of bounds"; + axutil_error_messages[AXIS2_ERROR_INVALID_ADDRESS] = "Invalid IP or hostname"; + axutil_error_messages[AXIS2_ERROR_INVALID_FD] + = "Trying to do operation on invalid file descriptor"; + axutil_error_messages[AXIS2_ERROR_INVALID_SOCKET] + = "Trying to do operation on closed/not opened socket"; + axutil_error_messages[AXIS2_ERROR_INVALID_STATE_PARAM] = "Parameter not set"; + axutil_error_messages[AXIS2_ERROR_MODULE_CREATION_FAILED] = "Module create failed"; + axutil_error_messages[AXIS2_ERROR_MSG_RECV_CREATION_FAILED] + = "Failed in creating Message Receiver"; + axutil_error_messages[AXIS2_ERROR_NO_SUCH_ELEMENT] = "No such element"; + axutil_error_messages[AXIS2_ERROR_SOCKET_BIND_FAILED] + = "Socket bind failed. Another process may be already using this port"; + axutil_error_messages[AXIS2_ERROR_SOCKET_ERROR] + = "Error creating a socket. Most probably error returned by OS"; + axutil_error_messages[AXIS2_ERROR_SOCKET_LISTEN_FAILED] = "Listen failed for the server socket"; + axutil_error_messages[AXIS2_ERROR_SVC_SKELETON_CREATION_FAILED] + = "Failed in creating Service Skeleton"; + axutil_error_messages[AXIS2_ERROR_TRANSPORT_RECV_CREATION_FAILED] + = "Failed in creating Transport Receiver"; + axutil_error_messages[AXIS2_ERROR_TRANSPORT_SENDER_CREATION_FAILED] + = "Failed in creating Transport Sender"; + axutil_error_messages[AXIS2_ERROR_UUID_GEN_FAILED] + = "Generation of platform dependent UUID failed"; + axutil_error_messages[AXIS2_ERROR_POSSIBLE_DEADLOCK] = "Possible deadlock"; + /* WSDL */ + axutil_error_messages[AXIS2_ERROR_INTERFACE_OR_PORT_TYPE_NOT_FOUND_FOR_THE_BINDING] + = "Interface or Port Type not found for the binding"; + axutil_error_messages[AXIS2_ERROR_INTERFACES_OR_PORTS_NOT_FOUND_FOR_PARTIALLY_BUILT_WOM] + = "Interfaces or Ports not found for the partially built WOM"; + axutil_error_messages[AXIS2_ERROR_INVALID_STATE_WSDL_OP] + = "WSDL operation accessed has invalid state"; + axutil_error_messages[AXIS2_ERROR_INVALID_STATE_WSDL_SVC] + = "WSDL Service accessed has invalid state"; + axutil_error_messages[AXIS2_ERROR_MEP_CANNOT_DETERMINE_MEP] = "Cannot determine MEP"; + axutil_error_messages[AXIS2_ERROR_WSDL_BINDING_NAME_IS_REQUIRED] + = "WSDL binding name is cannot be NULL"; + axutil_error_messages[AXIS2_ERROR_WSDL_INTERFACE_NAME_IS_REQUIRED] + = "PortType/Interface name cannot be NULL"; + axutil_error_messages[AXIS2_ERROR_WSDL_PARSER_INVALID_STATE] + = "WSDL parsing has resulted in an invalid state"; + axutil_error_messages[AXIS2_ERROR_WSDL_SVC_NAME_IS_REQUIRED] + = "WSDL service name cannot be NULL"; + /* XML */ + + /* XML:attachments */ + axutil_error_messages[AXIS2_ERROR_ATTACHMENT_MISSING] = "Attachment is missing"; + /* XML:om */ + axutil_error_messages[AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL] + = "XML builder done with pulling. Pull parser cannot pull any more"; + axutil_error_messages[AXIS2_ERROR_INVALID_BUILDER_STATE_CANNOT_DISCARD] + = "Discard failed because the builder state is invalid"; + axutil_error_messages[AXIS2_ERROR_INVALID_BUILDER_STATE_LAST_NODE_NULL] + = "Invalid builder state; Builder's last node is NULL"; + axutil_error_messages[AXIS2_ERROR_INVALID_DOCUMENT_STATE_ROOT_NULL] + = "Invalid document state; Document root is NULL"; + axutil_error_messages[AXIS2_ERROR_INVALID_DOCUMENT_STATE_UNDEFINED_NAMESPACE] + = "Undefined namespace used"; + axutil_error_messages[AXIS2_ERROR_INVALID_EMPTY_NAMESPACE_URI] + = "Namespace should have a valid URI"; + axutil_error_messages[AXIS2_ERROR_ITERATOR_NEXT_METHOD_HAS_NOT_YET_BEEN_CALLED] + = "Next method has not been called so cannot remove" + "an element before calling next valid for any om iterator"; + axutil_error_messages[AXIS2_ERROR_ITERATOR_REMOVE_HAS_ALREADY_BEING_CALLED] + = "Document root is NULL, when it is not supposed to be NULL"; + axutil_error_messages[AXIS2_ERROR_XML_READER_ELEMENT_NULL] + = "AXIOM XML reader returned NULL element"; + axutil_error_messages[AXIS2_ERROR_XML_READER_VALUE_NULL] + = "AXIOM XML reader returned NULL value"; + /* XML:parser */ + axutil_error_messages[AXIS2_ERROR_CREATING_XML_STREAM_READER] + = "Error occurred creating XML stream reader"; + axutil_error_messages[AXIS2_ERROR_CREATING_XML_STREAM_WRITER] + = "Error occurred creating XML stream writer"; + axutil_error_messages[AXIS2_ERROR_WRITING_ATTRIBUTE] = "Error in writing attribute"; + axutil_error_messages[AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE] + = "Error in writing attribute with namespace"; + axutil_error_messages[AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE_PREFIX] + = "Error in writing attribute with namespace prefix"; + axutil_error_messages[AXIS2_ERROR_WRITING_COMMENT] = "Error in writing comment"; + axutil_error_messages[AXIS2_ERROR_WRITING_DATA_SOURCE] = "Error in writing data source"; + axutil_error_messages[AXIS2_ERROR_WRITING_DEFAULT_NAMESPACE] + = "Error in writing default namespace"; + axutil_error_messages[AXIS2_ERROR_WRITING_DTD] = "Error in writing DDT"; + axutil_error_messages[AXIS2_ERROR_WRITING_EMPTY_ELEMENT] + = "Error occurred in writing empty element"; + axutil_error_messages[AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE] + = "Error occurred in writing empty element with namespace"; + axutil_error_messages[AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE_PREFIX] + = "Error in writing empty element with namespace prefix"; + axutil_error_messages[AXIS2_ERROR_WRITING_END_DOCUMENT] + = "Error occurred in writing end document in XML writer"; + axutil_error_messages[AXIS2_ERROR_WRITING_END_ELEMENT] + = "Error occurred in writing end element in XML writer"; + axutil_error_messages[AXIS2_ERROR_WRITING_PROCESSING_INSTRUCTION] + = "Error in writing processing instruction"; + axutil_error_messages[AXIS2_ERROR_WRITING_START_DOCUMENT] + = "Error occurred in writing start element in start document in XML writer"; + axutil_error_messages[AXIS2_ERROR_WRITING_START_ELEMENT] + = "Error occurred in writing start element in XML writer"; + axutil_error_messages[AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE] + = "Error occurred in writing start element with namespace in XML writer"; + axutil_error_messages[AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE_PREFIX] + = "Error occurred in writing start element with namespace prefix"; + axutil_error_messages[AXIS2_ERROR_WRITING_CDATA] = "Error in writing CDATA section"; + axutil_error_messages[AXIS2_ERROR_XML_PARSER_INVALID_MEM_TYPE] + = "AXIS2_XML_PARSER_TYPE_BUFFER or AXIS2_XML_PARSER_TYPE_DOC is expected"; + + /* invalid type passed */ + axutil_error_messages[AXIS2_ERROR_INVALID_BASE_TYPE] = "Invalid base type passed"; + axutil_error_messages[AXIS2_ERROR_INVALID_SOAP_NAMESPACE_URI] + = "Invalid SOAP namespace URI found"; + axutil_error_messages[AXIS2_ERROR_INVALID_SOAP_VERSION] = "Invalid SOAP version"; + axutil_error_messages[AXIS2_ERROR_INVALID_VALUE_FOUND_IN_MUST_UNDERSTAND] + = "Invalid value found in must understand"; + axutil_error_messages[AXIS2_ERROR_MULTIPLE_CODE_ELEMENTS_ENCOUNTERED] + = "Multiple fault code elements encountered in SOAP fault"; + axutil_error_messages[AXIS2_ERROR_MULTIPLE_DETAIL_ELEMENTS_ENCOUNTERED] + = "Multiple fault detail elements encountered in SOAP fault"; + axutil_error_messages[AXIS2_ERROR_MULTIPLE_NODE_ELEMENTS_ENCOUNTERED] + = "Multiple fault node elements encountered in SOAP fault"; + axutil_error_messages[AXIS2_ERROR_MULTIPLE_REASON_ELEMENTS_ENCOUNTERED] + = "Multiple fault reason elements encountered in SOAP fault"; + axutil_error_messages[AXIS2_ERROR_MULTIPLE_ROLE_ELEMENTS_ENCOUNTERED] + = "Multiple fault role elements encountered in SOAP fault "; + axutil_error_messages[AXIS2_ERROR_MULTIPLE_SUB_CODE_VALUES_ENCOUNTERED] + = "Multiple fault sub-code value elements encountered"; + axutil_error_messages[AXIS2_ERROR_MULTIPLE_VALUE_ENCOUNTERED_IN_CODE_ELEMENT] + = "Multiple fault value elements encountered"; + axutil_error_messages[AXIS2_ERROR_MUST_UNDERSTAND_SHOULD_BE_1_0_TRUE_FALSE] + = "Must understand attribute should have a value of either true or false"; + axutil_error_messages[AXIS2_ERROR_OM_ELEMENT_EXPECTED] = "AXIOM element is expected"; + axutil_error_messages[AXIS2_ERROR_ONLY_CHARACTERS_ARE_ALLOWED_HERE] + = "Processing SOAP 1.1 fault value element should have only" + "text as its children"; + axutil_error_messages[AXIS2_ERROR_ONLY_ONE_SOAP_FAULT_ALLOWED_IN_BODY] + = "Only one SOAP fault is allowed in SOAP body"; + axutil_error_messages[AXIS2_ERROR_SOAP11_FAULT_ACTOR_SHOULD_NOT_HAVE_CHILD_ELEMENTS] + = "SOAP 1.1 fault actor should not have any child elements"; + axutil_error_messages[AXIS2_ERROR_SOAP_BUILDER_ENVELOPE_CAN_HAVE_ONLY_HEADER_AND_BODY] + = "SOAP builder found a child element other than header or body in envelope" + "element"; + axutil_error_messages[AXIS2_ERROR_SOAP_BUILDER_HEADER_BODY_WRONG_ORDER] + = "SOAP builder encountered body element first and header next"; + axutil_error_messages[AXIS2_ERROR_SOAP_BUILDER_MULTIPLE_BODY_ELEMENTS_ENCOUNTERED] + = "SOAP builder multiple body elements encountered"; + axutil_error_messages[AXIS2_ERROR_SOAP_BUILDER_MULTIPLE_HEADERS_ENCOUNTERED] + = "SOAP builder encountered multiple headers"; + axutil_error_messages[AXIS2_ERROR_SOAP_FAULT_CODE_DOES_NOT_HAVE_A_VALUE] + = "SOAP fault code does not have a value"; + axutil_error_messages[AXIS2_ERROR_SOAP_FAULT_REASON_ELEMENT_SHOULD_HAVE_A_TEXT] + = "SOAP fault reason element should have a text value"; + axutil_error_messages[AXIS2_ERROR_SOAP_FAULT_ROLE_ELEMENT_SHOULD_HAVE_A_TEXT] + = "SOAP fault role element should have a text value"; + axutil_error_messages[AXIS2_ERROR_SOAP_FAULT_VALUE_SHOULD_BE_PRESENT_BEFORE_SUB_CODE] + = "SOAP fault value should be present before sub-code element in SOAP fault code"; + axutil_error_messages[AXIS2_ERROR_SOAP_MESSAGE_DOES_NOT_CONTAIN_AN_ENVELOPE] + = "SOAP message does not contain a SOAP envelope element"; + axutil_error_messages[AXIS2_ERROR_SOAP_MESSAGE_FIRST_ELEMENT_MUST_CONTAIN_LOCAL_NAME] + = "SOAP message's first element should have a localname"; + axutil_error_messages[AXIS2_ERROR_THIS_LOCALNAME_IS_NOT_SUPPORTED_INSIDE_THE_REASON_ELEMENT] + = "Localname not supported inside a reason element"; + axutil_error_messages[AXIS2_ERROR_THIS_LOCALNAME_IS_NOT_SUPPORTED_INSIDE_THE_SUB_CODE_ELEMENT] + = "Localname not supported inside the sub-code element"; + axutil_error_messages[AXIS2_ERROR_THIS_LOCALNAME_NOT_SUPPORTED_INSIDE_THE_CODE_ELEMENT] + = "Localname not supported inside the code element"; + axutil_error_messages[AXIS2_ERROR_TRANSPORT_LEVEL_INFORMATION_DOES_NOT_MATCH_WITH_SOAP] + = "Transport identified SOAP version does not match with SOAP message version"; + axutil_error_messages[AXIS2_ERROR_UNSUPPORTED_ELEMENT_IN_SOAP_FAULT_ELEMENT] + = "Unsupported element found in SOAP fault element"; + axutil_error_messages[AXIS2_ERROR_WRONG_ELEMENT_ORDER_ENCOUNTERED] + = "Wrong element order encountered "; + /* services */ + axutil_error_messages[AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST] + = "Invalid XML format in request"; + axutil_error_messages[AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL] + = "Input OM node NULL, Probably error in SOAP request"; + axutil_error_messages[AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST] + = "Invalid parameters for service operation in SOAP request"; + + axutil_error_messages[AXIS2_ERROR_WSDL_SCHEMA_IS_NULL] = "Schema is NULL"; + + /* repos */ + axutil_error_messages[AXIS2_ERROR_REPOS_NOT_AUTHENTICATED] = "Not authenticated"; + axutil_error_messages[AXIS2_ERROR_REPOS_UNSUPPORTED_MODE] = "Unsupported mode"; + axutil_error_messages[AXIS2_ERROR_REPOS_EXPIRED] = "Expired"; + axutil_error_messages[AXIS2_ERROR_REPOS_NOT_IMPLEMENTED] = "Not implemented"; + axutil_error_messages[AXIS2_ERROR_REPOS_NOT_FOUND] = "Not found"; + axutil_error_messages[AXIS2_ERROR_REPOS_BAD_SEARCH_TEXT] = "Bad search text"; + + /* neethi */ + axutil_error_messages[AXIS2_ERROR_NEETHI_ELEMENT_WITH_NO_NAMESPACE] + = "Element with no namespace"; + axutil_error_messages[AXIS2_ERROR_NEETHI_POLICY_CREATION_FAILED_FROM_ELEMENT] + = "Policy creation failed from element"; + axutil_error_messages[AXIS2_ERROR_NEETHI_ALL_CREATION_FAILED_FROM_ELEMENT] + = "All creation failed from element"; + axutil_error_messages[AXIS2_ERROR_NEETHI_EXACTLYONE_CREATION_FAILED_FROM_ELEMENT] + = "Exactly one creation failed from element"; + axutil_error_messages[AXIS2_ERROR_NEETHI_REFERENCE_CREATION_FAILED_FROM_ELEMENT] + = "Reference creation failed from element"; + axutil_error_messages[AXIS2_ERROR_NEETHI_ASSERTION_CREATION_FAILED_FROM_ELEMENT] + = "Assertion creation failed from element"; + axutil_error_messages[AXIS2_ERROR_NEETHI_ALL_CREATION_FAILED] = "All creation failed"; + axutil_error_messages[AXIS2_ERROR_NEETHI_EXACTLYONE_CREATION_FAILED] + = "Exactly one creation failed"; + axutil_error_messages[AXIS2_ERROR_NEETHI_POLICY_CREATION_FAILED] = "Policy creation failed"; + axutil_error_messages[AXIS2_ERROR_NEETHI_NORMALIZATION_FAILED] = "Normalization failed"; + axutil_error_messages[AXIS2_ERROR_NEETHI_WRONG_INPUT_FOR_MERGE] = "Wrong input for merge"; + axutil_error_messages[AXIS2_ERROR_NEETHI_CROSS_PRODUCT_FAILED] = "Cross product failed"; + axutil_error_messages[AXIS2_ERROR_NEETHI_NO_CHILDREN_POLICY_COMPONENTS] + = "No children policy components"; + axutil_error_messages[AXIS2_ERROR_NEETHI_URI_NOT_SPECIFIED] = "Reference URI not specified"; + axutil_error_messages[AXIS2_ERROR_NEETHI_NO_ENTRY_FOR_THE_GIVEN_URI] + = "No entry for the given URI"; + axutil_error_messages[AXIS2_ERROR_NEETHI_EXACTLYONE_NOT_FOUND_IN_NORMALIZED_POLICY] + = "Exactly one not found in normalized policy"; + axutil_error_messages[AXIS2_ERROR_NEETHI_EXACTLYONE_IS_EMPTY] = "Exactly one is empty"; + axutil_error_messages[AXIS2_ERROR_NEETHI_ALL_NOT_FOUND_WHILE_GETTING_CROSS_PRODUCT] + = "All not found while getting cross product"; + axutil_error_messages[AXIS2_ERROR_NEETHI_UNKNOWN_ASSERTION] = "Unknown Assertion"; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_error_t *AXIS2_CALL +axutil_error_create( + axutil_allocator_t * allocator) +{ + axutil_error_t *error; + if(!allocator) + return NULL; + + error = (axutil_error_t *)AXIS2_MALLOC(allocator, sizeof(axutil_error_t)); + memset(error, 0, sizeof(axutil_error_t)); + + if(!error) + return NULL; + + error->allocator = allocator; + error->status_code = AXIS2_SUCCESS; + + return error; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axutil_error_get_message( + const axutil_error_t * error) +{ + const axis2_char_t *message = NULL; + if(error) + { + if(error->error_number > AXIS2_ERROR_NONE && error->error_number < AXUTIL_ERROR_MAX) /* TODO; This needs to be + fixed to include module defined and user defined errors */ + message = axutil_error_messages[error->error_number]; + else + { + if(error->message) + { + message = error->message; + } + else if(error->error_number == AXIS2_ERROR_NONE) + { + message = axutil_error_messages[AXIS2_ERROR_NONE]; + } + else + { + message = "Undefined error returned by business logic implementation"; + } + } + } + + return message; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_error_set_error_number( + axutil_error_t * error, + axutil_error_codes_t error_number) +{ + if(!error) + return AXIS2_FAILURE; + error->error_number = error_number; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_error_set_status_code( + axutil_error_t * error, + axis2_status_codes_t status_code) +{ + if(!error) + return AXIS2_FAILURE; + error->status_code = status_code; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_error_get_status_code( + axutil_error_t * error) +{ + if(error) + return error->status_code; + else + return AXIS2_CRITICAL_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_error_set_error_message( + axutil_error_t * error, + axis2_char_t * message) +{ + if(message && error) + { + error->message = message; + return AXIS2_SUCCESS; + } + + return AXIS2_FAILURE; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_error_free( + axutil_error_t * error) +{ + if(error) + { + AXIS2_FREE(error->allocator, error); + } + return; +} + diff --git a/util/src/file.c b/util/src/file.c new file mode 100644 index 0000000..2ecd2d4 --- /dev/null +++ b/util/src/file.c @@ -0,0 +1,188 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axutil_file +{ + axis2_char_t *name; + axis2_char_t *path; + AXIS2_TIME_T timestamp; +}; + +AXIS2_EXTERN axutil_file_t *AXIS2_CALL +axutil_file_create( + const axutil_env_t *env) +{ + axutil_file_t *file = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + file = (axutil_file_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_file_t)); + + if(!file) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + file->name = NULL; + file->path = NULL; + file->timestamp = 0; + + return file; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_file_free( + axutil_file_t *file, + const axutil_env_t *env) +{ + if(file->name) + { + AXIS2_FREE(env->allocator, file->name); + } + + if(file->path) + { + AXIS2_FREE(env->allocator, file->path); + } + + if(file) + { + AXIS2_FREE(env->allocator, file); + } + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_file_set_name( + axutil_file_t *file, + const axutil_env_t *env, + axis2_char_t *name) +{ + AXIS2_PARAM_CHECK(env->error, name, AXIS2_FAILURE); + + if(file->name) + { + AXIS2_FREE(env->allocator, file->name); + file->name = NULL; + } + file->name = axutil_strdup(env, name); + if(!file->name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_file_get_name( + axutil_file_t *file, + const axutil_env_t *env) +{ + if(!file->name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_FILE_NAME_NOT_SET, AXIS2_FAILURE); + return NULL; + } + return (file->name); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_file_set_path( + axutil_file_t *file, + const axutil_env_t *env, + axis2_char_t *path) +{ + if(!path) + { + return AXIS2_SUCCESS; + } + + if(file->path) + { + AXIS2_FREE(env->allocator, file->path); + file->path = NULL; + } + file->path = axutil_strdup(env, path); + if(!(file->path)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_file_get_path( + axutil_file_t *file, + const axutil_env_t *env) +{ + if(!(file->path)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_FILE_NAME_NOT_SET, AXIS2_FAILURE); + return NULL; + } + + return (file->path); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_file_set_timestamp( + axutil_file_t *file, + const axutil_env_t *env, + AXIS2_TIME_T timestamp) +{ + file->timestamp = timestamp; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN AXIS2_TIME_T AXIS2_CALL +axutil_file_get_timestamp( + axutil_file_t *file, + const axutil_env_t *env) +{ + return file->timestamp; +} + +AXIS2_EXTERN axutil_file_t *AXIS2_CALL +axutil_file_clone( + axutil_file_t *file, + const axutil_env_t *env) +{ + axutil_file_t *new_file = NULL; + axis2_status_t status = AXIS2_FAILURE; + new_file = axutil_file_create(env); + status = axutil_file_set_name(new_file, env, file->name); + if(AXIS2_SUCCESS != status) + { + return NULL; + } + status = axutil_file_set_path(new_file, env, file->path); + if(AXIS2_SUCCESS != status) + { + return NULL; + } + axutil_file_set_timestamp(new_file, env, file->timestamp); + return new_file; +} + diff --git a/util/src/file_handler.c b/util/src/file_handler.c new file mode 100644 index 0000000..61064c1 --- /dev/null +++ b/util/src/file_handler.c @@ -0,0 +1,121 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +#include + +AXIS2_EXTERN void *AXIS2_CALL +axutil_file_handler_open( + const axis2_char_t *file_name, + const axis2_char_t *options) +{ + FILE *file_ptr; + + if(!file_name) + return NULL; + + if(!options) + return NULL; + + file_ptr = fopen(file_name, options); + return file_ptr; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_file_handler_close( + void *file_ptr) +{ + int status = 0; + + if(!file_ptr) + return AXIS2_FAILURE; + + status = fclose(file_ptr); + + /*if successfully closed, it will return 0. otherwise EOF is returned */ + if(status != 0) + { + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_file_handler_access( + const axis2_char_t *path, + int mode) +{ + int i = 0; + axis2_status_t status = AXIS2_FAILURE; + i = AXIS2_ACCESS(path, mode); + if(0 == i) + { + status = AXIS2_SUCCESS; + } + else if(-1 == i) + { + status = AXIS2_FAILURE; + } + return status; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_file_handler_copy( + FILE *from, + FILE *to) +{ + axis2_char_t ch; + + /* It is assumed that source and destination files are accessible and open*/ + while(!feof(from)) + { + ch = (axis2_char_t)fgetc(from); + /* We are sure that the conversion is safe */ + if(ferror(from)) + { + /* Error reading source file */ + return AXIS2_FAILURE; + } + if(!feof(from)) + fputc(ch, to); + if(ferror(to)) + { + /* Error writing destination file */ + return AXIS2_FAILURE; + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN long AXIS2_CALL +axutil_file_handler_size( + const axis2_char_t * const name) +{ + struct stat stbuf; + if(stat(name, &stbuf) == -1) + { + /* The file could not be accessed */ + return AXIS2_FAILURE; + } + return stbuf.st_size; +} + diff --git a/util/src/generic_obj.c b/util/src/generic_obj.c new file mode 100644 index 0000000..883fcb1 --- /dev/null +++ b/util/src/generic_obj.c @@ -0,0 +1,119 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct axutil_generic_obj +{ + AXIS2_FREE_VOID_ARG free_func; + int type; + void *value; +}; + +AXIS2_EXTERN axutil_generic_obj_t *AXIS2_CALL +axutil_generic_obj_create( + const axutil_env_t *env) +{ + axutil_generic_obj_t *generic_obj = NULL; + AXIS2_ENV_CHECK(env, NULL); + + generic_obj + = (axutil_generic_obj_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_generic_obj_t)); + + if(!generic_obj) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + generic_obj->value = NULL; + generic_obj->free_func = 0; + + return generic_obj; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_generic_obj_free( + axutil_generic_obj_t *generic_obj, + const axutil_env_t *env) +{ + if(generic_obj->value) + { + if(generic_obj->free_func) + { + generic_obj->free_func(generic_obj->value, env); + } + else + { + AXIS2_FREE(env->allocator, generic_obj->value); + } + + } + + if(generic_obj) + { + AXIS2_FREE(env->allocator, generic_obj); + } + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_generic_obj_set_free_func( + axutil_generic_obj_t *generic_obj, + const axutil_env_t *env, + AXIS2_FREE_VOID_ARG free_func) +{ + generic_obj->free_func = free_func; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_generic_obj_set_value( + axutil_generic_obj_t *generic_obj, + const axutil_env_t *env, + void *value) +{ + generic_obj->value = value; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_generic_obj_get_value( + axutil_generic_obj_t *generic_obj, + const axutil_env_t *env) +{ + return generic_obj->value; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_generic_obj_set_type( + axutil_generic_obj_t *generic_obj, + const axutil_env_t *env, + int type) +{ + generic_obj->type = type; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_generic_obj_get_type( + axutil_generic_obj_t *generic_obj, + const axutil_env_t *env) +{ + return generic_obj->type; +} + diff --git a/util/src/hash.c b/util/src/hash.c new file mode 100644 index 0000000..77cea73 --- /dev/null +++ b/util/src/hash.c @@ -0,0 +1,671 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "axutil_hash.h" + +#include +#include + +/* + * The internal form of a hash table. + * + * The table is an array indexed by the hash of the key; collisions + * are resolved by hanging a linked list of hash entries off each + * element of the array. Although this is a really simple design it + * isn't too bad given that environments have a low allocation overhead. + */ + +typedef struct axutil_hash_entry_t axutil_hash_entry_t; + +struct axutil_hash_entry_t +{ + axutil_hash_entry_t *next; + unsigned int hash; + const void *key; + axis2_ssize_t klen; + const void *val; +}; + +/* + * Data structure for iterating through a hash table. + * We keep a pointer to the next hash entry here to allow the current + * hash entry to be freed or otherwise mangled between calls to + * axutil_hash_next(). + */ +struct axutil_hash_index_t +{ + axutil_hash_t *ht; + axutil_hash_entry_t *this, *next; + unsigned int index; +}; + +/* + * The size of the array is always a power of two. We use the maximum + * index rather than the size so that we can use bitwise-AND for + * modular arithmetic. + * The count of hash entries may be greater depending on the chosen + * collision rate. + */ +struct axutil_hash_t +{ + const axutil_env_t *env; + axutil_hash_entry_t **array; + axutil_hash_index_t iterator; /* For axutil_hash_first(NULL, ...) */ + unsigned int count; + unsigned int max; + axutil_hashfunc_t hash_func; + axutil_hash_entry_t *free; /* List of recycled entries */ +}; + +#define INITIAL_MAX 15 /* tunable == 2^n - 1 */ + +/* + * Hash creation functions. + */ + +static axutil_hash_entry_t ** +axutil_hash_alloc_array( + axutil_hash_t *ht, + unsigned int max) +{ + return memset(AXIS2_MALLOC(ht->env->allocator, sizeof(*ht->array) * (max + 1)), 0, + sizeof(*ht->array) * (max + 1)); +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axutil_hash_make( + const axutil_env_t *env) +{ + axutil_hash_t *ht; + AXIS2_ENV_CHECK(env, NULL); + + ht = AXIS2_MALLOC(env->allocator, sizeof(axutil_hash_t)); + if(!ht) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + axutil_env_increment_ref((axutil_env_t*)env); + ht->env = env; + ht->free = NULL; + ht->count = 0; + ht->max = INITIAL_MAX; + ht->array = axutil_hash_alloc_array(ht, ht->max); + ht->hash_func = axutil_hashfunc_default; + return ht; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axutil_hash_make_custom( + const axutil_env_t *env, + axutil_hashfunc_t hash_func) +{ + axutil_hash_t *ht; + AXIS2_ENV_CHECK(env, NULL); + ht = axutil_hash_make(env); + if(ht) + { + ht->hash_func = hash_func; + } + return ht; +} + +/* + * Hash iteration functions. + */ + +AXIS2_EXTERN axutil_hash_index_t *AXIS2_CALL +axutil_hash_next( + const axutil_env_t *env, + axutil_hash_index_t *hi) +{ + hi->this = hi->next; + while(!hi->this) + { + if(hi->index > hi->ht->max) + { + if(env) + AXIS2_FREE(env->allocator, hi); + return NULL; + } + + hi->this = hi->ht->array[hi->index++]; + } + hi->next = hi->this->next; + return hi; +} + +AXIS2_EXTERN axutil_hash_index_t *AXIS2_CALL +axutil_hash_first( + axutil_hash_t *ht, + const axutil_env_t *env) +{ + axutil_hash_index_t *hi; + if(env) + hi = AXIS2_MALLOC(env->allocator, sizeof(*hi)); + else + hi = &ht->iterator; + + hi->ht = ht; + hi->index = 0; + hi->this = NULL; + hi->next = NULL; + return axutil_hash_next(env, hi); +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_hash_this( + axutil_hash_index_t *hi, + const void **key, + axis2_ssize_t *klen, + void **val) +{ + if(key) + *key = hi->this->key; + if(klen) + *klen = hi->this->klen; + if(val) + *val = (void *)hi->this->val; +} + +/* + * Expanding a hash table + */ + +static void +axutil_hash_expand_array( + axutil_hash_t *ht) +{ + axutil_hash_index_t *hi; + + axutil_hash_entry_t **new_array; + unsigned int new_max; + + new_max = ht->max * 2 + 1; + new_array = axutil_hash_alloc_array(ht, new_max); + for(hi = axutil_hash_first(ht, NULL); hi; hi = axutil_hash_next(NULL, hi)) + { + unsigned int i = hi->this->hash & new_max; + hi->this->next = new_array[i]; + new_array[i] = hi->this; + } + AXIS2_FREE(ht->env->allocator, ht->array); + ht->array = new_array; + ht->max = new_max; +} + +unsigned int +axutil_hashfunc_default( + const char *char_key, + axis2_ssize_t *klen) +{ + unsigned int hash = 0; + const unsigned char *key = (const unsigned char *)char_key; + const unsigned char *p; + axis2_ssize_t i; + + /* + * This is the popular `times 33' hash algorithm which is used by + * perl and also appears in Berkeley DB. This is one of the best + * known hash functions for strings because it is both computed + * very fast and distributes very well. + * + * The originator may be Dan Bernstein but the code in Berkeley DB + * cites Chris Torek as the source. The best citation I have found + * is "Chris Torek, Hash function for text in C, Usenet message + * <27038@mimsy.umd.edu> in comp.lang.c , October, 1990." in Rich + * Salz's USENIX 1992 paper about INN which can be found at + * . + * + * The magic of number 33, i.e. why it works better than many other + * constants, prime or not, has never been adequately explained by + * anyone. So I try an explanation: if one experimentally tests all + * multipliers between 1 and 256 (as I did while writing a low-level + * data structure library some time ago) one detects that even + * numbers are not useable at all. The remaining 128 odd numbers + * (except for the number 1) work more or less all equally well. + * They all distribute in an acceptable way and this way fill a hash + * table with an average percent of approx. 86%. + * + * If one compares the chi^2 values of the variants (see + * Bob Jenkins ``Hashing Frequently Asked Questions'' at + * http://burtleburtle.net/bob/hash/hashfaq.html for a description + * of chi^2), the number 33 not even has the best value. But the + * number 33 and a few other equally good numbers like 17, 31, 63, + * 127 and 129 have nevertheless a great advantage to the remaining + * numbers in the large set of possible multipliers: their multiply + * op can be replaced by a faster op based on just one + * shift plus either a single addition or subtraction op. And + * because a hash function has to both distribute good _and_ has to + * be very fast to compute, those few numbers should be preferred. + * + * -- Ralf S. Engelschall + */ + + if(*klen == AXIS2_HASH_KEY_STRING) + { + for(p = key; *p; p++) + { + hash = hash * 33 + *p; + } + *klen = (axis2_ssize_t)(p - key); + /* We are sure that the difference lies within the axis2_ssize_t range */ + } + else + { + for(p = key, i = *klen; i; i--, p++) + { + hash = hash * 33 + *p; + } + } + + return hash; +} + +/* + * This is where we keep the details of the hash function and control + * the maximum collision rate. + * + * If val is non-NULL it creates and initializes a new hash entry if + * there isn't already one there; it returns an updatable pointer so + * that hash entries can be removed. + */ + +static axutil_hash_entry_t ** +axutil_hash_find_entry( + axutil_hash_t *ht, + const void *key, + axis2_ssize_t klen, + const void *val) +{ + axutil_hash_entry_t **hep, *he; + unsigned int hash; + + hash = ht->hash_func(key, &klen); + + /* scan linked list */ + for(hep = &ht->array[hash & ht->max], he = *hep; he; hep = &he->next, he = *hep) + { + if(he->hash == hash && he->klen == klen && memcmp(he->key, key, klen) == 0) + break; + } + + if(he || !val) + return hep; + + /* add a new entry for non-NULL values */ + he = ht->free; + if(he) + ht->free = he->next; + else + he = AXIS2_MALLOC(ht->env->allocator, sizeof(*he)); + he->next = NULL; + he->hash = hash; + he->key = key; + he->klen = klen; + he->val = val; + *hep = he; + ht->count++; + return hep; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axutil_hash_copy( + const axutil_hash_t *orig, + const axutil_env_t *env) +{ + axutil_hash_t *ht; + axutil_hash_entry_t *new_vals; + unsigned int i, j; + + ht = AXIS2_MALLOC(env->allocator, sizeof(axutil_hash_t) + sizeof(*ht->array) * (orig->max + 1) + + sizeof(axutil_hash_entry_t) * orig->count); + ht->env = env; + axutil_env_increment_ref((axutil_env_t*)env); + ht->free = NULL; + ht->count = orig->count; + ht->max = orig->max; + ht->hash_func = orig->hash_func; + ht->array = (axutil_hash_entry_t **)((char *)ht + sizeof(axutil_hash_t)); + + new_vals = (axutil_hash_entry_t *)((char *)(ht) + sizeof(axutil_hash_t) + sizeof(*ht->array) + * (orig->max + 1)); + j = 0; + for(i = 0; i <= ht->max; i++) + { + axutil_hash_entry_t **new_entry = &(ht->array[i]); + axutil_hash_entry_t *orig_entry = orig->array[i]; + while(orig_entry) + { + *new_entry = &new_vals[j++]; + (*new_entry)->hash = orig_entry->hash; + (*new_entry)->key = orig_entry->key; + (*new_entry)->klen = orig_entry->klen; + (*new_entry)->val = orig_entry->val; + new_entry = &((*new_entry)->next); + orig_entry = orig_entry->next; + } + *new_entry = NULL; + } + return ht; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_hash_get( + axutil_hash_t *ht, + const void *key, + axis2_ssize_t klen) +{ + axutil_hash_entry_t *he; + he = *axutil_hash_find_entry(ht, key, klen, NULL); + if(he) + return (void *)he->val; + else + return NULL; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_hash_set( + axutil_hash_t *ht, + const void *key, + axis2_ssize_t klen, + const void *val) +{ + axutil_hash_entry_t **hep; + hep = axutil_hash_find_entry(ht, key, klen, val); + if(*hep) + { + if(!val) + { + /* delete entry */ + axutil_hash_entry_t *old = *hep; + *hep = (*hep)->next; + old->next = ht->free; + ht->free = old; + --ht->count; + } + else + { + /* replace entry */ + (*hep)->val = val; + /* check that the collision rate isn't too high */ + if(ht->count > ht->max) + { + axutil_hash_expand_array(ht); + } + } + } + /* else key not present and val==NULL */ +} + +AXIS2_EXTERN unsigned int AXIS2_CALL +axutil_hash_count( + axutil_hash_t *ht) +{ + return ht->count; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axutil_hash_overlay( + const axutil_hash_t *overlay, + const axutil_env_t *env, + const axutil_hash_t *base) +{ + return axutil_hash_merge(overlay, env, base, NULL, NULL); +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axutil_hash_merge( + const axutil_hash_t *overlay, + const axutil_env_t *env, + const axutil_hash_t *base, + void * + (*merger)( + const axutil_env_t *env, + const void *key, + axis2_ssize_t klen, + const void *h1_val, + const void *h2_val, + const void *data), + const void *data) +{ + axutil_hash_t *res; + axutil_hash_entry_t *new_vals = NULL; + axutil_hash_entry_t *iter; + axutil_hash_entry_t *ent; + unsigned int i, k; + +#if AXIS2_POOL_DEBUG + /* we don't copy keys and values, so it's necessary that + * overlay->a.env and base->a.env have a life span at least + * as long as p + */ + if (!axutil_env_is_ancestor(overlay->env, p)) + { + fprintf(stderr, + "axutil_hash_merge: overlay's env is not an ancestor of p\n"); + abort(); + } + if (!axutil_env_is_ancestor(base->env, p)) + { + fprintf(stderr, + "axutil_hash_merge: base's env is not an ancestor of p\n"); + abort(); + } +#endif + + res = AXIS2_MALLOC(env->allocator, sizeof(axutil_hash_t)); + res->env = env; + axutil_env_increment_ref((axutil_env_t*)env); + res->free = NULL; + res->hash_func = base->hash_func; + res->count = base->count; + res->max = (overlay->max > base->max) ? overlay->max : base->max; + if(base->count + overlay->count > res->max) + { + res->max = res->max * 2 + 1; + } + res->array = axutil_hash_alloc_array(res, res->max); + for(k = 0; k <= base->max; k++) + { + for(iter = base->array[k]; iter; iter = iter->next) + { + i = iter->hash & res->max; + new_vals = AXIS2_MALLOC(env->allocator, sizeof(axutil_hash_entry_t)); + new_vals->klen = iter->klen; + new_vals->key = iter->key; + new_vals->val = iter->val; + new_vals->hash = iter->hash; + new_vals->next = res->array[i]; + res->array[i] = new_vals; + } + } + + for(k = 0; k <= overlay->max; k++) + { + for(iter = overlay->array[k]; iter; iter = iter->next) + { + i = iter->hash & res->max; + for(ent = res->array[i]; ent; ent = ent->next) + { + if((ent->klen == iter->klen) && (memcmp(ent->key, iter->key, iter->klen) == 0)) + { + if(merger) + { + ent->val = (*merger)(env, iter->key, iter->klen, iter->val, ent->val, data); + } + else + { + ent->val = iter->val; + } + break; + } + } + if(!ent) + { + new_vals = AXIS2_MALLOC(env->allocator, sizeof(axutil_hash_entry_t)); + new_vals->klen = iter->klen; + new_vals->key = iter->key; + new_vals->val = iter->val; + new_vals->hash = iter->hash; + new_vals->next = res->array[i]; + res->array[i] = new_vals; + res->count++; + } + } + } + return res; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_hash_contains_key( + axutil_hash_t *ht, + const axutil_env_t *env, + const axis2_char_t *key) +{ + axutil_hash_index_t *i = NULL; + + for(i = axutil_hash_first(ht, env); i; i = axutil_hash_next(env, i)) + { + const void *v = NULL; + const axis2_char_t *key_l = NULL; + + axutil_hash_this(i, &v, NULL, NULL); + key_l = (const axis2_char_t *)v; + if(0 == axutil_strcmp(key, key_l)) + return AXIS2_TRUE; + } + + return AXIS2_FALSE; +} + +/* + void + axutil_hash_entry_free( + const axutil_env_t *env, + axutil_hash_entry_t *hash_entry) + { + if (!hash_entry) + return; + if (hash_entry->next) + { + axutil_hash_entry_free(env, hash_entry->next); + } + AXIS2_FREE(env->allocator, hash_entry); + return; + } + */ + +AXIS2_EXTERN void AXIS2_CALL +axutil_hash_free( + axutil_hash_t *ht, + const axutil_env_t *env) +{ + unsigned int i = 0; + if(ht) + { + for(i = 0; i <= ht->max; i++) + { + axutil_hash_entry_t *next = NULL; + axutil_hash_entry_t *current = ht->array[i]; + while(current) + { + next = current->next; + AXIS2_FREE(env->allocator, current); + current = NULL; + current = next; + } + } + if(ht->free) + { + axutil_hash_entry_t *next = NULL; + axutil_hash_entry_t *current = ht->free; + while(current) + { + next = current->next; + AXIS2_FREE(env->allocator, current); + current = NULL; + current = next; + } + } + + if(ht->env) + { + /*since we now keep a ref count in env and incrementing it + *inside hash_make we need to free the env.Depending on the + situation the env struct is freed or ref count will be + decremented.*/ + + axutil_free_thread_env((axutil_env_t*)(ht->env)); + ht->env = NULL; + } + + AXIS2_FREE(env->allocator, (ht->array)); + AXIS2_FREE(env->allocator, ht); + } + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_hash_free_void_arg( + void *ht_void, + const axutil_env_t *env) +{ + unsigned int i = 0; + axutil_hash_t *ht = (axutil_hash_t *)ht_void; + if(ht) + { + for(i = 0; i < ht->max; i++) + { + axutil_hash_entry_t *next = NULL; + axutil_hash_entry_t *current = ht->array[i]; + while(current) + { + next = current->next; + AXIS2_FREE(env->allocator, current); + current = next; + } + } + AXIS2_FREE(env->allocator, (ht->array)); + AXIS2_FREE(env->allocator, ht); + } + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_hash_set_env( + axutil_hash_t * ht, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(ht) + { + if(ht->env) + { + /*since we now keep a ref count in env and incrementing it + *inside hash_make we need to free the env.Depending on the + situation the env struct is freed or ref count will be + decremented.*/ + + axutil_free_thread_env((axutil_env_t*)(ht->env)); + ht->env = NULL; + } + ht->env = env; + axutil_env_increment_ref((axutil_env_t*)env); + } +} + diff --git a/util/src/http_chunked_stream.c b/util/src/http_chunked_stream.c new file mode 100644 index 0000000..3a04ca2 --- /dev/null +++ b/util/src/http_chunked_stream.c @@ -0,0 +1,232 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#define AXIS2_HTTP_CRLF "\r\n" + +struct axutil_http_chunked_stream +{ + axutil_stream_t *stream; + int current_chunk_size; + int unread_len; + axis2_bool_t end_of_chunks; + axis2_bool_t chunk_started; +}; + +static axis2_status_t +axutil_http_chunked_stream_start_chunk( + axutil_http_chunked_stream_t * chunked_stream, + const axutil_env_t *env); + +AXIS2_EXTERN axutil_http_chunked_stream_t *AXIS2_CALL +axutil_http_chunked_stream_create( + const axutil_env_t *env, + axutil_stream_t *stream) +{ + axutil_http_chunked_stream_t *chunked_stream = NULL; + AXIS2_PARAM_CHECK(env->error, stream, NULL); + + chunked_stream = (axutil_http_chunked_stream_t *)AXIS2_MALLOC(env->allocator, + sizeof(axutil_http_chunked_stream_t)); + if(!chunked_stream) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + chunked_stream->stream = stream; + chunked_stream->current_chunk_size = -1; + chunked_stream->unread_len = -1; + chunked_stream->end_of_chunks = AXIS2_FALSE; + chunked_stream->chunk_started = AXIS2_FALSE; + + return chunked_stream; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_http_chunked_stream_free( + axutil_http_chunked_stream_t *chunked_stream, + const axutil_env_t *env) +{ + AXIS2_FREE(env->allocator, chunked_stream); +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_http_chunked_stream_read( + axutil_http_chunked_stream_t *chunked_stream, + const axutil_env_t *env, + void *buffer, + size_t count) +{ + int len = -1; + int yet_to_read = 0; + axutil_stream_t *stream = chunked_stream->stream; + + if(!buffer) + { + return -1; + } + if(!stream) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NULL_STREAM_IN_CHUNKED_STREAM, AXIS2_FAILURE); + return -1; + } + if(AXIS2_TRUE == chunked_stream->end_of_chunks) + { + return 0; + } + if(AXIS2_FALSE == chunked_stream->chunk_started) + { + axutil_http_chunked_stream_start_chunk(chunked_stream, env); + } + yet_to_read = (int)count; + /* We are sure that the difference lies within the int range */ + while(AXIS2_FALSE == chunked_stream->end_of_chunks && yet_to_read > 0) + { + if(chunked_stream->unread_len < yet_to_read) + { + len = axutil_stream_read(chunked_stream->stream, env, (axis2_char_t *)buffer + count + - yet_to_read, chunked_stream->unread_len); + yet_to_read -= len; + chunked_stream->unread_len -= len; + if(chunked_stream->unread_len <= 0) + { + axutil_http_chunked_stream_start_chunk(chunked_stream, env); + } + } + else + { + len = axutil_stream_read(chunked_stream->stream, env, (axis2_char_t *)buffer + count + - yet_to_read, yet_to_read); + yet_to_read -= len; + chunked_stream->unread_len -= len; + } + } + return ((int)count - yet_to_read); + /* We are sure that the difference lies within the int range */ +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_http_chunked_stream_write( + axutil_http_chunked_stream_t *chunked_stream, + const axutil_env_t *env, + const void *buffer, + size_t count) +{ + axutil_stream_t *stream = chunked_stream->stream; + int len = -1; + axis2_char_t tmp_buf[10]; + + if(!buffer) + { + return -1; + } + if(!stream) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NULL_STREAM_IN_CHUNKED_STREAM, AXIS2_FAILURE); + return -1; + } + sprintf(tmp_buf, "%x%s", (unsigned int)count, AXIS2_HTTP_CRLF); + axutil_stream_write(stream, env, tmp_buf, axutil_strlen(tmp_buf)); + len = axutil_stream_write(stream, env, buffer, count); + axutil_stream_write(stream, env, AXIS2_HTTP_CRLF, 2); + return len; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_http_chunked_stream_get_current_chunk_size( + const axutil_http_chunked_stream_t *chunked_stream, + const axutil_env_t *env) +{ + return chunked_stream->current_chunk_size; +} + +static axis2_status_t +axutil_http_chunked_stream_start_chunk( + axutil_http_chunked_stream_t *chunked_stream, + const axutil_env_t *env) +{ + axis2_char_t tmp_buf[3] = ""; + axis2_char_t str_chunk_len[512] = ""; + axis2_char_t *tmp = NULL; + int read = -1; + + /* remove the last CRLF of the previous chunk if any */ + if(AXIS2_TRUE == chunked_stream->chunk_started) + { + read = axutil_stream_read(chunked_stream->stream, env, tmp_buf, 2); + chunked_stream->chunk_started = AXIS2_FALSE; + } + /* read the len and chunk extension */ + while((read = axutil_stream_read(chunked_stream->stream, env, tmp_buf, 1)) > 0) + { + tmp_buf[read] = '\0'; + strcat(str_chunk_len, tmp_buf); + if(0 != strstr(str_chunk_len, AXIS2_HTTP_CRLF)) + { + break; + } + } + /* check whether we have extensions */ + tmp = strchr(str_chunk_len, ';'); + if(tmp) + { + /* we don't use extensions right now */ + *tmp = '\0'; + } + chunked_stream->current_chunk_size = strtol(str_chunk_len, NULL, 16); + if(0 == chunked_stream->current_chunk_size) + { + /* Read the last CRLF */ + read = axutil_stream_read(chunked_stream->stream, env, tmp_buf, 2); + chunked_stream->end_of_chunks = AXIS2_TRUE; + } + else + { + chunked_stream->chunk_started = AXIS2_TRUE; + chunked_stream->unread_len = chunked_stream->current_chunk_size; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_http_chunked_stream_write_last_chunk( + axutil_http_chunked_stream_t *chunked_stream, + const axutil_env_t *env) +{ + axutil_stream_t *stream = NULL; + + stream = chunked_stream->stream; + if(axutil_stream_write(stream, env, "0\r\n\r\n", 5) == 5) + { + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_http_chunked_stream_get_end_of_chunks( + axutil_http_chunked_stream_t *chunked_stream, + const axutil_env_t *env) +{ + return chunked_stream->end_of_chunks; +} + diff --git a/util/src/linked_list.c b/util/src/linked_list.c new file mode 100644 index 0000000..7ba83f8 --- /dev/null +++ b/util/src/linked_list.c @@ -0,0 +1,573 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axutil_linked_list +{ + + /**The number of elements in this list. */ + int size; + + /** + * The first element in the list. + */ + entry_t *first; + + /** + * The last element in the list. + */ + entry_t *last; + + /** + * A count of the number of structural modifications that have been made to + * the list (that is, insertions and removals). Structural modifications + * are ones which change the list size or affect how iterations would + * behave. This field is available for use by Iterator and ListIterator, + * in order to set an error code in response + * to the next op on the iterator. This fail-fast behavior + * saves the user from many subtle bugs otherwise possible from concurrent + * modification during iteration. + *

+ * + * To make lists fail-fast, increment this field by just 1 in the + * add(int, Object) and remove(int) methods. + * Otherwise, this field may be ignored. + */ + int mod_count; +}; + +AXIS2_EXTERN axutil_linked_list_t *AXIS2_CALL +axutil_linked_list_create( + const axutil_env_t *env) +{ + axutil_linked_list_t *linked_list = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + linked_list = AXIS2_MALLOC(env->allocator, sizeof(axutil_linked_list_t)); + if(!linked_list) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + linked_list->size = 0; + linked_list->mod_count = 0; + linked_list->first = NULL; + linked_list->last = NULL; + + return linked_list; +} + +static entry_t * +axutil_linked_list_create_entry( + const axutil_env_t *env, + void *data) +{ + entry_t *entry = (entry_t *)AXIS2_MALLOC(env->allocator, sizeof(entry_t)); + if(!entry) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + entry->data = data; + entry->previous = NULL; + entry->next = NULL; + return entry; +} + +static axis2_status_t +axutil_linked_list_add_last_entry( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + entry_t * e) +{ + AXIS2_PARAM_CHECK(env->error, e, AXIS2_FAILURE); + + linked_list->mod_count++; + if(linked_list->size == 0) + { + linked_list->first = linked_list->last = e; + } + else + { + e->previous = linked_list->last; + linked_list->last->next = e; + linked_list->last = e; + } + linked_list->size++; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_linked_list_free( + axutil_linked_list_t *linked_list, + const axutil_env_t *env) +{ + entry_t *current = NULL, *next = NULL; + + current = linked_list->first; + while(current) + { + next = current->next; + AXIS2_FREE(env->allocator, current); + current = next; + } + AXIS2_FREE(env->allocator, linked_list); + linked_list = NULL; +} + +AXIS2_EXTERN entry_t *AXIS2_CALL +axutil_linked_list_get_entry( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + int n) +{ + entry_t *e = NULL; + if(n < linked_list->size / 2) + { + e = linked_list->first; + /* n less than size/2, iterate from start */ + while(n > 0) + { + e = e->next; + n = n - 1; + } + } + else + { + e = linked_list->last; + /* n greater than size/2, iterate from end */ + while((n = n + 1) < linked_list->size) + { + e = e->previous; + } + } + + return e; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_linked_list_remove_entry( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + entry_t *e) +{ + AXIS2_PARAM_CHECK(env->error, e, AXIS2_FAILURE); + linked_list->mod_count++; + linked_list->size--; + if(linked_list->size == 0) + { + linked_list->first = linked_list->last = NULL; + } + else + { + if(e == linked_list->first) + { + linked_list->first = e->next; + e->next->previous = NULL; + } + else if(e == linked_list->last) + { + linked_list->last = e->previous; + e->previous->next = NULL; + } + else + { + e->next->previous = e->previous; + e->previous->next = e->next; + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_linked_list_check_bounds_inclusive( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + int index) +{ + if(index < 0 || index > linked_list->size) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INDEX_OUT_OF_BOUNDS, AXIS2_FAILURE); + return AXIS2_FALSE; + } + return AXIS2_TRUE; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_linked_list_check_bounds_exclusive( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + int index) +{ + if(index < 0 || index >= linked_list->size) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INDEX_OUT_OF_BOUNDS, AXIS2_FAILURE); + return AXIS2_FALSE; + } + return AXIS2_TRUE; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_linked_list_get_first( + axutil_linked_list_t *linked_list, + const axutil_env_t *env) +{ + if(linked_list->size == 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_SUCH_ELEMENT, AXIS2_FAILURE); + return NULL; + } + + return linked_list->first->data; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_linked_list_get_last( + axutil_linked_list_t *linked_list, + const axutil_env_t *env) +{ + if(linked_list->size == 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_SUCH_ELEMENT, AXIS2_FAILURE); + return NULL; + } + + return linked_list->last->data; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_linked_list_remove_first( + axutil_linked_list_t *linked_list, + const axutil_env_t *env) +{ + void *r; + + if(linked_list->size == 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_SUCH_ELEMENT, AXIS2_FAILURE); + return NULL; + } + + linked_list->mod_count++; + linked_list->size--; + r = linked_list->first->data; + + if(linked_list->first->next) + { + linked_list->first->next->previous = NULL; + } + else + { + linked_list->last = NULL; + } + + linked_list->first = linked_list->first->next; + + return r; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_linked_list_remove_last( + axutil_linked_list_t *linked_list, + const axutil_env_t *env) +{ + void *r = NULL; + + if(linked_list->size == 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_SUCH_ELEMENT, AXIS2_FAILURE); + return NULL; + } + + linked_list->mod_count++; + linked_list->size--; + r = linked_list->last->data; + + if(linked_list->last->previous) + { + linked_list->last->previous->next = NULL; + } + else + { + linked_list->first = NULL; + } + + linked_list->last = linked_list->last->previous; + + return r; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_linked_list_add_first( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + void *o) +{ + entry_t *e; + AXIS2_PARAM_CHECK(env->error, o, AXIS2_FAILURE); + + e = axutil_linked_list_create_entry(env, o); + + linked_list->mod_count++; + if(linked_list->size == 0) + { + linked_list->first = linked_list->last = e; + } + else + { + e->next = linked_list->first; + linked_list->first->previous = e; + linked_list->first = e; + } + linked_list->size++; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_linked_list_add_last( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + void *o) +{ + entry_t *e; + AXIS2_PARAM_CHECK(env->error, o, AXIS2_FAILURE); + + e = axutil_linked_list_create_entry(env, o); + return axutil_linked_list_add_last_entry(linked_list, env, e); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_linked_list_contains( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + void *o) +{ + entry_t *e; + AXIS2_PARAM_CHECK(env->error, o, AXIS2_FALSE); + + e = linked_list->first; + while(e) + { + if(o == e->data) + return AXIS2_TRUE; + e = e->next; + } + return AXIS2_FALSE; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_linked_list_size( + axutil_linked_list_t *linked_list, + const axutil_env_t *env) +{ + return linked_list->size; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_linked_list_add( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + void *o) +{ + entry_t *e; + AXIS2_PARAM_CHECK(env->error, o, AXIS2_FALSE); + e = axutil_linked_list_create_entry(env, o); + return axutil_linked_list_add_last_entry(linked_list, env, e); +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_linked_list_remove( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + void *o) +{ + entry_t *e; + AXIS2_PARAM_CHECK(env->error, o, AXIS2_FALSE); + + e = linked_list->first; + while(e) + { + if(o == e->data) + { + return axutil_linked_list_remove_entry(linked_list, env, e); + } + e = e->next; + } + return AXIS2_FALSE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_linked_list_clear( + axutil_linked_list_t *linked_list, + const axutil_env_t *env) +{ + if(linked_list->size > 0) + { + linked_list->mod_count++; + linked_list->first = NULL; + linked_list->last = NULL; + linked_list->size = 0; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_linked_list_get( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + int index) +{ + axutil_linked_list_check_bounds_exclusive(linked_list, env, index); + return axutil_linked_list_get_entry(linked_list, env, index)->data; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_linked_list_set( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + int index, + void *o) +{ + entry_t *e; + void *old; + AXIS2_PARAM_CHECK(env->error, o, NULL); + axutil_linked_list_check_bounds_exclusive(linked_list, env, index); + e = axutil_linked_list_get_entry(linked_list, env, index); + old = e->data; + e->data = o; + return old; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_linked_list_add_at_index( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + int index, + void *o) +{ + entry_t *after = NULL; + entry_t *e; + AXIS2_PARAM_CHECK(env->error, o, AXIS2_FAILURE); + + axutil_linked_list_check_bounds_inclusive(linked_list, env, index); + e = axutil_linked_list_create_entry(env, o); + + if(index < linked_list->size) + { + linked_list->mod_count++; + after = axutil_linked_list_get_entry(linked_list, env, index); + e->next = after; + e->previous = after->previous; + if(after->previous == NULL) + linked_list->first = e; + else + after->previous->next = e; + after->previous = e; + linked_list->size++; + } + else + { + axutil_linked_list_add_last_entry(linked_list, env, e); + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_linked_list_remove_at_index( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + int index) +{ + entry_t *e; + axutil_linked_list_check_bounds_exclusive(linked_list, env, index); + e = axutil_linked_list_get_entry(linked_list, env, index); + axutil_linked_list_remove_entry(linked_list, env, e); + return e->data; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_linked_list_index_of( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + void *o) +{ + int index = 0; + entry_t *e; + AXIS2_PARAM_CHECK(env->error, o, AXIS2_FAILURE); + + e = linked_list->first; + while(e) + { + if(o == e->data) + return index; + index++; + e = e->next; + } + return -1; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_linked_list_last_index_of( + axutil_linked_list_t *linked_list, + const axutil_env_t *env, + void *o) +{ + int index; + entry_t *e; + AXIS2_PARAM_CHECK(env->error, o, AXIS2_FAILURE); + + index = linked_list->size - 1; + e = linked_list->last; + while(e) + { + if(o == e->data) + return index; + index--; + e = e->previous; + } + return -1; +} + +AXIS2_EXTERN void **AXIS2_CALL +axutil_linked_list_to_array( + axutil_linked_list_t *linked_list, + const axutil_env_t *env) +{ + int i = 0; + void **array; + entry_t *e; + array = (void **)AXIS2_MALLOC(env->allocator, linked_list->size * sizeof(void *)); + e = linked_list->first; + for(i = 0; i < linked_list->size; i++) + { + array[i] = e->data; + e = e->next; + } + return array; +} + diff --git a/util/src/log.c b/util/src/log.c new file mode 100644 index 0000000..72a2508 --- /dev/null +++ b/util/src/log.c @@ -0,0 +1,576 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct axutil_log_impl axutil_log_impl_t; + +static axis2_status_t +axutil_log_impl_rotate( + axutil_log_t *log); + +static void AXIS2_CALL axutil_log_impl_write( + axutil_log_t *log, + const axis2_char_t *buffer, + axutil_log_levels_t level, + const axis2_char_t *file, + const int line); + +AXIS2_EXTERN void AXIS2_CALL axutil_log_impl_write_to_file( + axutil_log_t *log, + axutil_thread_mutex_t *mutex, + axutil_log_levels_t level, + const axis2_char_t *file, + const int line, + const axis2_char_t *value); + +static void AXIS2_CALL axutil_log_impl_free( + axutil_allocator_t *allocator, + axutil_log_t *log); + +struct axutil_log_impl +{ + axutil_log_t log; + void *stream; + axis2_char_t *file_name; + axutil_thread_mutex_t *mutex; +}; + +#define AXUTIL_INTF_TO_IMPL(log) ((axutil_log_impl_t*)(log)) + +static const axutil_log_ops_t axutil_log_ops_var = { axutil_log_impl_free, axutil_log_impl_write }; + +static void AXIS2_CALL +axutil_log_impl_free( + axutil_allocator_t *allocator, + axutil_log_t *log) +{ + axutil_log_impl_t *log_impl = NULL; + + if(log) + { + log_impl = AXUTIL_INTF_TO_IMPL(log); + + if(log_impl->mutex) + { + axutil_thread_mutex_destroy(log_impl->mutex); + } + if(log_impl->stream) + { + axutil_file_handler_close(log_impl->stream); + } + if(log_impl->file_name) + { + AXIS2_FREE(allocator, log_impl->file_name); + } + AXIS2_FREE(allocator, log_impl); + } +} + +AXIS2_EXTERN axutil_log_t *AXIS2_CALL +axutil_log_create( + axutil_allocator_t *allocator, + axutil_log_ops_t *ops, + const axis2_char_t *stream_name) +{ + axutil_log_impl_t *log_impl; + axis2_char_t *path_home; + axis2_char_t log_file_name[AXUTIL_LOG_FILE_NAME_SIZE]; + axis2_char_t log_dir[AXUTIL_LOG_FILE_NAME_SIZE]; + axis2_char_t tmp_filename[AXUTIL_LOG_FILE_NAME_SIZE]; + + if(!allocator) + return NULL; + + log_impl = (axutil_log_impl_t *)AXIS2_MALLOC(allocator, sizeof(axutil_log_impl_t)); + + if(!log_impl) + return NULL; + + log_impl->mutex = axutil_thread_mutex_create(allocator, AXIS2_THREAD_MUTEX_DEFAULT); + + if(!log_impl->mutex) + { + fprintf(stderr, "cannot create log mutex \n"); + return NULL; + } + +#ifndef WIN32 + signal(SIGXFSZ, SIG_IGN); +#endif + + /* default log file is axis2.log */ + if(stream_name) + AXIS2_SNPRINTF(tmp_filename, AXUTIL_LOG_FILE_NAME_SIZE, "%s", stream_name); + else + AXIS2_SNPRINTF(tmp_filename, AXUTIL_LOG_FILE_NAME_SIZE, "%s", "axis2.log"); + + /* we write all logs to AXIS2C_HOME/logs if it is set otherwise + * to the working dir + */ + if(stream_name && !(axutil_rindex(stream_name, AXIS2_PATH_SEP_CHAR))) + { + path_home = AXIS2_GETENV("AXIS2C_HOME"); + if(path_home) + { + AXIS2_SNPRINTF(log_dir, AXUTIL_LOG_FILE_NAME_SIZE, "%s%c%s", path_home, + AXIS2_PATH_SEP_CHAR, "logs"); + if(AXIS2_SUCCESS == axutil_file_handler_access(log_dir, AXIS2_F_OK)) + { + AXIS2_SNPRINTF(log_file_name, AXUTIL_LOG_FILE_NAME_SIZE, "%s%c%s", log_dir, + AXIS2_PATH_SEP_CHAR, tmp_filename); + } + else + { + fprintf(stderr, "log folder %s does not exist - log file %s " + "is written to . dir\n", log_dir, tmp_filename); + AXIS2_SNPRINTF(log_file_name, AXUTIL_LOG_FILE_NAME_SIZE, "%s", tmp_filename); + } + } + else + { + fprintf(stderr, "AXIS2C_HOME is not set - log is written to . dir\n"); + AXIS2_SNPRINTF(log_file_name, AXUTIL_LOG_FILE_NAME_SIZE, "%s", tmp_filename); + } + } + else + { + AXIS2_SNPRINTF(log_file_name, AXUTIL_LOG_FILE_NAME_SIZE, "%s", tmp_filename); + } + log_impl->file_name = AXIS2_MALLOC(allocator, AXUTIL_LOG_FILE_NAME_SIZE); + log_impl->log.size = AXUTIL_LOG_FILE_SIZE; + sprintf(log_impl->file_name, "%s", log_file_name); + + axutil_thread_mutex_lock(log_impl->mutex); + + log_impl->stream = axutil_file_handler_open(log_file_name, "a+"); + axutil_log_impl_rotate((axutil_log_t *)log_impl); + + axutil_thread_mutex_unlock(log_impl->mutex); + + if(!log_impl->stream) + log_impl->stream = stderr; + + /* by default, log is enabled */ + log_impl->log.enabled = 1; + log_impl->log.level = AXIS2_LOG_LEVEL_DEBUG; + + if(ops) + { + log_impl->log.ops = ops; + } + else + { + log_impl->log.ops = &axutil_log_ops_var; + } + + return &(log_impl->log); +} + +static void AXIS2_CALL +axutil_log_impl_write( + axutil_log_t *log, + const axis2_char_t *buffer, + axutil_log_levels_t level, + const axis2_char_t *file, + const int line) +{ + if(log && log->enabled && buffer) + { + axutil_log_impl_t *l = AXUTIL_INTF_TO_IMPL(log); + if(!l->mutex) + fprintf(stderr, "Log mutex is not found\n"); + if(!l->stream) + fprintf(stderr, "Stream is not found\n"); + if(level <= log->level || level == AXIS2_LOG_LEVEL_CRITICAL) + { + axutil_log_impl_write_to_file(log, l->mutex, level, file, line, buffer); + } + } +#ifndef AXIS2_NO_LOG_FILE + else if(buffer) + fprintf(stderr, "please check your log and buffer"); +#endif + else + fprintf(stderr, "please check your log and buffer"); +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_log_impl_write_to_file( + axutil_log_t *log, + axutil_thread_mutex_t *mutex, + axutil_log_levels_t level, + const axis2_char_t *file, + const int line, + const axis2_char_t *value) +{ + const char *level_str = ""; + axutil_log_impl_t *log_impl = AXUTIL_INTF_TO_IMPL(log); + FILE *fd = NULL; + + /** + * print all critical and error logs irrespective of log->level setting + */ + + switch(level) + { + case AXIS2_LOG_LEVEL_CRITICAL: + level_str = "[critical] "; + break; + case AXIS2_LOG_LEVEL_ERROR: + level_str = "[error] "; + break; + case AXIS2_LOG_LEVEL_WARNING: + level_str = "[warning] "; + break; + case AXIS2_LOG_LEVEL_INFO: + level_str = "[info] "; + break; + case AXIS2_LOG_LEVEL_DEBUG: + level_str = "[debug] "; + break; + case AXIS2_LOG_LEVEL_TRACE: + level_str = "[...TRACE...] "; + break; + case AXIS2_LOG_LEVEL_USER: + break; + } + axutil_thread_mutex_lock(mutex); + + axutil_log_impl_rotate(log); + fd = log_impl->stream; + + if(fd) + { + if(file) + fprintf(fd, "[%s] %s%s(%d) %s\n", axutil_log_impl_get_time_str(), level_str, file, + line, value); + else + fprintf(fd, "[%s] %s %s\n", axutil_log_impl_get_time_str(), level_str, value); + fflush(fd); + } + axutil_thread_mutex_unlock(mutex); +} + +static axis2_status_t +axutil_log_impl_rotate( + axutil_log_t *log) +{ + long size = -1; + FILE *old_log_fd = NULL; + axis2_char_t old_log_file_name[AXUTIL_LOG_FILE_NAME_SIZE]; + axutil_log_impl_t *log_impl = AXUTIL_INTF_TO_IMPL(log); + if(log_impl->file_name) + size = axutil_file_handler_size(log_impl->file_name); + + if(size >= log->size) + { + AXIS2_SNPRINTF(old_log_file_name, AXUTIL_LOG_FILE_NAME_SIZE, "%s%s", log_impl->file_name, + ".old"); + axutil_file_handler_close(log_impl->stream); + old_log_fd = axutil_file_handler_open(old_log_file_name, "w+"); + log_impl->stream = axutil_file_handler_open(log_impl->file_name, "r"); + if(old_log_fd && log_impl->stream) + { + axutil_file_handler_copy(log_impl->stream, old_log_fd); + axutil_file_handler_close(old_log_fd); + axutil_file_handler_close(log_impl->stream); + old_log_fd = NULL; + log_impl->stream = NULL; + } + if(old_log_fd) + { + axutil_file_handler_close(old_log_fd); + } + if(log_impl->stream) + { + axutil_file_handler_close(log_impl->stream); + } + log_impl->stream = axutil_file_handler_open(log_impl->file_name, "w+"); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_log_impl_log_user( + axutil_log_t *log, + const axis2_char_t *file, + const int line, + const axis2_char_t *format, + ...) +{ + if(log && log->ops && log->ops->write && format && log->enabled) + { + if(AXIS2_LOG_LEVEL_DEBUG <= log->level) + { + char value[AXIS2_LEN_VALUE + 1]; + va_list ap; + va_start(ap, format); + AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap); + va_end(ap); + log->ops->write(log, value, AXIS2_LOG_LEVEL_DEBUG, file, line); + } + } +#ifndef AXIS2_NO_LOG_FILE + else + fprintf(stderr, "please check your log and buffer"); +#endif +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_log_impl_log_debug( + axutil_log_t *log, + const axis2_char_t *file, + const int line, + const axis2_char_t *format, + ...) +{ + if(log && log->ops && log->ops->write && format && log->enabled) + { + if(AXIS2_LOG_LEVEL_DEBUG <= log->level && log->level != AXIS2_LOG_LEVEL_USER) + { + char value[AXIS2_LEN_VALUE + 1]; + va_list ap; + va_start(ap, format); + AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap); + va_end(ap); + log->ops->write(log, value, AXIS2_LOG_LEVEL_DEBUG, file, line); + } + } +#ifndef AXIS2_NO_LOG_FILE + else + fprintf(stderr, "please check your log and buffer"); +#endif +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_log_impl_log_info( + axutil_log_t *log, + const axis2_char_t *format, + ...) +{ + if(log && log->ops && log->ops->write && format && log->enabled) + { + if(AXIS2_LOG_LEVEL_INFO <= log->level && log->level != AXIS2_LOG_LEVEL_USER) + { + char value[AXIS2_LEN_VALUE + 1]; + va_list ap; + va_start(ap, format); + AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap); + va_end(ap); + log->ops->write(log, value, AXIS2_LOG_LEVEL_INFO, NULL, -1); + } + } +#ifndef AXIS2_NO_LOG_FILE + else + fprintf(stderr, "please check your log and buffer"); +#endif +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_log_impl_log_warning( + axutil_log_t *log, + const axis2_char_t *file, + const int line, + const axis2_char_t *format, + ...) +{ + if(log && log->ops && log->ops->write && format && log->enabled) + { + if(AXIS2_LOG_LEVEL_WARNING <= log->level && log->level != AXIS2_LOG_LEVEL_USER) + { + char value[AXIS2_LEN_VALUE + 1]; + va_list ap; + va_start(ap, format); + AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap); + va_end(ap); + log->ops->write(log, value, AXIS2_LOG_LEVEL_WARNING, file, line); + } + } +#ifndef AXIS2_NO_LOG_FILE + else + fprintf(stderr, "please check your log and buffer"); +#endif +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_log_impl_log_error( + axutil_log_t *log, + const axis2_char_t *file, + const int line, + const axis2_char_t *format, + ...) +{ + if(log && log->ops && log->ops->write && format && log->enabled) + { + char value[AXIS2_LEN_VALUE + 1]; + va_list ap; + va_start(ap, format); + AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap); + va_end(ap); + log->ops->write(log, value, AXIS2_LOG_LEVEL_ERROR, file, line); + } +#ifndef AXIS2_NO_LOG_FILE + else + fprintf(stderr, "please check your log and buffer"); +#endif +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_log_impl_log_critical( + axutil_log_t *log, + const axis2_char_t *file, + const int line, + const axis2_char_t *format, + ...) +{ + if(log && log->ops && log->ops->write && format && log->enabled) + { + char value[AXIS2_LEN_VALUE + 1]; + va_list ap; + va_start(ap, format); + AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap); + va_end(ap); + log->ops->write(log, value, AXIS2_LOG_LEVEL_CRITICAL, file, line); + } +#ifndef AXIS2_NO_LOG_FILE + else + fprintf(stderr, "please check your log and buffer"); +#endif +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_log_impl_get_time_str( + void) +{ + time_t tp; + char *time_str; + tp = time(&tp); + time_str = ctime(&tp); + if(!time_str) + { + return NULL; + } + if('\n' == time_str[strlen(time_str) - 1]) + { + time_str[strlen(time_str) - 1] = '\0'; + } + return time_str; +} + +AXIS2_EXTERN axutil_log_t *AXIS2_CALL +axutil_log_create_default( + axutil_allocator_t *allocator) +{ + axutil_log_impl_t *log_impl; + + if(!allocator) + return NULL; + + log_impl = (axutil_log_impl_t *)AXIS2_MALLOC(allocator, sizeof(axutil_log_impl_t)); + + if(!log_impl) + return NULL; + + log_impl->mutex = axutil_thread_mutex_create(allocator, AXIS2_THREAD_MUTEX_DEFAULT); + + if(!log_impl->mutex) + { + fprintf(stderr, "cannot create log mutex \n"); + return NULL; + } + + axutil_thread_mutex_lock(log_impl->mutex); + log_impl->file_name = NULL; + log_impl->log.size = AXUTIL_LOG_FILE_SIZE; + log_impl->stream = stderr; + axutil_thread_mutex_unlock(log_impl->mutex); + /* by default, log is enabled */ + log_impl->log.enabled = 1; + log_impl->log.level = AXIS2_LOG_LEVEL_DEBUG; + + log_impl->log.ops = &axutil_log_ops_var; + + return &(log_impl->log); +} + +#ifdef AXIS2_TRACE +AXIS2_EXTERN void AXIS2_CALL +axutil_log_impl_log_trace( + axutil_log_t *log, + const axis2_char_t *file, + const int line, + const axis2_char_t *format, + ...) +{ + if (log && log->ops && log->ops->write && + format && log->enabled) + { + if(AXIS2_LOG_LEVEL_TRACE <= log->level && log->level != AXIS2_LOG_LEVEL_USER) + { + char value[AXIS2_LEN_VALUE + 1]; + va_list ap; + va_start(ap, format); + AXIS2_VSNPRINTF(value, AXIS2_LEN_VALUE, format, ap); + va_end(ap); + log->ops->write(log, value, AXIS2_LOG_LEVEL_TRACE, file, line); + } + } +#ifndef AXIS2_NO_LOG_FILE + else + fprintf(stderr, "please check your log and buffer"); +#endif +} + +#else +AXIS2_EXTERN void AXIS2_CALL +axutil_log_impl_log_trace( + axutil_log_t *log, + const axis2_char_t *filename, + const int linenumber, + const axis2_char_t *format, + ...) +{ +} +#endif + +AXIS2_EXTERN void AXIS2_CALL +axutil_log_free( + axutil_allocator_t *allocator, + struct axutil_log *log) +{ + log->ops->free(allocator, log); +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_log_write( + axutil_log_t *log, + const axis2_char_t *buffer, + axutil_log_levels_t level, + const axis2_char_t *file, + const int line) +{ + log->ops->write(log, buffer, level, file, line); +} + diff --git a/util/src/md5.c b/util/src/md5.c new file mode 100644 index 0000000..0768df3 --- /dev/null +++ b/util/src/md5.c @@ -0,0 +1,350 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +#define S11 7 +#define S12 12 +#define S13 17 +#define S14 22 +#define S21 5 +#define S22 9 +#define S23 14 +#define S24 20 +#define S31 4 +#define S32 11 +#define S33 16 +#define S34 23 +#define S41 6 +#define S42 10 +#define S43 15 +#define S44 21 + +static void AXIS2_CALL md5_transform( + unsigned int state[4], + const unsigned char block[64]); + +static void AXIS2_CALL encode( + unsigned char *output, + const unsigned int *input, + unsigned int len); + +static void AXIS2_CALL decode( + unsigned int *output, + const unsigned char *input, + unsigned int len); + +static unsigned char PADDING[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + +/* F, G, H and I are basic MD5 functions. + */ +#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) +#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) +#define H(x, y, z) ((x) ^ (y) ^ (z)) +#define I(x, y, z) ((y) ^ ((x) | (~z))) + +/* ROTATE_LEFT rotates x left n bits. + */ +#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) + +/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. + * Rotation is separate from addition to prevent recomputation. + */ +#define FF(a, b, c, d, x, s, ac) { \ + (a) += F ((b), (c), (d)) + (x) + (unsigned int)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define GG(a, b, c, d, x, s, ac) { \ + (a) += G ((b), (c), (d)) + (x) + (unsigned int)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define HH(a, b, c, d, x, s, ac) { \ + (a) += H ((b), (c), (d)) + (x) + (unsigned int)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define II(a, b, c, d, x, s, ac) { \ + (a) += I ((b), (c), (d)) + (x) + (unsigned int)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } + +AXIS2_EXTERN axutil_md5_ctx_t *AXIS2_CALL +axutil_md5_ctx_create( + const axutil_env_t *env) +{ + axutil_md5_ctx_t *context; + AXIS2_ENV_CHECK(env, NULL); + + context = (axutil_md5_ctx_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_md5_ctx_t)); + if(!context) + { + return NULL; + } + context->count[0] = context->count[1] = 0; + + /* Load magic initialization constants. */ + context->state[0] = 0x67452301; + context->state[1] = 0xefcdab89; + context->state[2] = 0x98badcfe; + context->state[3] = 0x10325476; + return context; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_md5_ctx_free( + axutil_md5_ctx_t *md5_ctx, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + if(md5_ctx) + { + AXIS2_FREE(env->allocator, md5_ctx); + } +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_md5_update( + axutil_md5_ctx_t *context, + const axutil_env_t *env, + const void *input_str, + size_t inputLen) +{ + const unsigned char *input = input_str; + unsigned int i, idx, partLen; + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + /* Compute number of bytes mod 64 */ + idx = (unsigned int)((context->count[0] >> 3) & 0x3F); + + /* Update number of bits */ + if((context->count[0] += ((unsigned int)inputLen << 3)) < ((unsigned int)inputLen << 3)) + context->count[1]++; + context->count[1] += (unsigned int)inputLen >> 29; + + partLen = 64 - idx; + + /* Transform as many times as possible. */ + if(inputLen >= partLen) + { + memcpy(&context->buffer[idx], input, partLen); + md5_transform(context->state, context->buffer); + + for(i = partLen; i + 63 < inputLen; i += 64) + md5_transform(context->state, &input[i]); + + idx = 0; + } + else + i = 0; + + /* Buffer remaining input */ + memcpy(&context->buffer[idx], &input[i], inputLen - i); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_md5_final( + axutil_md5_ctx_t *context, + const axutil_env_t *env, + unsigned char digest[AXIS2_MD5_DIGESTSIZE]) +{ + unsigned char bits[8]; + unsigned int idx, padLen; + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + /* Save number of bits */ + encode(bits, context->count, 8); + + /* Pad out to 56 mod 64. */ + idx = (unsigned int)((context->count[0] >> 3) & 0x3f); + padLen = (idx < 56) ? (56 - idx) : (120 - idx); + axutil_md5_update(context, env, PADDING, padLen); + + /* Append length (before padding) */ + axutil_md5_update(context, env, bits, 8); + + /* Store state in digest */ + encode(digest, context->state, AXIS2_MD5_DIGESTSIZE); + + /* Zeroize sensitive information. */ + memset(context, 0, sizeof(*context)); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_md5( + const axutil_env_t *env, + unsigned char digest[AXIS2_MD5_DIGESTSIZE], + const void *input_str, + size_t inputLen) +{ + const unsigned char *input = input_str; + axutil_md5_ctx_t *ctx; + axis2_status_t rv; + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + ctx = axutil_md5_ctx_create(env); + if(!ctx) + return AXIS2_FAILURE; + + rv = axutil_md5_update(ctx, env, input, inputLen); + if(rv != AXIS2_SUCCESS) + return rv; + + rv = axutil_md5_final(ctx, env, digest); + axutil_md5_ctx_free(ctx, env); + return rv; +} + +/* MD5 basic transformation. Transforms state based on block. */ +static void AXIS2_CALL md5_transform( + unsigned int state[4], + const unsigned char block[64]) +{ + unsigned int a = state[0], b = state[1], c = state[2], d = state[3], + x[AXIS2_MD5_DIGESTSIZE]; + + decode(x, block, 64); + + /* Round 1 */ + FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */ + FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */ + FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */ + FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */ + FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */ + FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */ + FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */ + FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */ + FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */ + FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */ + FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ + FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ + FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ + FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ + FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ + FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ + + /* Round 2 */ + GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */ + GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */ + GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ + GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */ + GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */ + GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */ + GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ + GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */ + GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */ + GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ + GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */ + GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */ + GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ + GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */ + GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */ + GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ + + /* Round 3 */ + HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */ + HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */ + HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ + HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ + HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */ + HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */ + HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */ + HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ + HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ + HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */ + HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */ + HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */ + HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */ + HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ + HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ + HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */ + + /* Round 4 */ + II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */ + II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */ + II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ + II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */ + II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ + II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */ + II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ + II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */ + II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */ + II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ + II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */ + II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ + II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */ + II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ + II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */ + II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */ + + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + + /* Zeroize sensitive information. */ + memset(x, 0, sizeof(x)); +} + +/* encodes input (unsigned int) into output (unsigned char). Assumes len is + * a multiple of 4. + */ +static void AXIS2_CALL encode( + unsigned char *output, + const unsigned int *input, + unsigned int len) +{ + unsigned int i, j; + unsigned int k; + + for (i = 0, j = 0; j < len; i++, j += 4) + { + k = input[i]; + output[j] = (unsigned char)(k & 0xff); + output[j + 1] = (unsigned char)((k >> 8) & 0xff); + output[j + 2] = (unsigned char)((k >> 16) & 0xff); + output[j + 3] = (unsigned char)((k >> 24) & 0xff); + } +} + +/* decodes input (unsigned char) into output (unsigned int). Assumes len is + * a multiple of 4. + */ +static void AXIS2_CALL decode( + unsigned int *output, + const unsigned char *input, + unsigned int len) +{ + unsigned int i, j; + + for (i = 0, j = 0; j < len; i++, j += 4) + output[i] = ((unsigned int)input[j]) | + (((unsigned int)input[j + 1]) << 8) | + (((unsigned int)input[j + 2]) << 16) | + (((unsigned int)input[j + 3]) << 24); +} diff --git a/util/src/minizip/Makefile.am b/util/src/minizip/Makefile.am new file mode 100644 index 0000000..6fc3413 --- /dev/null +++ b/util/src/minizip/Makefile.am @@ -0,0 +1,18 @@ +lib_LTLIBRARIES = libaxis2_minizip.la + +libaxis2_minizip_la_SOURCES = ioapi.c \ + unzip.c \ + archive_extract.c \ + crypt.c + +libaxis2_minizip_la_LDFLAGS = -version-info $(VERSION_NO) + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/platforms + +EXTRA_DIST= axis2_archive_extract.h \ + axis2_crypt.h \ + axis2_ioapi.h \ + axis2_iowin32.h \ + axis2_unzip.h \ + iowin32.c diff --git a/util/src/minizip/archive_extract.c b/util/src/minizip/archive_extract.c new file mode 100644 index 0000000..dd68efb --- /dev/null +++ b/util/src/minizip/archive_extract.c @@ -0,0 +1,361 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef WIN32 +#include +#endif + +#define CASESENSITIVITY (0) +#define WRITEBUFFERSIZE (8192) +#define MAXFILENAME (256) + +axis2_status_t aar_select( + ); +int aar_extract( + axis2_char_t * d_name); + +extern int AXIS2_ALPHASORT( + ); + +int +axis2_mkdir(const axis2_char_t * + dir_name) +{ + int value = 0; + value = AXIS2_MKDIR(dir_name, 0775); + return value; +} + +int +axis2_create_dir( + axis2_char_t *new_dir) +{ + axis2_char_t *buffer; + axis2_char_t *p; + axis2_bool_t loop_state = AXIS2_TRUE; + int len = (int) strlen(new_dir); + + if (len <= 0) + return 0; + + buffer = (axis2_char_t *) malloc(len + 1); + strcpy(buffer, new_dir); + + if (buffer[len - 1] == '/') + { + buffer[len - 1] = '\0'; + } + + if (axis2_mkdir(buffer) == 0) + { + free(buffer); + return 1; + } + + p = buffer + 1; + while (loop_state) + { + axis2_char_t hold; + + while (*p && *p != '\\' && *p != '/') + p++; + hold = *p; + *p = 0; + if ((axis2_mkdir(buffer) == -1)) + { + free(buffer); + return 0; + } + if (hold == 0) + break; + *p++ = hold; + } + free(buffer); + return 1; +} + +int +axis2_extract_currentfile( + unzFile uf, + const int *popt_extract_without_path, + int *popt_overwrite, + const axis2_char_t *password) +{ + axis2_char_t filename_inzip[256]; + axis2_char_t *filename_withoutpath; + axis2_char_t *p; + int err = UNZ_OK; + FILE *fout = NULL; + void *buf; + uInt size_buf; + + unz_file_info file_info; + err = + unzGetCurrentFileInfo(uf, &file_info, filename_inzip, + sizeof(filename_inzip), NULL, 0, NULL, 0); + + if (err != UNZ_OK) + { + return err; + } + + size_buf = WRITEBUFFERSIZE; + buf = (void *) malloc(size_buf); + if (buf == NULL) + return UNZ_INTERNALERROR; + + p = filename_withoutpath = filename_inzip; + while ((*p) != '\0') + { + if (((*p) == '/') || ((*p) == '\\')) + filename_withoutpath = p + 1; + p++; + } + + if ((*filename_withoutpath) == '\0') + { + if ((*popt_extract_without_path) == 0) + { + axis2_mkdir(filename_inzip); + } + } + else + { + axis2_char_t *write_filename; + int skip = 0; + + if ((*popt_extract_without_path) == 0) + write_filename = filename_inzip; + else + write_filename = filename_withoutpath; + + err = unzOpenCurrentFilePassword(uf, password); + + if ((skip == 0) && (err == UNZ_OK)) + { + fout = fopen(write_filename, "wb"); + + if ((fout == NULL) && ((*popt_extract_without_path) == 0) && + (filename_withoutpath != (axis2_char_t *) filename_inzip)) + { + axis2_char_t c = *(filename_withoutpath - 1); + *(filename_withoutpath - 1) = '\0'; + axis2_create_dir(write_filename); + *(filename_withoutpath - 1) = c; + fout = fopen(write_filename, "wb"); + } + + } + + if (fout) + { + do + { + err = unzReadCurrentFile(uf, buf, size_buf); + if (err < 0) + { + break; + } + if (err > 0) + if (fwrite(buf, err, 1, fout) != 1) + { + err = UNZ_ERRNO; + break; + } + } + while (err > 0); + if (fout) + fclose(fout); + } + + if (err == UNZ_OK) + { + err = unzCloseCurrentFile(uf); + } + else + unzCloseCurrentFile(uf); + } + + free(buf); + return err; +} + +int +axis2_extract( + unzFile uf, + int opt_extract_without_path, + int opt_overwrite, + const axis2_char_t *password) +{ + uLong i; + unz_global_info gi; + int err; + + err = unzGetGlobalInfo(uf, &gi); + if (err != UNZ_OK) + return -1; + + for (i = 0; i < gi.number_entry; i++) + { + if (axis2_extract_currentfile(uf, &opt_extract_without_path, + &opt_overwrite, password) != UNZ_OK) + break; + + if ((i + 1) < gi.number_entry) + { + err = unzGoToNextFile(uf); + if (err != UNZ_OK) + { + return -1; + break; + } + } + } + + return 0; +} + +int +aar_extract( + axis2_char_t * d_name) +{ + const axis2_char_t *zipfilename = NULL; + const axis2_char_t *filename_to_extract = NULL; + const axis2_char_t *password = NULL; + axis2_char_t filename_try[MAXFILENAME + 16] = ""; + int opt_do_extract_withoutpath = 0; + int opt_overwrite = 0; + int opt_extractdir = 0; + const axis2_char_t *dir_name = NULL; + int ret = 0; + unzFile uf = NULL; + + if (zipfilename == NULL) + zipfilename = d_name; + + filename_to_extract = d_name; + + if (zipfilename) + { + zlib_filefunc_def ffunc; + strncpy(filename_try, zipfilename, MAXFILENAME - 1); + filename_try[MAXFILENAME] = '\0'; + + axis2_fill_win32_filefunc(&ffunc); + + uf = AXIS2_UNZOPEN2(zipfilename, ffunc); + + if (uf == NULL) + { + strcat(filename_try, ".zip"); + uf = AXIS2_UNZOPEN2(zipfilename, ffunc); + } + } + + if (uf == NULL) + return -1; + + if (opt_extractdir && AXIS2_CHDIR(dir_name)) + exit(-1); + + ret = axis2_extract(uf, opt_do_extract_withoutpath, opt_overwrite, + password); + /*unzCloseCurrentFile(uf);*/ + return ret; +} + +int +axis2_extract_onefile( + unzFile uf, + const axis2_char_t *filename, + int opt_extract_without_path, + int opt_overwrite, + const axis2_char_t *password) +{ + if (unzLocateFile(uf, filename, CASESENSITIVITY) != UNZ_OK) + return -1; + + if (axis2_extract_currentfile(uf, &opt_extract_without_path, + &opt_overwrite, password) == UNZ_OK) + return 0; + else + return -1; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_archive_extract( + ) +{ + struct dirent **namelist; + int n, + i; + axis2_char_t *ptr; + +#ifdef WIN32 + n = axis2_scandir(".", &namelist, 0, alphasort); +#else + n = scandir(".", &namelist, 0, alphasort); +#endif + + if (n < 0) + return AXIS2_FALSE; + else + { + while (n--) + { + if ((strcmp(namelist[n]->d_name, ".") == 0) || + (strcmp(namelist[n]->d_name, "..") == 0)) + { + for (i = n; i >= 0; i--) /* clean remaining memory before return */ + free(namelist[i]); + free(namelist); + return (AXIS2_FALSE); + } + + ptr = axutil_rindex(namelist[n]->d_name, '.'); + if ((ptr) && + (((strcmp(ptr, AXIS2_AAR_SUFFIX) == 0)) || + (strcmp(ptr, AXIS2_MAR_SUFFIX) == 0))) + for (i = 0; i < n; i++) + if (strncmp + (namelist[n]->d_name, namelist[i]->d_name, + strlen(namelist[i]->d_name)) == 0) + { + int j; + for (j = n; j >= 0; j--) /* clean remaining memory before return */ + free(namelist[j]); + free(namelist); + return (AXIS2_FALSE); + } + + aar_extract(namelist[n]->d_name); + free(namelist[n]); + } + free(namelist); + } + return (AXIS2_TRUE); +} diff --git a/util/src/minizip/axis2_archive_extract.h b/util/src/minizip/axis2_archive_extract.h new file mode 100644 index 0000000..92cbab6 --- /dev/null +++ b/util/src/minizip/axis2_archive_extract.h @@ -0,0 +1,35 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AXIS2_ARCHIVE_EXTRACT_H +#define AXIS2_ARCHIVE_EXTRACT_H + +#ifdef __cplusplus +extern "C" +{ +#endif + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_archive_extract( + ); + +#ifdef __cplusplus +} +#endif + +#endif /** AXIS2_ARCHIVE_EXTRACT_H */ diff --git a/util/src/minizip/axis2_crypt.h b/util/src/minizip/axis2_crypt.h new file mode 100644 index 0000000..dcdf524 --- /dev/null +++ b/util/src/minizip/axis2_crypt.h @@ -0,0 +1,94 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +/* crypt.h -- base code for crypt/uncrypt ZIPfile + + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant + + This code is a modified version of crypting code in Infozip distribution + + The encryption/decryption parts of this source code (as opposed to the + non-echoing password parts) were originally written in Europe. The + whole source package can be freely distributed, including from the USA. + (Prior to January 2000, re-export from the US was a violation of US law.) + + This encryption code is a direct transcription of the algorithm from + Roger Schlafly, described by Phil Katz in the file appnote.txt. This + file (appnote.txt) is distributed with the PKZIP program (even in the + version without encryption capabilities). + + If you don't need crypting in your application, just define symbols + NOCRYPT and NOUNCRYPT. + + This code support the "Traditional PKWARE Encryption". + + The new AES encryption added on Zip format by Winzip (see the page + http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong + Encryption is not supported. +*/ + +#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8)) + +/*********************************************************************** + * Return the next byte in the pseudo-random sequence + */ +int decrypt_byte( + unsigned long *pkeys, + const unsigned long *pcrc_32_tab); + +/*********************************************************************** + * Update the encryption keys with the next byte of plain text + */ +int update_keys( + unsigned long *pkeys, + const unsigned long *pcrc_32_tab, + int c); + +/*********************************************************************** + * Initialize the encryption keys and the random header according to + * the given password. + */ +void init_keys( + const char *passwd, + unsigned long *pkeys, + const unsigned long *pcrc_32_tab); + +#define zdecode(pkeys,pcrc_32_tab,c) \ + (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab))) + +#define zencode(pkeys,pcrc_32_tab,c,t) \ + (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c)) + +#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED + +#define RAND_HEAD_LEN 12 +/* "last resort" source for second part of crypt seed pattern */ +# ifndef ZCR_SEED2 +# define ZCR_SEED2 3141592654UL /* use PI as default pattern */ +# endif + +int crypthead( + passwd, + buf, + bufSize, + pkeys, + pcrc_32_tab, + crcForCrypting); + +#endif diff --git a/util/src/minizip/axis2_ioapi.h b/util/src/minizip/axis2_ioapi.h new file mode 100644 index 0000000..8f14574 --- /dev/null +++ b/util/src/minizip/axis2_ioapi.h @@ -0,0 +1,118 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/* ioapi.h -- IO base function header for compress/uncompress .zip + files using zlib + zip or unzip API + + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant +*/ + +#ifndef _ZLIBIOAPI_H +#define _ZLIBIOAPI_H + +#define ZLIB_FILEFUNC_SEEK_CUR (1) +#define ZLIB_FILEFUNC_SEEK_END (2) +#define ZLIB_FILEFUNC_SEEK_SET (0) + +#define ZLIB_FILEFUNC_MODE_READ (1) +#define ZLIB_FILEFUNC_MODE_WRITE (2) +#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3) + +#define ZLIB_FILEFUNC_MODE_EXISTING (4) +#define ZLIB_FILEFUNC_MODE_CREATE (8) + +#ifndef ZCALLBACK + +#if (defined(WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) +#define ZCALLBACK CALLBACK +#else +#define ZCALLBACK +#endif +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef voidpf( + ZCALLBACK * open_file_func) OF( + (voidpf opaque, + const char *filename, + int mode)); + typedef uLong( + ZCALLBACK * read_file_func) OF( + (voidpf opaque, + voidpf stream, + void *buf, + uLong size)); + typedef uLong( + ZCALLBACK * write_file_func) OF( + (voidpf opaque, + voidpf stream, + const void *buf, + uLong size)); + typedef long( + ZCALLBACK * tell_file_func) OF( + (voidpf opaque, + voidpf stream)); + typedef long( + ZCALLBACK * seek_file_func) OF( + (voidpf opaque, + voidpf stream, + uLong offset, + int origin)); + typedef int( + ZCALLBACK * close_file_func) OF( + (voidpf opaque, + voidpf stream)); + typedef int( + ZCALLBACK * testerror_file_func) OF( + (voidpf opaque, + voidpf stream)); + + typedef struct zlib_filefunc_def_s + { + open_file_func zopen_file; + read_file_func zread_file; + write_file_func zwrite_file; + tell_file_func ztell_file; + seek_file_func zseek_file; + close_file_func zclose_file; + testerror_file_func zerror_file; + voidpf opaque; + } + zlib_filefunc_def; + + void fill_fopen_filefunc OF( + (zlib_filefunc_def * pzlib_filefunc_def)); + +#define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size)) +#define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size)) +#define ZTELL(filefunc,filestream) ((*((filefunc).ztell_file))((filefunc).opaque,filestream)) +#define ZSEEK(filefunc,filestream,pos,mode) ((*((filefunc).zseek_file))((filefunc).opaque,filestream,pos,mode)) +#define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream)) +#define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream)) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/util/src/minizip/axis2_iowin32.h b/util/src/minizip/axis2_iowin32.h new file mode 100644 index 0000000..bfe95cf --- /dev/null +++ b/util/src/minizip/axis2_iowin32.h @@ -0,0 +1,40 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/* iowin32.h -- IO base function header for compress/uncompress .zip + files using zlib + zip or unzip API + This IO API version uses the Win32 API (for Microsoft Windows) + + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant +*/ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + void fill_win32_filefunc OF( + (zlib_filefunc_def * pzlib_filefunc_def)); + +#ifdef __cplusplus +} +#endif diff --git a/util/src/minizip/axis2_unzip.h b/util/src/minizip/axis2_unzip.h new file mode 100644 index 0000000..f2e1f19 --- /dev/null +++ b/util/src/minizip/axis2_unzip.h @@ -0,0 +1,417 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* unzip.h -- IO for uncompress .zip files using zlib + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant + + This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g + WinZip, InfoZip tools and compatible. + + Multi volume ZipFile (span) are not supported. + Encryption compatible with pkzip 2.04g only supported + Old compressions used by old PKZip 1.x are not supported + + I WAIT FEEDBACK at mail info@winimage.com + Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution + + Condition of use and distribution are the same than zlib : + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + +*/ + +/* for more info about .ZIP format, see + http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip + http://www.info-zip.org/pub/infozip/doc/ + PkWare has also a specification at : + ftp://ftp.pkware.com/probdesc.zip +*/ + +#ifndef _unz_H +#define _unz_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +#ifndef _ZLIB_H +#include "zlib.h" +#endif + +#ifndef _ZLIBIOAPI_H +#include "axis2_ioapi.h" +#endif + +#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) + + /* like the STRICT of WIN32, we define a pointer that cannot be converted + from (void*) without cast */ + typedef struct TagunzFile__ + { + int unused; + } + unzFile__; + typedef unzFile__ *unzFile; +#else + typedef voidp unzFile; +#endif + +#define UNZ_OK (0) +#define UNZ_END_OF_LIST_OF_FILE (-100) +#define UNZ_ERRNO (Z_ERRNO) +#define UNZ_EOF (0) +#define UNZ_PARAMERROR (-102) +#define UNZ_BADZIPFILE (-103) +#define UNZ_INTERNALERROR (-104) +#define UNZ_CRCERROR (-105) + + /* tm_unz contain date/time info */ + typedef struct tm_unz_s + { + uInt tm_sec; /* seconds after the minute - [0,59] */ + uInt tm_min; /* minutes after the hour - [0,59] */ + uInt tm_hour; /* hours since midnight - [0,23] */ + uInt tm_mday; /* day of the month - [1,31] */ + uInt tm_mon; /* months since January - [0,11] */ + uInt tm_year; /* years - [1980..2044] */ + } + tm_unz; + + /* unz_global_info structure contain global data about the ZIPfile + These data comes from the end of central dir */ + typedef struct unz_global_info_s + { + uLong number_entry; /* total number of entries in + the central dir on this disk */ + uLong size_comment; /* size of the global comment of the zipfile */ + } + unz_global_info; + + /* unz_file_info contain information about a file in the zipfile */ + typedef struct unz_file_info_s + { + uLong version; /* version made by 2 bytes */ + uLong version_needed; /* version needed to extract 2 bytes */ + uLong flag; /* general purpose bit flag 2 bytes */ + uLong compression_method; /* compression method 2 bytes */ + uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ + uLong crc; /* crc-32 4 bytes */ + uLong compressed_size; /* compressed size 4 bytes */ + uLong uncompressed_size; /* uncompressed size 4 bytes */ + uLong size_filename; /* filename length 2 bytes */ + uLong size_file_extra; /* extra field length 2 bytes */ + uLong size_file_comment; /* file comment length 2 bytes */ + + uLong disk_num_start; /* disk number start 2 bytes */ + uLong internal_fa; /* internal file attributes 2 bytes */ + uLong external_fa; /* external file attributes 4 bytes */ + + tm_unz tmu_date; + } + unz_file_info; + + extern int ZEXPORT unzStringFileNameCompare OF( + (const char *fileName1, + const char *fileName2, + int iCaseSensitivity)); + + /* + Compare two filename (fileName1,fileName2). + If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) + If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi + or strcasecmp) + If iCaseSenisivity = 0, case sensitivity is defaut of your operating system + (like 1 on Unix, 2 on Windows) + */ + + extern unzFile ZEXPORT unzOpen OF( + (const char *path)); + + /* + Open a Zip file. path contain the full pathname (by example, + on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer + "zlib/zlib113.zip". + If the zipfile cannot be opened (file don't exist or in not valid), the + return value is NULL. + Else, the return value is a unzFile Handle, usable with other function + of this unzip package. + */ + + extern unzFile ZEXPORT unzOpen2 OF( + (const char *path, + zlib_filefunc_def * pzlib_filefunc_def)); + + /* + Open a Zip file, like unzOpen, but provide a set of file low level API + for read/write the zip file (see axis2_ioapi.h) + */ + + extern int ZEXPORT unzClose OF( + (unzFile file)); + + /* + Close a ZipFile opened with unzipOpen. + If there is files inside the .Zip opened with unzOpenCurrentFile (see later), + these files MUST be closed with unzipCloseCurrentFile before call unzipClose. + return UNZ_OK if there is no problem. */ + + extern int ZEXPORT unzGetGlobalInfo OF( + (unzFile file, + unz_global_info * pglobal_info)); + + /* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ + + extern int ZEXPORT unzGetGlobalComment OF( + (unzFile file, + char *szComment, + uLong uSizeBuf)); + + /* + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of byte copied or an error code <0 + */ + + /***************************************************************************/ + + /* Unzip package allow you browse the directory of the zipfile */ + + extern int ZEXPORT unzGoToFirstFile OF( + (unzFile file)); + + /* + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem + */ + + extern int ZEXPORT unzGoToNextFile OF( + (unzFile file)); + + /* + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. + */ + + extern int ZEXPORT unzLocateFile OF( + (unzFile file, + const char *szFileName, + int iCaseSensitivity)); + + /* + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzStringFileNameCompare + + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found + */ + + /* ****************************************** */ + + /* Ryan supplied functions */ + + /* unz_file_info contain information about a file in the zipfile */ + typedef struct unz_file_pos_s + { + uLong pos_in_zip_directory; /* offset in zip file directory */ + uLong num_of_file; /* # of file */ + } + unz_file_pos; + + extern int ZEXPORT unzGetFilePos( + unzFile file, + unz_file_pos * file_pos); + + extern int ZEXPORT unzGoToFilePos( + unzFile file, + unz_file_pos * file_pos); + + /* ****************************************** */ + + extern int ZEXPORT unzGetCurrentFileInfo OF( + (unzFile file, + unz_file_info * pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); + + /* + Get Info about the current file + if pfile_info!=NULL, the *pfile_info structure will contain somes info about + the current file + if szFileName!=NULL, the filemane string will be copied in szFileName + (fileNameBufferSize is the size of the buffer) + if extraField!=NULL, the extra field information will be copied in extraField + (extraFieldBufferSize is the size of the buffer). + This is the Central-header version of the extra field + if szComment!=NULL, the comment string of the file will be copied in szComment + (commentBufferSize is the size of the buffer) + */ + + /***************************************************************************/ + + /* for reading the content of the current zipfile, you can open it, read data + from it, and close it (you can close it before reading all the file) + */ + + extern int ZEXPORT unzOpenCurrentFile OF( + (unzFile file)); + + /* + Open for reading data the current file in the zipfile. + If there is no error, the return value is UNZ_OK. + */ + + extern int ZEXPORT unzOpenCurrentFilePassword OF( + (unzFile file, + const char *password)); + + /* + Open for reading data the current file in the zipfile. + password is a crypting password + If there is no error, the return value is UNZ_OK. + */ + + extern int ZEXPORT unzOpenCurrentFile2 OF( + (unzFile file, + int *method, + int *level, + int raw)); + + /* + Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) + if raw==1 + *method will receive method of compression, *level will receive level of + compression + note : you can set level parameter as NULL (if you did not want known level, + but you CANNOT set method parameter as NULL + */ + + extern int ZEXPORT unzOpenCurrentFile3 OF( + (unzFile file, + int *method, + int *level, + int raw, + const char *password)); + + /* + Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) + if raw==1 + *method will receive method of compression, *level will receive level of + compression + note : you can set level parameter as NULL (if you did not want known level, + but you CANNOT set method parameter as NULL + */ + + extern int ZEXPORT unzCloseCurrentFile OF( + (unzFile file)); + + /* + Close the file in zip opened with unzOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good + */ + + extern int ZEXPORT unzReadCurrentFile OF( + (unzFile file, + voidp buf, + unsigned len)); + + /* + Read bytes from the current file (opened by unzOpenCurrentFile) + buf contain buffer where data must be copied + len the size of buf. + + return the number of byte copied if somes bytes are copied + return 0 if the end of file was reached + return <0 with error code if there is an error + (UNZ_ERRNO for IO error, or zLib error for uncompress error) + */ + + extern z_off_t ZEXPORT unztell OF( + (unzFile file)); + + /* + Give the current position in uncompressed data + */ + + extern int ZEXPORT unzeof OF( + (unzFile file)); + + /* + return 1 if the end of file was reached, 0 elsewhere + */ + + extern int ZEXPORT unzGetLocalExtrafield OF( + (unzFile file, + voidp buf, + unsigned len)); + + /* + Read extra field from the current file (opened by unzOpenCurrentFile) + This is the local-header version of the extra field (sometimes, there is + more info in the local-header version than in the central-header) + + if buf==NULL, it return the size of the local extra field + + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of bytes copied in buf, or (if <0) + the error code + */ + + /***************************************************************************/ + + /* Get the current file offset */ + extern uLong ZEXPORT unzGetOffset( + unzFile file); + + /* Set the current file offset */ + extern int ZEXPORT unzSetOffset( + unzFile file, + uLong pos); + +#ifdef __cplusplus +} +#endif + +#endif /* _unz_H */ diff --git a/util/src/minizip/crypt.c b/util/src/minizip/crypt.c new file mode 100644 index 0000000..bf2b1d8 --- /dev/null +++ b/util/src/minizip/crypt.c @@ -0,0 +1,172 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* crypt.h -- base code for crypt/uncrypt ZIPfile + + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant + + This code is a modified version of crypting code in Infozip distribution + + The encryption/decryption parts of this source code (as opposed to the + non-echoing password parts) were originally written in Europe. The + whole source package can be freely distributed, including from the USA. + (Prior to January 2000, re-export from the US was a violation of US law.) + + This encryption code is a direct transcription of the algorithm from + Roger Schlafly, described by Phil Katz in the file appnote.txt. This + file (appnote.txt) is distributed with the PKZIP program (even in the + version without encryption capabilities). + + If you don't need crypting in your application, just define symbols + NOCRYPT and NOUNCRYPT. + + This code support the "Traditional PKWARE Encryption". + + The new AES encryption added on Zip format by Winzip (see the page + http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong + Encryption is not supported. +*/ + +#include + +#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8)) + +/*********************************************************************** + * Return the next byte in the pseudo-random sequence + */ +int +decrypt_byte( + unsigned long *pkeys, + const unsigned long *pcrc_32_tab) +{ + unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an + * unpredictable manner on 16-bit systems; not a problem + * with any known compiler so far, though */ + + temp = ((unsigned) (*(pkeys + 2)) & 0xffff) | 2; + return (int) (((temp * (temp ^ 1)) >> 8) & 0xff); +} + +/*********************************************************************** + * Update the encryption keys with the next byte of plain text + */ +int +update_keys( + unsigned long *pkeys, + const unsigned long *pcrc_32_tab, + int c) +{ + (*(pkeys + 0)) = CRC32((*(pkeys + 0)), c); + (*(pkeys + 1)) += (*(pkeys + 0)) & 0xff; + (*(pkeys + 1)) = (*(pkeys + 1)) * 134775813L + 1; + { + register int keyshift = (int) ((*(pkeys + 1)) >> 24); + (*(pkeys + 2)) = CRC32((*(pkeys + 2)), keyshift); + } + return c; +} + +/*********************************************************************** + * Initialize the encryption keys and the random header according to + * the given password. + */ +void +init_keys( + const char *passwd, + unsigned long *pkeys, + const unsigned long *pcrc_32_tab) +{ + *(pkeys + 0) = 305419896L; + *(pkeys + 1) = 591751049L; + *(pkeys + 2) = 878082192L; + while (*passwd != '\0') + { + update_keys(pkeys, pcrc_32_tab, (int) *passwd); + passwd++; + } +} + +#define zdecode(pkeys,pcrc_32_tab,c) \ + (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab))) + +#define zencode(pkeys,pcrc_32_tab,c,t) \ + (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c)) + +#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED + +#define RAND_HEAD_LEN 12 + +/* "last resort" source for second part of crypt seed pattern */ +# ifndef ZCR_SEED2 +# define ZCR_SEED2 3141592654UL /* use PI as default pattern */ +# endif + +int +crypthead( + passwd, + buf, + bufSize, + pkeys, + pcrc_32_tab, + crcForCrypting) + const char *passwd; /* password string */ + unsigned char *buf; /* where to write header */ + int bufSize; + unsigned long *pkeys; + const unsigned long *pcrc_32_tab; + unsigned long crcForCrypting; +{ + int n; /* index in random header */ + int t; /* temporary */ + int c; /* random byte */ + unsigned char header[RAND_HEAD_LEN - 2]; /* random header */ + static unsigned calls = 0; /* ensure different random header each time */ + + if (bufSize < RAND_HEAD_LEN) + return 0; + + /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the + * output of rand() to get less predictability, since rand() is + * often poorly implemented. + */ + if (++calls == 1) + { + srand((unsigned) (time(NULL) ^ ZCR_SEED2)); + } + init_keys(passwd, pkeys, pcrc_32_tab); + for (n = 0; n < RAND_HEAD_LEN - 2; n++) + { + c = (rand() >> 7) & 0xff; + header[n] = (unsigned char) zencode(pkeys, pcrc_32_tab, c, t); + } + /* Encrypt random header (last two bytes is high word of crc) */ + init_keys(passwd, pkeys, pcrc_32_tab); + for (n = 0; n < RAND_HEAD_LEN - 2; n++) + { + buf[n] = (unsigned char) zencode(pkeys, pcrc_32_tab, header[n], t); + } + buf[n++] = + zencode(pkeys, pcrc_32_tab, (int) (crcForCrypting >> 16) & 0xff, t); + buf[n++] = + zencode(pkeys, pcrc_32_tab, (int) (crcForCrypting >> 24) & 0xff, t); + return n; +} + +#endif diff --git a/util/src/minizip/ioapi.c b/util/src/minizip/ioapi.c new file mode 100644 index 0000000..7a0ac22 --- /dev/null +++ b/util/src/minizip/ioapi.c @@ -0,0 +1,197 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ioapi.c -- IO base function header for compress/uncompress .zip + files using zlib + zip or unzip API + + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant +*/ + +#include +#include +#include + +#include "zlib.h" +#include "axis2_ioapi.h" + +/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */ + +#ifndef SEEK_CUR +#define SEEK_CUR 1 +#endif + +#ifndef SEEK_END +#define SEEK_END 2 +#endif + +#ifndef SEEK_SET +#define SEEK_SET 0 +#endif + +voidpf ZCALLBACK fopen_file_func OF( + (voidpf opaque, + const char *filename, + int mode)); + +uLong ZCALLBACK fread_file_func OF( + (voidpf opaque, + voidpf stream, + void *buf, + uLong size)); + +uLong ZCALLBACK fwrite_file_func OF( + (voidpf opaque, + voidpf stream, + const void *buf, + uLong size)); + +long ZCALLBACK ftell_file_func OF( + (voidpf opaque, + voidpf stream)); + +long ZCALLBACK fseek_file_func OF( + (voidpf opaque, + voidpf stream, + uLong offset, + int origin)); + +int ZCALLBACK fclose_file_func OF( + (voidpf opaque, + voidpf stream)); + +int ZCALLBACK ferror_file_func OF( + (voidpf opaque, + voidpf stream)); + +voidpf ZCALLBACK +fopen_file_func( + voidpf opaque, + const char *filename, + int mode) +{ + FILE *file = NULL; + const char *mode_fopen = NULL; + if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER) == ZLIB_FILEFUNC_MODE_READ) + mode_fopen = "rb"; + else if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + mode_fopen = "r+b"; + else if (mode & ZLIB_FILEFUNC_MODE_CREATE) + mode_fopen = "wb"; + + if ((filename) && (mode_fopen != NULL)) + file = fopen(filename, mode_fopen); + return file; +} + +uLong ZCALLBACK +fread_file_func( + voidpf opaque, + voidpf stream, + void *buf, + uLong size) +{ + uLong ret; + ret = (uLong) fread(buf, 1, (size_t) size, (FILE *) stream); + return ret; +} + +uLong ZCALLBACK +fwrite_file_func( + voidpf opaque, + voidpf stream, + const void *buf, + uLong size) +{ + uLong ret; + ret = (uLong) fwrite(buf, 1, (size_t) size, (FILE *) stream); + return ret; +} + +long ZCALLBACK +ftell_file_func( + voidpf opaque, + voidpf stream) +{ + long ret; + ret = ftell((FILE *) stream); + return ret; +} + +long ZCALLBACK +fseek_file_func( + voidpf opaque, + voidpf stream, + uLong offset, + int origin) +{ + int fseek_origin = 0; + long ret; + switch (origin) + { + case ZLIB_FILEFUNC_SEEK_CUR: + fseek_origin = SEEK_CUR; + break; + case ZLIB_FILEFUNC_SEEK_END: + fseek_origin = SEEK_END; + break; + case ZLIB_FILEFUNC_SEEK_SET: + fseek_origin = SEEK_SET; + break; + default: + return -1; + } + ret = 0; + fseek((FILE *) stream, offset, fseek_origin); + return ret; +} + +int ZCALLBACK +fclose_file_func( + voidpf opaque, + voidpf stream) +{ + int ret; + ret = fclose((FILE *) stream); + return ret; +} + +int ZCALLBACK +ferror_file_func( + voidpf opaque, + voidpf stream) +{ + int ret; + ret = ferror((FILE *) stream); + return ret; +} + +void +fill_fopen_filefunc( + zlib_filefunc_def *pzlib_filefunc_def) +{ + pzlib_filefunc_def->zopen_file = fopen_file_func; + pzlib_filefunc_def->zread_file = fread_file_func; + pzlib_filefunc_def->zwrite_file = fwrite_file_func; + pzlib_filefunc_def->ztell_file = ftell_file_func; + pzlib_filefunc_def->zseek_file = fseek_file_func; + pzlib_filefunc_def->zclose_file = fclose_file_func; + pzlib_filefunc_def->zerror_file = ferror_file_func; + pzlib_filefunc_def->opaque = NULL; +} diff --git a/util/src/minizip/iowin32.c b/util/src/minizip/iowin32.c new file mode 100644 index 0000000..f774437 --- /dev/null +++ b/util/src/minizip/iowin32.c @@ -0,0 +1,300 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* iowin32.c -- IO base function header for compress/uncompress .zip + files using zlib + zip or unzip API + This IO API version uses the Win32 API (for Microsoft Windows) + + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant +*/ + +#include + +#include "zlib.h" +#include "axis2_ioapi.h" +#include "axis2_iowin32.h" + +#ifndef INVALID_HANDLE_VALUE +#define INVALID_HANDLE_VALUE (0xFFFFFFFF) +#endif + +#ifndef INVALID_SET_FILE_POINTER +#define INVALID_SET_FILE_POINTER ((DWORD)-1) +#endif + +voidpf ZCALLBACK win32_open_file_func OF( + (voidpf opaque, + const char *filename, + int mode)); + +uLong ZCALLBACK win32_read_file_func OF( + (voidpf opaque, + voidpf stream, + void *buf, + uLong size)); + +uLong ZCALLBACK win32_write_file_func OF( + (voidpf opaque, + voidpf stream, + const void *buf, + uLong size)); + +long ZCALLBACK win32_tell_file_func OF( + (voidpf opaque, + voidpf stream)); + +long ZCALLBACK win32_seek_file_func OF( + (voidpf opaque, + voidpf stream, + uLong offset, + int origin)); + +int ZCALLBACK win32_close_file_func OF( + (voidpf opaque, + voidpf stream)); + +int ZCALLBACK win32_error_file_func OF( + (voidpf opaque, + voidpf stream)); + +typedef struct +{ + HANDLE hf; + int error; +} +WIN32FILE_IOWIN; + +voidpf ZCALLBACK +win32_open_file_func( + voidpf opaque, + const char *filename, + int mode) +{ + /*const char *mode_fopen = NULL;*/ + DWORD dwDesiredAccess, + dwCreationDisposition, + dwShareMode, + dwFlagsAndAttributes; + HANDLE hFile = 0; + voidpf ret = NULL; + + dwDesiredAccess = dwShareMode = dwFlagsAndAttributes = dwCreationDisposition = 0; + /* dwCreationDisposition = 0, to avoid C4701 */ + + if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER) == ZLIB_FILEFUNC_MODE_READ) + { + dwDesiredAccess = GENERIC_READ; + dwCreationDisposition = OPEN_EXISTING; + dwShareMode = FILE_SHARE_READ; + } + else if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + { + dwDesiredAccess = GENERIC_WRITE | GENERIC_READ; + dwCreationDisposition = OPEN_EXISTING; + } + else if (mode & ZLIB_FILEFUNC_MODE_CREATE) + { + dwDesiredAccess = GENERIC_WRITE | GENERIC_READ; + dwCreationDisposition = CREATE_ALWAYS; + } + + if ((filename) && (dwDesiredAccess != 0)) + hFile = + CreateFile((LPCTSTR) filename, dwDesiredAccess, dwShareMode, NULL, + dwCreationDisposition, dwFlagsAndAttributes, NULL); + + if (hFile == INVALID_HANDLE_VALUE) + hFile = NULL; + + if (hFile) + { + WIN32FILE_IOWIN w32fiow; + w32fiow.hf = hFile; + w32fiow.error = 0; + ret = malloc(sizeof(WIN32FILE_IOWIN)); + if (ret == NULL) + CloseHandle(hFile); + else + *((WIN32FILE_IOWIN *) ret) = w32fiow; + } + return ret; +} + +uLong ZCALLBACK +win32_read_file_func( + voidpf opaque, + voidpf stream, + void *buf, + uLong size) +{ + uLong ret = 0; + HANDLE hFile = NULL; + if (stream) + hFile = ((WIN32FILE_IOWIN *) stream)->hf; + if (hFile) + if (!ReadFile(hFile, buf, size, &ret, NULL)) + { + DWORD dwErr = GetLastError(); + if (dwErr == ERROR_HANDLE_EOF) + dwErr = 0; + ((WIN32FILE_IOWIN *) stream)->error = (int) dwErr; + } + + return ret; +} + +uLong ZCALLBACK +win32_write_file_func( + voidpf opaque, + voidpf stream, + const void *buf, + uLong size) +{ + uLong ret = 0; + HANDLE hFile = NULL; + if (stream) + hFile = ((WIN32FILE_IOWIN *) stream)->hf; + + if (hFile) + if (!WriteFile(hFile, buf, size, &ret, NULL)) + { + DWORD dwErr = GetLastError(); + if (dwErr == ERROR_HANDLE_EOF) + dwErr = 0; + ((WIN32FILE_IOWIN *) stream)->error = (int) dwErr; + } + + return ret; +} + +long ZCALLBACK +win32_tell_file_func( + voidpf opaque, + voidpf stream) +{ + long ret = -1; + HANDLE hFile = NULL; + if (stream) + hFile = ((WIN32FILE_IOWIN *) stream)->hf; + if (hFile) + { + DWORD dwSet = SetFilePointer(hFile, 0, NULL, FILE_CURRENT); + if (dwSet == INVALID_SET_FILE_POINTER) + { + DWORD dwErr = GetLastError(); + ((WIN32FILE_IOWIN *) stream)->error = (int) dwErr; + ret = -1; + } + else + ret = (long) dwSet; + } + return ret; +} + +long ZCALLBACK +win32_seek_file_func( + voidpf opaque, + voidpf stream, + uLong offset, + int origin) +{ + DWORD dwMoveMethod = 0xFFFFFFFF; + HANDLE hFile = NULL; + + long ret = -1; + if (stream) + hFile = ((WIN32FILE_IOWIN *) stream)->hf; + switch (origin) + { + case ZLIB_FILEFUNC_SEEK_CUR: + dwMoveMethod = FILE_CURRENT; + break; + case ZLIB_FILEFUNC_SEEK_END: + dwMoveMethod = FILE_END; + break; + case ZLIB_FILEFUNC_SEEK_SET: + dwMoveMethod = FILE_BEGIN; + break; + default: + return -1; + } + + if (hFile) + { + DWORD dwSet = SetFilePointer(hFile, offset, NULL, dwMoveMethod); + if (dwSet == INVALID_SET_FILE_POINTER) + { + DWORD dwErr = GetLastError(); + ((WIN32FILE_IOWIN *) stream)->error = (int) dwErr; + ret = -1; + } + else + ret = 0; + } + return ret; +} + +int ZCALLBACK +win32_close_file_func( + voidpf opaque, + voidpf stream) +{ + int ret = -1; + + if (stream) + { + HANDLE hFile; + hFile = ((WIN32FILE_IOWIN *) stream)->hf; + if (hFile) + { + CloseHandle(hFile); + ret = 0; + } + free(stream); + } + return ret; +} + +int ZCALLBACK +win32_error_file_func( + voidpf opaque, + voidpf stream) +{ + int ret = -1; + if (stream) + { + ret = ((WIN32FILE_IOWIN *) stream)->error; + } + return ret; +} + +void +fill_win32_filefunc( + zlib_filefunc_def *pzlib_filefunc_def) +{ + pzlib_filefunc_def->zopen_file = win32_open_file_func; + pzlib_filefunc_def->zread_file = win32_read_file_func; + pzlib_filefunc_def->zwrite_file = win32_write_file_func; + pzlib_filefunc_def->ztell_file = win32_tell_file_func; + pzlib_filefunc_def->zseek_file = win32_seek_file_func; + pzlib_filefunc_def->zclose_file = win32_close_file_func; + pzlib_filefunc_def->zerror_file = win32_error_file_func; + pzlib_filefunc_def->opaque = NULL; +} diff --git a/util/src/minizip/unzip.c b/util/src/minizip/unzip.c new file mode 100644 index 0000000..146d93a --- /dev/null +++ b/util/src/minizip/unzip.c @@ -0,0 +1,1655 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* unzip.c -- IO for uncompress .zip files using zlib + * Version 1.01e, February 12th, 2005 + * + * Copyright (C) 1998-2005 Gilles Vollant + * + * Read axis2_unzip.h for more info + * + * + * Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of + * compatibility with older software. The following is from the original crypt.c. Code + * woven in by Terry Thorsen 1/2003. + * + * + * + * Copyright (c) 1990-2000 Info-ZIP. All rights reserved. + * + * See the accompanying file LICENSE, version 2000-Apr-09 or later + * (the contents of which are also included in zip.h) for terms of use. + * If, for some reason, all these files are missing, the Info-ZIP license + * also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html + * + * + * + * crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h] + * + * The encryption/decryption parts of this source code (as opposed to the + * non-echoing password parts) were originally written in Europe. The + * whole source package can be freely distributed, including from the USA. + * (Prior to January 2000, re-export from the US was a violation of US law.) + * + * + * + * This encryption code is a direct transcription of the algorithm from + * Roger Schlafly, described by Phil Katz in the file appnote.txt. This + * file (appnote.txt) is distributed with the PKZIP program (even in the + * version without encryption capabilities). + */ + +#include +#include +#include +#include "zlib.h" +#include "axis2_unzip.h" + +#ifdef STDC +# include +# include +# include +#endif +#ifdef NO_ERRNO_H +extern int errno; +#else +# include +#endif + +#ifndef local +# define local static +#endif + +/* compile with -Dlocal if your debugger can't find static symbols */ + +#ifndef CASESENSITIVITYDEFAULT_NO +# if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) +# define CASESENSITIVITYDEFAULT_NO +# endif +#endif + +#ifndef UNZ_BUFSIZE +#define UNZ_BUFSIZE (16384) +#endif + +#ifndef UNZ_MAXFILENAMEINZIP +#define UNZ_MAXFILENAMEINZIP (256) +#endif + +#ifndef ALLOC +# define ALLOC(size) (malloc(size)) +#endif +#ifndef TRYFREE +# define TRYFREE(p) {if (p) free(p);} +#endif + +#define SIZECENTRALDIRITEM (0x2e) +#define SIZEZIPLOCALHEADER (0x1e) + +const char unz_copyright[] = + " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll"; + +/* unz_file_info_interntal contain internal info about a file in zipfile*/ +typedef struct unz_file_info_internal_s +{ + uLong offset_curfile; /* relative offset of local header 4 bytes */ +} +unz_file_info_internal; + +/* + * file_in_zip_read_info_s contain internal information about a file in zipfile, + * when reading and decompress it + */ +typedef struct +{ + char *read_buffer; /* internal buffer for compressed data */ + z_stream stream; /* zLib stream structure for inflate */ + + uLong pos_in_zipfile; /* position in byte on the zipfile, for fseek */ + uLong stream_initialised; /* flag set if stream structure is initialised */ + + uLong offset_local_extrafield; /* offset of the local extra field */ + uInt size_local_extrafield; /* size of the local extra field */ + uLong pos_local_extrafield; /* position in the local extra field in read */ + + uLong crc32; /* crc32 of all data uncompressed */ + uLong crc32_wait; /* crc32 we must obtain after decompress all */ + uLong rest_read_compressed; /* number of byte to be decompressed */ + uLong rest_read_uncompressed; /*number of byte to be obtained after decomp */ + zlib_filefunc_def z_filefunc; + voidpf filestream; /* io structore of the zipfile */ + uLong compression_method; /* compression method (0==store) */ + uLong byte_before_the_zipfile; /* byte before the zipfile, (>0 for sfx) */ + int raw; +} +file_in_zip_read_info_s; + +/* unz_s contain internal information about the zipfile */ +typedef struct +{ + zlib_filefunc_def z_filefunc; + voidpf filestream; /* io structore of the zipfile */ + unz_global_info gi; /* public global information */ + uLong byte_before_the_zipfile; /* byte before the zipfile, (>0 for sfx) */ + uLong num_file; /* number of the current file in the zipfile */ + uLong pos_in_central_dir; /* pos of the current file in the central dir */ + uLong current_file_ok; /* flag about the usability of the current file */ + uLong central_pos; /* position of the beginning of the central dir */ + + uLong size_central_dir; /* size of the central directory */ + uLong offset_central_dir; /* offset of start of central directory with + * respect to the starting disk number */ + + unz_file_info cur_file_info; /* public info about the current file in zip */ + unz_file_info_internal cur_file_info_internal; /* private info about it */ + file_in_zip_read_info_s *pfile_in_zip_read; /* structure about the current + * file if we are decompressing it */ + int encrypted; +# ifndef NOUNCRYPT + unsigned long keys[3]; /* keys defining the pseudo-random sequence */ + const unsigned long *pcrc_32_tab; +# endif +} +unz_s; + +#ifndef NOUNCRYPT +#include +#endif + +/* + * Read a byte from a gz_stream; update next_in and avail_in. Return EOF + * for end of file. + * IN assertion: the stream s has been sucessfully opened for reading. + */ + +local int unzlocal_getByte OF( + (const zlib_filefunc_def * pzlib_filefunc_def, + voidpf filestream, + int *pi)); + +local int +unzlocal_getByte( + const zlib_filefunc_def *pzlib_filefunc_def, + voidpf filestream, + int *pi) +{ + unsigned char c; + int err = (int) ZREAD(*pzlib_filefunc_def, filestream, &c, 1); + if (err == 1) + { + *pi = (int) c; + return UNZ_OK; + } + else + { + if (ZERROR(*pzlib_filefunc_def, filestream)) + return UNZ_ERRNO; + else + return UNZ_EOF; + } +} + +/* Reads a long in LSB order from the given gz_stream. Sets */ +local int unzlocal_getShort OF( + (const zlib_filefunc_def * pzlib_filefunc_def, + voidpf filestream, + uLong * pX)); + +local int +unzlocal_getShort( + const zlib_filefunc_def *pzlib_filefunc_def, + voidpf filestream, + uLong *pX) +{ + uLong x; + int i = 0; + int err = 0; + + err = unzlocal_getByte(pzlib_filefunc_def, filestream, &i); + x = (uLong) i; + + if (err == UNZ_OK) + err = unzlocal_getByte(pzlib_filefunc_def, filestream, &i); + x += ((uLong) i) << 8; + + if (err == UNZ_OK) + *pX = x; + else + *pX = 0; + return err; +} + +local int unzlocal_getLong OF( + (const zlib_filefunc_def * pzlib_filefunc_def, + voidpf filestream, + uLong * pX)); + +local int +unzlocal_getLong( + const zlib_filefunc_def *pzlib_filefunc_def, + voidpf filestream, + uLong *pX) +{ + uLong x; + int i = 0; + int err = 0; + + err = unzlocal_getByte(pzlib_filefunc_def, filestream, &i); + x = (uLong) i; + + if (err == UNZ_OK) + err = unzlocal_getByte(pzlib_filefunc_def, filestream, &i); + x += ((uLong) i) << 8; + + if (err == UNZ_OK) + err = unzlocal_getByte(pzlib_filefunc_def, filestream, &i); + x += ((uLong) i) << 16; + + if (err == UNZ_OK) + err = unzlocal_getByte(pzlib_filefunc_def, filestream, &i); + x += ((uLong) i) << 24; + + if (err == UNZ_OK) + *pX = x; + else + *pX = 0; + return err; +} + +/* My own strcmpi / strcasecmp */ +local int +strcmpcasenosensitive_internal( + const char *fileName1, + const char *fileName2) +{ + for (;;) + { + char c1 = *(fileName1++); + char c2 = *(fileName2++); + if ((c1 >= 'a') && (c1 <= 'z')) + c1 -= 0x20; + if ((c2 >= 'a') && (c2 <= 'z')) + c2 -= 0x20; + if (c1 == '\0') + return ((c2 == '\0') ? 0 : -1); + if (c2 == '\0') + return 1; + if (c1 < c2) + return -1; + if (c1 > c2) + return 1; + } +} + +#ifdef CASESENSITIVITYDEFAULT_NO +#define CASESENSITIVITYDEFAULTVALUE 2 +#else +#define CASESENSITIVITYDEFAULTVALUE 1 +#endif + +#ifndef STRCMPCASENOSENTIVEFUNCTION +#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal +#endif + +/* + * Compare two filename (fileName1,fileName2). + * If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) + * If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi + * or strcasecmp) + * If iCaseSenisivity = 0, case sensitivity is defaut of your operating system + * (like 1 on Unix, 2 on Windows) + */ +extern int ZEXPORT +unzStringFileNameCompare( + const char *fileName1, + const char *fileName2, + int iCaseSensitivity) +{ + if (iCaseSensitivity == 0) + iCaseSensitivity = CASESENSITIVITYDEFAULTVALUE; + + if (iCaseSensitivity == 1) + return strcmp(fileName1, fileName2); + + return STRCMPCASENOSENTIVEFUNCTION(fileName1, fileName2); +} + +#ifndef BUFREADCOMMENT +#define BUFREADCOMMENT (0x400) +#endif + +/* + * Locate the Central directory of a zipfile (at the end, just before + * the global comment) + */ +local uLong unzlocal_SearchCentralDir OF( + (const zlib_filefunc_def * pzlib_filefunc_def, + voidpf filestream)); + +local uLong +unzlocal_SearchCentralDir( + const zlib_filefunc_def *pzlib_filefunc_def, + voidpf filestream) +{ + unsigned char *buf; + uLong uSizeFile; + uLong uBackRead; + uLong uMaxBack = 0xffff; /* maximum size of global comment */ + uLong uPosFound = 0; + + if (ZSEEK(*pzlib_filefunc_def, filestream, 0, ZLIB_FILEFUNC_SEEK_END) != 0) + return 0; + + uSizeFile = ZTELL(*pzlib_filefunc_def, filestream); + + if (uMaxBack > uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char *) ALLOC(BUFREADCOMMENT + 4); + if (buf == NULL) + return 0; + + uBackRead = 4; + while (uBackRead < uMaxBack) + { + uLong uReadSize, + uReadPos; + int i = 0; + if (uBackRead + BUFREADCOMMENT > uMaxBack) + uBackRead = uMaxBack; + else + uBackRead += BUFREADCOMMENT; + uReadPos = uSizeFile - uBackRead; + + uReadSize = ((BUFREADCOMMENT + 4) < (uSizeFile - uReadPos)) ? + (BUFREADCOMMENT + 4) : (uSizeFile - uReadPos); + if (ZSEEK + (*pzlib_filefunc_def, filestream, uReadPos, + ZLIB_FILEFUNC_SEEK_SET) != 0) + break; + + if (ZREAD(*pzlib_filefunc_def, filestream, buf, uReadSize) != uReadSize) + break; + + for (i = (int) uReadSize - 3; (i--) > 0;) + if (((*(buf + i)) == 0x50) && ((*(buf + i + 1)) == 0x4b) && + ((*(buf + i + 2)) == 0x05) && ((*(buf + i + 3)) == 0x06)) + { + uPosFound = uReadPos + i; + break; + } + + if (uPosFound != 0) + break; + } + TRYFREE(buf); + return uPosFound; +} + +/* + * Open a Zip file. path contain the full pathname (by example, + * on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer + * "zlib/zlib114.zip". + * If the zipfile cannot be opened (file doesn't exist or in not valid), the + * return value is NULL. + * Else, the return value is a unzFile Handle, usable with other function + * of this unzip package. + */ +extern unzFile ZEXPORT +unzOpen2( + const char *path, + zlib_filefunc_def *pzlib_filefunc_def) +{ + unz_s us; + unz_s *s; + uLong central_pos, + uL; + + uLong number_disk; /* number of the current dist, used for + * spaning ZIP, unsupported, always 0 */ + uLong number_disk_with_CD; /* number the the disk with central dir, used + * for spaning ZIP, unsupported, always 0 */ + uLong number_entry_CD; /* total number of entries in + * the central dir + * (same than number_entry on nospan) */ + + int err = UNZ_OK; + + if (unz_copyright[0] != ' ') + return NULL; + + if (pzlib_filefunc_def == NULL) + fill_fopen_filefunc(&us.z_filefunc); + else + us.z_filefunc = *pzlib_filefunc_def; + + us.filestream = (*(us.z_filefunc.zopen_file)) (us.z_filefunc.opaque, + path, + ZLIB_FILEFUNC_MODE_READ | + ZLIB_FILEFUNC_MODE_EXISTING); + if (us.filestream == NULL) + return NULL; + + central_pos = unzlocal_SearchCentralDir(&us.z_filefunc, us.filestream); + if (central_pos == 0) + err = UNZ_ERRNO; + + if (ZSEEK(us.z_filefunc, us.filestream, + central_pos, ZLIB_FILEFUNC_SEEK_SET) != 0) + err = UNZ_ERRNO; + + /* the signature, already checked */ + if (unzlocal_getLong(&us.z_filefunc, us.filestream, &uL) != UNZ_OK) + err = UNZ_ERRNO; + + /* number of this disk */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream, &number_disk) != + UNZ_OK) + err = UNZ_ERRNO; + + /* number of the disk with the start of the central directory */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream, &number_disk_with_CD) + != UNZ_OK) + err = UNZ_ERRNO; + + /* total number of entries in the central dir on this disk */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream, &us.gi.number_entry) != + UNZ_OK) + err = UNZ_ERRNO; + + /* total number of entries in the central dir */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream, &number_entry_CD) != + UNZ_OK) + err = UNZ_ERRNO; + + if ((number_entry_CD != us.gi.number_entry) || + (number_disk_with_CD != 0) || (number_disk != 0)) + err = UNZ_BADZIPFILE; + + /* size of the central directory */ + if (unzlocal_getLong(&us.z_filefunc, us.filestream, &us.size_central_dir) != + UNZ_OK) + err = UNZ_ERRNO; + + /* offset of start of central directory with respect to the + * starting disk number */ + if (unzlocal_getLong(&us.z_filefunc, us.filestream, &us.offset_central_dir) + != UNZ_OK) + err = UNZ_ERRNO; + + /* zipfile comment length */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream, &us.gi.size_comment) != + UNZ_OK) + err = UNZ_ERRNO; + + if ((central_pos < us.offset_central_dir + us.size_central_dir) && + (err == UNZ_OK)) + err = UNZ_BADZIPFILE; + + if (err != UNZ_OK) + { + ZCLOSE(us.z_filefunc, us.filestream); + return NULL; + } + + us.byte_before_the_zipfile = central_pos - + (us.offset_central_dir + us.size_central_dir); + us.central_pos = central_pos; + us.pfile_in_zip_read = NULL; + us.encrypted = 0; + + s = (unz_s *) ALLOC(sizeof(unz_s)); + *s = us; + unzGoToFirstFile((unzFile) s); + return (unzFile) s; +} + +extern unzFile ZEXPORT +unzOpen( + const char *path) +{ + return unzOpen2(path, NULL); +} + +/* + * Close a ZipFile opened with unzipOpen. + * If there is files inside the .Zip opened with unzipOpenCurrentFile (see later), + * these files MUST be closed with unzipCloseCurrentFile before call unzipClose. + * return UNZ_OK if there is no problem. + */ +extern int ZEXPORT +unzClose( + unzFile file) +{ + unz_s *s; + if (file == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + + if (s->pfile_in_zip_read) + unzCloseCurrentFile(file); + + ZCLOSE(s->z_filefunc, s->filestream); + TRYFREE(s); + return UNZ_OK; +} + +/* + * Write info about the ZipFile in the *pglobal_info structure. + * No preparation of the structure is needed + * return UNZ_OK if there is no problem. + */ +extern int ZEXPORT +unzGetGlobalInfo( + unzFile file, + unz_global_info *pglobal_info) +{ + unz_s *s; + if (file == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + *pglobal_info = s->gi; + return UNZ_OK; +} + +/* Translate date/time from Dos format to tm_unz (readable more easilty) */ +local void +unzlocal_DosDateToTmuDate( + uLong ulDosDate, + tm_unz *ptm) +{ + uLong uDate; + uDate = (uLong) (ulDosDate >> 16); + ptm->tm_mday = (uInt) (uDate & 0x1f); + ptm->tm_mon = (uInt) ((((uDate) & 0x1E0) / 0x20) - 1); + ptm->tm_year = (uInt) (((uDate & 0x0FE00) / 0x0200) + 1980); + + ptm->tm_hour = (uInt) ((ulDosDate & 0xF800) / 0x800); + ptm->tm_min = (uInt) ((ulDosDate & 0x7E0) / 0x20); + ptm->tm_sec = (uInt) (2 * (ulDosDate & 0x1f)); +} + +/* Get Info about the current file in the zipfile, with internal only info */ +local int unzlocal_GetCurrentFileInfoInternal OF( + (unzFile file, + unz_file_info * pfile_info, + unz_file_info_internal * pfile_info_internal, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); + +local int +unzlocal_GetCurrentFileInfoInternal( + unzFile file, + unz_file_info *pfile_info, + unz_file_info_internal *pfile_info_internal, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize) +{ + unz_s *s; + unz_file_info file_info; + unz_file_info_internal file_info_internal; + int err = UNZ_OK; + uLong uMagic = 0x00000000; + long lSeek = 0; + + if (file == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + if (ZSEEK(s->z_filefunc, s->filestream, + s->pos_in_central_dir + s->byte_before_the_zipfile, + ZLIB_FILEFUNC_SEEK_SET) != 0) + err = UNZ_ERRNO; + + /* we check the magic */ + if (err == UNZ_OK) + { + if (unzlocal_getLong(&s->z_filefunc, s->filestream, &uMagic) != UNZ_OK) + err = UNZ_ERRNO; + } + else if (uMagic != 0x02014b50) + { + err = UNZ_BADZIPFILE; + } + + if (unzlocal_getShort(&s->z_filefunc, s->filestream, &file_info.version) != + UNZ_OK) + err = UNZ_ERRNO; + + if (unzlocal_getShort + (&s->z_filefunc, s->filestream, &file_info.version_needed) != UNZ_OK) + err = UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream, &file_info.flag) != + UNZ_OK) + err = UNZ_ERRNO; + + if (unzlocal_getShort + (&s->z_filefunc, s->filestream, + &file_info.compression_method) != UNZ_OK) + err = UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream, &file_info.dosDate) != + UNZ_OK) + err = UNZ_ERRNO; + + unzlocal_DosDateToTmuDate(file_info.dosDate, &file_info.tmu_date); + + if (unzlocal_getLong(&s->z_filefunc, s->filestream, &file_info.crc) != + UNZ_OK) + err = UNZ_ERRNO; + + if (unzlocal_getLong + (&s->z_filefunc, s->filestream, &file_info.compressed_size) != UNZ_OK) + err = UNZ_ERRNO; + + if (unzlocal_getLong + (&s->z_filefunc, s->filestream, &file_info.uncompressed_size) != UNZ_OK) + err = UNZ_ERRNO; + + if (unzlocal_getShort + (&s->z_filefunc, s->filestream, &file_info.size_filename) != UNZ_OK) + err = UNZ_ERRNO; + + if (unzlocal_getShort + (&s->z_filefunc, s->filestream, &file_info.size_file_extra) != UNZ_OK) + err = UNZ_ERRNO; + + if (unzlocal_getShort + (&s->z_filefunc, s->filestream, &file_info.size_file_comment) != UNZ_OK) + err = UNZ_ERRNO; + + if (unzlocal_getShort + (&s->z_filefunc, s->filestream, &file_info.disk_num_start) != UNZ_OK) + err = UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream, &file_info.internal_fa) + != UNZ_OK) + err = UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream, &file_info.external_fa) + != UNZ_OK) + err = UNZ_ERRNO; + + if (unzlocal_getLong + (&s->z_filefunc, s->filestream, + &file_info_internal.offset_curfile) != UNZ_OK) + err = UNZ_ERRNO; + + lSeek += file_info.size_filename; + if ((err == UNZ_OK) && (szFileName)) + { + uLong uSizeRead; + if (file_info.size_filename < fileNameBufferSize) + { + *(szFileName + file_info.size_filename) = '\0'; + uSizeRead = file_info.size_filename; + } + else + uSizeRead = fileNameBufferSize; + + if ((file_info.size_filename > 0) && (fileNameBufferSize > 0)) + if (ZREAD(s->z_filefunc, s->filestream, szFileName, uSizeRead) != + uSizeRead) + err = UNZ_ERRNO; + lSeek -= uSizeRead; + } + + if ((err == UNZ_OK) && (extraField)) + { + uLong uSizeRead; + if (file_info.size_file_extra < extraFieldBufferSize) + uSizeRead = file_info.size_file_extra; + else + uSizeRead = extraFieldBufferSize; + + if (lSeek != 0) + { + if (ZSEEK + (s->z_filefunc, s->filestream, lSeek, + ZLIB_FILEFUNC_SEEK_CUR) == 0) + lSeek = 0; + else + err = UNZ_ERRNO; + } + if ((file_info.size_file_extra > 0) && (extraFieldBufferSize > 0)) + if (ZREAD(s->z_filefunc, s->filestream, extraField, uSizeRead) != + uSizeRead) + err = UNZ_ERRNO; + lSeek += file_info.size_file_extra - uSizeRead; + } + else + lSeek += file_info.size_file_extra; + + if ((err == UNZ_OK) && (szComment)) + { + uLong uSizeRead; + if (file_info.size_file_comment < commentBufferSize) + { + *(szComment + file_info.size_file_comment) = '\0'; + uSizeRead = file_info.size_file_comment; + } + else + uSizeRead = commentBufferSize; + + if (lSeek != 0) + { + if (ZSEEK + (s->z_filefunc, s->filestream, lSeek, + ZLIB_FILEFUNC_SEEK_CUR) == 0) + lSeek = 0; + else + err = UNZ_ERRNO; + } + if ((file_info.size_file_comment > 0) && (commentBufferSize > 0)) + if (ZREAD(s->z_filefunc, s->filestream, szComment, uSizeRead) != + uSizeRead) + err = UNZ_ERRNO; + lSeek += file_info.size_file_comment - uSizeRead; + } + else + lSeek += file_info.size_file_comment; + + if ((err == UNZ_OK) && (pfile_info)) + *pfile_info = file_info; + + if ((err == UNZ_OK) && (pfile_info_internal)) + *pfile_info_internal = file_info_internal; + + return err; +} + +/* + * Write info about the ZipFile in the *pglobal_info structure. + * No preparation of the structure is needed + * return UNZ_OK if there is no problem. + */ +extern int ZEXPORT +unzGetCurrentFileInfo( + unzFile file, + unz_file_info *pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize) +{ + return unzlocal_GetCurrentFileInfoInternal(file, pfile_info, NULL, + szFileName, fileNameBufferSize, + extraField, extraFieldBufferSize, + szComment, commentBufferSize); +} + +/* + * Set the current file of the zipfile to the first file. + * return UNZ_OK if there is no problem + */ +extern int ZEXPORT +unzGoToFirstFile( + unzFile file) +{ + int err = UNZ_OK; + unz_s *s; + if (file == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + s->pos_in_central_dir = s->offset_central_dir; + s->num_file = 0; + err = unzlocal_GetCurrentFileInfoInternal(file, &s->cur_file_info, + &s->cur_file_info_internal, + NULL, 0, NULL, 0, NULL, 0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + +/* + * Set the current file of the zipfile to the next file. + * return UNZ_OK if there is no problem + * return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. + */ +extern int ZEXPORT +unzGoToNextFile( + unzFile file) +{ + unz_s *s; + int err; + + if (file == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + if (s->gi.number_entry != 0xffff) /* 2^16 files overflow hack */ + if (s->num_file + 1 == s->gi.number_entry) + return UNZ_END_OF_LIST_OF_FILE; + + s->pos_in_central_dir += + SIZECENTRALDIRITEM + s->cur_file_info.size_filename + + s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment; + s->num_file++; + err = unzlocal_GetCurrentFileInfoInternal(file, &s->cur_file_info, + &s->cur_file_info_internal, + NULL, 0, NULL, 0, NULL, 0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + +/* + * Try locate the file szFileName in the zipfile. + * For the iCaseSensitivity signification, see unzipStringFileNameCompare + * + * return value : + * UNZ_OK if the file is found. It becomes the current file. + * UNZ_END_OF_LIST_OF_FILE if the file is not found + */ +extern int ZEXPORT +unzLocateFile( + unzFile file, + const char *szFileName, + int iCaseSensitivity) +{ + unz_s *s; + int err = 0; + + /* We remember the 'current' position in the file so that we can jump + * back there if we fail. + */ + unz_file_info cur_file_infoSaved; + unz_file_info_internal cur_file_info_internalSaved; + uLong num_fileSaved; + uLong pos_in_central_dirSaved; + + if (file == NULL) + return UNZ_PARAMERROR; + + if (strlen(szFileName) >= UNZ_MAXFILENAMEINZIP) + return UNZ_PARAMERROR; + + s = (unz_s *) file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + + /* Save the current state */ + num_fileSaved = s->num_file; + pos_in_central_dirSaved = s->pos_in_central_dir; + cur_file_infoSaved = s->cur_file_info; + cur_file_info_internalSaved = s->cur_file_info_internal; + + err = unzGoToFirstFile(file); + + while (err == UNZ_OK) + { + char szCurrentFileName[UNZ_MAXFILENAMEINZIP + 1]; + err = unzGetCurrentFileInfo(file, NULL, + szCurrentFileName, + sizeof(szCurrentFileName) - 1, NULL, 0, + NULL, 0); + if (err == UNZ_OK) + { + if (unzStringFileNameCompare(szCurrentFileName, + szFileName, iCaseSensitivity) == 0) + return UNZ_OK; + err = unzGoToNextFile(file); + } + } + + /* We failed, so restore the state of the 'current file' to where we + * were. + */ + s->num_file = num_fileSaved; + s->pos_in_central_dir = pos_in_central_dirSaved; + s->cur_file_info = cur_file_infoSaved; + s->cur_file_info_internal = cur_file_info_internalSaved; + return err; +} + +/* + * Contributed by Ryan Haksi (mailto://cryogen@infoserve.net) + * I need random access + * + * Further optimization could be realized by adding an ability + * to cache the directory in memory. The goal being a single + * comprehensive file read to put the file I need in a memory. + */ + +/* +typedef struct unz_file_pos_s +{ + uLong pos_in_zip_directory; + uLong num_of_file; +} unz_file_pos; +*/ + +extern int ZEXPORT +unzGetFilePos( + unzFile file, + unz_file_pos *file_pos) +{ + unz_s *s; + + if (file == NULL || file_pos == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + + file_pos->pos_in_zip_directory = s->pos_in_central_dir; + file_pos->num_of_file = s->num_file; + + return UNZ_OK; +} + +extern int ZEXPORT +unzGoToFilePos( + unzFile file, + unz_file_pos *file_pos) +{ + unz_s *s; + int err = 0; + + if (file == NULL || file_pos == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + + /* jump to the right spot */ + s->pos_in_central_dir = file_pos->pos_in_zip_directory; + s->num_file = file_pos->num_of_file; + + /* set the current file */ + err = unzlocal_GetCurrentFileInfoInternal(file, &s->cur_file_info, + &s->cur_file_info_internal, + NULL, 0, NULL, 0, NULL, 0); + /* return results */ + s->current_file_ok = (err == UNZ_OK); + return err; +} + +/* + * Unzip Helper Functions - should be here? + */ + +/* + * Read the local header of the current zipfile + * Check the coherency of the local header and info in the end of central + * directory about this file + * store in *piSizeVar the size of extra info in local header + * (filename and size of extra field data) + */ +local int +unzlocal_CheckCurrentFileCoherencyHeader( + unz_s *s, + uInt *piSizeVar, + uLong *poffset_local_extrafield, + uInt *psize_local_extrafield) +{ + uLong uMagic, + uData, + uFlags; + uLong size_filename; + uLong size_extra_field; + int err = UNZ_OK; + + *piSizeVar = 0; + *poffset_local_extrafield = 0; + *psize_local_extrafield = 0; + + if (ZSEEK + (s->z_filefunc, s->filestream, + s->cur_file_info_internal.offset_curfile + s->byte_before_the_zipfile, + ZLIB_FILEFUNC_SEEK_SET) != 0) + return UNZ_ERRNO; + + if (err == UNZ_OK) + { + if (unzlocal_getLong(&s->z_filefunc, s->filestream, &uMagic) != UNZ_OK) + err = UNZ_ERRNO; + else if (uMagic != 0x04034b50) + err = UNZ_BADZIPFILE; + } + + if (unzlocal_getShort(&s->z_filefunc, s->filestream, &uData) != UNZ_OK) + err = UNZ_ERRNO; + /* + * else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) + * err=UNZ_BADZIPFILE; + */ + if (unzlocal_getShort(&s->z_filefunc, s->filestream, &uFlags) != UNZ_OK) + err = UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream, &uData) != UNZ_OK) + err = UNZ_ERRNO; + else if ((err == UNZ_OK) && (uData != s->cur_file_info.compression_method)) + err = UNZ_BADZIPFILE; + + if ((err == UNZ_OK) && (s->cur_file_info.compression_method != 0) && + (s->cur_file_info.compression_method != Z_DEFLATED)) + err = UNZ_BADZIPFILE; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream, &uData) != UNZ_OK) /* date/time */ + err = UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream, &uData) != UNZ_OK) /* crc */ + err = UNZ_ERRNO; + else if ((err == UNZ_OK) && (uData != s->cur_file_info.crc) && + ((uFlags & 8) == 0)) + err = UNZ_BADZIPFILE; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream, &uData) != UNZ_OK) /* size compr */ + err = UNZ_ERRNO; + else if ((err == UNZ_OK) && (uData != s->cur_file_info.compressed_size) && + ((uFlags & 8) == 0)) + err = UNZ_BADZIPFILE; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream, &uData) != UNZ_OK) /* size uncompr */ + err = UNZ_ERRNO; + else if ((err == UNZ_OK) && (uData != s->cur_file_info.uncompressed_size) && + ((uFlags & 8) == 0)) + err = UNZ_BADZIPFILE; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream, &size_filename) != + UNZ_OK) + err = UNZ_ERRNO; + else if ((err == UNZ_OK) && + (size_filename != s->cur_file_info.size_filename)) + err = UNZ_BADZIPFILE; + + *piSizeVar += (uInt) size_filename; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream, &size_extra_field) != + UNZ_OK) + err = UNZ_ERRNO; + *poffset_local_extrafield = s->cur_file_info_internal.offset_curfile + + SIZEZIPLOCALHEADER + size_filename; + *psize_local_extrafield = (uInt) size_extra_field; + + *piSizeVar += (uInt) size_extra_field; + + return err; +} + +/* + * Open for reading data the current file in the zipfile. + * If there is no error and the file is opened, the return value is UNZ_OK. + */ +extern int ZEXPORT +unzOpenCurrentFile3( + unzFile file, + int *method, + int *level, + int raw, + const char *password) +{ + int err = UNZ_OK; + uInt iSizeVar; + unz_s *s; + file_in_zip_read_info_s *pfile_in_zip_read_info; + uLong offset_local_extrafield; /* offset of the local extra field */ + uInt size_local_extrafield; /* size of the local extra field */ +# ifndef NOUNCRYPT + char source[12]; +# else + if (password) + return UNZ_PARAMERROR; +# endif + + if (file == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + if (!s->current_file_ok) + return UNZ_PARAMERROR; + + if (s->pfile_in_zip_read) + unzCloseCurrentFile(file); + + if (unzlocal_CheckCurrentFileCoherencyHeader(s, &iSizeVar, + &offset_local_extrafield, + &size_local_extrafield) != + UNZ_OK) + return UNZ_BADZIPFILE; + + pfile_in_zip_read_info = (file_in_zip_read_info_s *) + ALLOC(sizeof(file_in_zip_read_info_s)); + if (pfile_in_zip_read_info == NULL) + return UNZ_INTERNALERROR; + + pfile_in_zip_read_info->read_buffer = (char *) ALLOC(UNZ_BUFSIZE); + pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield; + pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield; + pfile_in_zip_read_info->pos_local_extrafield = 0; + pfile_in_zip_read_info->raw = raw; + + if (pfile_in_zip_read_info->read_buffer == NULL) + { + TRYFREE(pfile_in_zip_read_info); + return UNZ_INTERNALERROR; + } + + pfile_in_zip_read_info->stream_initialised = 0; + + if (method) + *method = (int) s->cur_file_info.compression_method; + + if (level) + { + *level = 6; + switch (s->cur_file_info.flag & 0x06) + { + case 6: + *level = 1; + break; + case 4: + *level = 2; + break; + case 2: + *level = 9; + break; + } + } + + if ((s->cur_file_info.compression_method != 0) && + (s->cur_file_info.compression_method != Z_DEFLATED)) + err = UNZ_BADZIPFILE; + + pfile_in_zip_read_info->crc32_wait = s->cur_file_info.crc; + pfile_in_zip_read_info->crc32 = 0; + pfile_in_zip_read_info->compression_method = + s->cur_file_info.compression_method; + pfile_in_zip_read_info->filestream = s->filestream; + pfile_in_zip_read_info->z_filefunc = s->z_filefunc; + pfile_in_zip_read_info->byte_before_the_zipfile = + s->byte_before_the_zipfile; + + pfile_in_zip_read_info->stream.total_out = 0; + + if ((s->cur_file_info.compression_method == Z_DEFLATED) && (!raw)) + { + pfile_in_zip_read_info->stream.zalloc = (alloc_func) 0; + pfile_in_zip_read_info->stream.zfree = (free_func) 0; + pfile_in_zip_read_info->stream.opaque = (voidpf) 0; + pfile_in_zip_read_info->stream.next_in = (voidpf) 0; + pfile_in_zip_read_info->stream.avail_in = 0; + + err = inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); + if (err == Z_OK) + pfile_in_zip_read_info->stream_initialised = 1; + else + { + TRYFREE(pfile_in_zip_read_info); + return err; + } + /* windowBits is passed < 0 to tell that there is no zlib header. + * Note that in this case inflate *requires* an extra "dummy" byte + * after the compressed stream in order to complete decompression and + * return Z_STREAM_END. + * In unzip, i don't wait absolutely Z_STREAM_END because I known the + * size of both compressed and uncompressed data + */ + } + pfile_in_zip_read_info->rest_read_compressed = + s->cur_file_info.compressed_size; + pfile_in_zip_read_info->rest_read_uncompressed = + s->cur_file_info.uncompressed_size; + + pfile_in_zip_read_info->pos_in_zipfile = + s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + + iSizeVar; + + pfile_in_zip_read_info->stream.avail_in = (uInt) 0; + + s->pfile_in_zip_read = pfile_in_zip_read_info; + +# ifndef NOUNCRYPT + if (password) + { + int i = 0; + s->pcrc_32_tab = get_crc_table(); + init_keys(password, s->keys, s->pcrc_32_tab); + if (ZSEEK(s->z_filefunc, s->filestream, + s->pfile_in_zip_read->pos_in_zipfile + + s->pfile_in_zip_read->byte_before_the_zipfile, SEEK_SET) != 0) + return UNZ_INTERNALERROR; + if (ZREAD(s->z_filefunc, s->filestream, source, 12) < 12) + return UNZ_INTERNALERROR; + + for (i = 0; i < 12; i++) + zdecode(s->keys, s->pcrc_32_tab, source[i]); + + s->pfile_in_zip_read->pos_in_zipfile += 12; + s->encrypted = 1; + } +# endif + + return UNZ_OK; +} + +extern int ZEXPORT +unzOpenCurrentFile( + unzFile file) +{ + return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL); +} + +extern int ZEXPORT +unzOpenCurrentFilePassword( + unzFile file, + const char *password) +{ + return unzOpenCurrentFile3(file, NULL, NULL, 0, password); +} + +extern int ZEXPORT +unzOpenCurrentFile2( + unzFile file, + int *method, + int *level, + int raw) +{ + return unzOpenCurrentFile3(file, method, level, raw, NULL); +} + +/* + * Read bytes from the current file. + * buf contain buffer where data must be copied + * len the size of buf. + * + * return the number of byte copied if somes bytes are copied + * return 0 if the end of file was reached + * return <0 with error code if there is an error + * (UNZ_ERRNO for IO error, or zLib error for uncompress error) + */ +extern int ZEXPORT +unzReadCurrentFile( + unzFile file, + voidp buf, + unsigned len) +{ + int err = UNZ_OK; + uInt iRead = 0; + unz_s *s; + file_in_zip_read_info_s *pfile_in_zip_read_info; + if (file == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + pfile_in_zip_read_info = s->pfile_in_zip_read; + + if (pfile_in_zip_read_info == NULL) + return UNZ_PARAMERROR; + + if ((pfile_in_zip_read_info->read_buffer == NULL)) + return UNZ_END_OF_LIST_OF_FILE; + if (len == 0) + return 0; + + pfile_in_zip_read_info->stream.next_out = (Bytef *) buf; + + pfile_in_zip_read_info->stream.avail_out = (uInt) len; + + if ((len > pfile_in_zip_read_info->rest_read_uncompressed) && + (!(pfile_in_zip_read_info->raw))) + pfile_in_zip_read_info->stream.avail_out = + (uInt) pfile_in_zip_read_info->rest_read_uncompressed; + + if ((len > pfile_in_zip_read_info->rest_read_compressed + + pfile_in_zip_read_info->stream.avail_in) && + (pfile_in_zip_read_info->raw)) + pfile_in_zip_read_info->stream.avail_out = + (uInt) pfile_in_zip_read_info->rest_read_compressed + + pfile_in_zip_read_info->stream.avail_in; + + while (pfile_in_zip_read_info->stream.avail_out > 0) + { + if ((pfile_in_zip_read_info->stream.avail_in == 0) && + (pfile_in_zip_read_info->rest_read_compressed > 0)) + { + uInt uReadThis = UNZ_BUFSIZE; + if (pfile_in_zip_read_info->rest_read_compressed < uReadThis) + uReadThis = (uInt) pfile_in_zip_read_info->rest_read_compressed; + if (uReadThis == 0) + return UNZ_EOF; + if (ZSEEK(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->pos_in_zipfile + + pfile_in_zip_read_info->byte_before_the_zipfile, + ZLIB_FILEFUNC_SEEK_SET) != 0) + return UNZ_ERRNO; + if (ZREAD(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->read_buffer, + uReadThis) != uReadThis) + return UNZ_ERRNO; + +# ifndef NOUNCRYPT + if (s->encrypted) + { + uInt i; + for (i = 0; i < uReadThis; i++) + pfile_in_zip_read_info->read_buffer[i] = + (char)zdecode(s->keys, s->pcrc_32_tab, + pfile_in_zip_read_info->read_buffer[i]); + /* We are sure that the conversion is safe */ + } +# endif + + pfile_in_zip_read_info->pos_in_zipfile += uReadThis; + + pfile_in_zip_read_info->rest_read_compressed -= uReadThis; + + pfile_in_zip_read_info->stream.next_in = + (Bytef *) pfile_in_zip_read_info->read_buffer; + pfile_in_zip_read_info->stream.avail_in = (uInt) uReadThis; + } + + if ((pfile_in_zip_read_info->compression_method == 0) || + (pfile_in_zip_read_info->raw)) + { + uInt uDoCopy, + i; + + if ((pfile_in_zip_read_info->stream.avail_in == 0) && + (pfile_in_zip_read_info->rest_read_compressed == 0)) + return (iRead == 0) ? UNZ_EOF : iRead; + + if (pfile_in_zip_read_info->stream.avail_out < + pfile_in_zip_read_info->stream.avail_in) + uDoCopy = pfile_in_zip_read_info->stream.avail_out; + else + uDoCopy = pfile_in_zip_read_info->stream.avail_in; + + for (i = 0; i < uDoCopy; i++) + *(pfile_in_zip_read_info->stream.next_out + i) = + *(pfile_in_zip_read_info->stream.next_in + i); + + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, + pfile_in_zip_read_info-> + stream.next_out, uDoCopy); + pfile_in_zip_read_info->rest_read_uncompressed -= uDoCopy; + pfile_in_zip_read_info->stream.avail_in -= uDoCopy; + pfile_in_zip_read_info->stream.avail_out -= uDoCopy; + pfile_in_zip_read_info->stream.next_out += uDoCopy; + pfile_in_zip_read_info->stream.next_in += uDoCopy; + pfile_in_zip_read_info->stream.total_out += uDoCopy; + iRead += uDoCopy; + } + else + { + uLong uTotalOutBefore, + uTotalOutAfter; + const Bytef *bufBefore; + uLong uOutThis; + int flush = Z_SYNC_FLUSH; + + uTotalOutBefore = pfile_in_zip_read_info->stream.total_out; + bufBefore = pfile_in_zip_read_info->stream.next_out; + + /* + * if ((pfile_in_zip_read_info->rest_read_uncompressed == + * pfile_in_zip_read_info->stream.avail_out) && + * (pfile_in_zip_read_info->rest_read_compressed == 0)) + * flush = Z_FINISH; + */ + err = inflate(&pfile_in_zip_read_info->stream, flush); + + if ((err >= 0) && (pfile_in_zip_read_info->stream.msg)) + err = Z_DATA_ERROR; + + uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; + uOutThis = uTotalOutAfter - uTotalOutBefore; + + pfile_in_zip_read_info->crc32 = + crc32(pfile_in_zip_read_info->crc32, bufBefore, + (uInt) (uOutThis)); + + pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis; + + iRead += (uInt) (uTotalOutAfter - uTotalOutBefore); + + if (err == Z_STREAM_END) + return (iRead == 0) ? UNZ_EOF : iRead; + if (err != Z_OK) + break; + } + } + + if (err == Z_OK) + return iRead; + return err; +} + +/* Give the current position in uncompressed data */ +extern z_off_t ZEXPORT +unztell( + unzFile file) +{ + unz_s *s; + file_in_zip_read_info_s *pfile_in_zip_read_info; + if (file == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + pfile_in_zip_read_info = s->pfile_in_zip_read; + + if (pfile_in_zip_read_info == NULL) + return UNZ_PARAMERROR; + + return (z_off_t) pfile_in_zip_read_info->stream.total_out; +} + +/* return 1 if the end of file was reached, 0 elsewhere */ +extern int ZEXPORT +unzeof( + unzFile file) +{ + unz_s *s; + file_in_zip_read_info_s *pfile_in_zip_read_info; + if (file == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + pfile_in_zip_read_info = s->pfile_in_zip_read; + + if (pfile_in_zip_read_info == NULL) + return UNZ_PARAMERROR; + + if (pfile_in_zip_read_info->rest_read_uncompressed == 0) + return 1; + else + return 0; +} + +/* + * Read extra field from the current file (opened by unzOpenCurrentFile) + * This is the local-header version of the extra field (sometimes, there is + * more info in the local-header version than in the central-header) + * + * if buf==NULL, it return the size of the local extra field that can be read + * + * if buf!=NULL, len is the size of the buffer, the extra header is copied in + * buf. + * the return value is the number of bytes copied in buf, or (if <0) + * the error code + */ +extern int ZEXPORT +unzGetLocalExtrafield( + unzFile file, + voidp buf, + unsigned len) +{ + unz_s *s; + file_in_zip_read_info_s *pfile_in_zip_read_info; + uInt read_now; + uLong size_to_read; + + if (file == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + pfile_in_zip_read_info = s->pfile_in_zip_read; + + if (pfile_in_zip_read_info == NULL) + return UNZ_PARAMERROR; + + size_to_read = (pfile_in_zip_read_info->size_local_extrafield - + pfile_in_zip_read_info->pos_local_extrafield); + + if (buf == NULL) + return (int) size_to_read; + + if (len > size_to_read) + read_now = (uInt) size_to_read; + else + read_now = (uInt) len; + + if (read_now == 0) + return 0; + + if (ZSEEK(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->offset_local_extrafield + + pfile_in_zip_read_info->pos_local_extrafield, + ZLIB_FILEFUNC_SEEK_SET) != 0) + return UNZ_ERRNO; + + if (ZREAD(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, buf, read_now) != read_now) + return UNZ_ERRNO; + + return (int) read_now; +} + +/* + * Close the file in zip opened with unzipOpenCurrentFile + * Return UNZ_CRCERROR if all the file was read but the CRC is not good + */ +extern int ZEXPORT +unzCloseCurrentFile( + unzFile file) +{ + int err = UNZ_OK; + + unz_s *s; + file_in_zip_read_info_s *pfile_in_zip_read_info; + if (file == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + pfile_in_zip_read_info = s->pfile_in_zip_read; + + if (pfile_in_zip_read_info == NULL) + return UNZ_PARAMERROR; + + if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) && + (!pfile_in_zip_read_info->raw)) + { + if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait) + err = UNZ_CRCERROR; + } + + TRYFREE(pfile_in_zip_read_info->read_buffer); + pfile_in_zip_read_info->read_buffer = NULL; + if (pfile_in_zip_read_info->stream_initialised) + inflateEnd(&pfile_in_zip_read_info->stream); + + pfile_in_zip_read_info->stream_initialised = 0; + TRYFREE(pfile_in_zip_read_info); + + s->pfile_in_zip_read = NULL; + + return err; +} + +/* + * Get the global comment string of the ZipFile, in the szComment buffer. + * uSizeBuf is the size of the szComment buffer. + * return the number of byte copied or an error code <0 + */ +extern int ZEXPORT +unzGetGlobalComment( + unzFile file, + char *szComment, + uLong uSizeBuf) +{ + unz_s *s; + uLong uReadThis; + if (file == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + + uReadThis = uSizeBuf; + if (uReadThis > s->gi.size_comment) + uReadThis = s->gi.size_comment; + + if (ZSEEK + (s->z_filefunc, s->filestream, s->central_pos + 22, + ZLIB_FILEFUNC_SEEK_SET) != 0) + return UNZ_ERRNO; + + if (uReadThis > 0) + { + *szComment = '\0'; + if (ZREAD(s->z_filefunc, s->filestream, szComment, uReadThis) != + uReadThis) + return UNZ_ERRNO; + } + + if ((szComment) && (uSizeBuf > s->gi.size_comment)) + *(szComment + s->gi.size_comment) = '\0'; + return (int) uReadThis; +} + +/* Additions by RX '2004 */ +extern uLong ZEXPORT +unzGetOffset( + unzFile file) +{ + unz_s *s; + + if (file == NULL) + return 0; + s = (unz_s *) file; + if (!s->current_file_ok) + return 0; + if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff) + if (s->num_file == s->gi.number_entry) + return 0; + return s->pos_in_central_dir; +} + +extern int ZEXPORT +unzSetOffset( + unzFile file, + uLong pos) +{ + unz_s *s; + int err; + + if (file == NULL) + return UNZ_PARAMERROR; + s = (unz_s *) file; + + s->pos_in_central_dir = pos; + s->num_file = s->gi.number_entry; /* hack */ + err = unzlocal_GetCurrentFileInfoInternal(file, &s->cur_file_info, + &s->cur_file_info_internal, + NULL, 0, NULL, 0, NULL, 0); + s->current_file_ok = (err == UNZ_OK); + return err; +} diff --git a/util/src/network_handler.c b/util/src/network_handler.c new file mode 100644 index 0000000..a8d154e --- /dev/null +++ b/util/src/network_handler.c @@ -0,0 +1,644 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + + +#if defined(WIN32) +/* fix for an older version of winsock2.h */ +#if !defined(SO_EXCLUSIVEADDRUSE) +#define SO_EXCLUSIVEADDRUSE ((int)(~SO_REUSEADDR)) +#endif +#endif + +#if defined(WIN32) +static int is_init_socket = 0; +axis2_bool_t axis2_init_socket( +); +#endif + +AXIS2_EXTERN axis2_socket_t AXIS2_CALL +axutil_network_handler_open_socket( + const axutil_env_t *env, + char *server, + int port) +{ + axis2_socket_t sock = AXIS2_INVALID_SOCKET; + struct sockaddr_in sock_addr; + struct linger ll; + int nodelay = 1; + +#if defined(WIN32) + if (is_init_socket == 0) + { + axis2_init_socket(); + is_init_socket = 1; + } +#endif + + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + AXIS2_PARAM_CHECK(env->error, server, AXIS2_INVALID_SOCKET); + +#ifndef WIN32 + if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) + /*AF_INET is not defined in sys/socket.h but PF_INET */ + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + return AXIS2_INVALID_SOCKET; + } +#else + if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) + /* In Win 32 if the socket creation failed it return 0 not a negative value */ + { + char buf[AXUTIL_WIN32_ERROR_BUFSIZE]; + /* Get the detailed error message */ + axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + return AXIS2_INVALID_SOCKET; + } +#endif + + memset(&sock_addr, 0, sizeof(sock_addr)); + sock_addr.sin_family = AF_INET; + sock_addr.sin_addr.s_addr = inet_addr(server); /*arpa/inet.d */ + + if(sock_addr.sin_addr.s_addr == AXIS2_INADDR_NONE) /*netinet/in.h */ + { + /* + * server may be a host name + */ + struct hostent *lphost = NULL; + lphost = gethostbyname(server); + + if(lphost) + { + sock_addr.sin_addr.s_addr = ((struct in_addr *)lphost->h_addr)->s_addr; + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_ADDRESS, AXIS2_FAILURE); + return AXIS2_INVALID_SOCKET; + } + } + + sock_addr.sin_port = htons((axis2_unsigned_short_t)port); + + /* Connect to server */ + if(connect(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0) + { + AXIS2_CLOSE_SOCKET(sock); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + return AXIS2_INVALID_SOCKET; + } + setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (const char *)&nodelay, sizeof(nodelay)); + ll.l_onoff = 1; + ll.l_linger = 5; + setsockopt(sock, SOL_SOCKET, SO_LINGER, (const char *)&ll, sizeof(struct linger)); + return sock; +} + +AXIS2_EXTERN axis2_socket_t AXIS2_CALL +axutil_network_handler_create_server_socket( + const axutil_env_t *env, + int port) +{ + axis2_socket_t sock = AXIS2_INVALID_SOCKET; + axis2_socket_t i = 0; + struct sockaddr_in sock_addr; + + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); +#if defined(WIN32) + if (is_init_socket == 0) + { + axis2_init_socket(); + is_init_socket = 1; + } +#endif + sock = socket(AF_INET, SOCK_STREAM, 0); + +#ifndef WIN32 + if(sock < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + return AXIS2_INVALID_SOCKET; + } +#else + if (sock == INVALID_SOCKET) + { + axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE]; + axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf); + return AXIS2_INVALID_SOCKET; + } +#endif + /* Address re-use */ + i = 1; +#if defined(WIN32) + setsockopt(sock, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (char *) &i, sizeof(axis2_socket_t)); /*casted 4th param to char* */ +#else + setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&i, sizeof(axis2_socket_t)); /*casted 4th param to char* */ +#endif + + /* Exec behaviour */ + AXIS2_CLOSE_SOCKET_ON_EXIT(sock) memset(&sock_addr, 0, sizeof(sock_addr)); + + sock_addr.sin_family = AF_INET; + sock_addr.sin_addr.s_addr = htonl(INADDR_ANY); + sock_addr.sin_port = htons((axis2_unsigned_short_t)port); + + /* Bind the socket to our port number */ + if(bind(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_BIND_FAILED, AXIS2_FAILURE); + return AXIS2_INVALID_SOCKET; + } + if(listen(sock, 50) < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_LISTEN_FAILED, AXIS2_FAILURE); + return AXIS2_INVALID_SOCKET; + } + return sock; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_network_handler_close_socket( + const axutil_env_t *env, + axis2_socket_t socket) +{ + int i = 0; + char buf[32]; + if(socket < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_SOCKET, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + shutdown(socket, AXIS2_SHUT_WR); + axutil_network_handler_set_sock_option(env, socket, SO_RCVTIMEO, 1); + i = recv(socket, buf, 32, 0); + AXIS2_CLOSE_SOCKET(socket); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_network_handler_set_sock_option( + const axutil_env_t *env, + axis2_socket_t socket, + int option, + int value) +{ + if(option == SO_RCVTIMEO || option == SO_SNDTIMEO) + { +#if defined(WIN32) + DWORD tv = value; /* windows expects milliseconds in a DWORD */ +#else + struct timeval tv; + /* we deal with milliseconds */ + tv.tv_sec = value / 1000; + tv.tv_usec = (value % 1000) * 1000; +#endif + setsockopt(socket, SOL_SOCKET, option, (char *)&tv, sizeof(tv)); + return AXIS2_SUCCESS; + } + else if(option == SO_REUSEADDR) + { + if((setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, (char *)&value, sizeof(value))) < 0) + { + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_socket_t AXIS2_CALL +axutil_network_handler_svr_socket_accept( + const axutil_env_t *env, + axis2_socket_t svr_socket) +{ + struct sockaddr cli_addr; + struct linger ll; + int nodelay = 1; + axis2_socket_len_t cli_len = 0; + axis2_socket_t cli_socket = AXIS2_INVALID_SOCKET; + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); + + cli_len = sizeof(cli_addr); + cli_socket = accept(svr_socket, (struct sockaddr *)&cli_addr, &cli_len); +#ifndef WIN32 + if(cli_socket < 0) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "[Axis2][network_handler] Socket accept \ + failed"); + } +#else + if (cli_socket == INVALID_SOCKET) + { + axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE]; + axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf); + } +#endif + + setsockopt(svr_socket, IPPROTO_TCP, TCP_NODELAY, (const char *)&nodelay, (int)sizeof(nodelay)); + /* We are sure that the difference lies within the int range */ + ll.l_onoff = 1; + ll.l_linger = 5; + setsockopt(cli_socket, SOL_SOCKET, SO_LINGER, (const char *)&ll, (int)sizeof(struct linger)); + /* We are sure that the difference lies within the int range */ + return cli_socket; +} + +#if defined (WIN32) +axis2_bool_t +axis2_init_socket( +) +{ + WORD wVersionRequested; + WSADATA wsaData; + int err; + wVersionRequested = MAKEWORD(2, 2); + + err = WSAStartup(wVersionRequested, &wsaData); + + if (err != 0) + return 0; /* WinSock 2.2 not found */ + + /* Confirm that the WinSock DLL supports 2.2. + * Note that if the DLL supports versions greater + * than 2.2 in addition to 2.2, it will still return + * 2.2 in wVersion since that is the version we + * requested. + */ + + if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) + { + WSACleanup(); + return 0; /* WinSock 2.2 not supported */ + } + return 1; +} +#endif + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_network_handler_get_svr_ip( + const axutil_env_t *env, + axis2_socket_t socket) +{ + struct sockaddr_in addr; + axis2_socket_len_t len = sizeof(addr); + char *ret = NULL; + memset(&addr, 0, sizeof(addr)); + if(getsockname(socket, (struct sockaddr *)&addr, &len) < 0) + { + return NULL; + } + ret = inet_ntoa(addr.sin_addr); + return ret; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_network_handler_get_peer_ip( + const axutil_env_t *env, + axis2_socket_t socket) +{ + struct sockaddr_in addr; + axis2_socket_len_t len = sizeof(addr); + char *ret = NULL; + memset(&addr, 0, sizeof(addr)); + if(getpeername(socket, (struct sockaddr *)&addr, &len) < 0) + { + return NULL; + } + ret = inet_ntoa(addr.sin_addr); + return ret; +} + +AXIS2_EXTERN axis2_socket_t AXIS2_CALL +axutil_network_handler_create_dgram_svr_socket( + const axutil_env_t *env, + int port) +{ + axis2_socket_t sock = AXIS2_INVALID_SOCKET; + struct sockaddr_in sock_addr; + + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); +#if defined(WIN32) + if (is_init_socket == 0) + { + axis2_init_socket(); + is_init_socket = 1; + } +#endif + sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + +#ifndef WIN32 + if(sock < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + return AXIS2_INVALID_SOCKET; + } +#else + if (sock == INVALID_SOCKET) + { + axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE]; + axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf); + return AXIS2_INVALID_SOCKET; + } +#endif + /* Exec behaviour */ + AXIS2_CLOSE_SOCKET_ON_EXIT(sock) memset(&sock_addr, 0, sizeof(sock_addr)); + + sock_addr.sin_family = AF_INET; + sock_addr.sin_addr.s_addr = htonl(INADDR_ANY); + sock_addr.sin_port = htons((axis2_unsigned_short_t)port); + + /* Bind the socket to our port number */ + if(bind(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_BIND_FAILED, AXIS2_FAILURE); + return AXIS2_INVALID_SOCKET; + } + return sock; +} + +AXIS2_EXTERN axis2_socket_t AXIS2_CALL +axutil_network_handler_open_dgram_socket( + const axutil_env_t *env) +{ + axis2_socket_t sock = AXIS2_INVALID_SOCKET; +#if defined(WIN32) + if (is_init_socket == 0) + { + axis2_init_socket(); + is_init_socket = 1; + } +#endif + +#ifndef WIN32 + if((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) + /*AF_INET is not defined in sys/socket.h but PF_INET */ + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + return AXIS2_INVALID_SOCKET; + } +#else + if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) + /* In Win 32 if the socket creation failed it return 0 not a negative value */ + { + char buf[AXUTIL_WIN32_ERROR_BUFSIZE]; + /* Get the detailed error message */ + axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + return AXIS2_INVALID_SOCKET; + } +#endif + return sock; +} + +/* + * This function blocks until data is available to read from the socket + * and read all the data in the socket. If the buffer size specified is + * lesser than the actual data a failure will be returned. + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_network_handler_read_dgram( + const axutil_env_t *env, + axis2_socket_t sock, + axis2_char_t *buffer, + int *buf_len, + axis2_char_t **addr, + int *port) +{ + struct sockaddr_in sender_address; + int received = 0; + unsigned int sender_address_size = sizeof(sender_address); + + received = recvfrom(sock, buffer, *buf_len, 0, (struct sockaddr *)&sender_address, + &sender_address_size); + +#ifdef WIN32 + if (SOCKET_ERROR == received) + { + axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE]; + axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf); + return AXIS2_FAILURE; + } +#else + if(received < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + return AXIS2_INVALID_SOCKET; + } +#endif + if(port && addr) + { + *port = ntohs(sender_address.sin_port); + *addr = inet_ntoa(sender_address.sin_addr); + } + *buf_len = received; + return AXIS2_SUCCESS; +} + +/* + * Sends a datagram to the specified location. + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_network_handler_send_dgram( + const axutil_env_t *env, + axis2_socket_t sock, + axis2_char_t *buff, + int *buf_len, + axis2_char_t *addr, + int dest_port, + int *source_port) +{ + struct sockaddr_in recv_addr, source_addr; + int send_bytes = 0; + unsigned int recv_addr_size = 0; + unsigned int source_addr_size = sizeof(source_addr); + recv_addr_size = sizeof(recv_addr); + + memset(&recv_addr, 0, sizeof(recv_addr)); + memset(&recv_addr, 0, sizeof(source_addr)); + + recv_addr.sin_addr.s_addr = inet_addr(addr); + if(recv_addr.sin_addr.s_addr == AXIS2_INADDR_NONE) /*netinet/in.h */ + { + /* + * server may be a host name + */ + struct hostent *lphost = NULL; + lphost = gethostbyname(addr); + + if(lphost) + { + recv_addr.sin_addr.s_addr = ((struct in_addr *)lphost->h_addr)->s_addr; + } + else + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_ADDRESS, AXIS2_FAILURE); + return AXIS2_FAILURE; + } + } + + recv_addr.sin_family = AF_INET; + recv_addr.sin_port = htons((axis2_unsigned_short_t)dest_port); + + send_bytes = sendto(sock, buff, *buf_len, 0, (struct sockaddr *)&recv_addr, recv_addr_size); + + getsockname(sock, (struct sockaddr *)&source_addr, &source_addr_size); + +#ifdef WIN32 + if (send_bytes == SOCKET_ERROR) + { + axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE]; + axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf); + return AXIS2_FAILURE; + } +#else + if(send_bytes < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + return AXIS2_FAILURE; + } +#endif + if(source_port) + { + *source_port = ntohs(source_addr.sin_port); + } + *buf_len = send_bytes; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_network_handler_bind_socket( + const axutil_env_t *env, + axis2_socket_t sock, + int port) +{ + struct sockaddr_in source_addr; + + memset(&source_addr, 0, sizeof(source_addr)); + source_addr.sin_family = AF_INET; + source_addr.sin_addr.s_addr = htonl(INADDR_ANY); + source_addr.sin_port = htons((axis2_unsigned_short_t)port); +#ifdef WIN32 + if (bind(sock, (struct sockaddr *)&source_addr, sizeof(source_addr)) == SOCKET_ERROR) + { + axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE]; + axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf); + return AXIS2_FAILURE; + } +#else + if(bind(sock, (struct sockaddr *)&source_addr, sizeof(source_addr)) < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + return AXIS2_INVALID_SOCKET; + } +#endif + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_socket_t AXIS2_CALL +axutil_network_hadler_create_multicast_svr_socket( + const axutil_env_t *env, + int port, + axis2_char_t *mul_addr) +{ + axis2_socket_t sock = AXIS2_INVALID_SOCKET; + struct sockaddr_in sock_addr; + struct ip_mreq mc_req; + + AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE); +#if defined(WIN32) + if (is_init_socket == 0) + { + axis2_init_socket(); + is_init_socket = 1; + } +#endif + sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + +#ifndef WIN32 + if(sock < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + return AXIS2_FAILURE; + } +#else + if (sock == INVALID_SOCKET) + { + axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE]; + axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf); + return AXIS2_FAILURE; + } +#endif + + /* Exec behaviour */ + AXIS2_CLOSE_SOCKET_ON_EXIT(sock) memset(&sock_addr, 0, sizeof(sock_addr)); + + sock_addr.sin_family = AF_INET; + sock_addr.sin_addr.s_addr = htonl(INADDR_ANY); + sock_addr.sin_port = htons((axis2_unsigned_short_t)port); + + /* Bind the socket to our port number */ + if(bind(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_BIND_FAILED, AXIS2_FAILURE); + return AXIS2_INVALID_SOCKET; + } + + /* Send an IGMP request to join the multicast group */ + mc_req.imr_multiaddr.s_addr = inet_addr(mul_addr); + mc_req.imr_interface.s_addr = htonl(INADDR_ANY); +#ifdef WIN32 + if ((setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &mc_req, sizeof(mc_req))) == SOCKET_ERROR) + { + axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE]; + axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf); + return AXIS2_FAILURE; + } +#else + if((setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mc_req, sizeof(mc_req))) < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + return AXIS2_FAILURE; + } +#endif + return sock; +} + diff --git a/util/src/param.c b/util/src/param.c new file mode 100644 index 0000000..48e14ae --- /dev/null +++ b/util/src/param.c @@ -0,0 +1,302 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +struct axutil_param +{ + /** Parameter name */ + axis2_char_t *name; + + /** Parameter value */ + void *value; + + /** Parameter locked? */ + axis2_bool_t locked; + + /** Parameter type */ + int type; /*default is AXIS2_TEXT_PARAM */ + axutil_hash_t *attrs; + axutil_array_list_t *value_list; + void( + AXIS2_CALL *value_free) ( + void *param_value, + const axutil_env_t *env); +}; + +AXIS2_EXTERN axutil_param_t *AXIS2_CALL +axutil_param_create( + const axutil_env_t *env, + axis2_char_t *name, + void *value) +{ + axutil_param_t *param = NULL; + AXIS2_ENV_CHECK(env, NULL); + + param = AXIS2_MALLOC(env->allocator, sizeof(axutil_param_t)); + if(!param) + { + AXIS2_ERROR_SET_ERROR_NUMBER(env->error, AXIS2_ERROR_NO_MEMORY); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Not enough memory"); + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_FAILURE); + return NULL; + } + + param->name = axutil_strdup(env, name); + param->value = value; /* shallow copy. */ + param->locked = AXIS2_FALSE; + param->type = AXIS2_TEXT_PARAM; + param->attrs = NULL; + param->value_list = NULL; + param->value_free = NULL; + + return param; +} + +axis2_char_t *AXIS2_CALL +axutil_param_get_name( + axutil_param_t *param, + const axutil_env_t *env) +{ + return param->name; +} + +void *AXIS2_CALL +axutil_param_get_value( + axutil_param_t *param, + const axutil_env_t *env) +{ + return param->value; +} + +axis2_status_t AXIS2_CALL +axutil_param_set_name( + axutil_param_t *param, + const axutil_env_t *env, + const axis2_char_t *name) +{ + param->name = axutil_strdup(env, name); + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axutil_param_set_value( + axutil_param_t *param, + const axutil_env_t *env, + const void *value) +{ + void *param_value = NULL; + param_value = axutil_param_get_value(param, env); + if(param_value) + { + if(param && param->value_free) + { + param->value_free(param_value, env); + } + else /* we assume that param value is axis2_char_t* */ + { + AXIS2_FREE(env->allocator, param_value); + } + } + param->value = (void *)value; + return AXIS2_SUCCESS; +} + +axis2_bool_t AXIS2_CALL +axutil_param_is_locked( + axutil_param_t *param, + const axutil_env_t *env) +{ + return param->locked; +} + +axis2_status_t AXIS2_CALL +axutil_param_set_locked( + axutil_param_t *param, + const axutil_env_t *env, + axis2_bool_t value) +{ + param->locked = value; + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +axutil_param_get_param_type( + axutil_param_t *param, + const axutil_env_t *env) +{ + return param->type; +} + +axis2_status_t AXIS2_CALL +axutil_param_set_param_type( + axutil_param_t *param, + const axutil_env_t *env, + int type) +{ + param->type = type; + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axutil_param_set_attributes( + axutil_param_t *param, + const axutil_env_t *env, + axutil_hash_t *attrs) +{ + AXIS2_PARAM_CHECK(env->error, attrs, AXIS2_FAILURE); + + if(param->attrs) + { + axutil_hash_index_t *i = NULL; + void *v = NULL; + + for(i = axutil_hash_first(param->attrs, env); i; i = axutil_hash_next(env, i)) + { + axutil_hash_this(i, NULL, NULL, &v); + axutil_generic_obj_free(v, env); + } + axutil_hash_free(param->attrs, env); + } + + param->attrs = attrs; + return AXIS2_SUCCESS; +} + +axutil_hash_t *AXIS2_CALL +axutil_param_get_attributes( + axutil_param_t *param, + const axutil_env_t *env) +{ + return param->attrs; +} + +axis2_status_t AXIS2_CALL +axutil_param_set_value_list( + axutil_param_t *param, + const axutil_env_t *env, + axutil_array_list_t *value_list) +{ + AXIS2_PARAM_CHECK(env->error, value_list, AXIS2_FAILURE); + + if(param->value_list) + { + int i = 0, size = 0; + + size = axutil_array_list_size(param->value_list, env); + for(i = 0; i < size; i++) + { + axutil_param_t *param = NULL; + + param = (axutil_param_t *)axutil_array_list_get(param->value_list, env, i); + axutil_param_free(param, env); + } + axutil_array_list_free(param->value_list, env); + } + param->value_list = value_list; + + return AXIS2_SUCCESS; +} + +axutil_array_list_t *AXIS2_CALL +axutil_param_get_value_list( + axutil_param_t *param, + const axutil_env_t *env) +{ + return param->value_list; +} + +void AXIS2_CALL +axutil_param_free( + axutil_param_t *param, + const axutil_env_t *env) +{ + void *param_value = NULL; + axis2_char_t *param_name = NULL; + + param_value = axutil_param_get_value(param, env); + if(param_value) + { + if(param && param->value_free) + { + param->value_free(param_value, env); + } + else /* we assume that param value is axis2_char_t* */ + { + AXIS2_FREE(env->allocator, param_value); + } + } + + if(param->attrs) + { + axutil_hash_index_t *i = NULL; + void *v = NULL; + + for(i = axutil_hash_first(param->attrs, env); i; i = axutil_hash_next(env, i)) + { + axutil_hash_this(i, NULL, NULL, &v); + axutil_generic_obj_free(v, env); + } + axutil_hash_free(param->attrs, env); + } + + if(param->value_list) + { + int i = 0, size = 0; + + size = axutil_array_list_size(param->value_list, env); + for(i = 0; i < size; i++) + { + axutil_param_t *param_l = NULL; + + param_l = (axutil_param_t *)axutil_array_list_get(param->value_list, env, i); + if(param_l) + { + axutil_param_free(param_l, env); + } + } + axutil_array_list_free(param->value_list, env); + } + param_name = axutil_param_get_name(param, env); + AXIS2_FREE(env->allocator, param_name); + AXIS2_FREE(env->allocator, param); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_param_set_value_free( + axutil_param_t *param, + const axutil_env_t *env, + AXIS2_PARAM_VALUE_FREE free_fn) +{ + param->value_free = free_fn; + return AXIS2_SUCCESS; +} + +/* Use this function for the copied parameters + * to avoid double free + */ +AXIS2_EXTERN void AXIS2_CALL +axutil_param_dummy_free_fn( + void *param, + const axutil_env_t *env) +{ + return; +} diff --git a/util/src/param_container.c b/util/src/param_container.c new file mode 100644 index 0000000..8d9f188 --- /dev/null +++ b/util/src/param_container.c @@ -0,0 +1,228 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +struct axutil_param_container +{ + axutil_hash_t *params; + axutil_array_list_t *params_list; +}; + +AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL +axutil_param_container_create( + const axutil_env_t *env) +{ + axutil_param_container_t *param_container = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + param_container = (axutil_param_container_t *)AXIS2_MALLOC(env->allocator, + sizeof(axutil_param_container_t)); + + if(!param_container) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Not enough memory"); + return NULL; + } + + param_container->params = NULL; + param_container->params_list = NULL; + param_container->params_list = axutil_array_list_create(env, 0); + + param_container->params = axutil_hash_make(env); + if(!param_container->params) + { + axutil_param_container_free(param_container, env); + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Not enough memory"); + return NULL; + } + + return param_container; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_param_container_free( + axutil_param_container_t *param_container, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(param_container->params) + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + for(hi = axutil_hash_first(param_container->params, env); hi; hi + = axutil_hash_next(env, hi)) + { + axutil_param_t *param = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + param = (axutil_param_t *)val; + if(param) + { + axutil_param_free(param, env); + param = NULL; + } + val = NULL; + } + axutil_hash_free(param_container->params, env); + } + if(param_container->params_list) + { + /* This is the array list which is returned when all params are + * requested from param_container. Params referenced here are + * actually contained in params hash table + */ + axutil_array_list_free(param_container->params_list, env); + param_container->params_list = NULL; + } + + AXIS2_FREE(env->allocator, param_container); + return; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_param_container_free_void_arg( + void *param_container, + const axutil_env_t *env) +{ + axutil_param_container_t *param_container_l = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + param_container_l = (axutil_param_container_t *)param_container; + axutil_param_container_free(param_container_l, env); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_param_container_add_param( + axutil_param_container_t *param_container, + const axutil_env_t *env, + axutil_param_t *param) +{ + axis2_char_t *param_name = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, param, AXIS2_FAILURE); + + if(!(param_container->params)) + { + param_container->params = axutil_hash_make(env); + if(!param_container->params) + { + return AXIS2_FAILURE; + } + } + param_name = axutil_param_get_name(param, env); + if(!param_name) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid param state"); + return AXIS2_FAILURE; + } + axutil_hash_set(param_container->params, param_name, AXIS2_HASH_KEY_STRING, param); + axutil_array_list_add(param_container->params_list, env, param); + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_param_t *AXIS2_CALL +axutil_param_container_get_param( + axutil_param_container_t *param_container, + const axutil_env_t *env, + const axis2_char_t *name) +{ + return (axutil_param_t *)(axutil_hash_get(param_container->params, name, AXIS2_HASH_KEY_STRING)); +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axutil_param_container_get_params( + axutil_param_container_t *param_container, + const axutil_env_t *env) +{ + if(param_container->params_list) + { + return param_container->params_list; + }else + { + axutil_hash_index_t *hi = NULL; + void *val = NULL; + + param_container->params_list = axutil_array_list_create(env, 0); + + for(hi = axutil_hash_first(param_container->params, env); hi; hi + = axutil_hash_next(env, hi)) + { + axutil_param_t *param = NULL; + axutil_hash_this(hi, NULL, NULL, &val); + param = (axutil_param_t *)val; + if(param) + { + axutil_array_list_add(param_container->params_list, env, param); + } + } + } + return param_container->params_list; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_param_container_is_param_locked( + axutil_param_container_t *param_container, + const axutil_env_t *env, + const axis2_char_t *param_name) +{ + axutil_param_t *param = NULL; + + param = (axutil_param_t *)(axutil_hash_get(param_container->params, param_name, + AXIS2_HASH_KEY_STRING)); + if(!param) + { + /* In this case we consider param is not locked */ + return AXIS2_FALSE; + } + return axutil_param_is_locked(param, env); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_param_container_delete_param( + axutil_param_container_t *param_container, + const axutil_env_t *env, + const axis2_char_t *param_name) +{ + axutil_param_t *param = NULL; + + if(!param_name) + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "The requested parameter does not exist"); + return AXIS2_FAILURE; + } + param = axutil_hash_get(param_container->params, param_name, AXIS2_HASH_KEY_STRING); + if(param) + { + /** Parameter exists, So remove it from hash table and delete the array list param_list + which will be built in the next call to get_params + */ + axutil_hash_set(param_container->params, param_name, AXIS2_HASH_KEY_STRING, NULL); + axutil_param_free(param, env); + axutil_array_list_free(param_container->params_list, env); + param_container->params_list = NULL; + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} diff --git a/util/src/platforms/unix/Makefile.am b/util/src/platforms/unix/Makefile.am new file mode 100644 index 0000000..6506a01 --- /dev/null +++ b/util/src/platforms/unix/Makefile.am @@ -0,0 +1,8 @@ +noinst_LTLIBRARIES = libaxis2_unix.la + +libaxis2_unix_la_SOURCES = uuid_gen_unix.c\ + thread_unix.c date_time_util_unix.c + +INCLUDES = -I$(top_builddir)/include \ + -I$(top_builddir)/include/platforms \ + -I$(top_builddir)/include/platforms/unix diff --git a/util/src/platforms/unix/date_time_util_unix.c b/util/src/platforms/unix/date_time_util_unix.c new file mode 100644 index 0000000..e0c4a28 --- /dev/null +++ b/util/src/platforms/unix/date_time_util_unix.c @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +AXIS2_EXTERN int AXIS2_CALL +axis2_platform_get_milliseconds() +{ + struct timeb t_current; + int milliseconds; + + ftime(&t_current); + milliseconds = t_current.millitm; + + return milliseconds; + +} diff --git a/util/src/platforms/unix/thread_unix.c b/util/src/platforms/unix/thread_unix.c new file mode 100644 index 0000000..ccedd06 --- /dev/null +++ b/util/src/platforms/unix/thread_unix.c @@ -0,0 +1,362 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "axutil_thread_unix.h" + +AXIS2_EXTERN axutil_threadattr_t *AXIS2_CALL +axutil_threadattr_create( + axutil_allocator_t * allocator) +{ + int stat = 0; + axutil_threadattr_t *new = NULL; + + new = AXIS2_MALLOC(allocator, sizeof(axutil_threadattr_t)); + if(!new) + { + return NULL; + } + stat = pthread_attr_init(&(new->attr)); + + if(stat != 0) + { + AXIS2_FREE(allocator, new); + return NULL; + } + return new; +} + +/* Destroy the threadattr object */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +threadattr_cleanup( + void *data) +{ + axutil_threadattr_t *attr = data; + int rv; + + rv = pthread_attr_destroy(&(attr->attr)); + + if(0 != rv) + { + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +#define DETACH_ARG(v) ((v) ? PTHREAD_CREATE_DETACHED : PTHREAD_CREATE_JOINABLE) + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_threadattr_detach_set( + axutil_threadattr_t * attr, + axis2_bool_t detached) +{ + if(0 == pthread_attr_setdetachstate(&(attr->attr), DETACH_ARG(detached))) + { + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_threadattr_detach_get( + axutil_threadattr_t * attr) +{ + int state = 0; + pthread_attr_getdetachstate(&(attr->attr), &state); + if(state == 1) + { + return AXIS2_TRUE; + } + return AXIS2_FALSE; +} + +static void * +dummy_worker( + void *opaque) +{ + axutil_thread_t *thread = (axutil_thread_t *)opaque; + return thread->func(thread, thread->data); +} + +AXIS2_EXTERN axutil_thread_t *AXIS2_CALL +axutil_thread_create( + axutil_allocator_t * allocator, + axutil_threadattr_t * attr, + axutil_thread_start_t func, + void *data) +{ + axis2_status_t stat; + pthread_attr_t *temp = NULL; + axutil_thread_t *new = NULL; + + new = (axutil_thread_t *)AXIS2_MALLOC(allocator, sizeof(axutil_thread_t)); + + if(!new) + { + return NULL; + } + new->td = (pthread_t *)AXIS2_MALLOC(allocator, sizeof(pthread_t)); + if(!new->td) + { + return NULL; + } + + new->data = data; + new->func = func; + new->try_exit = AXIS2_FALSE; + + if(attr) + { + temp = &(attr->attr); + } + else + { + temp = NULL; + } + + if((stat = pthread_create(new->td, temp, dummy_worker, new)) == 0) + { + return new; + } + return NULL; +} + +AXIS2_EXTERN axis2_os_thread_t AXIS2_CALL +axis2_os_thread_current( + void) +{ + return pthread_self(); +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_os_thread_equal( + axis2_os_thread_t tid1, + axis2_os_thread_t tid2) +{ + return pthread_equal(tid1, tid2); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_exit( + axutil_thread_t * thd, + axutil_allocator_t * allocator) +{ + axis2_bool_t same_thread = AXIS2_TRUE; + if(thd) + { + while(!thd->try_exit) + { + sleep(1); + } + + if(thd->td) + { + same_thread = pthread_equal(pthread_self(), *thd->td); + if(!same_thread) + { + pthread_kill(*(thd->td), 0); + axutil_thread_join(thd); + } + AXIS2_FREE(allocator, thd->td); + } + AXIS2_FREE(allocator, thd); + } + if(same_thread) + { + pthread_exit(NULL); + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_join( + axutil_thread_t * thd) +{ + void *thread_stat; + if(0 == pthread_join(*(thd->td), (void *)(&thread_stat))) + { + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_detach( + axutil_thread_t * thd) +{ + if(0 == pthread_detach(*(thd->td))) + { + thd->try_exit = AXIS2_TRUE; + return AXIS2_SUCCESS; + } + return AXIS2_FAILURE; +} + +void +axutil_thread_yield( + void) +{ + return; +} + +/** + * function is used to allocate a new key. This key now becomes valid for all threads in our process. + * When a key is created, the value it points to defaults to NULL. Later on each thread may change + * its copy of the value as it wishes. + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_key_create( + axutil_threadkey_t * axis2_key) +{ + int rc = -1; + pthread_key_t key = axis2_key->key; + rc = pthread_key_create(&key, NULL); + if(0 == rc) + return AXIS2_SUCCESS; + else + return AXIS2_FAILURE; +} + +/** + * This function is used to get the value of a given key + * @return void*. A key's value is simply a void pointer (void*) + */ +AXIS2_EXTERN void *AXIS2_CALL +axutil_thread_getspecific( + axutil_threadkey_t * axis2_key) +{ + void *value = NULL; + pthread_key_t key = axis2_key->key; + value = pthread_getspecific(key); + return value; +} + +/** + * This function is used to get the value of a given key + * @param keys value. A key's value is simply a void pointer (void*), so we can + * store in it anything that we want + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_setspecific( + axutil_threadkey_t * axis2_key, + void *value) +{ + int rc = -1; + pthread_key_t key = axis2_key->key; + rc = pthread_setspecific(key, value); + if(0 == rc) + return AXIS2_SUCCESS; + else + return AXIS2_FAILURE; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_thread_key_free( + axutil_threadkey_t * axis2_key) +{ + pthread_key_t key = axis2_key->key; + pthread_key_delete(key); +} + +AXIS2_EXTERN axis2_os_thread_t *AXIS2_CALL +axis2_os_thread_get( + axutil_thread_t * thd) +{ + if(!thd) + { + return NULL; + } + return thd->td; +} + +AXIS2_EXTERN axutil_thread_once_t *AXIS2_CALL +axutil_thread_once_init( + axutil_allocator_t * allocator) +{ +#if defined(AXIS2_SOLARIS) && (__GNUC__ <= 3) + static const pthread_once_t once_init = + { PTHREAD_ONCE_INIT}; +#else + static const pthread_once_t once_init = PTHREAD_ONCE_INIT; +#endif + axutil_thread_once_t *control = AXIS2_MALLOC(allocator, sizeof(axutil_thread_once_t)); + if(!control) + { + return NULL;; + } + (control)->once = once_init; + return control; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_once( + axutil_thread_once_t * control, + void + (*func)( + void)) +{ + return pthread_once(&(control->once), func); +} + +/*************************Thread locking functions*****************************/ +AXIS2_EXTERN axutil_thread_mutex_t *AXIS2_CALL +axutil_thread_mutex_create( + axutil_allocator_t * allocator, + unsigned int flags) +{ + axutil_thread_mutex_t *new_mutex = NULL; + + new_mutex = AXIS2_MALLOC(allocator, sizeof(axutil_thread_mutex_t)); + new_mutex->allocator = allocator; + + if(pthread_mutex_init(&(new_mutex->mutex), NULL) != 0) + { + AXIS2_FREE(allocator, new_mutex); + return NULL; + } + return new_mutex; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_mutex_lock( + axutil_thread_mutex_t * mutex) +{ + return pthread_mutex_lock(&(mutex->mutex)); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_mutex_unlock( + axutil_thread_mutex_t * mutex) +{ + if(pthread_mutex_unlock(&(mutex->mutex)) != 0) + { + return AXIS2_FAILURE; + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_mutex_destroy( + axutil_thread_mutex_t * mutex) +{ + if(0 != pthread_mutex_destroy(&(mutex->mutex))) + { + return AXIS2_FAILURE; + } + AXIS2_FREE(mutex->allocator, mutex); + return AXIS2_SUCCESS; +} diff --git a/util/src/platforms/unix/uuid_gen_unix.c b/util/src/platforms/unix/uuid_gen_unix.c new file mode 100644 index 0000000..cdc2544 --- /dev/null +++ b/util/src/platforms/unix/uuid_gen_unix.c @@ -0,0 +1,345 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_LINUX_IF_H +# include +#else +# ifdef HAVE_NET_IF_H +# include +# include +# include +# endif +# ifdef HAVE_NET_IF_TYPES_H +# include +# endif +# ifdef HAVE_NET_IF_DL_H +# include +# endif +#endif +#ifdef HAVE_GETIFADDRS +#include +#endif +#include +#include + +/* We need these static variables to track throughout the program execution */ +static axis2_bool_t axutil_uuid_gen_is_first = AXIS2_TRUE; +static struct axutil_uuid_st axutil_uuid_static; + +axutil_uuid_t *AXIS2_CALL +axutil_uuid_gen_v1() +{ + struct timeval time_now; + struct timeval tv; + unsigned long long time_val; + unsigned long long time_val2; + unsigned short int clck = 0; + axutil_uuid_t *ret_uuid = NULL; + unsigned short int time_high_version = 0; + + if(AXIS2_TRUE == axutil_uuid_gen_is_first) + { + char *mac_addr = axutil_uuid_get_mac_addr(); + memcpy(axutil_uuid_static.mac, mac_addr, 6); + axutil_uuid_static.time_seq = 0; + axutil_uuid_static.clock = 0; + free(mac_addr); + axutil_uuid_gen_is_first = AXIS2_FALSE; + } + /* + * GENERATE TIME + */ + + /* determine current system time and sequence counter */ + if(gettimeofday(&time_now, NULL) == -1) + return NULL; + + /* check whether system time changed since last retrieve */ + if(!(time_now.tv_sec == axutil_uuid_static.time_last.tv_sec && time_now.tv_usec + == axutil_uuid_static.time_last.tv_usec)) + { + /* reset time sequence counter and continue */ + axutil_uuid_static.time_seq = 0; + } + + /* until we are out of UUIDs per tick, increment + the time/tick sequence counter and continue */ + while(axutil_uuid_static.time_seq < UUIDS_PER_TICK) + { + axutil_uuid_static.time_seq++; + } + /* sleep for 1000ns (1us) */ + tv.tv_sec = 0; + tv.tv_usec = 1; + /* + The following select causes severe performance problems. + Hence commenting out. I am not sure why this is required. - Samisa. + select(0, NULL, NULL, NULL, &tv); */ + + time_val = (unsigned long long)time_now.tv_sec * 10000000ull; + time_val += (unsigned long long)time_now.tv_usec * 10ull; + + ret_uuid = malloc(sizeof(axutil_uuid_t)); + + time_val += UUID_TIMEOFFSET; + /* compensate for low resolution system clock by adding + the time/tick sequence counter */ + if(axutil_uuid_static.time_seq > 0) + time_val += (unsigned long long)axutil_uuid_static.time_seq; + + time_val2 = time_val; + ret_uuid->time_low = (unsigned long)time_val2; + time_val2 >>= 32; + ret_uuid->time_mid = (unsigned short int)time_val2; + time_val2 >>= 16; + time_high_version = (unsigned short int)time_val2; + + /* store the 60 LSB of the time in the UUID and make version 1 */ + time_high_version <<= 4; + time_high_version &= 0xFFF0; + time_high_version |= 0x0001; + ret_uuid->time_high_version = time_high_version; + + /* + * GENERATE CLOCK + */ + + /* retrieve current clock sequence */ + clck = axutil_uuid_static.clock; + + /* generate new random clock sequence (initially or if the + time has stepped backwards) or else just increase it */ + if(clck == 0 || (time_now.tv_sec < axutil_uuid_static.time_last.tv_sec || (time_now.tv_sec + == axutil_uuid_static.time_last.tv_sec && time_now.tv_usec + < axutil_uuid_static.time_last.tv_usec))) + { + srand(time_now.tv_usec); + clck = rand(); + } + else + { + clck++; + } + clck %= (2 << 14); + + /* store back new clock sequence */ + axutil_uuid_static.clock = clck; + + clck &= 0x1FFF; + clck |= 0x2000; + + /* + * FINISH + */ + /* remember current system time for next iteration */ + axutil_uuid_static.time_last.tv_sec = time_now.tv_sec; + axutil_uuid_static.time_last.tv_usec = time_now.tv_usec; + + if(!ret_uuid) + { + return NULL; + } + ret_uuid->clock_variant = clck; + memcpy(ret_uuid->mac_addr, axutil_uuid_static.mac, 6); + return ret_uuid; +} + +axis2_char_t *AXIS2_CALL +axutil_platform_uuid_gen( + char *s) +{ + axutil_uuid_t *uuid_struct = NULL; + axis2_char_t *uuid_str = NULL; + unsigned char mac[7]; + char mac_hex[13]; + + if(!s) + { + return NULL; + } + uuid_struct = axutil_uuid_gen_v1(); + if(!uuid_struct) + { + return NULL; + } + uuid_str = s; + if(!uuid_str) + { + return NULL; + } + memcpy(mac, uuid_struct->mac_addr, 6); + sprintf(mac_hex, "%02x%02x%02x%02x%02x%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + sprintf(uuid_str, "%08x-%04x-%04x-%04x-%s", uuid_struct->time_low, uuid_struct->time_mid, + uuid_struct->time_high_version, uuid_struct->clock_variant, mac_hex); + free(uuid_struct); + uuid_struct = NULL; + return uuid_str; +} + +#ifdef HAVE_LINUX_IF_H /* Linux */ + +char *AXIS2_CALL +axutil_uuid_get_mac_addr( +) +{ + struct ifreq ifr; + struct ifreq *IFR; + struct ifconf ifc; + struct sockaddr *sa; + int s = 0; + int i = 0; + char *buffer = NULL; + char buf[1024]; + int ok = AXIS2_FALSE; + + if ((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0) + return NULL; + + ifc.ifc_len = sizeof(buf); + ifc.ifc_buf = buf; + ioctl(s, SIOCGIFCONF, &ifc); + IFR = ifc.ifc_req; + + for (i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0; IFR++) + { + strcpy(ifr.ifr_name, IFR->ifr_name); + /*sprintf(ifr.ifr_name, "eth0"); */ + if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0) + { + if (!(ifr.ifr_flags & IFF_LOOPBACK)) + { + if (ioctl(s, SIOCGIFHWADDR, &ifr) == 0) + { + ok = AXIS2_TRUE; + break; + } + } + } + } + buffer = (char *) malloc(6 * sizeof(char)); + if (ok) + { + sa = (struct sockaddr *) &ifr.ifr_addr; + for (i = 0; i < 6; i++) + buffer[i] = (unsigned char) (sa->sa_data[i] & 0xff); + } + else + { + for (i = 0; i < 6; i++) + buffer[i] = (unsigned char) ((AXIS2_LOCAL_MAC_ADDR[i]) - '0'); + } + close(s); + return buffer; +} + +#else + +#ifdef HAVE_GETIFADDRS /* NetBSD, MacOSX, etc... */ + +#ifndef max +# define max(a,b) ((a) > (b) ? (a) : (b)) +#endif /* !max */ + +char *AXIS2_CALL +axutil_uuid_get_mac_addr( +) +{ + struct ifaddrs *ifap; + struct ifaddrs *ifap_head; + const struct sockaddr_dl *sdl; + unsigned char *ucp; + int i; + char *data_ptr; + + if (getifaddrs(&ifap_head) < 0) + return NULL; + for (ifap = ifap_head; ifap != NULL; ifap = ifap->ifa_next) + { + if (ifap->ifa_addr != NULL && ifap->ifa_addr->sa_family == AF_LINK) + { + sdl = (const struct sockaddr_dl *) (void *) ifap->ifa_addr; + ucp = (unsigned char *) (sdl->sdl_data + sdl->sdl_nlen); + if (sdl->sdl_alen > 0) + { + data_ptr = malloc(6 * sizeof(char)); + for (i = 0; i < 6 && i < sdl->sdl_alen; i++, ucp++) + data_ptr[i] = (unsigned char) (*ucp & 0xff); + + freeifaddrs(ifap_head); + return data_ptr; + } + } + } + freeifaddrs(ifap_head); + return NULL; +} +# else /* Solaris-ish */ + +/* code modified from that posted on: + * http://forum.sun.com/jive/thread.jspa?threadID=84804&tstart=30 + */ + +char *AXIS2_CALL +axutil_uuid_get_mac_addr() +{ + char hostname[MAXHOSTNAMELEN]; + char *data_ptr; + struct hostent *he; + struct arpreq ar; + struct sockaddr_in *sa; + int s; + int i; + + if(gethostname(hostname, sizeof(hostname)) < 0) + return NULL; + if((he = gethostbyname(hostname)) == NULL) + return NULL; + if((s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) + return NULL; + memset(&ar, 0, sizeof(ar)); + sa = (struct sockaddr_in *)((void *)&(ar.arp_pa)); + sa->sin_family = AF_INET; + memcpy(&(sa->sin_addr), *(he->h_addr_list), sizeof(struct in_addr)); + if(ioctl(s, SIOCGARP, &ar) < 0) + { + close(s); + return NULL; + } + close(s); + if(!(ar.arp_flags & ATF_COM)) + return NULL; + data_ptr = malloc(6 * sizeof(char)); + for(i = 0; i < 6; i++) + data_ptr[i] = (unsigned char)(ar.arp_ha.sa_data[i] & 0xff); + + return data_ptr; +} +# endif +#endif diff --git a/util/src/platforms/windows/axutil_windows.c b/util/src/platforms/windows/axutil_windows.c new file mode 100644 index 0000000..e2abb5d --- /dev/null +++ b/util/src/platforms/windows/axutil_windows.c @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + + +/* + +std::string* getPlatformErrorMessage(long errorNumber) +{ + std::string* returningString = new std::string(); + LPVOID lpMsgBuf; + + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + errorNumber, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &lpMsgBuf, + 0, NULL ); + + returningString->append((LPTSTR)lpMsgBuf); + LocalFree(lpMsgBuf); + + return returningString; +} + */ +AXIS2_EXTERN HMODULE AXIS2_CALL +callLoadLib( + char *lib) +{ + /* Disable display of the critical-error-handler message box */ + SetErrorMode(SEM_FAILCRITICALERRORS); + return LoadLibraryEx(lib, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); +} + +AXIS2_EXTERN struct tm *AXIS2_CALL +axis2_win_gmtime( + const time_t * timep, + struct tm *result) +{ + return gmtime(timep); +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_win32_get_last_error( + axis2_char_t *buf, + unsigned int buf_size) +{ + LPVOID lpMsgBuf; + int rc = GetLastError(); + sprintf(buf, "DLL Load Error %d: ", rc); + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, rc, 0, + (LPTSTR) & lpMsgBuf, 0, NULL); + if(lpMsgBuf) + { + strncat(buf, (char*)lpMsgBuf, buf_size - strlen(buf) - 1); + } + LocalFree(lpMsgBuf); +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_win32_get_last_wsa_error( + axis2_char_t *buf, + unsigned int buf_size) +{ + LPVOID lpMsgBuf; + int rc = WSAGetLastError(); + sprintf(buf, "Winsock error %d: ", rc); + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, rc, 0, + (LPTSTR) & lpMsgBuf, 0, NULL); + if(lpMsgBuf) + { + strncat(buf, (char*)lpMsgBuf, buf_size - strlen(buf) - 1); + } + LocalFree(lpMsgBuf); +} diff --git a/util/src/platforms/windows/date_time_util_windows.c b/util/src/platforms/windows/date_time_util_windows.c new file mode 100644 index 0000000..c07903b --- /dev/null +++ b/util/src/platforms/windows/date_time_util_windows.c @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +AXIS2_EXTERN int AXIS2_CALL +axis2_platform_get_milliseconds() +{ + struct _timeb timebuffer; + char *timeline; + int milliseconds = 0; + + _ftime(&timebuffer); + timeline = ctime(&(timebuffer.time)); + milliseconds = timebuffer.millitm; + + return milliseconds; +} diff --git a/util/src/platforms/windows/dir_windows.c b/util/src/platforms/windows/dir_windows.c new file mode 100644 index 0000000..1e0ad8f --- /dev/null +++ b/util/src/platforms/windows/dir_windows.c @@ -0,0 +1,272 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include + +/*dirent.h style mehtods for win32*/ + +AXIS2_DIR *AXIS2_CALL +axis2_opendir( + const char *_dirname) +{ + AXIS2_DIR *dirp; + char *filespec; + long handle; + int index; + + filespec = malloc(strlen(_dirname) + 2 + 1); + strcpy(filespec, _dirname); + index = (int)strlen(filespec) - 1; + if(index >= 0 && (filespec[index] == '/' || (filespec[index] == '\\' && !IsDBCSLeadByte( + filespec[index - 1])))) + filespec[index] = '\0'; + strcat(filespec, "/*"); + + dirp = (AXIS2_DIR *)malloc(sizeof(AXIS2_DIR)); + dirp->offset = 0; + dirp->finished = 0; + + if((handle = (long)_findfirst(filespec, &(dirp->fileinfo))) < 0) + /* We are sure that the difference lies within the long range */ + { + if(errno == ENOENT || errno == EINVAL) + dirp->finished = 1; + else + { + free(dirp); + free(filespec); + return NULL; + } + } + /* We are using the ISO C++ conformant name: _strdup, as demanded by VS 2005 */ + dirp->dirname = _strdup(_dirname); + dirp->handle = handle; + free(filespec); + + return dirp; +} + +int AXIS2_CALL +axis2_closedir( + AXIS2_DIR * _dirp) +{ + int iret = -1; + if(!_dirp) + return iret; + iret = _findclose(_dirp->handle); + if(_dirp->dirname) + free(_dirp->dirname); + if(_dirp) + free(_dirp); + + return iret; +} + +struct dirent *AXIS2_CALL +axis2_readdir( + AXIS2_DIR * _dirp) +{ + if(!_dirp || _dirp->finished) + return NULL; + + if(_dirp->offset != 0) + { + if(_findnext(_dirp->handle, &(_dirp->fileinfo)) < 0) + { + _dirp->finished = 1; + return NULL; + } + } + _dirp->offset++; + + strcpy(_dirp->dent.d_name, _dirp->fileinfo.name); /*, _MAX_FNAME+1); */ + _dirp->dent.d_ino = 1; + _dirp->dent.d_reclen = (unsigned short)strlen(_dirp->dent.d_name); + _dirp->dent.d_off = _dirp->offset; + + return &(_dirp->dent); +} + +int AXIS2_CALL +axis2_readdir_r( + AXIS2_DIR * _dirp, + struct dirent *_entry, + struct dirent **__result) +{ + if(!_dirp || _dirp->finished) + { + *__result = NULL; + return -1; + } + + if(_dirp->offset != 0) + { + if(_findnext(_dirp->handle, &(_dirp->fileinfo)) < 0) + { + _dirp->finished = 1; + *__result = NULL; + return -1; + } + } + _dirp->offset++; + + strcpy(_dirp->dent.d_name, _dirp->fileinfo.name); /*, _MAX_FNAME+1); */ + _dirp->dent.d_ino = 1; + _dirp->dent.d_reclen = (unsigned short)strlen(_dirp->dent.d_name); + _dirp->dent.d_off = _dirp->offset; + + memcpy(_entry, &_dirp->dent, sizeof(*_entry)); + + *__result = &_dirp->dent; + + return 0; +} + +int AXIS2_CALL +axis2_rewinddir( + AXIS2_DIR * dirp) +{ + char *filespec; + long handle; + int index; + + _findclose(dirp->handle); + + dirp->offset = 0; + dirp->finished = 0; + + filespec = malloc(strlen(dirp->dirname) + 2 + 1); + strcpy(filespec, dirp->dirname); + index = (int)(strlen(filespec) - 1); + if(index >= 0 && (filespec[index] == '/' || filespec[index] == '\\')) + filespec[index] = '\0'; + strcat(filespec, "/*"); + + if((handle = (long)_findfirst(filespec, &(dirp->fileinfo))) < 0) + /* We are sure that the difference lies within the int range */ + { + if(errno == ENOENT || errno == EINVAL) + dirp->finished = 1; + } + dirp->handle = handle; + free(filespec); + + return 0; +} + +int +alphasort( + const struct dirent **__d1, + const struct dirent **__d2) +{ + return strcoll((*__d1)->d_name, (*__d2)->d_name); +} + +int AXIS2_CALL +axis2_scandir( + const char *_dirname, + struct dirent **__namelist[], + int + (*selector)( + const struct dirent * entry), + int + (*compare)( + const struct dirent ** __d1, + const struct dirent ** __d2)) +{ + AXIS2_DIR *dirp = NULL; + struct dirent **vector = NULL; + struct dirent *dp = NULL; + int vector_size = 0; + int nfiles = 0; + + if(__namelist == NULL) + { + return -1; + } + dirp = axis2_opendir(_dirname); + if(!dirp) + { + return -1; + } + dp = axis2_readdir(dirp); + while(dp) + { + int dsize = 0; + struct dirent *newdp = NULL; + + if(selector && (*selector)(dp) == 0) + { + dp = axis2_readdir(dirp); + continue; + } + + if(nfiles == vector_size) + { + struct dirent **newv; + if(vector_size == 0) + { + vector_size = 10; + } + else + { + vector_size *= 2; + } + + newv = (struct dirent **)realloc(vector, vector_size * sizeof(struct dirent *)); + if(!newv) + { + return -1; + } + vector = newv; + } + + /*dsize = + (int) sizeof(struct dirent) + + (int) ((strlen(dp->d_name) + 1) * sizeof(char));*/ + dsize = (int)sizeof(struct dirent); + newdp = (struct dirent *)malloc(dsize); + + if(newdp == NULL) + { + while(nfiles-- > 0) + { + free(vector[nfiles]); + } + free(vector); + return -1; + } + + vector[nfiles++] = (struct dirent *)memcpy(newdp, dp, dsize); + dp = axis2_readdir(dirp); + } + + axis2_closedir(dirp); + + *__namelist = vector; + + if(compare) + { + qsort(*__namelist, nfiles, sizeof(struct dirent *), compare); + } + + return nfiles; +} diff --git a/util/src/platforms/windows/getopt_windows.c b/util/src/platforms/windows/getopt_windows.c new file mode 100644 index 0000000..6f5e18b --- /dev/null +++ b/util/src/platforms/windows/getopt_windows.c @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#ifndef AXIS2_GET_OPT_DEFINE_MODE_NO_IMPORT +/* Required by "axutil_getopt_windows.h" */ +#define AXIS2_GET_OPT_DEFINE_MODE_NO_IMPORT +#endif +#include + +int optind = 1; +int opterr = 1; +int optopt; +char *optarg; + +#define AXIS2_OPT_ERR_NO_ARG 1 +#define AXIS2_OPT_ERR_INVALID_OPTION 2 +#define AXIS2_OPT_ERR_BAD_ARG 3 + +int +_axis2_opt_error( + int __optopt, + int __err, + int __showerr) +{ + switch(__err) + { + case AXIS2_OPT_ERR_NO_ARG: + if(__showerr) + fprintf(stderr, " option requires an argument -- %c\n", __optopt); + break; + case AXIS2_OPT_ERR_INVALID_OPTION: + if(__showerr) + fprintf(stderr, " illegal option -- %c\n", __optopt); + break; + case AXIS2_OPT_ERR_BAD_ARG: + return (int)':'; + default: + if(__showerr) + fprintf(stderr, "unknown\n"); + } + return (int)'?'; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_getopt( + int __argc, + char * const *__argv, + const char *__shortopts) +{ + static char *pos = ""; + char *olstindex = NULL; + + if(!*pos) + { + /* no option or invalid option */ + if(optind >= __argc || *(pos = __argv[optind]) != '-') + { + pos = ""; + return -1; + } + + /*-- option*/ + if(pos[1] && *++pos == '-') + { + ++optind; + pos = ""; + return -1; + } + } + + if((optopt = (int)*pos++) == (int)':') + { + if(optopt == (int)'-') + return -1; + if(!*pos) + ++optind; + if(*__shortopts != ':') + return _axis2_opt_error(optopt, AXIS2_OPT_ERR_BAD_ARG, opterr); + _axis2_opt_error(optopt, AXIS2_OPT_ERR_INVALID_OPTION, opterr); + } + else + { + olstindex = strchr(__shortopts, optopt); + if(!olstindex) + { + if(optopt == (int)'-') + return -1; + if(!*pos) + ++optind; + if(*__shortopts != ':') + return _axis2_opt_error(optopt, AXIS2_OPT_ERR_BAD_ARG, opterr); + _axis2_opt_error(optopt, AXIS2_OPT_ERR_INVALID_OPTION, opterr); + } + } + + if(!olstindex || *++olstindex != ':') + { + optarg = NULL; + if(!*pos) + ++optind; + } + else + { + if(*pos) + optarg = pos; + else if(__argc <= ++optind) + { + pos = ""; + if(*__shortopts == ':') + return _axis2_opt_error(-1, AXIS2_OPT_ERR_BAD_ARG, opterr); + return _axis2_opt_error(optopt, AXIS2_OPT_ERR_NO_ARG, opterr); + } + else + optarg = __argv[optind]; + pos = ""; + ++optind; + } + return optopt; +} diff --git a/util/src/platforms/windows/thread_mutex_windows.c b/util/src/platforms/windows/thread_mutex_windows.c new file mode 100644 index 0000000..13df497 --- /dev/null +++ b/util/src/platforms/windows/thread_mutex_windows.c @@ -0,0 +1,148 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +static axis2_status_t +thread_mutex_cleanup( + void *data) +{ + axutil_thread_mutex_t *lock = NULL; + axutil_allocator_t *allocator = NULL; + if(!data) + return AXIS2_FAILURE; + + lock = (axutil_thread_mutex_t *)data; + allocator = lock->allocator; + + if(lock->type == thread_mutex_critical_section) + { + DeleteCriticalSection(&lock->section); + } + else + { + if(!CloseHandle(lock->handle)) + { + return AXIS2_FAILURE; + } + } + + AXIS2_FREE(allocator, lock); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_thread_mutex_t *AXIS2_CALL +axutil_thread_mutex_create( + axutil_allocator_t * allocator, + unsigned int flags) +{ + axutil_thread_mutex_t *mutex = NULL; + + mutex = (axutil_thread_mutex_t *)AXIS2_MALLOC(allocator, sizeof(axutil_thread_mutex_t)); + mutex->allocator = allocator; + + if(flags == AXIS2_THREAD_MUTEX_DEFAULT) /*unnested */ + { + /* Use an auto-reset signaled event, ready to accept one + * waiting thread. + */ + mutex->type = thread_mutex_unnested_event; + mutex->handle = CreateEvent(NULL, FALSE, TRUE, NULL); + } + else + { + /* TODO :support critical_section and nested_mutex */ + } + + return mutex; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_mutex_lock( + axutil_thread_mutex_t * mutex) +{ + if(mutex->type == thread_mutex_critical_section) + { + EnterCriticalSection(&mutex->section); + } + else + { + DWORD rv = WaitForSingleObject(mutex->handle, INFINITE); + if((rv != WAIT_OBJECT_0) && (rv != WAIT_ABANDONED)) + { + return AXIS2_FAILURE; + /*can be either BUSY or an os specific error */ + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_mutex_trylock( + axutil_thread_mutex_t * mutex) +{ + + if(mutex->type == thread_mutex_critical_section) + { + /* TODO :implement trylock for critical section */ + } + else + { + DWORD rv = WaitForSingleObject(mutex->handle, 0); + if((rv != WAIT_OBJECT_0) && (rv != WAIT_ABANDONED)) + { + /*can be either BUSY or an os specific error */ + return AXIS2_FAILURE; + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_mutex_unlock( + axutil_thread_mutex_t * mutex) +{ + if(mutex->type == thread_mutex_critical_section) + { + LeaveCriticalSection(&mutex->section); + } + else if(mutex->type == thread_mutex_unnested_event) + { + if(!SetEvent(mutex->handle)) + { + /*os specific error */ + return AXIS2_FAILURE; + } + } + else if(mutex->type == thread_mutex_nested_mutex) + { + if(!ReleaseMutex(mutex->handle)) + { + /*os specific error */ + return AXIS2_FAILURE; + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_mutex_destroy( + axutil_thread_mutex_t * mutex) +{ + return thread_mutex_cleanup((void *)mutex); +} diff --git a/util/src/platforms/windows/thread_windows.c b/util/src/platforms/windows/thread_windows.c new file mode 100644 index 0000000..67af332 --- /dev/null +++ b/util/src/platforms/windows/thread_windows.c @@ -0,0 +1,326 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +DWORD tls_axutil_thread = 0; + +AXIS2_EXTERN axutil_threadattr_t *AXIS2_CALL +axutil_threadattr_create( + axutil_allocator_t * allocator) +{ + axutil_threadattr_t *new = NULL; + + new = AXIS2_MALLOC(allocator, sizeof(axutil_threadattr_t)); + if(!new) + { + /*AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE) */ + return NULL; + } + new->detach = 0; + new->stacksize = 0; + + return new; +} + +/* Destroy the threadattr object */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +threadattr_cleanup( + void *data) +{ + /*axutil_threadattr_t *attr = data;*/ + /*nothing to clean up */ + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_threadattr_detach_set( + axutil_threadattr_t * attr, + axis2_bool_t detached) +{ + attr->detach = detached; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_threadattr_detach_get( + axutil_threadattr_t * attr, + const axutil_env_t * env) +{ + if(1 == attr->detach) + { + return AXIS2_TRUE; + } + return AXIS2_FALSE; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_threadattr_stacksize_set( + axutil_threadattr_t * attr, + size_t stacksize) +{ + attr->stacksize = stacksize; + return AXIS2_SUCCESS; +} + +static void * +dummy_worker( + void *opaque) +{ + axutil_thread_t *thd = (axutil_thread_t *)opaque; + TlsSetValue(tls_axutil_thread, thd->td); + return thd->func(thd, thd->data); +} + +AXIS2_EXTERN axutil_thread_t *AXIS2_CALL +axutil_thread_create( + axutil_allocator_t * allocator, + axutil_threadattr_t * attr, + axutil_thread_start_t func, + void *data) +{ + HANDLE handle; + unsigned long temp; + axutil_thread_t *new = NULL; + + new = (axutil_thread_t *)AXIS2_MALLOC(allocator, sizeof(axutil_thread_t)); + + if(!new) + { + return NULL; + } + + new->data = data; + new->func = func; + new->td = NULL; + new->try_exit = AXIS2_FALSE; + + /* Use 0 for Thread Stack Size, because that will default the stack to the + * same size as the calling thread. + */ + if((handle = + CreateThread(NULL, attr && + attr->stacksize > 0 ? attr->stacksize : 0, + (unsigned long (AXIS2_THREAD_FUNC *) (void *)) + dummy_worker, new, 0, &temp)) == 0) + { + return NULL; + } + + if(attr && attr->detach) + { + CloseHandle(handle); + } + else + new->td = handle; + + return new; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_exit( + axutil_thread_t * thd, + axutil_allocator_t * allocator) +{ + axis2_status_t status = AXIS2_SUCCESS; + + if(thd) + { + if(thd->td && (axis2_os_thread_current() != thd->td)) + { + TerminateThread(thd->td, 0); + axutil_thread_join(thd); + AXIS2_FREE(allocator, thd); + return status; + } + AXIS2_FREE(allocator, thd); + } + if(status) + { + ExitThread(0); + } + + return status; +} + +AXIS2_EXTERN axis2_os_thread_t AXIS2_CALL +axis2_os_thread_current( + void) +{ + HANDLE hthread = (HANDLE)TlsGetValue(tls_axutil_thread); + HANDLE hproc; + + if(hthread) + { + return hthread; + } + + hproc = GetCurrentProcess(); + hthread = GetCurrentThread(); + if(!DuplicateHandle(hproc, hthread, hproc, &hthread, 0, FALSE, DUPLICATE_SAME_ACCESS)) + { + return NULL; + } + TlsSetValue(tls_axutil_thread, hthread); + return hthread; +} + +AXIS2_EXTERN int AXIS2_CALL +axis2_os_thread_equal( + axis2_os_thread_t tid1, + axis2_os_thread_t tid2) +{ + return (tid1 == tid2); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_join( + axutil_thread_t * thd) +{ + axis2_status_t rv = AXIS2_SUCCESS, rv1; + + if(!thd->td) + { + /* Can not join on detached threads */ + return AXIS2_FAILURE; + } + rv1 = WaitForSingleObject(thd->td, INFINITE); + if(rv1 == WAIT_OBJECT_0 || rv1 == WAIT_ABANDONED) + { + /*rv = AXIS2_INCOMPLETE; */ + } + else + rv = AXIS2_FAILURE; + CloseHandle(thd->td); + thd->td = NULL; + + return rv; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_detach( + axutil_thread_t * thd) +{ + if(thd->td && CloseHandle(thd->td)) + { + thd->td = NULL; + return AXIS2_SUCCESS; + } + else + { + return AXIS2_FAILURE; + } +} + +AXIS2_EXTERN axis2_os_thread_t AXIS2_CALL +axis2_os_thread_get( + axutil_thread_t * thd, + const axutil_env_t * env) +{ + return thd->td; +} + +/** + * function is used to allocate a new key. This key now becomes valid for all threads in our process. + * When a key is created, the value it points to defaults to NULL. Later on each thread may change + * its copy of the value as it wishes. + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_key_create( + axutil_threadkey_t * axis2_key) +{ + DWORD tls_key = axis2_key->key; + if ((tls_key = TlsAlloc()) == TLS_OUT_OF_INDEXES) + { + return AXIS2_FAILURE; + } + else + { + return AXIS2_SUCCESS; + } +} + +/** + * This function is used to get the value of a given key + * @return void*. A key's value is simply a void pointer (void*) + */ +AXIS2_EXTERN void *AXIS2_CALL +axutil_thread_getspecific( + axutil_threadkey_t * axis2_key) +{ + void *value = NULL; + DWORD tls_key = axis2_key->key; + value = TlsGetValue(tls_key); + return value; +} + +/** + * This function is used to get the value of a given key + * @param keys value. A key's value is simply a void pointer (void*), so we can + * store in it anything that we want + */ +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_setspecific( + axutil_threadkey_t * axis2_key, + void *value) +{ + DWORD tls_key = axis2_key->key; + if(!TlsSetValue(tls_key, value)) + { + return AXIS2_FAILURE; + } + else + { + return AXIS2_SUCCESS; + } +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_thread_key_free( + axutil_threadkey_t * axis2_key) +{ + DWORD tls_key = axis2_key->key; + TlsFree(tls_key); +} + +AXIS2_EXTERN axutil_thread_once_t *AXIS2_CALL +axutil_thread_once_init( + axutil_allocator_t * allocator) +{ + axutil_thread_once_t *control = NULL; + control = AXIS2_MALLOC(allocator, sizeof(*control)); + if(control) + { + control->value = 0; + } + return control; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_once( + axutil_thread_once_t * control, + void + (*func)( + void)) +{ + if(!InterlockedExchange(&control->value, 1)) + { + func(); + } + return AXIS2_SUCCESS; +} diff --git a/util/src/platforms/windows/uuid_gen_windows.c b/util/src/platforms/windows/uuid_gen_windows.c new file mode 100644 index 0000000..c075746 --- /dev/null +++ b/util/src/platforms/windows/uuid_gen_windows.c @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +AXIS2_EXTERN axis2_char_t * AXIS2_CALL +axutil_platform_uuid_gen( + char *s) +{ + RPC_STATUS retval; + UUID uuid; + unsigned char *str; + axis2_char_t * retstr; + + if(!s) + { + return NULL; + } + + retstr = s; + retval = UuidCreate(&uuid); + if(retval == RPC_S_UUID_LOCAL_ONLY) + { + printf("warning - unique within computer \n"); + } + else if(retval == RPC_S_UUID_NO_ADDRESS) + { + return NULL; + } + + retval = UuidToStringA(&uuid, &str); + + if(retval == RPC_S_OK) + { + strcpy(retstr, (char *)str); + RpcStringFree(&str); + } + else if(retval == RPC_S_OUT_OF_MEMORY) + { + return NULL; + } + return retstr; +} diff --git a/util/src/properties.c b/util/src/properties.c new file mode 100644 index 0000000..265765e --- /dev/null +++ b/util/src/properties.c @@ -0,0 +1,363 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#define MAX_SIZE 1024 +#define MAX_ALLOC (MAX_SIZE * 64) + +axis2_char_t * +axutil_properties_read( + FILE *input, + const axutil_env_t *env); + +axis2_char_t * +axutil_properties_read_next( + axis2_char_t *cur); + +axis2_char_t * +axutil_properties_trunk_and_dup( + axis2_char_t *start, + axis2_char_t *end, + const axutil_env_t *env); + +struct axutil_properties +{ + axutil_hash_t *prop_hash; +}; + +AXIS2_EXTERN axutil_properties_t *AXIS2_CALL +axutil_properties_create( + const axutil_env_t *env) +{ + axutil_properties_t *properties = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + properties = (axutil_properties_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_properties_t)); + + if(!properties) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Not enough memory"); + return NULL; + } + properties->prop_hash = axutil_hash_make(env); + + return properties; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_properties_free( + axutil_properties_t *properties, + const axutil_env_t *env) +{ + axis2_char_t *key = NULL; + axis2_char_t *value = NULL; + axutil_hash_index_t *hi = NULL; + + if(properties->prop_hash) + { + for(hi = axutil_hash_first(properties->prop_hash, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, (void *)&key, NULL, (void *)&value); + if(key) + { + AXIS2_FREE(env->allocator, key); + } + if(value) + { + AXIS2_FREE(env->allocator, value); + } + } + axutil_hash_free(properties->prop_hash, env); + } + + if(properties) + { + AXIS2_FREE(env->allocator, properties); + } + return; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_properties_get_property( + axutil_properties_t *properties, + const axutil_env_t *env, + axis2_char_t *key) +{ + AXIS2_PARAM_CHECK(env->error, key, NULL); + + return axutil_hash_get(properties->prop_hash, key, AXIS2_HASH_KEY_STRING); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_properties_set_property( + axutil_properties_t *properties, + const axutil_env_t *env, + axis2_char_t *key, + axis2_char_t *value) +{ + axis2_char_t *old = NULL; + AXIS2_PARAM_CHECK(env->error, key, AXIS2_FAILURE); + + old = axutil_properties_get_property(properties, env, key); + if(old) + { + AXIS2_FREE(env->allocator, old); + axutil_hash_set(properties->prop_hash, key, AXIS2_HASH_KEY_STRING, + axutil_strdup(env, value)); + return AXIS2_SUCCESS; + } + axutil_hash_set(properties->prop_hash, axutil_strdup(env, key), AXIS2_HASH_KEY_STRING, + axutil_strdup(env, value)); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axutil_hash_t *AXIS2_CALL +axutil_properties_get_all( + axutil_properties_t *properties, + const axutil_env_t *env) +{ + return properties->prop_hash; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_properties_store( + axutil_properties_t *properties, + const axutil_env_t *env, + FILE *output) +{ + axutil_hash_index_t *hi = NULL; + axis2_char_t *key = NULL; + axis2_char_t *value = NULL; + + AXIS2_PARAM_CHECK(env->error, output, AXIS2_FAILURE); + + if(properties->prop_hash) + { + for(hi = axutil_hash_first(properties->prop_hash, env); hi; hi = axutil_hash_next(env, hi)) + { + axutil_hash_this(hi, (void *)&key, NULL, (void *)&value); + if(key) + { + if(!value) + { + value = axutil_strdup(env, ""); + } + fprintf(output, "%s=%s\n", key, value); + } + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_properties_load( + axutil_properties_t *properties, + const axutil_env_t *env, + axis2_char_t *input_filename) +{ + FILE *input = NULL; + axis2_char_t *cur = NULL; + axis2_char_t *tag = NULL; + const int LINE_STARTED = -1; + const int LINE_MIDWAY = 0; + const int EQUAL_FOUND = 1; + const int LINE_HALFWAY = 2; + int status = LINE_STARTED; + + axis2_char_t *key = NULL; + axutil_hash_t *prop_hash = NULL; + axis2_char_t *buffer = NULL; + axis2_char_t loginfo[1024]; + + AXIS2_PARAM_CHECK(env->error, input_filename, AXIS2_FAILURE); + + prop_hash = properties->prop_hash; + + input = fopen(input_filename, "r+"); + if(!input) + { + return AXIS2_FAILURE; + } + buffer = axutil_properties_read(input, env); + + if(!buffer) + { + sprintf(loginfo, "error in reading file\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, loginfo); + AXIS2_FREE(env->allocator, buffer); + return AXIS2_FAILURE; + } + + for(cur = axutil_properties_read_next(buffer); *cur; cur = axutil_properties_read_next(++cur)) + { + if(*cur == '\r') + { + *cur = '\0'; + } + else if(*cur != '\0' && *cur != '\n' && status == LINE_STARTED) + { + tag = cur; + status = LINE_MIDWAY; + } + /* equal found just create a property */ + else if(*cur == '=' && status == LINE_MIDWAY) + { + *cur = '\0'; + if(status != LINE_MIDWAY) + { + sprintf(loginfo, "equal apear in wrong place around %s\n", tag); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, loginfo); + AXIS2_FREE(env->allocator, buffer); + return AXIS2_FAILURE; + } + status = EQUAL_FOUND; + key = axutil_properties_trunk_and_dup(tag, cur, env); + } + /* right next to the equal found */ + else if(status == EQUAL_FOUND) + { + tag = cur; + status = LINE_HALFWAY; + } + + else if(*cur == '\n') + { + *cur = '\0'; + if(status == LINE_HALFWAY) + { + tag = axutil_properties_trunk_and_dup(tag, cur, env); + axutil_hash_set(prop_hash, key, AXIS2_HASH_KEY_STRING, tag); + } + status = LINE_STARTED; + } + } + if(status == LINE_HALFWAY) + { + *cur = '\0'; + tag = axutil_properties_trunk_and_dup(tag, cur, env); + axutil_hash_set(prop_hash, key, AXIS2_HASH_KEY_STRING, tag); + status = LINE_STARTED; + } + if(status != LINE_STARTED) + { + sprintf(loginfo, "error parsing properties\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, loginfo); + AXIS2_FREE(env->allocator, buffer); + return AXIS2_FAILURE; + } + if(input) + { + fclose(input); + } + AXIS2_FREE(env->allocator, buffer); + return AXIS2_SUCCESS; +} + +axis2_char_t * +axutil_properties_read_next( + axis2_char_t *cur) +{ + /* ignore comment */ + if(*cur == '#') + { + for(; *cur != '\n' && *cur != '\0'; cur++) + ; + } + /* check '\\''\n' case */ + if(*cur == '\\' && *(cur + 1) == '\n') + { + /* ignore two axis2_char_ts */ + *(cur++) = ' '; + *(cur++) = ' '; + } + return cur; +} + +axis2_char_t * +axutil_properties_trunk_and_dup( + axis2_char_t *start, + axis2_char_t *end, + const axutil_env_t *env) +{ + for(; *start == ' '; start++) + ; /* remove front spaces */ + for(end--; *end == ' '; end--) + ; /* remove rear spaces */ + *(++end) = '\0'; + start = (axis2_char_t *)axutil_strdup(env, start); + return start; +} + +axis2_char_t * +axutil_properties_read( + FILE *input, + const axutil_env_t *env) +{ + size_t nread = 0; + axis2_char_t *out_stream = NULL; + size_t ncount = 0; + size_t curr_alloc = MAX_SIZE * 2; + size_t total_alloc = curr_alloc; + + out_stream = (axis2_char_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * curr_alloc); + if(!out_stream) + { + return NULL; + } + + do + { + nread = fread(out_stream + ncount, sizeof(axis2_char_t), MAX_SIZE, input); + ncount += nread; + + if(ncount + MAX_SIZE > total_alloc) + { + axis2_char_t *new_stream = NULL; + if(curr_alloc < MAX_ALLOC) + { + curr_alloc *= 2; + } + + total_alloc += curr_alloc; + new_stream = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * total_alloc); + if(!new_stream) + { + if(out_stream) + { + AXIS2_FREE(env->allocator, out_stream); + } + return NULL; + } + + memcpy(new_stream, out_stream, sizeof(axis2_char_t) * ncount); + if(out_stream) + { + AXIS2_FREE(env->allocator, out_stream); + } + out_stream = new_stream; + } + } + while(nread == MAX_SIZE); + + out_stream[ncount] = '\0'; + return out_stream; +} diff --git a/util/src/property.c b/util/src/property.c new file mode 100644 index 0000000..55826d1 --- /dev/null +++ b/util/src/property.c @@ -0,0 +1,193 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +struct axutil_property +{ + axis2_scope_t scope; + AXIS2_FREE_VOID_ARG free_func; + void *value; + axis2_bool_t own_value; +}; + +axutil_property_t *AXIS2_CALL +axutil_property_create( + const axutil_env_t * env) +{ + axutil_property_t *property = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + property = (axutil_property_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_property_t)); + + if(!property) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + property->value = NULL; + property->scope = AXIS2_SCOPE_REQUEST; + property->free_func = 0; + property->own_value = AXIS2_TRUE; + + return property; +} + +/*****************************************************************************/ +axutil_property_t *AXIS2_CALL +axutil_property_create_with_args( + const axutil_env_t * env, + axis2_scope_t scope, + axis2_bool_t own_value, + AXIS2_FREE_VOID_ARG free_func, + void *value) +{ + axutil_property_t *property = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + property = (axutil_property_t *)axutil_property_create(env); + + if(!property) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return NULL; + } + property->value = value; + property->scope = scope; + property->own_value = own_value; + property->free_func = free_func; + + return property; +} + +void AXIS2_CALL +axutil_property_free( + axutil_property_t * property, + const axutil_env_t * env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(property->value) + { + if(property->scope != AXIS2_SCOPE_APPLICATION) + { + if(property->free_func && property->own_value) + { + property->free_func(property->value, env); + } + else if(property->own_value) + { + AXIS2_FREE(env->allocator, property->value); + } + } + } + + if(property) + { + AXIS2_FREE(env->allocator, property); + } + return; +} + +axis2_status_t AXIS2_CALL +axutil_property_set_scope( + axutil_property_t * property, + const axutil_env_t * env, + axis2_scope_t scope) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + property->scope = scope; + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axutil_property_set_free_func( + axutil_property_t * property, + const axutil_env_t * env, + AXIS2_FREE_VOID_ARG free_func) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + property->free_func = free_func; + return AXIS2_SUCCESS; +} + +axis2_status_t AXIS2_CALL +axutil_property_set_value( + axutil_property_t * property, + const axutil_env_t * env, + void *value) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(property->value) + { + if(property->scope != AXIS2_SCOPE_APPLICATION) + { + if(property->free_func && property->own_value) + { + property->free_func(property->value, env); + } + else if(property->own_value) + { + AXIS2_FREE(env->allocator, property->value); + } + } + } + + property->value = value; + return AXIS2_SUCCESS; +} + +void *AXIS2_CALL +axutil_property_get_value( + axutil_property_t * property, + const axutil_env_t * env) +{ + return property->value; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_property_set_own_value( + axutil_property_t * property, + const axutil_env_t * env, + axis2_bool_t own_value) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + property->own_value = own_value; + return AXIS2_SUCCESS; +} + +axutil_property_t *AXIS2_CALL +axutil_property_clone( + axutil_property_t * property, + const axutil_env_t * env) +{ + axutil_property_t *new_property = NULL; + AXIS2_ENV_CHECK(env, NULL); + new_property = axutil_property_create(env); + axutil_property_set_free_func(new_property, env, property->free_func); + axutil_property_set_scope(new_property, env, property->scope); + axutil_property_set_own_value(new_property, env, property->own_value); + axutil_property_set_value(new_property, env, property->value); + return new_property; +} diff --git a/util/src/qname.c b/util/src/qname.c new file mode 100644 index 0000000..e4197c3 --- /dev/null +++ b/util/src/qname.c @@ -0,0 +1,337 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +struct axutil_qname +{ + + /** localpart of qname is mandatory */ + axis2_char_t *localpart; + + /** namespace uri is optional */ + axis2_char_t *namespace_uri; + + /** prefix mandatory */ + axis2_char_t *prefix; + + /** qname represented as a string, used as keys in hash tables, etc. */ + axis2_char_t *qname_string; + unsigned int ref; +}; + +AXIS2_EXTERN axutil_qname_t *AXIS2_CALL +axutil_qname_create( + const axutil_env_t *env, + const axis2_char_t *localpart, + const axis2_char_t *namespace_uri, + const axis2_char_t *prefix) +{ + + axutil_qname_t *qname = NULL; + AXIS2_ENV_CHECK(env, NULL); + + /* localpart can't be null */ + if(!localpart) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "NULL parameter was passed when a non NULL parameter was expected"); + return NULL; + } + + qname = (axutil_qname_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_qname_t)); + if(!qname) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + /* set properties */ + qname->localpart = NULL; + qname->qname_string = NULL; + qname->prefix = NULL; + qname->namespace_uri = NULL; + qname->ref = 1; + + qname->localpart = (axis2_char_t *)axutil_strdup(env, localpart); + if(!(qname->localpart)) + { + AXIS2_ERROR_SET_ERROR_NUMBER(env->error, AXIS2_ERROR_NO_MEMORY); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_FAILURE); + axutil_qname_free(qname, env); + return NULL; + } + + if(prefix) + { + qname->prefix = (axis2_char_t *)axutil_strdup(env, prefix); + } + + if(prefix && !(qname->prefix)) + { + AXIS2_ERROR_SET_ERROR_NUMBER(env->error, AXIS2_ERROR_NO_MEMORY); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_FAILURE); + axutil_qname_free(qname, env); + return NULL; + } + + if(namespace_uri) + { + qname->namespace_uri = (axis2_char_t *)axutil_strdup(env, namespace_uri); + } + + if(namespace_uri && !(qname->namespace_uri)) + { + AXIS2_ERROR_SET_ERROR_NUMBER(env->error, AXIS2_ERROR_NO_MEMORY); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_FAILURE); + axutil_qname_free(qname, env); + return NULL; + } + + return qname; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_qname_free( + axutil_qname_t *qname, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + qname->ref--; + + if(qname->ref > 0) + { + return; + } + + if(qname->localpart) + { + AXIS2_FREE(env->allocator, qname->localpart); + } + if(qname->namespace_uri) + { + AXIS2_FREE(env->allocator, qname->namespace_uri); + } + if(qname->prefix) + { + AXIS2_FREE(env->allocator, qname->prefix); + } + if(qname->qname_string) + { + AXIS2_FREE(env->allocator, qname->qname_string); + } + + AXIS2_FREE(env->allocator, qname); + + return; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_qname_equals( + const axutil_qname_t *qname, + const axutil_env_t *env, + const axutil_qname_t *qname2) +{ + int uris_differ = 0; + int localparts_differ = 0; + + AXIS2_ENV_CHECK(env, AXIS2_FALSE); + + if(!qname2) + { + AXIS2_ERROR_SET_ERROR_NUMBER(env->error, AXIS2_ERROR_INVALID_NULL_PARAM); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "NULL parameter was passed when a non NULL parameter was expected"); + AXIS2_ERROR_SET_STATUS_CODE(env->error, AXIS2_FAILURE); + return AXIS2_FALSE; + } + + if(qname->localpart && qname2->localpart) + { + localparts_differ = axutil_strcmp(qname->localpart, qname2->localpart); + } + else + { + localparts_differ = ((qname->localpart) || (qname2->localpart)); + } + + if(qname->namespace_uri && qname2->namespace_uri) + { + uris_differ = axutil_strcmp(qname->namespace_uri, qname2->namespace_uri); + } + else + { + uris_differ = ((qname->namespace_uri) || (qname2->namespace_uri)); + } + + return (!uris_differ && !localparts_differ) ? AXIS2_TRUE : AXIS2_FALSE; +} + +AXIS2_EXTERN axutil_qname_t *AXIS2_CALL +axutil_qname_clone( + axutil_qname_t *qname, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, NULL); + + if(!qname) + { + return NULL; + } + qname->ref++; + + return qname; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_qname_get_uri( + const axutil_qname_t *qname, + const axutil_env_t *env) +{ + AXIS2_PARAM_CHECK(env->error, qname, NULL); + return qname->namespace_uri; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_qname_get_prefix( + const axutil_qname_t *qname, + const axutil_env_t *env) +{ + AXIS2_PARAM_CHECK(env->error, qname, NULL); + return qname->prefix; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_qname_get_localpart( + const axutil_qname_t *qname, + const axutil_env_t *env) +{ + AXIS2_PARAM_CHECK(env->error, qname, NULL); + return qname->localpart; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_qname_to_string( + axutil_qname_t *qname, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, NULL); + if(qname->qname_string) + { + return qname->qname_string; + } + + if(!(qname->namespace_uri) || axutil_strcmp(qname->namespace_uri, "") == 0) + { + qname->qname_string = axutil_strdup(env, qname->localpart); + } + else if(!(qname->prefix) || axutil_strcmp(qname->prefix, "") == 0) + { + axis2_char_t *temp_string1 = NULL; + temp_string1 = axutil_stracat(env, qname->localpart, "|"); + qname->qname_string = axutil_stracat(env, temp_string1, qname->namespace_uri); + if(temp_string1) + { + AXIS2_FREE(env->allocator, temp_string1); + } + } + else + { + axis2_char_t *temp_string1 = NULL; + axis2_char_t *temp_string2 = NULL; + axis2_char_t *temp_string3 = NULL; + + temp_string1 = axutil_stracat(env, qname->localpart, "|"); + temp_string2 = axutil_stracat(env, temp_string1, qname->namespace_uri); + temp_string3 = axutil_stracat(env, temp_string2, "|"); + qname->qname_string = axutil_stracat(env, temp_string3, qname->prefix); + + if(temp_string1) + { + AXIS2_FREE(env->allocator, temp_string1); + } + if(temp_string2) + { + AXIS2_FREE(env->allocator, temp_string2); + } + if(temp_string3) + { + AXIS2_FREE(env->allocator, temp_string3); + } + } + return qname->qname_string; +} + +AXIS2_EXTERN axutil_qname_t *AXIS2_CALL +axutil_qname_create_from_string( + const axutil_env_t *env, + const axis2_char_t *qstring) +{ + axis2_char_t *localpart = NULL; + axis2_char_t *namespace_uri = NULL; + axis2_char_t *prefix = NULL; + axis2_char_t *index = NULL; + axis2_char_t *next = NULL; + axis2_char_t *temp_string = NULL; + axutil_qname_t *qname = NULL; + if(!qstring || axutil_strcmp(qstring, "") == 0) + return NULL; + + temp_string = axutil_strdup(env, qstring); + + index = strchr(temp_string, '|'); + if(index) + { + next = index + 1; + temp_string[index - temp_string] = '\0'; + localpart = temp_string; + + index = strchr(next, '|'); + if(index) + { + prefix = index + 1; + next[index - next] = '\0'; + namespace_uri = next; + qname = axutil_qname_create(env, localpart, namespace_uri, prefix); + } + else + { + /** only uri and localpart is available */ + qname = axutil_qname_create(env, localpart, next, NULL); + } + } + else + { + /** only localpart is there in this qname */ + qname = axutil_qname_create(env, temp_string, NULL, NULL); + } + if(temp_string) + { + AXIS2_FREE(env->allocator, temp_string); + } + return qname; +} diff --git a/util/src/rand.c b/util/src/rand.c new file mode 100644 index 0000000..c3a7aa9 --- /dev/null +++ b/util/src/rand.c @@ -0,0 +1,66 @@ +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#define AXIS2_RAND_MAX 32768 + +AXIS2_EXTERN int AXIS2_CALL +axutil_rand( + unsigned int *seedp) +{ + *seedp = *seedp * 1103515245 + 12345; + return ((unsigned)(*seedp / (2 * AXIS2_RAND_MAX)) % AXIS2_RAND_MAX); +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_rand_with_range( + unsigned int *seedp, + int start, + int end) +{ + int rand = -1; + float range = 0.0; + if(start < 0 || end <= 0) + return -1; + if(start >= AXIS2_RAND_MAX || end > AXIS2_RAND_MAX) + return -1; + if(end <= start) + return -1; + + range = (float)(end - start); + rand = axutil_rand(seedp); + rand = start + (int)(range * rand / (AXIS2_RAND_MAX + 1.0)); + return rand; +} + +AXIS2_EXTERN unsigned int AXIS2_CALL +axutil_rand_get_seed_value_based_on_time( + const axutil_env_t * env) +{ + axutil_date_time_t *date = axutil_date_time_create(env); + unsigned int rand_var = axutil_date_time_get_year(date, env); + rand_var += axutil_date_time_get_month(date, env); + rand_var += axutil_date_time_get_date(date, env); + rand_var += axutil_date_time_get_hour(date, env); + rand_var += axutil_date_time_get_minute(date, env); + rand_var += axutil_date_time_get_second(date, env); + axutil_date_time_free(date, env); + return rand_var; +} diff --git a/util/src/stack.c b/util/src/stack.c new file mode 100644 index 0000000..5d45a93 --- /dev/null +++ b/util/src/stack.c @@ -0,0 +1,182 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +#define AXIS2_STACK_DEFAULT_CAPACITY 10 + +struct axutil_stack +{ + void **data; + + /** current number of elements */ + int size; + + /** total capacity */ + int capacity; + axis2_bool_t is_empty_stack; +}; + +AXIS2_EXTERN axutil_stack_t *AXIS2_CALL +axutil_stack_create( + const axutil_env_t *env) +{ + axutil_stack_t *stack = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + stack = (axutil_stack_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_stack_t)); + + if(!stack) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + + stack->data = NULL; + stack->size = 0; + stack->capacity = AXIS2_STACK_DEFAULT_CAPACITY; + stack->is_empty_stack = AXIS2_TRUE; + + stack->data = AXIS2_MALLOC(env->allocator, sizeof(void *) * AXIS2_STACK_DEFAULT_CAPACITY); + if(!stack->data) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + axutil_stack_free(stack, env); + return NULL; + } + + return stack; +} + +void AXIS2_CALL +axutil_stack_free( + axutil_stack_t *stack, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(stack->data) + { + AXIS2_FREE(env->allocator, stack->data); + } + AXIS2_FREE(env->allocator, stack); + return; +} + +void *AXIS2_CALL +axutil_stack_pop( + axutil_stack_t *stack, + const axutil_env_t *env) +{ + void *value = NULL; + AXIS2_ENV_CHECK(env, NULL); + + if(stack->is_empty_stack == AXIS2_TRUE || stack->size == 0) + { + return NULL; + } + if(stack->size > 0) + { + value = stack->data[stack->size - 1]; + stack->data[stack->size - 1] = NULL; + stack->size--; + if(stack->size == 0) + { + stack->is_empty_stack = AXIS2_TRUE; + } + } + return value; +} + +axis2_status_t AXIS2_CALL +axutil_stack_push( + axutil_stack_t *stack, + const axutil_env_t *env, + void *value) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, value, AXIS2_FAILURE); + + if((stack->size < stack->capacity) && (stack->capacity > 0)) + { + stack->data[stack->size++] = value; + } + else + { + void **new_data = NULL; + + int new_capacity = stack->capacity + AXIS2_STACK_DEFAULT_CAPACITY; + + new_data = AXIS2_MALLOC(env->allocator, sizeof(void *) * new_capacity); + if(!new_data) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return AXIS2_FAILURE; + } + memset(new_data, 0, sizeof(void *) * new_capacity); + memcpy(new_data, stack->data, sizeof(void *) * (stack->capacity)); + stack->capacity = new_capacity; + + AXIS2_FREE(env->allocator, stack->data); + stack->data = new_data; + + stack->data[stack->size++] = value; + } + stack->is_empty_stack = AXIS2_FALSE; + return AXIS2_SUCCESS; +} + +int AXIS2_CALL +axutil_stack_size( + axutil_stack_t *stack, + const axutil_env_t *env) +{ + return stack->size; +} + +void *AXIS2_CALL +axutil_stack_get( + axutil_stack_t *stack, + const axutil_env_t *env) +{ + if(stack->size > 0) + { + return stack->data[stack->size - 1]; + } + return NULL; +} + +void *AXIS2_CALL +axutil_stack_get_at( + axutil_stack_t *stack, + const axutil_env_t *env, + int i) +{ + if((stack->size == 0) || (i < 0) || (i >= stack->size)) + { + return NULL; + } + return stack->data[i]; +} diff --git a/util/src/stream.c b/util/src/stream.c new file mode 100644 index 0000000..1034a03 --- /dev/null +++ b/util/src/stream.c @@ -0,0 +1,719 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +/** basic stream operatons **/ +int AXIS2_CALL axutil_stream_write_basic( + axutil_stream_t *stream, + const axutil_env_t *env, + const void *buffer, + size_t count); + +int AXIS2_CALL axutil_stream_read_basic( + axutil_stream_t *stream, + const axutil_env_t *env, + void *buffer, + size_t count); + +int AXIS2_CALL axutil_stream_skip_basic( + axutil_stream_t *stream, + const axutil_env_t *env, + int count); + +/** file stream operations **/ +int AXIS2_CALL axutil_stream_write_file( + axutil_stream_t *stream, + const axutil_env_t *env, + const void *buffer, + size_t count); + +int AXIS2_CALL axutil_stream_read_file( + axutil_stream_t *stream, + const axutil_env_t *env, + void *buffer, + size_t count); + +int AXIS2_CALL axutil_stream_skip_file( + axutil_stream_t *stream, + const axutil_env_t *env, + int count); + +/** socket stream operations **/ +int AXIS2_CALL axutil_stream_write_socket( + axutil_stream_t *stream, + const axutil_env_t *env, + const void *buffer, + size_t count); + +int AXIS2_CALL axutil_stream_read_socket( + axutil_stream_t *stream, + const axutil_env_t *env, + void *buffer, + size_t count); + +int AXIS2_CALL axutil_stream_skip_socket( + axutil_stream_t *stream, + const axutil_env_t *env, + int count); + +AXIS2_EXTERN axutil_stream_t *AXIS2_CALL +axutil_stream_create_internal( + const axutil_env_t *env) +{ + axutil_stream_t *stream = NULL; + stream = (axutil_stream_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_stream_t)); + if(!stream) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory. Cannot create axutil stream"); + return NULL; + } + stream->buffer = NULL; + stream->buffer_head = NULL; + stream->fp = NULL; + stream->socket = -1; + stream->len = -1; + stream->max_len = -1; + stream->axis2_eof = EOF; + + return stream; +} + +void AXIS2_CALL +axutil_stream_free( + axutil_stream_t *stream, + const axutil_env_t *env) +{ + switch(stream->stream_type) + { + case AXIS2_STREAM_BASIC: + { + if(stream->buffer_head) + { + AXIS2_FREE(env->allocator, stream->buffer_head); + } + stream->buffer = NULL; + stream->len = -1; + break; + } + case AXIS2_STREAM_FILE: + { + stream->fp = NULL; + stream->len = -1; + break; + } + case AXIS2_STREAM_SOCKET: + { + if(stream->fp) + { + fclose(stream->fp); + } + stream->socket = -1; + stream->len = -1; + break; + } + default: + break; + } + + AXIS2_FREE(env->allocator, stream); +} + +void AXIS2_CALL +axutil_stream_free_void_arg( + void *stream, + const axutil_env_t *env) +{ + axutil_stream_t *stream_l = NULL; + + stream_l = (axutil_stream_t *)stream; + axutil_stream_free(stream_l, env); + return; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_stream_flush( + axutil_stream_t *stream, + const axutil_env_t *env) +{ + if(stream->fp) + { + if(fflush(stream->fp)) + { + return AXIS2_FAILURE; + } + } + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_stream_close( + axutil_stream_t *stream, + const axutil_env_t *env) +{ + switch(stream->stream_type) + { + case AXIS2_STREAM_BASIC: + { + if(stream->buffer_head) + { + AXIS2_FREE(env->allocator, stream->buffer_head); + } + stream->buffer = NULL; + stream->len = -1; + break; + } + case AXIS2_STREAM_FILE: + { + if(stream->fp) + { + if(fclose(stream->fp)) + { + return AXIS2_FAILURE; + } + } + stream->fp = NULL; + stream->len = -1; + break; + } + case AXIS2_STREAM_SOCKET: + { + if(stream->fp) + { + if(fclose(stream->fp)) + { + return AXIS2_FAILURE; + } + } + stream->socket = -1; + stream->len = -1; + break; + } + default: + break; + } + + return AXIS2_SUCCESS; +} + +/************************ Basic Stream Operations *****************************/ +AXIS2_EXTERN axutil_stream_t *AXIS2_CALL +axutil_stream_create_basic( + const axutil_env_t *env) +{ + axutil_stream_t *stream = NULL; + + AXIS2_ENV_CHECK(env, NULL); + stream = axutil_stream_create_internal(env); + if(!stream) + { + /* + * We leave the error returned by the + * axutil_stream_create_internal intact + */ + return NULL; + } + stream->stream_type = AXIS2_STREAM_BASIC; + stream->read = axutil_stream_read_basic; + stream->write = axutil_stream_write_basic; + stream->skip = axutil_stream_skip_basic; + stream->buffer = (axis2_char_t *)AXIS2_MALLOC(env->allocator, AXIS2_STREAM_DEFAULT_BUF_SIZE + * sizeof(axis2_char_t)); + stream->buffer_head = stream->buffer; + stream->len = 0; + stream->max_len = AXIS2_STREAM_DEFAULT_BUF_SIZE; + + if(!stream->buffer) + { + axutil_stream_free(stream, env); + return NULL; + } + return stream; +} + +int AXIS2_CALL +axutil_stream_read_basic( + axutil_stream_t *stream, + const axutil_env_t *env, + void *buffer, + size_t count) +{ + int len = 0; + char *buf = NULL; + + buf = stream->buffer; + if(!buf) + { + return -1; + } + if(!buffer) + { + return -1; + } + if((int)(count - 1) > stream->len) + /* We are sure that the difference lies within the int range */ + { + len = stream->len; + } + else + { + len = (int)(count - 1); + /* We are sure that the difference lies within the int range */ + } + memcpy(buffer, buf, len); + /* + * Finally we need to remove the read bytes from the stream + * adjust the length of the stream. + */ + stream->len -= len; + stream->buffer = buf + len; + ((axis2_char_t *)buffer)[len] = '\0'; + return len; +} + +int AXIS2_CALL +axutil_stream_write_basic( + axutil_stream_t *stream, + const axutil_env_t *env, + const void *buffer, + size_t count) +{ + int new_len = 0; + + if(!buffer) + return -1; + + new_len = (int)(stream->len + count); + /* We are sure that the difference lies within the int range */ + if(new_len > stream->max_len) + { + axis2_char_t *tmp = (axis2_char_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) + * (new_len + AXIS2_STREAM_DEFAULT_BUF_SIZE)); + if(!tmp) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + return -1; + } + /* + * pre allocation: extra AXIS2_STREAM_DEFAULT_BUF_SIZE more bytes + * allocated + */ + stream->max_len = new_len + AXIS2_STREAM_DEFAULT_BUF_SIZE; + memcpy(tmp, stream->buffer, sizeof(axis2_char_t) * stream->len); + AXIS2_FREE(env->allocator, stream->buffer_head); + stream->buffer = tmp; + stream->buffer_head = tmp; + } + memcpy(stream->buffer + (stream->len * sizeof(axis2_char_t)), buffer, count); + stream->len += (int)count; + /* We are sure that the difference lies within the int range */ + return (int)count; +} + +int AXIS2_CALL +axutil_stream_get_len( + axutil_stream_t *stream, + const axutil_env_t *env) +{ + return stream->len; +} + +int AXIS2_CALL +axutil_stream_skip_basic( + axutil_stream_t *stream, + const axutil_env_t *env, + int count) +{ + int del_len = 0; + + if(count > 0) + { + if(count <= stream->len) + { + del_len = count; + } + else + { + del_len = stream->len; + } + stream->len -= del_len; + stream->buffer += del_len; + return del_len; + } + return -1; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_stream_get_buffer( + const axutil_stream_t *stream, + const axutil_env_t *env) +{ + return stream->buffer; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_stream_flush_buffer( + axutil_stream_t *stream, + const axutil_env_t *env) +{ + stream->len = 0; + return AXIS2_SUCCESS; +} + +/********************* End of Basic Stream Operations *************************/ + +/************************** File Stream Operations ****************************/ +AXIS2_EXTERN axutil_stream_t *AXIS2_CALL +axutil_stream_create_file( + const axutil_env_t *env, + FILE * fp) +{ + axutil_stream_t *stream = NULL; + + AXIS2_ENV_CHECK(env, NULL); + stream = axutil_stream_create_internal(env); + if(!stream) + { + /* + * We leave the error returned by the + * axutil_stream_create_internal intact + */ + return NULL; + } + stream->stream_type = AXIS2_STREAM_FILE; + stream->fp = fp; + + stream->read = axutil_stream_read_file; + stream->write = axutil_stream_write_file; + stream->skip = axutil_stream_skip_file; + + return stream; +} + +int AXIS2_CALL +axutil_stream_read_file( + axutil_stream_t *stream, + const axutil_env_t *env, + void *buffer, + size_t count) +{ + FILE *fp = NULL; + + if(!stream->fp) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_FD, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Trying to do operation on invalid file descriptor"); + + return -1; + } + fp = stream->fp; + if(!buffer) + { + return -1; + } + return (int)fread(buffer, sizeof(axis2_char_t), count, fp); + /* We are sure that the difference lies within the int range */ +} + +int AXIS2_CALL +axutil_stream_write_file( + axutil_stream_t *stream, + const axutil_env_t *env, + const void *buffer, + size_t count) +{ + int len = 0; + FILE *fp = NULL; + + if(!(stream->fp)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_FD, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Trying to do operation on invalid file descriptor"); + + return -1; + } + fp = stream->fp; + if(!buffer) + return -1; + len = (int)fwrite(buffer, sizeof(axis2_char_t), count, fp); + /* We are sure that the difference lies within the int range */ + return len; +} + +int AXIS2_CALL +axutil_stream_skip_file( + axutil_stream_t *stream, + const axutil_env_t *env, + int count) +{ + int c = -1; + int i = count; + if(!(stream->fp)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_FD, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Trying to do operation on invalid file descriptor"); + return -1; + } + while(EOF != (c = fgetc(stream->fp)) && i > 0) + { + i--; + } + return count - i; +} + +/********************** End of File Stream Operations *************************/ + +/************************** Socket Stream Operations **************************/ +AXIS2_EXTERN axutil_stream_t *AXIS2_CALL +axutil_stream_create_socket( + const axutil_env_t *env, + int socket) +{ + axutil_stream_t *stream = NULL; + stream = axutil_stream_create_internal(env); + if(!stream) + { + /* + * We leave the error returned by the + * axutil_stream_create_internal intact + */ + return NULL; + } + + stream->read = axutil_stream_read_socket; + stream->write = axutil_stream_write_socket; + stream->skip = axutil_stream_skip_socket; + stream->stream_type = AXIS2_STREAM_SOCKET; + stream->socket = socket; + stream->fp = NULL; + + return stream; +} + +int AXIS2_CALL +axutil_stream_read_socket( + axutil_stream_t *stream, + const axutil_env_t *env, + void *buffer, + size_t count) +{ + int len = 0; + + if(-1 == stream->socket) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_SOCKET, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Trying to do operation on closed/not-opened socket"); + return -1; + } + if(!buffer) + { + return -1; + } + + len = (int)recv(stream->socket, buffer, (int)count, 0); + /* We are sure that the difference lies within the int range */ +#ifdef AXIS2_TCPMON + if (len > 1) + { + axis2_char_t *temp = NULL; + temp = (axis2_char_t *) AXIS2_MALLOC(env->allocator, (len + 1) * sizeof(axis2_char_t)); + if (temp) + { + memcpy(temp, buffer, len * sizeof(axis2_char_t)); + temp[len] = '\0'; + fprintf(stderr, "%s", temp); + AXIS2_FREE(env->allocator, temp); + } + } +#endif + return len; +} + +int AXIS2_CALL +axutil_stream_write_socket( + axutil_stream_t *stream, + const axutil_env_t *env, + const void *buffer, + size_t count) +{ + int len = 0; +#ifdef AXIS2_TCPMON + axis2_char_t *temp = NULL; +#endif + + if(-1 == stream->socket) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_SOCKET, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Trying to do operation on closed/not-opened socket"); + return -1; + } + if(!buffer) + return -1; + len = (int)send(stream->socket, buffer, (int)count, 0); + /* We are sure that the difference lies within the int range */ +#ifdef AXIS2_TCPMON + if (len > 0) + { + temp = + (axis2_char_t *) AXIS2_MALLOC(env->allocator, + (len + 1) * sizeof(axis2_char_t)); + if (temp) + { + memcpy(temp, buffer, len * sizeof(axis2_char_t)); + temp[len] = '\0'; + fprintf(stderr, "%s", temp); + AXIS2_FREE(env->allocator, temp); + } + } +#endif + return len; + +} + +int AXIS2_CALL +axutil_stream_skip_socket( + axutil_stream_t *stream, + const axutil_env_t *env, + int count) +{ + int len = 0; + int received = 0; + char buffer[2]; + + if(-1 == stream->socket) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_SOCKET, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Trying to do operation on closed/not-opened socket"); + return -1; + } + while(len < count) + { + received = recv(stream->socket, buffer, 1, 0); + if(received == 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Socket has being shutdown"); + return -1; + } + if(received < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error while trying to read the socke"); + return -1; + } + len += received; + } + return len; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_stream_peek_socket( + axutil_stream_t *stream, + const axutil_env_t *env, + void *buffer, + size_t count) +{ + int len = 0; + + /* Added to prevent a segfault */ + AXIS2_PARAM_CHECK(env->error, stream, -1); + + if(-1 == stream->socket) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_SOCKET, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Trying to do operation on closed/not-opened socket"); + return -1; + } + if(!buffer) + { + return -1; + } + + len = (int)recv(stream->socket, buffer, (int)count, MSG_PEEK); + /* We are sure that the difference lies within the int range */ + + return len; +} + +/********************** End of Socket Stream Operations ***********************/ + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_stream_set_read( + axutil_stream_t *stream, + const axutil_env_t *env, + AXUTIL_STREAM_READ func) +{ + stream->read = func; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_stream_set_write( + axutil_stream_t *stream, + const axutil_env_t *env, + AXUTIL_STREAM_WRITE func) +{ + stream->write = func; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_stream_set_skip( + axutil_stream_t *stream, + const axutil_env_t *env, + AXUTIL_STREAM_SKIP func) +{ + stream->skip = func; + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_stream_read( + axutil_stream_t *stream, + const axutil_env_t *env, + void *buffer, + size_t count) +{ + return stream->read(stream, env, buffer, count); +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_stream_write( + axutil_stream_t *stream, + const axutil_env_t *env, + const void *buffer, + size_t count) +{ + return stream->write(stream, env, buffer, count); +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_stream_skip( + axutil_stream_t *stream, + const axutil_env_t *env, + int count) +{ + return stream->skip(stream, env, count); +} diff --git a/util/src/string.c b/util/src/string.c new file mode 100644 index 0000000..4a3f8f0 --- /dev/null +++ b/util/src/string.c @@ -0,0 +1,822 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include /* NULL */ + +struct axutil_string +{ + axis2_char_t *buffer; + unsigned int length; + unsigned int ref_count; + axis2_bool_t owns_buffer; +}; + +AXIS2_EXTERN axutil_string_t *AXIS2_CALL +axutil_string_create( + const axutil_env_t *env, + const axis2_char_t *str) +{ + axutil_string_t *string = NULL; + AXIS2_ENV_CHECK(env, NULL); + + /* str can't be null */ + if(!str) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "NULL parameter was passed when a non NULL parameter was expected"); + return NULL; + } + + string = (axutil_string_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_string_t)); + if(!string) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + /* set properties */ + string->buffer = NULL; + string->ref_count = 1; + string->owns_buffer = AXIS2_TRUE; + + string->length = axutil_strlen(str); + + if(string->length < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "NULL parameter was passed when a non NULL parameter was expected"); + axutil_string_free(string, env); + return NULL; + } + + string->buffer = (axis2_char_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) + * (string->length + 1)); + if(!(string->buffer)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + axutil_string_free(string, env); + return NULL; + } + memcpy(string->buffer, str, string->length + 1); + + return string; +} + +AXIS2_EXTERN axutil_string_t *AXIS2_CALL +axutil_string_create_assume_ownership( + const axutil_env_t *env, + axis2_char_t **str) +{ + axutil_string_t *string = NULL; + AXIS2_ENV_CHECK(env, NULL); + + /* str can't be null */ + if(!str || !(*str)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "NULL parameter was passed when a non NULL parameter was expected"); + return NULL; + } + + string = (axutil_string_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_string_t)); + if(!string) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + /* set properties */ + string->buffer = *str; + string->length = axutil_strlen(*str); + string->ref_count = 1; + string->owns_buffer = AXIS2_TRUE; + + if(string->length < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "NULL parameter was passed when a non NULL parameter was expected"); + axutil_string_free(string, env); + return NULL; + } + + return string; +} + +AXIS2_EXTERN axutil_string_t *AXIS2_CALL +axutil_string_create_const( + const axutil_env_t *env, + axis2_char_t **str) +{ + axutil_string_t *string = NULL; + AXIS2_ENV_CHECK(env, NULL); + + /* str can't be null */ + if(!str) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "NULL parameter was passed when a non NULL parameter was expected"); + + return NULL; + } + + string = (axutil_string_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_string_t)); + if(!string) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + /* set properties */ + string->buffer = *str; + string->length = axutil_strlen(*str); + string->ref_count = 1; + string->owns_buffer = AXIS2_FALSE; + + if(string->length < 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "NULL parameter was passed when a non NULL parameter was expected"); + axutil_string_free(string, env); + return NULL; + } + + return string; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_string_free( + struct axutil_string *string, + const axutil_env_t *env) +{ + if(!string) + { + return; + } + + string->ref_count--; + + if(string->ref_count > 0) + { + return; + } + + if(string->owns_buffer && string->buffer) + { + AXIS2_FREE(env->allocator, string->buffer); + } + + AXIS2_FREE(env->allocator, string); + return; +} + +AXIS2_EXTERN axis2_bool_t AXIS2_CALL +axutil_string_equals( + const struct axutil_string *string, + const axutil_env_t * env, + const struct axutil_string *string1) +{ + if(!string || !string1) + { + return AXIS2_FALSE; + } + + return (string->buffer == string1->buffer); +} + +AXIS2_EXTERN struct axutil_string *AXIS2_CALL +axutil_string_clone( + struct axutil_string *string, + const axutil_env_t *env) +{ + if(!string) + { + return NULL; + } + + string->ref_count++; + + return string; +} + +AXIS2_EXTERN const axis2_char_t *AXIS2_CALL +axutil_string_get_buffer( + const struct axutil_string *string, + const axutil_env_t *env) +{ + if(!string) + { + return NULL; + } + + return string->buffer; +} + +AXIS2_EXTERN unsigned int AXIS2_CALL +axutil_string_get_length( + const struct axutil_string *string, + const axutil_env_t *env) +{ + int error_return = -1; + if(!string) + { + return error_return; + } + + return string->length; +} + +/* END of string struct implementation */ + +/** this is used to cache lengths in axutil_strcat */ +#define MAX_SAVED_LENGTHS 6 + +AXIS2_EXTERN void *AXIS2_CALL +axutil_strdup( + const axutil_env_t *env, + const void *ptr) +{ + if(ptr) + { + int len = axutil_strlen(ptr); + axis2_char_t *str = (axis2_char_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) + * (len + 1)); + if(!str) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + memcpy(str, ptr, len + 1); + return (void *)str; + } + else + { + return NULL; + } +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_strmemdup( + const void *ptr, + size_t n, + const axutil_env_t *env) +{ + axis2_char_t *str; + + AXIS2_PARAM_CHECK(env->error, ptr, NULL); + + str = (axis2_char_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (n + 1)); + if(!str) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + memcpy(str, ptr, n); + str[n] = '\0'; + + return (void *)str; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_memchr( + const void *ptr, + int c, + size_t n) +{ + const axis2_char_t *cp; + + for(cp = ptr; n > 0; n--, cp++) + { + if(*cp == c) + return (char *)cp; /* Casting away the const here */ + } + + return NULL; +} + +AXIS2_EXTERN void *AXIS2_CALL +axutil_strndup( + const axutil_env_t *env, + const void *ptr, + int n) +{ + const axis2_char_t *end; + axis2_char_t *str; + + AXIS2_PARAM_CHECK(env->error, ptr, NULL); + + end = axutil_memchr(ptr, '\0', n); + if(end) + n = (int)(end - (axis2_char_t *)ptr); + /* We are sure that the difference lies within the int range */ + str = (axis2_char_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (n + 1)); + if(!str) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + memcpy(str, ptr, n); + str[n] = '\0'; + + return (void *)str; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_strcat( + const axutil_env_t *env, + ...) +{ + axis2_char_t *cp, *argp, *str; + size_t saved_lengths[MAX_SAVED_LENGTHS]; + int nargs = 0; + int str_len = 0; + + /* Pass one --- find length of required string */ + + size_t len = 0; + va_list adummy; + + va_start(adummy, env); + + cp = va_arg(adummy, axis2_char_t *); + while(cp) + { + size_t cplen = strlen(cp); + if(nargs < MAX_SAVED_LENGTHS) + { + saved_lengths[nargs++] = cplen; + } + len += cplen; + cp = va_arg(adummy, axis2_char_t *); + } + + va_end(adummy); + + /* Allocate the required string */ + str_len = (int)(sizeof(axis2_char_t) * (len + 1)); + /* We are sure that the difference lies within the int range */ + str = (axis2_char_t *) AXIS2_MALLOC(env->allocator, str_len); + if (!str) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + cp = str; + + /* Pass two --- copy the argument strings into the result space */ + + va_start(adummy, env); + + nargs = 0; + argp = va_arg(adummy, axis2_char_t *); + while (argp) + { + if (nargs < MAX_SAVED_LENGTHS) + { + len = saved_lengths[nargs++]; + } + else + { + len = strlen(argp); + } + + memcpy(cp, argp, len); + cp += len; + argp = va_arg(adummy, axis2_char_t *); + } + + va_end(adummy); + + /* Return the result string */ + + *cp = '\0'; + return str; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_stracat( + const axutil_env_t *env, + const axis2_char_t *s1, + const axis2_char_t *s2) +{ + axis2_char_t *ret = NULL; + int alloc_len = -1; + int len1 = 0; + int len2 = 0; + + if(!s1 && !s2) + { + return NULL; + } + if(!s1) + { + return (axis2_char_t *)axutil_strdup(env, s2); + } + if(!s2) + { + return (axis2_char_t *)axutil_strdup(env, s1); + } + + len1 = axutil_strlen(s1); + len2 = axutil_strlen(s2); + alloc_len = len1 + len2 + 1; + ret = (axis2_char_t *)AXIS2_MALLOC(env->allocator, alloc_len * sizeof(axis2_char_t)); + memcpy(ret, s1, len1 * sizeof(axis2_char_t)); + memcpy((ret + len1 * sizeof(axis2_char_t)), s2, len2 * sizeof(axis2_char_t)); + ret[alloc_len * sizeof(axis2_char_t) - sizeof(axis2_char_t)] = '\0'; + return ret; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_strcmp( + const axis2_char_t *s1, + const axis2_char_t *s2) +{ + if(s1 && s2) + { + return strcmp(s1, s2); + } + else + { + return -1; + } +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_strncmp( + const axis2_char_t *s1, + const axis2_char_t *s2, + int n) +{ + if(s1 && s2) + { + return strncmp(s1, s2, n); + } + else + { + return -1; + } +} + +AXIS2_EXTERN axis2_ssize_t AXIS2_CALL +axutil_strlen( + const axis2_char_t *s) +{ + int error_return = -1; + if(s) + { + return (axis2_ssize_t)strlen(s); + /* We are sure that the difference lies within the axis2_ssize_t range */ + } + return error_return; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_strcasecmp( + const axis2_char_t *s1, + const axis2_char_t *s2) +{ + while(*s1 != '\0' && *s2 != '\0') + { + if(*s1 >= 'A' && *s1 <= 'Z' && *s2 >= 'a' && *s2 <= 'z') + { + if(*s2 - *s1 - (char)32 != 0) + { + return 1; + } + } + else if(*s1 >= 'a' && *s1 <= 'z' && *s2 >= 'A' && *s2 <= 'Z') + { + if(*s1 - *s2 - 32 != 0) + { + return 1; + } + } + else if(*s1 - *s2 != 0) + { + return 1; + } + s1++; + s2++; + } + if(*s1 != *s2) + { + return 1; + } + + return 0; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_strncasecmp( + const axis2_char_t *s1, + const axis2_char_t *s2, + const int n) +{ + axis2_char_t *str1 = (axis2_char_t *)s1, *str2 = (axis2_char_t *)s2; + int i = (int)n; + + while(--i >= 0 && toupper((int)*str1) == toupper((int)*str2++)) + { + if(toupper((int)*str1++) == '\0') + { + return (0); + } + } + return (i < 0 ? 0 : toupper((int)*str1) - toupper((int)*--str2)); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_strstr( + const axis2_char_t *haystack, + const axis2_char_t *needle) +{ + return strstr(haystack, needle); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_strchr( + const axis2_char_t *s, + axis2_char_t ch) +{ + return (axis2_char_t *)strchr(s, ch); +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_rindex( + const axis2_char_t *_s, + axis2_char_t _ch) +{ + int i, ilen = axutil_strlen(_s); + if(ilen < 1) + { + return NULL; + } + for(i = ilen - 1; i >= 0; i--) + { + if(_s[i] == _ch) + { + return (axis2_char_t *)(_s + i); + } + } + return NULL; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_replace( + const axutil_env_t *env, + axis2_char_t *str, + int s1, + int s2) +{ + axis2_char_t *newstr = NULL; + axis2_char_t *index = NULL; + if(!str) + { + return NULL; + } + + newstr = axutil_strdup(env, str); + index = strchr(newstr, s1); + while(index) + { + newstr[index - newstr] = (axis2_char_t)s2; + /* We are sure that the conversion is safe */ + index = strchr(newstr, s1); + } + return newstr; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_strltrim( + const axutil_env_t *env, + const axis2_char_t *_s, + const axis2_char_t *_trim) +{ + axis2_char_t *_p = NULL; + axis2_char_t *ret = NULL; + + if(!_s) + { + return NULL; + } + _p = (axis2_char_t *)_s; + if(!_trim) + { + _trim = " \t\r\n"; + } + + while(*_p) + { + if(!strchr(_trim, *_p)) + { + ret = (axis2_char_t *)axutil_strdup(env, _p); + break; + } + ++_p; + } + return ret; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_strrtrim( + const axutil_env_t *env, + const axis2_char_t *_in, + const axis2_char_t *_trim) +{ + axis2_char_t *__tail; + axis2_char_t *_s = NULL; + axis2_char_t *ret = NULL; + + if(_in) + { + _s = axutil_strdup(env, _in); + } + if(!_s) + { + return NULL; + } + __tail = _s + axutil_strlen(_s); + if(!_trim) + { + _trim = " \t\n\r"; + } + while(_s < __tail--) + { + if(!strchr(_trim, *__tail)) + { + ret = _s; + break; + } + *__tail = 0; + } + if(!ret && _s) + { + AXIS2_FREE(env->allocator, _s); + } + return ret; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_strtrim( + const axutil_env_t *env, + const axis2_char_t *_s, + const axis2_char_t *_trim) +{ + axis2_char_t *_p = NULL; + axis2_char_t *_q = NULL; + + _p = axutil_strltrim(env, _s, _trim); + _q = axutil_strrtrim(env, _p, _trim); + if(_p) + { + AXIS2_FREE(env->allocator, _p); + } + return _q; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_string_replace( + axis2_char_t *str, + axis2_char_t old, + axis2_char_t new) +{ + axis2_char_t *str_returns = str; + for(; *str != '\0'; str++) + { + if(*str == old) + { + *str = new; + } + } + return str_returns; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_string_substring_starting_at( + axis2_char_t *str, + int s) +{ + int len; + int pos_to_shift; + + len = (int)strlen(str); + /* We are sure that the difference lies within the int range */ + pos_to_shift = len - s + 1; + + if(len <= s) + { + return NULL; + } + memmove(str, str + s, pos_to_shift); + return str; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_string_substring_ending_at( + axis2_char_t *str, + int e) +{ + axis2_char_t *ptr = NULL; + int length = 0; + + length = (int)strlen(str); + /* We are sure that the difference lies within the int range */ + ptr = str; + if(length <= e) + { + return NULL; + } + ptr += e; + *ptr = '\0'; + return str; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_string_tolower( + axis2_char_t *str) +{ + axis2_char_t *temp_str = NULL; + for(temp_str = str; *temp_str != '\0'; temp_str++) + { + *temp_str = (axis2_char_t)tolower((int)*temp_str); + /* We are sure that the conversion is safe */ + } + return str; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_string_toupper( + axis2_char_t *str) +{ + axis2_char_t *temp_str = NULL; + for(temp_str = str; *temp_str != '\0'; temp_str++) + { + *temp_str = (axis2_char_t)toupper((int)*temp_str); + /* We are sure that the conversion is safe */ + } + return str; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_strcasestr( + const axis2_char_t *haystack, + const axis2_char_t *needle) +{ + axis2_char_t start, current; + size_t len; + + if(!haystack || !needle) + { + return NULL; + } + + if((start = *needle++)) + { + len = strlen(needle); + do + { + do + { + if(!(current = *haystack++)) + { + return NULL; + } + } + while(toupper((int)current) != toupper((int)start)); + } + while(axutil_strncasecmp(haystack, needle, (int)len)); + /* We are sure that the difference lies within the int range */ + haystack--; + } + return (axis2_char_t *)haystack; +} diff --git a/util/src/string_util.c b/util/src/string_util.c new file mode 100644 index 0000000..b89f6fb --- /dev/null +++ b/util/src/string_util.c @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axutil_tokenize( + const axutil_env_t *env, + axis2_char_t *in, + int delim) +{ + axutil_array_list_t *list = NULL; + axis2_char_t *rest = NULL; + axis2_char_t *str = NULL; + axis2_char_t *temp = NULL; + axis2_bool_t loop_state = AXIS2_TRUE; + + axis2_char_t *index = NULL; + + if(!in || !*in) + { + return NULL; + } + list = axutil_array_list_create(env, 10); + if(!list) + { + return NULL; + } + + str = axutil_strdup(env, in); + temp = str; + + do + { + index = strchr(str, delim); + if((!index) && str && *str) + { + axutil_array_list_add(list, env, axutil_strdup(env, str)); + break; + } + + rest = index + 1; + str[index - str] = '\0'; + if(str && *str) + { + axutil_array_list_add(list, env, axutil_strdup(env, str)); + } + + if(!rest || !*rest) + { + break; + } + str = rest; + rest = NULL; + index = NULL; + + } + while(loop_state); + if(temp) + { + AXIS2_FREE(env->allocator, temp); + } + return list; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axutil_first_token( + const axutil_env_t *env, + axis2_char_t *in, + int delim) +{ + axutil_array_list_t *list = NULL; + axis2_char_t *str = NULL; + axis2_char_t *rest = NULL; + axis2_char_t *index = NULL; + + if(!in && !*in) + { + return NULL; + } + + list = axutil_array_list_create(env, 2); + if(!list) + { + return NULL; + } + str = axutil_strdup(env, in); + + index = strchr(str, delim); + if(!index) + { + axutil_array_list_add(list, env, str); + axutil_array_list_add(list, env, axutil_strdup(env, "")); + return list; + } + + rest = index + 1; + str[index - str] = '\0'; + + axutil_array_list_add(list, env, str); + axutil_array_list_add(list, env, axutil_strdup(env, rest)); + return list; +} + +AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL +axutil_last_token( + const axutil_env_t *env, + axis2_char_t *in, + int delim) +{ + axutil_array_list_t *list = NULL; + axis2_char_t *str = NULL; + axis2_char_t *rest = NULL; + axis2_char_t *index = NULL; + + if(!in && !*in) + { + return NULL; + } + + list = axutil_array_list_create(env, 2); + if(!list) + { + return NULL; + } + + str = axutil_strdup(env, in); + index = axutil_rindex(str, (axis2_char_t)delim); + /* We are sure that the conversion is safe */ + if(!index) + { + axutil_array_list_add(list, env, axutil_strdup(env, "")); + axutil_array_list_add(list, env, str); + return list; + } + + rest = index + 1; + str[index - str] = '\0'; + + axutil_array_list_add(list, env, str); + axutil_array_list_add(list, env, axutil_strdup(env, rest)); + + return list; +} diff --git a/util/src/thread_pool.c b/util/src/thread_pool.c new file mode 100644 index 0000000..cf1078d --- /dev/null +++ b/util/src/thread_pool.c @@ -0,0 +1,147 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +struct axutil_thread_pool +{ + axutil_allocator_t *allocator; +}; + +AXIS2_EXTERN axutil_thread_pool_t *AXIS2_CALL +axutil_thread_pool_init( + axutil_allocator_t *allocator) +{ + axutil_thread_pool_t *pool = NULL; + + pool = (axutil_thread_pool_t *)AXIS2_MALLOC(allocator, sizeof(axutil_thread_pool_t)); + + if(!pool) + { + return NULL; + } + pool->allocator = allocator; + + return pool; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_thread_pool_free( + axutil_thread_pool_t *pool) +{ + if(!pool) + { + return; + } + if(!pool->allocator) + { + return; + } + AXIS2_FREE(pool->allocator, pool); + return; +} + +AXIS2_EXTERN axutil_thread_t *AXIS2_CALL +axutil_thread_pool_get_thread( + axutil_thread_pool_t *pool, + axutil_thread_start_t func, + void *data) +{ + if(!pool) + { + return NULL; + } + if(!pool->allocator) + { + return NULL; + } + return axutil_thread_create(pool->allocator, NULL, func, data); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_pool_join_thread( + axutil_thread_pool_t *pool, + axutil_thread_t *thd) +{ + if(!pool || !thd) + { + return AXIS2_FAILURE; + } + return axutil_thread_join(thd); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_pool_exit_thread( + axutil_thread_pool_t *pool, + axutil_thread_t *thd) +{ + if(!pool || !thd) + { + return AXIS2_FAILURE; + } + return axutil_thread_exit(thd, pool->allocator); +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_thread_pool_thread_detach( + axutil_thread_pool_t *pool, + axutil_thread_t *thd) +{ + if(!pool || !thd) + { + return AXIS2_FAILURE; + } + return axutil_thread_detach(thd); +} + +AXIS2_EXTERN axutil_env_t *AXIS2_CALL +axutil_init_thread_env( + const axutil_env_t *system_env) +{ + axutil_allocator_t * allocator = NULL; + axutil_error_t *error = NULL; + allocator = axutil_allocator_clone(system_env->allocator); + error = axutil_error_create(allocator); + return axutil_env_create_with_error_log_thread_pool(allocator, error, system_env->log, + system_env-> thread_pool); +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_free_thread_env( + struct axutil_env *thread_env) +{ + if(!thread_env) + { + return; + } + + if(--(thread_env->ref) > 0) + { + return; + } + + /* log, thread_pool and allocator are shared, so do not free them */ + thread_env->log = NULL; + thread_env->thread_pool = NULL; + if(thread_env->error) + { + AXIS2_ERROR_FREE(thread_env->error); + } + AXIS2_FREE(thread_env->allocator, thread_env); +} diff --git a/util/src/types.c b/util/src/types.c new file mode 100644 index 0000000..a47cc67 --- /dev/null +++ b/util/src/types.c @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +AXIS2_EXTERN int AXIS2_CALL +axutil_atoi( + const char *s) +{ + int i, n; + + n = 0; + for(i = 0; s[i] >= '0' && s[i] <= '9'; ++i) + { + n = 10 * n + (s[i] - '0'); + } + return n; +} + +AXIS2_EXTERN int64_t AXIS2_CALL +axutil_atol( + const char *s) +{ + int i; + int64_t n; + + n = 0; + for(i = 0; s[i] >= '0' && s[i] <= '9'; ++i) + { + n = 10 * n + (s[i] - '0'); + } + return n; +} + +AXIS2_EXTERN uint64_t AXIS2_CALL +axutil_strtoul( + const char *s, + char **endptr, + int base) +{ + int i; + uint64_t n; + + n = 0; + for(i = 0; s[i] >= '0' && s[i] <= '9'; ++i) + { + n = 10 * n + (s[i] - '0'); + } + if(endptr != NULL) + { + *endptr = (char *)(s + i); + } + return n; +} + +AXIS2_EXTERN int64_t AXIS2_CALL +axutil_strtol( + const char *s, + char **endptr, + int base) +{ + int i; + int64_t n; + + n = 0; + for(i = 0; s[i] >= '0' && s[i] <= '9'; ++i) + { + n = 10 * n + (s[i] - '0'); + } + if(endptr != NULL) + { + *endptr = (char *)(s + i); + } + return n; +} diff --git a/util/src/uri.c b/util/src/uri.c new file mode 100644 index 0000000..d9e1bd6 --- /dev/null +++ b/util/src/uri.c @@ -0,0 +1,970 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#define AXIS2_WANT_STRFUNC +#include + +typedef struct schemes_t schemes_t; + +/** Structure to store various schemes and their default ports */ +struct schemes_t +{ + /** The name of the scheme */ + const axis2_char_t *name; + + /** The default port for the scheme */ + axis2_port_t default_port; +}; + +/* Some WWW schemes and their default ports; this is basically /etc/services */ + +/* This will become global when the protocol abstraction comes */ + +/* As the schemes are searched by a linear search, */ + +/* they are sorted by their expected frequency */ +static schemes_t schemes[] = { + {"http", AXIS2_URI_HTTP_DEFAULT_PORT}, + {"ftp", AXIS2_URI_FTP_DEFAULT_PORT}, + {"https", AXIS2_URI_HTTPS_DEFAULT_PORT}, + {"gopher", AXIS2_URI_GOPHER_DEFAULT_PORT}, + {"ldap", AXIS2_URI_LDAP_DEFAULT_PORT}, + {"nntp", AXIS2_URI_NNTP_DEFAULT_PORT}, + {"snews", AXIS2_URI_SNEWS_DEFAULT_PORT}, + {"imap", AXIS2_URI_IMAP_DEFAULT_PORT}, + {"pop", AXIS2_URI_POP_DEFAULT_PORT}, + {"sip", AXIS2_URI_SIP_DEFAULT_PORT}, + {"rtsp", AXIS2_URI_RTSP_DEFAULT_PORT}, + {"wais", AXIS2_URI_WAIS_DEFAULT_PORT}, + {"z39.50r", AXIS2_URI_WAIS_DEFAULT_PORT}, + {"z39.50s", AXIS2_URI_WAIS_DEFAULT_PORT}, + {"prospero", AXIS2_URI_PROSPERO_DEFAULT_PORT}, + {"nfs", AXIS2_URI_NFS_DEFAULT_PORT}, + {"tip", AXIS2_URI_TIP_DEFAULT_PORT}, + {"acap", AXIS2_URI_ACAP_DEFAULT_PORT}, + {"telnet", AXIS2_URI_TELNET_DEFAULT_PORT}, + {"ssh", AXIS2_URI_SSH_DEFAULT_PORT}, + {NULL, 0xFFFF} /* unknown port */ +}; + +/* Here is the hand-optimized parse_uri_components(). There are some wild + * tricks we could pull in assembly language that we don't pull here... like we + * can do word-at-time scans for delimiter characters using the same technique + * that fast axutil_memchr()s use. But that would be way non-portable. -djg + */ + +/* We have a axis2_table_t that we can index by character and it tells us if the + * character is one of the interesting delimiters. Note that we even get + * compares for NUL for free -- it's just another delimiter. + */ + +#define T_COLON 0x01 /* ':' */ +#define T_SLASH 0x02 /* '/' */ +#define T_QUESTION 0x04 /* '?' */ +#define T_HASH 0x08 /* '#' */ +#define T_NUL 0x80 /* '\0' */ + +#if AXIS2_CHARSET_EBCDIC + +/* Delimiter table for the EBCDIC character set */ +static const unsigned char uri_delims[256] = { + T_NUL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, T_SLASH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, T_QUESTION, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, T_COLON, T_HASH, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; +#else + +/* Delimiter table for the ASCII character set */ +static const unsigned char uri_delims[256] = { + T_NUL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, T_HASH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, T_SLASH, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, T_COLON, 0, 0, 0, 0, T_QUESTION, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; +#endif + +/* it works like this: + if (uri_delims[ch] & NOTEND_foobar) { + then we're not at a delimiter for foobar + } +*/ + +/* Note that we optimize the scheme scanning here, we cheat and let the + * compiler know that it doesn't have to do the & masking. + */ +#define NOTEND_SCHEME (0xff) +#define NOTEND_HOSTINFO (T_SLASH | T_QUESTION | T_HASH | T_NUL) +#define NOTEND_PATH (T_QUESTION | T_HASH | T_NUL) + +/** + * A structure to encompass all of the fields in a uri + */ +struct axutil_uri +{ + /** scheme ("http"/"ftp"/...) */ + axis2_char_t *scheme; + + /** combined [user[:password]\@]host[:port] */ + axis2_char_t *hostinfo; + + /** user name, as in http://user:passwd\@host:port/ */ + axis2_char_t *user; + + /** password, as in http://user:passwd\@host:port/ */ + axis2_char_t *password; + + /** hostname from URI (or from Host: header) */ + axis2_char_t *hostname; + + /** port string (integer representation is in "port") */ + axis2_char_t *port_str; + + /** the request path (or "/" if only scheme://host was given) */ + axis2_char_t *path; + + /** Everything after a '?' in the path, if present */ + axis2_char_t *query; + + /** Trailing "#fragment" string, if present */ + axis2_char_t *fragment; + + /** structure returned from gethostbyname() */ + struct hostent *hostent; + + /** The port number, numeric, valid only if port_str */ + axis2_port_t port; + + /** has the structure been initialized */ + unsigned is_initialized:1; + + /** has the DNS been looked up yet */ + unsigned dns_looked_up:1; + + /** has the dns been resolved yet */ + unsigned dns_resolved:1; + + /** is it an IPv6 URL */ + unsigned is_ipv6:1; +}; + +AXIS2_EXTERN axutil_uri_t *AXIS2_CALL +axutil_uri_create( + const axutil_env_t *env) +{ + axutil_uri_t *uri = NULL; + AXIS2_ENV_CHECK(env, NULL); + + uri = (axutil_uri_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_uri_t)); + + if(!uri) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + uri->scheme = NULL; + uri->hostinfo = NULL; + uri->user = NULL; + uri->password = NULL; + uri->hostname = NULL; + uri->port_str = NULL; + uri->path = NULL; + uri->query = NULL; + uri->fragment = NULL; + uri->hostent = NULL; + uri->port = 0; + uri->is_ipv6 = 0; + + return uri; +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_uri_free( + axutil_uri_t *uri, + const axutil_env_t *env) +{ + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + if(uri->scheme) + { + AXIS2_FREE(env->allocator, uri->scheme); + uri->scheme = NULL; + } + + if(uri->hostinfo) + { + AXIS2_FREE(env->allocator, uri->hostinfo); + uri->hostinfo = NULL; + } + + if(uri->user) + { + AXIS2_FREE(env->allocator, uri->user); + uri->user = NULL; + } + + if(uri->password) + { + AXIS2_FREE(env->allocator, uri->password); + uri->password = NULL; + } + + if(uri->hostname) + { + AXIS2_FREE(env->allocator, uri->hostname); + uri->hostname = NULL; + } + + if(uri->port_str) + { + AXIS2_FREE(env->allocator, uri->port_str); + uri->port_str = NULL; + } + + if(uri->path) + { + AXIS2_FREE(env->allocator, uri->path); + uri->path = NULL; + } + + if(uri->query) + { + AXIS2_FREE(env->allocator, uri->query); + uri->query = NULL; + } + + if(uri->fragment) + { + AXIS2_FREE(env->allocator, uri->fragment); + uri->fragment = NULL; + } + + AXIS2_FREE(env->allocator, uri); + + return; +} + +/* parse_uri_components(): + * Parse a given URI, fill in all supplied fields of a uri_components + * structure. This eliminates the necessity of extracting host, port, + * path, query info repeatedly in the modules. + * Side effects: + * - fills in fields of uri_components *uptr + * - none on any of the r->* fields + */ + +AXIS2_EXTERN axutil_uri_t *AXIS2_CALL +axutil_uri_parse_string( + const axutil_env_t *env, + const axis2_char_t *uri_str) +{ + axutil_uri_t *uri = NULL; + const axis2_char_t *s; + const axis2_char_t *s1; + const axis2_char_t *hostinfo; + axis2_char_t *endstr; + int port; + int v6_offset1 = 0, v6_offset2 = 0; + + AXIS2_PARAM_CHECK(env->error, uri_str, NULL); + + uri = (axutil_uri_t *)axutil_uri_create(env); + + /* Initialize the structure. parse_uri() and parse_uri_components() + * can be called more than once per request. + */ + uri->is_initialized = 1; + + /* We assume the processor has a branch predictor like most -- + * it assumes forward branches are untaken and backwards are taken. That's + * the reason for the gotos. + */ + if(uri_str[0] == '/') + { + /* RFC2396 #4.3 says that two leading slashes mean we have an + * authority component, not a path! Fixing this looks scary + * with the gotos here. But if the existing logic is valid, + * then presumably a goto pointing to deal_with_authority works. + * + * RFC2396 describes this as resolving an ambiguity. In the + * case of three or more slashes there would seem to be no + * ambiguity, so it is a path after all. + */ + if(uri_str[1] == '/' && uri_str[2] != '/') + { + s = uri_str + 2; + goto deal_with_authority; + } + + deal_with_path: + /* we expect uri to point to first character of path ... remember + * that the path could be empty -- http://foobar?query for example + */ + s = uri_str; + if((!uri->hostinfo && uri_str[0] == '/' && uri_str[1] == '/') || (!uri->scheme + && uri_str[0] == ':')) + { + if(uri) + { + axutil_uri_free(uri, env); + } + uri = NULL; + goto end; + } + while((uri_delims[*(unsigned char *)s] & NOTEND_PATH) == 0) + { + ++s; + } + if(s != uri_str) + { + uri->path = axutil_strmemdup(uri_str, s - uri_str, env); + } + if(*s == 0) + { + goto end; + } + if(*s == '?') + { + ++s; + s1 = strchr(s, '#'); + if(s1) + { + uri->fragment = axutil_strdup(env, s1 + 1); + uri->query = axutil_strmemdup(s, s1 - s, env); + } + else + { + uri->query = axutil_strdup(env, s); + } + goto end; + } + /* otherwise it's a fragment */ + uri->fragment = axutil_strdup(env, s + 1); + + goto end; + } + + /* find the scheme: */ + s = uri_str; + while((uri_delims[*(unsigned char *)s] & NOTEND_SCHEME) == 0) + { + ++s; + } + /* scheme must be non-empty and followed by :// */ + if(s == uri_str || s[0] != ':' || s[1] != '/' || s[2] != '/') + { + if(uri->scheme) + { + AXIS2_FREE(env->allocator, uri->scheme); + uri->scheme = NULL; + } + s = uri_str; /* restart from beginning as the loop must have ended in + * in a wrong place. */ + goto deal_with_authority; + /* backwards predicted taken! */ + } + + uri->scheme = axutil_strmemdup(uri_str, s - uri_str, env); + s += 3; + + deal_with_authority: hostinfo = s; + while((uri_delims[*(unsigned char *)s] & NOTEND_HOSTINFO) == 0) + { + ++s; + } + uri_str = s; /* whatever follows hostinfo is start of uri */ + uri->hostinfo = axutil_strmemdup(hostinfo, uri_str - hostinfo, env); + + /* If there's a username:password@host:port, the @ we want is the last @... + * too bad there's no memrchr()... For the C purists, note that hostinfo + * is definately not the first character of the original uri so therefore + * &hostinfo[-1] < &hostinfo[0] ... and this loop is valid C. + */ + do + { + --s; + } + while(s >= hostinfo && *s != '@'); + if(s < hostinfo) + { + /* again we want the common case to be fall through */ + deal_with_host: + /* We expect hostinfo to point to the first character of + * the hostname. If there's a port it is the first colon, + * except with IPv6. + */ + if(*hostinfo == '[') + { + if(*(hostinfo + 1) == ']') + { + if(uri) + { + axutil_uri_free(uri, env); + } + uri = NULL; + goto end; + } + if((*(hostinfo + 1) >= '0' && *(hostinfo + 1) <= '9') || (*(hostinfo + 1) >= 'a' + && *(hostinfo + 1) <= 'z') || (*(hostinfo + 1) >= 'A' && *(hostinfo + 1) <= 'Z') + || (*(hostinfo + 1) == ':' && *(hostinfo + 2) == ':')) + { + uri->is_ipv6 = 1; + } + else + { + if(uri) + { + axutil_uri_free(uri, env); + } + uri = NULL; + goto end; + } + v6_offset1 = 1; + v6_offset2 = 2; + s = axutil_memchr(hostinfo, ']', uri_str - hostinfo); + if(!s) + { + if(uri) + { + axutil_uri_free(uri, env); + } + uri = NULL; + goto end; + } + if(*++s != ':') + { + s = NULL; /* no port */ + } + } + else if(!*hostinfo || (*hostinfo >= '0' && *hostinfo <= '9') || (*hostinfo >= 'a' + && *hostinfo <= 'z') || (*hostinfo >= 'A' && *hostinfo <= 'Z') || *hostinfo == '?' + || *hostinfo == '/' || *hostinfo == '#') + { + s = axutil_memchr(hostinfo, ':', uri_str - hostinfo); + } + else + { + if(uri) + { + axutil_uri_free(uri, env); + } + uri = NULL; + goto end; + } + if(!s) + { + /* we expect the common case to have no port */ + uri->hostname = axutil_strmemdup(hostinfo + v6_offset1, + uri_str - hostinfo - v6_offset2, env); + goto deal_with_path; + } + uri->hostname = axutil_strmemdup(hostinfo + v6_offset1, s - hostinfo - v6_offset2, env); + ++s; + uri->port_str = axutil_strmemdup(s, uri_str - s, env); + if(uri_str != s) + { + port = strtol(uri->port_str, &endstr, 10); + uri->port = (axis2_port_t)port; + /* We are sure that the conversion is safe */ + if(*endstr == '\0') + { + goto deal_with_path; + } + /* Invalid characters after ':' found */ + if(uri) + { + axutil_uri_free(uri, env); + } + uri = NULL; + goto end; + } + uri->port = axutil_uri_port_of_scheme(uri->scheme); + goto deal_with_path; + } + + /* first colon delimits username:password */ + s1 = axutil_memchr(hostinfo, ':', s - hostinfo); + if(s1) + { + uri->user = axutil_strmemdup(hostinfo, s1 - hostinfo, env); + ++s1; + uri->password = axutil_strmemdup(s1, s - s1, env); + } + else + { + uri->user = axutil_strmemdup(hostinfo, s - hostinfo, env); + } + hostinfo = s + 1; + goto deal_with_host; + + /* End of function call */ + end: return uri; +} + +/* Special case for CONNECT parsing: it comes with the hostinfo part only */ + +/* See the INTERNET-DRAFT document "Tunneling SSL Through a WWW Proxy" + * currently at http://muffin.doit.org/docs/rfc/tunneling_ssl.html + * for the format of the "CONNECT host:port HTTP/1.0" request + */ +AXIS2_EXTERN axutil_uri_t *AXIS2_CALL +axutil_uri_parse_hostinfo( + const axutil_env_t *env, + const axis2_char_t *hostinfo) +{ + axutil_uri_t *uri = NULL; + const axis2_char_t *s; + axis2_char_t *endstr; + const axis2_char_t *rsb; + int v6_offset1 = 0; + + AXIS2_PARAM_CHECK(env->error, hostinfo, NULL); + + uri = (axutil_uri_t *)axutil_uri_create(env); + if(!uri) + { + return NULL; + } + /* Initialize the structure. parse_uri() and parse_uri_components() + * can be called more than once per request. + */ + memset(uri, '\0', sizeof(*uri)); + uri->is_initialized = 1; + uri->hostinfo = axutil_strdup(env, hostinfo); + + /* We expect hostinfo to point to the first character of + * the hostname. There must be a port, separated by a colon + */ + if(*hostinfo == '[') + { + if(*(hostinfo + 1) == ']') + { + axutil_uri_free(uri, env); + return NULL; + } + uri->is_ipv6 = 1; + rsb = strchr(hostinfo, ']'); + if(!rsb || *(rsb + 1) != ':') + { + axutil_uri_free(uri, env); + return NULL; + } + /* literal IPv6 address + * Special allowances has been made according to RFC3986 for + * IPv6 addresses beginning with "::" + */ + s = rsb + 1; + if((*(hostinfo + 1) >= '0' && *(hostinfo + 1) <= '9') || (*(hostinfo + 1) >= 'a' + && *(hostinfo + 1) <= 'z') || (*(hostinfo + 1) >= 'A' && *(hostinfo + 1) <= 'Z') + || (*(hostinfo + 1) == ':' && *(hostinfo + 2) == ':')) + { + ++hostinfo; + } + else + { + axutil_uri_free(uri, env); + return NULL; + } + v6_offset1 = 1; + } + else if((*hostinfo >= '0' && *hostinfo <= '9') || (*hostinfo >= 'a' && *hostinfo <= 'z') + || (*hostinfo >= 'A' && *hostinfo <= 'Z')) + { + s = strchr(hostinfo, ':'); + } + else + { + axutil_uri_free(uri, env); + return NULL; + } + if(!s) + { + axutil_uri_free(uri, env); + return NULL; + } + uri->hostname = axutil_strndup(env, hostinfo, (int)(s - hostinfo - v6_offset1)); + /* We are sure that the difference lies within the int range */ + ++s; + uri->port_str = axutil_strdup(env, s); + if(*s != '\0') + { + uri->port = (unsigned short)strtol(uri->port_str, &endstr, 10); + if(*endstr == '\0') + { + return uri; + } + /* Invalid characters after ':' found */ + } + axutil_uri_free(uri, env); + return NULL; +} + +/* Resolve relative to a base. This means host/etc, and (crucially) path */ +AXIS2_EXTERN axutil_uri_t *AXIS2_CALL +axutil_uri_resolve_relative( + const axutil_env_t *env, + const axutil_uri_t *base, + axutil_uri_t *uri) +{ + AXIS2_PARAM_CHECK(env->error, base, NULL); + AXIS2_PARAM_CHECK(env->error, uri, NULL); + + if(!uri || !base || !base->is_initialized || !uri->is_initialized) + { + return NULL; + } + /* The interesting bit is the path. */ + if(!uri->path) + { + if(!uri->hostname) + { + /* is this compatible with is_initialised? Harmless in any case */ + uri->path = base->path ? base->path : axutil_strdup(env, "/"); + } + else + { + /* deal with the idiosyncracy of APR allowing path==NULL + * without risk of breaking back-compatibility + */ + uri->path = axutil_strdup(env, "/"); + } + } + else if(uri->path[0] != '/') + { + size_t baselen; + const char *basepath = base->path ? base->path : "/"; + char *path = uri->path; + char *temp = NULL; + const char *base_end = strrchr(basepath, '/'); + + temp = path; + + /* if base is nonsensical, bail out */ + if(basepath[0] != '/') + { + return NULL; + } + /* munch "up" components at the start, and chop them from base path */ + while(!strncmp(path, "../", 3)) + { + while(base_end > basepath) + { + if(*--base_end == '/') + { + break; + } + } + path += 3; + } + /* munch "here" components at the start */ + while(!strncmp(path, "./", 2)) + { + path += 2; + } + baselen = base_end - basepath + 1; + uri->path = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * baselen + strlen(path) + 1); + memcpy(uri->path, basepath, baselen); + strcpy(uri->path + baselen, path); + if(temp) + { + AXIS2_FREE(env->allocator, temp); + } + } + + /* The trivial bits are everything-but-path */ + if(!uri->scheme) + { + uri->scheme = axutil_strdup(env, base->scheme); + } + if(!uri->hostinfo) + { + uri->hostinfo = axutil_strdup(env, base->hostinfo); + } + if(!uri->user) + { + uri->user = axutil_strdup(env, base->user); + } + if(!uri->password) + { + uri->password = axutil_strdup(env, base->password); + } + if(!uri->hostname) + { + uri->hostname = axutil_strdup(env, base->hostname); + } + if(!uri->port_str) + { + uri->port_str = axutil_strdup(env, base->port_str); + } + if(!uri->hostent) + { + uri->hostent = base->hostent; + } + if(!uri->port) + { + uri->port = base->port; + } + uri->is_ipv6 = base->is_ipv6; + + return uri; +} + +AXIS2_EXTERN axutil_uri_t *AXIS2_CALL +axutil_uri_parse_relative( + const axutil_env_t *env, + const axutil_uri_t *base, + const char *uri) +{ + axutil_uri_t *uptr = NULL; + axutil_uri_t *temp = NULL; + + uptr = axutil_uri_parse_string(env, uri); + if(!uptr && AXIS2_SUCCESS != AXIS2_ERROR_GET_STATUS_CODE(env->error)) + { + return uptr; + } + temp = uptr; + uptr = axutil_uri_resolve_relative(env, base, uptr); + + if(!uptr) + { + axutil_uri_free(temp, env); + } + + return uptr; +} +AXIS2_EXTERN axis2_port_t AXIS2_CALL +axutil_uri_port_of_scheme( + const axis2_char_t *scheme_str) +{ + schemes_t *scheme; + + if(scheme_str) + { + for(scheme = schemes; scheme->name; ++scheme) + { + if(axutil_strcasecmp(scheme_str, scheme->name) == 0) + { + return scheme->default_port; + } + } + } + return 0; +} + +AXIS2_EXTERN axutil_uri_t *AXIS2_CALL +axutil_uri_clone( + const axutil_uri_t *uri, + const axutil_env_t *env) +{ + axutil_uri_t *new_uri = NULL; + + new_uri = (axutil_uri_t *)axutil_uri_create(env); + + new_uri->scheme = axutil_strdup(env, uri->scheme); + new_uri->hostinfo = axutil_strdup(env, uri->hostinfo); + new_uri->user = axutil_strdup(env, uri->user); + new_uri->password = axutil_strdup(env, uri->password); + new_uri->hostname = axutil_strdup(env, uri->hostname); + new_uri->port_str = axutil_strdup(env, uri->port_str); + new_uri->path = axutil_strdup(env, uri->path); + new_uri->query = axutil_strdup(env, uri->query); + new_uri->fragment = axutil_strdup(env, uri->fragment); + new_uri->hostent = uri->hostent; + new_uri->port = uri->port; + new_uri->is_initialized = uri->is_initialized; + new_uri->dns_looked_up = uri->dns_looked_up; + new_uri->dns_resolved = uri->dns_resolved; + new_uri->is_ipv6 = uri->is_ipv6; + + return new_uri; +} + +/* Unparse a axutil_uri_t structure to an URI string. + * Optionally suppress the password for security reasons. + */ +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_uri_to_string( + const axutil_uri_t *uri, + const axutil_env_t *env, + unsigned flags) +{ + axis2_char_t *ret = ""; + axis2_char_t *temp = NULL; + AXIS2_ENV_CHECK(env, NULL); + + /* If suppressing the site part, omit both user name & scheme://hostname */ + if(!(flags & AXIS2_URI_UNP_OMITSITEPART)) + { + + /* Construct a "user:password@" string, honoring the passed + * AXIS2_URI_UNP_ flags: */ + if(uri->user || uri->password) + { + ret = axutil_strcat(env, (uri->user && !(flags & AXIS2_URI_UNP_OMITUSER)) ? uri-> user + : "", (uri->password && !(flags & AXIS2_URI_UNP_OMITPASSWORD)) ? ":" : "", + (uri->password && !(flags & AXIS2_URI_UNP_OMITPASSWORD)) ? ((flags + & AXIS2_URI_UNP_REVEALPASSWORD) ? uri-> password : "XXXXXXXX") : "", + ((uri->user && !(flags & AXIS2_URI_UNP_OMITUSER)) || (uri->password && !(flags + & AXIS2_URI_UNP_OMITPASSWORD))) ? "@" : "", NULL); + temp = ret; + } + + /* Construct scheme://site string */ + if(uri->hostname) + { + int is_default_port; + const axis2_char_t *lbrk = "", *rbrk = ""; + + if(uri->is_ipv6) + { /* v6 literal */ + lbrk = "["; + rbrk = "]"; + } + + is_default_port = (uri->port_str == NULL || uri->port == 0 || uri->port + == axutil_uri_port_of_scheme(uri->scheme)); + + if(uri->scheme) + { + ret = axutil_strcat(env, uri->scheme, "://", ret, lbrk, uri->hostname, rbrk, + is_default_port ? "" : ":", is_default_port ? "" : uri->port_str, NULL); + if(temp) + { + AXIS2_FREE(env->allocator, temp); + } + temp = ret; + } + else + { + /* Fixed to support Abbreviated URLs as in RFC2396. + * Thus, if no scheme, we omit "//" too, eventhough + * it is a part of authority. + */ + ret = axutil_strcat(env, ret, lbrk, uri->hostname, rbrk, + is_default_port ? "" : ":", is_default_port ? "" : uri->port_str, NULL); + /*ret = + axutil_strcat(env, "//", ret, lbrk, uri->hostname, rbrk, + is_default_port ? "" : ":", + is_default_port ? "" : uri->port_str, NULL);*/ + if(temp) + { + AXIS2_FREE(env->allocator, temp); + } + temp = ret; + } + } + } + + /* Should we suppress all path info? */ + if(!(flags & AXIS2_URI_UNP_OMITPATHINFO)) + { + /* Append path, query and fragment strings: */ + ret = axutil_strcat(env, ret, (uri->path) ? uri->path : "", (uri->query && !(flags + & AXIS2_URI_UNP_OMITQUERY_ONLY)) ? "?" : "", (uri->query && !(flags + & AXIS2_URI_UNP_OMITQUERY_ONLY)) ? uri-> query : "", (uri->fragment && !(flags + & AXIS2_URI_UNP_OMITFRAGMENT_ONLY)) ? "#" : NULL, (uri->fragment && !(flags + & AXIS2_URI_UNP_OMITFRAGMENT_ONLY)) ? uri-> fragment : NULL, NULL); + if(temp) + { + AXIS2_FREE(env->allocator, temp); + } + } + return ret; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_uri_get_protocol( + axutil_uri_t *uri, + const axutil_env_t *env) +{ + return uri->scheme; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_uri_get_server( + axutil_uri_t *uri, + const axutil_env_t *env) +{ + return uri->hostinfo; +} + +AXIS2_EXTERN axis2_port_t AXIS2_CALL +axutil_uri_get_port( + axutil_uri_t *uri, + const axutil_env_t *env) +{ + return uri->port; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_uri_get_host( + axutil_uri_t *uri, + const axutil_env_t *env) +{ + return uri->hostname; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_uri_get_query( + axutil_uri_t *uri, + const axutil_env_t *env) +{ + return uri->query; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_uri_get_fragment( + axutil_uri_t *uri, + const axutil_env_t *env) +{ + return uri->fragment; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_uri_get_path( + axutil_uri_t *uri, + const axutil_env_t *env) +{ + return uri->path; +} diff --git a/util/src/url.c b/util/src/url.c new file mode 100644 index 0000000..e13c87c --- /dev/null +++ b/util/src/url.c @@ -0,0 +1,699 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +struct axutil_url +{ + axis2_char_t *protocol; + axis2_char_t *host; + int port; + axis2_char_t *path; + axis2_char_t *query; + axis2_char_t *server; +}; + +static int +is_safe_or_unreserve( + char c); + +AXIS2_EXTERN axutil_url_t *AXIS2_CALL +axutil_url_create( + const axutil_env_t *env, + const axis2_char_t *protocol, + const axis2_char_t *host, + const int port, + const axis2_char_t *path) +{ + axutil_url_t *url = NULL; + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, protocol, NULL); + + if(!protocol || !*protocol || strstr(protocol, "://") || (host && strchr(host, '/'))) + { + return NULL; + } + + url = (axutil_url_t *)AXIS2_MALLOC(env->allocator, sizeof(axutil_url_t)); + + if(!url) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Out of memory"); + return NULL; + } + url->protocol = axutil_strdup(env, protocol); + url->host = NULL; + url->path = NULL; + url->server = NULL; + url->query = NULL; + + if(host) + { + url->host = (axis2_char_t *)axutil_strdup(env, host); + url->port = port; + } + else + { + url->port = 0; + } + + /** if the path is not starting with / we have to make it so + */ + if(path) + { + axis2_char_t *params = NULL; + axis2_char_t *temp = NULL; + if(path[0] == '/') + { + temp = (axis2_char_t *)axutil_strdup(env, path); + } + else + { + temp = axutil_stracat(env, "/", path); + } + params = strchr(temp, '?'); + if(!params) + { + params = strchr(temp, '#'); + } + if(params) + { + url->query = (axis2_char_t *)axutil_strdup(env, params); + *params = '\0'; + } + url->path = (axis2_char_t *)axutil_strdup(env, temp); + AXIS2_FREE(env->allocator, temp); + } + + return url; +} + +AXIS2_EXTERN axutil_url_t *AXIS2_CALL +axutil_url_parse_string( + const axutil_env_t *env, + const axis2_char_t *str_url) +{ + /** + * Only accepted format is : + * protocol://host:port/path + * Added file:///path + * port is optional and the default port is assumed + * if path is not present / (root) is assumed + */ + axis2_char_t *tmp_url_str = NULL; + axutil_url_t *ret = NULL; + const axis2_char_t *protocol = NULL; + axis2_char_t *path = NULL; + axis2_char_t *port_str = NULL; + axis2_char_t *host = NULL; + int port = 0; + + AXIS2_ENV_CHECK(env, NULL); + AXIS2_PARAM_CHECK(env->error, str_url, NULL); + + tmp_url_str = axutil_strdup(env, str_url); + if(!tmp_url_str) + { + return NULL; + } + protocol = tmp_url_str; + host = strstr(tmp_url_str, "://"); + if(!host) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_ADDRESS, AXIS2_FAILURE); + + AXIS2_FREE(env->allocator, tmp_url_str); + return NULL; + } + if(axutil_strlen(host) < 3 * sizeof(axis2_char_t)) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_ADDRESS, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid IP or hostname"); + AXIS2_FREE(env->allocator, tmp_url_str); + return NULL; + } + *host = '\0'; + host += 3 * sizeof(axis2_char_t); /* skip "://" part */ + if(axutil_strlen(host) <= 0) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_ADDRESS, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid IP or hostname"); + AXIS2_FREE(env->allocator, tmp_url_str); + return NULL; + } + /* if the url is file:// thing we need the protocol and + * path only + */ + if(0 == axutil_strcasecmp(protocol, (const axis2_char_t *)"file")) + { + ret = axutil_url_create(env, protocol, NULL, 0, host); + AXIS2_FREE(env->allocator, tmp_url_str); + return ret; + } + + port_str = strchr(host, ':'); + if(!port_str) + { + path = strchr(host, '/'); + if(!path) + { + path = strchr(host, '?'); + } + else + { + *path++ = '\0'; + } + if(!path) + { + path = strchr(host, '#'); + } + if(!path) + { + /* No path - assume def path ('/') */ + /* here we have protocol + host + def port + def path */ + ret = axutil_url_create(env, protocol, host, port, "/"); + AXIS2_FREE(env->allocator, tmp_url_str); + return ret; + } + else + { + axis2_char_t *path_temp = NULL; + + path_temp = axutil_strdup(env, path); + *path = '\0'; + /* here we have protocol + host + def port + path */ + ret = axutil_url_create(env, protocol, host, port, path_temp); + AXIS2_FREE(env->allocator, tmp_url_str); + AXIS2_FREE(env->allocator, path_temp); + return ret; + } + } + else + { + *port_str++ = '\0'; + path = strchr(port_str, '/'); + if(!path) + { + path = strchr(port_str, '?'); + if(path) + { + *path = '\0'; + port = AXIS2_ATOI(port_str); + *path = '?'; + } + } + else + { + *path++ = '\0'; + port = AXIS2_ATOI(port_str); + } + if(!path) + { + path = strchr(port_str, '#'); + if(path) + { + *path = '\0'; + port = AXIS2_ATOI(port_str); + *path = '#'; + } + } + if(!path) + { + port = AXIS2_ATOI(port_str); + /* here we have protocol + host + port + def path */ + ret = axutil_url_create(env, protocol, host, port, "/"); + AXIS2_FREE(env->allocator, tmp_url_str); + return ret; + } + else + { + if(axutil_strlen(path) > 0) + { + axis2_char_t *path_temp = NULL; + + path_temp = axutil_strdup(env, path); + *path = '\0'; + /* here we have protocol + host + port + path */ + ret = axutil_url_create(env, protocol, host, port, path_temp); + AXIS2_FREE(env->allocator, tmp_url_str); + AXIS2_FREE(env->allocator, path_temp); + return ret; + } + else + { + /* here we have protocol + host + port + def path */ + ret = axutil_url_create(env, protocol, host, port, "/"); + AXIS2_FREE(env->allocator, tmp_url_str); + return ret; + } + } + } +} + +AXIS2_EXTERN void AXIS2_CALL +axutil_url_free( + axutil_url_t *url, + const axutil_env_t *env) +{ + if(url->protocol) + { + AXIS2_FREE(env->allocator, url->protocol); + url->protocol = NULL; + } + if(url->host) + { + AXIS2_FREE(env->allocator, url->host); + url->host = NULL; + } + if(url->server) + { + AXIS2_FREE(env->allocator, url->server); + url->server = NULL; + } + if(url->path) + { + AXIS2_FREE(env->allocator, url->path); + url->path = NULL; + } + if(url->query) + { + AXIS2_FREE(env->allocator, url->query); + url->query = NULL; + } + AXIS2_FREE(env->allocator, url); + return; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_url_to_external_form( + axutil_url_t *url, + const axutil_env_t *env) +{ + axis2_char_t *external_form = NULL; + axis2_ssize_t len = 0; + axis2_char_t port_str[8]; + axis2_bool_t print_port = AXIS2_FALSE; + AXIS2_PARAM_CHECK(env->error, url, NULL); + + if(!url->protocol) + { + return NULL; + } + + if(url->port != 0 && url->port != axutil_uri_port_of_scheme(url->protocol)) + { + print_port = AXIS2_TRUE; + sprintf(port_str, "%d", url->port); + } + + len = axutil_strlen(url->protocol) + 6; + if(url->host) + { + len += axutil_strlen(url->host); + } + if(url->path) + { + len += axutil_strlen(url->path); + } + if(url->query) + { + len += axutil_strlen(url->query); + } + if(print_port) + { + len += axutil_strlen(port_str) + 1; + } + external_form = (axis2_char_t *)AXIS2_MALLOC(env->allocator, len); + sprintf(external_form, "%s://%s%s%s%s%s", url->protocol, (url->host) ? url->host : "", + (print_port) ? ":" : "", (print_port) ? port_str : "", (url->path) ? url->path : "", + (url->query) ? url->query : ""); + return external_form; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_url_set_protocol( + axutil_url_t *url, + const axutil_env_t *env, + axis2_char_t *protocol) +{ + AXIS2_PARAM_CHECK(env->error, protocol, AXIS2_FAILURE); + if(url->protocol) + { + AXIS2_FREE(env->allocator, url->protocol); + url->protocol = NULL; + } + url->protocol = axutil_strdup(env, protocol); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_url_get_protocol( + axutil_url_t *url, + const axutil_env_t *env) +{ + return url->protocol; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_url_set_host( + axutil_url_t *url, + const axutil_env_t *env, + axis2_char_t *host) +{ + axis2_ssize_t len = 0; + axis2_char_t port_str[8]; + axis2_bool_t print_port = AXIS2_FALSE; + AXIS2_PARAM_CHECK(env->error, host, AXIS2_FAILURE); + + if(url->host) + { + AXIS2_FREE(env->allocator, url->host); + } + url->host = axutil_strdup(env, host); + if(url->server) + { + AXIS2_FREE(env->allocator, url->server); + } + if(!url->host) + { + return AXIS2_SUCCESS; + } + len += axutil_strlen(url->host); + if(url->port != 0 && (!url->protocol || url->port != axutil_uri_port_of_scheme(url->protocol))) + { + print_port = AXIS2_TRUE; + sprintf(port_str, "%d", url->port); + len += axutil_strlen(port_str) + 1; + } + url->server = (axis2_char_t *)AXIS2_MALLOC(env->allocator, len); + sprintf(url->server, "%s%s%s", url->host, (print_port) ? ":" : "", (print_port) ? port_str : ""); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_url_get_host( + axutil_url_t *url, + const axutil_env_t *env) +{ + return url->host; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_url_set_server( + axutil_url_t *url, + const axutil_env_t *env, + axis2_char_t *server) +{ + axis2_char_t *temp = NULL; + axis2_char_t *port_str = NULL; + AXIS2_PARAM_CHECK(env->error, server, AXIS2_FAILURE); + + temp = axutil_strdup(env, server); + if(temp && *temp == ':') + { + AXIS2_FREE(env->allocator, temp); + return AXIS2_FAILURE; + } + + if(strchr(temp, '/')) + { + AXIS2_FREE(env->allocator, temp); + return AXIS2_FAILURE; + } + + if(url->server) + { + AXIS2_FREE(env->allocator, url->server); + } + if(url->host) + { + AXIS2_FREE(env->allocator, url->host); + } + url->port = 0; + + url->server = axutil_strdup(env, server); + + port_str = strchr(temp, ':'); + if(port_str) + { + *port_str++ = '\0'; + url->port = AXIS2_ATOI(port_str); + } + + url->host = axutil_strdup(env, temp); + AXIS2_FREE(env->allocator, temp); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_url_get_server( + axutil_url_t *url, + const axutil_env_t *env) +{ + axis2_ssize_t len = 0; + axis2_char_t port_str[8]; + axis2_bool_t print_port = AXIS2_FALSE; + + if(!url->server && !url->host) + { + return NULL; + } + else if(!url->host) + { + AXIS2_FREE(env->allocator, url->server); + url->server = NULL; + return NULL; + } + else if(url->server) + { + return url->server; + } + len += axutil_strlen(url->host); + if(url->port != 0 && (!url->protocol || url->port != axutil_uri_port_of_scheme(url->protocol))) + { + print_port = AXIS2_TRUE; + sprintf(port_str, "%d", url->port); + len += axutil_strlen(port_str) + 1; /* +1 is for ':' */ + } + url->server = (axis2_char_t *)AXIS2_MALLOC(env->allocator, len + 1); /* +1 is for '/0' */ + sprintf(url->server, "%s%s%s", url->host, (print_port) ? ":" : "", (print_port) ? port_str : ""); + return url->server; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_url_set_port( + axutil_url_t *url, + const axutil_env_t *env, + int port) +{ + axis2_ssize_t len = 0; + axis2_char_t port_str[8]; + axis2_bool_t print_port = AXIS2_FALSE; + if(url->port == port) + { + return AXIS2_SUCCESS; + } + url->port = port; + if(url->server) + { + AXIS2_FREE(env->allocator, url->server); + } + if(!url->host) + { + return AXIS2_SUCCESS; + } + len += axutil_strlen(url->host); + if(url->port != 0 && (!url->protocol || url->port != axutil_uri_port_of_scheme(url->protocol))) + { + print_port = AXIS2_TRUE; + sprintf(port_str, "%d", url->port); + len += axutil_strlen(port_str) + 1; + } + url->server = (axis2_char_t *)AXIS2_MALLOC(env->allocator, len); + sprintf(url->server, "%s%s%s", url->host, (print_port) ? ":" : "", (print_port) ? port_str : ""); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_url_get_port( + axutil_url_t *url, + const axutil_env_t *env) +{ + if(!url->port) + { + return axutil_uri_port_of_scheme(url->protocol); + } + return url->port; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_url_set_path( + axutil_url_t *url, + const axutil_env_t *env, + axis2_char_t * path) +{ + AXIS2_PARAM_CHECK(env->error, path, AXIS2_FAILURE); + if(url->path) + { + AXIS2_FREE(env->allocator, url->path); + } + url->path = axutil_strdup(env, path); + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_url_get_path( + axutil_url_t *url, + const axutil_env_t *env) +{ + return url->path; +} + +AXIS2_EXTERN axutil_url_t *AXIS2_CALL +axutil_url_clone( + axutil_url_t *url, + const axutil_env_t *env) +{ + axis2_char_t *temp = NULL; + axutil_url_t *ret = NULL; + + if(url->path && url->query) + { + temp = axutil_stracat(env, url->path, url->query); + } + else if(url->path) + { + temp = axutil_strdup(env, url->path); + } + else if(url->query) + { + temp = axutil_strdup(env, url->query); + } + + ret = axutil_url_create(env, url->protocol, url->host, url->port, url->path); + if(temp) + { + AXIS2_FREE(env->allocator, temp); + } + return ret; +} + +AXIS2_EXTERN axutil_uri_t *AXIS2_CALL +axutil_url_to_uri( + axutil_url_t *url, + const axutil_env_t *env) +{ + axis2_char_t *url_str = NULL; + axutil_uri_t *uri = NULL; + url_str = axutil_url_to_external_form(url, env); + uri = axutil_uri_parse_string(env, url_str); + return uri; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_url_encode( + const axutil_env_t *env, + axis2_char_t *dest, + axis2_char_t *buff, + int len) +{ + axis2_char_t string[4]; + axis2_char_t *expand_buffer = NULL; + axis2_char_t *temp = NULL; + int i; + for(i = 0; i < len && buff[i]; i++) + { + if(isalnum(buff[i]) || is_safe_or_unreserve(buff[i])) + { + sprintf(string, "%c", buff[i]); + } + else + { + /* %%%x is to print % mark with the hex value */ + sprintf(string, "%%%x", buff[i]); + } + + if(((int)strlen(dest) + 4) > len) + { + expand_buffer = (axis2_char_t *)AXIS2_MALLOC(env->allocator, len * 2); + memset(expand_buffer, 0, len * 2); + len *= 2; + temp = memmove(expand_buffer, dest, strlen(dest)); + if(dest) + { + AXIS2_FREE(env->allocator, dest); + dest = NULL; + } + dest = temp; + } + strcat(dest, string); + } + return dest; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_url_get_query( + axutil_url_t *url, + const axutil_env_t *env) +{ + return url->query; +} + +static int +is_safe_or_unreserve( + char c) +{ + char safe[] = { '-', '_', '.', '~' }; + char reserve[] = { ';', '/', '?', ':', '@', '&', '=', '#', '[', ']', '!', '$', '\'', '(', ')', + '*', '+', ',' }; + + /* These are reserved and safe charaters , got from RFC + * + * reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" + * safe = "$" | "-" | "_" | "." | "+" + */ + + int flag = 0; + int i = 0; + + int size = sizeof(safe) / sizeof(safe[0]); + for(i = 0; i < size; i++) + { + if(c == safe[i]) + { + flag = 1; + return flag; + } + } + + size = sizeof(reserve) / sizeof(reserve[0]); + for(i = 0; i < size; i++) + { + if(c == reserve[i]) + { + flag = 0; + return flag; + } + } + return flag; +} diff --git a/util/src/utils.c b/util/src/utils.c new file mode 100644 index 0000000..c69b948 --- /dev/null +++ b/util/src/utils.c @@ -0,0 +1,607 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +AXIS2_EXPORT axis2_char_t *axis2_request_url_prefix = "services"; + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_parse_rest_url_for_params( + const axutil_env_t *env, + const axis2_char_t *tmpl, + const axis2_char_t *url, + int *match_count, + axis2_char_t ****matches) +{ + axis2_char_t ***ret = NULL; + axis2_char_t *tmp1 = NULL; + axis2_char_t **tmp2 = NULL; + axis2_char_t ***tmp3 = NULL; + axis2_char_t *tmp4 = NULL; + axis2_char_t *resource = NULL; + axis2_char_t *query = NULL; + axis2_char_t *url_tmp = NULL; + axis2_char_t *url_resource = NULL; + axis2_char_t *url_query = NULL; + axis2_bool_t finished = AXIS2_FALSE; + axis2_status_t status = AXIS2_FAILURE; + int ret_count = 0; + int i = 0; + int j = 0; + axis2_bool_t in_tok = AXIS2_FALSE; + + tmp2 = AXIS2_MALLOC(env->allocator, 2 * (sizeof(axis2_char_t *))); + memset(tmp2, 0, 2 * sizeof(axis2_char_t *)); + + if(tmpl[0] == '/') + { + tmp1 = (axis2_char_t *)tmpl; + tmp1++; + resource = axutil_strdup(env, tmp1); + } + else + { + resource = axutil_strdup(env, tmpl); + } + i = (int)strlen(resource); + /* We are sure that the difference lies within the int range */ + if(resource[i] == '/') + { + resource[i] = '\0'; + } + tmp1 = strchr(resource, '?'); + if(tmp1) + { + axis2_char_t *tmp4 = NULL; + + tmp4 = tmp1; + tmp1++; + resource[tmp4 - resource] = '\0'; + if(*tmp1 && ((tmp1 - resource) < (int)strlen(resource) - 1)) + /* We are sure that the difference lies within the int range */ + { + query = tmp1; + /* + * Query String based matching is not implemented. This is + * reserved for future implementations. + */ + } + } + + /* Validation of Template */ + i = (int)strlen(resource); + /* We are sure that the difference lies within the int range */ + + if(!strchr(resource, '{') && !strchr(resource, '}')) + { + i = 0; + } + for(j = 0; j < i; j++) + { + if(!in_tok) + { + if(resource[j] == '}') + { + AXIS2_FREE(env->allocator, resource); + return AXIS2_FAILURE; + } + else if(resource[j] == '{') + { + if(j + 1 == i || resource[j + 1] == '}') + { + AXIS2_FREE(env->allocator, resource); + return AXIS2_FAILURE; + } + else if(resource[j + 1] == '{') + { + j++; + } + else + { + in_tok = AXIS2_TRUE; + } + } + } + else + { + if(resource[j] == '{') + { + AXIS2_FREE(env->allocator, resource); + return AXIS2_FAILURE; + } + else if(resource[j] == '}') + { + if(j + 1 < i && resource[j + 1] == '}') + { + j++; + } + else + { + in_tok = AXIS2_FALSE; + } + } + } + } + if(in_tok) + { + AXIS2_FREE(env->allocator, resource); + return AXIS2_FAILURE; + } + + /* Validity of template guaranteed if not returned */ + + if(url[0] == '/') + { + tmp1 = (axis2_char_t *)url; + tmp1++; + url_resource = axutil_strdup(env, tmp1); + } + else + { + url_resource = axutil_strdup(env, url); + } + i = (int)strlen(url_resource); + + /* We are sure that the difference lies within the int range */ + + if(url_resource[i] == '/') + { + url_resource[i] = '\0'; + } + i = 0; + url_tmp = url_resource; + tmp1 = strchr(url_resource, '?'); + if(tmp1) + { + axis2_char_t *tmp4 = NULL; + + tmp4 = tmp1; + tmp1++; + url_resource[tmp4 - url_resource] = '\0'; + if(*tmp1 && ((tmp1 - url_resource) < (int)strlen(url_resource) - 1)) + /* We are sure that the difference lies within the int range */ + { + url_query = tmp1; + } + } + tmp1 = resource; + + /* Simplest case match */ + + if(!strchr(resource, '{')) + { + if(strcmp(resource, url_resource) == 0) + { + finished = AXIS2_TRUE; + } + } + + while(!finished) + { + tmp4 = strchr(tmp1, '{'); + if(tmp4 && tmp4[1]) + { + if(tmp4[1] != '{') + { + axis2_char_t *tmp5 = NULL; + axis2_char_t *tmp6 = NULL; + axis2_char_t *tmp7 = NULL; + axis2_char_t *tmp8 = NULL; + axis2_char_t *tmp9 = NULL; + + /* Logic for finding out constant portion to match */ + i = (int)(tmp4 - tmp1); + tmp2[0] = AXIS2_MALLOC(env->allocator, (i + 1) * sizeof(char)); + strncpy(tmp2[0], tmp1, i); + tmp2[0][i] = '\0'; + if(url_tmp && *url_tmp) + { + tmp6 = url_tmp; + tmp5 = strstr(tmp6, tmp2[0]); + if(tmp5) + { + tmp5 += strlen(tmp2[0]); + tmp7 = tmp4; + tmp8 = tmp4; + tmp7++; + if(*tmp7) + { + axis2_bool_t finished_tmp = AXIS2_FALSE; + while(!finished_tmp) + { + tmp6 = strchr(tmp8, '}'); + if(tmp6 && *tmp6) + { + if(tmp6[1] != '}') + { + tmp8 = tmp6 + 1; + break; + } + } + else + { + finished_tmp = AXIS2_TRUE; + } + } + if(!finished_tmp && !strchr(tmp8, '{')) + { + tmp7 = tmp8 + strlen(tmp8); + } + else + { + while(!finished_tmp) + { + tmp6 = strchr(tmp8, '{'); + if(tmp6 && tmp6[1]) + { + if(tmp6[1] != '{') + { + tmp7 = tmp6; + break; + } + } + else + { + finished_tmp = AXIS2_TRUE; + } + } + } + if(!finished_tmp) + { + i = (int)(tmp7 - tmp8); + tmp9 = AXIS2_MALLOC(env->allocator, (i + 1) * sizeof(char)); + strncpy(tmp9, tmp8, i); + tmp9[i] = '\0'; + } + } + if(tmp9 && *tmp9) + { + tmp6 = strstr(tmp5, tmp9); + AXIS2_FREE(env->allocator, tmp9); + tmp9 = NULL; + } + else + { + tmp6 = strchr(tmp5, '/'); + } + /* Logic for saving the match */ + if(tmp6 && tmp6 != tmp5) + { + i = (int)(tmp6 - tmp5); + url_tmp = tmp6; + tmp2[1] = AXIS2_MALLOC(env->allocator, (i + 1) * sizeof(char)); + strncpy(tmp2[1], tmp5, i); + tmp2[1][i] = '\0'; + } + else + { + i = (int)strlen(tmp5); + /* We are sure that the difference lies within the int range */ + tmp2[1] = AXIS2_MALLOC(env->allocator, (i + 1) * sizeof(char)); + strncpy(tmp2[1], tmp5, i); + tmp2[1][i] = '\0'; + url_tmp = NULL; + } + } + } + else + { + break; + } + while(!finished) + { + tmp1 = tmp4 + 1; + tmp4 = strchr(tmp1, '}'); + if(tmp4 && *tmp4) + { + if(tmp4[1] != '}') + { + /* Logic for saving the key for the match */ + i = (int)(tmp4 - tmp1); + if(tmp2[0]) + { + AXIS2_FREE(env->allocator, tmp2[0]); + } + tmp2[0] = AXIS2_MALLOC(env->allocator, (i + 1) * sizeof(char)); + strncpy(tmp2[0], tmp1, i); + tmp2[0][i] = '\0'; + tmp3 = ret; + ret_count++; + ret = AXIS2_MALLOC(env->allocator, ret_count * 2 + * (sizeof(axis2_char_t *))); + memset(ret, 0, ret_count * 2 * sizeof(axis2_char_t *)); + for(i = 0; i < ret_count - 1; i++) + { + ret[i] = tmp3[i]; + } + ret[i] = tmp2; + tmp2 = AXIS2_MALLOC(env->allocator, 2 * (sizeof(axis2_char_t *))); + memset(tmp2, 0, 2 * sizeof(axis2_char_t *)); + tmp3 = NULL; + break; + } + else + { + tmp4++; + } + } + else + { + finished = AXIS2_TRUE; + } + } + } + else + { + tmp4++; + } + } + else + { + /* Result of mismatch at the simplest case */ + if(!strchr(resource, '{')) + { + finished = AXIS2_FALSE; + break; + } + finished = AXIS2_TRUE; + } + tmp1 = tmp4 + 1; + } + if(resource) + { + AXIS2_FREE(env->allocator, resource); + } + if(url_resource) + { + AXIS2_FREE(env->allocator, url_resource); + } + if(tmp2) + { + if(tmp2[0]) + { + AXIS2_FREE(env->allocator, tmp2[0]); + } + if(tmp2[1]) + { + AXIS2_FREE(env->allocator, tmp2[1]); + } + AXIS2_FREE(env->allocator, tmp2); + } + if(finished) + { + status = AXIS2_SUCCESS; + } + *match_count = ret_count; + *matches = ret; + return status; +} + +AXIS2_EXTERN axis2_char_t **AXIS2_CALL +axutil_parse_request_url_for_svc_and_op( + const axutil_env_t *env, + const axis2_char_t *request) +{ + axis2_char_t **ret = NULL; + axis2_char_t *service_str = NULL; + axis2_char_t *tmp = NULL; + int i = 0; + ret = AXIS2_MALLOC(env->allocator, 2 * (sizeof(axis2_char_t *))); + memset(ret, 0, 2 * sizeof(axis2_char_t *)); + tmp = (axis2_char_t *)request; + + tmp = strstr(tmp, axis2_request_url_prefix); + if(tmp) + { + service_str = tmp; + tmp += axutil_strlen(axis2_request_url_prefix); + /*break stop on first prefix as user may have prefix in service name */ + } + if(service_str) + { + service_str += axutil_strlen(axis2_request_url_prefix); + if('\0' != *service_str) + { + if(*service_str == '/') + service_str++; /*to remove the leading '/' */ + tmp = strchr(service_str, '/'); + if(tmp) + { + i = (int)(tmp - service_str); + ret[0] = AXIS2_MALLOC(env->allocator, i * sizeof(char) + 1); + strncpy(ret[0], service_str, i); + ret[0][i] = '\0'; + + /* Now search for the op */ + service_str = tmp; + if('\0' != *service_str) + { + service_str++; + tmp = strchr(service_str, '?'); + if(tmp) + { + i = (int)(tmp - service_str); + ret[1] = AXIS2_MALLOC(env->allocator, i * sizeof(char) + 1); + strncpy(ret[1], service_str, i); + ret[1][i] = '\0'; + } + else + { + ret[1] = axutil_strdup(env, service_str); + } + } + } + else + { + ret[0] = axutil_strdup(env, service_str); + } + } + } + return ret; +} + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_xml_quote_string( + const axutil_env_t *env, + const axis2_char_t *s, + axis2_bool_t quotes) +{ + const char *scan; + size_t len = 0; + size_t extra = 0; + char *qstr; + char *qscan; + char c; + + for(scan = s; (c = *scan) != '\0'; ++scan, ++len) + { + if(c == '<' || c == '>') + extra += 3; /* < or > */ + else if(c == '&') + extra += 4; /* & */ + else if(quotes && c == '"') + extra += 5; /* " */ + } + + /* nothing to do */ + if(extra == 0) + return NULL; + + qstr = AXIS2_MALLOC(env->allocator, len + extra + 1); + for(scan = s, qscan = qstr; (c = *scan) != '\0'; ++scan) + { + if(c == '<') + { + *qscan++ = '&'; + *qscan++ = 'l'; + *qscan++ = 't'; + *qscan++ = ';'; + } + else if(c == '>') + { + *qscan++ = '&'; + *qscan++ = 'g'; + *qscan++ = 't'; + *qscan++ = ';'; + } + else if(c == '&') + { + *qscan++ = '&'; + *qscan++ = 'a'; + *qscan++ = 'm'; + *qscan++ = 'p'; + *qscan++ = ';'; + } + else if(quotes && c == '"') + { + *qscan++ = '&'; + *qscan++ = 'q'; + *qscan++ = 'u'; + *qscan++ = 'o'; + *qscan++ = 't'; + *qscan++ = ';'; + } + else + { + *qscan++ = c; + } + } + + *qscan = '\0'; + return qstr; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axutil_url_decode( + const axutil_env_t *env, + axis2_char_t *dest, + axis2_char_t *src) +{ + AXIS2_PARAM_CHECK(env->error, dest, AXIS2_FAILURE); + AXIS2_PARAM_CHECK(env->error, src, AXIS2_FAILURE); + + for(; *src != '\0'; ++dest, ++src) + { + if(src[0] == '%' && isxdigit(src[1]) && isxdigit(src[2])) + { + *dest = (axis2_char_t)(axutil_hexit(src[1]) * 16 + axutil_hexit(src[2])); + /* We are sure that the conversion is safe */ + src += 2; + } + else + { + *dest = *src; + } + } + *dest = '\0'; + + return AXIS2_SUCCESS; +} + +AXIS2_EXTERN int AXIS2_CALL +axutil_hexit( + axis2_char_t c) +{ + if(c >= '0' && c <= '9') + { + return c - '0'; + } + if(c >= 'a' && c <= 'f') + { + return c - 'a' + 10; + } + if(c >= 'A' && c <= 'F') + { + return c - 'A' + 10; + } + return 0; +} + +AXIS2_EXTERN axis2_status_t AXIS2_CALL +axis2_char_2_byte( + const axutil_env_t *env, + axis2_char_t *char_buffer, + axis2_byte_t **byte_buffer, + int *byte_buffer_size) +{ + int length = 0; + int i = 0; + axis2_byte_t *bytes = NULL; + + length = (int)axutil_strlen(char_buffer); + bytes = (axis2_byte_t *)AXIS2_MALLOC(env->allocator, length * sizeof(axis2_byte_t)); + + if(!bytes) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory. Cannot create byte buffer"); + return AXIS2_FAILURE; + } + + for(i = 0; i < length; i++) + { + bytes[i] = (axis2_byte_t)char_buffer[i]; + } + *byte_buffer = bytes; + *byte_buffer_size = length; + return AXIS2_SUCCESS; +} + diff --git a/util/src/uuid_gen.c b/util/src/uuid_gen.c new file mode 100644 index 0000000..945b295 --- /dev/null +++ b/util/src/uuid_gen.c @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +AXIS2_EXTERN axis2_char_t *AXIS2_CALL +axutil_uuid_gen( + const axutil_env_t *env) +{ + + axis2_char_t *str = AXIS2_MALLOC(env->allocator, 40 * sizeof(char)); + axutil_platform_uuid_gen(str); + if(!str) + { + AXIS2_ERROR_SET(env->error, AXIS2_ERROR_UUID_GEN_FAILED, AXIS2_FAILURE); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "AXIS2_ERROR_UUID_GEN_FAILED"); + return NULL; + } + return str; +} diff --git a/util/src/version.c b/util/src/version.c new file mode 100644 index 0000000..9ab586d --- /dev/null +++ b/util/src/version.c @@ -0,0 +1,39 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +AXIS2_EXTERN void AXIS2_CALL +axis2_version( + axis2_version_t *pvsn) +{ + pvsn->major = AXIS2_MAJOR_VERSION; + pvsn->minor = AXIS2_MINOR_VERSION; + pvsn->patch = AXIS2_PATCH_VERSION; +#ifdef AXIS2_IS_DEV_VERSION + pvsn->is_dev = 1; +#else + pvsn->is_dev = 0; +#endif +} + +AXIS2_EXTERN const char *AXIS2_CALL +axis2_version_string( + void) +{ + return AXIS2_VERSION_STRING; +} diff --git a/util/test/Makefile.am b/util/test/Makefile.am new file mode 100644 index 0000000..cfbf7f6 --- /dev/null +++ b/util/test/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = util allocator date_time duration link_list properties rand stack string_util uri url utils + diff --git a/util/test/allocator/Makefile.am b/util/test/allocator/Makefile.am new file mode 100644 index 0000000..02dfa27 --- /dev/null +++ b/util/test/allocator/Makefile.am @@ -0,0 +1,13 @@ +TESTS = allocator_test +check_PROGRAMS = allocator_test +noinst_PROGRAMS = allocator_test +allocator_test_SOURCES = allocator_test.c ../util/create_env.c + +allocator_test_LDADD = \ + $(top_builddir)/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../axiom/include \ + -I ../../../include + + diff --git a/util/test/allocator/allocator_test.c b/util/test/allocator/allocator_test.c new file mode 100644 index 0000000..70e0bad --- /dev/null +++ b/util/test/allocator/allocator_test.c @@ -0,0 +1,147 @@ +#include +#include +#include +#include +#include "../util/create_env.h" + +int plain_binary_len; +unsigned char *plain_binary ; + +/** @brief read binary + * read the binary file + */ + +int read_binary() +{ + unsigned char buffer[1024]; + FILE *in = fopen("test","rb"); + FILE *out = fopen("test.doc","w"); + int fwrite_result = 0; + + if (!(in && out)) + { + fprintf (stderr, "unable to open streams\n"); + return -1; + } + + while((plain_binary_len = fread(buffer,1,sizeof(buffer),in)) > 0) + { + fwrite_result = fwrite(buffer,1,plain_binary_len,out); + } + + fclose(in); + fclose(out); + plain_binary = buffer; + printf("%s",buffer); + return plain_binary_len; +} + +/** @brief test base64 + * create duration from values and retrieve values + */ +axis2_status_t test_base64(axutil_env_t *env) +{ + axis2_status_t status = AXIS2_FAILURE; + axutil_base64_binary_t *base64_binary; + axutil_base64_binary_t *plain_base64_binary; + const char *encoded_binary; + char * get_binary = NULL; + int binary_len; + unsigned char * plain_binary = NULL; + read_binary(); + + base64_binary = axutil_base64_binary_create(env); + if(!base64_binary) + { + printf("The test axutil_base64_binary_create is failed\n"); + axutil_base64_binary_free(base64_binary,env); + return AXIS2_FAILURE; + } + else + printf("The test axutil_base64_binary_create is successfull\n"); + + plain_base64_binary = axutil_base64_binary_create_with_plain_binary(env, + plain_binary, + plain_binary_len); + if(!plain_base64_binary) + { + printf("The test axutil_base64_binary_create_with_plain_binary is failed\n"); + axutil_base64_binary_free(plain_base64_binary,env); + } + else + printf("The test axutil_base64_binary_create_with_plain_binary is successfull\n"); + + encoded_binary = axutil_base64_binary_get_encoded_binary(base64_binary,env); + if(!encoded_binary) + { + printf("The test axutil_base64_binary_get_encoded_binary is failed\n"); + axutil_base64_binary_free(base64_binary,env); + } + else + printf("The test axutil_base64_binary_get_encoded_binary is successfull\n"); + + status = axutil_base64_binary_set_plain_binary(base64_binary,env,plain_binary, + plain_binary_len); + if (status == AXIS2_SUCCESS) + printf("The test axutil_base64_binary_set_plain_binary is successful\n"); + else + printf("The test axutil_base64_binary_set_plain_binary failed\n") ; + + plain_binary = axutil_base64_binary_get_plain_binary(base64_binary,env,&plain_binary_len); + if(!plain_binary) + { + printf("The test axutil_base64_binary_get_plain_binary is failed\n"); + axutil_base64_binary_free(base64_binary,env); + } + else + printf("The test axutil_base64_binary_get_plain_binary is successfull\n" ); + + status = axutil_base64_binary_set_encoded_binary(base64_binary,env,encoded_binary); + if (status == AXIS2_SUCCESS) + printf("The test axutil_base64_binary_set_encoded_binary is successful\n"); + else + printf("The test axutil_base64_binary_set_encoded_binary failed\n"); + + get_binary = axutil_base64_binary_get_encoded_binary(base64_binary,env); + if(!get_binary) + { + printf("The test axutil_base64_binary_get_encoded_binary is failed\n"); + axutil_base64_binary_free(base64_binary,env); + } + else + printf("The test axutil_base64_binary_get_encoded_binary is successfull\n"); + + binary_len = axutil_base64_binary_get_encoded_binary_len(base64_binary,env); + if(!binary_len) + { + printf("The test axutil_base64_binary_get_encoded_binary_len is failed\n"); + axutil_base64_binary_free(base64_binary,env); + } + else + printf("The test axutil_base64_binary_get_encoded_binary_len is successfull\n"); + + return AXIS2_SUCCESS; +} + +int main() +{ + int status = AXIS2_SUCCESS; + axutil_env_t *env = NULL; + env = create_environment(); + status = test_base64(env); + + if(status == AXIS2_FAILURE) + { + printf("build failed"); + } + axutil_env_free(env); + return 0; +} + + + + + + + + diff --git a/util/test/allocator/build.sh b/util/test/allocator/build.sh new file mode 100644 index 0000000..e5dabf2 --- /dev/null +++ b/util/test/allocator/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gcc allocator_test.c ../util/create_env.c -g -I$AXIS2C_HOME/include/axis2-1.2 -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -o allocator_test diff --git a/util/test/allocator/test b/util/test/allocator/test new file mode 100755 index 0000000..919cd65 Binary files /dev/null and b/util/test/allocator/test differ diff --git a/util/test/allocator/test.doc b/util/test/allocator/test.doc new file mode 100644 index 0000000..919cd65 Binary files /dev/null and b/util/test/allocator/test.doc differ diff --git a/util/test/date_time/Makefile.am b/util/test/date_time/Makefile.am new file mode 100644 index 0000000..08d90d7 --- /dev/null +++ b/util/test/date_time/Makefile.am @@ -0,0 +1,13 @@ +TESTS = date_time_test +noinst_PROGRAMS = date_time_test +check_PROGRAMS = date_time_test +date_time_test_SOURCES = date_time_test.c ../util/create_env.c + +date_time_test_LDADD = \ + $(top_builddir)/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../axiom/include \ + -I ../../../include + + diff --git a/util/test/date_time/build.sh b/util/test/date_time/build.sh new file mode 100644 index 0000000..5236acd --- /dev/null +++ b/util/test/date_time/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gcc date_time_test.c ../util/create_env.c -g -I$AXIS2C_HOME/include/axis2-1.3.0 -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -o date_time_test -ldl -Wl,--rpath -Wl,$AXIS2C_HOME/lib diff --git a/util/test/date_time/date_time_test.c b/util/test/date_time/date_time_test.c new file mode 100644 index 0000000..553fada --- /dev/null +++ b/util/test/date_time/date_time_test.c @@ -0,0 +1,138 @@ +#include +#include +#include +#include +#include +#include "../util/create_env.h" + +/** @brief test_rand + * * deserialize and serialize the time + * */ + +axis2_status_t test_date_time(axutil_env_t *env) +{ + axutil_date_time_t *date_time = NULL; + axutil_date_time_t *ref = NULL; + axutil_date_time_t *date_time_offset = NULL; + axis2_char_t *time_str = "22:45:12"; + axis2_char_t *date_str = "2000-12-12"; + axis2_char_t *date_time_str = "2000-11-11T12:30:24"; + axis2_status_t status = AXIS2_FAILURE; + axutil_date_time_comp_result_t compare_res = AXIS2_DATE_TIME_COMP_RES_FAILURE; + axis2_char_t *t_str = NULL, *d_str = NULL, *dt_str = NULL; + int year , month , date , hour , min , sec , msec; + + date_time_offset = axutil_date_time_create_with_offset(env, 100); + if(!date_time_offset) + { + printf("axutil_date_time_t creation failed.\n"); + return AXIS2_FAILURE; + } + date_time = axutil_date_time_create(env); + if(!date_time) + { + printf("axutil_date_time_t creation failed.\n"); + return AXIS2_FAILURE; + } + status = axutil_date_time_deserialize_time(date_time, env, time_str); + if(status) + printf("axutil_date_time_t time string deserialization success.\n"); + status = axutil_date_time_deserialize_date(date_time, env, date_str); + if(status) + printf("axutil_date_time_t date string deserialization success.\n"); + status = axutil_date_time_deserialize_date_time(date_time, env, date_time_str); + if(status) + printf("axutil_date_time_t date time string deserialization success.\n"); + + ref = axutil_date_time_create(env); + if(!ref) + { + printf("axutil_date_time_t creation failed.\n"); + return AXIS2_FAILURE; + } + compare_res = axutil_date_time_compare(date_time, env, ref); + if(compare_res == AXIS2_DATE_TIME_COMP_RES_FAILURE) + { + printf("axutil_date_time comparison failed.\n"); + } + + status = axutil_date_time_deserialize_date_time(ref, env, date_time_str); + if(status) + printf("axutil_date_time_t date time string deserialization success.\n"); + compare_res = axutil_date_time_compare(date_time, env, ref); + if(compare_res == AXIS2_DATE_TIME_COMP_RES_EQUAL) + { + printf("axutil_date_time_t comparison success."); + } + status = axutil_date_time_set_date_time(date_time, env, 2008, 1, 8, 12, 18, 57, 799); + if(status) + { + printf("axutil_date_time_t set date time success.\n"); + } + + t_str = axutil_date_time_serialize_time(date_time, env); + if(!t_str) + { + printf("axutil_date_time_t time serialization failed.\n"); + } + else + { + printf("axutil_date_time_t Time: %s\n", t_str); + } + d_str = axutil_date_time_serialize_date(date_time, env); + if(!d_str) + { + printf("axutil_date_time_t date serialization failed.\n"); + } + else + { + printf("axutil_date_time_t Date: %s\n", d_str); + } + dt_str = axutil_date_time_serialize_date_time(date_time, env); + if(!dt_str) + { + printf("axutil_date_time_t date time serialization failed.\n"); + } + else + { + printf("axutil_date_time_t Date Time: %s\n", dt_str); + } + year = axutil_date_time_get_year(date_time,env); + month=axutil_date_time_get_month(date_time,env); + date = axutil_date_time_get_date(date_time,env); + hour = axutil_date_time_get_hour(date_time,env); + min = axutil_date_time_get_minute(date_time,env); + sec = axutil_date_time_get_second(date_time,env); + msec = axutil_date_time_get_msec(date_time,env); + printf("axutil_date_time_t year: %d \n",year); + printf("axutil_date_time_t month: %d \n",month); + printf("axutil_date_time_t date: %d \n",date); + printf("axutil_date_time_t hour: %d \n",hour); + printf("axutil_date_time_t min: %d \n",min); + printf("axutil_date_time_t sec: %d \n",sec); + printf("axutil_date_time_t msec: %d \n",msec); + + axutil_date_time_free(date_time,env); + axutil_date_time_free(ref, env); + axutil_date_time_free(date_time_offset, env); + return AXIS2_SUCCESS; +} + +int main() +{ + axutil_env_t *env = NULL; + int status = AXIS2_SUCCESS; + env = create_environment(); + status = test_date_time(env); + if(status != AXIS2_SUCCESS) + { + printf("axutil_date_time_t test failed"); + } + else + { + printf("axutil_date_time_t test successful"); + } + axutil_env_free(env); + return 0; +} + diff --git a/util/test/duration/Makefile.am b/util/test/duration/Makefile.am new file mode 100644 index 0000000..cab6dcd --- /dev/null +++ b/util/test/duration/Makefile.am @@ -0,0 +1,13 @@ +TESTS = duration_test +check_PROGRAMS = duration_test +noinst_PROGRAMS = duration_test +duration_test_SOURCES = duration_test.c ../util/create_env.c + +duration_test_LDADD = \ + $(top_builddir)/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../axiom/include \ + -I ../../../include + + diff --git a/util/test/duration/build.sh b/util/test/duration/build.sh new file mode 100644 index 0000000..ef2771e --- /dev/null +++ b/util/test/duration/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gcc duration_test.c ../util/create_env.c -g -I$AXIS2C_HOME/include/axis2-1.3.0 -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -o duration_test -ldl -Wl,--rpath -Wl,$AXIS2C_HOME/lib diff --git a/util/test/duration/duration_test.c b/util/test/duration/duration_test.c new file mode 100644 index 0000000..c3fafe3 --- /dev/null +++ b/util/test/duration/duration_test.c @@ -0,0 +1,172 @@ +#include +#include "../util/create_env.h" + +/** @brief test duration + * create duration from values and retrieve values + */ +axis2_status_t test_duration(axutil_env_t *env) +{ + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t * duration_str = "P3Y12M23DT11H45M45.000000S"; + axis2_char_t * duration_str1 = "-P3Y12M23DT11H45M45.000000S"; + int year,month,day,hour,minute; + double second; + axutil_duration_t * duration; + axutil_duration_t * duration_one; + axutil_duration_t * duration_two; + axutil_duration_t * duration_three; + axutil_duration_t * duration_four; + axis2_bool_t is_negative = AXIS2_FALSE; + axis2_char_t * neg_str = ""; + + duration = axutil_duration_create_from_values(env,AXIS2_TRUE,3,12,23,11,45,45.00); + duration_one = axutil_duration_create_from_values(env,AXIS2_FALSE,7,11,2,23,11,50.00); + duration_two = axutil_duration_create_from_string(env,duration_str); + duration_three = axutil_duration_create(env); + duration_four = axutil_duration_create(env); + + year = axutil_duration_get_years(duration,env); + month = axutil_duration_get_months(duration,env); + day = axutil_duration_get_days(duration,env); + hour = axutil_duration_get_hours(duration,env); + minute = axutil_duration_get_mins(duration,env); + second = axutil_duration_get_seconds(duration,env); + is_negative = axutil_duration_get_is_negative(duration,env); + + status = axutil_duration_deserialize_duration(duration_three,env,duration_str); + if (status == AXIS2_SUCCESS) + printf("The test 1 is successful\n"); + else + printf("The test 1 failed\n"); + status = axutil_duration_deserialize_duration(duration_four,env,duration_str1); + if (status == AXIS2_SUCCESS) + printf("The test 2 is successful\n"); + else + printf("The test 2 failed\n"); + printf("Duration for test 3: %s\n", axutil_duration_serialize_duration(duration,env)); + printf("The test 3 is completed\n"); + status = axutil_duration_set_duration(duration,env,AXIS2_TRUE,3,12,23,11,45,56.00); + if (status == AXIS2_SUCCESS) + { + printf("The test 4 is successful\n"); + } + else + { + printf("The test 4 failed\n"); + } + axutil_duration_free(duration,env); + axutil_duration_free(duration_one,env); + axutil_duration_free(duration_two,env); + axutil_duration_free(duration_three,env); + axutil_duration_free(duration_four,env); + if (is_negative) + neg_str = "(-) "; + printf("Duration for test 5: %s%d-%d-%d %d:%d:%.0f\n",neg_str,year,month,day,hour,minute,second); + printf("The test 5 is completed\n"); + return AXIS2_SUCCESS; +} + +/** @brief set values + * set values for the duration and get the values + */ +axis2_status_t set_values(axutil_env_t *env) +{ + axutil_duration_t * duration; + axutil_duration_t * duration_one; + int get_year,get_month,get_day,get_hour,get_minute; + axis2_bool_t is_negative; + double get_second; + + duration = axutil_duration_create(env); + duration_one = axutil_duration_create_from_values(env,AXIS2_TRUE,5,9,29,59,21,49); + + if (axutil_duration_set_is_negative(duration,env,AXIS2_TRUE) != AXIS2_SUCCESS) + { + axutil_duration_free(duration,env); + axutil_duration_free(duration_one,env); + return AXIS2_FAILURE; + } + is_negative = axutil_duration_get_is_negative(duration,env); + if (!is_negative) + { + axutil_duration_free(duration,env); + axutil_duration_free(duration_one,env); + return AXIS2_FAILURE; + } + + if (axutil_duration_set_years(duration,env,5) != AXIS2_SUCCESS) + { + axutil_duration_free(duration,env); + axutil_duration_free(duration_one,env); + return AXIS2_FAILURE; + } + get_year = axutil_duration_get_years(duration,env); + if (axutil_duration_set_months(duration,env,9) != AXIS2_SUCCESS) + { + axutil_duration_free(duration,env); + axutil_duration_free(duration_one,env); + return AXIS2_FAILURE; + } + get_month = axutil_duration_get_months(duration,env); + if (axutil_duration_set_days(duration,env,29) != AXIS2_SUCCESS) + { + axutil_duration_free(duration,env); + axutil_duration_free(duration_one,env); + return AXIS2_FAILURE; + } + get_day = axutil_duration_get_days(duration,env); + if (axutil_duration_set_hours(duration,env,59) != AXIS2_SUCCESS) + { + axutil_duration_free(duration,env); + axutil_duration_free(duration_one,env); + return AXIS2_FAILURE; + } + get_hour = axutil_duration_get_hours(duration,env); + if (axutil_duration_set_mins(duration,env,21) != AXIS2_SUCCESS) + { + axutil_duration_free(duration,env); + axutil_duration_free(duration_one,env); + return AXIS2_FAILURE; + } + get_minute = axutil_duration_get_mins(duration,env); + if (axutil_duration_set_seconds(duration,env,49) != AXIS2_SUCCESS) + { + axutil_duration_free(duration,env); + axutil_duration_free(duration_one,env); + return AXIS2_FAILURE; + } + get_second = axutil_duration_get_seconds(duration,env); + printf("Duration for test 6: %d-%d-%d %d:%d:%.0f\n",get_year,get_month,get_day,get_hour,get_minute,get_second); + printf("The test 6 is completed\n"); + if (!axutil_duration_compare(duration_one,duration,env)) + { + printf("The test 7 failed\n"); + axutil_duration_free(duration,env); + axutil_duration_free(duration_one,env); + return AXIS2_FAILURE; + } + printf("The test 7 is successful\n"); + axutil_duration_free(duration,env); + axutil_duration_free(duration_one,env); + return AXIS2_SUCCESS; +} +int main() +{ + int status = AXIS2_SUCCESS; + + axutil_env_t *env = NULL; + env = create_environment(); + + status = test_duration(env); + if(status == AXIS2_FAILURE) + { + printf("The test test_duration failed\n"); + } + status = set_values(env); + if(status == AXIS2_FAILURE) + { + printf("The test set_values failed\n"); + } + axutil_env_free(env); + return 0; +} diff --git a/util/test/link_list/Makefile.am b/util/test/link_list/Makefile.am new file mode 100644 index 0000000..409d710 --- /dev/null +++ b/util/test/link_list/Makefile.am @@ -0,0 +1,13 @@ +TESTS = link_list_test +check_PROGRAMS = link_list_test +noinst_PROGRAMS = link_list_test +link_list_test_SOURCES = link_list_test.c ../util/create_env.c + +link_list_test_LDADD = \ + $(top_builddir)/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../axiom/include \ + -I ../../../include + + diff --git a/util/test/link_list/build.sh b/util/test/link_list/build.sh new file mode 100644 index 0000000..154b0d3 --- /dev/null +++ b/util/test/link_list/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gcc link_list_test.c ../util/create_env.c -g -I$AXIS2C_HOME/include/axis2-1.3.0 -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -o link_list_test diff --git a/util/test/link_list/link_list_test.c b/util/test/link_list/link_list_test.c new file mode 100644 index 0000000..c32f360 --- /dev/null +++ b/util/test/link_list/link_list_test.c @@ -0,0 +1,69 @@ +#include +#include "../util/create_env.h" + +axutil_env_t *env = NULL; +axutil_linked_list_t * linked_list = NULL; +entry_t *entry = NULL; + +axis2_status_t test_link_list(axutil_env_t *env,char * first_item,char * second_item,char * third_item,char *last_item,char *array) +{ + linked_list = axutil_linked_list_create(env); + if(linked_list) + { + printf("link list is created \n"); + } + if(!linked_list) + { + printf("link list is not created "); + } + axutil_linked_list_add_first(linked_list,env,(void *)first_item); + axutil_linked_list_contains(linked_list,env,(void *)second_item); + axutil_linked_list_add(linked_list,env,(void *)third_item); + axutil_linked_list_add_last(linked_list,env,(void *)last_item); + int index_of_item = axutil_linked_list_index_of(linked_list,env,third_item); + printf("The index of item is %d\n",index_of_item); + int index_of_last_item = axutil_linked_list_last_index_of(linked_list,env,last_item); + entry_t * entry = axutil_linked_list_get_entry(linked_list,env,0); + printf("The index of last item is %d\n",index_of_last_item); + void *get_item = axutil_linked_list_get(linked_list,env,1); + printf("The get item is %s\n",(char *)get_item); + axutil_linked_list_set(linked_list,env,1,(void *)array); + axutil_linked_list_to_array(linked_list,env); + axutil_linked_list_add_at_index(linked_list,env,1,(void *)second_item); + axutil_linked_list_remove_at_index(linked_list,env,1); + axutil_linked_list_check_bounds_inclusive(linked_list,env,1); + axutil_linked_list_remove_entry(linked_list,env,entry); + axutil_linked_list_remove_first(linked_list,env); + axutil_linked_list_remove_last(linked_list,env); + axutil_linked_list_remove(linked_list,env,(void *)third_item); + axutil_linked_list_free(linked_list,env); + if(index_of_item && index_of_last_item && get_item) + { + printf("The test is SUCCESS\n"); + } + if(!index_of_item || !index_of_last_item || !get_item) + { + printf("The test is FAIL\n"); + } + return AXIS2_SUCCESS; +} + +int main() +{ + int status = AXIS2_SUCCESS; + env = create_environment(); + status = test_link_list(env,"first entry","secnd entry","third entry","last entry" ,"test"); + if(status == AXIS2_FAILURE) + { + printf(" build failed"); + } + axutil_env_free(env); + return 0; +} + + + + + + + diff --git a/util/test/properties/Makefile.am b/util/test/properties/Makefile.am new file mode 100644 index 0000000..69bb83b --- /dev/null +++ b/util/test/properties/Makefile.am @@ -0,0 +1,13 @@ +TESTS = property_test +check_PROGRAMS = property_test +noinst_PROGRAMS = property_test +property_test_SOURCES = property_test.c ../util/create_env.c + +property_test_LDADD = \ + $(top_builddir)/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../axiom/include \ + -I ../../../include + + diff --git a/util/test/properties/build.sh b/util/test/properties/build.sh new file mode 100644 index 0000000..9948fc6 --- /dev/null +++ b/util/test/properties/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +gcc property_test.c ../util/create_env.c -g -I$AXIS2C_HOME/include/axis2-1.2 -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -o property_test + + + + diff --git a/util/test/properties/input.doc b/util/test/properties/input.doc new file mode 100644 index 0000000..67fd61d --- /dev/null +++ b/util/test/properties/input.doc @@ -0,0 +1 @@ +This is the content of the input file diff --git a/util/test/properties/output.doc b/util/test/properties/output.doc new file mode 100644 index 0000000..e69de29 diff --git a/util/test/properties/property_test.c b/util/test/properties/property_test.c new file mode 100644 index 0000000..e7e3a8f --- /dev/null +++ b/util/test/properties/property_test.c @@ -0,0 +1,117 @@ +#include +#include +#include "../util/create_env.h" +#include + +axis2_char_t * +axutil_properties_read( + FILE *input, + const axutil_env_t *env); + +/** @brief test properties + * read file and give the output + */ +axis2_status_t test_properties(axutil_env_t *env) +{ + axutil_hash_t* all_properties = NULL; + axis2_status_t status = AXIS2_FAILURE; + axis2_char_t* cur = NULL; + axis2_char_t* input_filename = "test.doc"; + axutil_properties_t * properties = NULL; + axis2_status_t store_properties ; + axis2_status_t load_properties ; + axis2_char_t * key = "key"; + axis2_char_t * value = "value"; + FILE *input = fopen("input.doc","rb"); + FILE *output = fopen("output.doc","rb"); + if (!(input && output)) + { + return AXIS2_FAILURE; + } + + properties = axutil_properties_create(env); + if(!properties) + { + printf("Properties are not created\n"); + axutil_property_free(properties,env); + return AXIS2_FAILURE; + } + else + printf("The the axutil_properties_create is successfull\n"); + + cur = axutil_properties_read(input,env); + if(!cur) + { + printf("Can't read properties\n"); + axutil_property_free(properties,env); + return AXIS2_FAILURE; + } + else + printf("The test axutil_properties_read is successfull\n"); + + status = axutil_properties_set_property(properties,env, key, value); + if (status == AXIS2_SUCCESS) + printf("The test axutil_properties_set_property is successful\n"); + else + printf("The test axutil_properties_set_property failed\n") ; + + + store_properties = axutil_properties_store(properties,env,output); + if(!store_properties) + { + printf("Can not store the properties\n"); + axutil_property_free(properties,env); + return AXIS2_FAILURE; + } + else + printf("The test axutil_properties_store is successfull\n"); + + load_properties = axutil_properties_load(properties,env,input_filename); + if(!load_properties) + { + printf("Properties can't be loaded\n"); + axutil_property_free(properties,env); + return AXIS2_FAILURE; + } + else + printf("The test axutil_properties_load is successfull\n"); + + all_properties = axutil_properties_get_all(properties,env); + if(!all_properties) + { + printf("Can't call properties_get_all\n"); + axutil_property_free(properties,env); + return AXIS2_FAILURE; + } + else + printf("The test axutil_properties_get_all is successfull\n"); + + axutil_property_free(properties,env); + + return AXIS2_SUCCESS; +} + +int main() +{ + axutil_env_t *env = NULL; + int status = AXIS2_SUCCESS; + env = create_environment(); + status = test_properties(env); + + if(status == AXIS2_FAILURE) + { + printf(" The test is failed\n"); + } + + axutil_env_free(env); + return 0; +} + + + + + + + + + diff --git a/util/test/properties/test.doc b/util/test/properties/test.doc new file mode 100644 index 0000000..d687785 --- /dev/null +++ b/util/test/properties/test.doc @@ -0,0 +1 @@ +this use for test perposes diff --git a/util/test/rand/Makefile.am b/util/test/rand/Makefile.am new file mode 100644 index 0000000..6c75e30 --- /dev/null +++ b/util/test/rand/Makefile.am @@ -0,0 +1,13 @@ +TESTS = rand_test +check_PROGRAMS = rand_test +noinst_PROGRAMS = rand_test +rand_test_SOURCES = rand_test.c ../util/create_env.c + +rand_test_LDADD = \ + $(top_builddir)/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../axiom/include \ + -I ../../../include + + diff --git a/util/test/rand/build.sh b/util/test/rand/build.sh new file mode 100644 index 0000000..ee98324 --- /dev/null +++ b/util/test/rand/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gcc rand_test.c ../util/create_env.c -g -Werror -I$AXIS2C_HOME/include/axis2-1.3.0 -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -o rand_test -ldl -Wl,--rpath -Wl,$AXIS2C_HOME/lib diff --git a/util/test/rand/rand_test.c b/util/test/rand/rand_test.c new file mode 100644 index 0000000..90c566b --- /dev/null +++ b/util/test/rand/rand_test.c @@ -0,0 +1,64 @@ +#include "../util/create_env.h" + +/** @brief test_rand + * create random variable and get it's value + */ + +axis2_status_t test_rand(axutil_env_t *env) +{ + int rand_number,rand_value,start = 2,end = 8,rand_range; + unsigned seed = 10; + + rand_number = axutil_rand(&seed); + if(!rand_number) + { + printf("Test axutil_rand failed\n"); + } + else + { + printf("Test axutil_rand is successfull\n"); + printf("The random value is %d\n",rand_number); + } + + rand_range = axutil_rand_with_range(&seed,start,end); + if(rand_range == -1) + { + printf("Test axutil_rand_with_range failed\n"); + } + else + { + printf("Test axutil_rand_with_range is successfull\n"); + printf("The random seed value is %d\n",rand_range); + } + + rand_value = axutil_rand_get_seed_value_based_on_time(env); + if(!rand_value) + { + printf("The test axutil_rand_get_seed_value_based_on_time failed\n"); + } + else + { + printf("Test axutil_rand_get_seed_value_based_on_time is successfull\n"); + printf("The random range is %d\n",rand_value); + } + + return AXIS2_SUCCESS; +} + +int main() +{ + int status = AXIS2_SUCCESS; + axutil_env_t *env = NULL; + + env = create_environment(); + status = test_rand(env); + + if(status == AXIS2_FAILURE) + { + printf("Test failed\n"); + } + axutil_env_free(env); + return 0; +} + + diff --git a/util/test/stack/Makefile.am b/util/test/stack/Makefile.am new file mode 100644 index 0000000..10308c8 --- /dev/null +++ b/util/test/stack/Makefile.am @@ -0,0 +1,13 @@ +TESTS = stack_test +check_PROGRAMS = stack_test +noinst_PROGRAMS = stack_test +stack_test_SOURCES = stack_test.c ../util/create_env.c + +stack_test_LDADD = \ + $(top_builddir)/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../axiom/include \ + -I ../../../include + + diff --git a/util/test/stack/build.sh b/util/test/stack/build.sh new file mode 100644 index 0000000..8ca7aff --- /dev/null +++ b/util/test/stack/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gcc stack_test.c ../util/create_env.c -g -I$AXIS2C_HOME/include/axis2-1.3.0 -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -o stack_test -ldl -Wl,--rpath -Wl,$AXIS2C_HOME/lib diff --git a/util/test/stack/stack_test.c b/util/test/stack/stack_test.c new file mode 100644 index 0000000..833adc2 --- /dev/null +++ b/util/test/stack/stack_test.c @@ -0,0 +1,71 @@ +#include "../util/create_env.h" +#include + +axis2_status_t test_stack(axutil_env_t * env, char * value) +{ + axutil_stack_t * stack = NULL; + axis2_status_t status = AXIS2_FAILURE; + stack = axutil_stack_create(env); + void * get_value = NULL; + if (!stack) + { + printf("Creation of stack failed"); + return AXIS2_FAILURE; + } + status = axutil_stack_push(stack,env,(void *)value); + if (status != AXIS2_SUCCESS) + { + printf("Adding value to stack failed"); + axutil_stack_free(stack,env); + return AXIS2_FAILURE; + } + if (axutil_stack_size(stack,env) != 1) + { + printf("Incorrect size of stack is reported"); + axutil_stack_free(stack,env); + return AXIS2_FAILURE; + } + if (value != (char *)axutil_stack_get(stack,env)) + { + printf("Stack returns incorrect object"); + axutil_stack_free(stack,env); + return AXIS2_FAILURE; + } + get_value = axutil_stack_get_at(stack,env,0); + printf("The value of stack is %s",(char *)get_value); + if (value != (char *)axutil_stack_pop(stack,env)) + { + printf("Stack returns incorrect object"); + axutil_stack_free(stack,env); + return AXIS2_FAILURE; + } + if (axutil_stack_size(stack,env) != 0) + { + printf("Incorrect size of stack is reported"); + axutil_stack_free(stack,env); + return AXIS2_FAILURE; + } + if(stack) + { + axutil_stack_free(stack,env); + printf("The test is SUCCESSFUL\n"); + return AXIS2_SUCCESS; + } + + return AXIS2_FAILURE; +} +int main() +{ + char value[10] = "test\n"; + int status = AXIS2_SUCCESS; + axutil_env_t *env = NULL; + env = create_environment(); + status = test_stack(env,value); + if(status != AXIS2_SUCCESS) + { + printf("The test failed"); + } + axutil_env_free(env); + return 0; +} + diff --git a/util/test/string_util/Makefile.am b/util/test/string_util/Makefile.am new file mode 100644 index 0000000..09ce78f --- /dev/null +++ b/util/test/string_util/Makefile.am @@ -0,0 +1,13 @@ +TESTS = string_util_test +noinst_PROGRAMS = string_util_test +check_PROGRAMS = string_util_test +string_util_test_SOURCES = string_util_test.c ../util/create_env.c + +string_util_test_LDADD = \ + $(top_builddir)/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../axiom/include \ + -I ../../../include + + diff --git a/util/test/string_util/build.sh b/util/test/string_util/build.sh new file mode 100644 index 0000000..504ca27 --- /dev/null +++ b/util/test/string_util/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gcc string_util_test.c ../util/create_env.c -g -I$AXIS2C_HOME/include/axis2-1.2 -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -o string_util_test diff --git a/util/test/string_util/string_util_test.c b/util/test/string_util/string_util_test.c new file mode 100644 index 0000000..d9e0cb2 --- /dev/null +++ b/util/test/string_util/string_util_test.c @@ -0,0 +1,66 @@ +#include +#include "../util/create_env.h" +#include +#include + +/** @brief test string + * tokenize a string + */ + +axis2_status_t test_string(axutil_env_t *env) +{ + int delim = ' '; + void *token = NULL; + void *last_token_string = NULL; + void *first_token_string = NULL; + axutil_array_list_t * first_token, * last_token; + axis2_char_t * in = "this is a test string"; + + axutil_array_list_t * tokenize = axutil_tokenize(env, in, delim); + if(tokenize) + { + token = axutil_array_list_get(tokenize,env,4); + printf("The test axutil_tokenize is successfull\n"); + printf("The tokenize string is %s\n",(char *)token); + } + else + return AXIS2_FAILURE; + + first_token = axutil_first_token(env,in,delim); + if(first_token) + { + first_token_string = axutil_array_list_get(first_token,env,1); + printf("The test axutil_first_token is successfull\n"); + printf("First token string is %s\n",(char *)first_token_string); + } + else + return AXIS2_FAILURE; + + last_token = axutil_last_token(env,in,delim); + if(last_token) + { + last_token_string = axutil_array_list_get(last_token,env,1); + printf("The test axutil_last_token is successfull\n"); + printf("Last token string is %s\n",(char *)last_token_string); + } + else + return AXIS2_FAILURE; + + return AXIS2_SUCCESS; +} +int main() +{ + axutil_env_t *env = NULL; + int status = AXIS2_SUCCESS; + env = create_environment(); + status = test_string(env); + if(status == AXIS2_FAILURE) + { + printf("build failed"); + } + axutil_env_free(env); + return 0; +} + + + diff --git a/util/test/uri/Makefile.am b/util/test/uri/Makefile.am new file mode 100644 index 0000000..98475e8 --- /dev/null +++ b/util/test/uri/Makefile.am @@ -0,0 +1,13 @@ +TESTS = uri_test +check_PROGRAMS = uri_test +noinst_PROGRAMS = uri_test +uri_test_SOURCES = uri_test.c ../util/create_env.c + +uri_test_LDADD = \ + $(top_builddir)/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../axiom/include \ + -I ../../../include + + diff --git a/util/test/uri/build.sh b/util/test/uri/build.sh new file mode 100644 index 0000000..4239290 --- /dev/null +++ b/util/test/uri/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gcc uri_test.c ../util/create_env.c -g -Werror -I$AXIS2C_HOME/include/axis2-1.3.0 -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -o uri_test -ldl -Wl,--rpath -Wl,$AXIS2C_HOME/lib diff --git a/util/test/uri/uri_test.c b/util/test/uri/uri_test.c new file mode 100644 index 0000000..95ff453 --- /dev/null +++ b/util/test/uri/uri_test.c @@ -0,0 +1,140 @@ +#include +#include "../util/create_env.h" +/** @brief test uri + * * create URI and get the values of it's components + * */ +axis2_status_t test_uri(axutil_env_t *env) +{ + axis2_char_t * uri_str = "http://user:pass@example.com:80/foo?bar#item5"; + axis2_char_t * host = "home.netscape.com:443"; + axis2_char_t * uri_str_base = "http://user:pass@example.com:80/foo?bar"; + axis2_char_t * scheme_str = "http"; + axutil_uri_t * base = NULL; + axutil_uri_t * hostinfo = NULL; + axutil_uri_t * uri = NULL; + axutil_uri_t * clone = NULL; + axutil_uri_t * rel = NULL; + axis2_char_t * protocol = NULL; + axis2_char_t * server = NULL; + axis2_char_t * path = NULL; + axis2_port_t scheme_port; + axis2_port_t port; + + hostinfo = axutil_uri_parse_hostinfo(env,host); + if(hostinfo) + { + printf("The host information of uri is %s\n",axutil_uri_to_string(hostinfo,env,0)); + } + else + { + printf("Test hostinfo faild\n"); + } + + scheme_port = axutil_uri_port_of_scheme(scheme_str); + if(scheme_port) + { + printf("port of scheme is %u\n", scheme_port); + } + else + { + printf("Test port failed\n"); + } + + uri = axutil_uri_parse_string(env,uri_str); + if(uri) + { + printf("The uri is %s\n",axutil_uri_to_string(uri,env,0)); + axutil_uri_free(uri, env); + } + else + { + return AXIS2_FAILURE; + } + + base = axutil_uri_parse_string(env,uri_str_base); + if(base) + { + printf("The base of uri is %s\n",axutil_uri_to_string(base,env,0)); + } + else + { + printf("Test base failed\n"); + } + + clone = axutil_uri_clone(uri,env); + if(clone) + { + printf("The clone of uri is %s\n",axutil_uri_to_string(clone,env,0)); + axutil_uri_free(clone,env); + } + else + { + printf("Test clone failed"); + } + + rel = axutil_uri_resolve_relative(env,base,clone); + if(rel) + { + printf("The resolved relative uri is %s\n",axutil_uri_to_string(rel,env,0)); + } + else + { + printf("Test resolve relative failed"); + } + + protocol = axutil_uri_get_protocol(uri,env); + if (!protocol) + { + axutil_uri_free(uri,env); + return AXIS2_FAILURE; + } + + server = axutil_uri_get_server(uri,env); + if (!server) + { + axutil_uri_free(uri,env); + return AXIS2_FAILURE; + } + + port = axutil_uri_get_port(uri,env); + if (!port) + { + axutil_uri_free(uri,env); + return AXIS2_FAILURE; + } + + path = axutil_uri_get_path(uri,env); + if (!path) + { + axutil_uri_free(uri,env); + return AXIS2_FAILURE; + } + + printf("The protocol is %s\n",protocol); + printf("The server is %s \n",server); + printf("The port is %u \n",port); + printf("The path is %s\n",path); + axutil_uri_free(uri,env); + return AXIS2_SUCCESS; +} + +int main() +{ + int status = AXIS2_SUCCESS; + axutil_env_t *env = NULL; + + env = create_environment(); + status = test_uri(env); + + if(status == AXIS2_FAILURE) + { + printf("The Test failed"); + } + axutil_env_free(env); + + return 0; +} + + + + diff --git a/util/test/url/Makefile.am b/util/test/url/Makefile.am new file mode 100644 index 0000000..ff7b8fb --- /dev/null +++ b/util/test/url/Makefile.am @@ -0,0 +1,13 @@ +TESTS = url_test +noinst_PROGRAMS = url_test +check_PROGRAMS = url_test +url_test_SOURCES = url_test.c ../util/create_env.c + +url_test_LDADD = \ + $(top_builddir)/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../axiom/include \ + -I ../../../include + + diff --git a/util/test/url/build.sh b/util/test/url/build.sh new file mode 100644 index 0000000..455a8a9 --- /dev/null +++ b/util/test/url/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gcc url_test.c ../util/create_env.c -g -Werror -I$AXIS2C_HOME/include/axis2-1.3.0 -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -o url_test -ldl -Wl,--rpath -Wl,$AXIS2C_HOME/lib diff --git a/util/test/url/url_test.c b/util/test/url/url_test.c new file mode 100644 index 0000000..65f93da --- /dev/null +++ b/util/test/url/url_test.c @@ -0,0 +1,130 @@ +#include +#include "../util/create_env.h" + +/** @brief test url + * create URL and get the values of it's components + */ + +axis2_status_t test_url(axutil_env_t *env) +{ + axutil_url_t * url; + axis2_char_t *url_str = "https://issues.apache.org/jira/secure/ManageAttachments.jspa?id=12386356"; + axis2_char_t *set_server = "www.yahoo.com"; + axis2_char_t *set_protocol = "file"; + axis2_char_t *set_path = "/bar/"; + axis2_port_t set_port = 80; + axis2_char_t *get_protocol; + axis2_char_t *get_server; + axis2_port_t get_port; + axis2_char_t *get_path; + axis2_status_t status; + + url = axutil_url_parse_string(env,url_str); + if(url) + { + printf("The url is created \n"); + } + else + { + return AXIS2_FAILURE; + } + + status = axutil_url_set_protocol(url,env,set_protocol); + + if (status == AXIS2_SUCCESS) + printf("The test 1 is successful\n"); + else + printf("The test 1 failed\n") ; + + status = axutil_url_set_server(url,env,set_server); + + if (status == AXIS2_SUCCESS) + printf("The test 2 is successful\n"); + else + printf("The test 2 failed\n") ; + + status = axutil_url_set_port(url,env,set_port); + + if (status == AXIS2_SUCCESS) + printf("The test 3 is successful\n"); + else + printf("The test 3 failed\n") ; + + status = axutil_url_set_path(url,env,set_path); + + if (status == AXIS2_SUCCESS) + printf("The test 4 is successful\n"); + else + printf("The test 4 failed\n") ; + + get_protocol = axutil_url_get_protocol(url,env); + + if (!get_protocol) + { + axutil_url_free(url,env); + return AXIS2_FAILURE; + } + else + { + printf("The protocol is %s\n",get_protocol); + } + + get_server = axutil_url_get_server(url,env); + + if (!get_server) + { + axutil_url_free(url,env); + return AXIS2_FAILURE; + } + else + { + printf("The server is %s\n",get_server); + } + + get_port = axutil_url_get_port(url,env); + + if (!get_port) + { + axutil_url_free(url,env); + return AXIS2_FAILURE; + } + else + { + printf("The port is %d\n",get_port); + } + + get_path = axutil_url_get_path(url,env); + + if (!get_path) + { + axutil_url_free(url,env); + return AXIS2_FAILURE; + } + else + { + printf("The path is %s\n",get_path); + } + + axutil_url_free(url,env); + return AXIS2_SUCCESS; +} + +int main() +{ + int status = AXIS2_SUCCESS; + axutil_env_t *env = NULL; + + env = create_environment(); + status = test_url(env); + + if(status == AXIS2_FAILURE) + { + printf("Test failed"); + } + axutil_env_free(env); + + return 0; +} + + + diff --git a/util/test/util/Makefile.am b/util/test/util/Makefile.am new file mode 100644 index 0000000..4d3a701 --- /dev/null +++ b/util/test/util/Makefile.am @@ -0,0 +1,20 @@ +TESTS = test_thread test_util +noinst_PROGRAMS = test_util test_thread +noinst_HEADERS = test_log.h \ + test_thread.h \ + create_env.h\ + test_md5.h +check_PROGRAMS = test_util test_thread +SUBDIRS = +test_util_SOURCES = test_util.c test_log.c test_string.c test_md5.c +test_thread_SOURCES = test_thread.c + +test_util_LDADD = \ + $(top_builddir)/src/libaxutil.la \ + -lpthread + +test_thread_LDADD = \ + $(top_builddir)/src/libaxutil.la \ + -lpthread + +INCLUDES = -I$(top_builddir)/include diff --git a/util/test/util/create_env.c b/util/test/util/create_env.c new file mode 100644 index 0000000..5a26182 --- /dev/null +++ b/util/test/util/create_env.c @@ -0,0 +1,17 @@ +#include "create_env.h" + +axutil_env_t * create_environment() +{ + axutil_allocator_t *allocator = NULL; + axutil_log_t *log = NULL; + axutil_error_t *error = NULL; + axutil_env_t *env = NULL; + allocator = axutil_allocator_init(NULL); + log = axutil_log_create(allocator, NULL, NULL); + + error = axutil_error_create(allocator); + env = axutil_env_create_with_error_log(allocator, error, log); + return env; +} + + diff --git a/util/test/util/create_env.h b/util/test/util/create_env.h new file mode 100644 index 0000000..e3ea7b8 --- /dev/null +++ b/util/test/util/create_env.h @@ -0,0 +1,10 @@ +#include +#include +#include +#include + +axutil_env_t * create_environment(); + + + + diff --git a/util/test/util/test_log.c b/util/test/util/test_log.c new file mode 100644 index 0000000..4539b4e --- /dev/null +++ b/util/test/util/test_log.c @@ -0,0 +1,182 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +const axutil_env_t * +create_env_with_error_log( + ) +{ + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + if (!allocator) + { + printf("allocator is NULL\n"); + return NULL; + } + axutil_error_t *error = axutil_error_create(allocator); + if (!error) + { + printf("cannot create error\n"); + return NULL; + } + + axutil_log_t *log22 = axutil_log_create(allocator, NULL, NULL); + if (!log22) + { + printf("cannot create log\n"); + return NULL; + } + /* + * allow all types of logs + */ + log22->level = AXIS2_LOG_LEVEL_DEBUG; + /* log22->enabled = 0; */ + const axutil_env_t *env = + axutil_env_create_with_error_log(allocator, error, log22); + if (!env) + { + printf("cannot create env with error and log\n"); + return NULL; + } + return env; +} + +void +test_axutil_log_write( + const axutil_env_t * env) +{ + char msg[32]; + printf("\n####start of test_axutil_log_write\n\n"); + strcpy(msg, "abcd test123"); + printf("\n####end of test_axutil_log_write\n\n"); +} + +void +test_axutil_log_debug( + const axutil_env_t * env) +{ + printf("\n####start of test_axutil_log_degug\n\n"); + env->log->level = AXIS2_LOG_LEVEL_DEBUG; + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "log_debug test %s %d", "foo", 1); + printf("\n####end of test_axutil_log_debug\n\n"); +} + +void +test_axutil_log_debug_off( + const axutil_env_t * env) +{ + printf("\n####start of test_axutil_log_degug_off\n\n"); + env->log->level = AXIS2_LOG_LEVEL_ERROR; /*log only ERROR's and CRITICAL's */ + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, + "this should not be logged log_debug test %s %d", "foo", 1); + printf("\n####end of test_axutil_log_debug_off\n\n"); +} + +void +test_axutil_log_info( + const axutil_env_t * env) +{ + printf("\n####start of test_axutil_log_info\n\n"); + env->log->level = AXIS2_LOG_LEVEL_DEBUG; + AXIS2_LOG_INFO(env->log, "log_info test %s %d", "foo", 1); + printf("\n####end of test_axutil_log_info\n\n"); +} + +void +test_axutil_log_info_off( + const axutil_env_t * env) +{ + printf("\n####start of test_axutil_log_info_off\n\n"); + env->log->level = AXIS2_LOG_LEVEL_ERROR; /*log only ERROR's and CRITICAL's */ + AXIS2_LOG_INFO(env->log, "this should not be logged log_info test %s %d", + "foo", 1); + printf("\n####end of test_axutil_log_info_off\n\n"); +} + +void +test_axutil_log_warning( + const axutil_env_t * env) +{ + printf("\n####start of test_axutil_log_warning\n\n"); + env->log->level = AXIS2_LOG_LEVEL_DEBUG; + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "log_warning test %s %d", "foo", + 1); + printf("\n####end of test_axutil_log_warning\n\n"); +} + +void +test_axutil_log_warning_off( + const axutil_env_t * env) +{ + printf("\n####start of test_axutil_log_warning_off\n\n"); + env->log->level = AXIS2_LOG_LEVEL_ERROR; /*log only ERROR's and CRITICAL's */ + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, + "this should not be logged log_warning test %s %d", "foo", + 1); + printf("\n####end of test_axutil_log_warning_off\n\n"); +} + +/*no need to sent log level, should always log*/ +void +test_axutil_log_error( + const axutil_env_t * env) +{ + printf("\n####start of test_axutil_log_error\n\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "log_error test %s %d", "foo", 1); + printf("\n####end of test_axutil_log_error\n\n"); +} + +/*no need to sent log level, should always log*/ +void +test_axutil_log_critical( + const axutil_env_t * env) +{ + printf("\n####start of test_axutil_log_critical\n\n"); + AXIS2_LOG_CRITICAL(env->log, AXIS2_LOG_SI, "log_critical test %s %d", "foo", + 1); + printf("\n####end of test_axutil_log_critical\n\n"); +} + +void +run_test_log( + ) +{ + printf("\n####start of run_test_log test suite\n\n"); + const axutil_env_t *env = create_env_with_error_log(); + if (!env) + return; + test_axutil_log_write(env); + test_axutil_log_debug(env); + test_axutil_log_debug_off(env); + + test_axutil_log_info(env); + test_axutil_log_info_off(env); + + test_axutil_log_warning(env); + test_axutil_log_warning_off(env); + + test_axutil_log_error(env); + + test_axutil_log_critical(env); + printf("\n####end of run_test_log test suite \n\n"); +} diff --git a/util/test/util/test_log.h b/util/test/util/test_log.h new file mode 100644 index 0000000..d88669e --- /dev/null +++ b/util/test/util/test_log.h @@ -0,0 +1,47 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef _TEST_LOG_H_ +#define _TEST_LOG_H_ + +#include + +void run_test_log( +); +const axutil_env_t *create_env_with_error_log( +); +void test_axutil_log_write( + const axutil_env_t * env); +void test_axutil_log_debug( + const axutil_env_t * env); +void test_axutil_log_debug_off( + const axutil_env_t * env); +void test_axutil_log_info( + const axutil_env_t * env); +void test_axutil_log_info_off( + const axutil_env_t * env); +void test_axutil_log_warning( + const axutil_env_t * env); +void test_axutil_log_warning_off( + const axutil_env_t * env); +void test_axutil_log_error( + const axutil_env_t * env); +void test_axutil_log_critical( + const axutil_env_t * env); + +#endif /* _TEST_LOG_H_ */ diff --git a/util/test/util/test_md5.c b/util/test/util/test_md5.c new file mode 100644 index 0000000..7c360ce --- /dev/null +++ b/util/test/util/test_md5.c @@ -0,0 +1,55 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +/* Digests a string and prints the result. + */ +static void MDString (char * string, const axutil_env_t * env) +{ + axutil_md5_ctx_t * context; + unsigned char digest[16]; + unsigned int i; + unsigned int len = axutil_strlen(string); + + context = axutil_md5_ctx_create(env); + axutil_md5_update(context, env, string, len); + axutil_md5_final(context, env, digest); + axutil_md5_ctx_free(context, env); + + printf ("MD%d (\"%s\") = ", 5, string); + for (i = 0; i < 16; i++) + printf ("%02x", digest[i]); + printf ("\n"); +} + +void test_md5(const axutil_env_t *env) +{ + printf ("\nMD5 test suite:\n"); + printf ("test confirmation: Rivest, R., \"The MD5 Message-Digest Algorithm\", RFC 1321, April 1992.\n"); + MDString ("", env); + MDString ("a", env); + MDString ("abc", env); + MDString ("message digest", env); + MDString ("abcdefghijklmnopqrstuvwxyz", env); + MDString ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", env); + MDString ("12345678901234567890123456789012345678901234567890123456789012345678901234567890", env); +} diff --git a/util/test/util/test_md5.h b/util/test/util/test_md5.h new file mode 100644 index 0000000..215a096 --- /dev/null +++ b/util/test/util/test_md5.h @@ -0,0 +1,27 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef _TEST_MD5_H_ +#define _TEST_MD5_H_ + +#include + +void test_md5( + const axutil_env_t * env); + +#endif /* _TEST_MD5_H_ */ diff --git a/util/test/util/test_string.c b/util/test/util/test_string.c new file mode 100644 index 0000000..d4d7bbc --- /dev/null +++ b/util/test/util/test_string.c @@ -0,0 +1,84 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +void +test_strltrim( + const axutil_env_t * env) +{ + axis2_char_t *s = axutil_strdup(env, " abcd efgh "); + axis2_char_t *trimmed = NULL; + trimmed = axutil_strltrim(env, s, " \t\r\n"); + if (0 == axutil_strcmp(trimmed, "abcd efgh ")) + printf("axutil_strltrim successful\n"); + else + printf("axutil_strltrim failed [%s]\n", trimmed); + if (trimmed) + AXIS2_FREE(env->allocator, trimmed); + if (s) + AXIS2_FREE(env->allocator, s); +} + +void +test_strrtrim( + const axutil_env_t * env) +{ + axis2_char_t *s = axutil_strdup(env, "abcd efgh "); + axis2_char_t *trimmed = NULL; + trimmed = axutil_strrtrim(env, s, " \t\r\n"); + if (0 == axutil_strcmp(trimmed, " abcd efgh")) + printf("axutil_strrtrim successful\n"); + else + printf("axutil_strrtrim failed [%s]\n", trimmed); + if (trimmed) + AXIS2_FREE(env->allocator, trimmed); + if (s) + AXIS2_FREE(env->allocator, s); +} + +void +test_strtrim( + const axutil_env_t * env) +{ + axis2_char_t *s = axutil_strdup(env, " abcd efgh "); + axis2_char_t *trimmed = NULL; + trimmed = axutil_strtrim(env, s, " \t\r\n"); + if (0 == axutil_strcmp(trimmed, "abcd efgh")) + printf("axutil_strtrim successful\n"); + else + printf("axutil_strtrim failed [%s]\n", trimmed); + if (trimmed) + AXIS2_FREE(env->allocator, trimmed); + if (s) + AXIS2_FREE(env->allocator, s); +} + +void +run_test_string( + axutil_env_t * env) +{ + if (!env) + return; + test_strltrim(env); + test_strrtrim(env); + test_strtrim(env); +} diff --git a/util/test/util/test_thread.c b/util/test/util/test_thread.c new file mode 100644 index 0000000..e10b5b7 --- /dev/null +++ b/util/test/util/test_thread.c @@ -0,0 +1,345 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include "test_thread.h" +#include + +const axutil_env_t *env = NULL; +static axutil_thread_mutex_t *thread_lock = NULL; +static axutil_thread_once_t *control = NULL; +static int x = 0; +static int value = 0; + +static axutil_thread_t *t1 = NULL; +static axutil_thread_t *t2 = NULL; + +/*for detach tests*/ +static axutil_thread_t *t3 = NULL; +static axutil_thread_t *t4 = NULL; + +void +init_func( + void) +{ + value++; +} + +void +thread_init( + const axutil_env_t * env) +{ + axutil_allocator_t *allocator = NULL; + + allocator = env->allocator; + + control = axutil_thread_once_init(allocator); + + if (control) + printf("success - thread_init - axutil_thread_once_init \n"); + else + printf("failure - thread_init - axutil_thread_once_init \n"); + + thread_lock = + axutil_thread_mutex_create(allocator, AXIS2_THREAD_MUTEX_DEFAULT); + + if (thread_lock) + printf("success - thread_init - axutil_thread_mutex_create \n"); + else + printf("failure - thread_init - axutil_thread_mutex_create \n"); +} + +void *AXIS2_CALL +test_function( + axutil_thread_t * td, + void *param) +{ + int i; + i = *((int *) param); + printf("thread data = %d \n", i); + + axutil_thread_once(control, init_func); + + axutil_thread_mutex_lock(thread_lock); + printf("x = %d \n", ++x); + axutil_thread_mutex_unlock(thread_lock); + + /*axutil_thread_exit(td, env->allocator); */ + + return (void *) 1; +} + +void +test_axutil_thread_create( + const axutil_env_t * env) +{ + axis2_status_t rv = AXIS2_FAILURE; + axutil_allocator_t *allocator = NULL; + int *i = NULL, + *j = NULL; + + allocator = env->allocator; + i = AXIS2_MALLOC(allocator, sizeof(int)); + *i = 5; + t1 = axutil_thread_create(allocator, NULL, test_function, (void *) i); + + if (t1) + printf("success - test_axutil_thread_create - axutil_thread_create \n"); + else + printf("failure - test_axutil_thread_create - axutil_thread_create \n"); + + j = AXIS2_MALLOC(allocator, sizeof(int)); + *j = 25; + + t2 = axutil_thread_create(allocator, NULL, test_function, (void *) j); + + if (t2) + printf("success - test_axutil_thread_create - axutil_thread_create \n"); + else + printf("failure - test_axutil_thread_create - axutil_thread_create \n"); + + rv = axutil_thread_join(t1); + + if (AXIS2_SUCCESS == rv) + printf("success - test_axutil_thread_create - axutil_thread_join \n"); + else + printf + ("failure - thread_init - test_axutil_thread_create - axutil_thread_join \n"); + + rv = axutil_thread_join(t2); + + if (AXIS2_SUCCESS == rv) + printf("success - test_axutil_thread_create - axutil_thread_join \n"); + else + printf + ("failure - thread_init - test_axutil_thread_create - axutil_thread_join \n"); + +} + +void *AXIS2_CALL +test_function2( + axutil_thread_t * td, + void *param) +{ + printf("thread \n"); + /*axutil_thread_exit(td, env->allocator); */ + + return (void *) 1; +} + +void +test_axutil_thread_detach( + const axutil_env_t * env) +{ + axutil_threadattr_t *attr = NULL; + axutil_allocator_t *allocator = NULL; + axis2_status_t rv = AXIS2_FAILURE; + + allocator = env->allocator; + attr = axutil_threadattr_create(allocator); + if (!attr) + { + printf("failure - test_axutil_thread_detach\n"); + return; + } + rv = axutil_threadattr_detach_set(attr, 1); + + if (AXIS2_SUCCESS != rv) + { + printf("failure - test_axutil_thread_detach\n"); + return; + } + t3 = axutil_thread_create(allocator, attr, test_function2, NULL); + + if (!t3) + { + printf("failure - test_axutil_thread_detach\n"); + return; + } + + /* + * thread is already detached - should return AXIS2_FAILURE + */ + rv = axutil_thread_detach(t3); + + if (AXIS2_FAILURE != rv) + { + printf("failure - test_axutil_thread_detach\n"); + return; + } + + /* + * thread is already detached - should return AXIS2_FAILURE + * cannot join detached threads + */ + /*rv = axutil_thread_join(t3); */ + if (AXIS2_FAILURE != rv) + { + printf("failure - test_axutil_thread_detach\n"); + return; + } + printf("success - test_axutil_thread_detach\n"); +} + +void +test_axutil_thread_detach2( + const axutil_env_t * env) +{ + axutil_threadattr_t *attr = NULL; + axutil_allocator_t *allocator = NULL; + axis2_status_t rv = AXIS2_FAILURE; + + allocator = env->allocator; + attr = axutil_threadattr_create(allocator); + if (!attr) + { + printf("failure - test_axutil_thread_detach2\n"); + return; + } + + t4 = axutil_thread_create(allocator, attr, test_function2, NULL); + + if (!t4) + { + printf("failure - test_axutil_thread_detach2\n"); + return; + } + + /* + * thread is not detached yet - should return AXIS2_SUCCESS + */ + rv = axutil_thread_detach(t4); + + if (AXIS2_SUCCESS != rv) + { + printf("failure - test_axutil_thread_detach\n"); + return; + } + + /* + * thread is already detached - should return AXIS2_FAILURE + * cannot join detached threads + */ + /*rv = axutil_thread_join(t4); */ + if (AXIS2_FAILURE != rv) + { + printf("failure - test_axutil_thread_detach2\n"); + return; + } + printf("success - test_axutil_thread_detach2\n"); +} + +void +check_locks( + ) +{ + if (2 == x) + printf("success - check_locks \n"); + else + printf("failure - check_locks \n"); + +} + +void +check_thread_once( + ) +{ + if (1 == value) + printf("success - check_thread_once \n"); + else + printf("failure - check_thread_once \n"); +} + +void +run_test_thread( + const axutil_env_t * env) +{ + thread_init(env); + test_axutil_thread_create(env); + check_locks(); + check_thread_once(); + test_axutil_thread_detach(env); + test_axutil_thread_detach2(env); + +#if defined (WIN32) + Sleep(1000); /*to give time for detached threads to execute */ +#else + sleep(2); +#endif + + axutil_thread_mutex_destroy(thread_lock); +} + +const axutil_env_t * +create_env_with_error_log( + ) +{ + axutil_error_t *error = NULL; + axutil_log_t *log22 = NULL; + const axutil_env_t *env = NULL; + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + if (!allocator) + { + printf("allocator is NULL\n"); + return NULL; + } + error = axutil_error_create(allocator); + if (!error) + { + printf("cannot create error\n"); + return NULL; + } + + log22 = axutil_log_create(allocator, NULL, "test123.log"); + if (!log22) + { + printf("cannot create log\n"); + return NULL; + } + /* + * allow all types of logs + */ + log22->level = AXIS2_LOG_LEVEL_DEBUG; + /* log22->enabled = 0; */ + env = axutil_env_create_with_error_log(allocator, error, log22); + if (!env) + { + printf("cannot create env with error and log\n"); + return NULL; + } + return env; +} + +int +main( + void) +{ + env = create_env_with_error_log(); + + if (!env) + return -1; + run_test_thread(env); + + return 0; +} diff --git a/util/test/util/test_thread.h b/util/test/util/test_thread.h new file mode 100644 index 0000000..b006b3f --- /dev/null +++ b/util/test/util/test_thread.h @@ -0,0 +1,50 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef TEST_LOG_H +#define TEST_LOG_H + +#include +#include + +void init_func( + void); +void thread_init( + const axutil_env_t * env); +void *AXIS2_CALL +test_function( + axutil_thread_t * td, + void *param); +void test_axutil_thread_create( + const axutil_env_t * env); +void *AXIS2_CALL +test_function2( + axutil_thread_t * td, + void *param); +void test_axutil_thread_detach( + const axutil_env_t * env); +void test_axutil_thread_detach2( + const axutil_env_t * env); +void check_locks( +); + +/*call this method from main*/ +void run_test_thread( + const axutil_env_t * env); + +#endif diff --git a/util/test/util/test_util.c b/util/test/util/test_util.c new file mode 100644 index 0000000..dd37710 --- /dev/null +++ b/util/test/util/test_util.c @@ -0,0 +1,304 @@ + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "axutil_log.h" +#include "test_thread.h" +#include + +typedef struct a +{ + axis2_char_t *value; +} +a; + +const axutil_env_t * +test_init( + ) +{ + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + axutil_error_t *error = axutil_error_create(allocator); + const axutil_env_t *env = axutil_env_create_with_error(allocator, error); + return env; +} + +int +test_hash_get( + const axutil_env_t * env) +{ + axutil_hash_t *ht; + a *a1, + *a2, + *a3, + *a4; + + axutil_hash_index_t *i = 0; + void *v = NULL; + + char *key1 = "key1"; + char *key2 = "key2"; + char *key3 = "key3"; + char *key4 = "key4"; + int cnt = 0; + axis2_char_t ***rettt = NULL; + axis2_status_t stat = AXIS2_FAILURE; + stat = axutil_parse_rest_url_for_params(env, "ech{a}tring", "/echoString?text=Hello%20World%21", &cnt, &rettt); + stat = axutil_parse_rest_url_for_params(env, "{a}ny/mor/sum", "echoStringmany/mor/sum", &cnt, &rettt); +/* rettt = axutil_parse_rest_url_for_params(env, "echoString/{a}re/{b}?", "/echoString/more/sum/?"); + rettt = axutil_parse_rest_url_for_params(env, "/ech{c}tring{a}more/{b}/", "/echoStringma/nymore/sum?"); + rettt = axutil_parse_rest_url_for_params(env, "echoString/{a}/more/{b}?{c}", "echoString/many/more/sum/"); + rettt = axutil_parse_rest_url_for_params(env, "echoString/{a}/more/{b}/?", "echoString/many/more/sum/?test=");*/ + + a1 = (a *) AXIS2_MALLOC(env->allocator, sizeof(a)); + a2 = (a *) AXIS2_MALLOC(env->allocator, sizeof(a)); + a3 = (a *) AXIS2_MALLOC(env->allocator, sizeof(a)); + a4 = (a *) AXIS2_MALLOC(env->allocator, sizeof(a)); + + a1->value = axutil_strdup(env, "value1"); + a2->value = axutil_strdup(env, "value2"); + a3->value = axutil_strdup(env, "value3"); + a4->value = axutil_strdup(env, "value4"); + + ht = axutil_hash_make(env); + + axutil_hash_set(ht, key1, AXIS2_HASH_KEY_STRING, a1); + axutil_hash_set(ht, key2, AXIS2_HASH_KEY_STRING, a2); + axutil_hash_set(ht, key3, AXIS2_HASH_KEY_STRING, a3); + axutil_hash_set(ht, key4, AXIS2_HASH_KEY_STRING, a4); + + axutil_hash_set(ht, key2, AXIS2_HASH_KEY_STRING, NULL); + axutil_hash_set(ht, key2, AXIS2_HASH_KEY_STRING, a2); + for (i = axutil_hash_first(ht, env); i; i = axutil_hash_next(env, i)) + { + axutil_hash_this(i, NULL, NULL, &v); + printf("\n %s \n", ((a *) v)->value); + } + + printf("\n demo get %s ", + ((a *) axutil_hash_get(ht, key1, AXIS2_HASH_KEY_STRING))->value); + + printf("\n demo get %s ", + ((a *) axutil_hash_get(ht, key2, AXIS2_HASH_KEY_STRING))->value); + + printf("\n demo get %s ", + ((a *) axutil_hash_get(ht, key3, AXIS2_HASH_KEY_STRING))->value); + + printf("\n demo get %s \n", + ((a *) axutil_hash_get(ht, key4, AXIS2_HASH_KEY_STRING))->value); + + axutil_hash_free(ht, env); + AXIS2_FREE(env->allocator, a1->value); + AXIS2_FREE(env->allocator, a2->value); + AXIS2_FREE(env->allocator, a3->value); + AXIS2_FREE(env->allocator, a4->value); + AXIS2_FREE(env->allocator, a1); + AXIS2_FREE(env->allocator, a2); + AXIS2_FREE(env->allocator, a3); + AXIS2_FREE(env->allocator, a4); + return 0; +} + +void +test_axutil_dir_handler_list_service_or_module_dirs( + ) +{ + int i, + isize; + axutil_file_t *file = NULL; + axis2_char_t *filename = NULL; + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + axutil_error_t *error = axutil_error_create(allocator); + axutil_log_t *log = axutil_log_create(allocator, NULL, NULL); + const axutil_env_t *env = + axutil_env_create_with_error_log(allocator, error, log); + + axis2_char_t *pathname = axutil_strdup(env, "/tmp/test/"); + + axutil_array_list_t *arr_folders = + axutil_dir_handler_list_service_or_module_dirs(env, pathname); + if (arr_folders == NULL) + { + printf("List of folders is NULL\n"); + return; + } + + isize = axutil_array_list_size(arr_folders, env); + printf("Folder array size = %d \n", isize); + + for (i = 0; i < isize; ++i) + { + file = (axutil_file_t *) axutil_array_list_get(arr_folders, env, i); + filename = axutil_file_get_name(file, env); + printf("filename = %s \n", filename); + } + printf + ("----end of test_axutil_dir_handler_list_service_or_module_dirs----\n"); + +} + +/** + * This test is intended to test whether given two files are equal or not. + * Spaces and new lines are ignored in comparing + */ +int +test_file_diff( + const axutil_env_t * env) +{ + /* axis2_char_t *expected_file_name = axutil_strdup("expected", env); + axis2_char_t *actual_file_name = axutil_strdup("actual", env); */ + return 0; +} + +void +test_array_list( + const axutil_env_t * env) +{ + axutil_array_list_t *al; + a *entry = NULL; + int size; + + al = axutil_array_list_create(env, 1); + printf("list size %d\n", axutil_array_list_size(al, env)); + + entry = (a *) AXIS2_MALLOC(env->allocator, sizeof(a)); + entry->value = axutil_strdup(env, "value1"); + axutil_array_list_add(al, env, (void *) entry); + + entry = (a *) AXIS2_MALLOC(env->allocator, sizeof(a)); + entry->value = axutil_strdup(env, "value2"); + axutil_array_list_add(al, env, (void *) entry); + + entry = (a *) AXIS2_MALLOC(env->allocator, sizeof(a)); + entry->value = axutil_strdup(env, "value3"); + axutil_array_list_add(al, env, (void *) entry); + + entry = (a *) AXIS2_MALLOC(env->allocator, sizeof(a)); + entry->value = axutil_strdup(env, "value4"); + axutil_array_list_add(al, env, (void *) entry); + + entry = (a *) AXIS2_MALLOC(env->allocator, sizeof(a)); + entry->value = axutil_strdup(env, "value5"); + axutil_array_list_add(al, env, (void *) entry); + + entry = (a *) AXIS2_MALLOC(env->allocator, sizeof(a)); + entry->value = axutil_strdup(env, "value6"); + axutil_array_list_add(al, env, (void *) entry); + + entry = (a *) AXIS2_MALLOC(env->allocator, sizeof(a)); + entry->value = axutil_strdup(env, "value7"); + axutil_array_list_set(al, env, 3, (void *) entry); + axutil_array_list_remove(al, env, 2); + + entry = (a *) axutil_array_list_get(al, env, 0); + printf("entry->value:%s\n", entry->value); + + entry = (a *) axutil_array_list_get(al, env, 2); + printf("entry->value:%s\n", entry->value); + size = axutil_array_list_size(al, env); + printf("list size %d\n", axutil_array_list_size(al, env)); + +} + +void +test_uuid_gen( + const axutil_env_t * env) +{ + char *uuid = NULL; + printf("starting uuid_gen test...\n"); + uuid = axutil_uuid_gen(env); + printf("Generated UUID 1:%s\n", uuid); + AXIS2_FREE(env->allocator, uuid); + uuid = axutil_uuid_gen(env); + printf("Generated UUID 2:%s\n", uuid); + AXIS2_FREE(env->allocator, uuid); + printf("finished uuid_gen test...\n"); +} + +void +test_log_write( + ) +{ + char msg[10]; + printf("start of test_log_write\n\n"); + axutil_allocator_t *allocator = axutil_allocator_init(NULL); + if (!allocator) + { + printf("allocator is NULL\n"); + return; + } + axutil_error_t *error = axutil_error_create(allocator); + if (!error) + { + printf("cannot create error\n"); + return; + } + axutil_log_t *log22 = axutil_log_create(allocator, NULL, NULL); + if (!log22) + { + printf("cannot create log\n"); + return; + } + log22->level = AXIS2_LOG_LEVEL_DEBUG; + + const axutil_env_t *env = + axutil_env_create_with_error_log(allocator, error, log22); + if (!env) + { + printf("cannot create env with error and log\n"); + return; + } + strcpy(msg, "abcd test123"); + + AXIS2_LOG_CRITICAL(env->log, AXIS2_LOG_SI, "log1 %s", "test1"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "log2 %d", 2); + AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "log3 %s", "test3"); + AXIS2_LOG_INFO(env->log, AXIS2_LOG_SI, "log4 %s %s", "info1", "info2"); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "log5 %s %d", "test", 5); + printf("end of test_log_write \n\n"); + +} + +int +main( + void) +{ + const axutil_env_t *env = test_init(); + test_hash_get(env); + test_file_diff(env); + test_array_list(env); + test_uuid_gen(env); + test_md5(env); + run_test_log(); + run_test_string(env); + test_axutil_dir_handler_list_service_or_module_dirs(); + axutil_allocator_t *allocator = env->allocator; + +/* axutil_env_free(env);*/ + axutil_allocator_free(allocator); + return 0; +} diff --git a/util/test/utils/Makefile.am b/util/test/utils/Makefile.am new file mode 100644 index 0000000..0fbcc8d --- /dev/null +++ b/util/test/utils/Makefile.am @@ -0,0 +1,13 @@ +TESTS = utils_test +check_PROGRAMS = utils_test +noinst_PROGRAMS = utils_test +utils_test_SOURCES = utils_test.c ../util/create_env.c + +utils_test_LDADD = \ + $(top_builddir)/src/libaxutil.la + +INCLUDES = -I$(top_builddir)/include \ + -I ../../../axiom/include \ + -I ../../../include + + diff --git a/util/test/utils/build.sh b/util/test/utils/build.sh new file mode 100644 index 0000000..09e7ef6 --- /dev/null +++ b/util/test/utils/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gcc utils_test.c ../util/create_env.c -g -I$AXIS2C_HOME/include/axis2-1.2 -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -o utils_test diff --git a/util/test/utils/utils_test.c b/util/test/utils/utils_test.c new file mode 100644 index 0000000..2bbf67f --- /dev/null +++ b/util/test/utils/utils_test.c @@ -0,0 +1,47 @@ +#include "../util/create_env.h" +#include + +axutil_env_t *env = NULL; +axis2_char_t * request = "This is a requset"; +axis2_char_t * s = "This is a & '""xml string"; +axis2_char_t c = 'c'; + +/** @brief test utils + * test quote string + */ + +axis2_status_t test_utils() +{ + axis2_char_t **op, *quote_string; + int hexit; + env = create_environment(); + op = axutil_parse_request_url_for_svc_and_op(env,request); + quote_string = axutil_xml_quote_string(env,s,1); + printf("The quote string is%s\n",(char *)quote_string); + hexit = axutil_hexit(c); + printf("%d\n",hexit); + if(op && quote_string) + { + printf("The test is SUCCESS\n"); + } + if(!op || !quote_string) + { + printf("The test is FAIL"); + } + return AXIS2_SUCCESS; +} +int main() +{ + int status = AXIS2_SUCCESS; + env = create_environment(); + status = test_utils(); + if(status == AXIS2_FAILURE) + { + printf(" test failed"); + } + axutil_env_free(env); + return 0; +} + + + diff --git a/xdocs/api/doxygenconf b/xdocs/api/doxygenconf new file mode 100644 index 0000000..fb5cc31 --- /dev/null +++ b/xdocs/api/doxygenconf @@ -0,0 +1,1220 @@ +# Doxyfile 1.4.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = Axis2/C + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 1.6.0 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./ + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, +# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, +# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, +# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, +# Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources +# only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. + +SHOW_DIRECTORIES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the progam writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../../deploy/include/axis2-1.6.0/ + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_PREDEFINED tags. + +EXPAND_ONLY_PREDEF = YES + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = AXIS2_DECLARE(x)=x \ + AXIS2_DECLARE_NONSTD(x)=x \ + AXIS2_DECLARE_DATA= \ + AXIS2_CALL= +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = AXIS2_DECLARAE AXIS2_DECLARE_NONSTD AXIS2_DECLARE_DATA AXIS2_CALL + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = gif + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that a graph may be further truncated if the graph's +# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH +# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), +# the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = YES diff --git a/xdocs/archived_news.html b/xdocs/archived_news.html new file mode 100644 index 0000000..3bbf690 --- /dev/null +++ b/xdocs/archived_news.html @@ -0,0 +1,842 @@ +Apache Axis2/C - Archived News +

Apache Axis2/C Archived News

+

This page contains information on previous releases running up to the + latest.

+ + +

Apache Axis2/C Version 1.5.0 Released

Download 1.5.0

Key Features

+
    +
  1. Support for one-way messaging (In-Only) and request response messaging (In-Out)
  2. +
  3. Client APIs: Easy to use service client API and more advanced operation client API
  4. +
  5. Transports supported: HTTP +
      +
    • Inbuilt HTTP server called simple axis server
    • +
    • Apache2 httpd module called mod_axis2 for server side
    • +
    • IIS module for server side. Support IIS 5.1, 6 and 7.
    • +
    • Client transport with ability to enable SSL support
    • +
    • Basic HTTP Authentication
    • +
    • libcurl based client transport
    • +
    • AMQP Transport support using Apache Qpid
    • +
    +
  6. +
  7. Module architecture, mechanism to extend the SOAP processing model
  8. +
  9. WS-Addressing support, both the submission (2004/08) and final (2005/08) versions, implemented as a module
  10. +
  11. MTOM/XOP support
  12. +
  13. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages; This has complete XML infoset support
  14. +
  15. XML parser abstraction +
      + +
    • Libxml2 wrapper
    • +
    • Guththila pull parser support
    • +
    +
  16. +
  17. Both directory based and archive based deployment models for deploying services and modules
  18. +
  19. Description hierarchy providing access to static data of Axis2/C runtime (configuration, service groups, services, operations and messages)
  20. +
  21. Context hierarchy providing access to dynamic Axis2/C runtime information(corresponding contexts to map to each level of description hierarchy)
  22. + +
  23. Message receiver abstraction +
      +
    • Inbuilt raw XML message receiver
    • +
    +
  24. +
  25. Code generation tool for stub and skeleton generation for a given WSDL (based on Java tool)
      +
    • Axis Data Binding (ADB) support
    • +
    + +
  26. +
  27. Transport proxy support
  28. +
  29. REST support (more POX like) using both HTTP POST and GET
  30. +
  31. Comprehensive documentation +
      +
    • Axis2/C Manual
    • +
    +
  32. + +
  33. WS-Policy implementation called Neethi/C, with WS-SecurityPolicy extension
  34. +
  35. TCP Transport, for both client and server side
  36. +
+ +

Changes Since Last Release

+
    +
  1. AMQP Transport support with Apache Qpid.
  2. +
  3. Modifications to IIS Module to support IIS 6 and 7
  4. +
  5. Added a JScript file to automate IIS module registry configuration
  6. +
  7. Improved the in-only message handling
  8. +
  9. Specifying the MEP in the services.xml for non in-out messages made mandatory
  10. +
  11. Improvements to Guthtila for better performance
  12. +
  13. Improvements to TCPMon tool
  14. +
  15. Memory leak fixes
  16. +
  17. Bug fixes
  18. +
+
+ +

7th May 2008 - Apache Axis2/C Version 1.4.0 Released

Download 1.4.0

Key Features

+
    +
  1. Support for one-way messaging (In-Only) and request response messaging (In-Out)
  2. +
  3. Client APIs: Easy to use service client API and more advanced operation client API
  4. +
  5. Transports supported: HTTP +
      + +
    • Inbuilt HTTP server called simple axis server
    • +
    • Apache2 httpd module called mod_axis2 for server side
    • +
    • IIS module for server side
    • +
    • Client transport with ability to enable SSL support
    • +
    • Basic HTTP Authentication
    • +
    • libcurl based client transport
    • + +
    +
  6. +
  7. Module architecture, mechanism to extend the SOAP processing model
  8. +
  9. WS-Addressing support, both the submission (2004/08) and final (2005/08) versions, implemented as a module
  10. +
  11. MTOM/XOP support
  12. +
  13. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages; This has complete XML infoset support
  14. +
  15. XML parser abstraction +
      + +
    • Libxml2 wrapper
    • +
    • Guththila pull parser support
    • +
    +
  16. +
  17. Both directory based and archive based deployment models for deploying services and modules
  18. +
  19. Description hierarchy providing access to static data of Axis2/C runtime (configuration, service groups, services, operations and messages)
  20. +
  21. Context hierarchy providing access to dynamic Axis2/C runtime information(corresponding contexts to map to each level of description hierarchy)
  22. + +
  23. Message receiver abstraction +
      +
    • Inbuilt raw XML message receiver
    • +
    +
  24. +
  25. Code generation tool for stub and skeleton generation for a given WSDL (based on Java tool)
      +
    • Axis Data Binding (ADB) support
    • +
    + +
  26. +
  27. Transport proxy support
  28. +
  29. REST support (more POX like) using both HTTP POST and GET
  30. +
  31. Comprehensive documentation +
      +
    • Axis2/C Manual
    • +
    +
  32. + +
  33. WS-Policy implementation called Neethi/C, with WS-SecurityPolicy extension
  34. +
  35. TCP Transport, for both client and server side
  36. +
+ +

Changes Since Last Release

+
    +
  1. Fixed library version numbering
  2. +
  3. Made Guththila as default XML parser
  4. +
  5. Memory leak fixes
  6. +
  7. Many bug fixes
  8. +
+
+ +

3rd March 2008 - Apache Axis2/C Version 1.3.0 Released

Download 1.3.0

Key Features

+
    +
  1. Support for one-way messaging (In-Only) and request response messaging (In-Out)
  2. +
  3. Client APIs: Easy to use service client API and more advanced operation client API
  4. +
  5. Transports supported: HTTP +
      + +
    • Inbuilt HTTP server called simple axis server
    • +
    • Apache2 httpd module called mod_axis2 for server side
    • +
    • IIS module for server side
    • +
    • Client transport with ability to enable SSL support
    • +
    • Basic HTTP Authentication
    • +
    • libcurl based client transport
    • + +
    +
  6. +
  7. Module architecture, mechanism to extend the SOAP processing model
  8. +
  9. WS-Addressing support, both the submission (2004/08) and final (2005/08) versions, implemented as a module
  10. +
  11. MTOM/XOP support
  12. +
  13. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages; This has complete XML infoset support
  14. +
  15. XML parser abstraction +
      + +
    • Libxml2 wrapper
    • +
    • Guththila pull parser support
    • +
    +
  16. +
  17. Both directory based and archive based deployment models for deploying services and modules
  18. +
  19. Description hierarchy providing access to static data of Axis2/C runtime (configuration, service groups, services, operations and messages)
  20. +
  21. Context hierarchy providing access to dynamic Axis2/C runtime information(corresponding contexts to map to each level of description hierarchy)
  22. + +
  23. Message receiver abstraction +
      +
    • Inbuilt raw XML message receiver
    • +
    +
  24. +
  25. Code generation tool for stub and skeleton generation for a given WSDL (based on Java tool)
      +
    • Axis Data Binding (ADB) support
    • +
    + +
  26. +
  27. Transport proxy support
  28. +
  29. REST support (more POX like) using both HTTP POST and GET
  30. +
  31. Comprehensive documentation +
      +
    • Axis2/C Manual
    • +
    +
  32. + +
  33. WS-Policy implementation called Neethi/C, with WS-SecurityPolicy extension
  34. +
  35. TCP Transport, for both client and server side
  36. +
+ +

Changes Since Last Release

+
    +
  1. Fixed a bug on version numbering
  2. + +
  3. List Axis2/C dependencies licensing in LICENSE file
  4. +
  5. Add relevant copyright notices to NOTICE file
  6. +
  7. Digest Authentication Support
  8. +
  9. Proxy Authentication Support
  10. +
  11. Ability to insert xml declaration on outgoing payloads
  12. +
  13. Enhanced REST support
  14. + +
  15. MTOM support with libcurl
  16. +
  17. Improvements to TCPMon Tool
  18. +
  19. Improvements to Test Coverage
  20. +
  21. Improvements to API docs
  22. +
  23. Improvements to CA certificate validation mechanisms on SSL Transport
  24. +
  25. Improvements to Neethi
  26. + +
  27. Fixed issue in HTTP GET on mod_axis2
  28. +
  29. Major Improvements to Guththila Parser
  30. +
  31. Improvements to libcurl based sender
  32. +
  33. Creation of a FAQ list
  34. +
  35. Improvements to Axis2/C documentation
  36. +
  37. Added Documentation on Archive Based Deployment
  38. + +
  39. Fixes for IIS module
  40. +
  41. Removed dependency in util for the Axis2/C core
  42. +
  43. Ability to access transport headers at the service level (for RESTful services)
  44. +
  45. uint64_t and int64_t support at util layer and codegen level
  46. +
  47. Removed zlib dependencies when Archive Based Deployment model is disabled
  48. +
  49. Signal Handling in Windows
  50. + +
  51. Removed over 99% of the warnings found on Windows
  52. +
  53. Increased build speed on Windows with nmake.
  54. +
  55. Improvements to Windows build system
  56. +
  57. Extensions to client API to support HTTP/Proxy Authentication
  58. +
  59. Memory leak fixes
  60. +
  61. Many bug fixes
  62. +
+
+ +

17th January 2008 - Apache Axis2/C Version 1.2.0 Released

Download 1.2.0

Key Features

    +
  1. Support for one-way messaging (In-Only) and request response messaging (In-Out)
  2. +
  3. Client APIs: Easy to use service client API and more advanced operation client API
  4. +
  5. Transports supported: HTTP +
      +
    • Inbuilt HTTP server called simple axis server
    • +
    • Apache2 httpd module called mod_axis2 for server side
    • +
    • IIS module for server side
    • +
    • Client transport with ability to enable SSL support
    • +
    • Basic HTTP Authentication
    • +
    • libcurl based client transport
    • +
    +
  6. +
  7. Module architecture, mechanism to extend the SOAP processing model
  8. +
  9. WS-Addressing support, both the submission (2004/08) and final (2005/08) versions, implemented as a module
  10. +
  11. MTOM/XOP support
  12. +
  13. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages; This has complete XML infoset support
  14. +
  15. XML parser abstraction +
      +
    • Libxml2 wrapper
    • +
    • Guththila pull parser support
    • +
    +
  16. +
  17. Both directory based and archive based deployment models for deploying services and modules
  18. +
  19. Description hierarchy providing access to static data of Axis2/C runtime (configuration, service groups, services, operations and messages)
  20. +
  21. Context hierarchy providing access to dynamic Axis2/C runtime information(corresponding contexts to map to each level of description hierarchy)
  22. +
  23. Message receiver abstraction +
      +
    • Inbuilt raw XML message receiver
    • +
    +
  24. +
  25. Code generation tool for stub and skeleton generation for a given WSDL (based on Java tool)
      +
    • Axis Data Binding (ADB) support
    • +
    +
  26. +
  27. Transport proxy support
  28. +
  29. REST support (more POX like) using both HTTP POST and GET
  30. +
  31. Comprehensive documentation +
      +
    • Axis2/C Manual
    • +
    +
  32. +
  33. WS-Policy implementation called Neethi/C, with WS-SecurityPolicy extension
  34. +
  35. TCP Transport, for both client and server side
  36. +
+
+ +

Major Changes Since Last Release

+
    +
  1. WS-Policy implementation
  2. +
  3. TCP Transport
  4. +
  5. Improvements to Guththila parser to improve performance
  6. +
  7. Improvements to Java tool, WSDL2C, that generates C code
  8. +
  9. Basic HTTP Authentication
  10. +
  11. Memory leak fixes
  12. +
  13. Many + bug fixes
  14. +
+
+ +

30th September 2007 - Apache Axis2/C Version 1.1.0 Released

Download 1.1.0

Key Features

    +
  1. Support for one-way messaging (In-Only) and request response messaging (In-Out)
  2. +
  3. Client APIs: Easy to use service client API and more advanced operation client API
  4. +
  5. Transports supported: HTTP +
      +
    • Inbuilt HTTP server called simple axis server
    • +
    • Apache2 httpd module called mod_axis2 for server side
    • +
    • IIS module for server side
    • +
    • Client transport with ability to enable SSL support
    • +
    • Basic HTTP Authentication
    • +
    • libcurl based client transport
    • +
    +
  6. +
  7. Module architecture, mechanism to extend the SOAP processing model
  8. +
  9. WS-Addressing support, both the submission (2004/08) and final (2005/08) versions, implemented as a module
  10. +
  11. MTOM/XOP support
  12. +
  13. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages; This has complete XML infoset support
  14. +
  15. XML parser abstraction +
      +
    • Libxml2 wrapper
    • +
    • Guththila pull parser support
    • +
    +
  16. +
  17. Both directory based and archive based deployment models for deploying services and modules
  18. +
  19. Description hierarchy providing access to static data of Axis2/C runtime (configuration, service groups, services, operations and messages)
  20. +
  21. Context hierarchy providing access to dynamic Axis2/C runtime information(corresponding contexts to map to each level of description hierarchy)
  22. +
  23. Message receiver abstraction +
      +
    • Inbuilt raw XML message receiver
    • +
    +
  24. +
  25. Code generation tool for stub and skeleton generation for a given WSDL (based on Java tool)
      +
    • Axis Data Binding (ADB) support
    • +
    +
  26. +
  27. Transport proxy support
  28. +
  29. REST support (more POX like) using both HTTP POST and GET
  30. +
  31. Comprehensive documentation +
      +
    • Axis2/C Manual
    • +
    +
  32. +
  33. WS-Policy implementation called Neethi/C, with WS-SecurityPolicy extension
  34. +
  35. TCP Transport, for both client and server side
  36. +
+
+
+ +

Major Changes Since Last Release

+
    +
  1. WS-Policy implementation
  2. +
  3. TCP Transport
  4. +
  5. Improvements to Guththila parser to improve performance
  6. +
  7. Improvements to Java tool, WSDL2C, that generates C code
  8. +
  9. Basic HTTP Authentication
  10. +
  11. Memory leak fixes
  12. +
  13. Many bug fixes
  14. +
+
+ + +
+ +

06th May 2007 - Apache Axis2/C Version 1.0.0 Released

+

Download 1.0.0

+
+
+

Key Features

+
    +
  1. Support for one-way messaging (In-Only) and request response messaging (In-Out)
  2. +
  3. Client APIs: Easy to use service client API and a more advanced operation client API
  4. +
  5. Transports supported : HTTP +
      +
    • Inbuilt HTTP server called simple axis server
    • +
    • Apache2 HTTPD module called mod_axis2 for the server side
    • +
    • IIS module for the server side
    • +
    • Client transport with the ability to enable SSL support
    • +
    • libcurl based client transport
    • +
    +
  6. +
  7. Module architecture, with a mechanism to extend the SOAP processing model
  8. +
  9. WS-Addressing support, for both the submission (2004/08) and final (2005/08) versions, implemented as a module
  10. +
  11. MTOM/XOP support
  12. +
  13. AXIOM, which is an XML object model optimized for SOAP 1.1/1.2 messages. This has complete XML infoset support.
  14. +
  15. XML parser abstraction +
      +
    • Libxml2 wrapper
    • +
    • Guththila pull parser support
    • +
    +
  16. +
  17. Both directory based and archive based deployment models for deploying + services and modules
  18. +
  19. Description hierarchy providing access to static data of Axis2/C + runtime (configuration, service groups, services, operations, and + messages)
  20. +
  21. Context hierarchy providing access to dynamic Axis2/C runtime + information (corresponding contexts mapped to each level of the + description hierarchy)
  22. +
  23. Message receiver abstraction +
      +
    • Inbuilt raw XML message receiver
    • +
    +
  24. +
  25. Code generation tool for stub and skeleton generation for a given WSDL + (based on the Java tool) +
      +
    • Axis Data Binding (ADB) support
    • +
    +
  26. +
  27. Transport proxy support
  28. +
  29. REST support (more POX like) using both HTTP POST and GET
  30. +
  31. Comprehensive documentation +
      +
    • Axis2/C Manual
    • +
    +
  32. +

Major Changes Since Last Release

    +
  1. Many Bug Fixes
  2. +
  3. IIS module for the server side
  4. +
  5. libcurl based client transport
  6. +
  7. Improvements to overall API to make it more user friendly, stable, and + binary compatible
  8. +
  9. Transport proxy support
  10. +
  11. Memory leak fixes
  12. +

22nd December 2006 Axis2/C Version 0.96 Released

Download 0.96

Key Features

    +
  1. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages. This + has complete XML infoset support
  2. +
  3. Support for one-way messaging (In-Only) and request response messaging + (In-Out)
  4. +
  5. Description hierarchy (configuration, service groups, services, + operations, and messages)
  6. +
  7. Directory based deployment model
  8. +
  9. Archive based deployment model
  10. +
  11. Context hierarchy (corresponding contexts mapped to each level of the + description hierarchy)
  12. +
  13. Raw XML message receiver
  14. +
  15. Module architecture, with a mechanism to extend the SOAP processing + model
  16. +
  17. Module version support
  18. +
  19. Transports supports: HTTP +
      +
    • Both simple axis server and Apache2 HTTPD module for the server + side
    • +
    • Client transport with the ability to enable SSL support
    • +
    +
  20. +
  21. Service client and operation client APIs
  22. +
  23. REST support (HTTP POST case)
  24. +
  25. WS-Addressing, both the submission (2004/08) and final (2005/08) + versions
  26. +
  27. MTOM/XOP support
  28. +
  29. Code generation tool for stub and skeleton generation for a given WSDL + (based on the Java tool) +
      +
    • Axis Data Binding (ADB) support
    • +
    +
  30. +
  31. Security module with UsernameToken support
  32. +
  33. REST support (HTTP GET case)
  34. +
  35. Dynamic invocation support (based on XML schema and WSDL + implementations)
  36. +
  37. Guththila pull parser support
  38. +
  39. WSDL2C code generation tool- with schema code generation + (experimental)
  40. +
  41. TCP Monitor - C implementation (experimental)
  42. +
  43. Axis2/C Manual
  44. +

Major Changes Since Last Release

    +
  1. Major Memory leak fixes
  2. +
  3. Many Bug Fixes
  4. +
  5. Improvement to REST processing
  6. +
  7. Improvement to SOAP-Fault processing
  8. +
  9. Improvement to mod_axis2 library (plugged with apr pools)
  10. +
  11. Visual Studio 7.0 project
  12. +

Items pending for 1.0

    +
  1. Complete API documentation and API improvements
  2. +
  3. Fix further memory leaks
  4. +
  5. Create a comprehensive functional test framework
  6. +

26th October 2006 Axis2/C Version 0.95 Released

Download 0.95

Key Features

    +
  1. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages. This + has complete XML infoset support
  2. +
  3. Support for one-way messaging (In-Only) and request response messaging + (In-Out)
  4. +
  5. Description hierarchy (configuration, service groups, services, + operations, and messages)
  6. +
  7. Directory based deployment model
  8. +
  9. Archive based deployment model
  10. +
  11. Context hierarchy (corresponding contexts mapped to each level of the + description hierarchy)
  12. +
  13. Raw XML message receiver
  14. +
  15. Module architecture, mechanism to extend the SOAP processing model
  16. +
  17. Module version support
  18. +
  19. Transports supports: HTTP +
      +
    • Both simple axis server and Apache2 HTTPD module for server + side
    • +
    • Client transport with ability to enable SSL support
    • +
    +
  20. +
  21. Service client and operation client APIs
  22. +
  23. REST support (HTTP POST case)
  24. +
  25. WS-Addressing, for both the submission (2004/08) and final (2005/08) + versions
  26. +
  27. MTOM/XOP support
  28. +
  29. Code generation tool for stub and skeleton generation for a given WSDL + (based on the Java tool) +
      +
    • Axis Data Binding (ADB) support
    • +
    +
  30. +
  31. Security module with UsernameToken support
  32. +
  33. REST support (HTTP GET case)
  34. +
  35. Dynamic invocation support (based on XML schema and WSDL + implementations)
  36. +
  37. Guththila pull parser support
  38. +
  39. WSDL2C code generation tool- with schema code generation + (experimental)
  40. +
  41. TCP Monitor - C implementation (experimental)
  42. +
  43. Axis2/C Manual - New
  44. +

Major Changes Since Last Release

    +
  1. Major Memory leak fixes
  2. +
  3. Many Bug Fixes
  4. +
  5. Improvement to Documentation
  6. +

Items pending for 1.0

    +
  1. Complete API documentation and API improvements
  2. +
  3. Fix further memory leaks
  4. +
  5. Create a comprehensive functional test framework
  6. +

3rd October 2006 Axis2/C Version 0.94 Released

Download 0.94

Key Features

    +
  1. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages. This + has complete XML infoset support
  2. +
  3. Support for one-way messaging (In-Only) and request response messaging + (In-Out)
  4. +
  5. Description hierarchy (configuration, service groups, services, + operations, and messages)
  6. +
  7. Directory based deployment model
  8. +
  9. Archive based deployment model
  10. +
  11. Context hierarchy (corresponding contexts mapped to each level of the + description hierarchy)
  12. +
  13. Raw XML message receiver
  14. +
  15. Module architecture, with a mechanism to extend the SOAP processing + model
  16. +
  17. Module version support
  18. +
  19. Transports support: HTTP +
      +
    • Both simple axis server and Apache2 HTTPD module for the server + side
    • +
    • Client transport with the ability to enable SSL support
    • +
    +
  20. +
  21. Service client and operation client APIs
  22. +
  23. REST support (HTTP POST case)
  24. +
  25. WS-Addressing, both the submission (2004/08) and final (2005/08) + versions
  26. +
  27. MTOM/XOP support
  28. +
  29. Code generation tool for stub and skeleton generation for a given WSDL + (based on the Java tool) +
      +
    • Axis Data Binding (ADB) support
    • +
    +
  30. +
  31. Security module with UsernameToken support
  32. +
  33. REST support (HTTP GET case)
  34. +
  35. Dynamic invocation support (based on the XML schema and WSDL + implementations)
  36. +
  37. Guththila pull parser support - New
  38. +
  39. WSDL2C code generation tool- with schema code generation (experimental) + - New
  40. +
  41. TCP Monitor - C implementation (experimental) - + New
  42. +

Major Changes Since Last Release

    +
  1. Guththila pull parser support
  2. +
  3. WSDL2C code generation tool
  4. +
  5. TCP Monitor - C implementation
  6. +
  7. Major Memory leak fixes
  8. +
  9. Fixes to code generation with Java Tool
  10. +
  11. Many Bug Fixes
  12. +

Items pending for 1.0

    +
  1. Complete API documentation and API improvements
  2. +
  3. Fix further memory leaks
  4. +
  5. Create a comprehensive functional test framework
  6. +

31st August 2006 Axis2/C Version 0.93 Released

Download 0.93

Key Features

    +
  1. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages. This + has complete XML infoset support
  2. +
  3. Support for one-way messaging (In-Only) and request response messaging + (In-Out)
  4. +
  5. Description hierarchy (configuration, service groups, services, + operations, and messages)
  6. +
  7. Directory based deployment model
  8. +
  9. Archive based deployment model
  10. +
  11. Context hierarchy (corresponding contexts mapped to each level of the + description hierarchy)
  12. +
  13. Raw XML message receiver
  14. +
  15. Module architecture, with a mechanism to extend the SOAP processing + model
  16. +
  17. Module version support
  18. +
  19. Transports supports: HTTP +
      +
    • Both simple axis server and Apache2 HTTPD module for the server + side
    • +
    • Client transport with the ability to enable SSL support
    • +
    +
  20. +
  21. Service client and operation client APIs
  22. +
  23. REST support (HTTP POST case)
  24. +
  25. WS-Addressing, both the submission (2004/08) and final (2005/08) + versions
  26. +
  27. MTOM/XOP support
  28. +
  29. Code generation tool for stub and skeleton generation for a given WSDL + (based on the Java tool) +
      +
    • Axis Data Binding (ADB) support
    • +
    +
  30. +
  31. Security module with UsernameToken support
  32. +
  33. REST support (HTTP GET case)
  34. +
  35. Dynamic invocation support (based on the XML schema and WSDL + implementations)
  36. +

Major Changes Since Last Release

    +
  1. REST support for HTTP GET case
  2. +
  3. XML Schema implementation
  4. +
  5. Woden/C implementation that supports both WSDL 1.1 and WSDL 2.0
  6. +
  7. Dynamic client invocation (given a WSDL, it consumes the services + dynamically)
  8. +
  9. Numerous improvements to API and API documentation
  10. +
  11. Many bug fixes, especially, many paths of execution previously + untouched were tested along with the Sandesha2/C implementation
  12. +

Items pending for 1.0

    +
  1. Complete API documentation and API improvements
  2. +
  3. Fix major memory leaks
  4. +
  5. Test codegen for both ADB and none cases
  6. +
  7. Put in place a comprehensive functional test framework
  8. +
  9. WSDL2C tool
  10. +

16th June 2006 Axis2/C Version 0.92 Released

Download 0.92

Key Features

    +
  1. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages. This + has complete XML infoset support.
  2. +
  3. Support for One-Way Messaging (In-Only) and Request Response Messaging + (In-Out)
  4. +
  5. Module Architecture, with a mechanism to extend the SOAP processing + model
  6. +
  7. Context hierarchy
  8. +
  9. Directory based deployment model
  10. +
  11. Raw XML providers
  12. +
  13. WS-Addressing, for both the submission (2004/08) and final (2005/08) + versions
  14. +
  15. Transports supports: HTTP +
      +
    • Both simple axis server and Apache2 HTTPD module
    • +
    • SSL client transport
    • +
    +
  16. +
  17. Service Groups
  18. +
  19. Service client and operation client APIs
  20. +
  21. REST support (POST case)
  22. +
  23. Module version support
  24. +
  25. Archive based deployment Model
  26. +
  27. MTOM support
  28. +
  29. WSDL Code Generation Tool for Stub and skeletons (based on Java tool) + New +
      +
    • Axis Data Binding - ADB New
    • +
    +
  30. +
  31. Security module, usernameToken support New
  32. +

Major Changes Since Last Release

    +
  1. Completed MTOM implementation with multiple attachment support and + non-optimized case
  2. +
  3. Completed service client API with send robust and fire and forget
  4. +
  5. Added "message" to description hierarchy
  6. +
  7. Archive based deployment model (for services and modules)
  8. +
  9. Code generation for WSDL using Java WSDL2Code tool
  10. +
  11. ADB support (with Java WSDL2Code tool)
  12. +
  13. WS-Security usernameToken support
  14. +
  15. Initial implementation of the XML Schema parser (To be used in WSDL + parser and REST support)
  16. +
  17. Initial implementation of WSDL parser (To be used in dynamic + invocation)
  18. +
  19. Changed double pointer environment parameters into pointer parameters + to improve efficiency
  20. +

Un-Implemented Architecture Features (TBD in 1.0)

    +
  1. Session scoping for Application, SOAP, Transport, and Request + levels
  2. +
  3. Different character encoding support
  4. +
  5. REST (REpresentational State Transfer) Support (GET case)
  6. +
  7. Dynamic client invocation (given a WSDL, it consumes services + dynamically)
  8. +

Un-Implemented Architecture Features (TBD post 1.0)

    +
  1. Security module with encryption and signing
  2. +
  3. Server side Web Service Policy support
  4. +
  5. C2WSDL
  6. +
  7. WSDL2C
  8. +

15th May 2006 Axis2/C Version 0.91 Released

Download 0.91

Key Features

    +
  1. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages. This + has complete XML infoset support.
  2. +
  3. Support for One-Way Messaging (In-Only) and Request Response Messaging + (In-Out)
  4. +
  5. Module architecture, with a mechanism to extend the SOAP processing + model
  6. +
  7. Context hierarchy
  8. +
  9. Directory based deployment model
  10. +
  11. Raw XML providers
  12. +
  13. WS-Addressing, for both the submission (2004/08) and final (2005/08) + versions
  14. +
  15. Transports: HTTP +
      +
    • Both simple axis server and Apache2 HTTPD module
    • +
    • SSL client transport New
    • +
    +
  16. +
  17. Service Groups New
  18. +
  19. Service client and operation client APIs New
  20. +
  21. REST support (POST case) New
  22. +
  23. Module version support New
  24. +
  25. MTOM support New
  26. +

Other notes

    +
  1. Interoperability tested with Axis2/Java for XML in/out client and + services
  2. +
  3. Addressing 1.0 interoperability
  4. +

Major changes since last release

    +
  1. Full Addressing 1.0 support
  2. +
  3. Improved fault handling model
  4. +
  5. SSL client transport
  6. +
  7. MTOM implementation
  8. +
  9. Implementation of easy to use service client and operation client APIs + for client side programming
  10. +
  11. REST support (POST case)
  12. +
  13. Module version support
  14. +
  15. Service groups
  16. +
  17. Numerous bug fixes since last release
  18. +

Un-Implemented Architecture Features (TBD in 1.0)

    +
  1. Sessions scoping for application, SOAP, transport and request + levels
  2. +
  3. Different character encoding support
  4. +
  5. Dynamic invocation
  6. +
  7. Archive based deployment Model
  8. +

Un-Implemented Architecture Features (TBD post 1.0)

    +
  1. WSDL code generation tool for stub and skeletons (based on Java + tool)
  2. +
  3. Security module
  4. +
  5. REST (REpresentational State Transfer) support (GET case)
  6. +
  7. Web Services policy support
  8. +

31st March 2006 Axis2/C Version 0.90 Released

Download 0.90

Key Features

    +
  1. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages. This + has complete XML infoset support.
  2. +
  3. Support for One-Way Messaging (In-Only) and Request Response Messaging + (In-Out)
  4. +
  5. Module architecture, with a mechanism to extend the SOAP processing + model
  6. +
  7. Context hierarchy
  8. +
  9. Directory based deployment model
  10. +
  11. Raw XML providers
  12. +
  13. WS-Addressing, for both the submission (2004/08) and final (2005/08) + versions
  14. +
  15. Transports: HTTP +
      +
    • Both simple axis server and Apache2 HTTPD module
    • +
    +
  16. +

Experimental Features

    +
  1. WSDL object model support New +
      +
    • Dynamic invocation
    • +
    +
  2. +

Other notes

    +
  1. Interoperability tested with Axis2/Java for XML in/out client and + services
  2. +
  3. Addressing interoperability on client side
  4. +

Major changes since last release

    +
  1. Minimal memory leaks
  2. +
  3. Apache2 module working in Windows
  4. +
  5. More samples and tests
  6. +
  7. WSDL object model was built based on the proposed WSDL 2.0 Component + model.
  8. +
  9. Dynamic invocation
  10. +
  11. Numerous bug fixes since last release
  12. +

Un-Implemented Architecture Features (TBD in 1.0)

    +
  1. Module version support
  2. +
  3. Archive based deployment model
  4. +
  5. Improved and user friendly client API
  6. +
  7. Support for MTOM
  8. +
  9. Session scoping for application, SOAP, transport, and request + levels
  10. +
  11. Service groups
  12. +
  13. Different character encoding support
  14. +

Un-Implemented Architecture Features (TBD post 1.0)

    +
  1. WSDL code generation tool for stub and skeletons (based on the Java + tool)
  2. +
  3. Security module
  4. +
  5. REST (REpresentational State Transfer) support
  6. +
  7. Web Services policy support
  8. +
  9. Axis2 Web application (Web App)
  10. +

10th March 2006 Axis2/C Milestone 0.5 Released

Download M-0.5

Key Features

    +
  1. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages.
  2. +
  3. Support for Request Response Messaging (In-Out)
  4. +
  5. Module Architecture, with a mechanism to extend the SOAP Processing + Model
  6. +
  7. Directory based deployment model
  8. +
  9. WS-Addressing, both the submission (2004/08) and final (2005/08) + versions
  10. +
  11. Improved and user friendly Client API
  12. +
  13. Transports supports: HTTP +
      +
    • Axis2/C server
    • +
    • Apache integration module
    • +
    +
  14. +
  15. Raw XML providers
  16. +
  17. Numerous bug fixes since last release
  18. +

Major Changes Since the Last Release

    +
  1. Improving code quality by fixing memory leaks and reviewing the + code.
  2. +
  3. Apache2 integration.
  4. +
  5. More samples and tests
  6. +
  7. Initial documentations(User Guide, Developer Guide, Installation + Guide)
  8. +

Still to be Done

See a list of what we think needs to be done, and consider helping out if + you're interested.

    +
  1. Management Interface for Axis2/C
  2. +
  3. Implementation of other transports.
  4. +
  5. Code generation and Dynamic Invocation
  6. +
  7. Hot Deployment of Services
  8. +
  9. Completion of interop tests
  10. +
  11. Support for MTOM
  12. +
  13. Axis Data Binding - ADB (Framework and Schema Compiler)
  14. +
  15. REST (REpresentational State Transfer) Support
  16. +

17th February 2006 Axis2/C Milestone 0.4 Released

We have done a considerable amount of improvements in the past two weeks + since the M0.3 release.

We have the following features added on top of the M0.3 release

Key Features

1. Threading support and threaded simple axis server

2. Module loading support

3. Addressing module, and addressing based dispatching

4. HTTP chunking support

5. Improved logging mechanism

6. Ability to build and run on Windows platform

02nd February 2006 Axis2/C Milestone 0.3 Released

This is the first milestone release with a working SOAP engine; we have + the simple axis server and client stubs working.

In addition to the M0.2 feature set, the following features are + included

Key Features

1. Core engine in place with deployment, description, and context + hierarchies and HTTP transport support.

2. SOAP processing support

3. Simple HTTP server

4. Client API implementation

5. Couple of working service and client samples

08th December 2005 Axis2/C Milestone 0.2 Released

We have been able to improve the OM module since the last release, and PHP + binding for the OM module is in place.

Key Features

1. Improved OM module

2. libxml2 parser support

3. PHP binding for the OM module

4. Some test cases for PHP binding

5. Many memory leak fixes

25th November 2005 Axis2/C Milestone 0.1 Released

This release includes the C implementation of AXIOM, an important part of + the Axis2C Web service stack.

Key Features

1. OM module

2. Guththila pull parser support

3. libxml2 parser support (only reader is supported as of now)

4. doxygen documentation support

5. A sample demonstrating how to use OM


diff --git a/xdocs/coding_conventions.html b/xdocs/coding_conventions.html new file mode 100644 index 0000000..0015b1a --- /dev/null +++ b/xdocs/coding_conventions.html @@ -0,0 +1,130 @@ +Apache Axis2/C - Coding Conventions +

Axis2/C Coding Conventions

1. Naming Conventions

    +
  • Namespace validation is done using the + axis2_ prefix.
  • +
  • Underscore should be used to separate individual words in + identifiers.
  • +
  • All identifiers should be meaningful and abbreviations must be avoided + whenever possible.
  • +

1.1 Variables

    +
  • Use meaningful nouns.
  • +
  • Make sure to use all lowercase letters for private and public + variables.
  • +
  • If it is a local variable or a member of a struct, there's no need to + prefix it with axis2_
  • + e.g.
+
int count = 0;
+char *prefix = NULL;
+
+

1.2 Functions

    +
  • Function names should always start with the prefix axis2_ + except for members of a struct.
  • + e.g.
+
axis2_engine_t * axis2_engine_create(axutil_env_t *environment);
+
+

1.3 Structures and User Defined Data Types

    +
  • Note the _t suffix in the type name.
  • + e.g.
+
typedef struct axis2_endpoint_ref {
+    axis2_char_t *address;
+} axis2_endpoint_ref_t;
+
+

1.4 Macros

    +
  • Macro names should be in all uppercase letters.
  • + e.g.
+
#define AXIS2_H
+#define AXIS2_ERROR_GET_MESSAGE(error) ((error)->ops->get_message(error))
+
+
+

1.5 Enumerations

    + e.g.
+
typedef enum axis2_status_codes {  
+    AXIS2_FAILURE = 0,
+    AXIS2_SUCCESS
+} axis2_status_codes_t;
+
+

2. Indentation and Formatting

    + Indentation rules are defined in terms of Artistic Style indent +options:
    + + astyle --style=ansi -b -p -s4 -M0 -c -U -S
    + In detail, these options mean, +
      +
    • Use the ANSI style code layout +
                  int foo()
      +            {
      +                if (is_bar)
      +                {
      +                    bar();
      +                    return 1;
      +                }
      +                else
      +                    return 0;
      +            }
      +            
      +
    • +
    • Use spaces around operators
    • +
    • Use four spaces for indenting
    • +
    • No spaces between the function name and parenthesis +
                  if (is_foo(a, b))
      +                bar(a, b);
      +            
      +
              
      +
    • +
    + There are some more formatting guidelines that could not be enforced by a + formatting tool, but nevertheless should be followed. +
      +
    • Checking pointer validity: +
          if (foo)
      + and NOT +
          if (foo != NULL)
      +
    • +
    • Checking equality: +
          if (foo == 7)
      + and NOT +
          if (7 == foo)
      +
    • +
    +

3. Comments

    + Doxygen style comments should be used to help auto + generate API documentation. All structs and functions including parameters + and return types should be documented.

4. Function Parameters and Return Value Conventions

    + Each function should be passed a pointer to an instance of the + axutil_env_t struct as the first parameter. If the + function is tightly bound to a struct, the second parameter is a pointer to + an instance of that struct.
    + Functions returning pointers should return NULL in case of an error. The + developer should make sure to set the relevant error code in the + environment's error struct.
    + Functions that do not return pointer values should always return the + AXIS2_FAILURE status code on error whenever possible, or + return some other defined error value (in case of returning a struct + perhaps). A relevant error code must also be set in the environment's error + struct.

5. Include Directives

    + It is preferable to include header files in the following fashion:
    +
+
<standard header files>
+<other system headers>
+"local header files"
+
+
+
+
+

diff --git a/xdocs/docs/architecture_notes.html b/xdocs/docs/architecture_notes.html new file mode 100644 index 0000000..27529d4 --- /dev/null +++ b/xdocs/docs/architecture_notes.html @@ -0,0 +1,76 @@ +Apache Axis2/C - Architecture Notes

C Specific Architectural Notes on Apache Axis2/C

Please send your feedback to: axis-c-dev@ws.apache.org +(Subscription details are available on the Axis2 site.) Prefix +the subject with [Axis2].

Introduction

Some of the main design goals of Apache Axis2/C are the usability of the +library, the ability to be plugged into different platforms, and the ability +to be embedded in other software systems to provide Web services support. +There are many features that allow Axis2/C to be pluggable into different +platforms as well as to enable the extension of the functionality of +Axis2/C.

Environment Struct

Apache Axis2/C defines an environment struct to hold platform specific +entities such as the memory allocator, the threading mechanism, etc. The +environment is initialized at the point of starting Axis2/C and will last for +the lifetime of the Axis2/C run-time. Different sub environments can also be +created to suit particular needs, for example, each thread can create its own +environment. The Axis2 environment holds the following entities in order to +abstract the platform specific implementations.

Allocator

Allocator is the wrapper for memory management mechanisms. It defines the +following primitives:

    +
  1. malloc - method to allocate a memory block of a given + size.
  2. +
  3. free - method to free a memory block.
  4. +

Based on the platform, or the software system into which Axis2/C is +embedded, these primitives could be provided with concrete +implementations.

Error

Error defines error reporting mechanisms for Axis2/C. All the Axis2/C +internal functions use the axutil_error struct instance in the +environment to report errors.

Log

The log defines the common logging mechanisms required for the Axis2/C +library. All internal Axis2/C code use the functions associated with the +axutil_log struct available in the environment for logging.

Thread Pool

The thread pool defines the thread management functions. It hides the +complex thread pooling functions as well as the platform specific +implementations of threads. The Axis2/C internal library uses this interface +to manipulate threads and deal with a common thread type which is defined as +axutil_thread.

The environment struct is the starting point for platform abstraction +supported by Axis2/C. It can be used to plug platform specific memory +management, error reporting, logging, and thread pooling mechanisms.

Dynamic Loading

Axis2/C is designed in an extensible manner, so that the users can add +functionality by implementing new modules. These modules should be compiled +as Dynamic Shared Objects (DSOs). Services are also loaded dynamically at +server start up by reading the contents of the services folder and service +configuration files.

The DSO support for loading Axis2/C services and modules is based on the +struct named axutil_class_loader. To abstract the +axutil_class_loader from the DSO loading functionality of the +underlying operating system, a set of platform independent macros such as +AXIS2_PLATFORM_LOADLIB and AXIS2_PLATFORM_UNLOADLIB +are used. These macros will be mapped to platform specific system calls in +platform specific header files (e.g. axutil_unix.h and +axutil_windows.h). The file +axutil_platform_auto_sense.h will include the correct platform +specific header file, based on the compiler directives available at compile +time.

Transport Abstraction

One of the key advantages of Axis2/C is the fact that the engine and the +SOAP processing is independent of the transport aspects. Users can develop +their own transports and the interface will be defined in: +axis2_transport_sender.h and +axis2_transport_receiver.h.

Currently, Axis2/C supports HTTP transport. Axis2/C Apache2 module (mod_axis2) is an example +of the implementation of the axis2_transport_receiver.h +interface. libcurl based client transport is an example of the implementation +of the axis2_transport_sender.h interface.

Stream Abstraction

Stream is a representation of a sequence of bytes. Since Axis2/C heavily +uses streaming mechanisms to read/write XML, an implementation independent +stream abstraction is required in order to integrate Axis2/C into other +environments seamlessly. The core components of Axis2/C deal with this +abstracted stream and does not worry about the implementation specific +details. axutil_stream.h defines the stream interface.

Threading Model

The Axis2/C core functions such as asynchronous invocation and concurrent +request processing in simple axis2 server make use of threads. The use of +threads should be platform independent inside the Axis2/C core components.

An implementation independent interface for threads is provided in the +axutil_thread.h header file. Platform specific implementations +of this interface are provided for Windows and Linux.

Parser Abstraction

The Axis2/C architecture depends on the XML pull model when dealing with +XML payloads. In Java there is StAX API, but in C there is no such standard +API. Therefore, an XML pull API, that is similar to StAX API, is defined in +the axiom_xml_reader.h and axiom_xml_writer.h. Any +implementation of this API can be plugged into the Axis2/C core. If an +external XML parser needs to be plugged into Axis2/C, a wrapper that maps the +reading/writing functions to the Axis2/C XML reader/writer API should be +written.


diff --git a/xdocs/docs/axis2c_manual.html b/xdocs/docs/axis2c_manual.html new file mode 100644 index 0000000..2b26e55 --- /dev/null +++ b/xdocs/docs/axis2c_manual.html @@ -0,0 +1,3951 @@ + +Apache Axis2/C - Manual + +

Preamble

+

This document is intended +to be a reference +manual for Apache +Axis2/C. This +manual details how Axis2/C can be used to provide and consume Web +services.

+

Please send your feedback +to the Apache Axis2/C +developer mailing list (axis-c-dev@apache.org). +Subscription +details are available on the Apache +Axis2/C website.

+

This document uses the following conventions:

+
    +
  • The directory each package is installed in is given with an +"_INSTALL_DIR" suffix to the package name. For example, the path in +which Libxml2 is installed is referred to as LIBXML2_INSTALL_DIR
  • +
+


+

+ +
+

1. Quick Start Guide

+

This section is aimed to help you get a Web service running in +a short +time using Axis2/C, and consume that service using an Axis2/C client.

+

First, download +the latest binary release from Apache Axis2/C. Once you download the +correct +binary that suits your platform, all that you require to get it running +is to +extract the package to a folder of your choice, and set the AXIS2C_HOME +environment variable to point to this extracted folder. For Linux, you +may +have to set the LD_LIBRARY_PATH environment variable to include the lib +folder (e.g. add $AXIS2C_HOME/lib). For MS Windows, you will have to +add the +lib folder to your PATH variable to include the Axis2/C DLLs to your +path.

+

Now you should be able to change the directory to the bin +folder of the +extracted folder, and run the simple axis server in one command shell. +Then +change the directory to samples/bin in another command shell and run +any of +the samples there (you may have to set the environment variables in +this new +shell as well). Please see the installation +guide for more details.

+

Once you have Axis2/C up and running successfully, you can +start writing +your own services and clients. The following sections explain how to +write +your first service and client with Axis2/C.

+
+

1.1 Hello Service

+

Let's see how you can write your first Web service with +Axis2/C and how to +deploy it.

+

The first service that we are going to write is named "hello" +with a +single operation named "greet" in the service. This "greet" operation, +when +invoked by the client, will expect the client to send a greeting in the +request, and in turn send a greeting in the response. Following are +examples +of XML payloads exchanged between the client and the service:

+

Request:

+
+
 <greet>
Hello Service!
<greet>

+
+

Response:

+
+
 <greetResponse>
Hello Client!
<greetResponse>
+
+
+

The steps to be followed when implementing a service with +Axis2/C +include:

+
    +
  1. Implement the functions corresponding to the +operations of the service.
    +In our sample, we will have one function that implements the "greet" +operation.
    +We will name that function axis2_hello_greet.
  2. +
  3. Implement the functions defined by the axis2_svc_skeleton +interface
    +axis2_svc_skeleton interface expects the +functions init, invoke, +on_fault and free +to be implemented by our service.
    +In our sample, we would implement those and name them as hello_init, +hello_invoke, hello_on_fault +and hello_free respectively.
    +
  4. +
  5. Implement the create function, that would create +an instance of the service skeleton
    +The create function would create an axis2_svc_skeleton and assign the +respective function pointers to map the axis2_svc_skeleton interface to +our interface implementation methods explained in the above step.
    +
  6. +
  7. Implement axis2_get_instance and +axis2_remove_instance functions
    +These functions are used to create and destroy service instances by the +engine, and each service must define these functions.
    +
  8. +
  9. Write the services.xml file for the service
    +The services.xml file acts as the deployment descriptor file for the +service. As the bare minimum, we need to configure the service name, +operations, and the shared library file name containing the service +implementation in this file.
    +As previously decided, we will name the service "hello", the operation +"greet" and the shared library libhello.so on Linux and hello.dll on MS +Windows.
    +
  10. +
+
+
+

1.1.1 Operation Implementation

+

Look for the axis2_hello_greet +function in the hello_svc.c +source file.

+

This function implements the business logic for the greet +operation. We +will be calling this function from our implementation of the invoke +function. +Basically, this function receives the request payload as an +axiom_node, process it to understand the +request logic, and +prepares the response as an axiom_node and +returns that.

+
+
+

1.1.2 Skeleton Create Method

+

Look for the axis2_hello_create +function in the hello_svc.c +source file.

+

The create function creates and returns a new +axis2_svc_skeleton instance. The most +important aspect to note +about this function is the function pointer assignments. They are used +to map +the interface operations to the corresponding functions of the +implementation. This is done by assigning the ops member of the service +skeleton to the address of the ops struct variable.

+
+
+

1.1.3 Invoking Operation Implementation

+

The invoke method of the service skeleton is the point of +entry for +invoking the operations. Hence in our implementation of the invoke +function, +we have to define how the operations are to be called.

+

Look for the hello_invoke function +in the hello_svc.c +source file.

+

In our implementation of the hello_invoke, +we call the +function implementing the greet operation. As we have only one +operation, the +task is simple here. If we had multiple operations, we will have to +look into +the information in the message context to map it to the exact +operation.
+The Axis2/C engine will call the invoke method with an +axiom_node, containing the request payload, +and +axis2_msg_ctx instance, containing the message +context +information, in addition to the service skeleton and the environment +pointers. We can use the message context to extract whatever +information we +deem necessary that is related to the incoming message. The Axis2/C +engine +expects the invoke method to return a pointer to an axiom_node, +representing the response payload.

+
+
+

1.1.4 Full Source

+

Here is the complete source code for the service : hello_svc.c

+
+
+

1.1.5 Service Descriptor

+

The services.xml file contains details on the service that +would be read +by the Axis2/C deployment engine during server start up time. The +following +shows the contents for the services.xml file for the hello service.

+
+
<service name="hello">
<parameter name="ServiceClass" locked="xsd:false">hello</parameter>
<description>
Quick start guide hello service sample.
</description>
<operation name="greet"/>
</service>

+
+

The service configuration shown above specifies that the name +of the +service is hello.
+The value of the "ServiceClass", "hello" in this case, will be mapped +to the +service implementation by the deployment engine as libhello.so on Linux +or +hello.dll on MS Windows. The description element contains a brief +description +of the service.
+There can be one or more operation elements. For this sample, we only +have +one operation, with the name "greet".
+

+
+
+

1.1.6 Compiling the Service

+

You can compile the service sample as shown below.

+

On Linux:

+
+
gcc -shared -olibhello.so -I$AXIS2C_HOME/include/axis2-1.6.0/ -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -laxis2_engine -lpthread -laxis2_http_sender -laxis2_http_receiver hello_svc.c

+
+

On MS Windows:

+

to compile,

+
+
cl.exe /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "AXIS2_DECLARE_EXPORT" /D "AXIS2_SVR_MULTI_THREADED" /w /nologo /I %AXIS2C_HOME%\include /c hello_svc.c

+
+

to link,

+
+
link.exe /nologo /LIBPATH:%AXIS2C_HOME%\lib axutil.lib axiom.lib axis2_parser.lib axis2_engine.lib /DLL /OUT:hello.dll *.obj

+
+
+
+

1.1.7 Deploying the Service

+

To make the service available to be consumed by the clients, +we have to +deploy the service. To deploy the service, you have to create a folder +named +'hello' in the AXIS2C_HOME/services folder, and copy the services.xml +file +and the shared library file (libhello.so on Linux or hello.dll on MS +Windows) +into that folder.

+

To verify that your service has been correctly deployed, you +can start the +simple axis server and then browse the list of deployed services using +a Web +browser. To start the simple axis server, you can go to the +AXIS2C_HOME/bin +folder and run the executable axis2_http_server. The default URL that +you can +test the service list with is http://localhost:9090/axis2/services. +You should get an entry for the hello service on the page that is +displayed.

+
+
+

1.1.8 Providing a WSDL for the Service

+

Axis2/C does not support dynamic WSDL generation. However, it +is possible to attach the contract you used to generate the service +skeleton, to the respective service. This can be done in two ways.

+
    +
  1. Adding the WSDL file to the folder in which the service DLL +is found. +
  2. +
  3. Providing the path of the WSDL file in the services.xml. +
  4. +
+

If you choose the first option, you will have to copy the WSDL +file to the folder in which the service DLL is found. The name of the +WSDL file should be the name of the service. And, if you choose the +second option, you will have to make use of the wsdl_path +parameter in the services.xml file. More info on how this can be done +is found under the services.xml +section.

+

An example of the second option can be found the services.xml +of the echo sample service, which is commented. An +example of the first option in use is seen in the Calculator +sample service.

+

The static WSDL file can be accessed by appending ?wsdl +to the service end-point. You can view the WSDL provided for the +Calculator sample, by pointing to http://localhost:9090/axis2/services/Calculator?wsdl.

+
+
+

1.2 Hello Client

+

Now that you know how to write a service with Axis2/C, let's +see how to +write a client to consume that service. The request payload that the +client +will be sending to the service was described in the previous section. +The +client has to prepare the payload, send it to the service, and then +receive +and process the response.

+

The steps to be followed when implementing a client with +Axis2/C:

+
    +
  1. Create the environment to be used by the client. +
    +Each function in Axis2/C takes a pointer to the environment instance +that encapsulates the memory allocator, error handler, and logging and +threading mechanisms. The axutil_env_create_all +method can be used to create a default, ready to use environment +instance.
    +
  2. +
  3. Create an options instance, and set options.
    +The axis2_options struct can be used to set +the client side options. For example, we can use options to set the +endpoint address of the service to be consumed by the client.
  4. +
  5. Create a service client instance, giving the +client repository folder as a parameter.
    +The axis2_svc_client struct is meant to be +used by the users to consume Web services. It provides an easy to use +API. Service client create method takes the location of the repository +as a parameter. For the purpose of our sample, you can use the +AXIS2C_HOME as the repository. The concept of repository +is explained in detail in a later section.
    +
  6. +
  7. Set options to service client instance
    +The options created in an earlier step have to be set on the service +client, indicating the options that are meant to be used by the service +client.
    +
  8. +
  9. Send the request and receive the response
    +The service client's axis2_svc_client_send_receive +method can be used to invoke the send receive operation on the service +client instance.
    +The send receive operation takes the request payload as an axiom_node +and returns the response payload as an axiom_node.
  10. +
  11. Process the response
    +Process the response in line with the client business logic.
  12. +
+
+
+

1.2.1 Creating and Setting Options

+
+
 options = axis2_options_create(env);
address = "http://localhost:9090/axis2/services/hello";
endpoint_ref = axis2_endpoint_ref_create(env, address);
axis2_options_set_to(options, env, endpoint_ref);

+
+

In the above section of code, an axis2_options +instance is +created first. Then an endpoint reference instance is created with the +address of the location of the service. Finally, the created endpoint +is set +as the "to" address of the options. The "to" address indicates where +the +request should be sent to.

+
+
+

1.2.2 Using Service Client

+
+
 svc_client = axis2_svc_client_create(env, client_home);
axis2_svc_client_set_options(svc_client, env, options);
payload = build_om_request(env);
ret_node = axis2_svc_client_send_receive(svc_client, env, payload);

+
+

After creating and preparing the options, the next step is to +create a +service client instance and use it to send the request and receive the +response. The code fragment given above shows how options can be set on +top +of the service client and how to invoke the send receive operation with +a +request payload. Once the response is received, the response payload +will be +stored in the ret_node, which is a pointer to +an +axiom_node that can be used to process the +response further.

+
+
+

1.2.3 Full Source

+

Here is the complete source code for the client : hello.c

+
+
+

1.2.4 Compiling the Client

+

You can compile the client sample as shown below.

+

On Linux:

+
+
gcc -o hello -I$AXIS2C_HOME/include/axis2-1.6.0/ -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -laxis2_engine -lpthread -laxis2_http_sender -laxis2_http_receiver hello.c -ldl -Wl,--rpath -Wl,$AXIS2C_HOME/lib

+
+

On MS Windows:

+

to compile,

+
+
cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "_MBCS" /I %AXIS2C_HOME%\include /c hello.c

+
+

to link,

+
+
link.exe /LIBPATH:%AXIS2C_HOME%\lib axutil.lib axiom.lib axis2_parser.lib axis2_engine.lib /OUT:hello.exe *.obj

+
+
+
+

1.2.5 Running the Client

+

To run the client, make sure you start the simple axis server +and then run +the hello executable.

+


+

+

+
+
+
+

2. Repository Folder

+

Repository is a folder where all Axis2/C related +configurations as well as +services and modules are located. The following shows the folder +structure of +the repository:

+ +

Here the name of the repository folder is axis2c_repo. In your +system, you +can specify any folder name of your choice. There are three sub folders +available in the repository. In addition to that, the axis2.xml +configuration +file is also located in the repository. The following table describes +the +purpose of the repository contents.

+ + + + + + + + + + + + + + + + + + + + + + + +
Axis2/C Repository Contents
Folder/File NameDescription
+

lib

+
+

The lib folder contains the libraries required to run +the Axis2/C engine. While you can afford to have the shared libs of +Axis2/C in a location of your choice, the dynamically loaded shared +libs, parser, transport receiver and transport sender has to be in the +repository lib folder.
+It is mandatory that the lib folder is there in the repository.

+
+

modules [optional]

+
+

The modules folder contains the modules deployed with +Axis2/C. Each module deployed will have its own sub folder inside the +modules folder. For example, if the addressing module is deployed, then +there will be a sub folder named addressing inside the modules folder +of the repository.
+At deployment, the Axis2/C deployment engine would traverse the modules +folders to find out what modules are available.
+The modules folder is optional. If it is empty or non-existent, that +means that there are no deployed modules.

+
+

services [optional]

+
+

The services folder contains the services deployed with +Axis2/C. Each service deployed will have its own sub folder inside the +services folder, or live inside one of the sub folders.
+At deployment, the Axis2/C deployment engine will traverse the services +folders to find out what services are available.
+The services folder is optional. If it is empty or non-existent, that +means that there are no deployed services.

+
+

axis2.xml

+
+

The axis2.xml file is the configuration file of Axis2/C.
+The configuration file is mandatory and must have the name axis2.xml. +It is safe to consider your Axis2/C repository to be the folder in +which you have the axis2.xml file.

+
+

Both clients as well as the services written using Axis2/C can +use the +same repository. However you can use one repository for the server side +and +another one for the client side. The services folder is used only when +the +repository is used by the server side. When the repository is used by +the +client, the services folder, if present, will not be used.

+

The Axis2/C binary distribution, when extracted, can be +considered as +ready for use as your repository folder. If you are building Axis2/C +from the +source distribution, when you build the source, including the samples, +the +installation destination will be ready for use as your repository +folder.

+

The simple axis server (that is axis2_http_server binary), the +client +samples, and the HTTPD module (Axis2 Apache2 module) require the +repository +folder to be specified in order to run correctly.

+

+
+

2.1 Module Folders

+

As described earlier, all the modules are placed inside the +modules folder +of the repository, and each module will have its own sub folder within +the +modules folder.
+The folder in which a module is placed must have the same name as the +module +name. For example, the addressing module will be placed in a sub folder +named +addressing.
+

+

Inside the folder corresponding to a module, the shared +library +implementing the module and the module configuration file, module.xml, +is +placed. It is a must that these two files are present inside each +folder +representing a module. The module.xml file will be processed by the +deployment engine to find out module specific information such as the +module +name, set of handlers, the flows into which those handlers are to be +added, +etc.

+
+
+

2.2 Service Folders

+

All the services are placed inside the services folder of the +repository, +and each service will be in one of the sub folders within the services +folder. Axis2/C has a concept called service groups, where there can be +one +or more services inside a service group. A single stand alone service +is +assigned a service group with the same name as that of the service by +the +Axis2/C engine for the purpose of easy handling. Therefore the sub +folders in +the services folder correspond to the service groups.

+

A service, if deployed as a stand alone service, will reside +inside a +folder with the same name as that of the service. For example, the echo +service will be placed in a sub folder named echo. The shared library +implementing the service and the service configuration file, the +services.xml, will be placed inside the folder corresponding to a +service. +Given the fact that the engine treats the folders to represent service +groups +and not a single service, the configuration file is called +services.xml. +However, you can always place a single service inside a single folder, +which +is the most common use case.

+

Each sub folder within the services folder should have at +least one shared +lib implementing a service and a services.xml file. If it is a real +service +group, there will be multiple shared libs, yet there is only one +services.xml +file configuring all those services. The services.xml file is processed +by +the deployment engine to find out the service group and the service +specific +information such as the service group name, service name, the set of +operations for each service, etc.

+


+

+

+
+
+
+

3. Service API

+

We have already seen how to write a service in the Quick Start +Guide +section of this manual. This section covers the service API of Axis2/C +in +more detail.

+

axis2_svc_skeleton is an interface. +Axis2/C does not provide +any concrete implementation of this interface. It is the responsibility +of +the service implementer to implement this interface. To implement the +interface, you should implement the functions adhering to the function +pointer signatures of the members of the axis2_svc_skeleton_ops +struct. Then, a create function should be written to create an +axis2_svc_skeleton instance, and assign the +implementing +functions to the members of the ops member of service skeleton.

+

The following table details the signatures of the function +pointer members +of the axis2_svc_skeleton struct implemented +by a service.

+ + + + + + + + + + + + + + + + + + + + + + + +
Function SignatureDescription
+
int (AXIS2_CALL *
init)(axis2_svc_skeleton_t *svc_skeleton,
const axutil_env_t *env);
+
Initializes the service skeleton object instance. The +Axis2/C engine initializes a service skeleton instance once per +deployed service, during the first request made to the service.
+
axiom_node_t *(AXIS2_CALL*
invoke )( axis2_svc_skeleton_t *svc_skeli,
const axutil_env_t *env,
axiom_node_t *node,
axis2_msg_ctx_t *msg_ctx);
+
Invokes the service implementation. You have to +implement the logic to call the correct functions in this method based +on the name of the operation being invoked.
+
axiom_node_t *(AXIS2_CALL*
on_fault)(
axis2_svc_skeleton_t *svc_skeli,
const axutil_env_t *env,
axiom_node_t *node);
+
This method is called by the engine if a fault is +detected.
+
axis2_status_t (AXIS2_CALL *
free )( axis2_svc_skeleton_t *svc_skeli,
const axutil_env_t *env);
+
Frees the service implementation instance.
+
+

There are two more methods that a service should implement. +Once a service +is deployed, the message receiver of the Axis2/C engine has to create a +service instance at run time for the purpose of invoking it. For this, +it +looks for a method named axis2_create_instance +and calls it on +the service shared library. The engine also looks for a function named +axis2_remove_instance in the shared library +for clean up +purposes.

+ + + + + + + + + + + + + + + +
Function SignatureDescription
+
AXIS2_EXPORT int
axis2_get_instance(
axis2_svc_skeleton_t ** inst,
const axutil_env_t * env);
+
Creates an instance of the service. You have to +implement the logic of creating the service object, allocating memory +etc. in this method.
+
AXIS2_EXPORT int
axis2_remove_instance(
axis2_svc_skeleton_t * inst,
const axutil_env_t * env);
+
Removes the instance of the service. Do any cleaning-up +and deallocations here.
+
+

Note that service object instantiation happens once per +service. When the +first request is received by the service, a service skeleton instance +is +created and initialized. The same object instance will be re-used by +the +subsequent requests.

+

You can find an example on how to implement the service +skeleton interface +in the hello_svc.c +source file, +which is the example used in the Quick +Start +Guide. More advanced samples can be found in the samples +folder of the +Axis2/C distribution.

+


+

+

+
+
+

4. Client API

+

The primary client API to be used with Axis2/C is +axis2_svc_client, the service client API. This +is meant to be an +easy to use API for consuming services. If you want to do more complex +tasks, +such as invoking a client inside a module, or wrap the client API with +another interface, you may need to use axis2_op_client, +the +operation client API. For most of the use cases, the service client API +is +sufficient.

+

The behavior of the service client can be fine tuned with the +options +passed to the service client. You can set the options by creating an +axis2_options instance. The bare minimum that +you need to set is +the endpoint URI to which the request is to be sent. An example of this +was +given in the Quick Start Guide +section.

+

The service client interface serves as the primary client +interface for +consuming services. You can set the options to be used by the service +client +and then invoke an operation on a given service. There are several ways +of +invoking a service operation. The method of invoking an operation +depends on +3 things. They are,

+
    +
  1. The Message Exchange Pattern (MEP)
  2. +
  3. Synchronous/Asynchronous behavior (Blocking/Non-Blocking)
  4. +
  5. Two-way or one-way transport
  6. +
+

Many service operation invocation scenarios can be obtained by +combining +the above three factors. The service client interface provides the +necessary +API calls to achieve this.

+

Deciding the Message Exchange Pattern (MEP)

+

There are 2 message exchange patterns.

+
    +
  1. Out-Only
  2. +
  3. Out-In
  4. +
+

In the Out-Only MEP, the client doesn't expect a reply from +the server. +The service client provides two methods of using the Out-Only MEP.

+

+ + + + + + + + + + + + + + + + + + + + + + + +
Function SignatureDescription
+
AXIS2_EXTERN void AXIS2_CALL
axis2_svc_client_fire_and_forget(
axis2_svc_client_t * svc_client,
const axutil_env_t * env,
const axiom_node_t * payload);
+
Sends a message and forgets about it. This method is +used to interact with a service operation whose MEP is In-Only. There +is no way of getting an error from the service using this method. +However, you may still get client-side errors, such as host unknown.
+
AXIS2_EXTERN axis2_status_t AXIS2_CALL
axis2_svc_client_send_robust(
axis2_svc_client_t * svc_client,
const axutil_env_t * env,
const axiom_node_t * payload);
+
This method too is used to interact with a service +operation whose MEP is In-Only. However, unlike axis2_svc_client_fire_and_forget, +this function reports an error back to the caller if a fault triggers +on the server side.
+When using Out-In MEP, the client expects a reply from the server. axis2_svc_client_send_receive +and axis2_svc_client_send_receive_non_blockingfunctions +support this MEP
+
 AXIS2_EXTERN axiom_node_t *AXIS2_CALL
axis2_svc_client_send_receive(
axis2_svc_client_t * svc_client,
const axutil_env_t * env,
const axiom_node_t * payload);
+
This method is used to interact with a service +operation whose MEP is In-Out. It sends an XML request and receives an +XML response.
+Returns a pointer to the AXIOM node representing the XML response. This +method blocks the client until the response arrives.
+
AXIS2_EXTERN void AXIS2_CALL
axis2_svc_client_send_receive_non_blocking(
axis2_svc_client_t * svc_client,
const axutil_env_t * env,
const axiom_node_t * payload,
axis2_callback_t * callback);
+
This method too, is used to interact with a service +operation whose MEP is In-Out. It sends an XML request and receives an +XML response, but the client does not block for the response.
+In this method, the client does not block for the response, but instead +it expects the user to set a call back to capture the response.
+
+

Please have a look at the axis2_svc_client.h +header file for +more information on the above mentioned functions, as well as their +synonyms +that accept an operation's qualified name.

+
+

4.1 Synchronous vs. Asynchronous Behavior +(Blocking/Non-Blocking)

+

This will determine whether the client would block for the +response +(synchronous) or return immediately expecting the response to be +handled by a +callback (asynchronous, in other words non-blocking) in an Out-In MEP +scenario.
+axis2_svc_client_send_receive operates in +synchronous mode, +whereas axis2_svc_client_send_receive_non_blocking +operates in +asynchronous mode.
+

+
+
+

4.2 Two-Way or One-Way Transport

+

If the transport is two-way, then only one channel is used, +which means +the request is sent and the response is received on the same channel. +If the +transport is one-way, then the request is sent on one channel and the +response is received on a separate channel.
+If we want to use a separate channel for the response, a separate +listener +has to be started to receive the response, This can be done by setting +the +separate listener option to True using the +axis2_options_set_use_separate_listener +function above the +options.

+

Please have a look at the echo_blocking_dual +sample to see +how to set the separate channel option.

+

Please see Appendix D +for further details on setting +options.

+


+

+

+
+
+
+

5. REST

+

Axis2/C comes with plain old XML (POX) like REST support. A +given service +can be exposed both as a SOAP service as well as a REST service. By +default, +your service will support SOAP as well as REST, however, your service +operations +will only be available for SOAP. In order to enable REST for your +operations you +need to add one or more parameters under your operation, in the services.xml. +If you want to consume Web services using REST style calls, you can use +the HTTP +POST method, the HTTP GET method, the HTTP HEAD method, the HTTP PUT +method or +the HTTP DELETE method.
+

+
+
+

5.1 REST on Client Side

+

The following example code fragment shows how to set up a +client enabling a REST style +invocation.

+
+
axis2_options_set_enable_rest(options, env, AXIS2_TRUE);

+
+

You can use the same code that you use with a SOAP call, and +do REST style +invocation by just enabling REST using the option setting shown above.

+

The default HTTP method used with REST is HTTP POST. If you +need to change +it to the HTTP GET method, the following needs to be done.

+
+
axis2_options_set_http_method(options, env, AXIS2_HTTP_GET);

+
+

Similarly you can use AXIX2_HTTP_HEAD to change it to the HTTP +HEAD method, +or AXIX2_HTTP_PUT to change it to the HTTP PUT method, or +AXIX2_HTTP_DELETE to change it +to the HTTP DELETE method.

+

Please have a look at the echo_rest +sample for a complete +source code on how to use REST.
+

+
+
+

5.2 REST on Server Side

+

You basically need to add the REST Location, and the REST +Method parameters to the services.xml +to enable REST in a service operation. The REST location is the +template that needs to be matched +to find your operation, and the REST Method is the HTTP Method +associated with the service. +Note that the REST Method is optional for each operation. If no REST +Method is specified, POST, +will be assumed. Optionally you may specify the default REST Method for +all operations at the service +level. Then, if you haven't specified a REST Method for your operation, +the default REST Method +specified will be assumed instead of POST. Please have a look at the echo +sample +service for a complete source code on how to set up REST. Shown below +is an example, on how to +configure the locate operation to work with +HTTP GET on REST.
+

+
+
<operation name="locate">
<parameter name="RESTMethod">GET</parameter>
<parameter name="RESTLocation">location/{lat}/{long}</parameter>
</operation>

+
+

The corresponding request would look like, http://www.sample.org/service/location/34N/118W, +which would return Los Angeles, California. In here, the portion location +is fixed and lat and long +are optional parameters which will be captured to the payload. +
+

+
+
+

5.3 REST and SOAP for Same Operation

+

It is also possible to enable a single service operation for +SOAP as well as REST. This can be done by specifying a REST Location +that does not contain the operation name. The locate +operation is an example to such a case. Thus, for a SOAP invocation, +you need to use http://www.sample.org/service/locate, +as the end point or WS-Addressing Action.

+


+

+

+
+
+

6. MTOM

+

Axis2/C allows you to send and receive binary data with SOAP +messages +using MTOM/XOP conventions. When sending and receiving attachments, you +have +to use the service client (axis2_svc_client) +API to perform the +send and receive operations, and provide or consume binary data in +relation +to the AXIOM payloads.

+

In order to send a binary attachment, you need to build the +AXIOM payload +and attach the data handler with binary content to the payload.

+
+
<soapenv:Body>
<ns1:mtomSample xmlns:ns1="http://ws.apache.org/axis2/c/samples/mtom">
<ns1:fileName>test.jpg</ns1:fileName>
<ns1:image>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include"
href="cid:1.f399248e-8b39-1db1-3124-0015c53de2e5@apache.org"></xop:Include>
</ns1:image>
</ns1:mtomSample>
</soapenv:Body>

+
+

In the above sample payload shown, we place our image file as +text within +an image element

+
+
image_om_ele = axiom_element_create(env, mtom_om_node, "image", ns1, &image_om_node);
data_handler = axiom_data_handler_create(env, image_name, "image/jpeg");
data_text = axiom_text_create_with_data_handler(env, image_om_node, data_handler, &data_om_node);

+
+

When sending attachments, you can configure the client either +to send the +attachment in the optimized format or non-optimized format.

+

To do this, set the option axis2_options_set_enable_mtom(options, +env, AXIS2_TRUE);or the setting +<enableMtom>true</enableMtom> in +axis2.xml

+

If enableMTOM is set to True, the attachment is sent as it is, +out of the +SOAP body, using MIME headers. Also the payload will have an +XOP:Include +element, referring to the MIME part that contains the binary +attachment. +Sending the attachment as it is, in pure binary format, is called +binary +optimized format. In the case of binary non-optimized format, where +enableMTOM is False, the attachment content is sent in the payload +itself, as +a base64 encoded string.

6.1 Using MTOM Callbacks

Axis2/C +Can send and receive very large attachments with a very low memory foot +print. User can specify callbacks to load attachments before sending +and store attachments while recieving.

6.1.1 Sender side Callback

The attachment can be loaded from any data source. User need to implement the callback using axiom_mtom_sending_callback.h. A  sample Callback can be found here. Following is what need to be done with data_handler in the case of a callback.
 
data_handler = axiom_data_handler_create(env, NULL, content-type);
axiom_data_handler_set_data_handler_type(data_handler, env, AXIOM_DATA_HANDLER_TYPE_CALLBACK);
axiom_data_handler_set_user_param(data_handler, env, (void *)user_param);

user_param +is of any type which the user should know how to handle from the +callback. The path to the implemented callback should be specified in +the axis2.xml as follows.

<parameter name="MTOMSendingCallback" locked="false">/path/to/the/attachment_sending_callback</parameter>

6.1.2 Receiver side callback

For +large attachments users can specify them to be cached either to a file +or to a any storage. In order to enable caching user should set either "attachmentDir" or "MTOMCachingCallback" +parameters in the axis2.xml. If both are set the callback will be used. +If nothing is set attachment will reside in memory. 

Following is an example of specifying the attachmentDir.

<parameter name="attachmentDIR" locked="false">/path/to/the/dir/</parameter>

So the attachments will be saved +in the specified directory using the attachment content id as the file +name.

In the callback case the callback should be implemented using axiom_mtom_caching_callback.h. The following paramter will enbale the caching callback.

<parameter name="MTOMCachingCallback" locked="false">/path/to/the/attachment_caching_callback</parameter>

A sample callback implementation can be found here.

Axis2/C +allows to set the caching threshold. The default is 1MB. For +example to cache attachments which are greater than 10MB in size user +need to add the following directive in axis2.xml.

<parameter name="MTOMBufferSize" locked="false">10</parameter>

This will give the control to the users to use the availbale memory even with larger attachments.

When the attachment is cached the ultimate receiver can always identify it by calling ,

if (axiom_data_handler_get_cached(data_handler, env))
{
    /* logic for attachment handling */
}

+

The logic on how to handle the attachment will depend on the mechanism which is used to cached the attachment.

Please have a look at the MTOM related samples in the Axis2/C samples directory.


+ +

+
+
+

7. Engaging a Module

+

A module is a set of handlers that helps to extend the message +processing +behavior of the Axis2/C engine. Modules have the concepts of being +Available +and Engaged associated with them. Available means modules are deployed +in the +system but not activated. They will be activated only after being +engaged. +Every module comes with its own module.xml file . This module.xml file +specifies the module specific handlers and the phases into which the +handlers +are to be placed in the handler chain. Some of the module specific +handlers +may be put into system predefined phases. In that case, the module.xml +file +should specify where to put the handlers relative to the others in that +phase. Sometimes a module may define its own phase. In that case, some +of the +module specific handlers may be put into that phase. The handlers added +to +the system predefined phases (global handlers) are invoked for every +message +that comes to or goes out from the system. The handlers in the module +specific phase are invoked only for the messages invoking the +operations that +engage that module. Engaging a module means correctly adding the +handlers of +a particular module to one or more phases. Once the module is engaged, +the +handlers and the operations defined in the module are added to the +entity +that engaged them.

+

Before engaging a module, the following steps have to be +followed.

+
    +
  1. Write the module.xml file
  2. +
  3. Package the module libraries and the module.xml into a +folder which has the same name as the module
  4. +
  5. Deploy the folder in AXIS2C_INSTALL_DIR/modules
  6. +
  7. Add the module specific phases in the axis2.xml file
  8. +
+

The following is an example of engaging a sample module called +the logging +module with Axis2/C:

+
+

7.1 Writing the module.xml File

+

In the module.xml file, the handlers of the module and the +phases to which +they are to be added have to be specified. Below is the module.xml file +of +the sample logging module.

+
+
 <module name="logging" class="axis2_mod_log">
<inflow>
<handler name="LoggingInHandler" class="axis2_mod_log">
<order phase="PreDispatch"/>
</handler>
</inflow>
<outflow>
<handler name="LoggingOutHandler" class="axis2_mod_log">
<order phase="MessageOut"/>
</handler>
</outflow>
<Outfaultflow>
<handler name="LoggingOutHandler" class="axis2_mod_log">
<order phase="MessageOut"/>
</handler>
</Outfaultflow>
</module>

+
+

In the above shown module configuration file, the name of the +module is +logging. There are two handlers in this module, the LoggingInHandler +and the +LoggingOutHandler. The LoggingInHandler is placed into the PreDispatch +phase +of the in flow. The LoggingOutHandler is placed into the MessageOut +phase of +both the out flow and the fault out flow.

+
+
+

7.2 Packaging and Deploying the Module

+

The above module.xml file should be copied to a folder named +"logging" +(because the module name is "logging") inside the +AXIS2C_INSTALL_DIR/modules +folder. The module libraries containing the handler implementation +should +also be copied to the same folder. According to the module.xml file +shown +above, the name of the shared library file should be +libaxis2_mod_log.so on +Linux and axis2_mod_log.dll on MS Windows.

+
+
+

7.3 Adding Module Specific Phases to the axis2.xml File

+

Module specific phases have to be added after the system +predefined +phases. The following example shows where to add the module specific +phases. +Look for the phaseOrder elements in the +axis2.xml file. Note the +comment lines:

+
+
 <!-- User defined phases could be added here -->
+
+

You can add user defined phases after the above comment line +into any of the +flows. The type attribute of the phaseOrder +element +indicates the flow. +

+

For the logging module example, user defined phases are not +required. All +the module specific handlers are added to system predefined phases as +specified in the module.xml file.

+
+
+

7.4 Engaging a Module to a Services

+

The following is an example of engaging the logging module to +the echo +service. This can be done by simply adding <module +ref +="logging"/> in the services.xml file of the echo +service. This +informs the Axis2/C engine that the module "logging" should be engaged +for +this service. The handlers inside the module will be executed in their +respective phases as described by the module.xml.

+
+
 <service name="echo">
<module ref ="logging"/>
<parameter name="ServiceClass" locked="xsd:false">echo</parameter>
<description>
This is a testing service, to test if the system is working or not.
</description>
<operation name="echoString">
<!--messageReceiver class="axis2_receivers" /-->
<parameter name="wsamapping" >
http://ws.apache.org/axis2/c/samples/echoString
</parameter>
</operation>
</service>

+
+

One important thing to note here is that because the logging +module's +handlers are placed into the global phases, even though the logging +module is +engaged only to the echo service, the module will be engaged globally. +This +is a feature of the Axis2 architecture, not a bug. When invoked, the +handlers +in a module can check whether the module has been engaged to a +particular +service, and act accordingly.

+
+
+

7.4.1 Engaging a Module Globally

+

If we want to engage a module for every service deployed in +the Axis2/C +system, we can add the <module ref +="logging"/> entry in +the axis2.xml file. This will inform the Axis2/C engine to invoke the +handlers associated with the module for every message coming in or +going out +for all the services deployed.

+
+
+

7.5 Engaging a Module on the Client Side

+

On the client side, if <module ref +="logging"/> is +added in the axis2.xml, the handlers specific to the logging module +will be +invoked for every request the client sends and every response the +client +receives. If only a particular client wants to engage the module, it +can be +done by engaging the module programmatically. This can be done by +adding the +following line in the client code after setting the options.

+
+
axis2_svc_client_engage_module(svc_client, env, "module-name");

+
+

Remember to replace "module-name" with the name of the module +you want to +engage. For example to engage the logging module you can use:

+
+
axis2_svc_client_engage_module(svc_client, env, "logging");

+
+


+

+

+
+
+
+

8. WS-Addressing

+

WS-Addressing +provides +mechanisms to address Web services and messages. With Axis2/C, you can +use +both WS-Addressing version +1.0 as well as the submission +version.

+

WS-Addressing is implemented as a module in Axis2/C. Hence as +explained in +the previous section, the addressing module can be engaged both on the +client +side as well as on the server side.

+

The WS-Addressing module can be globally engaged by adding the +<module ref="addressing"/> line +to the axis2.xml file.

+

The WS-Addressing module can also be programmatically engaged +using the +following line of code with the service client API
+

+
+
axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING);

+
+

WS-Addressing related options can be set using the +axis2_options struct instance on the client +side. If the +addressing module is engaged, there are no options to be set on the +server +side. The server will employ WS-Addressing if the incoming requests +have +WS-Addressing headers.

+

There is a mandatory requirement for using WS-Addressing on +the client +side with Axis2/C. That is to set a WS-Addressing action that +represents the +operation to be invoked. Example:

+
+
axis2_options_set_action(options,env,"http://ws.apache.org/axis2/c/samples/echoString")

+
+

In addition to the action, which is mandatory, there are other +WS-Addressing related headers that can be sent in a message. Axis2/C +supports +to set those headers as options at the client level. The following +functions +are used to set them.

+
+
axis2_options_set_reply_to(options, env, reply_to)

+
+

Sets the wsa:ReplyTo header. The +ReplyTo header contains the +endpoint to send reply messages. The ReplyTo header is required when +the +response comes in a separate channel (when using a dual channel).

+
+
axis2_options_set_fault_to(options, env, fault_to)

+
+

Sets the wsa:FaultTo header. This +contains the endpoint to +direct fault messages.

+
+
axis2_options_set_from(options, env, from)

+
+

Sometimes the receiving endpoint requires to know the original +sender of +the message. The wsa:From header is used in +such cases. The +above function sets the From header.

+
+
axis2_options_set_relates_to(options, env, relates_to)

+
+

Sets the wsa:RelatesTo header. This +header contains a unique +ID which is the message ID of a previously exchanged message. It helps +to +identify a previous message that relates to the current message.

+


+

+

+
+
+

9. Writing a Module

+

A module is an extension point in the Axis2/C engine. Modules +are +primarily used to WS-* specifications. In other words, quality of +service +aspects such as security and reliable messaging can be implemented as +modules +and deployed with the Axis2/C engine.
+A SOAP message can contain any number of header blocks. These header +blocks +provide various processing information. In Axis2/C, these various +header +blocks are processed by modules. Some times modules may add header +blocks to +a SOAP message.

+

Normally a module is a collection of handlers. So writing a +module mainly +consists of writing handlers. There are two interfaces that are +important +when writing a module. They are axis2_module +and +axis2_handler.

+

Every module should have three basic functions that are +defined as +function pointer members of the axis2_module_ops +struct. This +struct is defined in the axis2_module.h +header file.

+ + + + + + + + + + + + + + + + + + + +
Function SignatureDescription
+
axis2_status_t (AXIS2_CALL * 
init)(axis2_module_t *module, const
axutil_env_t *env,
axis2_conf_ctx_t *conf_ctx,
axis2_module_desc_t *module_desc);
+
This function takes care of the module initialization.
+
axis2_status_t (AXIS2_CALL * 
shutdown)(axis2_module_t *module,
const axutil_env_t *env );
+
Shuts down and cleans up the module.
+
axis2_status_t (AXIS2_CALL *
fill_handler_create_func_map)(axis2_module_t *module,
const axutil_env_t *env );
+
This function fills the hash map of the handler create +functions for the module.
+

The module developer has to implement functions with the above +signatures +and assign them to the members of an axis2_module_ops +struct +instance. Then that struct instance has to be assigned to the ops +member of +an axis2_module struct instance.

+

mod_log.c +has the source for the +logging module. Please have a look at the axis2_mod_log_create +function in it to see how an axis2_module +instance is allocated +and how the ops are initialized.

+

The axis2_mod_log_fill_handler_create_func_map +function adds +the handler create functions to the module's hash map, which stores the +handler create functions. In the mod_log.c +example, the logging module adds +two handlers. The in handler and the out handler that deals with +logging +along with the in-flow and out-flow respectively.

+
+

9.1 Writing Handlers

+

A handler is the smallest unit of execution in the Axis2/C +engine's +execution flow. The engine can have two flows, the in-flow and the +out-flow. +A flow is a collection of phases, and a phase in turn is a collection +of +handlers. A handler is invoked when the phase within which it lives is +invoked. Axis2/C defines an interface called axis2_handler, +which is to be implemented by all the handlers.

+

log_in_handler.c +contains the +source code of the in-handler of the logging module. Please have a look +at +the axutil_log_in_handler_create function to +see how an +axis2_handler instance is created and how the +invoke function +implementation, axis2_log_in_handler_invoke +is assigned to the +axis2_handler invoke function pointer. The +invoke is called to +do the actual work assigned to the handler. The phase that owns the +handler +is responsible for calling the invoke function of the handler.

+

log_out_handler.c +contains +the source code of the out handler of the logging module. The +implementation +is similar to the in handler, except that it is placed along the +out-flow +when deployed.

+
+
+

9.2 Writing the module.xml File

+

After writing the module, the module.xml file should be +written. The +module.xml file contains all the configuration details for a particular +module. Please see the sample module.xml +file for the logging module.

+

Please see the Engaging +a Module section +for more details on how to package and deploy the module.

+


+

+

+
+
+
+

10. Simple Axis2 HTTP Server

+

Simple Axis2 HTTP Server is the inbuilt HTTP server of Axis2/C.
+

+
+

10.1 Linux Based Systems

+

Synopsis :

+
+
 axis2_http_server [-p PORT] [-t TIMEOUT] [-r REPO_PATH] [-l LOG_LEVEL] [-f LOG_FILE] [-s LOG_FILE_SIZE]

+
+

You can use the following options with simple axis HTTP server.

+
+
 -p PORT port number to use, default port is 9090
-r REPO_PATH repository path, default is ../
-t TIMEOUT socket read timeout, default is 30 seconds
-l LOG_LEVEL log level, available log levels:
0 - critical 1 - errors 2 - warnings
3 - information 4 - debug 5- user 6 - trace
Default log level is 4(debug).
-f LOG_FILE log file, default is $AXIS2C_HOME/logs/axis2.log
or axis2.log in current folder if AXIS2C_HOME not set
-s LOG_FILE_SIZE Maximum log file size in mega bytes, default maximum size is 1MB.
-h display the help screen.

+
+

Example :

+
+
 axis2_http_server -l 3 -p 8080 -r $AXIS2C_HOME -f /dev/stderr

+
+
+
+

10.2 MS Windows Based Systems

+

Synopsis :

+
+
 axis2_http_server.exe [-p PORT] [-t TIMEOUT] [-r REPO_PATH] [-l LOG_LEVEL] [-f LOG_FILE] [-s LOG_FILE_SIZE]

+
+

You can use the following options with simple axis HTTP server.

+
+
 -p PORT port number to use, default port is 9090
-r REPO_PATH repository path, default is ../
-t TIMEOUT socket read timeout, default is 30 seconds
-l LOG_LEVEL log level, available log levels:
0 - critical 1 - errors 2 - warnings
3 - information 4 - debug 5- user 6 - trace
Default log level is 4(debug).
-f LOG_FILE log file, default is %AXIS2C_HOME%\logs\axis2.log
or axis2.log in current folder if AXIS2C_HOME not set
-s LOG_FILE_SIZE Maximum log file size in mega bytes, default maximum size is 1MB.
-h display the help screen.

+
+

Example :

+
+
 axis2_http_server.exe -l 3 -p 8080 -r %AXIS2C_HOME% -f C:\logs\error.log

+
+


+

+

+
+
+
+

11. Deploying with Apache HTTP Server Version 2.x

+
+

11.1 Linux Platform

+

To build Axis2/C with the Apache HTTP server module, also +called +mod_axis2, you need to provide the following configuration options on +the +Linux platform:

+
+
./configure --with-apache2=[path to Apache2 include directory] [other configure options]

+
+

NOTE: Some Apache2 +distributions, specially +development versions, install APR (Apache Portable Run-time) include +files in +a separate location. In that case, to build mod_axis2, use:

+
+
./configure --with-apache2=[path to Apache2 include directory] --with-apr=[path to APR include directory]
[other configure options]

+
+

Then build the source tree as usual using:

+
+
 make
make install

+
+

This will install mod_axis2.so into your +AXIS2C_INSTALL_DIR/lib folder.

+
+
+

11.2 MS Windows Platform

+

On the MS Windows platform, you have to provide the Apache2 +install +location in the configure.in file with the setting APACHE_BIN_DIR. +Example:

+
+
APACHE_BIN_DIR = "C:\Program Files\Apache Software Foundation\Apache2.2"

+
+

Based on the Apache HTTP server version you are using, you +also need to +set the setting APACHE_VERSION_2_0_X in the configure.in file. If +you are +using Apache 2.2 family, this setting should be set to 0,else set it to +1.

+
+
APACHE_VERSION_2_0_X = 0

+
+

To build the source, you have to run the command

+
+
nmake axis2_apache_module
+
+

This will build mod_axis2.dll and copy it to +AXIS2C_INSTALL_DIR\lib directory. +

+
+
+

11.3 Deploying mod_axis2

+

NOTE: To execute some of +the commands given below, +you might require super user privileges on your machine. If you are +using the binary release of Axis2/C, please note that it is built with +Apache 2.2.

+

Copy the mod_axis2 shared library (libmod_axis2.so.0.6.0 +on Linux and mod_axis2.dll on MS +Windows) to the Apache2 modules directory as mod_axis2.so

+

On Linux

+
+
	cp $AXIS2C_HOME/lib/libmod_axis2.so.0.6.0 /usr/lib/apache2/modules/mod_axis2.so
+
+

On MS Windows

+
+
	copy /Y "%AXIS2C_HOME%\lib\mod_axis2.dll" C:\Apache2\modules\mod_axis2.so

+
+

Edit the Apache2's configuration file (generally httpd.conf) +and add the +following directives at the end of the file.

+
+
LoadModule axis2_module MOD_AXIS2_SO_PATH
Axis2RepoPath AXIS2C_INSTALL_DIR
Axis2LogFile PATH_TO_LOG_FILE
Axis2LogLevel LOG_LEVEL
Axis2ServiceURLPrefix PREFIX
Axis2MaxLogFileSize SIZE_IN_MB
<Location /axis2>
SetHandler axis2_module
</Location>

+
+

Please note that you have to fine tune the above settings to +mach your +system.
+
+MOD_AXIS2_SO_PATH has to be replaced with the full path to +mod_axis2.so, +for example, /usr/lib/apache2/modules/mod_axis2.so +on Linux, or C:\Apache2\modules\mod_axis2.so +on MS Windows
+
+AXIS2C_INSTALL_DIR has to be replaced with the full path to Axis2/C +repository, for example, /usr/local/axis2 on +Linux, or c:\axis2c on MS Windows. Note that +repository path should +have read access to the daemon user account under which the Apache2 +HTTPD +process is run.
+
+PATH_TO_LOG_FILE has to be replaced with the full path to where you +wish to +have the Axis2/C log file, for example, /tmp/axis2.log +on Linux, or C:\Apache2\logs\axis2.log on MS +Windows. Note that the log +file path should have write access to the daemon user account under +which the +Apache2 HTTPD process is run.
+
+LOG_LEVEL has to be replaced with one of the following values: crit, +error, +warn, info, debug, trace. These log levels have the following meanings:

+
    +
  • crit - log critical errors
  • +
  • error - log errors and above
  • +
  • warn - log warnings and above
  • +
  • info - log information and above
  • +
  • debug - log debug information and above, this is the +default log level used
  • +
  • user - log user level messages and above
  • +
  • trace - log trace messages and above
  • +
+

SIZE_IN_MB must be replaced by the size of the particular +resource in MB, rounded to +the nearest whole value.
+
+PREFIX has to be replaced with the prefix to be used with the service +endpoints. This is optional and defaults to "services". +As an example, if you have "web_services" as the prefix, then all the +services hosted would have the endpoint prefix of :
+http://localhost/axis2/web_services
+If you wish, you can also change the location as well by replacing +"/axis2" in <Location /axis2> setting with whatever you +wish. +

+

NOTE: If you want to use a +Shared Global Pool with Apache +you have to give another entry called Axis2GlobalPoolSize.You have to +give the +size of the shared global pool in MB.If you doesn't set the value or if +you set a +negative value Apache module doesn't create shared global pool.

+
+
Axis2GlobalPoolSize SIZE_IN_MB

+
+

To ensure that everything works fine, start Apache2 (restart +if it is +already running) and test whether the mod_axis2 module is loaded +correctly by +accessing the URL: http://localhost/axis2/services.
+

+

This should show the list of services deployed with Axis2/C. +Then you +should be able to run clients against this endpoint. Example:

+
+
echo http://localhost/axis2/services/echo

+
+

In case things are not working as expected, here are some tips +on how to +troubleshoot:

+
    +
  • Double check the steps you followed in installing and +configuring mod_axis2. Check if the locations given in httpd.conf are +correct, and also check the folder permissions.
  • +
  • Have a look at the axis2.log file for clues as to what is +going wrong. You can set the log level to debug, user or trace to +gather more information
  • +
  • In case the axis2.log file is not written at all, there is +a good chance that mod_axis2 is crashing. You can have a look at the +error.log file of Apache2 to get an idea on what is going wrong. This +file is usually placed in the APACHE_INSTALL_DIR/logs folder.
  • +
+


+

+

+
+
+
+

12. Deploying with Microsoft IIS Server

+

Use the Axis2/C VC project or makefile to buid the +component. If you are using the makefile to build the source, you have +to run the command

+
+
nmake axis2_iis_module
+
+

In this document I assume that the mod_axis2_IIS.dll +is in the directory c:\axis2c\lib and +AXIS2C_HOME +is c:\axis2c

+

Add the following key to the +registery.

+

HKEY_LOCAL_MACHINE\SOFTWARE\Apache Axis2c\IIS +ISAPI +Redirector

+

Add a string value with the name AXIS2C_HOME +and a +value of c:\axis2c

+

Add a string value with the name log_file +and a value +of c:\axis2c\logs\axis2.log

+

Add a string value with the name log_level. +The value +can be either trace, error, +info, critical, user, +debug, or warning.

+

+You can add a string value with the name services_url_prefix. This is optional and defaults to "/services". +As an example, if you have "/web_services" as the prefix, then all the +services hosted would have the endpoint prefix of :
+http://localhost/axis2/web_services.
Note: don't forget the / at the begining.
+

+

+If you wish, you can also change the location as well by adding a string value with the name axis2_location. This is also optional and defaults to /axis2. +If you have /myserser as the value you can access your web services with a url like http://localhost/myserver/services.
Note: Don't forget the / at the beginning.

+

+ +

Now you can do all the registry editing using the JScript file +axis2_iis_regedit.js provided with the distribution. When you build +axis2/C with the IIS module the file is copied to the root directory of +the binary distribution. Just double click it and everything will be +set to the defaults. The axis2c_home is taken as the current directory, +so make sure you run the file in the Axis2/C repository location (or +root of the binary distribution). If you want to change the values you +can manually edit the the .js file or give it as command line arguments +to the script when running the script. To run the jscript from the +command line use the command :\cscript axis2_iis_regedit.js optional arguments. We recomend the manual editing as it is the easiest way to specify the values.

+

IIS 5.1 or Below

+Using the IIS management console, add a new virtual +directory to your IIS/PWS web site. The name of the virtual directory +must be axis2. Its +physical path should be the directory in which you placed +mod_axis2_IIS.dll (in our example it is +c:\axis2c\lib). When creating this new virtual directory, assign +execute access to it. +

By using the IIS management console, add +mod_axis2_IIS.dll as a filter in your IIS/PWS web site and restart the +IIS +admin service.

+

IIS 6 & 7

+Using the IIS management console, add the mod_axis2_IIS.dll as a +Wildcard Script Map. +
    +
  • Executable should be the complete path to the +mod_axis2_IIS.dll
  • +
  • You can put any name as the name of the Wildcard Script Map
  • +
+

Please don't add the mod_axis2_IIS.dll as a filter to IIS as +in the IIS 5.1 case.

+

Note: If the Axis2/C failed to load, verify that Axis2/C and +its dependent DLLs are in the System Path (not the user path).

+


+

+

+
+
+

13. Using SSL Client

+
+

13.1 Building and Configuring the Client

+

In order to allow an Axis2/C client to communicate with an SSL +enabled +server, we need to compile Axis2/C with SSL support enabled.

+

To build with SSL client support, first of all, make sure you +have +installed OpenSSL +on your machine. Then +you can start building with SSL client support. This can be achieved on +Linux +by configuring Axis2/C with the --enable-openssl=yes +option.

+

Example
+%./configure --enable-openssl=yes --prefix=${AXIS2C_HOME}/deploy
+%make
+%make install
+

+

On MS Windows, set ENABLE_SSL=1 in +the +configure.in file and run the nmake +all command.

+

+
+
+

13.1.1 Creating the Client Certificate Chain File

+

If you need SSL client authentication, Axis2/C requires you to +provide the +client certificate and the private key file in a single file. Such a +file +which contains both the certificate and relevant private key is called +a +certificate chain file. Creating such a file is very easy. Assume that +the +client certificate is stored in a file named client.crt +and the +private key is stored in a file named client.key. +Then the +certificate chain file can be created by concatenating the certificate +file +and the private key file in that order, in to another file, say +client.pem.

+

On Linux you can do this as follows: %cat +client.crt client.key > +client.pem

+

On MS Windows, you can do this by copying the contents of +client.crt and +client.key files and saving them in a file named client.pem using +Notepad.

+
+
+

13.1.2 Configuration

+

Uncomment the following in axis2.xml +to enable https transport receiver and https transport sender. +Axis2/C will then be able to recognize the "https" sheme in a given end +point reference (EPR) and use SSL transport. +

+
+
<transportReceiver name="https" class="axis2_http_receiver">
<parameter name="port" locked="false">6060</parameter>
<parameter name="exposeHeaders" locked="true">false</parameter>
</transportReceiver>
+
+
+
<transportSender name="https" class="axis2_http_sender">
<parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
</transportSender>
+
+

For the SSL client to work, the file containing the CA +certificate should +be given as SERVER_CERT parameter in the +axis2.xml file. If you +need client authentication, you can also set the parameters in the +axis2.xml +file to specify the client certificate, private key, and the passphrase +for +the client private key. Parameter names for these are:

+

KEY_FILE - certificate chain file +containing the client's +certificate and the private key (Please refer to the creating the client certificate chain +file +section)
+SSL_PASSPHRASE - passphrase used to encrypt +the private key +file.

+

Example:

+

<parameter +name="SERVER_CERT">/path/to/ca/certificate</parameter>
+<parameter +name="KEY_FILE">/path/to/client/certificate/chain/file</parameter>
+<parameter +name="SSL_PASSPHRASE">passphrase</parameter>

+

For testing purposes, you can use the server's certificate +instead of the +CA certificate. You can obtain this by running the command openssl +s_client -connect <servername>:<port> +and copying the +portion of the output bounded by and including:

+
+
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

+
+

On Linux, if you run the following piece of code, the server +certificate +will be saved to a file cert.pem:

+
+
echo |\
openssl s_client -connect <servername>:<port> 2>&1 |\
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cert.pem

+
+

NOTE: Instead of setting +these parameters in the axis2.xml +file, you can also set these parameters programmatically in your client +code.

+
+
+

13.2 Configuring the Server

+

Here we will only look at the configuration of the Apache HTTP +Web server. +Refer to the 'Deploying with Apache +HTTP Server Version2.x' section for information on deploying +Axis2/C as an Apache +module.

+

For more detailed information on SSL configuration, please +refer to Apache2 +SSL/TLS +documentation.

+

In the httpd.conf file, add the +following configuration +statements (in addition to other necessary configuration):

+

SSLEngine on
+SSLCertificateFile /path/to/server/certificate/file
+SSLCertificateKeyFile /path/to/private/key/file
+SSLCACertificateFile /path/to/CA/certificate/file
+SSLVerifyClient require
+SSLVerifyDepth 1

+

NOTE: The last two lines, SSLVerifyClient +and +SSLVerifyDepth are only needed when you need +client +authentication.

+


+

+

+
+
+
+

14. Using Proxy Support

+

When using a proxy, there are two methods for specifying proxy +settings:

+
    +
  1. Specify proxy settings in axis2.xml
  2. +
  3. Provide proxy settings using service client API
  4. +
+
+

14.1 Specifying Proxy Settings in axis2.xml

+
+
<transportSender name="http" class="axis2_http_sender">
<parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
<parameter name="PROXY" proxy_host="127.0.0.1" proxy_port="8080" locked="true"/>
</transportSender>

+
+
+
+

14.2 Providing Proxy Settings Using Service Client API

+

You can specify proxy settings using the following function +with the +service client:

+
+
axis2_svc_client_set_proxy(axis2_svc_client_t *svc_client,
const axutil_env_t *env,
axis2_char_t *proxy_host,
axis2_char_t *proxy_port);

+
+


+

+

+
+
+
+

15. Using Proxy Authentication Support

+

When using proxy authentication, there are three methods for +specifying proxy +authentication settings:

+
    +
  1. Specify proxy settings with authentication in axis2.xml
  2. +
  3. Provide proxy settings with authentication using service +client API
  4. +
  5. Provide proxy authentication settings using service client +options
  6. +
+
+

15.1 Specifying Proxy Settings with Authentication in +axis2.xml

+
+
<transportSender name="http" class="axis2_http_sender">
<parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
<parameter name="PROXY" proxy_host="127.0.0.1" proxy_port="8080" proxy_username="" proxy_password="" locked="true"/>
</transportSender>

+
+
+
+

15.2 Providing Proxy Settings with Authentication Using +Service Client API

+

You can specify proxy authentication settings using the +following function with the +service client:

+
+
axis2_svc_client_set_proxy_with_auth(axis2_svc_client_t *svc_client,
const axutil_env_t *env,
axis2_char_t *proxy_host,
axis2_char_t *proxy_port,
axis2_char_t *username,
axis2_char_t *password);

+
+
+
+

15.3 Providing Proxy Authentication Settings Using Service +Client Options

+

You can specify proxy authentication settings using the +following function with the +service client options:

+
+
axis2_options_set_proxy_auth_info(
axis2_options_t * options,
const axutil_env_t * env,
const axis2_char_t * username,
const axis2_char_t * password,
const axis2_char_t * auth_type);
+
+

In auth_type, use Basic +to force Basic Authentication or Digest to force +Digest +Authentication. Leave this field NULL if you are not forcing +authentication.

+
+

15.4 Predetermining Proxy Authentication Details

+

You can also predetermine whether proxy authentication is +required. This can be done by calling the function below:

+
+
axis2_options_set_test_proxy_auth(
axis2_options_t * options,
const axutil_env_t * env,
const axis2_bool_t test_proxy_auth);
+
+

Set test_proxy_auth to AXIS2_TRUE +to enable testing.When testing is enabled, the request will be sent +without without adding authentication information. If it fails, and +requests Authentication Information, the request type of authentication +will be saved. This information can be obtained in the following manner:

+
+
axis2_svc_client_get_auth_type(
const axis2_svc_client_t * svc_client,
const axutil_env_t * env);
+
+

This will return either Basic, Digest +or NULL according to the type of authentiation +requested. In addition to that, after each request made through the +service client, you can check whether authentication was required.

+
+
axis2_svc_client_get_proxy_auth_required(
const axis2_svc_client_t * svc_client,
const axutil_env_t * env);
+
+

Please take a look at the echo_blocking_auth +sample for more information on how to use these methods to identify +proxy Authentication requirements.

+


+

+

+
+
+
+

16. Using HTTP Authentication Support

+

When using HTTP authentication, there are two methods for +specifying proxy +authentication settings:

+
    +
  1. Specify HTTP authentication settings in axis2.xml
  2. +
  3. Provide HTTP authentication settings using service client +options
  4. +
+
+

16.1 Specifying HTTP Authentication Settings in axis2.xml

+
+
<transportSender name="http" class="axis2_http_sender">
<parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
<parameter name="HTTP-Authentication" username="your username" password="your password" locked="true"/>
</transportSender>

+
+
+
+

16.2 Providing HTTP Authentication Settings Using Service +Client Options

+

You can specify HTTP authentication settings using the +following function with the +service client options:

+
+
axis2_options_set_http_auth_info(
axis2_options_t * options,
const axutil_env_t * env,
const axis2_char_t * username,
const axis2_char_t * password,
const axis2_char_t * auth_type);
+
+

In auth_type, use Basic +to force HTTP Basic Authentication or Digest to +force HTTP Digest +Authentication. Leave this field NULL if you are not forcing +authentication.

+
+

16.3 Predetermining HTTP Authentication Details

+

You can also predetermine whether HTTP authentication is +required. This can be done by calling the function below:

+
+
axis2_options_set_test_http_auth(
axis2_options_t * options,
const axutil_env_t * env,
const axis2_bool_t test_http_auth);
+
+

Set test_http_auth to AXIS2_TRUE +to enable testing.When testing is enabled, the request will be sent +without without adding authentication information. If it fails, and +requests Authentication Information, the request type of authentication +will be saved. This information can be obtained in the following manner:

+
+
axis2_svc_client_get_auth_type(
const axis2_svc_client_t * svc_client,
const axutil_env_t * env);
+
+

This will return either Basic, Digest +or NULL according to the type of authentiation +requested. In addition to that, after each request made through the +service client, you can check whether authentication was required.

+
+
axis2_svc_client_get_http_auth_required(
const axis2_svc_client_t * svc_client,
const axutil_env_t * env);
+
+

Please take a look at the echo_blocking_auth +sample for more information on how to use these methods to identify +HTTP Authentication requirements.

+


+

+

+
+
+
+

17. WSDL2C Tool

+

WSDL2C tool that comes with Axis2/Java supports the generation +of Axis2/C +stubs and skeletons for WSDL files. This is a Java tool that can be +used to +generate C code that works with Axis2/C API. You should use Axis2/Java +SVN revision 529533 or later revisions. You can download the Axis2/Java +nightly +build and use those binaries to generate code. Check out a basic +guide on the Java tool.

+

Before you run the tool, make sure that all the .jar library +files that +come with Axis2/Java are added to the CLASSPATH environment variable.

+
+

17.1 Generating Service Skeletons

+

The tool can be run with the following parameters and generate +the service +skeleton and other required files with ADB (Axis Data Binding) support.

+
+
java org.apache.axis2.wsdl.WSDL2C -uri interoptestdoclitparameters.wsdl -ss -sd -d adb -u 

+
+

To understand the meanings of the options used with the tool, +please have +a look at the Java tool +documentation.

+

If you need an XML in/out programming model, you can just +ignore the data +binding support. To generate code with no data binding support, just +replace +-d adb -u, that was used in a previous +command, with -d +none.

+
+
java org.apache.axis2.wsdl.WSDL2C -uri interoptestdoclitparameters.wsdl -ss -sd -d none

+
+

The WSDL file, interoptestdoclitparameters.wsdl, +used in the +above command examples can be found in +<axis2_src_dir>/test/resources +directory.

+

Once the code is generated, you have to implement the business +logic for +the service. For this, locate the skeleton source file from the +generated +files. To identify the locations where you can place your business +logic in +line with the operations defined in the WSDL file that you used to +generate +code, look for the comment lines:

+
+
/* Todo fill this with the necessary business logic */
+
+

You can also go through the generated header files and +understand the API in +line with the WSDL file that you used to generate the code. +

+
+
+

17.2 Generating Client Stubs

+

The WSDL2C code generator tool provides support for generating +client +stubs as well. You can generate the required stubs from a given WSDL +with the +other supporting files. Use following parameters to generate the +Axis2/C +client stub code with ADB support.

+
+
java WSDL2C -uri interoptestdoclitparameters.wsdl -d adb -u

+
+

In order to ignore the data binding support and use a raw XML +in/out +model, just use the following parameters.

+
+
java WSDL2C -uri interoptestdoclitparameters.wsdl -d none

+
+

Like in the case of service skeletons, you have to fill in the +business +logic as required in the client stubs as well. To do this, go through +the +header files generated and understand the API in line with the WSDL +file that +you used to generate the code.

+


+

+

+
+
+
+

18. TCP Transport

+
+

18.1 Building AXIS2C enabling TCP

+

This section will guide you through installing Axis2C with tcp +enabled, and this also includes how to test it by running samples. +Please note that both the Server and the Client must be built with TCP +enabled.

+
+
+

18.1.1 Linux Based Systems

+
    +
  1. When you are installing, you have to use the configure +command with +the option to enable tcp by providing the following argument:
  2. +
    	./configure --enable-tcp=yes
    make
    make install
    +
  3. Then to confirm that you have successfully built the source +with tcp enabled you can check in your $AXIS2C_HOME/lib folder for +following files:
  4. +
    	libaxis2_tcp_sender.so
    libaxis2_tcp_reciever.so
    +
  5. To setup the tcp transport sender, you have to edit the +axis2.xml by uncommenting following entry:
  6. +
    	<transportSender name="tcp" class="axis2_tcp_sender">
    <parameter name="PROTOCOL" locked="false">TCP</parameter>
    </transportSender>
    +
+
+
+

18.1.2 MS Windows Based Systems

+
    +
  1. When you are installing, you have to set the configure +option to enable tcp +by specifying in configure.in:
  2. +
     WITH_TCP = 1
    +
  3. Then to confirm that you have successfully built the source +with tcp enabled you can check in your %AXIS2C_HOME%\lib folder for +following files:
  4. +
    	axis2_tcp_sender.dll
    axis2_tcp_reciever.dll
    +
  5. To setup the tcp transport sender, you have to edit the +axis2.xml by uncommenting following entry:
  6. +
     <transportSender name="tcp" class="axis2_tcp_sender">
    <parameter name="PROTOCOL" locked="false">TCP</parameter>
    </transportSender>
    +
+
+
+

18.2 Server Side

+
    +
  • To run the tcp server on Linux based systems, you have to +start the tcp +server which runs in 9091 as its default port.
  • +
    	cd $AXIS2C_HOME/bin/
    ./axis2_tcp_server
    +
  • To run the tcp server on MS Windows based systems, you have +to start the tcp server as,
  • +
     cd %AXIS2C_HOME%\bin
    axis2_tcp_server.exe
    +
+
+
+

18.2.1 Simple Axis2 TCP Server

+

Simple Axis2 TCP Server is the inbuilt TCP server of Axis2/C.
+

+
+
+

18.2.1.1 Linux Based Systems

+

Synopsis :

+
+
 axis2_tcp_server [-p PORT] [-t TIMEOUT] [-r REPO_PATH] [-l LOG_LEVEL] [-f LOG_FILE] [-s LOG_FILE_SIZE]

+
+

You can use the following options with simple axis TCP server.

+
+
 -p PORT port number to use, default port is 9091
-r REPO_PATH repository path, default is ../
-t TIMEOUT socket read timeout, default is 30 seconds
-l LOG_LEVEL log level, available log levels:
0 - critical 1 - errors 2 - warnings
3 - information 4 - debug 5- user 6 - trace
Default log level is 4(debug).
-f LOG_FILE log file, default is $AXIS2C_HOME/logs/axis2.log
or axis2.log in current folder if AXIS2C_HOME not set
-s LOG_FILE_SIZE Maximum log file size in mega bytes, default maximum size is 1MB.
-h display the help screen.

+
+

Example :

+
+
 axis2_tcp_server -l 3 -p 8080 -r $AXIS2C_HOME -f /dev/stderr

+
+
+
+

18.2.1.2 MS Windows Based Systems

+

Synopsis :

+
+
 axis2_tcp_server.exe [-p PORT] [-t TIMEOUT] [-r REPO_PATH] [-l LOG_LEVEL] [-f LOG_FILE] [-s LOG_FILE_SIZE]

+
+

You can use the following options with simple axis TCP server.

+
+
 -p PORT port number to use, default port is 9091
-r REPO_PATH repository path, default is ../
-t TIMEOUT socket read timeout, default is 30 seconds
-l LOG_LEVEL log level, available log levels:
0 - critical 1 - errors 2 - warnings
3 - information 4 - debug 5- user 6 - trace
Default log level is 4(debug).
-f LOG_FILE log file, default is %AXIS2C_HOME%\logs\axis2.log
or axis2.log in current folder if AXIS2C_HOME not set
-s LOG_FILE_SIZE Maximum log file size in mega bytes, default maximum size is 1MB.
-h display the help screen.

+
+

Example :

+
+
 axis2_tcp_server.exe -l 3 -p 8080 -r %AXIS2C_HOME% -f C:\logs\error.log

+
+
+
+

18.3 Client Side

+
    +
  • In your service client you have to give the end point +address adding tcp as the URI Schema name in the client's code.
  • +
    tcp://[service_hostname]:[service_port]/axis2/services/your_service_name
    +
  • You can use TCPMon to figure out how the message is +transferred (without having it's http headers) after you've built +Axis2C enabling tcp.
  • +
+


+

+

+
+
+
+

19. AMQP Transport

+
+

19.1 Building AXIS2C enabling AMQP

+

This section will guide you through installing Axis2C with +AMQP +enabled, and this also includes how to test it by running samples. +Please note that both the Server and the Client must be built with AMQP +enabled.

+
+
+

19.1.1 Linux Based Systems

+
    +
  1. When you are installing, you have to use the configure +command with +the option --with-qpid as follows
  2. +
     ./configure --with-qpid=path/to/qpid home
    make
    make install
    +
  3. Then to confirm that you have successfully built the source +with AMQP enabled you can check in your $AXIS2C_HOME/lib folder for +following files:
  4. +
     libaxis2_qmqp_sender.so
    libaxis2_amqp_reciever.so
    +
  5. To setup the AMQP transport, you have to edit the +axis2.xml and add the following entries:
  6. +
     <transportReceiver name="amqp" class="axis2_amqp_receiver">
    <parameter name="qpid_broker_ip" locked="false">127.0.0.1</parameter>
    <parameter name="qpid_broker_port" locked="false">5672</parameter>
    </transportReceiver>

    <transportSender name="amqp" class="axis2_amqp_sender"/>
    +
+
+
+

19.1.2 MS Windows Based Systems

+Axis2/C does not support AMQP transport on Windows. +
    +
+
+
+

19.2 Server Side

+Start the Qpid broker as follows.
+
+
$ cd ${QPID_HOME}/sbin
$ ./qpidd --data-dir ./
+
+Start the axis2_amqp_server as follows.
+
+
$ cd ${AXIS2C_HOME}/bin
$ ./axis2_amqp_server
+You should see the message
+                 Started +Simple Axis2 AMQP Server...
+
+This will connect to the Qpid broker listening on 127.0.0.1:5672.
+To see the possible command line options run
+
+
$ ./axis2_amqp_server -h
+
+NOTE : You have the flexibility of starting the Qpid broker first and +then axis2_amqp_server or vise versa.
+
+
+

19.2.1 Simple Axis2 AMQP Server

+

Simple Axis2 AMQP Server is the inbuilt AMQP server of Axis2/C.
+

+
+
+

19.2.1.1 Linux Based Systems

+

Synopsis :

+
+
 axis2_amqp_server [-i QPID_BROKER_IP] [-p QPID_BROKER_PORT] [-r REPO_PATH] [-l LOG_LEVEL] [-f LOG_FILE] [-s LOG_FILE_SIZE]

+
+

You can use the following options with simple axis AMQP server.

+
+
 -i IP where the Qpid broker is running, default IP is 127.0.0.1
-p PORT port number the Qpid broker listens on, default port is 5672
-r REPO_PATH repository path, default is ../
-l LOG_LEVEL log level, available log levels:
0 - critical
1 - errors
2 - warnings
3 - information
4 - debug
5- user
6 - trace
Default log level is 4(debug).
-f LOG_FILE log file, default is $AXIS2C_HOME/logs/axis2.log or axis2.log in current folder if AXIS2C_HOME not set
-s LOG_FILE_SIZE Maximum log file size in mega bytes, default maximum size is 1MB.
-h display the help screen.

+
+

Example :

+
+
 axis2_amqp_server -i 127.0.0.1 -p 5050 -r $AXIS2C_HOME -f /dev/stderr

+
+
+
+

19.3 Client Side

+
    +
+

+When the axis2_amqp_server is up and running, you can run the sample +clients in a new shell as follows.
+
+

+
$ cd ${AXIS2C_HOME}/samples/bin/amqp

$ ./echo_blocking
+This will invoke the echo service.
+
+To see the possible command line options for sample clients run them +with '-h' option
+

+
+
+
+

20. Archive Based Deployment

+

Axis2/C supports two main deployment models,
+

+
    +
  1. Directory Based Deployment
  2. +
  3. Archive Based Deployment
  4. +
+Our discussion in this section focuses on how to setup and use archive +based deployment in Axis2/C. By default, Axis2/C may be built without +enabling archive based deployment. Therefore, first and foremost you +will have to most probably rebuild from source. +

Also, it is requirement that you have zlib. Most Linux systems +do have zlib by default, but would require zlib development packages. +More information can be found here. +For MS Windows systems, you can download it from here.

+

Next, you will have to build Axis2/C enabling Archive Based +Deployment. On Linux, you need to set the --with-archive=[path_to_zlib_headers]

+

Example:
+%./configure --with-archive=/usr/include/ --prefix=${AXIS2C_HOME}/deploy
+%make
+%make install
+

+

On MS Windows, set WITH_ARCHIVE = 1 +in the +configure.in file and run the nmake +all command. Please note that you have to specify the +directory where you can find the zlib binary, for a MS Windows system. +This can be done by setting the ZLIB_BIN_DIR +in the +configure.in file.

+
+
+

20.1 Deploying Services

+

Once you have successfully completed the installation, you +will have to deploy services as archives in order to make use of this +deployment model. Please note that directory based deployment can +coexist with the archive based deployment model. Therefore, you can +alternatively use either of the two.

+

+

You will merely have to add your existing service libraries +and the services.xml file into an archive. For example, in order to +deploy the sample echo service as an archive, you can zip the echo +folder found in the AXIS2C_BIN_DIR/services +directory. You can optionally rename your zip file, to have the .aar +extension.

+

Please note that all such services deployed as archives should +also be placed inside the AXIS2C_BIN_DIR/services +directory. Now, when ever you start your Simple Axis2 Server, or any +Axis2/C module attached to any other server, your services deployed as +archives, will also get loaded. +

+
+
+

20.2 Deploying Modules

+

Similar to services, you also can deploy modules as archives. +You also can optionally rename your zip files to have the extension, .mar +as in service archives.

+

Your module archives must be placed in the AXIS2C_BIN_DIR/modules +directory.

+
+
+

20.3 Known Issues

+

Please note that there are a few known issues when running +archive based deployment, mainly on Linux based systems.
+

+
    +
  • If you want to run both client and server from same +respository, assign super-user privilideges for your server in order to +prevent un-zipped files getting overwritten, which will in return cause +a segmentation fault on your server. +

    +
  • +
  • Please make sure that the application you choose to create +archives preserves executable rights, and symbolic links of libraries +that are found inside the archive, once unzipped.
  • +
+


+

+

+
+
+
+

21. TCPMon Tool

+

TCPMon is a TCP Monitor tool provided by Axis2/C for +monitoring payloads exchanged between client and server. If you are +using a source distribution, this may or may not be built for you by +default. Thus, to get started, you may require building it from source.

+

On Linux

+
+
	./configure --prefix=${AXIS2C_HOME} --enable-tests=no
make
+
+

On MS Windows

+
+
	nmake tcpmon
+
+

Please note that in most Linux based installations, this will +most probably be built for you. Once you've done with the building +process, you can find the executable at ${AXIS2C_HOME}/bin/tools +on Linux, or at %AXIS2C_HOME%\bin\tools on MS +Windows.

+

By default, the TCPMon tool will listen on port 9090 +and reply to port 8080. +The default target host will be localhost +and tcpmon_traffic.log +will be the default log_file. If you want to change any of these +settings run ./tcpmon -h on Linux, or tcpmon.exe +-h on MS Windows for more information.

+

The TCPMon tool does depend on the Axis2/C Util, Axis2/C AXIOM +and Axis2/C Parser libraries. Thus, if you want to use TCPMon to +monitor payloads in any other message transfer, independant of the +Axis2/C engine, you will have to build those dependant libraries too. +In addition to that, TCPMon does not depend on the Axis2/C Core and +installing the Axis2/C engine is not always a pre-requisite to run +TCPMon. +

+


+

+

+
+
+
+

Appendix A - axis2.xml

+

The axis2.xml file is the configuration file for Axis2/C. It +has 6 top +level elements. They are parameter, transportReceiver, +transportSender, +module, phaseOrder and messageReceiver. +The following sections +describe these elements, their sub elements, element attributes, +possible +values, and their purpose.

+

axisconfig +is the root element of axis2.xml +file.

+ + + + + + + + + + + +
AttributePossible Values
nameAxis2/C
+
+

parameter

+

In Axis2/C, a parameter is a name value pair. Each and every +top level +parameter available in the axis2.xml (direct sub elements of the root +element) will be stored as parameters as axis2_conf. +Therefore, +the top level parameters set in the configuration file can be accessed +via +the axis2_conf instance in the running system.

+

Sub elements :- none

+

Attributes :- name, locked

+ + + + + + + + + + + + + + + +
AttributeDescription
nameName of the parameter. The table below shows possible +values of the name attribute and their description. + + + + + + + + + + + + + + + + + + +
ValueDescriptionPossible Text of Parameter Element
enableMTOMEnable MTOM support when sending binary +attachmentstrue or false
enableRESTEnable REST supporttrue or false
+
lockedIndicates whether the parameter can be changed from the +code. Following are the possible values for the locked attribute. + + + + + + + + + + + + + + + +
ValueDescription
trueThe parameter cannot be changed from the code
falseThe parameter can be changed from the code.
+
+
+
+

transportReceiver

+

This element specifies the transport receiver details in an +IN-OUT message +exchange scenario. The users can change the transport receiver port as +they +wish.

+

Attributes :- name, class

+ + + + + + + + + + + + + + + + + + +
AttributeDescriptionPossible Values
nameSpecifies which transport protocol is usedhttp (when using HTTP)
classSpecifies the shared library which implements the +transport interfaceName of the shared library. +

Example:- On Linux if the value is given as foo +then shared library is libfoo.so.

+

On MS Windows, foo.dll.

+
+

+

Sub elements :- can have zero or more parameter elements.

+


+The following table shows possible parameter values.

+ + + + + + + + + + + + + + + +
AttributeDescription
nameName of the parameter. + + + + + + + + + + + + + + + + + + +
ValueDescriptionPossible Text of Parameter Element
portTransport listener portInteger specifying the port number
exposeHeadersWhether Transport Headers are exposed to a Servicetrue/false
+
lockedwhether the parameter can be changed from the code + + + + + + + + + + + + + + + +
ValueDescription
trueParameter cannot be changed from the code
falseThe parameter can be changed from the code.
+
+

+

+
+
+

transportSender

+

This element specifies the transport senders used to send +messages.

+

Attributes :- name, class

+ + + + + + + + + + + + + + + + + + +
AttributeDescriptionPossible Values
nameSpecifies which transport protocol is used when sending +messageshttp(when using http)
classSpecifies the shared library which implements the +transport interface +

Name of the shared library.

+

Example:- On Linux if the value is given as foo +then the shared library is libfoo.so.

+

On MS Windows, foo.dll.

+
+

+

Sub elements : can have zero or more parameter elements.

+


+The following table shows possible parameter values.

+ + + + + + + + + + + + + + + +
AttributeDescription
nameThe name of the parameter. + + + + + + + + + + + + + +
ValueDescriptionPossible text of parameter element
PROTOCOLTransport protocol usedProtocol version. Example:- HTTP /1.1, HTTP/1.0
+
lockedIndicates whether the parameter can be changed from the +code. + + + + + + + + + + + + + + + +
ValueDescription
trueThe parameter cannot be changed from the code
falseThe parameter can be changed from the code.
+
+

+
+
+

module

+

This element is optional. It is used when a particular module +needs to be +engaged globally for every service deployed with Axis2/C.

+ + + + + + + + + + + + + +
AttributesDescriptionPossible Values
refThe name of the module which is to be engaged globally.Name of the module. +

Example : addressing

+
+

+
+
+

phaseOrder

+

The order of phases in a particular execution chain has to be +configured +using phaseOrder element.

+ + + + + + + + + + + + + +
AttributeDescriptionPossible Values
typeThe flow to which the phase belongsinflow +

outflow

+

INfaultflow

+

Outfaultflow

+
+

A flow is a collection of handlers which is invoked for a +particular +message. The types of flows are described below.

+ + + + + + + + + + + + + + + + + + + + + + + +
FlowDescription
inflowCollection of handlers invoked for a message coming in +to the system.
outflowCollection of handlers invoked for a message going out +of the system.
INfaultflowCollection of handlers invoked for an incoming fault +message.
OutfaultflowCollection of handlers invoked for an outgoing fault +message.
+

Sub elements : phase: represents the +available phases in the +execution chain

+

The system predefined phases cannot be changed.

+

The system predefined phases are,

+
    +
  • Transport
  • +
  • PreDispatch
  • +
  • Dispatch
  • +
  • PostDispatch
  • +
  • MessageOut
  • +
+ + + + + + + + + + + + + +
AttributeDescriptionPossible Values
nameSpecifies the name of the phaseTransport, Dispatch, PreDispatch, PostDispatch, +MessageOut +

User defined phases (can have a user defined name)

+
+

Sub elements of phase element: handler

+ + + + + + + + + + + + + + + + + + +
AttributeDescriptionPossible Values
nameSpecifies the handler name. Phase may contain zero or +more handlers.Based on the handler name. +

Example: AddressingbasedDispatcher, +RequestURIbaseddispatcher

+
classSpecifies the shared library which implements the +handler +

Name of the shared library.

+

Example: On Linux, if the value is given as foo, +then the shared library is libfoo.so.

+

On MS Windows, foo.dll.

+
+
+
+

messageReceiver

+

+ + + + + + + + + + + + + + + + + + +
AttributeDescriptionPossible Values
mepMessage Exchange PatternIN-OUT, IN-ONLY
classSpecify the shared library which implements the +transport interface. +

If not specified, the Axis2/C default message receiver +is used.

+
Name of the shared library. +

Example: On Linux, if the value is given as foo, +then the shared library is libfoo.so.

+

On MS Windows, foo.dll.

+
+


+

+

+
+
+
+

Appendix B - services.xml

+

Configuration of a service is specified using a services.xml. +Each service +or service archive file needs to have a services.xml in order to be a +valid +service. The following sections describe the elements of the +services.xml +file.

+

If services.xml describes a single service, the root element +is +service. If it is describing a service group, then +the root element +is serviceGroup. The service +element will be a child +element of serviceGroup if there are multiple services specified in +services.xml.

+
+ + + + + + + + + + + + + +
AttributesDescriptionPossible Values
nameName of the service or service group.Depends on the service or the service group.
+Examples: echo, sg_math
+

+
+
+

This is optional. This element can be used to describe the +service in a +human readable format.

+

+
+
+

This is optional. Can be used to engage modules at service +level.

+ + + + + + + + + + + + + +
AttributesDescriptionPossible Values
refName of the module which is to be engaged for the +serviceName of the module which is to be engaged at service +level.
+

+

+
+
+

The service element can have any number of parameters as sub +elements.

+ + + + + + + + + + + + + + + +
AttributeDetail
name + + + + + + + + + + + + + + + + + + + + + + + +
DescriptionPossible ValueParameter Value
Specifies the name of the shared library that +holds the service implementationserviceClassthe service name. Example: echo
Path of static WSDL to be attached with servicewsdl_pathAbsolute path or path relative to AXIS2C_HOME/bin
Default HTTP Method used in a REST invocationdefaultRESTMethodOne of GET, POST, HEAD, PUT or DELETE
+
locked + + + + + + + + + + + +
DescriptionPossible Value
Indicates whether the parameter can be changed +from the codetrue/false
+
+

+
+
+

The operations of the service are specified using operation +elements.

+ + + + + + + + + + + + + + + + + + + +
AttributesDescriptionPossible Values
namename of the operationExample: echoString
mepmessage exchange pattern uri.

This is defaulted to in-out MEP. For other MEPs, You need to specify the MEP.

Example: "http://www.w3.org/2004/08/wsdl/in-only"
+

Sub elements of operation: parameter +elements can be +present as sub elements. Zero or more parameters may be present.

+ + + + + + + + + + + +
AttributeDetail
name + + + + + + + + + + + + + + + + + + + + + + + +
DescriptionPossible ValueParameter Value
WS-Addressing action mapping to the operationwsamappingA URL representing the WS-Addressing action +corresponding to the operation
REST template mapping to the operationRESTLocationA template of the expected URL for the operation, +with compulsary parts and optional parts, well defined
HTTP Method used in a REST invocationRESTMethodOne of GET, POST, HEAD, PUT or DELETE
+
+

Also, an operation element can have one +or more actionMapping element as sub elements.

+ + + + + + + + + + + +
DescriptionPossible Values
Action mapping or an alias to an operationExample: echoString
+

+
+
+

An operation specific message receiver is specified from this. +This is +optional.

+ + + + + + + + + + + + + +
AttributesDescriptionPossible Values
classShared library with the message receiver implementationName of the shared library. +

Example: On Linux, if the value is given as foo, +then the shared library is libfoo.so.

+

On MS Windows, foo.dll.

+
+


+

+

+
+
+
+

Appendix C - module.xml

+

The module.xml file provides the configuration details for a +particular +module in Axis2/C. The top level element is module.

+
+

module

+ + + + + + + + + + + + + + + + + + +
AttributesDescriptionPossible Values
nameName of the moduleExample- addressing
classSpecifies the shared library which implements the +module.Name of the shared library. +

Example- On Linux, if the value is given as foo, +then the shared library is libfoo.so.

+

On MS Windows, foo.dll.

+
+

+

Other elements are child elements of module.

+

+
+
+

parameter

+

Any number of parameters can be present, depending on the +module.

+ + + + + + + + + + + + + + + + + + +
AttributesDescriptionPossible Values
nameName of the parameterDepends on the module
lockedIndicates whether the parameter can be changed from the +codetrue - cannot be changed +

false - can be changed

+
+

+
+
+

Description

+

Describes the behavior of the module. This element is optional +and has no +attributes or sub elements.

+
+
+

inflow

+

Encapsulates details added to the in-flow by the module. Zero +or one +element is possible and does not have any attributes.

+

Sub elements of inflow : handler, +contains details about +the module specific handlers added to a particular flow. Zero or more +handlers can be added.

+ + + + + + + + + + + + + + + + + + +
AttributesDescriptionPossible Values
nameName of the handlerDepends on the handlers in the module.
classSpecifies the shared library which implements the +handler +

Name of the shared library.

+

Example: On Linux, if the value is given as foo, +then the shared library is libfoo.so.

+

On MS Windows, foo.dll.

+
+

+

sub elements of handler : order, +specifies where to put +a handler in a particular phase.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionPossible Values
phaseThe name of the phase the handler belongs todepends on the handler
phaseLastIndicates that the handler is the last handler of the +phasetrue
phaseFirstIndicates that the handler is the first handler of the +phase.true
beforeHandler should be invoked before the handler, which is +specified by the before handlerhandler name
afterHandler should be invoked after the handler, which is +specified by the after handlerhandler name
+

From the above attributes, phase is compulsory. Given below +are +combinations possible from the other four attributes.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
CombinationDescription
phaseLastIndicates that the handler is the last handler of the +phase
phasefirstIndicates that the handler is the first handler of the +phase.
beforeHandler should be invoked before the handler, which is +specified by the before handler
afterHandler should be invoked after the handler, which is +specified by the after handler
before & afterHandler should be invoked before the handler specified +by the before handler, and +

after the handler specified by the after handler.

+
+

outflow, INfaultflow, +OUTfaultflow elements +have the same syntax as that of inflow.

+
+
+

operation

+

This is used when a module wants to add operations to a +service that +engages the module.

+ + + + + + + + + + + + + + + + + + +
AttributesDescriptionPossible Values
nameName of the operation (compulsory)Depends on the module
mepMessage Exchange PatternIN-OUT, IN-ONLY
+

Sub elements of operation : Any number +of parameters can be +included as sub elements in the operation element.

+

The messageReceiver parameter specifies +the message receiver the +message is intended for. If it is not set, the default message receiver +is +used.

+


+

+

+
+
+
+

Appendix D - axis2_options

+

This section describes various types of options that can be +set with +axis2_options. These options are used by the +service client +before sending messages.

+

axis2_options_set_action(options, env, action)

+

Sets the WS-Addressing action that is to be set in the +addressing SOAP +headers.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct
const axutil_env_t *envPointer to the environment struct
const axis2_char_t *actionPointer to the action string
+

+

axis2_options_set_fault_to(options, env, +fault_to)

+

Sets the end point reference which may receive the message in +a case of a +SOAP fault.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
axis2_endpoint_ref_t *fault_toPointer to the endpoint reference struct representing +the fault to address.
+

+

axis2_options_set_from(options, env, from)

+

Some services need to know the source from which the message +comes. This +option sets the from endpoint

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
axis2_endpoint_ref_t *fromPointer to the endpoint reference struct representing +the from address.
+

axis2_options_set_to(options, env, to)

+

Sets the endpoint reference the message is destined to.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
axis2_endpoint_ref_t *toPointer to the endpoint reference struct representing +the to address.
+

axis2_options_set_transport_receiver(options, +env, +receiver)

+

Sets the transport receiver in an OUT-IN message exchange +scenario.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
axis2_transport_receiver_t *receiverPointer to the transport receiver struct.
+

axis2_options_set_transport_in(options, env, +transport_in)

+

Sets the transport-in description.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
axis2_transport_in_desc_t *transport_inPointer to the transport_in struct.
+

+

axis2_options_set_transport_in_protocol(options, +env, +transport_in_protocol)

+

Sets the transport-in protocol.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
const AXIS2_TRANSPORT_ENUMS transport_in_protocolThe value indicating the transport protocol.
+

+

axis2_options_set_message_id(options, env, +message_id)

+

Sets the message ID.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsThe pointer to the options struct.
const axutil_env_t *envThe pointer to the environment struct.
const axis2_char_t *message_idThe message ID string.
+

+

axis2_options_set_properties(options, env, +properties)

+

Sets the properties hash map.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
axis2_hash_t *propertiesPointer to the properties hash map.
+

+

axis2_options_set_property(options, env, key, +property)

+

Sets a property with a given key value.

+ + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
const axis2_char_t *property_keyThe property key string.
const void *propertyPointer to the property to be set.
+

+

axis2_options_set_relates_to(options, env, +relates_to)

+

Sets the relates-to message information.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
axis2_relates_to_t *relates_toPointer to the relates_to struct.
+

+

axis2_options_set_reply_to(options, env, +reply_to)

+

Sets the reply-to address, when the client wants a reply to be +sent to a +different end point.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
axis2_endpoint_ref_t *reply_toPointer to the endpoint reference struct representing +the reply-to address.
+

+

axis2_options_set_transport_out(options, env, +transport_out)

+

Sets the transport-out description.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
axis2_transport_out_desc_t *transport_outPointer to the transport-out description struct.
+

+

axis2_options_set_sender_transport(options, env, +sender_transport, +conf)

+

Sets the sender transport.

+ + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
const AXIS2_TRANSPORT_ENUMS sender_transportThe name of the sender transport to be set.
axis2_conf_t *confPointer to the conf struct. It is from the conf that +the transport is picked with the given name.
+

+

axis2_options_set_soap_version_uri(options, env, +soap_version_uri)

+

Sets the SOAP version URI.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
const axis2_char_t *soap_version_uriURI of the SOAP version to be set.
+

+

axis2_options_set_timeout_in_milli_seconds(options, +env, +timeout_in_milli_seconds)

+

Sets the time out in milli seconds. This is used in +asynchronous message +exchange scenarios to specify how long the call back object is to wait +for +the response.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
const long timeout_in_milli_secondsTimeout in milli seconds.
+

+

axis2_options_set_transport_info(options, env, +sender_transport, +receiver_transport, user_separate_listener)

+

Sets the transport information. Transport information includes +the name of +the sender transport, name of the receiver transport, and whether a +separate +listener is to be used to receive a response.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
const AXIS2_TRANSPORT_ENUMS sender_transportName of the sender transport to be used.
const AXIS2_TRANSPORT_ENUMS receiver_transportName of the receiver transport to be used.
const axis2_bool_t use_separate_listenerbool value indicating whether to use a separate +listener or not.
+

+

axis2_options_set_use_separate_listener(options, +env, +use_separate_listener)

+

Sets the bool value indicating whether to use a separate +listener or not. +A separate listener is used when the transport is a one-way transport +and the +message exchange pattern is two way.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
const axis2_bool_t use_separate_listenerbool value indicating whether to use a separate +listener or not
+

+

axis2_options_set_soap_version(options, env, +soap_version)

+

Sets the SOAP version.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
const int soap_versionSOAP version, either AXIOM_SOAP11 or AXIOM_SOAP12.
+

+

axis2_options_set_enable_mtom(options, env, +enable_mtom)

+

Enable or disable MTOM handling when sending binary +attachments.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
axis2_bool_t enable_mtomAXIS2_TRUE if MTOM is to be enabled, else AXIS2_FALSE
+

+

axis2_options_set_enable_rest(options, env, +enable_rest)

+

Enable or disable REST support.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
axis2_bool_t enable_restAXIS2_TRUE if REST is to be enabled, else AXIS2_FALSE
+

axis2_options_set_http_auth_info(options, env, +username, password, auth_type)

+

Sets HTTP Authentication information.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
const axis2_char_t *usernameString representing username
const axis2_char_t *passwordString representing password.
const axis2_char_t *auth_typeuse "Basic" to force basic authentication and "Digest" +to force digest authentication or NULL for not forcing authentication
+

axis2_options_set_proxy_auth_info(options, env, +username, password, auth_type)

+

Sets Proxy Authentication information.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
const axis2_char_t *usernameString representing username
const axis2_char_t *passwordString representing password.
const axis2_char_t *auth_typeuse "Basic" to force basic authentication and "Digest" +to force digest authentication or NULL for not forcing authentication
+

axis2_options_set_test_http_auth(options, env, +test_http_auth)

+

Enables testing of HTTP Authentication information.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
const axis2_bool_t test_http_authbool value indicating whether to test or not, +AXIS2_TRUE to enable, AXIS2_FALSE to disable
+

axis2_options_set_test_proxy_auth(options, env, +test_proxy_auth)

+

Enables testing of proxy Authentication information.

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
axis2_options_t *optionsPointer to the options struct.
const axutil_env_t *envPointer to the environment struct.
const axis2_bool_t test_proxy_authbool value indicating whether to test or not, +AXIS2_TRUE to enable, AXIS2_FALSE to disable
+
+
+
+
+ + diff --git a/xdocs/docs/faq.html b/xdocs/docs/faq.html new file mode 100644 index 0000000..7336a7a --- /dev/null +++ b/xdocs/docs/faq.html @@ -0,0 +1,200 @@ + +Apache Axis2/C - FAQ + + + + +

Apache Axis2/C Frequently Asked Questions

+

Mentioned below are a list of Frequently Asked Questions +appearing on Axis2/C mailing +lists, and Forums.

+

For questions not appearing below, or for any further +clarifications please do not hesitate to contact the Apache Axis2/C +user mailing list: axis-c-user@ws.apache.org +(Subscription details are available on the Axis2 +site.) Please +remember to prefix the subject with [Axis2].

+


+

+ +

Contents

+
    +
  1. Introduction +
      +
    1. What is Axis2/C?
    2. +
    3. Licensing
    4. +
    5. How can I obtain +Axis2/C?
    6. +
    7. How can I get involved?
    8. +
    +
  2. +
  3. Support +
      +
    1. Does Axis2/C support +code generation?
    2. +
    3. Does Axis2/C support +SSL?
    4. +
    5. Does Axis2/C support +compression?
    6. +
    7. Does Axis2/C support +SOAP Session management?
    8. +
    9. Can I use Axis2/C with +a proxy?
    10. +
    11. Does Axis2/C work on my platform?
    12. +
    +
  4. +
  5. How to? +
      +
    1. How can I enable the +Guththila parser?
    2. +
    3. How do I turn off MTOM +globally?
    4. +
    5. How can I use Axis2/C +with C++?
    6. +
    7. How could I secure SOAP +messages?
    8. +
    +
  6. +
  7. Why do? +
      +
    1. Why do I get an +"Unresolved external symbol" error?
    2. +
    3. Why can't I run the +samples?
    4. +
    5. libxml2 is installed +but I get "libxml2 not found"?
    6. +
    +
  8. +
+


+

+ +

1. Introduction

+

+ +

1.1 What is Axis2/C?

+

Apache Axis2/C is a web services engine implemented in the C +programming language based around the Axis2 architecture. Axis2/C can +be used to provide and consume web services. It has been implemented +with portablity and the ability to embed and could readily be used as a +web services enabler for other software.

+ +

1.2 Licensing

+

Apache Axis2/C is released under the Apache 2.0 +License, a copy of the License is found in the LICENSE file +found in your distribution. Apache Axis2/C also depends on several +other projects of which licensing information are also included in the +LICENSE file.

+ +

1.3 How can I obtain Axis2/C?

+

Apache Axis2/C can be freely downloaded at the Axis2/C +Download Page or at any other mirror. Please note that +Axis2/C source and binary packages are tailor made to suit specific +classes of operating systems. Please make sure to choose the one that +best fits your requirement as well as your operating system.

+ +

1.4 How can I get involved?

+

Apache Axis2/C is a result of a highly involved list of apache +committers, developers, as well as a keen group of users. For more +information on our team, and how to get involved, please visit our Team Page.

+


+

+ +

2. Support

+

+ +

2.1 Does Axis2/C support code generation?

+

Yes, Axis2/C supports code generation using the WSDL2C tool. +Information on how to use this tool can be found in our documentation.

+ +

2.2 Does Axis2/C support SSL?

+

Yes, Axis2/C supports SSL enabled communication. More +information can be found in our documentation.

+ +

2.3 Does Axis2/C support compression?

+

Axis2/C itself does not support compression. If you are using +mod_axis2 and the Apache HTTP server, you can also mod_deflate for +compression. Also, you can enable compression by using libcurl as the +http sender on the client side.

+ +

2.4 Does Axis2/C support SOAP Session management?

+

No, there is no support for SOAP Sessions in Axis2/C.

+ +

2.5 Can I use Axis2/C with a proxy?

+

Yes. This requires a few changes to the axis2.xml file. +Information about this can be found in our documentation.

+

2.6 Does Axis2/C work on my platform?

+

Currently Axis2/C has been ported to following platforms.
+1. Linux based distributions(Debian, Ubuntu, Redhat Linux etc...,)
+2. Sun Solaris 10(intel)
+3. Mac OS X
+4. Microsoft Windows
+Patches are welcome! +


+

+ +

3. How to?

+

+ +

3.1 How can I enable the Guththila parser?

+

In Windows you have to put the ENABLE_GUTHTHILA = +1 in the build/win32/configure.in +file. In Linux you have to specify the configuration option --enable-guththila=yes. +In a Microsoft Visual Studion Project (VC Project) this is little bit +difficult. You have to add the guththila project to the existing +Axis2/C solution. Then in the axis2_parser project, we have to remove +the libxml wrapper files and add the guththila_wrapper files. Also in +the axis2_parser project we have to change the include files and linker +input files (libs) to corresponding guththila files (guththila.lib +and guththila/include).

+ +

3.2 How do I turn off MTOM globally?

+

MTOM can be disabled by commenting out the following line from +your axis2.xml. +(<parameter name="enableMTOM" +locked="false">true</parameter>)

+ +

3.3 How can I use Axis2/C with C++?

+

Just add the following code to your C source files and then +use a C++ compiler. +

+
 #ifdef __cplusplus 
extern "C"{
#endif
/* YOUR C CODE HERE */
#ifdef __cplusplus
}
#endif
+ +

3.4 How could I secure SOAP messages?

+

To secure SOAP messages, you need to engage Apache Rampart/C +as a module, which can be downloaded from here. +Please refer the installation +guide and configuration +guide for more details.

+


+

+ +

4. Why do?

+

+ +

4.1 Why do I get an "Unresolved external symbol" error?

+

Make sure that your AXIS2C_HOME/lib +directory is added to your PATH Environment +Variable.

+ +

4.2 Why can't I run the samples?

+

This is usually because the AXIS2C_HOME +Environment Variable is not set to the correct path. Make sure that it +is set to your Axis2/C installation path.

+ +

4.3 libxml2 is installed but I get "libxml2 not found"?

+

Make sure that you have installed the libxml2-dev packages.

+

1. If you are using a +Debian based system run
        $ apt-get install libxml2-dev
+

+

2. If you are +using a RedHat/Fedora based system run
+        $ yum install +libxml2-dev
+

3. If you install libxml2 from source +you will not get this error
+
+

+
+
+ diff --git a/xdocs/docs/hello/client/hello.c b/xdocs/docs/hello/client/hello.c new file mode 100644 index 0000000..1cd6760 --- /dev/null +++ b/xdocs/docs/hello/client/hello.c @@ -0,0 +1,154 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +axiom_node_t *build_om_request( + const axutil_env_t * env); + +const axis2_char_t *process_om_response( + const axutil_env_t * env, + axiom_node_t * node); + +int +main( + int argc, + char **argv) +{ + const axutil_env_t *env = NULL; + const axis2_char_t *address = NULL; + axis2_endpoint_ref_t *endpoint_ref = NULL; + axis2_options_t *options = NULL; + const axis2_char_t *client_home = NULL; + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *payload = NULL; + axiom_node_t *ret_node = NULL; + + env = axutil_env_create_all("hello_client.log", AXIS2_LOG_LEVEL_TRACE); + + options = axis2_options_create(env); + + address = "http://localhost:9090/axis2/services/hello"; + if (argc > 1) + address = argv[1]; + if (axutil_strcmp(address, "-h") == 0) + { + printf("Usage : %s [endpoint_url]\n", argv[0]); + printf("use -h for help\n"); + return 0; + } + printf("Using endpoint : %s\n", address); + endpoint_ref = axis2_endpoint_ref_create(env, address); + axis2_options_set_to(options, env, endpoint_ref); + + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home || !strcmp(client_home, "")) + client_home = "../.."; + + svc_client = axis2_svc_client_create(env, client_home); + if (!svc_client) + { + printf("Error creating service client\n"); + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + return -1; + } + + axis2_svc_client_set_options(svc_client, env, options); + + payload = build_om_request(env); + + ret_node = axis2_svc_client_send_receive(svc_client, env, payload); + + if (ret_node) + { + const axis2_char_t *greeting = process_om_response(env, ret_node); + if (greeting) + printf("\nReceived greeting: \"%s\" from service\n", greeting); + + axiom_node_free_tree(ret_node, env); + ret_node = NULL; + } + else + { + AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, + "Stub invoke FAILED: Error code:" " %d :: %s", + env->error->error_number, + AXIS2_ERROR_GET_MESSAGE(env->error)); + printf("hello client invoke FAILED!\n"); + } + + if (svc_client) + { + axis2_svc_client_free(svc_client, env); + svc_client = NULL; + } + + if (env) + { + axutil_env_free((axutil_env_t *) env); + env = NULL; + } + + return 0; +} + +axiom_node_t * +build_om_request( + const axutil_env_t * env) +{ + axiom_node_t *greet_om_node = NULL; + axiom_element_t *greet_om_ele = NULL; + + greet_om_ele = + axiom_element_create(env, NULL, "greet", NULL, &greet_om_node); + axiom_element_set_text(greet_om_ele, env, "Hello Server!", greet_om_node); + + return greet_om_node; +} + +const axis2_char_t * +process_om_response( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *service_greeting_node = NULL; + axiom_node_t *return_node = NULL; + + if (node) + { + service_greeting_node = axiom_node_get_first_child(node, env); + if (service_greeting_node && + axiom_node_get_node_type(service_greeting_node, env) == AXIOM_TEXT) + { + axiom_text_t *greeting = + (axiom_text_t *) + axiom_node_get_data_element(service_greeting_node, env); + if (greeting && axiom_text_get_value(greeting, env)) + { + return axiom_text_get_value(greeting, env); + } + } + } + return NULL; +} diff --git a/xdocs/docs/hello/client/hello.c.html b/xdocs/docs/hello/client/hello.c.html new file mode 100644 index 0000000..505adc4 --- /dev/null +++ b/xdocs/docs/hello/client/hello.c.html @@ -0,0 +1,147 @@ + +Apache Axis2/C - hello.c
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */

+
+#include <stdio.h>
+#include <axiom.h>
+#include <axis2_util.h>
+#include <axiom_soap.h>
+#include <axis2_client.h>
+
+axiom_node_t *
+build_om_request(const axutil_env_t *env);
+
+const axis2_char_t *
+process_om_response(const axutil_env_t *env,
+        axiom_node_t *node);
+
+int main(int argcchar** argv)
+{
+    const axutil_env_t *env = NULL;
+    const axis2_char_t *address = NULL;
+    axis2_endpoint_ref_tendpoint_ref = NULL;
+    axis2_options_t *options = NULL;
+    const axis2_char_t *client_home = NULL;
+    axis2_svc_client_tsvc_client = NULL;
+    axiom_node_t *payload = NULL;
+    axiom_node_t *ret_node = NULL;
+
+    env = axutil_env_create_all("hello_client.log"AXIS2_LOG_LEVEL_TRACE);
+
+    options = axis2_options_create(env);
+
+    address = "http://localhost:9090/axis2/services/hello";
+    if (argc > 1)
+        address = argv[1];
+    if (axutil_strcmp(address"-h") == 0)
+    {
+        printf("Usage : %s [endpoint_url]\n"argv[0]);
+        printf("use -h for help\n");
+        return 0;
+    }
+    printf("Using endpoint : %s\n"address);
+    endpoint_ref = axis2_endpoint_ref_create(envaddress);
+    axis2_options_set_to(optionsenvendpoint_ref);
+
+    client_home = AXIS2_GETENV("AXIS2C_HOME");
+    if (!client_home || !strcmp(client_home""))
+        client_home = "../..";
+
+    svc_client = axis2_svc_client_create(envclient_home);
+    if (!svc_client)
+    {
+        printf("Error creating service client\n");
+        AXIS2_LOG_ERROR(env->logAXIS2_LOG_SI"Stub invoke FAILED: Error code:"
+                " %d :: %s"env->error->error_number,
+                AXIS2_ERROR_GET_MESSAGE(env->error));
+        return -1;
+    }
+
+    axis2_svc_client_set_options(svc_clientenvoptions);
+
+    payload = build_om_request(env);
+
+    ret_node = axis2_svc_client_send_receive(svc_clientenvpayload);
+
+    if (ret_node)
+    {
+        const axis2_char_t *greeting = process_om_response(envret_node);
+        if (greeting)
+            printf("\nReceived greeting: \"%s\" from service\n"greeting);
+
+        axiom_node_free_tree(ret_nodeenv);
+        ret_node = NULL;
+    }
+    else
+    {
+        AXIS2_LOG_ERROR(env->logAXIS2_LOG_SI"Stub invoke FAILED: Error code:"
+                " %d :: %s"env->error->error_number,
+                AXIS2_ERROR_GET_MESSAGE(env->error));
+        printf("hello client invoke FAILED!\n");
+    }
+
+    if (svc_client)
+    {
+        axis2_svc_client_free(svc_clientenv);
+        svc_client = NULL;
+    }
+
+    if (env)
+    {
+        axutil_env_free((axutil_env_t *) env);
+        env = NULL;
+    }
+
+    return 0;
+}
+
+axiom_node_t *
+build_om_request(const axutil_env_t *env)
+{
+    axiom_node_tgreet_om_node = NULL;
+    axiom_element_t * greet_om_ele = NULL;
+
+    greet_om_ele = axiom_element_create(envNULL"greet"NULL, &greet_om_node);
+    axiom_element_set_text(greet_om_eleenv"Hello Server!"greet_om_node);
+
+    return greet_om_node;
+}
+
+const axis2_char_t *
+process_om_response(const axutil_env_t *env,
+        axiom_node_t *node)
+{
+    axiom_node_t *service_greeting_node = NULL;
+    axiom_node_t *return_node = NULL;
+
+    if (node)
+    {
+        service_greeting_node = axiom_node_get_first_child(nodeenv);
+        if (service_greeting_node &&
+                axiom_node_get_node_type(service_greeting_nodeenv) == AXIOM_TEXT)
+        {
+            axiom_text_t *greeting = (axiom_text_t *)axiom_node_get_data_element(service_greeting_nodeenv);
+            if (greeting && axiom_text_get_value(greeting , env))
+            {
+                return axiom_text_get_value(greetingenv);
+            }
+        }
+    }
+    return NULL;
+}
+
+

\ No newline at end of file diff --git a/xdocs/docs/hello/service/hello/services.xml b/xdocs/docs/hello/service/hello/services.xml new file mode 100644 index 0000000..22f97c5 --- /dev/null +++ b/xdocs/docs/hello/service/hello/services.xml @@ -0,0 +1,7 @@ + + hello + + Quick start guide hello service sample. + + + diff --git a/xdocs/docs/hello/service/hello_svc.c b/xdocs/docs/hello/service/hello_svc.c new file mode 100644 index 0000000..8d7de77 --- /dev/null +++ b/xdocs/docs/hello/service/hello_svc.c @@ -0,0 +1,211 @@ + +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include +#include +#include +#include +#include +#include + +axiom_node_t *axis2_hello_greet( + const axutil_env_t * env, + axiom_node_t * node); + +int AXIS2_CALL hello_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +axiom_node_t *AXIS2_CALL hello_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx); + +int AXIS2_CALL hello_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env); + +axiom_node_t *AXIS2_CALL hello_on_fault( + axis2_svc_skeleton_t * svc_skeli, + const axutil_env_t * env, + axiom_node_t * node); + +axiom_node_t *build_greeting_response( + const axutil_env_t * env, + axis2_char_t * greeting); + +axiom_node_t * +axis2_hello_greet( + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *client_greeting_node = NULL; + axiom_node_t *return_node = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + if (node) + { + client_greeting_node = axiom_node_get_first_child(node, env); + if (client_greeting_node && + axiom_node_get_node_type(client_greeting_node, env) == AXIOM_TEXT) + { + axiom_text_t *greeting = + (axiom_text_t *) + axiom_node_get_data_element(client_greeting_node, env); + if (greeting && axiom_text_get_value(greeting, env)) + { + const axis2_char_t *greeting_str = + axiom_text_get_value(greeting, env); + printf("Client greeted saying \"%s\" \n", greeting_str); + return_node = build_greeting_response(env, "Hello Client!"); + } + } + } + else + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, + AXIS2_FAILURE); + printf("ERROR: invalid XML in request\n"); + return_node = build_greeting_response(env, "Client! Who are you?"); + } + + return return_node; +} + +axiom_node_t * +build_greeting_response( + const axutil_env_t * env, + axis2_char_t * greeting) +{ + axiom_node_t *greeting_om_node = NULL; + axiom_element_t *greeting_om_ele = NULL; + + greeting_om_ele = + axiom_element_create(env, NULL, "greetResponse", NULL, + &greeting_om_node); + + axiom_element_set_text(greeting_om_ele, env, greeting, greeting_om_node); + + return greeting_om_node; +} + +static const axis2_svc_skeleton_ops_t hello_svc_skeleton_ops_var = { + hello_init, + hello_invoke, + hello_on_fault, + hello_free +}; + +axis2_svc_skeleton_t * +axis2_hello_create( + const axutil_env_t * env) +{ + axis2_svc_skeleton_t *svc_skeleton = NULL; + svc_skeleton = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_skeleton_t)); + + svc_skeleton->ops = &hello_svc_skeleton_ops_var; + + svc_skeleton->func_array = NULL; + + return svc_skeleton; +} + +int AXIS2_CALL +hello_init( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + svc_skeleton->func_array = axutil_array_list_create(env, 0); + axutil_array_list_add(svc_skeleton->func_array, env, "helloString"); + return AXIS2_SUCCESS; +} + +axiom_node_t *AXIS2_CALL +hello_invoke( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env, + axiom_node_t * node, + axis2_msg_ctx_t * msg_ctx) +{ + return axis2_hello_greet(env, node); +} + +axiom_node_t *AXIS2_CALL +hello_on_fault( + axis2_svc_skeleton_t * svc_skeli, + const axutil_env_t * env, + axiom_node_t * node) +{ + axiom_node_t *error_node = NULL; + axiom_node_t *text_node = NULL; + axiom_element_t *error_ele = NULL; + error_ele = axiom_element_create(env, node, "HelloServiceError", NULL, + &error_node); + axiom_element_set_text(error_ele, env, "Hello service failed ", text_node); + return error_node; +} + +int AXIS2_CALL +hello_free( + axis2_svc_skeleton_t * svc_skeleton, + const axutil_env_t * env) +{ + if (svc_skeleton->func_array) + { + axutil_array_list_free(svc_skeleton->func_array, env); + svc_skeleton->func_array = NULL; + } + + if (svc_skeleton) + { + AXIS2_FREE(env->allocator, svc_skeleton); + svc_skeleton = NULL; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_get_instance( + axis2_svc_skeleton_t ** inst, + const axutil_env_t * env) +{ + *inst = axis2_hello_create(env); + if (!(*inst)) + { + return AXIS2_FAILURE; + } + + return AXIS2_SUCCESS; +} + +AXIS2_EXPORT int +axis2_remove_instance( + axis2_svc_skeleton_t * inst, + const axutil_env_t * env) +{ + axis2_status_t status = AXIS2_FAILURE; + if (inst) + { + status = AXIS2_SVC_SKELETON_FREE(inst, env); + } + return status; +} diff --git a/xdocs/docs/hello/service/hello_svc.c.html b/xdocs/docs/hello/service/hello_svc.c.html new file mode 100644 index 0000000..9d4ae7a --- /dev/null +++ b/xdocs/docs/hello/service/hello_svc.c.html @@ -0,0 +1,198 @@ +Apache Axis2/C - hello_svc.c
+/*

+ * Copyright 2004,2005 The Apache Software Foundation.

+ *

+ * Licensed under the Apache License, Version 2.0 (the "License");

+ * you may not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ *      http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */


+#include <axis2_svc_skeleton.h>

+#include <axutil_log_default.h>

+#include <axutil_error_default.h>

+#include <axutil_array_list.h>

+#include <axiom_text.h>

+#include <axiom_node.h>

+#include <axiom_element.h>

+#include <stdio.h>

+

+axiom_node_t *axis2_hello_greet(const axutil_env_t *env,

+        axiom_node_t *node);

+

+int AXIS2_CALL

+hello_free(axis2_svc_skeleton_t *svc_skeleton,

+        const axutil_env_t *env);

+

+axiom_node_tAXIS2_CALL

+hello_invoke(axis2_svc_skeleton_t *svc_skeleton,

+        const axutil_env_t *env,

+        axiom_node_t *node,

+        axis2_msg_ctx_t *msg_ctx);

+

+

+int AXIS2_CALL

+hello_init(axis2_svc_skeleton_t *svc_skeleton,

+        const axutil_env_t *env);

+

+axiom_node_tAXIS2_CALL

+hello_on_fault(axis2_svc_skeleton_t *svc_skeli,

+        const axutil_env_t *envaxiom_node_t *node);

+

+

+axiom_node_t *

+build_greeting_response(const axutil_env_t *env

+        axis2_char_t *greeting);

+

+axiom_node_t *

+axis2_hello_greet(const axutil_env_t *envaxiom_node_t *node)

+{

+    axiom_node_t *client_greeting_node = NULL;

+    axiom_node_t *return_node = NULL;

+

+    AXIS2_ENV_CHECK(envNULL);

+

+    if (node)

+    {

+        client_greeting_node = axiom_node_get_first_child(nodeenv);

+        if (client_greeting_node &&

+                axiom_node_get_node_type(client_greeting_nodeenv) == AXIOM_TEXT)

+        {

+            axiom_text_t *greeting = (axiom_text_t *)axiom_node_get_data_element(client_greeting_nodeenv);

+            if (greeting && axiom_text_get_value(greeting , env))

+            {

+                const axis2_char_t *greeting_str = axiom_text_get_value(greetingenv);

+                printf("Client greeted saying \"%s\" \n"greeting_str);

+                return_node = build_greeting_response(env"Hello Client!");

+            }

+        }

+    }

+    else

+    {

+        AXIS2_ERROR_SET(env->errorAXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUESTAXIS2_FAILURE);

+        printf("ERROR: invalid XML in request\n");

+        return_node = build_greeting_response(env"Client! Who are you?");

+    }

+

+    return return_node;

+}

+

+axiom_node_t *

+build_greeting_response(const axutil_env_t *envaxis2_char_t *greeting)

+{

+    axiom_node_tgreeting_om_node = NULL;

+    axiom_element_t * greeting_om_ele = NULL;

+

+    greeting_om_ele = axiom_element_create(envNULL"greetResponse"NULL, &greeting_om_node);

+

+    axiom_element_set_text(greeting_om_eleenvgreetinggreeting_om_node);

+

+    return greeting_om_node;

+}

+

+static const axis2_svc_skeleton_ops_t hello_svc_skeleton_ops_var = {

+    hello_init,

+    hello_invoke,

+    hello_on_fault,

+    hello_free

+};

+

+axis2_svc_skeleton_t *

+axis2_hello_create(const axutil_env_t *env)

+{

+    axis2_svc_skeleton_t *svc_skeleton = NULL;

+    svc_skeleton = AXIS2_MALLOC(env->allocator,

+            sizeof(axis2_svc_skeleton_t));

+

+    svc_skeleton->ops = &hello_svc_skeleton_ops_var;

+

+    svc_skeleton->func_array = NULL;



+    return svc_skeleton;

+}

+

+int AXIS2_CALL

+hello_init(axis2_svc_skeleton_t *svc_skeleton,

+        const axutil_env_t *env)

+{

+    svc_skeleton->func_array = axutil_array_list_create(env0);

+    axutil_array_list_add(svc_skeleton->func_arrayenv"helloString");

+    return AXIS2_SUCCESS;

+}

+

+axiom_node_tAXIS2_CALL

+hello_invoke(axis2_svc_skeleton_t *svc_skeleton,

+        const axutil_env_t *env,

+        axiom_node_t *node,

+        axis2_msg_ctx_t *msg_ctx)

+{

+    return axis2_hello_greet(envnode);

+}

+

+axiom_node_tAXIS2_CALL

+hello_on_fault(axis2_svc_skeleton_t *svc_skeli,

+        const axutil_env_t *envaxiom_node_t *node)

+{

+    axiom_node_t *error_node = NULL;

+    axiom_node_ttext_node = NULL;

+    axiom_element_t *error_ele = NULL;

+    error_ele = axiom_element_create(envnode"HelloServiceError"NULL,

+            &error_node);

+    axiom_element_set_text(error_eleenv"Echo Service Failed",

+            text_node);

+    return error_node;

+}

+

+int AXIS2_CALL

+hello_free(axis2_svc_skeleton_t *svc_skeleton,

+        const axutil_env_t *env)

+{

+    if (svc_skeleton->func_array)

+    {

+        axutil_array_list_free(svc_skeleton->func_arrayenv);

+        svc_skeleton->func_array = NULL;

+    }

+

+    if (svc_skeleton)

+    {

+        AXIS2_FREE(env->allocatorsvc_skeleton);

+        svc_skeleton = NULL;

+    }

+

+    return AXIS2_SUCCESS;

+}

+

+

+AXIS2_EXPORT int

+axis2_get_instance(axis2_svc_skeleton_t **inst,

+        const axutil_env_t *env)

+{

+    *inst = axis2_hello_create(env);

+    if (!(*inst))

+    {

+        return AXIS2_FAILURE;

+    }

+

+    return AXIS2_SUCCESS;

+}

+

+AXIS2_EXPORT int

+axis2_remove_instance(axis2_svc_skeleton_t *inst,

+        const axutil_env_t *env)

+{

+    axis2_status_t status = AXIS2_FAILURE;

+    if (inst)

+    {

+        status = AXIS2_SVC_SKELETON_FREE(instenv);

+    }

+    return status;

+}

+

+

+

diff --git a/xdocs/docs/images/OM005.gif b/xdocs/docs/images/OM005.gif new file mode 100644 index 0000000..49209e4 Binary files /dev/null and b/xdocs/docs/images/OM005.gif differ diff --git a/xdocs/docs/images/archi006.jpg b/xdocs/docs/images/archi006.jpg new file mode 100644 index 0000000..50a2122 Binary files /dev/null and b/xdocs/docs/images/archi006.jpg differ diff --git a/xdocs/docs/images/arrow_left.gif b/xdocs/docs/images/arrow_left.gif new file mode 100644 index 0000000..01100ec Binary files /dev/null and b/xdocs/docs/images/arrow_left.gif differ diff --git a/xdocs/docs/images/arrow_right.gif b/xdocs/docs/images/arrow_right.gif new file mode 100644 index 0000000..b7c1d92 Binary files /dev/null and b/xdocs/docs/images/arrow_right.gif differ diff --git a/xdocs/docs/images/axis2c_repo.gif b/xdocs/docs/images/axis2c_repo.gif new file mode 100644 index 0000000..a672782 Binary files /dev/null and b/xdocs/docs/images/axis2c_repo.gif differ diff --git a/xdocs/docs/images/binary_folder_structure.jpg b/xdocs/docs/images/binary_folder_structure.jpg new file mode 100644 index 0000000..ccf3ed5 Binary files /dev/null and b/xdocs/docs/images/binary_folder_structure.jpg differ diff --git a/xdocs/docs/images/folder_structure.jpg b/xdocs/docs/images/folder_structure.jpg new file mode 100644 index 0000000..7dd0eda Binary files /dev/null and b/xdocs/docs/images/folder_structure.jpg differ diff --git a/xdocs/docs/images/folder_structure_zlib.jpg b/xdocs/docs/images/folder_structure_zlib.jpg new file mode 100644 index 0000000..745d1c3 Binary files /dev/null and b/xdocs/docs/images/folder_structure_zlib.jpg differ diff --git a/xdocs/docs/index.html b/xdocs/docs/index.html new file mode 100644 index 0000000..c49e82a --- /dev/null +++ b/xdocs/docs/index.html @@ -0,0 +1,13 @@ +Apache Axis2/C - Documentation

Apache Axis2/C Documentation

Getting Started

Manual


diff --git a/xdocs/docs/installationguide.html b/xdocs/docs/installationguide.html new file mode 100644 index 0000000..97c23e3 --- /dev/null +++ b/xdocs/docs/installationguide.html @@ -0,0 +1,792 @@ + +Apache Axis2/C - Installation Guide + + + +

Apache Axis2/C Installation Guide

+

This document guides you on how to install Axis2/C, and run +the server and +client samples on Linux and Microsoft Windows operating systems.

+

This release comes in two forms, source and binary and you can +download them from here. This +document covers +both forms.

+

Please send your feedback to the developer mailing list: axis-c-dev@ws.apache.org +(Subscription details are available on the Axis2 site.) +Please +remember to prefix the subject with [Axis2].

+ +
+
+

1. Getting Axis2/C Working on Linux

+
+

1.1 Setting up Prerequisites

+
+

1.1.1 Mandatory

+

By default Axis2/C is not dependent on any other software libraries.

+
+
+

1.1.2 Optional

+

(a) libxml2 - http://www.xmlsoft.org/ +
+(b) libiconv - http://www.gnu.org/software/libiconv/ +
+(c) zlib - http://www.zlib.net/ +
+(d) Apache Qpid -

+ +
+
+
+

1.2 Using Binary Release

+

+(a) Extract the binary tar package to a directory.
+
+(b) Set AXIS2C_HOME environment variable pointing to the location where +you have extracted Axis2/C.
+
+$ AXIS2C_HOME='/your_path_to_axis2c'
+$ export AXIS2C_HOME
+
+NOTE : You will need to set AXIS2C_HOME only if you need to run Axis2/C +samples or tests. The reason is that the samples and test codes use +AXIS2C_HOME to get the path to Axis2/C. To write your own services or +clients this is not a requirement.
+

+
+
+

1.3 Using Source Release

+
+

1.3.1 Basic Build

+(a) Extract the source tar package to a directory
+
+(b) Set AXIS2C_HOME environment variable pointing to the location where +you want to install Axis2/C.
+
+$ AXIS2C_HOME='/your_desired_path_to_axis2c_installation'
+$ export AXIS2C_HOME
+
+NOTE : You will need to set AXIS2C_HOME only if you need to run Axis2/C +samples or tests. The reason is that the samples and test codes use +AXIS2C_HOME to get +the path to Axis2/C. To write your own services or clients this is not +a requirement.
+
+(c) Go to the directory where you extracted the source
+
+$ cd /your_path_to_axis2c_source
+
+(d) Build the source
+This can be done by running the following command sequence in the +directory where you have extracted the source.
+
+$ ./configure --prefix=${AXIS2C_HOME}
+$ make
+$ make install
+
+Please run './configure --help' in respective sub directories for more +information on these configure options.
+
+NOTE : If you don't provide the --prefix configure option, it will by +default be installed into '/usr/local/axis2c' directory.
+
+You could run 'make check' to test if everything is working fine. +However,note that the test/core/clientapi/test_clientapi program would +fail unless AXIS2C_HOME points to the installed location.(It's looking +for Axis2/C +repository).This means you really should run 'make && +make install', then set 'AXIS2C_HOME=/path/to/install', and then 'make +check'. That's a little different than the usual 'make +&& make check && make install' process.
+
+
+

1.3.2 Build with Options

+
+

(a) With Guththila

+You may need to try Axis2/C with Guththila XML parser. You can do it by +giving '--enable-guththila=yes' as a configure option.
+
+$ ./configure --enable-guththila=yes [other configuration +options]
+$ make
+$ make install
+
+
+

(b) With libxml2

+You may need to try Axis2/C with libxml2 XML parser. You can do it by +giving '--enable-libxml2=yes' as a configure option.
+
+$ ./configure --enable-libxml2=yes [other configuration +options]
+$ make
+$ make install
+
+
+

(c) With AMQP Transport

+You may need to try Axis2/C with the AMQP transport. You can do it by +giving '--with-qpid=/path/to/qpid/home' as a configure option.
+
+$ ./configure --with-qpid=/path/to/qpid/home [other +configuration options]
+$ make
+$ make install
+
+
+
+

1.3.3 Building Samples

+If you need to get the samples working, you also need to build the +samples.
+
+To build the samples:
+
+$ export +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${AXIS2C_HOME}/lib/
+$ cd samples
+$ ./configure --prefix=${AXIS2C_HOME} +--with-axis2=${AXIS2C_HOME}/include/axis2-1.6.0
+$ make
+$ make install
+
+Please run './configure --help' in samples folder for more information +on configure options.
+
+NOTE : If you don't provide a --prefix configure option, samples will +by default be installed into '/usr/local/axis2c/samples' directory.
+
+
+
+

1.4 Configuration

+
+

1.4.1 AMQP Transport

+You need to add the following entries into the axis2.xml.
+
+<transportReceiver name="amqp" +class="axis2_amqp_receiver">
+   <parameter name="qpid_broker_ip" +locked="false">127.0.0.1</parameter>
+   <parameter name="qpid_broker_port" +locked="false">5672</parameter>
+</transportReceiver>
+
+<transportSender name="amqp" class="axis2_amqp_sender"/>
+
+
+
+

1.5 Running Samples

+
+

1.5.1 HTTP Transport

+
+

(a) Server

+You have to first start the axis2_http_server as follows.
+
+$ cd ${AXIS2C_HOME}/bin
+$ ./axis2_http_server
+
+You should see the message
+               Started +Simple Axis2 HTTP +Server...
+
+This will start the simple axis server on port 9090. To see the +possible command line options run
+
+$ ./axis2_http_server -h
+
+NOTE 1 : You may need to login as superuser to run the +axis2_http_server.
+NOTE 2 : If you run into shared lib problems, set the LD_LIBRARY_PATH +as follows.
+               $ +export +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${AXIS2C_HOME}/lib
+
+
+

(b) Clients

+When the axis2_http_server is up and running, you can run the sample +clients in a new shell as follows.
+
+$ cd ${AXIS2C_HOME}/samples/bin
+$ ./echo
+
+This will invoke the echo service.
+
+$ ./math
+
+This will invoke the math service.
+
+To see the possible command line options for sample clients run them +with '-h' option
+
+NOTE : If you run into shared lib problems, set the LD_LIBRARY_PATH as +follows.
+               $ +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${AXIS2C_HOME}/lib +
+
+
+

1.5.2 AMQP Transport

+
+

(a) Server

+Start the Qpid broker as follows.
+
+$ cd ${QPID_HOME}/sbin
+$ ./qpidd --data-dir ./
+
+Start the axis2_amqp_server as follows.
+
+$ cd ${AXIS2C_HOME}/bin
+$ ./axis2_amqp_server
+
+You should see the message
+               Started +Simple Axis2 AMQP Server...
+
+This will connect to the Qpid broker listening on 127.0.0.1:5672. To +see the possible command line options run
+
+$ ./axis2_amqp_server -h
+
+NOTE 1 : You have the flexibility of starting the Qpid broker first and +then axis2_amqp_server or vise versa.
+NOTE 2 : You may need to login as superuser to run the +axis2_amqp_server.
+NOTE 3 : If you run into shared lib problems, set the LD_LIBRARY_PATH +as follows.
+               $ +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${AXIS2C_HOME}/lib +
+
+

(b) Clients

+When the axis2_amqp_server is up and running, you can run the sample +clients in a new shell as follows.
+
+$ cd ${AXIS2C_HOME}/sample/bin/amqp
+$ ./echo_blocking
+
+This will invoke the echo service.
+
+To see the possible command line options for sample clients run them +with '-h' option
+
+NOTE : If you run into shared lib problems, set the LD_LIBRARY_PATH as +follows.
+               $ +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${AXIS2C_HOME}/lib +
+
+
+
+

2. Getting Axis2/C Working on Windows (Win32)

+
+

2.1 Setting up Prerequisites

+
+

2.1.1 Mandatory

+(a) The binaries shipped with this version are compiled with Microsoft +Visual Studio compiler (cl). And also the makefile that is shipped with +this version needs Microsoft Visual Studio compiler (cl) and nmake +build tool.
+
+NOTE : You can download +Microsoft VS Express2005 Edition and Platform +SDK from Microsoft website. You need to add the path to Platform SDK +Include and Lib folders to the makefile in order for you to compile the +source.
+
+
+

2.1.2 Optional

+(a) libxml2 [http://www.zlatkovic.com/pub/libxml +version >= libxml2-2.6.20.win32]
+(b) iconv [http://www.zlatkovic.com/pub/libxml +version >= iconv-1.9.1.win32]
+(c) zlib [http://www.zlatkovic.com/pub/libxml +version >= zlib-1.2.3.win32]
+
+
+
+

2.2 Using Binary Release

+Extract the binary distribution to a folder of your choice.(example: +C:\axis2c)
+The C:\axis2c folder structure is as follows:
+
    +
  • bin - server and other executables
  • +
  • samples\bin - client sample binaries
  • +
  • samples\lib - sample libraries
  • +
  • samples\src - sample sources
  • +
  • lib - library modules
  • +
  • services - deployed services
  • +
  • modules - deployed modules
  • +
  • include - all Include files of Axis2/C
  • +
  • logs - system and client logs are written to this folder
  • +
+Optionally you might require to copy the iconv.dll, libxml2.dll and zlib1.dll to C:\axis2c\lib as well.
+(Or you can have these dll's in some other place and add that location +to PATH environment variable) +
+
+

2.3 Using Source Release

+
+

2.3.1 Setting Build Options

+

Please edit the +<source_distribution>\build\win32\configure.in file +to set the following build options. These are optional

+
+

(a) Setting zlib Location

+Set the ZLIB_BIN_DIR to the location where zlib is installed to
+
+Default location for zlib is E:\zlib-1.2.3.win32 and the folder +structure should look like the following
+
+Figure: C:\zlib Folder Structure +
+You can either extract zlib to this folder or extract it to a location +of your choice and edit the configure.in file accordingly.
+
+NOTE : You need to have zlib1.dll in the library path.
+
+
+

(b) Enable Guththila

+
  • Set the ENABLE_GUTHTHILA option to 1
  • +
    +
    +

    (c) Enable libxml2

    +
  • Set the ENABLE_LIBXML2 option to 1
  • +
  • Set the LIBXML2_BIN_DIR to the location where libxml2 is +installed to
  • +
  • Set the ICONV_BIN_DIR to the location where iconv is +installed to
  • +
    +
    +

    (d) Enable SSL Support

    +
  • Set ENABLE_SSL option to 1
  • +
  • Set OPENSSL_BIN_DIR to the location where OpenSSL is +installed to
  • +
    +
    +

    (e) Enable libcurl

    +
  • Set ENABLE_LIBCURL to 1
  • +
  • Set LIBCURL_BIN_DIR to the location where libcurl is +installed to
  • +
    +
    +

    2.3.2 Compiling the Source

    +

    The following steps will take you through the source +compilation.

    +
      +
    • Extract the source distribution to a folder of your choice. +(Example: C:\axis2c)
    • +
    • Edit the configure.in file as explained in the section 2.3.1
    • +
    • Open a DOS shell
    • +
    • cd C:\axis2c\build\win32
    • +
    • to access .Net tools, run +
        +
      • C:\axis2c\build\win32> vcvars32.bat
      • +
      +

      Note: You may have to set +the PATH environment variable to vcvars32.bat if MS Windows gives an +error indicating that it cannot find this batch file. This file is +located in <Your MS Visual Studio Install +Directory>\VC\bin directory.

      +
    • +
    • To build the system and create the binary files in a +directory named deploy under the build directory, +
        +
      • C:\axis2c\build\win32>nmake install
      • +
      +
    • +
    • The deploy folder structure is as follows:

    • +
        +
      • bin - server and other executable
      • +
      • samples\bin - client sample binaries
      • +
      • samples\lib - client samples libraries
      • +
      • lib - library modules
      • +
      • services - deployed services
      • +
      • modules - deployed modules
      • +
      • include - all include files of Axis2 C
      • +
      • logs - system and client logs are written to this folder
      • +
      +
    +
    +
    +
    +

    2.4 Running Samples

    +You need to set a couple of environment variables before you can run +the server and samples.
    +
    +Set the variable AXIS2C_HOME to the deploy folder (C:\axis2c)
    +Add the path to lib directory to the PATH variable (%AXIS2C_HOME%\lib)
    +
    +Copy iconv.dll, zlib1.dll, libxml2.dll to the %AXIS2C_HOME%\lib folder. This is +optional.
    +
    +

    2.4.1 HTTP transport

    +
    +

    (a) Server

    +> cd %AXIS2C_HOME%\bin
    +> axis2_http_server.exe
    +
    +You should see the message
    +               Started +Simple Axis2 HTTP Server...
    +
    +By default the log is created under %AXIS2C_HOME%\logs folder with the +name axis2.log.
    +
    +NOTE : You may provide command line options to change the default +behaviour. Type 'axis2_http_server.exe -h' to learn about the usage +
    +
    +

    (b) Clients

    +Now you can run any sample client deployed under +%AXIS2C_HOME%\samples\bin
    +
    +Example:
    +
      +> cd %AXIS2C_HOME%\samples\bin
      +> echo.exe +
    +
    +
    +
    +
    +
    +

    3. Installing Apache2 Web Server Integration Module +(mod_axis2)

    +
    +

    3.1 Building mod_axis2 from Source

    +
    +

    3.1.1 On Linux

    +Provide the Apache2 include file location as a configure option
    +
    +$ ./configure --with-apache2="<apache2 httpd include +files location>" [other +configure options]
    +
    +NOTE : Some apache2 distributions install APR (Apache Portable Runtime) +include files in a separate location which is required to build +mod_axis2.
    +
    +In that case use:
    +$ ./configure --with-apache2="<apache2 include files +location>" --with-apr="<apr include files +location>" [other configure options]
    +
    +Then build the source tree
    +$ make
    +$ make install
    +
    +This will install mod_axis2.so into your +"<your_path_to_axis2c>/lib" +
    +
    +

    3.1.2 On Windows (Win32)

    +Provide the apache2 location in configure.in file in APACHE_BIN_DIR
    +
    +Example:
    +APACHE_BIN_DIR = E:\Apache22
    +
    +After compiling the sources (as described in section 2.3) build the +mod_axis2.dll by issuing the command 'nmake axis2_apache_module'.
    +This will build mod_axis2.dll and copy it to %AXIS2C_HOME%\lib +directory.
    +
    +Example:
    +C:\axis2c\build\deploy\lib
    +
    +
    +

    3.2 Deploying in Apache2 Web Server

    +NOTE : To do the following tasks, you might need super user privileges +on your machine. If you are using the binary release of Axis2/C, please note that it is built with Apache 2.2.
    +
    +Copy the mod_axis2 (libmod_axis2.so.0.6.0 on Linux and mod_axis2.dll on +Windows) to "<apache2 modules directory>" as +mod_axis2.so
    +
    +Example:
    +cp $AXIS2C_HOME/lib/libmod_axis2.so.0.6.0 +/usr/lib/apache2/modules/mod_axis2.so (on Linux)
    +copy C:\axis2c\build\deploy\lib\mod_axis2.dll +C:\Apache2\modules\mod_axis2.so (on Windows)
    +
    +Edit the Apache2's configuration file (generally httpd.conf) and add +the following directives
    +
    +LoadModule axis2_module <apache2 modules +directory>/mod_axis2.so
    +Axis2RepoPath <axis2 repository path>
    +Axis2LogFile <axis2 log file path>
    +Axis2MaxLogFileSize <maximum size of log file>
    +Axis2LogLevel LOG_LEVEL
    +<Location /axis2>
    +SetHandler axis2_module
    +</Location>
    +
    +NOTE: +
      +Axis2 log file path should have write access to all users because +by default Apache Web Server runs as nobody.
      +
      +If you want to use a Shared Global Pool with Apache you have to give +another entry called Axis2GlobalPoolSize.
      +You have to give the size of the shared global pool in MB.
      +If you don't set the value or if you set a negative value Apache module +doesn't create shared global pool.
      +
      +Axis2GlobalPoolSize <global pool size in mb>
      +
    +
    +LOG_LEVEL can be one of the followings
    +
      +
    • crit - Log critical errors only
    • +
    • error - Log errors critical errors
    • +
    • warn - Log warnings and above
    • +
    • info - Log info and above
    • +
    • debug - Log debug and above (default)
    • +
    • trace - Log trace messages
    • +
    +
    +NOTE: Use forward slashes "/" for path separators in <apache2 +modules directory>, <axis2 repository path> and +<axis2 log file path>
    +
    +Make sure that the apache2 user has the correct permissions to above +paths
    +- Read permission to the repository
    +- Write permission to the log file
    +
    +Restart apache2 and test whether mod_axis2 module is loaded by typing +the URL http://localhost/axis2/services +in your Web browser +
    +
    +
    +

    4. Installing IIS (Interner Information Server) Integration +Module (mod_axis2_IIS)

    +
    +

    4.1 Building mod_axis2_IIS from Source

    +After compiling the source (as described in section 2.3) build the +mod_axis2.dll by issuing the command 'nmake axis2_IIS_module'.
    +This will build the mod_axis2_IIS.dll and copy it to %AXIS2C_HOME%\lib +directory.
    +
    +Example:
    +C:\axis2c\build\deploy\lib
    +
    +

    4.2 Deploying in the IIS

    +Add the following key to the registery.
    +
    +HKEY_LOCAL_MACHINE\SOFTWARE\Apache Axis2c\IIS ISAPI Redirector
    +
    +Under this registry key add the following entries.
    +
    +A String value with the name "axis2c_home". The value is the +AXIS2C_HOME.
    +Example : c:\axis2c
    +
    +A String value with the name "log_file". The value is the absolute path +of the log file.
    +Example: c:\axis2c\logs\axis2.log
    +
    +A String value with the name "log_level". The value can be one of the +followings.
    +
      +
    • trace - Log trace messages
    • +
    • error - Log errors critical errors
    • +
    • info - Log info and above
    • +
    • critical - Log critical errors only
    • +
    • debug - Log debug and above (default)
    • +
    • warning - Log warnings
    • +
    +

    +You can add a string value with the name services_url_prefix. This is optional and defaults to "/services". +As an example, if you have "/web_services" as the prefix, then all the +services hosted would have the endpoint prefix of :
    +http://localhost/axis2/web_services.
    Note: don't forget the / at the begining.
    +

    +

    +If you wish, you can also change the location as well by adding a string value with the name axis2_location. This is also optional and defaults to /axis2. +If you have /myserser as the value you can access your web services with a url like http://localhost/myserver/services.
    Note: Don't forget the / at the beginning.

    +

    + +

    Now you can do all the registry editing using the JScript file axis2_iis_regedit.js provided with the distribution. +When you build axis2/C with the IIS module the file is copied to the root directory of the binary distribution. +Just double click it and everything will be set to the defaults. The axis2c_home is taken as the current directory, so make sure you run the file in the Axis2/C repository location (or root of the binary distribution). If you want to change the values you can +manually edit the the .js file or give it as command line arguments to the script when running the script. To run the jscript from the command line use the command :\cscript axis2_iis_regedit.js optional arguments. We recomend the manual editing as it is the easiest way to specify the values.

    +

    IIS 5.1 or Below

    +Using the IIS management console, add a new virtual +directory to your IIS/PWS web site. The name of the virtual directory +must be axis2. Its +physical path should be the directory in which you placed +mod_axis2_IIS.dll (in our example it is +c:\axis2c\lib). When creating this new virtual directory, assign +execute access to it.

    +

    By using the IIS management console, add +mod_axis2_IIS.dll as a filter in your IIS/PWS web site and restart the +IIS +admin service.

    +

    IIS 6 & 7

    +Using the IIS management console, add the mod_axis2_IIS.dll as a +Wildcard Script Map. +
      +
    • Executable should be the complete path to the +mod_axis2_IIS.dll
    • +
    • You can put any name as the name of the Wildcard Script Map
    • +
    +

    Please don't add the mod_axis2_IIS.dll as a filter to IIS as +in the IIS 5.1 case.

    +

    Note: If the Axis2/C failed to load, verify that Axis2/C and +its dependent DLLs are in the System Path (not the user path).

    +
    +
    +
    +

    5. Using Axis2/C with CGI

    +
    +

    5.1 Deploying in Apache2

    +If you haven't already done so you need to configure and set up an cgi-bin/ directory that holds your CGI scripts,where we will put Axis2/C cgi executable axis2.cgi. +

    (Note: most of recent Apache web servers already have an cgi-bin dir set up, usually /usr/lib/cgi-bin/. ) +

    Add following to your Apache2 configuration (httpd.conf) file. +

    ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/ (Or some other directory of your choice) +

    OR you can use +
    <Directory /usr/local/apache/cgi-bin/> +
    Options +ExecCGI +
    </Directory> +

    AddHandler cgi-script .cgi
    +

    { It's recomended to restrict all your cgi scripts to single ScriptAlias directory for security reasons.} +

    Now we have to set up configuration parameters via environment variables for the cgi deployment using the SetEnv directive. +

    { You need to have mod_env enabled for this to work ) +

    Add the following to your apache2 configuration file (httpd.conf) +

    SetEnv AXIS2C_HOME <your path to axis2c home dir> +

    ( i.e. SetEnv AXIS2C_HOME /usr/local/axis2c/ ) +

    If you have chosen another alias for you cgi-bin you can also set up an +AXIS2C_URL_PREFIX environment variable, but it's not needed if you have chosen /cgi-bin/. +AXIS2C_URL_PREFIX defines your web services deployment url prefix. Lets say you have chosen URL +/private/scripts/ for your cgi-bin URL and named your cgi exec as 'axis2.cgi', +Then you need to set AXIS2_URL_PREFIX environment variable as follows: +
    SetEnv AXIS2C_URL_PREFIX /private/scripts/axis2.cgi/ + +

    Now we have configured apache such that all requests with URL http://<domain-name>/cgi-bin/ requests +are located at your configured cgi folder. We have granted Apache server to execute CGI from that directory +and treat files with .cgi extensions as CGI executables. +

    Now you need to copy the Axis2/C cgi executable "axis2.cgi" located in <AXIS2C_HOME>\bin directory.
    + +
    +
    diff --git a/xdocs/docs/mod_log/log_in_handler.c.html b/xdocs/docs/mod_log/log_in_handler.c.html new file mode 100644 index 0000000..d97cb99 --- /dev/null +++ b/xdocs/docs/mod_log/log_in_handler.c.html @@ -0,0 +1,92 @@ +Apache Axis2/C - modules/mod_log/log_in_handler.c
    +/*

    + * Licensed to the Apache Software Foundation (ASF) under one or more

    + * contributor license agreements.  See the NOTICE file distributed with

    + * this work for additional information regarding copyright ownership.

    + * The ASF licenses this file to You under the Apache License, Version 2.0

    + * (the "License"); you may not use this file except in compliance with

    + * the License.  You may obtain a copy of the License at

    + *

    + *      http://www.apache.org/licenses/LICENSE-2.0

    + *

    + * Unless required by applicable law or agreed to in writing, software

    + * distributed under the License is distributed on an "AS IS" BASIS,

    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

    + * See the License for the specific language governing permissions and

    + * limitations under the License.

    + */


    +

    +#include <axis2_handler_desc.h>

    +#include <axutil_array_list.h>

    +#include <axiom_soap_const.h>

    +#include <axiom_soap_envelope.h>

    +#include <axiom_soap_header.h>

    +#include <axiom_soap_header_block.h>

    +#include <axis2_op.h>

    +#include <axis2_msg_ctx.h>

    +#include <axis2_conf_ctx.h>

    +#include <axis2_msg_info_headers.h>

    +#include <axutil_property.h>

    +

    +axis2_status_t AXIS2_CALL

    +axutil_log_in_handler_invoke(struct axis2_handler *handler

    +    const axutil_env_t *env,

    +    struct axis2_msg_ctx *msg_ctx);

    +

    +AXIS2_EXTERN axis2_handler_tAXIS2_CALL

    +axutil_log_in_handler_create(const axutil_env_t *env

    +    axutil_string_t *name

    +{

    +    axis2_handler_t *handler = NULL;

    +    

    +    AXIS2_ENV_CHECK(envNULL);

    +    

    +    handler = axis2_handler_create(env);

    +    if (!handler)

    +    {

    +        return NULL;

    +    }

    +   

    +    axis2_handler_set_invoke(handlerenvaxutil_log_in_handler_invoke);

    +

    +    return handler;

    +}

    +

    +

    +axis2_status_t AXIS2_CALL

    +axutil_log_in_handler_invoke(struct axis2_handler *handler

    +    const axutil_env_t *env,

    +    struct axis2_msg_ctx *msg_ctx)

    +{

    +    axiom_soap_envelope_t *soap_envelope = NULL;

    +    axiom_node_t *ret_node = NULL;

    +

    +    AXIS2_ENV_CHECKenvAXIS2_FAILURE);

    +    AXIS2_PARAM_CHECK(env->errormsg_ctxAXIS2_FAILURE);

    +    

    +    AXIS2_LOG_INFO(env->log"Starting logging in handler .........");

    +    

    +    soap_envelope =  axis2_msg_ctx_get_soap_envelope(msg_ctxenv);

    +    

    +    if (soap_envelope)

    +    {

    +        /* ensure SOAP buider state is in sync */

    +        axiom_soap_envelope_get_body(soap_envelopeenv); 

    +        ret_node = axiom_soap_envelope_get_base_node(soap_envelopeenv);

    +

    +        if(ret_node)

    +        {

    +            axis2_char_t *om_str = NULL;

    +            om_str = axiom_node_to_string(ret_nodeenv);

    +            if(om_str)

    +            {

    +                AXIS2_LOG_INFO(env->log"Input message: %s"om_str);

    +            }

    +        }

    +    }

    +    

    +    return AXIS2_SUCCESS;

    +}

    +

    +

    +

    diff --git a/xdocs/docs/mod_log/log_out_handler.c.html b/xdocs/docs/mod_log/log_out_handler.c.html new file mode 100644 index 0000000..70bc464 --- /dev/null +++ b/xdocs/docs/mod_log/log_out_handler.c.html @@ -0,0 +1,90 @@ +Apache Axis2/C - modules/mod_log/log_out_handler.c
    +/*

    + * Licensed to the Apache Software Foundation (ASF) under one or more

    + * contributor license agreements.  See the NOTICE file distributed with

    + * this work for additional information regarding copyright ownership.

    + * The ASF licenses this file to You under the Apache License, Version 2.0

    + * (the "License"); you may not use this file except in compliance with

    + * the License.  You may obtain a copy of the License at

    + *

    + *      http://www.apache.org/licenses/LICENSE-2.0

    + *

    + * Unless required by applicable law or agreed to in writing, software

    + * distributed under the License is distributed on an "AS IS" BASIS,

    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

    + * See the License for the specific language governing permissions and

    + * limitations under the License.

    + */


    +

    +#include <axis2_handler_desc.h>

    +#include <axutil_array_list.h>

    +#include <axiom_soap_const.h>

    +#include <axiom_soap_envelope.h>

    +#include <axiom_soap_header.h>

    +#include <axiom_soap_header_block.h>

    +#include <axis2_op.h>

    +#include <axis2_msg_ctx.h>

    +#include <axis2_conf_ctx.h>

    +#include <axis2_msg_info_headers.h>

    +#include <axutil_property.h>

    +

    +axis2_status_t AXIS2_CALL

    +axutil_log_out_handler_invoke(struct axis2_handler *handler

    +    const axutil_env_t *env,

    +    struct axis2_msg_ctx *msg_ctx);

    +

    +AXIS2_EXTERN axis2_handler_tAXIS2_CALL

    +axutil_log_out_handler_create(const axutil_env_t *env

    +    axutil_string_t *name

    +{

    +    axis2_handler_t *handler = NULL;

    +    

    +    AXIS2_ENV_CHECK(envNULL);

    +    

    +    handler = axis2_handler_create(env);

    +    if (!handler)

    +    {

    +        return NULL;

    +    }

    +   

    +    axis2_handler_set_invoke(handlerenvaxutil_log_out_handler_invoke);

    +

    +    return handler;

    +}

    +

    +

    +axis2_status_t AXIS2_CALL

    +axutil_log_out_handler_invoke(struct axis2_handler *handler

    +    const axutil_env_t *env,

    +    struct axis2_msg_ctx *msg_ctx)

    +{

    +    axiom_soap_envelope_t *soap_envelope = NULL;

    +    axiom_node_t *ret_node = NULL;

    +

    +    AXIS2_ENV_CHECKenvAXIS2_FAILURE);

    +    AXIS2_PARAM_CHECK(env->errormsg_ctxAXIS2_FAILURE);

    +    

    +    AXIS2_LOG_INFO(env->log"Starting logging out handler .........");

    +    

    +    soap_envelope =  axis2_msg_ctx_get_soap_envelope(msg_ctxenv);

    +    

    +    if (soap_envelope)

    +    {

    +        ret_node = axiom_soap_envelope_get_base_node(soap_envelopeenv);

    +

    +        if(ret_node)

    +        {

    +            axis2_char_t *om_str = NULL;

    +            om_str = axiom_node_to_string(ret_nodeenv);

    +            if(om_str)

    +            {

    +                AXIS2_LOG_INFO(env->log"Output message: %s"om_str);

    +            }

    +        }

    +    }

    +    

    +    return AXIS2_SUCCESS;

    +}

    +

    +

    +

    diff --git a/xdocs/docs/mod_log/mod_log.c.html b/xdocs/docs/mod_log/mod_log.c.html new file mode 100644 index 0000000..5a9a508 --- /dev/null +++ b/xdocs/docs/mod_log/mod_log.c.html @@ -0,0 +1,143 @@ +Apache Axis2/C - modules/mod_log/mod_log.c
    +/*

    + * Licensed to the Apache Software Foundation (ASF) under one or more

    + * contributor license agreements.  See the NOTICE file distributed with

    + * this work for additional information regarding copyright ownership.

    + * The ASF licenses this file to You under the Apache License, Version 2.0

    + * (the "License"); you may not use this file except in compliance with

    + * the License.  You may obtain a copy of the License at

    + *

    + *      http://www.apache.org/licenses/LICENSE-2.0

    + *

    + * Unless required by applicable law or agreed to in writing, software

    + * distributed under the License is distributed on an "AS IS" BASIS,

    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

    + * See the License for the specific language governing permissions and

    + * limitations under the License.

    + */


    +#include <axis2_module.h>

    +#include <axis2_conf_ctx.h>

    +

    +#include "mod_log.h"

    +

    +axis2_status_t AXIS2_CALL

    +axis2_mod_log_shutdown(axis2_module_t *module,

    +    const axutil_env_t *env);

    +

    +axis2_status_t AXIS2_CALL

    +axis2_mod_log_init(

    +    axis2_module_t *module,

    +    const axutil_env_t *env,

    +    axis2_conf_ctx_t *conf_ctx,

    +    axis2_module_desc_t *module_desc);

    +

    +axis2_status_t AXIS2_CALL

    +axis2_mod_log_fill_handler_create_func_map(axis2_module_t *module,

    +    const axutil_env_t *env);

    +

    +/**

    + * Module operations struct variable with functions assigned to members

    + */


    +static const axis2_module_ops_t log_module_ops_var = {

    +    axis2_mod_log_init,

    +    axis2_mod_log_shutdown,

    +    axis2_mod_log_fill_handler_create_func_map

    +};

    +

    +axis2_module_t *

    +axis2_mod_log_create(const axutil_env_t *env)

    +{

    +    axis2_module_t *module = NULL;

    +    module = AXIS2_MALLOC(env->allocator

    +        sizeof(axis2_module_t));

    +

    +    /* initialize operations */

    +    module->ops = &log_module_ops_var;

    +

    +    return module;

    +}

    +

    +axis2_status_t AXIS2_CALL

    +axis2_mod_log_init(

    +        axis2_module_t *module,

    +        const axutil_env_t *env,

    +        axis2_conf_ctx_t *conf_ctx,

    +        axis2_module_desc_t *module_desc)

    +{

    +    /* Any initialization stuff related to this module can be here */

    +    return AXIS2_SUCCESS;

    +}

    +

    +axis2_status_t AXIS2_CALL

    +axis2_mod_log_shutdown(axis2_module_t *module,

    +                        const axutil_env_t *env)

    +{

    +    if(module->handler_create_func_map)

    +    {

    +        axutil_hash_free(module->handler_create_func_mapenv);

    +    }

    +    

    +    if(module)

    +    {

    +        AXIS2_FREE(env->allocatormodule);

    +    }

    +    return AXIS2_SUCCESS

    +}

    +

    +axis2_status_t AXIS2_CALL

    +axis2_mod_log_fill_handler_create_func_map(axis2_module_t *module,

    +                                            const axutil_env_t *env)

    +{

    +    AXIS2_ENV_CHECK(envAXIS2_FAILURE);

    +    

    +    module->handler_create_func_map = axutil_hash_make(env);

    +    if(!module->handler_create_func_map)

    +    {

    +        AXIS2_ERROR_SET(env->errorAXIS2_ERROR_NO_MEMORY

    +            AXIS2_FAILURE);

    +        return AXIS2_FAILURE;

    +    }

    +

    +    /* add in handler */

    +    axutil_hash_set(module->handler_create_func_map"LoggingInHandler"

    +        AXIS2_HASH_KEY_STRINGaxutil_log_in_handler_create);

    +

    +    /* add out handler */

    +    axutil_hash_set(module->handler_create_func_map"LoggingOutHandler"

    +        AXIS2_HASH_KEY_STRINGaxutil_log_out_handler_create);

    +    

    +    return AXIS2_SUCCESS;

    +}

    +

    +/**

    + * Following functions are expected to be there in the module lib 

    + * that helps to create and remove module instances 

    + */


    +

    +AXIS2_EXPORT int 

    +axis2_get_instance(axis2_module_t **inst,

    +                   const axutil_env_t *env)

    +{

    +   *inst = axis2_mod_log_create(env);

    +    if(!(*inst))

    +    {

    +        return AXIS2_FAILURE;

    +    }

    +

    +    return AXIS2_SUCCESS;

    +}

    +

    +AXIS2_EXPORT int 

    +axis2_remove_instance(axis2_module_t *inst,

    +                      const axutil_env_t *env)

    +{

    +    axis2_status_t status = AXIS2_FAILURE;

    +   if (inst)

    +   {

    +        status = axis2_mod_log_shutdown(instenv);

    +    }

    +    return status;

    +}

    +

    +

    +

    diff --git a/xdocs/docs/mod_log/module.xml b/xdocs/docs/mod_log/module.xml new file mode 100644 index 0000000..8518b20 --- /dev/null +++ b/xdocs/docs/mod_log/module.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/xdocs/docs/om_tutorial.html b/xdocs/docs/om_tutorial.html new file mode 100644 index 0000000..70eb038 --- /dev/null +++ b/xdocs/docs/om_tutorial.html @@ -0,0 +1,547 @@ +Apache Axis2/C - AXOM Tutorial

    Apache Axis2/C AXIOM Tutorial

    Introduction

    What is AXIOM?

    AXIOM stands for AXis Object Model and refers to the XML infoset model +that is developed for Apache Axis2. XML infoset refers to the information +included inside the XML. For programmatical manipulation, it is convenient to +have a representation of this XML infoset in a language specific manner. DOM +and JDOM are two such XML models. AXIOM is conceptually similar to such an +XML model in its external behavior but deep down it is very different.

    The objective of this tutorial is to introduce the basics of AXIOM/C and +explain the best practices while using AXIOM.

    AXIOM/C is a C equivalant of AXIOM/Java. We have done our best to get +almost the same kind of API in C.

    For whom is this tutorial?

    This tutorial can be used by anybody who is interested and wants to go +deeper in to AXIOM/C. Knowledge in similar object models such as DOM will be +helpful in understanding AXIOM, but such knowledge has not been assumed. +Several links are listed in the links section that will help you understand +the basics of XML.

    What is Pull Parsing ?

    +Pull parsing is a new trend in XML processing. The previously popular XML +processing frameworks such as DOM were "push-based", which means that the +control of parsing was with the parser itself. This approach is fine and easy +to use, but it is not efficient in handling large XML documents since a +complete memory model will be generated in the memory. Pull parsing inverts +the control and hence the parser only proceeds at the user's command. The +user can decide to store or discard events generated from the parser. AXIOM +is based on pull parsing. To learn more about XML pull parsing, see the XML pull +parsing introduction.

    Features of AXIOM

    AXIOM is a lightweight, differed built XML infoset representation based on +StAX API derived from JSR +173, which is the standard streaming pull parser API. AXIOM can be +manipulated as flexibly as any other object model such as JDOM, but underneath, the objects will be +created only when they are absolutely required. This leads to much less +memory-intensive programming.

    The following is a short feature overview of AXIOM.

      +
    • Lightweight: AXIOM is specifically targeted to be lightweight. This is + achieved by reducing the depth of the hierarchy, the number of methods, + and the attributes enclosed in the objects. This makes the objects less + memory intensive.
    • +
    • Differed building: By far, this is the most important feature of AXIOM. + The objects are not made unless a need arises for them. This passes the + control of building to the object model itself, rather than an external + builder.
    • +
    • Pull based: For a differed building mechanism, a pull-based parser is + required. AXIOM is based on StAX, which is the standard pull parser API. +

      Since different XML parsers offer different kinds of pull parser APIs, + we define an API derived from StAX. That API is defined in + axiom_xml_reader.h. Similarly, we define an XML writer API + in axiom_xml_writer.h. These two APIs work as an abstarction + layer between any XML parser and AXIOM. So any parser that is going to be + used for AXIOM should implement the axiom_xml_reader API and + the axiom_xml_writer API using a wrapper layer.

      +

      +

      Currenly we use Libxml2 as our default XML + parser.

      +

      +
    • +

    The AXIOM Builder wraps the raw XML character stream through the +axiom_xml_reader API. Hence the complexities of the pull event +stream are hidden from the user.

    Where does SOAP come into play?

    In a nutshell, SOAP is an information exchange protocol based on XML. SOAP +has a defined set of XML elements that should be used in messages. Since +Axis2 is a "SOAP Engine" and AXIOM is designed for Axis2, a SOAP specific API +was implemented on top of AXIOM. We have defined a number of structs to +represent SOAP constructs, which wrap general AXIOM structures. Learn more +about SOAP.

    +

    Working with AXIOM

    Axis2/C Environment

    Before starting the discussion on AXIOM, it is necessary to get a good +understanding of the basics of Axis2/C. Axis2/C is designed to be pluggable +to any system written in C or C++. Therefore, Axis2/C has abstracted the +functionalities that differ from system to system into a structure +axutil_env_t, which we refer to as the Axis2 environment. The +environment holds axutil_allocator_t, which is used for memory +allocation and deallocation, axutil_error_t, which is used for +error reporting, axutil_log_t, which is used for logging +mechanisms, and axutil_thread_t which is used for threading +mechanisms.

    When creating the Axis2 environment, the first thing is to create the +allocator.

    axutil_allocator_t *allocator = NULL;

    allocator = axutil_allocator_init(NULL);

    We pass NULL to the above function in order to use the +default allocator functions. Then the allocator functions will use the +malloc, and free functions for memory management. +If you have your own allocator structure, with custom malloc and free +functions, you can pass them instead.

    Convenient macros AXIS2_MALLOC and AXIS2_FREE +are defined to use allocator functions (please have a look at +axutil_allocator.h for more information).

    In a similar fashion, you can create the error and log structures.

    axutil_log_t *log = NULL;

    axutil_error_t *error = NULL;

    log = axutil_log_create(allocator, NULL, NULL);

    log = axutil_log_create(allocator, NULL, "mylog.log");

    Now we can create the environment by parsing the allocator, error and log +to axutil_env_create_with_error_log() function.

    axutil_env_t *env = NULL;

    env = axutil_env_create_with_error_log(allocator, error, +log);

    Apart from the above abstraction, all the other library functions used are +ANSI C compliant. Further, platform dependent functions are also +abstracted.

    As a rule of thumb, all create functions take a pointer to +the environment as its first argument, and all the other functions take +pointer to this particular struct as the first argument, and a pointer to the +environment as the second argument. (Please refer to our coding convention page to learn more +about this.)

    Example,

    axiom_node_t *node = NULL;

    axiom_node_t *child = NULL;

    node = axiom_node_create(env);

    child = axiom_node_get_first_child(node, env);

    Note that we are passing the node (pointer to axiom_node_t ) +as the first argument and the pointer to the environment as the second.

    Building AXIOM

    This section explains how AXIOM can be built either from an existing +document or programmatically. AXIOM provides a notion of a builder to create +objects. Since AXIOM is tightly bound to StAX, a StAX compliant reader should +be created first with the desired input stream.

    In our AXIOM implementation, we define a struct axiom_node_t +which acts as the container of the other structs. axiom_node_t +maintains the links that form the linked list used to hold the AXIOM +structure.

    To traverse this structure, the functions defined in +axiom_node.h must be used. To access XML information, the 'data +element' struct stored in axiom_node_t must be obtained using +the axiom_node_get_data_element function. The type of the struct +stored in the axiom_node_t struct can be obtained by the +axiom_node_get_node_type function. When we create +axiom_element_t, axiom_text_t etc., it is required +to parse a double pointer to the node struct as the last parameter of the +create function, so that the corresponding node struct can be +referenced using that pointer.

    Example

    axiom_node_t *my_node = NULL;

    axiom_element_t *my_ele = NULL;

    my_ele = axiom_element_create(env, NULL, "MY_ELEMENT", NULL, +&my_node);

    Now if we call the axiom_node_get_node_type function on the +my_node pointer, it will return AXIOM_ELEMENT.

    Code Listing 1

    +
    axiom_xml_reader_t *xml_reader = NULL;
    +axiom_stax_builder_t *om_builder = NULL;
    +axiom_soap_builder_t *soap_builder = NULL;
    +axiom_soap_envelope_t *soap_envelope = NULL;
    +
    +xml_reader = axiom_xml_reader_create_for_file(env, "test_soap.xml", NULL);
    +
    +om_builder = axiom_stax_builder_create(env, xml_reader);
    +
    +soap_builder = axiom_soap_builder_create(env, om_builder , AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI);
    +
    +soap_envelope = axiom_soap_builder_get_soap_envelope(soap_builder, env);
    +
    +
    +

    As the example shows, creating an AXIOM from xml_reader is +pretty straight forward. Elements and nodes can be created programmatically +to modify the structure as well. Currently AXIOM has two builders, namely the +axiom_stax_builder_t and the axiom_soap_builder_t. +These builders provide the necessary information to the XML infoset model to +build the AXIOM tree.

    Code Listing 2

    +
    axiom_namespace_t *ns1 = NULL;
    +axiom_namespace_t *ns2 = NULL;
    +
    +axiom_element_t* root_ele = NULL;
    +axiom_node_t*    root_ele_node = NULL;
    +
    +axiom_element_t *ele1      = NULL;
    +axiom_node_t *ele1_node = NULL;
    +
    +ns1 = axiom_namespace_create(env, "bar", "x");
    +ns2 = axiom_namespace_create(env, "bar1", "y");
    +
    +root_ele = axiom_element_create(env, NULL, "root", ns1, &root_ele_node);
    +ele1     = axiom_element_create(env, root_node, "foo1", ns2, &ele1_node);
    +
    +
    +

    Several differences exist between a programmatically created +axiom_node_t and a conventionally built +axiom_node_t. The most important difference is that the latter +will have a pointer to its builder, where as the former does not have a +builder.

    The SOAP struct hierarchy is made in the most natural way for a +programmer. It acts as a wrapper layer on top of the AXIOM implementation. +The SOAP structs wrap the corresponding axiom_node_t structs to +store XML information.

    Adding and Detaching Nodes

    Addition and removal methods are defined in the axiom_node.h +header file.

    Code Listing 3

    Add child operation

    +
    axis2_status_t
    +axiom_node_add_child(axiom_node_t *om_node,  
    +    const axutil_env_t *env, 
    +    axiom_node_t *child_node);
    +
    +
    +

    Detach operation

    +
    axiom_node_t *
    +axiom_node_detach(axiom_node_t *om_node, 
    +    const axutil_env_t *env);
    +
    +
    +

    The detach operation resets the links and removes a node from the AXIOM +tree.

    This code segment shows how child addition can be done.

    Code Listing 4

    +
    axiom_node_t *foo_node = NULL;
    +axiom_element_t *foo_ele = NULL;
    +axiom_node_t *bar_node = NULL;
    +axiom_element_t *bar_ele = NULL;
    +
    +foo_ele = axiom_element_create(env, NULL, "FOO", NULL, &foo_node);
    +bar_ele = axiom_element_create(env, NULL, "BAR", NULL. &bar_node); 
    +axiom_node_add_child(foo_node, env, bar_node);
    +
    +
    +

    Alternatively, we can pass the foo_node as the parent node at +the time of creating the bar_ele as follows.

    +
     bar_ele = axiom_element_create(env, foo_node, "BAR", NULL, &bar_node);
    +
    +
    +

    The following shows important methods available in +axiom_element to be used to deal with namespaces.

    Code Listing 5

    +
    axiom_namespace_t * 
    +axiom_element_declare_namespace(axiom_element_t *om_ele,  
    +    const axutil_env_t *env, 
    +    axiom_node_t *om_node, 
    +    axiom_namespace_t *om_ns);
    +
    +axiom_namespace_t * 
    +axiom_element_find_namespace(axiom_element_t *om_ele,
    +    const axutil_env_t *env, 
    +    axiom_node_t *om_node, 
    +    axis2_char_t *uri, 
    +    axis2_char_t *prefix);
    +
    +axiom_namespace_t *
    +axiom_element_find_declared_namespace(axiom_element_t *om_element,
    +    const axutil_env_t *env,
    +    axis2_char_t *uri,
    +    axis2_char_t *prefix);
    +
    +axis2_status_t
    +axiom_element_set_namespace(axiom_element_t *om_element,
    +    const axutil_env_t *env,
    +    axiom_namespace_t *ns,
    +    axiom_node_t *element_node);
    +
    +
    +

    An axiom_element has a namespace list, the declared +namespaces, and a pointer to its own namespace if one exists.

    The axiom_element_declare_namespace function is straight +forward. It adds a namespace to the declared namespace list. Note that a +namespace that is already declared will not be declared again.

    axiom_element_find_namespace is a very handy method to locate +a namespace in the AXIOM tree. It searches for a matching namespace in its +own declared namespace list and jumps to the parent if it's not found. The +search progresses up the tree until a matching namespace is found or the root +has been reached.

    axiom_element_find_declared_namespace can be used to search +for a namespace in the current element's declared namespace list.

    axiom_element_set_namespace sets axiom_element's +own namespace. Note that an element's own namespace should be declared in its +own namespace declaration list or in one of its parent elements. This method +first searches for a matching namespace using +axiom_element_find_namespace and if a matching namespace is not +found, a namespace is declared to this axiom_element's namespace +declarations list before setting the own namespace reference.

    The following sample code segment shows how the namespaces are dealt with +in AXIOM.

    Code Listing 6

    +
    axiom_namespace_t *ns1 = NULL;
    +axiom_namespace_t *ns2 = NULL;
    +axiom_namespace_t *ns3 = NULL;
    +
    +axiom_node_t *root_node = NULL;
    +axiom_element_t *root_ele = NULL;
    +
    +axiom_node_t *ele1_node = NULL;
    +axiom_element_t *ele1   = NULL;
    +
    +axiom_node_t *text_node = NULL;
    +axiom_text_t *om_text   = NULL;
    +
    +ns1 = axiom_namespace_create(env, "bar", "x");
    +ns2 = axiom_namespace_create(env, "bar1", "y");
    +
    +root_ele = axiom_element_create(env, NULL , "root", ns1, &root_node);
    +ele1     = axiom_element_create(env, root_node, "foo", ns2, &ele1_node);
    +om_text  = axiom_text_create(env, ele1_node, "blah", &text_node);
    +
    +
    +

    Serialization of the root element produces the following XML:

    +
    <x:root xmlns:x="bar">
    +  <y:foo xmlns:y="bar1">blah</y:foo>
    +</x:root>
    +
    +
    +

    If we want to produce

    +
    <x:foo xmlns:x="bar" xmlns:y="bar1">Test</x:foo>
    +
    +
    +

    we can use set_namespace and declare namespace functions as follows.

    +
    axiom_node_t *foo_node = NULL;
    +axiom_element_t *foo_ele  = NULL;
    +axiom_namespace_t *ns1 = NULL;
    +axiom_namespace_t *ns2 = NULL;
    +
    +foo_ele = axiom_element_create(env, NULL,"foo" ,NULL, &foo_node);
    +
    +ns1 = axiom_namespace_create(env, "bar", "x");
    +ns2 = axiom_namespace_create(env, "bar1","y");
    +
    +axiom_element_set_namespace(foo_ele, env, ns1, foo_node);
    +axiom_element_declare_namespace(foo_ele, env, ns2, foo_node);
    +axiom_element_set_text(foo_ele, env, "Test", &foo_node);
    +
    +

    Traversing

    Traversing the AXIOM structure can be done by obtaining an iterator +struct. You can either call the appropriate function on an AXIOM element or +create the iterator manually. AXIOM/C offers three iterators to traverse the +AXIOM structure. They are:

      +
    • axiom_children_iterator_t
    • +
    • axiom_child_element_iterator_t
    • +
    • axiom_children_qname_iterator_t
    • +

    The iterator supports the 'AXIOM way' of accessing elements and is more +convenient than a list for sequential access. The following code sample shows +how the children can be accessed. The children can be of type +AXIOM_TEXT or AXIOM_ELEMENT.

    Code Listing 7

    +
    axiom_children_iterator_t *children_iter = NULL;
    +children_iter = axiom_element_get_children(om_ele, env, om_node);
    +if(NULL != children_iter )
    +{
    +    while(axiom_children_iterator_has_next(children_iter, env))
    +    {
    +        axiom_node_t *node = NULL;
    +        node = axiom_children_iterator_next(children_iter, env);
    +        if(NULL != node)
    +        {
    +           if(axiom_node_get_node_type(node, env) == AXIOM_ELEMENT)
    +           {
    +               /* processing logic goes here */
    +           }
    +        } 
    +
    +    }
    +}
    +
    +
    +

    Apart from this, every axiom_node_t struct has links to its +siblings. If a thorough navigation is needed, the +axiom_node_get_next_sibling() and +axiom_node_get_previous_sibling() functions can be used. A +restrictive set can be chosen by using +axiom_element_xxx_with_qname() methods. The +axiom_element_get_first_child_with_qname() method returns the +first child that matches the given axutil_qname_t and +axiom_element_get_children_with_qname() returns +axiom_children_qname_iterator_t which can be used to traverse +all the matching children. The advantage of these iterators is that they +won't build the whole object structure at once; it builds only what is +required.

    + +
    Internally, all iterator implementations stay + one step ahead of their apparent location to provide the correct + value for the has_next() function . This hidden + advancement can build elements that are not intended to be built at + all.

    + +

    Serialization

    AXIOM can be serialized using the axiom_node_serialize +function. The serialization uses axiom_xml_writer.h and +axiom_output.h APIs.

    Here is an example that shows how to write the output to the console (we +have serialized the SOAP envelope created in code listing 1).

    Code Listing 8

    +
    axiom_xml_writer_t *xml_writer = NULL;
    +axiom_output_t *om_output = NULL;
    +axis2_char_t *buffer = NULL;
    +
    +..............
    +
    +xml_writer = axiom_xml_writer_create(env, NULL, 0, 0);
    +om_output = axiom_output_create(env, xml_writer);
    +
    +axiom_soap_envelope_serialize(envelope, env, om_output);
    +buffer = (axis2_char_t*)axis2_xml_writer_get_xml(xml_writer, env);
    +printf("%s ", buffer);
    +
    +
    +

    An easy way to serialize is to use the to_string function in +om_element

    Code Listing 9

    +
    axis2_char_t *xml_output = NULL; 
    +axiom_node_t *foo_node = NULL;
    +axiom_element_t *foo_ele = NULL;
    +axiom_namespace_t* ns = NULL;
    +
    +ns = axiom_namespace_create(env, "bar", "x");
    +
    +foo_ele = axiom_element_create(env, NULL, "foo", ns, &foo_node);
    +
    +axiom_element_set_text(foo_ele, env, "EASY SERAILIZATION", foo_node);
    +
    +xml_output = axiom_element_to_string(foo_ele, env, foo_node);
    +
    +printf("%s", xml_output);
    +AXIS2_FREE(env->allocator, xml_output);
    +
    +
    +

    Note that freeing the returned buffer is the user's responsibility.

    Using axiom_xml_reader and axiom_xml_writer

    axiom_xml_reader provides three create functions that can be +used for different XML input sources.

      +
    • axiom_xml_reader_create_for_file can be used to read from + a file
    • +
    • axiom_xml_reader_create_for_io uses a user defined + callback function to pull XML
    • +
    • axiom_xml_reader_create_for_memory can be used to read + from an XML string that is in a character buffer
    • +

    + + +ls of the latest version can be found on the Apache Axis2/C +

      +
    • axiom_xml_writer_create_for_file can be used to write to a + file
    • +
    • axiom_xml_writer_create_for_memory can be used to write to + an internal memory buffer and obtain the XML string as a character + buffer
    • +

    Please refer to axiom_xml_reader.h and +axiom_xml_writer.h for more information.

    How to Avoid Memory Leaks and Double Frees When Using AXIOM

    You have to be extremely careful when using AXIOM, in order to avoid +memory leaks and double free errors. The following guidelines will be +extremely useful:

    1. The axiom_element struct keeps a list of attributes and a +list of namespaces, when an axiom_namespace pointer or an +axiom_attribute pointer is added to these lists, which will be +freed when the axiom_element is freed. Therefore a pointer to a +namespace or an attribute should not be freed, once it is used with an +axiom_element.

    To avoid any inconvenience, clone functions have been implemented for both +the axiom_namespace and axiom_attribute +structures.

    2. AXIOM returns shallow references to its string values. Therefore, when +you want deep copies of returned values, the axutil_strdup() +function should be used to avoid double free errors.

    Example

    axiom_namespace_t *ns = NULL;

    axis2_char_t *uri = NULL;

    ns = axiom_namespace_create(env, "http://ws.apache.org", +"AXIOM");

    uri = axiom_namespace_get_uri(ns, env);

    /* now uri points to the same place where namespace struct's uri

    +pointer is pointing. Therefore following will cause a double free +*/

    AXIS2_FREE(env->allocator, uri);

    axiom_namespace_free(ns, env);

    3. When creating AXIOM programatically, if you are declaring a namespace +with an axiom_element, it is advisable to find whether the +namespace is already available in the elements scope using the +axiom_element_find_namespace function. If available, that +pointer can be used instead of creating another namespace struct instance to +minimize memory usage.

    Complete Code for the AXIOM Based Document Building and Serialization

    The following code segment shows how to use AXIOM for building a document +completely and then serializing it into text, pushing the output to the +console.

    Code Listing 10

    +
    #include <axiom.h>
    +#include <axis2_util.h>
    +#include <axutil_env.h>
    +#include <axutil_log_default.h>
    +#include <axutil_error_default.h>
    +#include <stdio.h>
    +
    +FILE *f = NULL;
    +int read_input_callback(char *buffer, int size, void* ctx)
    +{
    +     fread(buffer, (char), size, f);
    +}
    +int close_input_callback(void *ctx)
    +{
    +     fclose(f);
    +}
    +axutil_env_t * create_environment()
    +{
    +    axutil_allocator_t *allocator = NULL;
    +    axutil_env_t *env = NULL;
    +    axutil_log_t *log = NULL;
    +
    +    axutil_error_t *error = NULL;
    +    allocator = axutil_allocator_init(NULL);
    +    log = axutil_log_create(allocator, NULL, NULL);
    +
    +    error = axutil_error_create(allocator);
    +    env = axutil_env_create_with_error_log(allocator, error, log);
    +     env;
    +}
    +
    +build_and_serialize_om(axutil_env_t *env)
    +{
    +    axiom_node_t *root_node = NULL;
    +
    +    axiom_element_t *root_ele = NULL;
    +    axiom_document_t *document = NULL;
    +    axiom_stax_builder_t *om_builder = NULL;
    +
    +    axiom_xml_reader_t *xml_reader = NULL;
    +    axiom_xml_writer_t *xml_writer = NULL;
    +    axiom_output_t *om_output = NULL;
    +
    +    axis2_char_t *buffer = NULL;
    +    
    +    f = fopen("test.xml","r");
    +    xml_reader = axiom_xml_reader_create_for_io(env, read_input_callback,
    +                                                    close_input_callback, NULL, NULL);
    +    (!xml_reader)
    +         -1;
    +
    +    om_builder = axiom_stax_builder_create(env, xml_reader);
    +    (!om_builder)
    +    {
    +        axiom_xml_reader_free(xml_reader, env);
    +         AXIS2_FAILURE;
    +    }
    +    document = axiom_stax_builder_get_document(om_builder, env);
    +    (!document)
    +    {
    +         axiom_stax_builder_free(om_builder, env);
    +         AXIS2_FAILURE;
    +    }
    +    
    +    root_node = axiom_document_get_root_element(document, env);
    +    (!root_node)
    +    {
    +        axiom_stax_builder_free(om_builder, env);
    +         AXIS2_FAILURE;
    +    }        
    +    (root_node)
    +    {
    +        (axiom_node_get_node_type(root_node, env) == AXIOM_ELEMENT)
    +        {
    +            root_ele = (axiom_element_t*)axiom_node_get_data_element(root_node, env);
    +            (root_ele)
    +            {
    +   printf(" %s" ,axiom_element_get_localname(root_ele, env));
    +            }
    +        }
    +    }
    +
    +    axiom_document_build_all(document, env);
    +    axiom_document_build_all(document, env);
    +
    +    xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, AXIS2_XML_PARSER_TYPE_BUFFER);
    +
    +    om_output = axiom_output_create(env, xml_writer);
    +
    +    axiom_node_serialize(root_node, env, om_output);
    +
    +    buffer = (axis2_char_t*)axiom_xml_writer_get_xml(xml_writer, env);
    +
    +    printf("The output XML is ->>>>\n %s ", buffer);
    +  
    +    
    +    
    +    axiom_output_free(om_output, env);
    +    
    +    
    +    axiom_stax_builder_free(om_builder, env);
    +    
    +     AXIS2_SUCCESS;
    +    
    +}
    +int main()
    +{
    +    int status = AXIS2_SUCCESS;
    +    
    +    axutil_env_t *env = NULL;
    +    axutil_allocator_t *allocator = NULL;
    +    env = create_environment();
    +
    +    status = build_and_serialize_om(env);
    +
    +    (status == AXIS2_FAILURE)
    +    {
    +        printf(" build AXIOM failed");
    +    }
    +    
    +    axutil_env_free(env);
    +    
    +     0;
    +}
    +
    +
    +
    +

    diff --git a/xdocs/download.cgi b/xdocs/download.cgi new file mode 100755 index 0000000..8bdb438 --- /dev/null +++ b/xdocs/download.cgi @@ -0,0 +1,6 @@ +#!/bin/sh +# Wrapper script around mirrors.cgi script +# (we must change to that directory in order for python to pick up the +# python includes correctly) +cd /www/www.apache.org/dyn/mirrors +/www/www.apache.org/dyn/mirrors/mirrors.cgi $* \ No newline at end of file diff --git a/xdocs/download.html b/xdocs/download.html new file mode 100644 index 0000000..bf58de5 --- /dev/null +++ b/xdocs/download.html @@ -0,0 +1,409 @@ + + + + Apache Axis2/C - Apache Axis2/C Downloads +

    Apache Axis2/C Releases

    +
    +

    Apache Axis2/C releases are available for download as source or binary packages. For more information on Apache software releases, please see Apache Releases FAQ.

    +
    +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDistributionDateDescription
    1.6.0ReleaseMS Windows Distribution

    - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP +
    20-04-20091.6.0 Release (Mirrored)
    1.5.0ReleaseMS Windows Distribution

    - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP +
    06-05-20081.5.0 Release (Mirrored)
    1.4.0ReleaseMS Windows Distribution

    - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP +
    03-03-20081.4.0 Release (Mirrored)
    1.3.0ReleaseMS Windows Distribution

    - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP +
    29 - 02 - 20081.3.0 Release (Archived)
    1.2.0ReleaseMS Windows Distribution

    - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP +
    17 - 01 - 20081.2.0 Release (Archived)
    1.1.0ReleaseMS Windows Distribution

    + - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP
    30 - 09 - 20071.1.0 Release (Mirrored)
    1.0.0ReleaseMS Windows Distribution

    + - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP
    06 - 05 - 20071.0.0 Release (Archived)
    0.96ReleaseMS Windows Distribution

    + - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP
    22 - 12 - 20060.96 Release (Archived)
    0.95ReleaseMS Windows Distribution

    + - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP
    26 - 10 - 20060.95 Release (Archived)
    0.94ReleaseMS Windows Distribution

    + - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP
    03 - 10 - 20060.94 Release (Archived)
    0.93ReleaseMS Windows Distribution

    + - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP
    31 - 08 - 20060.93 Release (Archived)
    0.92ReleaseMS Windows Distribution

    + - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP
    16 - 06 - 20060.92 Release (Archived)
    0.91ReleaseMS Windows Distribution

    + - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP
    15 - 05 - 20060.91 Release (Archived)
    0.90ReleaseMS Windows Distribution

    + - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP
    31 - 03 - 20060.90 Release (Archived)
    M0.5

    Milestone

    +
    MS Windows Distribution

    + - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP +

    +
    10 - 03 - 20060.5 Milestone (Archived)
    M0.4MilestoneMS Windows Distribution

    + - Binary Distribution zip + MD5 + PGP +

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + - Source Distribution tar.gz + MD5 + PGP +

    +
    02 - 17 - 20060.4 Milestone (Archived)
    M0.3MilestoneLinux Distribution

    + - Binary Distribution tar.gz + MD5 + PGP +

    + Source Distribution tar.gz + MD5 + PGP +

    +
    02 - 02 - 20060.3 Milestone (Archived)
    M0.2MilestoneMS Windows Distribution

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Source Distribution tar.gz + MD5 + PGP
    12 - 08 - 20050.2 Milestone (Archived)
    M0.1MilestoneMS Windows Distribution

    + - Source Distribution zip + MD5 + PGP +

    + Linux Distribution

    + - Source Distribution tar.gz + MD5 + PGP +

    +
    11 - 25 - 20050.1 Milestone (Archived)
    +
    +

    [if-any logo] [end] The currently selected mirror is [preferred]. If +you encounter a problem with this mirror, please select another mirror. If +all mirrors are failing, there are backup mirrors (at the end of the +mirrors list) that should be available.

    + +
    + Other mirrors: + + +
    + +

    You may also consult the complete +list of mirrors.

    + +

    Note: When downloading from a mirror, please check the md5sum and verify +the OpenPGP +compatible signature from the main Apache site. They can be downloaded by +following the links above. This KEYS file contains the +public keys that can be used for verifying signatures. It is recommended that +(when possible) + a web of trust is + used to confirm the identity of these keys.

    +


    diff --git a/xdocs/index.html b/xdocs/index.html new file mode 100644 index 0000000..d4bca06 --- /dev/null +++ b/xdocs/index.html @@ -0,0 +1,99 @@ +Apache Axis2/C - The Web Services Engine +

    Welcome to Apache Axis2/C

    +

    Apache Axis2/C is a Web services engine implemented in the C programming language. It is based on the extensible and flexible Axis2 architecture. Apache Axis2/C can be used to provide and consume WebServices. It has been implemented with portability and ability to embed in mind, hence could be used as a Web services enabler in other software.

    + +

    Apache Axis2/C supports SOAP 1.1 and SOAP 1.2, as well as REST style of Webservices. A single service could be exposed both as a SOAP style as well as a REST style service simultaneously. It also has built in MTOM support, that can be used to exchange binary data.

    + +

    Apache Axis2/C is efficient, modular and is designed with extensibility. The extensible design allows it to support the full WS-* stack with the concept of modules. Apache Axis2/C is the Web services engine that supports the most number of WS-* specification implementations in C, with guaranteed interoperability. This enables using C in Service Oriented Architecture (SOA) implementations, and would be very useful when integrating legacy systems into SOA. +

    + The following WS-* specifications are supported, either as built in modules + or as separate Apache projects:

    + +
    + +

    Latest Release

    +
    +
    + +

    20th April 2009 - Apache Axis2/C Version 1.6.0 Released

    +

    Download 1.6.0

    +
    +
    + +

    Key Features

    +
      +
    1. Support for one-way messaging (In-Only) and request response messaging (In-Out)
    2. +
    3. Client APIs: Easy to use service client API and more advanced operation client API
    4. +
    5. Transports supported: HTTP +
        +
      • Inbuilt HTTP server called simple axis server
      • +
      • Apache2 httpd module called mod_axis2 for server side
      • +
      • IIS module for server side. Supports IIS 5.1, 6 and 7
      • +
      • Client transport with ability to enable SSL support
      • +
      • Basic HTTP Authentication
      • +
      • AMQP Transport based on Apache Qpid (Experimental)
      • +
      • libcurl based client transport
      • +
      • CGI interface
      • +
      +
    6. +
    7. Module architecture, mechanism to extend the SOAP processing model
    8. +
    9. WS-Addressing support, both the submission (2004/08) and final (2005/08) versions, implemented as a module
    10. +
    11. MTOM/XOP support
    12. +
    13. XPath support for Axiom XML Object model
    14. +
    15. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages; This has complete XML infoset support
    16. +
    17. XML parser abstraction +
        +
      • Libxml2 wrapper
      • +
      • Guththila pull parser support
      • +
      +
    18. +
    19. Both directory based and archive based deployment models for deploying services and modules
    20. +
    21. Description hierarchy providing access to static data of Axis2/C runtime (configuration, service groups, services, operations and messages)
    22. +
    23. Context hierarchy providing access to dynamic Axis2/C runtime information(corresponding contexts to map to each level of description hierarchy)
    24. +
    25. Message receiver abstraction +
        +
      • Inbuilt raw XML message receiver
      • +
      +
    26. +
    27. Code generation tool for stub and skeleton generation for a given WSDL (based on Java tool)
        +
      • Axis Data Binding (ADB) support
      • +
      +
    28. +
    29. Transport proxy support
    30. +
    31. REST support (more POX like) using both HTTP POST and GET
    32. +
    33. Comprehensive documentation +
        +
      • Axis2/C Manual
      • +
      +
    34. +
    35. WS-Policy implementation called Neethi/C, with WS-SecurityPolicy extension
    36. +
    37. TCP Transport, for both client and server side
    38. +
    +
    + +

    Changes Since Last Release

    +
      +
    1. XPath support for Axiom XML object model
    2. +
    3. CGI support
    4. +
    5. Improvements to MTOM to send, receive very large attachments
    6. +
    7. Improvements to AMQP transport
    8. +
    9. Improvements to WSDL2C codegen tool
    10. +
    11. Many bug fixes.
    12. +
    13. Memory leak fixes
    14. +
    +
    +
    + +

    Archived News

    +

    Refer to information on the previous releases. +

    +

    + diff --git a/xdocs/lists_issues.html b/xdocs/lists_issues.html new file mode 100644 index 0000000..6db8226 --- /dev/null +++ b/xdocs/lists_issues.html @@ -0,0 +1,25 @@ +Apache Axis2/C - Mailing Lists and Issue Tracking +

    Mailing Lists

    These are the mailing lists that have been established for + this project. For each list, there is a subscribe, unsubscribe, + and an archive link. +

    + + + + +
    List + NameSubscribeUnsubscribeArchive
    Axis C Developer List + Subscribe + + Unsubscribe + + Archive +
    Axis C User List + Subscribe + + Unsubscribe + + Archive +

    diff --git a/xdocs/navigation.xml b/xdocs/navigation.xml new file mode 100644 index 0000000..f507b5f --- /dev/null +++ b/xdocs/navigation.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xdocs/svn.html b/xdocs/svn.html new file mode 100644 index 0000000..4b19bc3 --- /dev/null +++ b/xdocs/svn.html @@ -0,0 +1,26 @@ +Apache Axis2/C - Developing Apache Axis2/C

    Developing Apache Axis2/C

    This document provides information on how to use SVN to get an SVN +checkout/update and make commits to the source repository.

    Working with Subversion (SVN)

    The Apache Axis2/C development team uses Subversion (SVN) for source +control. Subversion is a compelling replacement for CVS, developed under the +auspices of the Tigris community and is licensed under an Apache compatible +license. To learn more about Subversion or to download the latest +distribution, visit the Subversion project site. If you are looking for +guidelines on setting up/installing Subversion, please read the ASF Source +Code Repositories page.

    Checking-out Apache Axis2/C from Subversion

    When checking out the latest version of Apache Axis2/C from the Apache +Foundation's Subversion repository, you must use one of the following URLs, +depending on your level of access to the Apache Axis2/C source code:

    +If you are a committer, make sure that you have set your svnpasswd. To do +this you must log into svn.apache.org. For more information, please read the +ASF Source Code Repositories page. + +

    Once you have successfully installed Subversion, you can checkout the +Axis2/C trunk by running the following command:

    svn co <repository URL> <folder name>

    where 'repository URL' is one of the URLs from the previous list and +'folder name' is the name of the folder into which the source code is to be +checked out.



    To update your working copy to the latest version from the repository, +execute:

    svn update



    If you would like to submit a patch, execute:

    svn diff

    The above command will create a unified diff that can be attached to the +Apache Axis2/C JIRA issue tracker.




    diff --git a/xdocs/versioning.html b/xdocs/versioning.html new file mode 100644 index 0000000..1c2903b --- /dev/null +++ b/xdocs/versioning.html @@ -0,0 +1,7 @@ +Apache Axis2/C - Versioning

    Versioning of Apache Axis2/C

    Apache Axis2/C contains both applications, like HTTPD, and libraries, like +APR. It also contains a number of related sub-projects. It allows third-party +service modules to be written against its API (such as HTTPD), and may also +compile its own third-party modules (e.g., mod_axis2) to be used with +HTTPD.

    These complexities probably mean that we need to develop a fairly +comprehensive set of versioning rules.

    Being an Apache project, the Axis2/C project follows the APR guidelines on +versioning. http://apr.apache.org/versioning.html


    -- cgit v1.1-32-gdbae