added wado uri proxy

This commit is contained in:
weiwei 2016-08-26 15:03:04 +08:00
parent a810aeceda
commit 0835c31ba0
8 changed files with 95 additions and 15 deletions

23
Packages/wadoproxy/package.js Executable file
View File

@ -0,0 +1,23 @@
Package.describe({
name: 'wadoproxy',
summary: 'WADO-URI Proxy',
version: '0.0.1'
});
Package.onUse(function(api) {
api.versionsFrom('1.4');
api.use('ecmascript');
api.use('standard-app-packages');
api.use('clinical:router');
api.addFiles('server/namespace.js');
// Server-only
api.addFiles('server/initialize.js', 'server');
api.addFiles('server/routes.js', 'server');
// Global exports
api.export('WADOProxy');
});

View File

@ -0,0 +1,9 @@
Settings = Object.assign((Meteor.settings && Meteor.settings.proxy) ? Meteor.settings.proxy : {}, {
uri : "/__wado_proxy",
enabled: true
})
http = require("http");
url = require("url");
querystring = require("querystring");

View File

@ -0,0 +1,8 @@
WADOProxy = {};
WADOProxy.convertURL = function(wadoURL) {
if (!Settings.enabled) {
return wadoURL;
}
return Settings.uri + '?' + querystring.stringify({url: wadoURL});
}

View File

@ -0,0 +1,33 @@
Router.route(Settings.uri, function () {
let response = this.response;
if (!this.params.query.url) {
response.writeHead(500);
response.end('No wado url provided');
return;
}
let proxyRequest,
wadoUrl = url.parse(this.params.query.url, false);
var options = {
headers: {}
};
//options.headers = this.request.headers;
if (this.request.headers['referer']) {
options.headers.referer = this.request.headers['referer'];
}
if (this.request.headers['user-agent']) {
options.headers['user-agent'] = this.request.headers['user-agent'];
}
options.method = this.request.method;
options.host = wadoUrl.hostname;
options.port = wadoUrl.port ? wadoUrl.port : 80;
options.path = wadoUrl.path;
proxyRequest = http.request(options, function (proxyResponse) {
proxyResponse.pipe(response, {end: true});
});
//proxyRequest.end();
this.request.pipe(proxyRequest, {end: true});
}, {where: 'server'});

View File

@ -29,6 +29,7 @@ Package.onUse(function (api) {
api.use('dimseservice');
api.use('orthanc-remote');
api.use('viewerbase');
api.use('wadoproxy');
// TODO: Replace with NPM dependency
api.use('cornerstone'); // Only for HammerJS

View File

@ -111,7 +111,7 @@ function resultDataToStudyMetadata(studyInstanceUid, resultData) {
// Retrieve the actual data over WADO-URI
var server = Meteor.settings.servers.dicomWeb[0];
instanceSummary.wadouri = server.wadoUriRoot + '?requestType=WADO&studyUID=' + studyInstanceUid + '&seriesUID=' + seriesInstanceUid + '&objectUID=' + sopInstanceUid + "&contentType=application%2Fdicom";
instanceSummary.wadouri = WADOProxy.convertURL(server.wadoUriRoot + '?requestType=WADO&studyUID=' + studyInstanceUid + '&seriesUID=' + seriesInstanceUid + '&objectUID=' + sopInstanceUid + "&contentType=application%2Fdicom");
series.instances.push(instanceSummary);
});

View File

@ -116,7 +116,7 @@ function resultDataToStudyMetadata(server, studyInstanceUid, resultData) {
};
if (server.imageRendering === 'wadouri') {
instanceSummary.wadouri = server.wadoUriRoot + '?requestType=WADO&studyUID=' + studyInstanceUid + '&seriesUID=' + seriesInstanceUid + '&objectUID=' + sopInstanceUid + '&contentType=application%2Fdicom';
instanceSummary.wadouri = WADOProxy.convertURL(server.wadoUriRoot + '?requestType=WADO&studyUID=' + studyInstanceUid + '&seriesUID=' + seriesInstanceUid + '&objectUID=' + sopInstanceUid + '&contentType=application%2Fdicom');
} else {
instanceSummary.wadorsuri = server.wadoRoot + '/studies/' + studyInstanceUid + '/series/' + seriesInstanceUid + '/instances/' + sopInstanceUid + '/frames/1';
}

View File

@ -15,20 +15,26 @@
"logTiming": true
}
}
]
],
"dimse" : [{
"name": "ORTHANC_DIMSE",
"peers": [
{
"host": "208.100.41.100",
"port": 4242,
"aeTitle": "MKORTHANC",
"default": true
},
{
"host": "0.0.0.0",
"port": 11112,
"aeTitle": "OHIFDCM",
"default": true,
"server": true
}
]
}]
},
"dimse" : [{
"host" : "208.100.41.100",
"port" : 4242,
"aeTitle" : "MKORTHANC",
"default": true
},{
"host" : "0.0.0.0",
"port" : 11112,
"aeTitle" : "OHIFDCM",
"default" : true,
"server" : true
}],
"defaultServiceType": "dimse",
"medkenpanel" : {
"prefix" : "admin"