wttools.protocols.cache
Class ProtocolImpl
java.lang.Object
|
+--wttools.protocols.cache.ProtocolImpl
- All Implemented Interfaces:
- ProtocolIfc
- public class ProtocolImpl
- extends java.lang.Object
- implements ProtocolIfc
It is implementation of cache subsystem for all protocols.
This class should work as wrapper class for particular
protocol implementation.
Created: Sun Oct 28 16:46:03 2001
- Version:
- $Revision: 1.8 $
- Author:
- Artur Hefczyc
Fields inherited from interface wttools.protocols.ifc.ProtocolIfc |
CODE_BAD_REQUEST, CODE_CONNECTION_ERROR, CODE_CONNECTION_OK, CODE_FORBIDDEN, CODE_HOST_NOT_FOUND, CODE_INTERNAL_SERVER_ERROR, CODE_LENGTH_REQUIRED, CODE_NETWORK_NOT_REACHABLE, CODE_NO_CONTENT, CODE_NOT_FOUND, CODE_NOT_INITIALIZED, CODE_PARTIAL_CONTENT, CODE_REDIRECT, CODE_REQUEST_TIMEOUT, CODE_SERVER_NOT_REACHABLE, CODE_UNAUTHORIZED, CODE_VERSION_NOT_SUPPORTED, METHOD_GET, METHOD_HEAD |
Method Summary |
void |
connect()
connect method performs all necessary actions
required to connect to remote resource. |
void |
disconnect()
disconnect method closes network connection. |
java.util.HashMap |
getAllHeaders()
Methods getAllHeaders returns all received header from
the web server. |
java.lang.String |
getClientId()
getClientId method returns client identification
string which it sends to web sever during connection. |
java.lang.Object |
getConnectionInfo()
getConnectionInfo method should return some connection
parameters. |
int |
getConnectionResult()
getConnectionResult method returns standarized for
all protocols connection with server result. |
java.util.List |
getConnectionStatuses()
getConnectionStatuses method calculates and returns connection
statuses in List . |
byte[] |
getContentData()
|
long |
getContentLength()
getContentLength method returns expected content length. |
java.lang.String |
getContentType()
getContentType method returns type of data stored in resource. |
URI |
getEffectiveURI()
getEffectiveURI returns effective uri of requested
resource. |
long |
getHeaderIntValue(java.lang.String param1)
Method getHeaderStrValue returns header value
as long integer for given header name. |
java.lang.String |
getHeaderStrValue(java.lang.String param1)
Method getHeaderStrValue returns header value
as String for given header name. |
int |
getInputBufferSize()
getInputBufferSize method returns input buffer size
which is set for this protocol. |
java.io.InputStream |
getInputStream()
getInputStream method returns InputStream
where from user can read resource data. |
java.lang.String |
getProtocolType()
getProtocolType method returns protocols type
it implementing. |
long |
getRealContentSize()
getRealContentSize method returns received size of data. |
java.lang.String |
getRequestData()
|
java.lang.String |
getServerId()
getServerId method returns web server identification string
detected during making connection. |
int |
getStreamReadTimeout()
getStreamReadTimeout method returns value of stream
read timeout. |
float |
getTransferSpeed()
getTransferSpeed method calculates and returns transfer speed
in bytes/sec. |
URI |
getURI()
getURI method returns URI for
which performing connection. |
java.lang.String |
getUserName()
getUserName method returns user name used during authorization process. |
java.lang.String |
getUserPassword()
getUserPassword method returns user password used during authorization process. |
boolean |
isAllowAllCookies()
|
boolean |
isAllowRedirect()
|
boolean |
isAllowUserInteraction()
|
boolean |
isDebug()
|
boolean |
isErrorRecoverable(int code)
This method isErrorRecoverable should be able to return
info if given error code is permanent or not. |
boolean |
isKeepAlive()
getKeepAlive method returns value of keepAlive
field. |
void |
saveContent(java.io.OutputStream param1)
saveContent method performs saving resource data
to given OutputStream . |
void |
saveContent(java.lang.String param1)
saveContent method performs saving resource data
to given disk file. |
void |
setAllowAllCookies(boolean allow)
|
void |
setAllowRedirect(boolean redirect)
|
void |
setAllowUserInteraction(boolean allow)
|
void |
setClientId(java.lang.String param1)
setClientId method sets client identification
string. |
void |
setDebug(boolean param1)
Method setDebug sets debug mode. |
void |
setInputBufferSize(int param1)
setInputBufferSize method InputStream
returns data in packets. |
void |
setKeepAlive(boolean param1)
setKeepAlive method sets keepAlive
variable. |
void |
setRequestData(java.lang.String data)
|
void |
setStreamReadTimeout(int param1)
setStreamReadTimeout method sets timeout for reading
from input stream taken from socket. |
void |
setURI(URI v)
setURI method performs |
void |
setUserName(java.lang.String param1)
setUserName method sets user name for authorization. |
void |
setUserPassword(java.lang.String param1)
setUserPassword method sets user password dor authorization. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
ProtocolImpl
public ProtocolImpl(CacheContext context)
getInputStream
public java.io.InputStream getInputStream()
throws java.io.IOException
- Description copied from interface:
ProtocolIfc
getInputStream
method returns InputStream
where from user can read resource data. For some protocols implementation
InputStream
should return not only resource data but also
resource headers - it is important in mail protocols for example (POP3,
IMAP4, SMTP).
- Specified by:
getInputStream
in interface ProtocolIfc
- Returns:
- Throws:
java.io.IOException
-
connect
public void connect()
throws java.io.IOException
- Description copied from interface:
ProtocolIfc
connect
method performs all necessary actions
required to connect to remote resource. After successfuly
completing this method connection should be established and
remote data should be ready to download.
User is able both to retrieve special resource info (data headers
only) or resource data. For example user should be allowed to return
only mail headers instead of full message.
- Specified by:
connect
in interface ProtocolIfc
- Throws:
java.io.IOException
-
getContentLength
public long getContentLength()
- Description copied from interface:
ProtocolIfc
getContentLength
method returns expected content length. In many
situations web server sends size of resource data, but sometimes we don't know
how much data we receive till end of transmision. If expected content length
is not known protocol should return -1.
- Specified by:
getContentLength
in interface ProtocolIfc
- Returns:
getContentType
public java.lang.String getContentType()
- Description copied from interface:
ProtocolIfc
getContentType
method returns type of data stored in resource.
for some protocols implementation it is easy to return info received
from web server (HTTP
server returns Content-Type
header with such info) for others it is necessary to create engine to determine
content type. This engine may base on file extension or based on mime-magic
file.
- Specified by:
getContentType
in interface ProtocolIfc
- Returns:
getConnectionResult
public int getConnectionResult()
throws java.io.IOException
- Description copied from interface:
ProtocolIfc
getConnectionResult
method returns standarized for
all protocols connection with server result. For some protocols
such HTTP
it could translated server response code
for other particular protocol implementation should decide
what code return in given situation.
- Specified by:
getConnectionResult
in interface ProtocolIfc
- Returns:
- Throws:
java.io.IOException
-
getProtocolType
public java.lang.String getProtocolType()
- Description copied from interface:
ProtocolIfc
getProtocolType
method returns protocols type
it implementing. It should allways be a string taken from
package name. For example for HTTP implementation
we have class wttools.protocols.http.ProtocolImpl
.
And we know what protocol it implement from class name, becouse
it is stored in last package name level
wttools.protocols.http
.
- Specified by:
getProtocolType
in interface ProtocolIfc
- Returns:
disconnect
public void disconnect()
throws java.io.IOException
- Description copied from interface:
ProtocolIfc
disconnect
method closes network connection.
All received resource info should be still available but not
additional data resource data.
- Specified by:
disconnect
in interface ProtocolIfc
- Throws:
java.io.IOException
-
getHeaderStrValue
public java.lang.String getHeaderStrValue(java.lang.String param1)
- Description copied from interface:
ProtocolIfc
- Method
getHeaderStrValue
returns header value
as String
for given header name.
- Specified by:
getHeaderStrValue
in interface ProtocolIfc
- Parameters:
param1
- - Returns:
getHeaderIntValue
public long getHeaderIntValue(java.lang.String param1)
- Description copied from interface:
ProtocolIfc
- Method
getHeaderStrValue
returns header value
as long
integer for given header name.
- Specified by:
getHeaderIntValue
in interface ProtocolIfc
- Parameters:
param1
- - Returns:
getAllHeaders
public java.util.HashMap getAllHeaders()
- Description copied from interface:
ProtocolIfc
- Methods
getAllHeaders
returns all received header from
the web server.
- Specified by:
getAllHeaders
in interface ProtocolIfc
- Returns:
getTransferSpeed
public float getTransferSpeed()
- Description copied from interface:
ProtocolIfc
getTransferSpeed
method calculates and returns transfer speed
in bytes/sec. This info should be available during downloading data to
allow breaking transfer if ransfer speed is too low.
- Specified by:
getTransferSpeed
in interface ProtocolIfc
- Returns:
getServerId
public java.lang.String getServerId()
- Description copied from interface:
ProtocolIfc
getServerId
method returns web server identification string
detected during making connection. in HTTP
protocol server
identification string can be found in header named Server
.
- Specified by:
getServerId
in interface ProtocolIfc
- Returns:
getConnectionInfo
public java.lang.Object getConnectionInfo()
- Description copied from interface:
ProtocolIfc
getConnectionInfo
method should return some connection
parameters. for example remote host IP number, socket buffers size,
socket timeout, remote server info and so on.
- Specified by:
getConnectionInfo
in interface ProtocolIfc
- Returns:
getConnectionStatuses
public java.util.List getConnectionStatuses()
- Description copied from interface:
ProtocolIfc
getConnectionStatuses
method calculates and returns connection
statuses in List
. All objects stored in returned
List
should have implemented String toString()
method to allow displaing info.
As statuses should be put info about transmision: average transfer speed,
bytes received, transfer time and so on.
- Specified by:
getConnectionStatuses
in interface ProtocolIfc
- Returns:
setURI
public void setURI(URI v)
throws java.io.IOException
setURI
method performs
- Specified by:
setURI
in interface ProtocolIfc
- Parameters:
v
- an URI
value- Throws:
java.io.IOException
- if an error occurs
getURI
public URI getURI()
- Description copied from interface:
ProtocolIfc
getURI
method returns URI
for
which performing connection.
- Specified by:
getURI
in interface ProtocolIfc
- Returns:
setClientId
public void setClientId(java.lang.String param1)
- Description copied from interface:
ProtocolIfc
setClientId
method sets client identification
string. I don't know if it make sense but there is
"User-Aget" header in HTTP
protocol
there which client sends to HTTP
server.
- Specified by:
setClientId
in interface ProtocolIfc
- Parameters:
param1
-
getClientId
public java.lang.String getClientId()
- Description copied from interface:
ProtocolIfc
getClientId
method returns client identification
string which it sends to web sever during connection. In
HTTP
protocol it is value of "User-Agent"
header.
- Specified by:
getClientId
in interface ProtocolIfc
- Returns:
setStreamReadTimeout
public void setStreamReadTimeout(int param1)
- Description copied from interface:
ProtocolIfc
setStreamReadTimeout
method sets timeout for reading
from input stream taken from socket. When some communication
problem occures during perfmorming data transmision application
may infinitely wait for data which will never arrive. To prevent
such situation you can set stream read timeout to ensure waiting
for data no longer than you expect. If set to 0 it means turn off
timeout and allow infinite reading.
- Specified by:
setStreamReadTimeout
in interface ProtocolIfc
- Parameters:
param1
-
getStreamReadTimeout
public int getStreamReadTimeout()
- Description copied from interface:
ProtocolIfc
getStreamReadTimeout
method returns value of stream
read timeout.
- Specified by:
getStreamReadTimeout
in interface ProtocolIfc
- Returns:
setInputBufferSize
public void setInputBufferSize(int param1)
- Description copied from interface:
ProtocolIfc
setInputBufferSize
method InputStream
returns data in packets. With this method you can sets size of
this packet. The smaller size of packet should be used if there
are some transmision problems and bigger size should be used if
we use network with very good bandwich to improve transmision
efficiency.
- Specified by:
setInputBufferSize
in interface ProtocolIfc
- Parameters:
param1
-
getInputBufferSize
public int getInputBufferSize()
- Description copied from interface:
ProtocolIfc
getInputBufferSize
method returns input buffer size
which is set for this protocol.
- Specified by:
getInputBufferSize
in interface ProtocolIfc
- Returns:
setKeepAlive
public void setKeepAlive(boolean param1)
- Description copied from interface:
ProtocolIfc
setKeepAlive
method sets keepAlive
variable. This variable determines keeping connection to web
server after completing user request. If we know that we want
reach only one resource from thet web server we can set
keepAlive
to false
and protocol
implementation should disconnect after finishing transmision.
But very often we want to download many files from web server
for example from FTP
or HTTP
server.
It is not effective to reconnection every time. It is better
to keep alive connection between downloading every file.
For example suppose we have to download 10 files from
HTTP
server. Each file is about 10kB size.
So downloading each of them with good internet connection takes about
1 sec. But establishing connection takes from 1 sec to 30 sec.
Lets suppose that it takes about 10 sec. So we can see how much time
we can save with using keep alive connections.
- Specified by:
setKeepAlive
in interface ProtocolIfc
- Parameters:
param1
-
isKeepAlive
public boolean isKeepAlive()
- Description copied from interface:
ProtocolIfc
getKeepAlive
method returns value of keepAlive
field. keepAlive
field switches between permaneent connection
mode and single transfer connection mode. Permanent connection mode
should allow to transfer many files with one persistent connection
to server.
- Specified by:
isKeepAlive
in interface ProtocolIfc
- Returns:
saveContent
public void saveContent(java.lang.String param1)
throws java.io.IOException
- Description copied from interface:
ProtocolIfc
saveContent
method performs saving resource data
to given disk file. I have doubt what mean resource data.
In general we can divide resource info on resource headers
and resource data. It is very usefull if we think about
HTTP
resources. But if we think about mail message
headers are almost as important as message data. So in particular
protocol implementation headers should be joined with data.
- Specified by:
saveContent
in interface ProtocolIfc
- Parameters:
param1
- - Throws:
java.io.IOException
-
saveContent
public void saveContent(java.io.OutputStream param1)
throws java.io.IOException
- Description copied from interface:
ProtocolIfc
saveContent
method performs saving resource data
to given OutputStream
. This method does not open
nor close given stream. Closing stream should be performed by
user.
- Specified by:
saveContent
in interface ProtocolIfc
- Parameters:
param1
- - Throws:
java.io.IOException
-
getRealContentSize
public long getRealContentSize()
- Description copied from interface:
ProtocolIfc
getRealContentSize
method returns received size of data. First of all
if undetected network error occurs we can recieve less data that we expect. So during
verification we can check if expected data size is equal to received. Second
if web server don't send expected data size then with this method we can know
how many bytes were received.
- Specified by:
getRealContentSize
in interface ProtocolIfc
- Returns:
setUserName
public void setUserName(java.lang.String param1)
- Description copied from interface:
ProtocolIfc
setUserName
method sets user name for authorization.
in general user name and pasword should be encoded in url with the form:
http://user:passwd@www.sf.net:8000/path/file.html
but sometimes it isn't possible to put user name and password in url and then
you can set them with these methods.
- Specified by:
setUserName
in interface ProtocolIfc
- Parameters:
param1
-
getUserName
public java.lang.String getUserName()
- Description copied from interface:
ProtocolIfc
getUserName
method returns user name used during authorization process.
User name can be taken from URI or from data received in setUserName(Strin name)
method.
- Specified by:
getUserName
in interface ProtocolIfc
- Returns:
setUserPassword
public void setUserPassword(java.lang.String param1)
- Description copied from interface:
ProtocolIfc
setUserPassword
method sets user password dor authorization.
in general user name and pasword should be encoded in url with the form:
http://user:passwd@www.sf.net:8000/path/file.html
but sometimes it isn't possible to put user name and password in url and then
you can set them with these methods.
- Specified by:
setUserPassword
in interface ProtocolIfc
- Parameters:
param1
-
getUserPassword
public java.lang.String getUserPassword()
- Description copied from interface:
ProtocolIfc
getUserPassword
method returns user password used during authorization process.
User name can be taken from URI or from data received in setUserName(Strin name)
method.
- Specified by:
getUserPassword
in interface ProtocolIfc
- Returns:
setDebug
public void setDebug(boolean param1)
- Description copied from interface:
ProtocolIfc
- Method
setDebug
sets debug mode.
- Specified by:
setDebug
in interface ProtocolIfc
- Parameters:
param1
-
isDebug
public boolean isDebug()
- Specified by:
isDebug
in interface ProtocolIfc
- Returns:
setAllowUserInteraction
public void setAllowUserInteraction(boolean allow)
- Specified by:
setAllowUserInteraction
in interface ProtocolIfc
isAllowUserInteraction
public boolean isAllowUserInteraction()
- Specified by:
isAllowUserInteraction
in interface ProtocolIfc
setAllowAllCookies
public void setAllowAllCookies(boolean allow)
- Specified by:
setAllowAllCookies
in interface ProtocolIfc
isAllowAllCookies
public boolean isAllowAllCookies()
- Specified by:
isAllowAllCookies
in interface ProtocolIfc
setRequestData
public void setRequestData(java.lang.String data)
- Specified by:
setRequestData
in interface ProtocolIfc
getRequestData
public java.lang.String getRequestData()
- Specified by:
getRequestData
in interface ProtocolIfc
isErrorRecoverable
public boolean isErrorRecoverable(int code)
- Description copied from interface:
ProtocolIfc
- This method
isErrorRecoverable
should be able to return
info if given error code is permanent or not. I mean for example if
error code means "Page not found" it mean that there is no page
under requested URL. It is most probably permanent error. However
if error code means "Network not reachable" or
"Request timeout" it mean that in future during next try download
may be successful.
- Specified by:
isErrorRecoverable
in interface ProtocolIfc
- Following copied from interface:
wttools.protocols.ifc.ProtocolIfc
- Parameters:
code
- an int
value of requested error code.- Returns:
- a
boolean
calculated value of recoverability of error.
getContentData
public byte[] getContentData()
throws java.io.IOException
- Specified by:
getContentData
in interface ProtocolIfc
setAllowRedirect
public void setAllowRedirect(boolean redirect)
- Specified by:
setAllowRedirect
in interface ProtocolIfc
isAllowRedirect
public boolean isAllowRedirect()
- Specified by:
isAllowRedirect
in interface ProtocolIfc
getEffectiveURI
public URI getEffectiveURI()
throws java.io.IOException
- Description copied from interface:
ProtocolIfc
getEffectiveURI
returns effective uri of requested
resource. If during connecting to web server redirection response
occurs it means that effective URI is different then original.
- Specified by:
getEffectiveURI
in interface ProtocolIfc
- Following copied from interface:
wttools.protocols.ifc.ProtocolIfc
- Returns:
- an
URI
value of effective resource URI.
Copyright © GNU, wttools developers Team.