org.projectodd.sockjs.JsonpHandler Maven / Gradle / Ivy
/**
* Copyright (C) 2014 Red Hat, Inc, and individual contributors.
* Copyright (C) 2011-2012 VMware, Inc.
*/
package org.projectodd.sockjs;
import java.util.List;
/**
* Handlers from sockjs-node's trans-jsonp.coffee
*/
public class JsonpHandler {
public DispatchFunction jsonp = new DispatchFunction() {
@Override
public Object handle(SockJsRequest req, SockJsResponse res, Object data) throws SockJsException {
String callback = req.getQueryParameter("c");
if (callback == null) {
callback = req.getQueryParameter("callback");
}
if (callback == null) {
throw new DispatchException(500, "\"callback\" parameter required");
}
if (callback.matches("[^a-zA-Z0-9-_.]")) {
throw new DispatchException(500, "invalid \"callback\" parameter");
}
res.setHeader("Content-Type", "application/javascript; charset=UTF-8");
res.writeHead(200);
Transport.register(req, server, new JsonpReceiver(req, res, server.options, callback));
return true;
}
};
public DispatchFunction jsonpSend = new DispatchFunction() {
@Override
@SuppressWarnings("unchecked")
public Object handle(SockJsRequest req, SockJsResponse res, Object query) throws SockJsException {
if (query == null) {
throw new DispatchException(500, "Payload expected.");
}
List d = null;
if (query instanceof String) {
try {
d = Utils.parseJson((String) query, List.class);
} catch (Exception x) {
throw new DispatchException(500, "Broken JSON encoding.");
}
} else {
String queryParam = req.getQueryParameter("d");
if (queryParam != null) {
try {
d = Utils.parseJson(queryParam, List.class);
} catch (Exception x) {
throw new DispatchException(500, "Broken JSON encoding.");
}
}
}
if (d == null) {
throw new DispatchException(500, "Payload expected.");
}
Session jsonp = Session.bySessionId(req.session());
if (jsonp == null) {
throw new DispatchException(404);
}
for (String message : d) {
jsonp.didMessage(message);
}
res.setHeader("Content-Length", "2");
res.setHeader("Content-Type", "text/plain; charset=UTF-8");
res.writeHead(200);
res.end("ok");
return true;
}
};
public JsonpHandler(SockJsServer server) {
this.server = server;
}
private SockJsServer server;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy