private async Task OnProcess(IDictionary<string, object> owinenv)
{
var env = new OWINEnv(owinenv);
var cancel_token = env.CallCanlelled;
try {
if (!HTTPUtils.CheckAuthorization(env.GetAuthorizationToken(), env.AccessControlInfo)) {
throw new HTTPError(HttpStatusCode.Unauthorized);
}
if (env.RequestMethod!="HEAD" && env.RequestMethod!="GET") {
throw new HTTPError(HttpStatusCode.MethodNotAllowed);
}
var query = env.RequestParameters;
string value;
if (query.TryGetValue("cmd", out value)) {
switch (value) {
case "viewxml": //リレー情報XML出力
await OnViewXML(env, query, cancel_token);
break;
case "stop": //チャンネル停止
await OnStop(env, query, cancel_token);
break;
case "bump": //チャンネル再接続
await OnBump(env, query, cancel_token);
break;
default:
throw new HTTPError(HttpStatusCode.BadRequest);
}
}
else {
throw new HTTPError(HttpStatusCode.BadRequest);
}
}
catch (HTTPError err) {
env.ResponseStatusCode = (int)err.StatusCode;
}
catch (UnauthorizedAccessException) {
env.ResponseStatusCode = (int)HttpStatusCode.Forbidden;
}
}