1997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/* Copyright (c) 2003,2004, Stefan Haustein, Oberhausen, Rhld., Germany
2997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Copyright (c) 2006, James Seigel, Calgary, AB., Canada
3997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu *
4997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Permission is hereby granted, free of charge, to any person obtaining a copy
5997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * of this software and associated documentation files (the "Software"), to deal
6997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * in the Software without restriction, including without limitation the rights
7997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * to use, copy, modify, merge, publish, distribute, sublicense, and/or
8997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * sell copies of the Software, and to permit persons to whom the Software is
9997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * furnished to do so, subject to the following conditions:
10997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu *
11997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The  above copyright notice and this permission notice shall be included in
12997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * all copies or substantial portions of the Software.
13997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu *
14997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * IN THE SOFTWARE. */
21997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
22997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupackage org.ksoap2.transport;
23997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
24997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.util.List;
25997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.io.*;
26997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
27997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/**
28997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Interface to allow the abstraction of the raw transport information
29997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */
30997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupublic interface ServiceConnection {
31997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
32997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    public static final int DEFAULT_TIMEOUT = 20000; // 20 seconds
33997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    public static final int DEFAULT_BUFFER_SIZE = 256 * 1024; // 256 Kb
34997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
35997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    /**
36997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * Make an outgoing connection.
37997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *
38997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @exception IOException
39997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     */
40997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    public void connect() throws IOException;
41997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
42997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    /**
43997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * Disconnect from the outgoing connection
44997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *
45997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @exception IOException
46997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     */
47997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    public void disconnect() throws IOException;
48997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
49997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    /**
50997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * Returns to the caller all of the headers that were returned with the
51997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * response to the SOAP request. Primarily this gives the caller an
52997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * opportunity to save the cookies for later use.
53997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *
54997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @return List of HeaderProperty instances that were returned as part of the http response as http header
55997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * properties
56997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *
57997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @exception IOException
58997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     */
59997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    public List getResponseProperties() throws IOException;
60997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
61997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    /**
62997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * Set properties on the outgoing connection.
63997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *
64997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @param propertyName
65997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *            the name of the property to set. For HTTP connections these
66997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *            are the request properties in the HTTP Header.
67997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @param value
68997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *            the string to set the property header to.
69997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @exception IOException
70997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     */
71997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    public void setRequestProperty(String propertyName, String value) throws IOException;
72997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
73997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    /**
74997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * Sets how to make the requests. For HTTP this is typically POST or GET.
75997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *
76997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @param requestMethodType
77997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *            the type of request method to make the soap call with.
78997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @exception IOException
79997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     */
80997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    public void setRequestMethod(String requestMethodType) throws IOException;
81997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
82997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    /**
83997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * If the length of a HTTP request body is known ahead, sets fixed length
84997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * to enable streaming without buffering. Sets after connection will cause an exception.
85997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *
86997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @param contentLength the fixed length of the HTTP request body
87997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @see http://developer.android.com/reference/java/net/HttpURLConnection.html
88997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     **/
89997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    public void setFixedLengthStreamingMode(int contentLength);
90997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
91997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    /**
92997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * Open and return the outputStream to the endpoint.
93997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *
94997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @exception IOException
95997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @return the output stream to write the soap message to.
96997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     */
97997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    public OutputStream openOutputStream() throws IOException;
98997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
99997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    /**
100997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * Opens and returns the inputstream from which to parse the result of the
101997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * soap call.
102997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *
103997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @exception IOException
104997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @return the inputstream containing the xml to parse the result from the
105997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *         call from.
106997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     */
107997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    public InputStream openInputStream() throws IOException;
108997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
109997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    /**
110997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @return the error stream for the call.
111997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     */
112997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    public InputStream getErrorStream();
113997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
114997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    /**
115997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * Return the name of the host that is specified as the web service target
116997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *
117997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @return Host name
118997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     */
119997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    abstract public String getHost();
120997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
121997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    /**
122997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * Return the port number of the host that is specified as the web service target
123997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *
124997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @return Port number
125997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     */
126997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    abstract public int getPort();
127997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
128997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    /**
129997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * Return the path to the web service target
130997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     *
131997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @return The URL's path
132997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     */
133997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    abstract public String getPath();
134997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu}
135