You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sa...@apache.org on 2006/03/26 12:00:09 UTC

svn commit: r388891 [1/2] - in /webservices/axis2/trunk/c: ./ include/ modules/xml/ modules/xml/attachments/ modules/xml/om/

Author: samisa
Date: Sun Mar 26 02:00:06 2006
New Revision: 388891

URL: http://svn.apache.org/viewcvs?rev=388891&view=rev
Log:
Applied the MTOM related patch. Thanks to Kapila for the patch.

Added:
    webservices/axis2/trunk/c/modules/xml/attachments/
    webservices/axis2/trunk/c/modules/xml/attachments/Makefile.am
    webservices/axis2/trunk/c/modules/xml/attachments/attachments_mime_helper.c
    webservices/axis2/trunk/c/modules/xml/attachments/axis2_data_handler.h
    webservices/axis2/trunk/c/modules/xml/attachments/axis2_mime_body_part.h
    webservices/axis2/trunk/c/modules/xml/attachments/axis2_mime_output.h
    webservices/axis2/trunk/c/modules/xml/attachments/data_handler.c
    webservices/axis2/trunk/c/modules/xml/attachments/mime_body_part.c
    webservices/axis2/trunk/c/modules/xml/attachments/mime_output.c
    webservices/axis2/trunk/c/modules/xml/om/axis2_om_output_format.h
    webservices/axis2/trunk/c/modules/xml/om/om_output_format.c
Modified:
    webservices/axis2/trunk/c/configure.ac
    webservices/axis2/trunk/c/include/axis2_om_output.h
    webservices/axis2/trunk/c/include/axis2_om_text.h
    webservices/axis2/trunk/c/modules/xml/Makefile.am
    webservices/axis2/trunk/c/modules/xml/om/Makefile.am
    webservices/axis2/trunk/c/modules/xml/om/om_output.c
    webservices/axis2/trunk/c/modules/xml/om/om_text.c

Modified: webservices/axis2/trunk/c/configure.ac
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/configure.ac?rev=388891&r1=388890&r2=388891&view=diff
==============================================================================
--- webservices/axis2/trunk/c/configure.ac (original)
+++ webservices/axis2/trunk/c/configure.ac Sun Mar 26 02:00:06 2006
@@ -213,6 +213,7 @@
     modules/xml/parser/libxml2/Makefile \
     modules/xml/soap/Makefile \
     modules/xml/om/Makefile \
+    modules/xml/attachments/Makefile \
     modules/util/Makefile \
     modules/platforms/unix/Makefile \
     modules/wsdl/Makefile \

Modified: webservices/axis2/trunk/c/include/axis2_om_output.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/include/axis2_om_output.h?rev=388891&r1=388890&r2=388891&view=diff
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_om_output.h (original)
+++ webservices/axis2/trunk/c/include/axis2_om_output.h Sun Mar 26 02:00:06 2006
@@ -45,6 +45,7 @@
     */
     typedef struct axis2_om_output axis2_om_output_t;
     typedef struct axis2_om_output_ops axis2_om_output_ops_t;
+    struct axis2_om_text;
     
 AXIS2_DECLARE_DATA struct axis2_om_output_ops
 {
@@ -140,6 +141,14 @@
 	axis2_status_t (AXIS2_CALL *
 	write_xml_version_encoding)(axis2_om_output_t *om_output,
 							    axis2_env_t **env);
+
+    axis2_bool_t (AXIS2_CALL *is_optimized)
+                                  (axis2_om_output_t *om_output,
+                                   axis2_env_t **env);                               
+
+    axis2_char_t* (AXIS2_CALL *get_next_content_id)
+                                    (axis2_om_output_t *om_output,
+                                    axis2_env_t **env);
 };  
     
 
@@ -176,6 +185,11 @@
                       axis2_env_t **env,
                       axis2_om_types_t type,
                       int no_of_args, ...);
+                      
+AXIS2_DECLARE(axis2_status_t)
+axis2_om_output_write_optimized(axis2_om_output_t *om_output, 
+                      axis2_env_t **env, 
+                      struct axis2_om_text *om_text);
 /************** Macros ********************************************************/
 
 #define AXIS2_OM_OUTPUT_FREE(output, env) \
@@ -216,6 +230,13 @@
 
 #define AXIS2_OM_OUTPUT_WRITE_XML_VERSION_ENCODING(output, env) \
         ((output)->ops->write_xml_version_encoding(output, env))
+
+#define AXIS2_OM_OUTPUT_IS_OPTIMIZED(output, env) \
+        ((output)->ops->is_optimized(output, env))
+
+#define AXIS2_OM_OUTPUT_GET_NEXT_CONTENT_ID(om_output, env) \
+        ((om_output)->ops->get_next_content_id(om_output, env))
+
    
 /** @} */
 

Modified: webservices/axis2/trunk/c/include/axis2_om_text.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/include/axis2_om_text.h?rev=388891&r1=388890&r2=388891&view=diff
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_om_text.h (original)
+++ webservices/axis2/trunk/c/include/axis2_om_text.h Sun Mar 26 02:00:06 2006
@@ -91,6 +91,15 @@
         get_value)(struct axis2_om_text *om_text,
                    axis2_env_t **env);                                               
                                                
+        axis2_status_t (AXIS2_CALL *
+        set_optimize)(struct axis2_om_text *om_text,
+                        axis2_env_t **env,
+                        const axis2_bool_t optimize);
+
+        axis2_status_t (AXIS2_CALL *
+        set_is_binary)(struct axis2_om_text *om_text,
+                        axis2_env_t **env,
+                        const axis2_bool_t is_binary);
                                                                                                 
     } axis2_om_text_ops_t;
 
@@ -136,6 +145,10 @@
 /** set text value */
 #define AXIS2_OM_TEXT_SET_VALUE(om_text, env, value) \
         ((om_text)->ops->set_value(om_text, env, value))
+#define AXIS2_OM_TEXT_SET_OPTIMIZE(om_text, env, optimize) \
+        ((om_text)->ops->set_optimize(om_text, env, optimize))
+#define AXIS2_OM_TEXT_SET_IS_BINARY(om_text, env, is_binary) \
+        ((om_text)->ops->set_is_binary(om_text, env, is_binary))    
               
 
 

Modified: webservices/axis2/trunk/c/modules/xml/Makefile.am
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/Makefile.am?rev=388891&r1=388890&r2=388891&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/Makefile.am (original)
+++ webservices/axis2/trunk/c/modules/xml/Makefile.am Sun Mar 26 02:00:06 2006
@@ -1,2 +1,2 @@
 TESTS =
-SUBDIRS = parser om soap
+SUBDIRS = parser om soap attachments

Added: webservices/axis2/trunk/c/modules/xml/attachments/Makefile.am
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/attachments/Makefile.am?rev=388891&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/attachments/Makefile.am (added)
+++ webservices/axis2/trunk/c/modules/xml/attachments/Makefile.am Sun Mar 26 02:00:06 2006
@@ -0,0 +1,12 @@
+TESTS =
+lib_LTLIBRARIES = libaxis2_attachments.la
+AM_CPPFLAGS = $(CPPFLAGS)
+libaxis2_attachments_la_SOURCES = mime_output.c \
+					data_handler.c \
+					mime_body_part.c	
+
+libaxis2_attachments_la_LIBADD =  ../../util/libaxis2_util.la 
+INCLUDES = -I$(top_builddir)/include \
+            -I$(top_builddir)/modules/util \
+            -I$(top_builddir)/modules/xml/parser \
+            -I$(top_builddir)/modules/platforms

