|
public Object eventOccurred(Event event) {
int eventId = event.getUID();
switch (eventId) {
case Event.EVENT_URL_REQUESTED : {
UrlRequestedEvent e = (UrlRequestedEvent) event;
// This is a regular request.
String absoluteUrl = e.getURL();
HttpConnection conn = null;
OutputStream out = null;
try {
conn = (HttpConnection) Connector.open(absoluteUrl);
FormData postData = e.getPostData();
if (postData == null) {
conn.setRequestMethod(HttpConnection.GET);
}
else {
conn.setRequestMethod(HttpConnection.POST);
byte[] postBytes = postData.getBytes();
conn.setRequestProperty(HttpProtocolConstants.HEADER_CONTENT_LENGTH,
String.valueOf(postBytes.length));
if (conn.getRequestProperty(
HttpProtocolConstants.HEADER_CONTENT_TYPE) == null) {
conn.setRequestProperty(
HttpProtocolConstants.HEADER_CONTENT_TYPE,
postData.getContentType());
}
out = conn.openOutputStream();
out.write(postBytes);
}
HttpHeaders requestHeaders = e.getHeaders();
if (requestHeaders != null) {
/* From http://www.w3.org/Protocols/rfc2616/rfc2616-sec15.html#sec15.1.3
* Clients SHOULD NOT include a Referer header field in a
* (non-secure) HTTP request if the referring page was
* transferred with a secure protocol.*/
String referer =
requestHeaders.getPropertyValue("referer");
boolean sendReferrer = true;
if (referer != null && referer.startsWith("https:") &&
!absoluteUrl.startsWith("https:")) {
sendReferrer = false;
}
int size = requestHeaders.size();
for (int i = 0; i < size; i++) {
String header = requestHeaders.getPropertyKey(i);
// Remove refer header if needed.
if ( !sendReferrer && header.equals("referer")) {
requestHeaders.removeProperty(i);
continue;
}
conn.setRequestProperty( header,
requestHeaders.getPropertyValue( i ) );
}
}
}
catch (IOException e1) {
}
finally {
if (out != null) {
try {
out.close();
}
catch (IOException e2) {
}
}
}
BrowserField browserField = getBrowserField(conn, e);
_callbackApplication.displayBrowserField(browserField);
break;
}
case Event.EVENT_BROWSER_FIELD_CHANGED : {
// Browser field title might have changed. Update title.
break;
}
case Event.EVENT_REDIRECT : {
RedirectEvent e = (RedirectEvent) event;
switch (e.getType()) {
case RedirectEvent.TYPE_SINGLE_FRAME_REDIRECT :
// Show redirect message.
Application.getApplication().invokeAndWait(new Runnable() {
public void run() {
Status.show("");
}
});
break;
case RedirectEvent.TYPE_JAVASCRIPT :
case RedirectEvent.TYPE_META :
case RedirectEvent.TYPE_300_REDIRECT :
}
String absoluteUrl = e.getLocation();
HttpConnection conn = null;
try {
conn = (HttpConnection) Connector.open(absoluteUrl);
}
catch (IOException e1) {
}
BrowserField browserField = getBrowserField(conn,
e.getOriginalEvent());
_callbackApplication.displayBrowserField(browserField);
break;
}
case Event.EVENT_CLOSE :
// Close the appication.
break;
case Event.EVENT_SET_HEADER :// no cache support
case Event.EVENT_SET_HTTP_COOKIE : // no cookie support
case Event.EVENT_HISTORY : // no history support
case Event.EVENT_LOADING_IMAGES :// no progress bar is supported
case Event.EVENT_EXECUTING_SCRIPT : // no progress bar is supported
case Event.EVENT_FULL_WINDOW : // no full window support
case Event.EVENT_STOP : // no stop loading support
default :
}
return null;
}
|