use of com.koushikdutta.async.AsyncSocket in project ion by koush.
the class Issues method testIssue312.
public void testIssue312() throws Exception {
String b64 = "SFRUUC8xLjAgMzAyIEZvdW5kDQpTZXQtQ29va2ll\n" + "OlNFU1NJT049NUJBRDlERTEwQjY0NjgwNDsKTG9j\n" + "YXRpb246IGhvbWUuY2dpCkNvbnRlbnQtdHlwZTog\n" + "dGV4dC9odG1sCgo8aHRtbD48aGVhZD48bWV0YSBo\n" + "dHRwLWVxdWl2PSdyZWZyZXNoJyBjb250ZW50PScw\n" + "OyB1cmw9aG9tZS5jZ2knPjwvbWV0YT48L2hlYWQ+\n" + "PGJvZHk+PC9ib2R5PjwvaHRtbD4K";
/*
HTTP/1.0 302 Found
Set-Cookie:SESSION=5BAD9DE10B646804;
Location: home.cgi
Content-type: text/html
<html><head><meta http-equiv='refresh' content='0; url=home.cgi'></meta></head><body></body></html>
*/
// the above is using newlines, and not CRLF.
final byte[] responseData = Base64.decode(b64, 0);
server = Ion.getDefault(getContext()).getServer().listen(null, 0, new ListenCallback() {
@Override
public void onAccepted(final AsyncSocket socket) {
Util.writeAll(socket, responseData, new CompletedCallback() {
@Override
public void onCompleted(Exception ex) {
socket.end();
server.stop();
}
});
}
@Override
public void onListening(AsyncServerSocket socket) {
}
@Override
public void onCompleted(Exception ex) {
}
});
Ion.with(getContext()).load("http://localhost:" + server.getLocalPort()).followRedirect(false).asString().get();
}
use of com.koushikdutta.async.AsyncSocket in project AndroidAsync by koush.
the class DnsTests method testNoDomain.
public void testNoDomain() throws Exception {
AsyncServer server = new AsyncServer();
try {
final Semaphore semaphore = new Semaphore(0);
server.connectSocket("www.clockworkmod-notfound.com", 8080, new ConnectCallback() {
@Override
public void onConnectCompleted(Exception ex, AsyncSocket socket) {
assertTrue(ex instanceof UnknownHostException);
semaphore.release();
}
});
assertTrue(semaphore.tryAcquire(5000, TimeUnit.MILLISECONDS));
} finally {
server.stop();
}
}
use of com.koushikdutta.async.AsyncSocket in project AndroidAsync by koush.
the class HttpTransportMiddleware method exchangeHeaders.
@Override
public boolean exchangeHeaders(final OnExchangeHeaderData data) {
Protocol p = Protocol.get(data.protocol);
if (p != null && p != Protocol.HTTP_1_0 && p != Protocol.HTTP_1_1)
return super.exchangeHeaders(data);
AsyncHttpRequest request = data.request;
AsyncHttpRequestBody requestBody = data.request.getBody();
if (requestBody != null) {
if (requestBody.length() >= 0) {
request.getHeaders().set("Content-Length", String.valueOf(requestBody.length()));
data.response.sink(data.socket);
} else if ("close".equals(request.getHeaders().get("Connection"))) {
data.response.sink(data.socket);
} else {
request.getHeaders().set("Transfer-Encoding", "Chunked");
data.response.sink(new ChunkedOutputFilter(data.socket));
}
}
String rl = request.getRequestLine().toString();
String rs = request.getHeaders().toPrefixString(rl);
byte[] rsBytes = rs.getBytes();
// try to get the request body in the same packet as the request headers... if it will fit
// in the max MTU (1540 or whatever).
final boolean waitForBody = requestBody != null && requestBody.length() >= 0 && requestBody.length() + rsBytes.length < 1024;
final BufferedDataSink bsink;
final DataSink headerSink;
if (waitForBody) {
// force buffering of headers
bsink = new BufferedDataSink(data.response.sink());
bsink.forceBuffering(true);
data.response.sink(bsink);
headerSink = bsink;
} else {
bsink = null;
headerSink = data.socket;
}
request.logv("\n" + rs);
final CompletedCallback sentCallback = data.sendHeadersCallback;
Util.writeAll(headerSink, rsBytes, new CompletedCallback() {
@Override
public void onCompleted(Exception ex) {
Util.end(sentCallback, ex);
// flush headers and any request body that was written by the callback
if (bsink != null) {
bsink.forceBuffering(false);
bsink.setMaxBuffer(0);
}
}
});
LineEmitter.StringCallback headerCallback = new LineEmitter.StringCallback() {
Headers mRawHeaders = new Headers();
String statusLine;
@Override
public void onStringAvailable(String s) {
try {
s = s.trim();
if (statusLine == null) {
statusLine = s;
} else if (!TextUtils.isEmpty(s)) {
mRawHeaders.addLine(s);
} else {
String[] parts = statusLine.split(" ", 3);
if (parts.length < 2)
throw new Exception(new IOException("Not HTTP"));
data.response.headers(mRawHeaders);
String protocol = parts[0];
data.response.protocol(protocol);
data.response.code(Integer.parseInt(parts[1]));
data.response.message(parts.length == 3 ? parts[2] : "");
data.receiveHeadersCallback.onCompleted(null);
// socket may get detached after headers (websocket)
AsyncSocket socket = data.response.socket();
if (socket == null)
return;
DataEmitter emitter;
// return content length, etc, which will confuse the body decoder
if (AsyncHttpHead.METHOD.equalsIgnoreCase(data.request.getMethod())) {
emitter = HttpUtil.EndEmitter.create(socket.getServer(), null);
} else {
emitter = HttpUtil.getBodyDecoder(socket, Protocol.get(protocol), mRawHeaders, false);
}
data.response.emitter(emitter);
}
} catch (Exception ex) {
data.receiveHeadersCallback.onCompleted(ex);
}
}
};
LineEmitter liner = new LineEmitter();
data.socket.setDataCallback(liner);
liner.setLineCallback(headerCallback);
return true;
}
use of com.koushikdutta.async.AsyncSocket in project AndroidAsync by koush.
the class SpdyMiddleware method wrapCallback.
@Override
protected ConnectCallback wrapCallback(final GetSocketData data, final Uri uri, final int port, final boolean proxied, ConnectCallback callback) {
final ConnectCallback superCallback = super.wrapCallback(data, uri, port, proxied, callback);
final String key = data.state.get("spdykey");
if (key == null)
return superCallback;
// new outgoing connection, try to make this a spdy connection
return new ConnectCallback() {
@Override
public void onConnectCompleted(Exception ex, AsyncSocket socket) {
// trigger the waiters
if (ex != null) {
final SpdyConnectionWaiter conn = connections.remove(key);
if (conn != null)
conn.setComplete(ex);
}
superCallback.onConnectCompleted(ex, socket);
}
};
}
Aggregations