Added: webservices/axis2/trunk/c/modules/xml/attachments/attachments_mime_helper.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/attachments/attachments_mime_helper.c?rev=388891&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/attachments/attachments_mime_helper.c (added)
+++ webservices/axis2/trunk/c/modules/xml/attachments/attachments_mime_helper.c Sun Mar 26 02:00:06 2006
@@ -0,0 +1,122 @@
+/*
+ * 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_om_text.h>
+#include <axis2_om_output.h>
+#include <axis2_string.h>
+
+/* ops */
+axis2_status_t AXIS2_CALL
+axis2_om_text_free (axis2_om_text_t * om_text,
+                    axis2_env_t **env);
+
+axis2_status_t AXIS2_CALL 
+axis2_om_text_serialize (axis2_om_text_t * om_text,
+                         axis2_env_t **env,
+                         axis2_om_output_t * om_output);
+
+
+
+
+AXIS2_DECLARE(axis2_om_text_t*)
+axis2_om_text_create (axis2_env_t **env,
+                      axis2_om_node_t * parent,
+                      const axis2_char_t * value,
+                      axis2_om_node_t **node)
+{
+
+    axis2_om_text_impl_t *om_text = NULL;
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK((*env)->error, node, NULL);
+
+    *node = axis2_om_node_create (env);
+
+    if (!(*node))
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+    
+    
+    om_text = (axis2_om_text_impl_t *) AXIS2_MALLOC ((*env)->allocator,
+                                          sizeof (axis2_om_text_impl_t));
+
+    if (!om_text)
+    {
+        AXIS2_FREE ((*env)->allocator, *node);
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+
+    om_text->value = NULL;
+    if (value)
+        om_text->value = (axis2_char_t *) AXIS2_STRDUP(value,env);
+
+    /* om_text->attribute = NULL; */
+    om_text->content_id = NULL;
+    om_text->mime_type = NULL;
+
+    AXIS2_OM_NODE_SET_DATA_ELEMENT((*node), env, om_text);
+    AXIS2_OM_NODE_SET_NODE_TYPE((*node), env, AXIS2_OM_TEXT);
+    AXIS2_OM_NODE_SET_BUILD_STATUS((*node), env, AXIS2_FALSE);
+
+    if (parent && AXIS2_OM_NODE_GET_NODE_TYPE(parent, env) == AXIS2_OM_ELEMENT)
+    {
+        AXIS2_OM_NODE_SET_PARENT((*node), env, parent);
+        AXIS2_OM_NODE_ADD_CHILD (parent, env, (*node));
+    }
+
+    /* ops */
+    om_text->om_text.ops = NULL;
+    om_text->om_text.ops = (axis2_om_text_ops_t *) AXIS2_MALLOC((*env)->allocator,
+                                              sizeof (axis2_om_text_ops_t));
+
+    if (!om_text->om_text.ops)
+    {
+        AXIS2_FREE ((*env)->allocator, om_text->value);
+        AXIS2_FREE ((*env)->allocator, om_text);
+        AXIS2_FREE ((*env)->allocator, *node);
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+
+    om_text->om_text.ops->free = axis2_om_text_free;
+    om_text->om_text.ops->serialize = axis2_om_text_serialize;
+    om_text->om_text.ops->set_value = axis2_om_text_set_value;
+    om_text->om_text.ops->get_value = axis2_om_text_get_value;
+
+    return &(om_text->om_text);
+}
+
+
+axis2_status_t AXIS2_CALL
+axis2_om_text_free (axis2_om_text_t * om_text,
+                    axis2_env_t **env)
+{
+    AXIS2_FUNC_PARAM_CHECK(om_text, env, AXIS2_FAILURE);
+
+    if (AXIS2_INTF_TO_IMPL(om_text)->value)
+        AXIS2_FREE ((*env)->allocator, AXIS2_INTF_TO_IMPL(om_text)->value);
+
+    if (om_text->ops)
+        AXIS2_FREE ((*env)->allocator, om_text->ops);
+
+    if (om_text)
+        AXIS2_FREE ((*env)->allocator, AXIS2_INTF_TO_IMPL(om_text));
+
+    return AXIS2_SUCCESS;
+}
+

Added: webservices/axis2/trunk/c/modules/xml/attachments/axis2_data_handler.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/attachments/axis2_data_handler.h?rev=388891&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/attachments/axis2_data_handler.h (added)
+++ webservices/axis2/trunk/c/modules/xml/attachments/axis2_data_handler.h Sun Mar 26 02:00:06 2006
@@ -0,0 +1,116 @@
+/*
+ * 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_DATA_HANDLER_H
+#define AXIS2_DATA_HANDLER_H
+
+/**
+ * @file axis2_data_handler.h
+ * @brief axis2 data_handler interface
+ */
+
+#include <axis2.h>
+#include <axis2_error.h>
+#include <axis2_defines.h>
+#include <axis2_env.h>
+#include <axis2_allocator.h>
+#include <axis2_string.h>
+#include <axis2_array_list.h>
+#include <axis2_handler_desc.h>
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+/* This should be moved to header file later axis2_defines.h*/    
+#define axis2_byte_t char
+	
+typedef struct axis2_data_handler_ops axis2_data_handler_ops_t;
+typedef struct axis2_data_handler axis2_data_handler_t;	
+
+/*
+      private final DataSource ds;
+      private final DataFlavor flavor;
+      private CommandMap commandMap;
+      private DataContentHandler dch;
+*/
+
+/** @defgroup axis2_data_handler Flow
+  * @ingroup axis2_data_handler
+  * @{
+  */
+
+/** 
+ * @brief Flow ops struct
+ * Encapsulator struct for ops of axis2_data_handler
+ */
+struct axis2_data_handler_ops
+{
+	axis2_char_t * (AXIS2_CALL *get_content_type)(axis2_data_handler_t *data_handler, axis2_env_t **env); 
+	
+	axis2_byte_t * (AXIS2_CALL *get_input_stream)(axis2_data_handler_t *data_handler, axis2_env_t **env); 
+
+	axis2_status_t (AXIS2_CALL *write_to)(axis2_data_handler_t *data_handler, axis2_env_t **env, \
+							axis2_byte_t output_stream);
+
+	/** Deallocate memory
+     * @return status code
+     */
+    axis2_status_t (AXIS2_CALL *free) (axis2_data_handler_t *data_handler, axis2_env_t **env);
+};
+
+/** 
+ * @brief Flow struct
+ *	Flow  
+ */ 
+struct axis2_data_handler
+{
+	axis2_data_handler_ops_t *ops;
+	
+	/*
+    axis2_char_t type;
+    *void handler;	
+	*/
+};
+
+/**
+ * Creates data_handler struct
+ * @return pointer to newly created data_handler
+ */
+AXIS2_DECLARE(axis2_data_handler_t *) 
+axis2_data_handler_create (axis2_env_t **env, void *data, axis2_char_t *data_type);
+
+/*************************** Function macros **********************************/
+
+#define AXIS2_DATA_HANDLER_FREE(data_handler, env) ((data_handler)->ops->free (data_handler, env))
+
+#define AXIS2_DATA_HANDLER_GET_CONTENT_TYPE(data_handler, env) ((data_handler)->ops->get_content_type (data_handler, env))
+
+#define AXIS2_DATA_HANDLER_GET_INPUT_STREAM(data_handler, env) ((data_handler)->ops->get_input_stream (data_handler, env))
+
+#define AXIS2_DATA_HANDLER_WRITE_TO(data_handler, env, output_stream) ((data_handler)->ops->write_to (data_handler, env, output_stream));
+
+/*************************** End of function macros ***************************/
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+#endif  /* AXIS2_DATA_HANDLER_H */

Added: webservices/axis2/trunk/c/modules/xml/attachments/axis2_mime_body_part.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/attachments/axis2_mime_body_part.h?rev=388891&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/attachments/axis2_mime_body_part.h (added)
+++ webservices/axis2/trunk/c/modules/xml/attachments/axis2_mime_body_part.h Sun Mar 26 02:00:06 2006
@@ -0,0 +1,112 @@
+/*
+ * 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_MIME_BODY_PART_H
+#define AXIS2_MIME_BODY_PART_H
+
+/**
+ * @file axis2_mime_body_part.h
+ * @brief axis2 mime_body_part interface
+ */
+
+#include <axis2.h>
+#include <axis2_error.h>
+#include <axis2_defines.h>
+#include <axis2_env.h>
+#include <axis2_allocator.h>
+#include <axis2_string.h>
+#include <axis2_array_list.h>
+#include <axis2_handler_desc.h>
+#include <axis2_data_handler.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+/* This should be moved to header file later axis2_defines.h*/    
+#define axis2_byte_t char
+	
+typedef struct axis2_mime_body_part_ops axis2_mime_body_part_ops_t;
+typedef struct axis2_mime_body_part axis2_mime_body_part_t;	
+
+/*
+      private final DataSource ds;
+      private final DataFlavor flavor;
+      private CommandMap commandMap;
+      private DataContentHandler dch;
+*/
+
+/** @defgroup axis2_mime_body_part Flow
+  * @ingroup axis2_mime_body_part
+  * @{
+  */
+
+/** 
+ * @brief Flow ops struct
+ * Encapsulator struct for ops of axis2_mime_body_part
+ */
+struct axis2_mime_body_part_ops
+{
+	axis2_status_t (AXIS2_CALL *add_header)(axis2_mime_body_part_t *mime_body_part, axis2_env_t **env, axis2_char_t *name, axis2_char_t *value); 
+	
+    axis2_status_t (AXIS2_CALL *set_data_handler)(axis2_mime_body_part_t *mime_body_part, axis2_env_t **env, axis2_data_handler_t *data_handler); 
+
+    axis2_status_t (AXIS2_CALL *write_to)(axis2_mime_body_part_t *mime_body_part, axis2_env_t **env,axis2_byte_t **output_stream, int *output_stream_size, axis2_char_t *ignore_list); 
+
+	/** Deallocate memory
+     * @return status code
+     */
+    axis2_status_t (AXIS2_CALL *free) (axis2_mime_body_part_t *mime_body_part, axis2_env_t **env);
+};
+
+/** 
+ * @brief Flow struct
+ *	Flow  
+ */ 
+struct axis2_mime_body_part
+{
+	axis2_mime_body_part_ops_t *ops;
+	
+};
+
+/**
+ * Creates mime_body_part struct
+ * @return pointer to newly created mime_body_part
+ */
+AXIS2_DECLARE(axis2_mime_body_part_t *) 
+axis2_mime_body_part_create (axis2_env_t **env);
+
+/*************************** Function macros **********************************/
+
+#define AXIS2_MIME_BODY_PART_FREE(mime_body_part, env) ((mime_body_part)->ops->free (mime_body_part, env))
+
+#define AXIS2_MIME_BODY_PART_ADD_HEADER(mime_body_part, env, name, value) ((mime_body_part)->ops->add_header (mime_body_part, env, name, value))
+
+#define AXIS2_MIME_BODY_PART_SET_DATA_HANDLER(mime_body_part, env, data_handler) ((mime_body_part)->ops->set_data_handler (mime_body_part, env, data_handler))
+
+#define AXIS2_MIME_BODY_WRITE_TO(mime_body_part, env, output_stream, output_stream_size, ignore_list)
+
+
+/*************************** End of function macros ***************************/
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+#endif  /* AXIS2_MIME_BODY_PART_H */

Added: webservices/axis2/trunk/c/modules/xml/attachments/axis2_mime_output.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/attachments/axis2_mime_output.h?rev=388891&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/attachments/axis2_mime_output.h (added)
+++ webservices/axis2/trunk/c/modules/xml/attachments/axis2_mime_output.h Sun Mar 26 02:00:06 2006
@@ -0,0 +1,110 @@
+/*
+ * 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_MIME_OUTPUT_H
+#define AXIS2_MIME_OUTPUT_H
+
+/**
+ * @file axis2_mime_output.h
+ * @brief axis2 mime_output interface
+ */
+
+#include <axis2.h>
+#include <axis2_error.h>
+#include <axis2_defines.h>
+#include <axis2_env.h>
+#include <axis2_allocator.h>
+#include <axis2_string.h>
+#include <axis2_array_list.h>
+#include <axis2_handler_desc.h>
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* This should be moved to header file later axis2_defines.h*/    
+#define axis2_byte_t char
+	
+typedef struct axis2_mime_output_ops axis2_mime_output_ops_t;
+typedef struct axis2_mime_output axis2_mime_output_t;	
+	
+
+/** @defgroup axis2_mime_output Flow
+  * @ingroup axis2_mime_output
+  * @{
+  */
+
+/** 
+ * @brief Flow ops struct
+ * Encapsulator struct for ops of axis2_mime_output
+ */
+struct axis2_mime_output_ops
+{
+
+    axis2_byte_t* (AXIS2_CALL *complete)(axis2_mime_output_t *mime_output,
+                            axis2_env_t **env, axis2_byte_t **output_stream, 
+                            axis2_char_t *string_to_write, 
+                            axis2_array_list_t *binary_node_list,
+                            axis2_char_t *boundary, axis2_char_t *content_id,
+                            axis2_char_t *char_set_encoding,axis2_char_t *soap_content_type);
+
+    axis2_char_t* (AXIS2_CALL *get_content_type_for_mime)(axis2_mime_output_t *mime_output, axis2_env_t **env, 
+                        axis2_char_t *boundary, axis2_char_t *content_id, axis2_char_t *char_set_encoding, axis2_char_t *soap_content_type);
+    
+	/** Deallocate memory
+     * @return status code
+     */
+    axis2_status_t (AXIS2_CALL *free) (axis2_mime_output_t *mime_output,
+                            axis2_env_t **env);
+
+};
+
+/** 
+ * @brief Flow struct
+ *	Flow  
+ */ 
+struct axis2_mime_output
+{
+	axis2_mime_output_ops_t *ops;
+};
+
+/**
+ * Creates mime_output struct
+ * @return pointer to newly created mime_output
+ */
+AXIS2_DECLARE(axis2_mime_output_t *) 
+axis2_mime_output_create (axis2_env_t **env);
+
+/*************************** Function macros **********************************/
+
+#define AXIS2_MIME_OUTPUT_FREE(mime_output, env) ((mime_output)->ops->free (mime_output, env))
+
+#define AXIS2_MIME_OUTPUT_COMPLETE(mime_output, env, output_stream, output_stream_size, string_to_write, binary_node_list, boundary, content_id, char_set_encoding, soap_content_type) \
+((mime_output)->ops->complete(mime_output, env, output_stream, output_stream_size, string_to_write, boundary, binary_node_list, content_id, char_set_encoding, soap_content_type))
+
+#define AXIS2_MIME_OUTPUT_GET_CONTENT_TYPE_FOR_MIME(mime_output, env, boundary, content_id, char_set_encoding, soap_content_type) \
+((mime_output)->ops->get_content_type_for_mime(mime_output, env, boundary, content_id, char_set_encoding, soap_content_type))
+
+/*************************** End of function macros ***************************/
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+#endif  /* AXIS2_MIME_OUTPUT_H */

Added: webservices/axis2/trunk/c/modules/xml/attachments/data_handler.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/attachments/data_handler.c?rev=388891&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/attachments/data_handler.c (added)
+++ webservices/axis2/trunk/c/modules/xml/attachments/data_handler.c Sun Mar 26 02:00:06 2006
@@ -0,0 +1,407 @@
+/*
+ * 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
+ *data_handler
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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_data_handler.h>
+
+/** 
+ * @brief Flow struct impl
+ *	Axis2 Flow impl  
+ */
+typedef struct axis2_data_handler_impl
+{
+	axis2_data_handler_t data_handler;
+    /**
+     * Field list
+     */
+    /*   
+	axis2_char_t type;
+    *void handler;
+	*/
+} axis2_data_handler_impl_t;
+
+
+
+#define AXIS2_INTF_TO_IMPL(data_handler) ((axis2_data_handler_impl_t *)(data_handler))
+
+/***************************** Function headers *******************************/
+
+axis2_status_t AXIS2_CALL
+axis2_data_handler_free (axis2_data_handler_t *data_handler, axis2_env_t **env);
+
+axis2_char_t * AXIS2_CALL
+axis2_data_handler_get_content_type (axis2_data_handler_t *data_handler, axis2_env_t **env);
+
+axis2_byte_t * AXIS2_CALL
+axis2_data_handler_get_input_stream (axis2_data_handler_t *data_handler, axis2_env_t **env); 
+
+axis2_status_t AXIS2_CALL
+axis2_data_handler_write_to(axis2_data_handler_t *data_handler, axis2_env_t **env, \
+							axis2_byte_t output_stream);
+
+/************************** End of Function headers ************************/
+
+AXIS2_DECLARE(axis2_data_handler_t *)
+axis2_data_handler_create (axis2_env_t **env, void *data, axis2_char_t *data_type)
+{
+    axis2_data_handler_impl_t *data_handler_impl = NULL;
+    
+	AXIS2_ENV_CHECK(env, NULL);
+	data_handler_impl = (axis2_data_handler_impl_t *) AXIS2_MALLOC((*env)->allocator, 
+        sizeof(axis2_data_handler_impl_t));
+		
+	if(NULL == data_handler_impl)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); 
+        return NULL;
+    }
+	
+    data_handler_impl->data_handler.ops = NULL;
+    
+	data_handler_impl->data_handler.ops = AXIS2_MALLOC ((*env)->allocator, 
+        sizeof(axis2_data_handler_ops_t));
+	if(NULL == data_handler_impl->data_handler.ops)
+    {
+        axis2_data_handler_free(&(data_handler_impl->data_handler), env);
+		AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+
+	data_handler_impl->data_handler.ops->free =  axis2_data_handler_free;
+    data_handler_impl->data_handler.ops->get_content_type = axis2_data_handler_get_content_type;
+    data_handler_impl->data_handler.ops->get_input_stream = axis2_data_handler_get_input_stream;
+    data_handler_impl->data_handler.ops->write_to = axis2_data_handler_write_to;
+	return &(data_handler_impl->data_handler);
+}
+
+/*************************** Start of op impls *************************/
+
+axis2_status_t AXIS2_CALL
+axis2_data_handler_free (axis2_data_handler_t *data_handler, axis2_env_t **env)
+{
+    axis2_data_handler_impl_t *data_handler_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    data_handler_impl = AXIS2_INTF_TO_IMPL(data_handler);
+    
+    if(NULL != data_handler->ops)
+    {
+        AXIS2_FREE((*env)->allocator, data_handler->ops);
+        data_handler->ops = NULL;
+    }
+    
+    if(data_handler_impl)
+    {
+        AXIS2_FREE((*env)->allocator, data_handler_impl);
+        data_handler_impl = NULL;
+    }
+    
+    return AXIS2_SUCCESS;
+}
+
+axis2_char_t * AXIS2_CALL
+axis2_data_handler_get_content_type (axis2_data_handler_t *data_handler, axis2_env_t **env) 
+{
+    AXIS2_ENV_CHECK(env, NULL);       
+	
+	/*@TODO implement the following*/
+	return "";
+}
+
+axis2_byte_t * AXIS2_CALL
+axis2_data_handler_get_input_stream (axis2_data_handler_t *data_handler, axis2_env_t **env) 
+{
+    AXIS2_ENV_CHECK(env, NULL);       
+	
+	/*@TODO implement the following*/
+	/**
+	InputStream getInputStream()
+	final DataContentHandler dch = getDataContentHandler();
+             if (dch == null) {
+                 throw new UnsupportedDataTypeException();
+           }
+             final PipedInputStream is = new PipedInputStream();
+             Thread thread = new Thread() {
+                 public void run() {
+                     try {
+                         PipedOutputStream os = new PipedOutputStream(is);
+                        is.connect(os);
+                         try {
+                             dch.writeTo(data, mimeType, os);
+                         } finally {
+                            os.close();
+                         }
+                     } catch (IOException e) {
+                         // ignore, per spec - doh!
+                     }
+                 }
+             };
+             thread.start();
+             return is;
+	*/		
+	return "";
+}
+
+axis2_status_t AXIS2_CALL
+axis2_data_handler_write_to(axis2_data_handler_t *data_handler, axis2_env_t **env, \
+							axis2_byte_t output_stream)
+{
+	/**
+          if (ds instanceof ObjectDataSource) {
+              ObjectDataSource ods = (ObjectDataSource) ds;
+              DataContentHandler dch = getDataContentHandler();
+              if (dch == null) {
+                  throw new UnsupportedDataTypeException();
+              }
+              dch.writeTo(ods.data, ods.mimeType, os);
+          } else {
+              byte[] buffer = new byte[1024];
+              InputStream is = getInputStream();
+              try {
+                  int count;
+                  while ((count = is.read(buffer)) != -1) {
+                      os.write(buffer, 0, count);
+                  }
+              } finally {
+                  is.close();
+              }
+          }
+	*/  
+}
+
+/* Private Functions */
+
+
+/* ========================================================================= */
+/*
+55      public DataSource getDataSource() {
+56          return ds;
+57      }
+58  
+59      public String getName() {
+60          return ds.getName();
+61      }
+62  
+
+	
+66  
+70  
+
+92  
+93      public OutputStream getOutputStream() throws IOException {
+94          return ds.getOutputStream();
+95      }
+96  
+97      public synchronized DataFlavor[] getTransferDataFlavors() {
+98          return getDataContentHandler().getTransferDataFlavors();
+99      }
+100 
+101     public boolean isDataFlavorSupported(DataFlavor flavor) {
+102         DataFlavor[] flavors = getTransferDataFlavors();
+103         for (int i = 0; i < flavors.length; i++) {
+104             DataFlavor dataFlavor = flavors[i];
+105             if (dataFlavor.equals(flavor)) {
+106                 return true;
+107             }
+108         }
+109         return false;
+110     }
+111 
+112     public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
+113         DataContentHandler dch = getDataContentHandler();
+114         if (dch != null) {
+115             return dch.getTransferData(flavor, ds);
+116         } else if (this.flavor.match(flavor)) {
+117             if (ds instanceof ObjectDataSource) {
+118                 return ((ObjectDataSource) ds).data;
+119             } else {
+120                 return ds.getInputStream();
+121             }
+122         } else {
+123             throw new UnsupportedFlavorException(flavor);
+124         }
+125     }
+126 
+127     public CommandInfo[] getPreferredCommands() {
+128         return getCommandMap().getPreferredCommands(ds.getContentType());
+129     }
+130 
+131     public CommandInfo[] getAllCommands() {
+132         return getCommandMap().getAllCommands(ds.getContentType());
+133     }
+134 
+135     public CommandInfo getCommand(String cmdName) {
+136         return getCommandMap().getCommand(ds.getContentType(), cmdName);
+137     }
+138 
+139     public Object getContent() throws IOException {
+140         if (ds instanceof ObjectDataSource) {
+141             return ((ObjectDataSource) ds).data;
+142         } else {
+143             DataContentHandler dch = getDataContentHandler();
+144             if (dch != null) {
+145                 return dch.getContent(ds);
+146             } else {
+147                 return ds.getInputStream();
+148             }
+149         }
+150     }
+151 
+152     public Object getBean(CommandInfo cmdinfo) {
+153         try {
+154             return cmdinfo.getCommandObject(this, this.getClass().getClassLoader());
+155         } catch (IOException e) {
+156             return null;
+157         } catch (ClassNotFoundException e) {
+158             return null;
+159         }
+160     }
+161
+*/
+     /**
+163      * A local implementation of DataSouce used to wrap an Object and mime-type.
+164      */
+/*
+165     private class ObjectDataSource implements DataSource {
+166         private final Object data;
+167         private final String mimeType;
+168 
+169         public ObjectDataSource(Object data, String mimeType) {
+170             this.data = data;
+171             this.mimeType = mimeType;
+172         }
+173 
+174         public String getName() {
+175             return null;
+176         }
+177 
+178         public String getContentType() {
+179             return mimeType;
+180         }
+181 
+182         public InputStream getInputStream() throws IOException {
+183             final DataContentHandler dch = getDataContentHandler();
+184             if (dch == null) {
+185                 throw new UnsupportedDataTypeException();
+186             }
+187             final PipedInputStream is = new PipedInputStream();
+188             Thread thread = new Thread() {
+189                 public void run() {
+190                     try {
+191                         PipedOutputStream os = new PipedOutputStream(is);
+192                         is.connect(os);
+193                         try {
+194                             dch.writeTo(data, mimeType, os);
+195                         } finally {
+196                             os.close();
+197                         }
+198                     } catch (IOException e) {
+199                         // ignore, per spec - doh!
+200                     }
+201                 }
+202             };
+203             thread.start();
+204             return is;
+205         }
+206 
+207         public OutputStream getOutputStream() throws IOException {
+208             return null;
+209         }
+210     }
+211 
+212     public synchronized void setCommandMap(CommandMap commandMap) {
+213         this.commandMap = commandMap;
+214         this.dch = null;
+215     }
+216 
+217     private synchronized CommandMap getCommandMap() {
+218         return commandMap != null ? commandMap : CommandMap.getDefaultCommandMap();
+219     }
+220
+*/
+     /**
+222      * Search for a DataContentHandler for our mime type.
+223      * The search is performed by first checking if a global factory has been set using
+224      * {@link #setDataContentHandlerFactory(DataContentHandlerFactory)};
+225      * if found then it is called to attempt to create a handler.
+226      * If this attempt fails, we then call the command map set using {@link #setCommandMap(CommandMap)}
+227      * (or if that has not been set, the default map returned by {@link CommandMap#getDefaultCommandMap()})
+228      * to create the handler.
+229      *
+230      * The resulting handler is cached until the global factory is changed.
+231      *
+232      * @return
+233      */
+/*
+234     private synchronized DataContentHandler getDataContentHandler() {
+235         DataContentHandlerFactory localFactory;
+236         synchronized (DataHandler.class) {
+237             if (factory != originalFactory) {
+238                 // setDCHF was called - clear our cached copy of the DCH and DCHF
+239                 dch = null;
+240                 originalFactory = factory;
+241             }
+242             localFactory = originalFactory;
+243         }
+244         if (dch == null) {
+245             String contentType = ds.getContentType();
+246             if (localFactory != null) {
+247                 dch = localFactory.createDataContentHandler(contentType);
+248             }
+249             if (dch == null) {
+250                 if (commandMap != null) {
+251                     dch = commandMap.createDataContentHandler(contentType);
+252                 } else {
+253                     dch = CommandMap.getDefaultCommandMap().createDataContentHandler(contentType);
+254                 }
+255             }
+256         }
+257         return dch;
+258     }
+259 
+260     /**
+261      * This is used to check if the DataContentHandlerFactory has been changed.
+262      * This is not specified behaviour but this check is required to make this work like the RI.
+263      */
+/*
+264     private DataContentHandlerFactory originalFactory;
+265 
+266     {
+267         synchronized (DataHandler.class) {
+268             originalFactory = factory;
+269         }
+270     }
+271 
+272     private static DataContentHandlerFactory factory;
+273 
+274     /**
+275      * Set the DataContentHandlerFactory to use.
+276      * If this method has already been called then an Error is raised.
+277      *
+278      * @param newFactory the new factory
+279      * @throws SecurityException if the caller does not have "SetFactory" RuntimePermission
+280      */
+/*
+281     public static synchronized void setDataContentHandlerFactory(DataContentHandlerFactory newFactory) {
+282         if (factory != null) {
+283             throw new Error("javax.activation.DataHandler.setDataContentHandlerFactory has already been defined");
+284         }
+285         SecurityManager sm = System.getSecurityManager();
+286         if (sm != null) {
+287             sm.checkSetFactory();
+288         }
+289         factory = newFactory;
+290     }	
+*/

Added: webservices/axis2/trunk/c/modules/xml/attachments/mime_body_part.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/attachments/mime_body_part.c?rev=388891&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/attachments/mime_body_part.c (added)
+++ webservices/axis2/trunk/c/modules/xml/attachments/mime_body_part.c Sun Mar 26 02:00:06 2006
@@ -0,0 +1,179 @@
+/*
+ * 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
+ *mime_body_part
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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_mime_body_part.h>
+
+/** 
+ * @brief Flow struct impl
+ *	Axis2 Flow impl  
+ */
+typedef struct axis2_mime_body_part_impl
+{
+	axis2_mime_body_part_t mime_body_part;
+    /**
+     * Field list
+     */
+	/** Hash map to hold header name, value pairs */
+	axis2_hash_t *header_map;
+} axis2_mime_body_part_impl_t;
+
+
+
+#define AXIS2_INTF_TO_IMPL(mime_body_part) ((axis2_mime_body_part_impl_t *)(mime_body_part))
+
+/***************************** Function headers *******************************/
+
+axis2_status_t AXIS2_CALL
+axis2_mime_body_part_free (axis2_mime_body_part_t *mime_body_part, axis2_env_t **env);
+
+axis2_status_t AXIS2_CALL
+axis2_mime_body_part_add_header (axis2_mime_body_part_t *mime_body_part, axis2_env_t **env,
+    axis2_char_t *name, axis2_char_t *value);
+
+axis2_status_t AXIS2_CALL
+axis2_mime_body_part_set_data_handler (axis2_mime_body_part_t *mime_body_part, axis2_env_t **env, axis2_data_handler_t *data_handler); 
+
+axis2_status_t AXIS2_CALL
+axis2_mime_body_part_write_to (axis2_mime_body_part_t *mime_body_part, axis2_env_t **env, 
+                                axis2_byte_t **output_stream, int *output_stream_size, 
+                                axis2_char_t *ignore_list);
+/************************** End of Function headers ************************/
+
+AXIS2_DECLARE(axis2_mime_body_part_t *)
+axis2_mime_body_part_create (axis2_env_t **env)
+{
+    axis2_mime_body_part_impl_t *mime_body_part_impl = NULL;
+    
+	AXIS2_ENV_CHECK(env, NULL);
+	mime_body_part_impl = (axis2_mime_body_part_impl_t *) AXIS2_MALLOC((*env)->allocator, 
+        sizeof(axis2_mime_body_part_impl_t));
+		
+	if(NULL == mime_body_part_impl)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); 
+        return NULL;
+    }
+	
+    mime_body_part_impl->mime_body_part.ops = NULL;
+    
+	mime_body_part_impl->mime_body_part.ops = AXIS2_MALLOC ((*env)->allocator, 
+        sizeof(axis2_mime_body_part_ops_t));
+	if(NULL == mime_body_part_impl->mime_body_part.ops)
+    {
+        axis2_mime_body_part_free(&(mime_body_part_impl->mime_body_part), env);
+		AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+
+	mime_body_part_impl->mime_body_part.ops->free =  axis2_mime_body_part_free;
+    mime_body_part_impl->mime_body_part.ops->add_header = axis2_mime_body_part_add_header;
+    mime_body_part_impl->mime_body_part.ops->set_data_handler = axis2_mime_body_part_set_data_handler; 
+    mime_body_part_impl->mime_body_part.ops->write_to = axis2_mime_body_part_write_to;
+    
+    return &(mime_body_part_impl->mime_body_part);
+}
+
+/*************************** Start of op impls *************************/
+
+axis2_status_t AXIS2_CALL
+axis2_mime_body_part_free (axis2_mime_body_part_t *mime_body_part, axis2_env_t **env)
+{
+    axis2_mime_body_part_impl_t *mime_body_part_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    mime_body_part_impl = AXIS2_INTF_TO_IMPL(mime_body_part);
+    
+    if(NULL != mime_body_part->ops)
+    {
+        AXIS2_FREE((*env)->allocator, mime_body_part->ops);
+        mime_body_part->ops = NULL;
+    }
+    
+    if(mime_body_part_impl)
+    {
+        AXIS2_FREE((*env)->allocator, mime_body_part_impl);
+        mime_body_part_impl = NULL;
+    }
+    
+    return AXIS2_SUCCESS;
+}
+
+
+axis2_status_t AXIS2_CALL
+axis2_mime_body_part_add_header (axis2_mime_body_part_t *mime_body_part, axis2_env_t **env,
+    axis2_char_t *name, axis2_char_t *value) 
+{
+	AXIS2_ENV_CHECK(env, NULL);
+	/* headers.addHeader(name, value);     */
+}
+
+/**
+ * This method provides the mechanism to set this body part's content.
+ * The given DataHandler object should wrap the actual content.
+ * 
+ * @param   dh      The DataHandler for the content
+ */                 
+
+axis2_status_t AXIS2_CALL
+axis2_mime_body_part_set_data_handler (axis2_mime_body_part_t *mime_body_part, axis2_env_t **env, axis2_data_handler_t *data_handler) 
+{
+	AXIS2_ENV_CHECK(env, NULL);
+    return AXIS2_SUCCESS;
+
+	/*** 
+	setDataHandler(DataHandler dh) 
+	this.dh = dh;
+	MimeBodyPart.invalidateContentHeaders(this);
+	*/
+}
+
+axis2_status_t AXIS2_CALL
+axis2_mime_body_part_write_to (axis2_mime_body_part_t *mime_body_part, axis2_env_t **env, 
+                                axis2_byte_t **output_stream, int *output_stream_size, 
+                                axis2_char_t *ignore_list) 
+{
+	AXIS2_ENV_CHECK(env, NULL);
+    return AXIS2_SUCCESS;
+}
+
+
+/**
+    static void writeTo(MimePart part, OutputStream os, String[] ignoreList)
+			throws IOException, MessagingException {
+
+	// see if we already have a LOS
+	LineOutputStream los = null;
+	if (os instanceof LineOutputStream) {
+	    los = (LineOutputStream) os;
+	} else {
+	    los = new LineOutputStream(os);
+	}
+
+	// First, write out the header
+	Enumeration hdrLines = part.getNonMatchingHeaderLines(ignoreList);
+	while (hdrLines.hasMoreElements())
+	    los.writeln((String)hdrLines.nextElement());
+
+	// The CRLF separator between header and content
+	los.writeln();
+
+	// Finally, the content. Encode if required.
+	// XXX: May need to account for ESMTP ?
+	os = MimeUtility.encode(os, part.getEncoding());
+	part.getDataHandler().writeTo(os);
+	os.flush(); // Needed to complete encoding
+    }
+*/

