Hans Leidekker : webservices: Implement WsSetInput.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Sep 15 09:50:50 CDT 2015


Module: wine
Branch: master
Commit: cf8efc384a40502ae29c453dc8ce7f58392983d0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=cf8efc384a40502ae29c453dc8ce7f58392983d0

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Tue Sep 15 11:15:58 2015 +0200

webservices: Implement WsSetInput.

---

 dlls/webservices/reader.c         | 58 +++++++++++++++++++++++++++++++++++++++
 dlls/webservices/webservices.spec |  2 +-
 2 files changed, 59 insertions(+), 1 deletion(-)

diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index 4f4d31c..7a811c7 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -276,6 +276,8 @@ reader_props[] =
 
 struct reader
 {
+    const char             *input_data;
+    ULONG                   input_size;
     ULONG                   prop_count;
     WS_XML_READER_PROPERTY  prop[sizeof(reader_props)/sizeof(reader_props[0])];
 };
@@ -407,6 +409,7 @@ HRESULT WINAPI WsGetReaderProperty( WS_XML_READER *handle, WS_XML_READER_PROPERT
     TRACE( "%p %u %p %u %p\n", handle, id, buf, size, error );
     if (error) FIXME( "ignoring error parameter\n" );
 
+    if (!reader->input_data) return WS_E_INVALID_OPERATION;
     return get_reader_prop( reader, id, buf, size );
 }
 
@@ -423,3 +426,58 @@ HRESULT WINAPI WsSetErrorProperty( WS_ERROR *handle, WS_ERROR_PROPERTY_ID id, co
     if (id == WS_ERROR_PROPERTY_LANGID) return WS_E_INVALID_OPERATION;
     return set_error_prop( error, id, value, size );
 }
+
+/**************************************************************************
+ *          WsSetInput		[webservices.@]
+ */
+HRESULT WINAPI WsSetInput( WS_XML_READER *handle, const WS_XML_READER_ENCODING *encoding,
+                           const WS_XML_READER_INPUT *input, const WS_XML_READER_PROPERTY *properties,
+                           ULONG count, WS_ERROR *error )
+{
+    struct reader *reader = (struct reader *)handle;
+    HRESULT hr;
+    ULONG i;
+
+    TRACE( "%p %p %p %p %u %p\n", handle, encoding, input, properties, count, error );
+    if (error) FIXME( "ignoring error parameter\n" );
+
+    if (!reader) return E_INVALIDARG;
+
+    switch (encoding->encodingType)
+    {
+        case WS_XML_READER_ENCODING_TYPE_TEXT:
+        {
+            WS_XML_READER_TEXT_ENCODING *text = (WS_XML_READER_TEXT_ENCODING *)encoding;
+            if (text->charSet != WS_CHARSET_UTF8)
+            {
+                FIXME( "charset %u not supported\n", text->charSet );
+                return E_NOTIMPL;
+            }
+            break;
+        }
+        default:
+            FIXME( "encoding type %u not supported\n", encoding->encodingType );
+            return E_NOTIMPL;
+    }
+    switch (input->inputType)
+    {
+        case WS_XML_READER_INPUT_TYPE_BUFFER:
+        {
+            WS_XML_READER_BUFFER_INPUT *buf = (WS_XML_READER_BUFFER_INPUT *)input;
+            reader->input_data = buf->encodedData;
+            reader->input_size = buf->encodedDataSize;
+            break;
+        }
+        default:
+            FIXME( "input type %u not supported\n", input->inputType );
+            return E_NOTIMPL;
+    }
+
+    for (i = 0; i < count; i++)
+    {
+        hr = set_reader_prop( reader, properties[i].id, properties[i].value, properties[i].valueSize );
+        if (hr != S_OK) return hr;
+    }
+
+    return S_OK;
+}
diff --git a/dlls/webservices/webservices.spec b/dlls/webservices/webservices.spec
index 487c2af..6a81612 100644
--- a/dlls/webservices/webservices.spec
+++ b/dlls/webservices/webservices.spec
@@ -150,7 +150,7 @@
 @ stub WsSetFaultErrorDetail
 @ stub WsSetFaultErrorProperty
 @ stub WsSetHeader
-@ stub WsSetInput
+@ stdcall WsSetInput(ptr ptr ptr ptr long ptr)
 @ stub WsSetInputToBuffer
 @ stub WsSetListenerProperty
 @ stub WsSetMessageProperty




More information about the wine-cvs mailing list