summaryrefslogtreecommitdiffstats
path: root/util/include/axutil_stream.h
diff options
context:
space:
mode:
Diffstat (limited to 'util/include/axutil_stream.h')
-rw-r--r--util/include/axutil_stream.h294
1 files changed, 294 insertions, 0 deletions
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 <axutil_utils.h>
+#include <axutil_utils_defines.h>
+#include <axutil_env.h>
+#include <stdio.h>
+
+#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 */