Added: webservices/axis2/trunk/c/modules/xml/attachments/mime_output.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/attachments/mime_output.c?rev=388891&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/attachments/mime_output.c (added)
+++ webservices/axis2/trunk/c/modules/xml/attachments/mime_output.c Sun Mar 26 02:00:06 2006
@@ -0,0 +1,441 @@
+/*
+ * 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
+ *mime_output
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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_mime_output.h>
+#include <axis2_data_handler.h>
+#include <axis2_mime_body_part.h>
+#include <axis2_string.h>
+/** 
+ * @brief Flow struct impl
+ *	Axis2 Flow impl  
+ */
+
+
+axis2_char_t AXIS2_CRLF[] =  { 13, 10 };
+int AXIS2_CRLF_LENGTH = 2;
+
+typedef struct axis2_mime_output_impl
+{
+	axis2_mime_output_t mime_output;
+    /**
+     * Field list
+     *private XMLStreamWriter xmlWriter;
+     *private OutputStream outStream;
+     *private LinkedList binaryNodeList = new LinkedList();
+     *private StringWriter bufferedSOAPBody;
+     *private OMOutputFormat format = new OMOutputFormat();
+     */
+    
+    
+} axis2_mime_output_impl_t;
+
+#define AXIS2_INTF_TO_IMPL(mime_output) ((axis2_mime_output_impl_t *)(mime_output))
+#define AXIS2_MIME_BOUNDARY_BYTE 45
+#define AXIS2_MIME_CRLF_BYTE 13
+/* private static byte[] CRLF =  { 13, 10 }; */
+
+axis2_status_t axis2_char_2_byte(axis2_env_t **env, axis2_char_t *char_buffer, axis2_byte_t **byte_buffer, int *byte_buffer_size);
+
+axis2_status_t axis2_char_2_byte(axis2_env_t **env, axis2_char_t *char_buffer, axis2_byte_t **byte_buffer, int *byte_buffer_size)
+{
+    int length;
+    int i = 0;
+    axis2_byte_t *bytes;
+    /*env check*/
+    length = AXIS2_STRLEN(char_buffer);
+    bytes = AXIS2_MALLOC((*env)->allocator, length * sizeof(axis2_byte_t));
+    /*@TODO do the char to byte conversion*/
+    
+    for(i = 0; i < length; i++)
+    {
+        bytes[i] = (axis2_byte_t) char_buffer[i];
+    }
+    byte_buffer = &bytes;
+    *byte_buffer_size = length;
+}
+
+/***************************** Function headers *******************************/
+
+axis2_status_t AXIS2_CALL
+axis2_mime_output_free (axis2_mime_output_t *mime_output, axis2_env_t **env);
+
+axis2_byte_t * AXIS2_CALL
+axis2_mime_output_complete(axis2_mime_output_t *mime_output,
+                            axis2_env_t **env, axis2_byte_t **output_stream, 
+                            int *output_stream_size, 
+                            axis2_char_t *string_to_write, 
+                            axis2_array_list_t *binary_node_list,
+                            axis2_char_t *boundary, axis2_char_t *content_id,
+                            axis2_char_t *char_set_encoding,axis2_char_t *soap_content_type);
+axis2_status_t * AXIS2_CALL
+axis2_start_writing_mime (axis2_mime_output_t *mime_output, 
+                            axis2_env_t **env, axis2_byte_t **output_stream, 
+                            int *output_stream_size, axis2_char_t *boundary);
+
+axis2_mime_body_part_t * AXIS2_CALL
+axis2_create_mime_body_part (axis2_mime_output_t *mime_output, axis2_env_t **env);
+
+axis2_status_t AXIS2_CALL
+axis2_write_body_part (axis2_mime_output_t *mime_output, axis2_env_t **env, 
+                        axis2_byte_t **output_stream, int *output_stream_size, 
+                        axis2_mime_body_part_t *part, axis2_char_t *boundary);
+
+axis2_status_t AXIS2_CALL
+axis2_write_mime_boundary (axis2_mime_output_t *mime_output, axis2_env_t **env, 
+                            axis2_byte_t **output_stream, int *output_stream_size, 
+                            axis2_char_t *boundary);
+
+axis2_status_t AXIS2_CALL
+axis2_write_finish_writing_mime (axis2_mime_output_t *mime_output, axis2_env_t **env, 
+                        axis2_byte_t **output_stream, int *output_stream_size, axis2_char_t *boundary);
+
+axis2_char_t * AXIS2_CALL
+axis2_mime_output_get_content_type_for_mime (axis2_mime_output_t *mime_output, axis2_env_t **env, 
+                        axis2_char_t *boundary, axis2_char_t *content_id, axis2_char_t *char_set_encoding, axis2_char_t *soap_content_type);
+
+/************************** End of Function headers ************************/
+
+AXIS2_DECLARE(axis2_mime_output_t *)
+axis2_mime_output_create (axis2_env_t **env)
+{
+    axis2_mime_output_impl_t *mime_output_impl = NULL;
+    
+	AXIS2_ENV_CHECK(env, NULL);
+	mime_output_impl = (axis2_mime_output_impl_t *) AXIS2_MALLOC((*env)->allocator, 
+        sizeof(axis2_mime_output_impl_t));
+		
+	if(NULL == mime_output_impl)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); 
+        return NULL;
+    }
+	
+    mime_output_impl->mime_output.ops = NULL;
+    
+	mime_output_impl->mime_output.ops = AXIS2_MALLOC ((*env)->allocator, 
+        sizeof(axis2_mime_output_ops_t));
+	if(NULL == mime_output_impl->mime_output.ops)
+    {
+        axis2_mime_output_free(&(mime_output_impl->mime_output), env);
+		AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+    
+	mime_output_impl->mime_output.ops->free =  axis2_mime_output_free;
+    mime_output_impl->mime_output.ops->complete = axis2_mime_output_complete;
+    mime_output_impl->mime_output.ops->get_content_type_for_mime = axis2_mime_output_get_content_type_for_mime; 
+	return &(mime_output_impl->mime_output);
+}
+
+/*************************** Start of op impls *************************/
+
+axis2_status_t AXIS2_CALL    
+
+axis2_mime_output_free (axis2_mime_output_t *mime_output, axis2_env_t **env)
+{
+    axis2_mime_output_impl_t *mime_output_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    mime_output_impl = AXIS2_INTF_TO_IMPL(mime_output);
+    
+    if(NULL != mime_output->ops)
+    {
+        AXIS2_FREE((*env)->allocator, mime_output->ops);
+        mime_output->ops = NULL;
+    }
+    
+    if(mime_output_impl)
+    {
+        AXIS2_FREE((*env)->allocator, mime_output_impl);
+        mime_output_impl = NULL;
+    }
+    
+    return AXIS2_SUCCESS;
+}
+
+
+axis2_byte_t * AXIS2_CALL
+axis2_mime_output_complete(axis2_mime_output_t *mime_output,
+                            axis2_env_t **env, axis2_byte_t **output_stream, 
+                            int *output_stream_size, 
+                            axis2_char_t *string_to_write, 
+                            axis2_array_list_t *binary_node_list,
+                            axis2_char_t *boundary, axis2_char_t *content_id,
+                            axis2_char_t *char_set_encoding,axis2_char_t *soap_content_type)
+{
+            /*axis2_byte_t *mime_stream = NULL;
+            AXIS2_CRLF_LENGTH
+            axis2_byte_t *root_mime_body_part = NULL;
+            Define this
+            int root_mime_body_part_length = 0;
+            int mime_stream_length = (AXIS2_CRLF_LENGTH * 2) + (root_mime_body_part_length);
+            mime_stream = AXIS2_MALLOC((*env)->allocator, (mime_stream_length * sizeof(mime_stream_length)));
+            */
+    axis2_char_t *encoding_string = NULL;
+    axis2_char_t *header_value = NULL;
+    axis2_char_t *content_id_string = NULL;    
+
+    AXIS2_ENV_CHECK(env, NULL); 
+         
+    axis2_start_writing_mime (mime_output, env, output_stream, output_stream_size, boundary);
+
+    encoding_string = AXIS2_STRDUP("text/xml; charset=", env);
+    AXIS2_STRACAT(encoding_string, char_set_encoding, env);    
+       
+    axis2_data_handler_t *data_handler = axis2_data_handler_create(env, (void*)string_to_write, encoding_string);
+    
+    axis2_mime_body_part_t *root_mime_body_part = axis2_mime_body_part_create(env);
+    /*@TODO please check the correctness of the parameters passed*/
+    axis2_mime_body_part_set_data_handler(root_mime_body_part, env ,data_handler);
+
+    header_value = AXIS2_STRDUP("application/xop+xml; charset=", env);
+    AXIS2_STRACAT(header_value, char_set_encoding, env);
+    AXIS2_STRACAT(header_value, "; typeAXIS2_CRLF=\"", env);
+    AXIS2_STRACAT(header_value, soap_content_type, env);
+    AXIS2_STRACAT(header_value, "\";", env);
+    /*@TODO please check the correctness of the parameters passed*/
+    axis2_mime_body_part_add_header(root_mime_body_part, env, "content-transfer-encoding","binary");
+
+    AXIS2_STRACAT(content_id_string, "<", env);
+    AXIS2_STRACAT(content_id_string, content_id, env);
+    AXIS2_STRACAT(content_id_string, ">", env);
+    /*@TODO please check the correctness of the parameters passed*/
+    axis2_mime_body_part_add_header(root_mime_body_part, env, "content-id",content_id_string);
+    /***/
+    /*@TODO please check the correctness of the parameters passed*/
+    axis2_write_body_part (mime_output, env, output_stream, output_stream_size, root_mime_body_part, boundary);
+            
+            /*javax.activation.DataHandler dh = new javax.activation.DataHandler(writer.toString(),
+                    "text/xml; charset=" + char_set_encoding);
+            MimeBodyPart rootMimeBodyPart = new MimeBodyPart();
+            rootMimeBodyPart.setDataHandler(dh);
+            
+            rootMimeBodyPart.addHeader("content-type",
+                    "application/xop+xml; charset=" + char_set_encoding + 
+					"; typeAXIS2_CRLF=\""+soap_content_type+"\";");
+            rootMimeBodyPart.addHeader("content-transfer-encoding", "binary");
+            rootMimeBodyPart.addHeader("content-id","<"+content_id+">");
+            */
+    
+            /*writeBodyPart(outStream, rootMimeBodyPart, boundary);*/
+    
+    
+            
+            /*
+            Iterator binaryNodeIterator = binary_node_list.iterator();
+            while (binaryNodeIterator.hasNext()) {
+                OMText binaryNode = (OMText) binaryNodeIterator.next();
+                writeBodyPart(outStream, createMimeBodyPart(binaryNode),
+                        boundary);
+
+            finishWritingMime(outStream);
+            */
+    }
+
+
+/**
+  * This will write the boundary with CRLF data_handler 
+  * The method is a private method and is called from axis2_output_complete method
+  */
+
+axis2_status_t * AXIS2_CALL
+axis2_start_writing_mime (axis2_mime_output_t *mime_output,
+                            axis2_env_t **env, axis2_byte_t **output_stream,
+                            int *output_stream_size, axis2_char_t *boundary)
+{
+    AXIS2_ENV_CHECK(env, NULL);     
+    axis2_write_mime_boundary (mime_output, env, output_stream, output_stream_size, boundary);
+}
+
+
+ 
+/*
+    public static void writeMimeBoundary(OutputStream outStream,
+                                         axis2_char_t *boundary) throws IOException {
+        outStream.write(new byte[]{45, 45});
+        outStream.write(boundary.getBytes());
+    }
+*/
+/*@TODO please check the coretness of the following method*/
+axis2_status_t AXIS2_CALL
+axis2_write_mime_boundary (axis2_mime_output_t *mime_output, axis2_env_t **env,
+                            axis2_byte_t **output_stream, int *output_stream_size, 
+                            axis2_char_t *boundary)
+{
+    axis2_byte_t *byte_buffer;
+    axis2_byte_t *byte_stream;
+    int size;
+        
+    AXIS2_ENV_CHECK(env, NULL);
+    
+    axis2_char_2_byte(env, boundary, &byte_buffer, &size);
+    byte_stream = AXIS2_MALLOC((*env)->allocator, (size + 1) * sizeof(axis2_byte_t));
+    byte_stream[size + 1] = AXIS2_MIME_BOUNDARY_BYTE;
+    
+    
+    AXIS2_FREE((*env)->allocator, byte_buffer);
+    
+    output_stream = &byte_stream;
+    output_stream_size = size + 1;
+        
+    return AXIS2_SUCCESS;
+}
+
+
+axis2_mime_body_part_t * AXIS2_CALL
+axis2_create_mime_body_part (axis2_mime_output_t *mime_output, axis2_env_t **env)
+/*public static MimeBodyPart createMimeBodyPart(OMText node)*/
+{
+    /**    
+      *MimeBodyPart mimeBodyPart = new MimeBodyPart();
+      *mimeBodyPart.setDataHandler((javax.activation.DataHandler)node.getDataHandler());
+      *mimeBodyPart.addHeader("content-id", "<"+node.getContentID()+">");
+      *mimeBodyPart.addHeader("content-type", "application/octet-stream");
+      *mimeBodyPart.addHeader("content-transfer-encoding", "binary");
+      *return mimeBodyPart;
+     */
+    AXIS2_ENV_CHECK(env, NULL);     
+}
+
+
+
+/**
+     * Writes a CRLF for the earlier boundary then the BodyPart data
+     * with headers followed by boundary. Writes only the boundary. No more, int *output_stream_size, 
+     * CRLF's are written after that.
+     *
+     */
+/*  
+  public static void writeBodyPart(OutputStream outStream,
+                                     MimeBodyPart part, 
+                                     axis2_char_t *boundary) throws IOException,
+            MessagingException {
+        outStream.write(CRLF);
+        part.writeTo(outStream);
+        outStream.write(CRLF);
+        writeMimeBoundary(outStream, boundary);
+    }
+*/
+
+
+axis2_status_t AXIS2_CALL
+axis2_write_body_part (axis2_mime_output_t *mime_output, axis2_env_t **env, 
+                        axis2_byte_t **output_stream, int *output_stream_size, 
+                        axis2_mime_body_part_t *part, axis2_char_t *boundary)
+{
+    axis2_byte_t *byte_buffer;
+    axis2_byte_t *byte_stream;
+    int size;
+        
+    AXIS2_ENV_CHECK(env, NULL);
+    
+    axis2_char_2_byte(env, boundary, &byte_buffer, &size);
+    byte_stream = AXIS2_MALLOC((*env)->allocator, (size + 2) * sizeof(axis2_byte_t));
+    /*@TODO pls implement this part*/
+    /*
+    byte_stream[0] = AXIS2_MIME_CRLF_BYTE;
+    memcpy(&byte_stream[2], byte_buffer, size);
+    byte_stream[3] = AXIS2_MIME_CRLF_BYTE;
+    */
+    AXIS2_FREE((*env)->allocator, byte_buffer);
+    
+    output_stream = &byte_stream;
+    output_stream_size = size + 2;
+        
+    return AXIS2_SUCCESS;    
+    
+}
+
+
+   /* ========================== ================================*/
+
+
+/**
+     * This will write "--" to the end of last boundary
+     */
+
+axis2_status_t AXIS2_CALL
+axis2_write_finish_writing_mime (axis2_mime_output_t *mime_output, axis2_env_t **env, 
+                        axis2_byte_t **output_stream, int *output_stream_size, axis2_char_t *boundary)
+{
+    axis2_byte_t *byte_buffer;
+    axis2_byte_t *byte_stream;
+    int size;
+        
+    AXIS2_ENV_CHECK(env, NULL);
+    
+    axis2_char_2_byte(env, boundary, &byte_buffer, &size);
+    byte_stream = AXIS2_MALLOC((*env)->allocator, (size + 2) * sizeof(axis2_byte_t));
+    
+    AXIS2_FREE((*env)->allocator, byte_buffer);
+    
+    output_stream = &byte_stream;
+    output_stream_size = size + 2;
+        
+    return AXIS2_SUCCESS;    
+
+}
+/*  public static void finishWritingMime(OutputStream outStream)
+            throws IOException {
+        outStream.write(new byte[]{45, 45});
+    }
+*/
+
+
+axis2_char_t * AXIS2_CALL
+axis2_mime_output_get_content_type_for_mime (axis2_mime_output_t *mime_output, axis2_env_t **env, 
+                        axis2_char_t *boundary, axis2_char_t *content_id, axis2_char_t *char_set_encoding, axis2_char_t *soap_content_type)
+{
+    axis2_char_t *content_type_string = NULL;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    
+    content_type_string = AXIS2_STRDUP("multipart/related", env);
+    AXIS2_STRACAT(content_type_string, "; ", env);       
+    AXIS2_STRACAT(content_type_string, "boundary=", env);
+    AXIS2_STRACAT(content_type_string, boundary, env);
+    AXIS2_STRACAT(content_type_string, "; ", env);
+    AXIS2_STRACAT(content_type_string, "type=\"application/xop+xml\"", env);
+    AXIS2_STRACAT(content_type_string, "; ", env);
+    AXIS2_STRACAT(content_type_string, "start=\"<", env);
+    AXIS2_STRACAT(content_type_string, content_id , env);
+    AXIS2_STRACAT(content_type_string, ">\"", env);
+    AXIS2_STRACAT(content_type_string, "; ", env);
+    AXIS2_STRACAT(content_type_string, "start-info=\"", env);
+    AXIS2_STRACAT(content_type_string, soap_content_type, env);
+    AXIS2_STRACAT(content_type_string, "\"", env);    
+    
+    /*@TODO check this line*/
+    return content_type_string;
+}
+
+/*
+    public static axis2_char_t *getContentTypeForMime(axis2_char_t *boundary, axis2_char_t *content_id, axis2_char_t *char_set_encoding, axis2_char_t *soap_content_type) {
+        StringBuffer sb = new StringBuffer();
+        sb.append("multipart/related");
+        sb.append("; ");
+        sb.append("boundary=");
+        sb.append(boundary);
+        sb.append("; ");
+        sb.append("type=\"application/xop+xml\"");
+        sb.append("; ");
+        sb.append("start=\"<" + content_id + ">\"");
+        sb.append("; ");
+        sb.append("start-info=\""+soap_content_type+"\"");
+        return sb.toString();
+    }
+}
+*/

