From 0835c31ba0924d1784a70b3cf24e78d4070b2230 Mon Sep 17 00:00:00 2001 From: weiwei Date: Fri, 26 Aug 2016 15:03:04 +0800 Subject: [PATCH] added wado uri proxy --- Packages/wadoproxy/package.js | 23 +++++++++++++ Packages/wadoproxy/server/initialize.js | 9 +++++ Packages/wadoproxy/server/namespace.js | 8 +++++ Packages/wadoproxy/server/routes.js | 33 +++++++++++++++++++ Packages/worklist/package.js | 1 + .../server/services/dimse/retrieveMetadata.js | 2 +- .../server/services/wado/retrieveMetadata.js | 2 +- config/medkenOrthanc.json | 32 ++++++++++-------- 8 files changed, 95 insertions(+), 15 deletions(-) create mode 100755 Packages/wadoproxy/package.js create mode 100755 Packages/wadoproxy/server/initialize.js create mode 100755 Packages/wadoproxy/server/namespace.js create mode 100755 Packages/wadoproxy/server/routes.js diff --git a/Packages/wadoproxy/package.js b/Packages/wadoproxy/package.js new file mode 100755 index 000000000..abc3589fc --- /dev/null +++ b/Packages/wadoproxy/package.js @@ -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'); +}); diff --git a/Packages/wadoproxy/server/initialize.js b/Packages/wadoproxy/server/initialize.js new file mode 100755 index 000000000..1e917067a --- /dev/null +++ b/Packages/wadoproxy/server/initialize.js @@ -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"); \ No newline at end of file diff --git a/Packages/wadoproxy/server/namespace.js b/Packages/wadoproxy/server/namespace.js new file mode 100755 index 000000000..33ea111a6 --- /dev/null +++ b/Packages/wadoproxy/server/namespace.js @@ -0,0 +1,8 @@ +WADOProxy = {}; + +WADOProxy.convertURL = function(wadoURL) { + if (!Settings.enabled) { + return wadoURL; + } + return Settings.uri + '?' + querystring.stringify({url: wadoURL}); +} \ No newline at end of file diff --git a/Packages/wadoproxy/server/routes.js b/Packages/wadoproxy/server/routes.js new file mode 100755 index 000000000..9cf40ba69 --- /dev/null +++ b/Packages/wadoproxy/server/routes.js @@ -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'}); \ No newline at end of file diff --git a/Packages/worklist/package.js b/Packages/worklist/package.js index 214f38c0d..bbe7336cf 100644 --- a/Packages/worklist/package.js +++ b/Packages/worklist/package.js @@ -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 diff --git a/Packages/worklist/server/services/dimse/retrieveMetadata.js b/Packages/worklist/server/services/dimse/retrieveMetadata.js index 07b6ea8b4..8f3ca1445 100755 --- a/Packages/worklist/server/services/dimse/retrieveMetadata.js +++ b/Packages/worklist/server/services/dimse/retrieveMetadata.js @@ -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); }); diff --git a/Packages/worklist/server/services/wado/retrieveMetadata.js b/Packages/worklist/server/services/wado/retrieveMetadata.js index 92405fbff..b08c822f9 100644 --- a/Packages/worklist/server/services/wado/retrieveMetadata.js +++ b/Packages/worklist/server/services/wado/retrieveMetadata.js @@ -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'; } diff --git a/config/medkenOrthanc.json b/config/medkenOrthanc.json index 6bb678173..7b335dddf 100644 --- a/config/medkenOrthanc.json +++ b/config/medkenOrthanc.json @@ -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"