Modified: webservices/axis2/trunk/c/modules/xml/om/Makefile.am
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/Makefile.am?rev=388891&r1=388890&r2=388891&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/Makefile.am (original)
+++ webservices/axis2/trunk/c/modules/xml/om/Makefile.am Sun Mar 26 02:00:06 2006
@@ -14,9 +14,10 @@
                         om_children_iterator.c \
                         om_children_qname_iterator.c \
                         om_child_element_iterator.c \
-                        om_children_with_specific_attribute_iterator.c
+                        om_children_with_specific_attribute_iterator.c \
+                        om_output_format.c
 
-libaxis2_om_la_LIBADD =  ../../util/libaxis2_util.la 
+libaxis2_om_la_LIBADD =  ../../util/libaxis2_util.la ../attachments/libaxis2_attachments.la
 INCLUDES = -I$(top_builddir)/include \
             -I$(top_builddir)/modules/util \
             -I$(top_builddir)/modules/xml/parser \

Added: webservices/axis2/trunk/c/modules/xml/om/axis2_om_output_format.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/axis2_om_output_format.h?rev=388891&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/axis2_om_output_format.h (added)
+++ webservices/axis2/trunk/c/modules/xml/om/axis2_om_output_format.h Sun Mar 26 02:00:06 2006
@@ -0,0 +1,158 @@
+/*
+ * 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_OM_OUTPUT_FORMAT_H
+#define AXIS2_OM_OUTPUT_FORMAT_H
+
+/**
+ * @file axis2_om_output_format.h
+ * @brief axis2 mime_output interface
+ */
+
+#include <axis2.h>
+#include <axis2_error.h>
+#include <axis2_defines.h>
+#include <axis2_env.h>
+#include <axis2_allocator.h>
+#include <axis2_string.h>
+#include <axis2_array_list.h>
+#include <axis2_handler_desc.h>
+#include <axis2_mime_output.h>
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* This should be moved to header file later axis2_defines.h*/    
+#define axis2_byte_t char
+
+    /**
+     * Field DEFAULT_CHAR_SET_ENCODING. Specifies the default
+     * character encoding scheme to be used.
+     */
+#define AXIS2_DEFAULT_CHAR_SET_ENCODING  "utf-8"
+	
+typedef struct axis2_om_output_format_ops axis2_om_output_format_ops_t;
+typedef struct axis2_om_output_format axis2_om_output_format_t;	
+	
+
+/** @defgroup axis2_om_output_format Flow
+  * @ingroup axis2_om_output_format
+  * @{
+  */
+
+/** 
+ * @brief Flow ops struct
+ * Encapsulator struct for ops of axis2_om_output_format
+ */
+struct axis2_om_output_format_ops
+{
+    axis2_status_t (AXIS2_CALL *is_optimized) (axis2_om_output_format_t *om_output_format, axis2_env_t **env);
+    
+    axis2_status_t (AXIS2_CALL *set_do_optimized) (axis2_om_output_format_t *om_output_format, axis2_env_t **env, const axis2_bool_t is_optimized);
+
+    axis2_char_t* (AXIS2_CALL *get_content_type) (axis2_om_output_format_t *om_output_format, axis2_env_t **env);
+    
+    axis2_char_t* (AXIS2_CALL *get_mime_boundary) (axis2_om_output_format_t *om_output_format, axis2_env_t **env);
+    
+    axis2_char_t* (AXIS2_CALL *get_root_content_id) (axis2_om_output_format_t *om_output_format, axis2_env_t **env);
+    
+    axis2_status_t (AXIS2_CALL *set_char_set_encoding) (axis2_om_output_format_t *om_output_format, axis2_env_t **env, axis2_char_t *char_set_encoding);
+    
+    axis2_char_t* (AXIS2_CALL *get_char_set_encoding) (axis2_om_output_format_t *om_output_format, axis2_env_t **env);
+    
+    axis2_char_t*  (AXIS2_CALL *get_next_content_id) (axis2_om_output_format_t *om_output_format, axis2_env_t **env);
+    
+    axis2_char_t* (AXIS2_CALL *get_xml_version)( axis2_om_output_format_t *om_output_format, axis2_env_t **env);
+    
+    axis2_status_t  (AXIS2_CALL *set_xml_version) (axis2_om_output_format_t *om_output_format, axis2_env_t **env, axis2_char_t *xml_version);
+    
+    axis2_bool_t  (AXIS2_CALL *is_soap11) (axis2_om_output_format_t *om_output_format, axis2_env_t **env); 
+    
+    axis2_status_t  (AXIS2_CALL *set_is_soap11) (axis2_om_output_format_t *om_output_format, axis2_env_t **env, const axis2_bool_t is_soap11);
+    
+    axis2_bool_t  (AXIS2_CALL *is_ignore_xml_declaration) (axis2_om_output_format_t *om_output_format, axis2_env_t **env); 
+    
+    axis2_status_t  (AXIS2_CALL *set_ignore_xml_declaration) (axis2_om_output_format_t *om_output_format, axis2_env_t **env, const axis2_bool_t ignore_xml_declaration);
+    
+	/** Deallocate memory
+     * @return status code
+     */
+    axis2_status_t (AXIS2_CALL *free) (axis2_om_output_format_t *mime_output,
+                            axis2_env_t **env);
+
+};
+
+/** 
+ * @brief Flow struct
+ *	Flow  
+ */ 
+struct axis2_om_output_format
+{
+	axis2_om_output_format_ops_t *ops;
+};
+
+/**
+ * Creates mime_output struct
+ * @return pointer to newly created mime_output
+ */
+AXIS2_DECLARE(axis2_om_output_format_t *) 
+axis2_om_output_format_create (axis2_env_t **env);
+
+/*************************** Function macros **********************************/
+
+#define AXIS2_OM_OUTPUT_FORMAT_FREE(om_output_format, env) ((om_output_format)->ops->free (om_output_format, env))
+
+#define AXIS2_OM_OUTPUT_FORMAT_IS_OPTIMIZED(om_output_format, env) ((om_output_format)->ops->is_optimized(om_output_format, env))
+
+#define AXIS2_OM_OUTPUT_FORMAT_SET_DO_OPTIMIZED(om_output_format, env, is_optimized) ((om_output_format)->ops->set_do_optimized(om_output_format, env, is_optimized))
+
+
+
+ #define AXIS2_OM_OUTPUT_FORMAT_GET_CONTENT_TYPE(om_output_format, env) ((om_output_format)->ops->get_content_type(om_output_format, env))
+
+ #define AXIS2_OM_OUTPUT_FORMAT_GET_MIME_BOUNDARY(om_output_format, env) ((om_output_format)->ops->get_mime_boundary(om_output_format, env))
+
+ #define AXIS2_OM_OUTPUT_FORMAT_GET_ROOT_CONTENT_ID(om_output_format, env) ((om_output_format)->ops->get_root_content_id(om_output_format, env))
+
+ #define AXIS2_OM_OUTPUT_FORMAT_SET_CHAR_SET_ENCODING(om_output_format, env, char_set_encoding) ((om_output_format)->ops->set_char_set_encoding(om_output_format, env, char_set_encoding))
+
+ #define AXIS2_OM_OUTPUT_FORMAT_GET_CHAR_SET_ENCODING(om_output_format, env) ((om_output_format)->ops->get_char_set_encoding(om_output_format, env))
+
+ #define AXIS2_OM_OUTPUT_FORMAT_GET_NEXT_CONTENT_ID(om_output_format, env) ((om_output_format)->ops->get_next_content_id(om_output_format, env))
+
+ #define AXIS2_OM_OUTPUT_FORMAT_GET_XML_VERSION(om_output_format, env) ((om_output_format)->ops->get_xml_version(om_output_format, env))
+
+ #define AXIS2_OM_OUTPUT_FORMAT_SET_XML_VERSION(om_output_format, env, xml_version) ((om_output_format)->ops->get_xml_version(om_output_format, env, xml_version))
+
+ #define AXIS2_OM_OUTPUT_FORMAT_IS_SOAP11(om_output_format, env) ((om_output_format)->ops->is_soap11(om_output_format, env)) 
+
+ #define AXIS2_OM_OUTPUT_FORMAT_SET_IS_SOAP11(om_output_format, env, is_soap11) ((om_output_format)->ops->set_is_soap11(om_output_format, env, is_soap11))
+
+ #define AXIS2_OM_OUTPUT_FORMAT_IS_IGNORE_XML_DECLARATION(om_output_format, env) ((om_output_format)->ops->is_ignore_xml_declaration(om_output_format, env)) 
+
+ #define AXIS2_OM_OUTPUT_FORMAT_SET_IGNORE_XML_DECLARATION(om_output_format, env, ignore_xml_declaration) ((om_output_format)->ops->set_ignore_xml_declaration(om_output_format, env, ignore_xml_declaration))
+
+/*************************** End of function macros ***************************/
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+#endif  /* AXIS2_OM_OUTPUT_FORMAT_H */

Modified: webservices/axis2/trunk/c/modules/xml/om/om_output.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/om_output.c?rev=388891&r1=388890&r2=388891&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/om_output.c (original)
+++ webservices/axis2/trunk/c/modules/xml/om/om_output.c Sun Mar 26 02:00:06 2006
@@ -18,8 +18,11 @@
 #include <stdarg.h>
 #include <axis2_string.h>
 #include <axis2_xml_writer.h>
-
-#define AXIS2_DEFAULT_CHAR_SET_ENCODING  "UTF-8"
+#include <axis2_mime_output.h>
+#include <axis2_om_output_format.h>
+#include <axis2_om_text.h>
+#include <axis2_array_list.h>
+/*#define AXIS2_DEFAULT_CHAR_SET_ENCODING  "UTF-8"*/
 /*#define AXIS2_DEFAULT_CHAR_SET_ENCODING  "ISO-8859-1"*/
 #define MAX_ARGS  4
 /****************************** impl struct ***********************************/
@@ -41,7 +44,8 @@
     /* xml version */
     axis2_char_t *xml_version;
     axis2_bool_t ignore_xml_declaration;
-    
+  
+    axis2_array_list_t *binary_node_list;    
 }axis2_om_output_impl_t;
 
 /************************ Macro ***********************************************/
@@ -99,6 +103,9 @@
                             (axis2_om_output_t *om_output,
                             axis2_env_t **env,
                             axis2_bool_t optimize); 
+
+axis2_bool_t AXIS2_CALL
+axis2_om_output_is_optimized(axis2_om_output_t *om_output,axis2_env_t **env);
                             
 axis2_xml_writer_t* AXIS2_CALL
 axis2_om_output_get_xml_writer
@@ -109,7 +116,17 @@
 axis2_om_output_write_xml_version_encoding(axis2_om_output_t *om_output,
                                            axis2_env_t **env);
 
+axis2_status_t AXIS2_CALL 
+axis2_om_output_flush(axis2_om_output_t *om_output,
+                                           axis2_env_t **env);
+axis2_char_t* AXIS2_CALL
+axis2_om_output_get_next_content_id(axis2_om_output_t *om_output,
+                        axis2_env_t **env);
                       
+
+axis2_status_t AXIS2_CALL
+axis2_om_output_write_optimized(axis2_om_output_t *om_output,
+                        axis2_env_t **env, axis2_om_text_t *om_text);
 /*********************** end function prototypes ******************************/                      
 
 AXIS2_DECLARE(axis2_om_output_t *)
@@ -139,6 +156,7 @@
     om_output_impl->char_set_encoding = NULL;
     om_output_impl->xml_version = NULL;
     om_output_impl->ignore_xml_declaration = AXIS2_TRUE;
+    om_output_impl->binary_node_list = NULL;
     
     om_output_impl->om_output.ops = NULL;
     
@@ -183,7 +201,8 @@
 
     om_output_impl->om_output.ops->write_xml_version_encoding =
         axis2_om_output_write_xml_version_encoding;
-        
+    
+    om_output_impl->om_output.ops->get_next_content_id = axis2_om_output_get_next_content_id;
         
     om_output_impl->char_set_encoding = AXIS2_STRDUP(
         AXIS2_DEFAULT_CHAR_SET_ENCODING, env);        
@@ -511,4 +530,70 @@
                                 output_impl->xml_version, 
                                 output_impl->char_set_encoding);
     
+}
+
+/*=================================================*/
+axis2_bool_t AXIS2_CALL
+axis2_om_output_is_optimized(axis2_om_output_t *om_output,axis2_env_t **env)
+{
+    axis2_bool_t is_optimized = AXIS2_FALSE;
+    
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    
+    axis2_om_output_format_t *om_output_format = axis2_om_output_format_create(env);
+    is_optimized = AXIS2_OM_OUTPUT_FORMAT_IS_OPTIMIZED(om_output_format, env);    
+    return is_optimized;
+}
+
+/*@TODO Following method method must be implemented*/
+axis2_status_t AXIS2_CALL 
+axis2_om_output_flush(axis2_om_output_t *om_output,
+                                           axis2_env_t **env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    
+    return AXIS2_SUCCESS;
+}
+/*
+    public void flush() throws XMLStreamException {
+        xmlWriter.flush();
+        String SOAPContentType;
+        if (format.isOptimized()) {
+            if (format.isSOAP11()) {
+                SOAPContentType = SOAP11Constants.SOAP_11_CONTENT_TYPE;
+            } else {
+                SOAPContentType = SOAP12Constants.SOAP_12_CONTENT_TYPE;
+            }
+            MIMEOutputUtils.complete(
+                    outStream,
+                    bufferedSOAPBody,
+                    binaryNodeList,
+                    format.getMimeBoundary(),
+                    format.getRootContentId(),
+                    format.getCharSetEncoding(), SOAPContentType);
+        }
+    }
+*/
+axis2_char_t* AXIS2_CALL
+axis2_om_output_get_next_content_id(axis2_om_output_t *om_output,
+                        axis2_env_t **env)
+{
+    axis2_om_output_format_t *om_output_format = NULL;
+    axis2_char_t *next_content_id = NULL;
+    AXIS2_ENV_CHECK(env,NULL);
+    om_output_format = axis2_om_output_format_create(env);
+    next_content_id = AXIS2_OM_OUTPUT_FORMAT_GET_NEXT_CONTENT_ID(om_output_format, env);
+    return next_content_id;
+}
+
+
+axis2_status_t AXIS2_CALL
+axis2_om_output_write_optimized(axis2_om_output_t *om_output, axis2_env_t **env, axis2_om_text_t *om_text)
+{
+    axis2_om_output_impl_t *om_output_impl = NULL;
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    om_output_impl = AXIS2_INTF_TO_IMPL(om_output);
+    om_output_impl->binary_node_list  = axis2_array_list_create(env, 5);
+    AXIS2_ARRAY_LIST_ADD(om_output_impl->binary_node_list, env, (void *)om_text);
+    return AXIS2_SUCCESS;
 }