Conquest DICOM server 1.5.0(b) released

  • Hi Conquest users,


    Finally here is release 1.5.0(b). This is the first fully open source version of Conquest DICOM server with a few bug fixes from 1.5.0 and 1.5.0a.


    You can download the release here:


    http://www.natura-ingenium.nl/…erver/dicomserver150b.zip


    This is the corresponding Github commit for 1.5.0b:


    https://github.com/marcelvanhe…36be0966e948118d32f4edae1


    This is the corresponding Github commit for 1.5.0a:


    https://github.com/marcelvanhe…03cc19e5ccfe99dcd96408734


    And 1.5.0:


    https://github.com/marcelvanhe…9e86b28be121f7c0913479ec4


    Several beta versions have been used and tested, so it should be very stable. But of course, reporting of any issues will be greatly appreciated.


    As usual you can update by extracting dgate.exe or dgate64.exe and conquestdicomserver.exe, but also quite a few other files have changed - mainly in the web interface, lua code and installer.


    The latest source code (1.5.0b+) can be browsed on: https://github.com/marcelvanherk/Conquest-DICOM-Server


    Marcel

    Marcel van Herk is developer of the Conquest DICOM server together with Lambert Zijp.

    Edited 8 times, last by marcelvanherk: Link pointed to 1.5.0 not 1.5.0a Updated for 1.5.0b Update to new website ().

  • This is the buglist, starting with leftover bugs from earlier versions, per catagory:


    Documentation bugs

    D1) Publish about Docker release of Lance

    D2) Document limitations of strings (e.g. 360 for process by xxx)

    D3) Document source of contributions, in particular the Papaya redistributable

    ----

    D4) The readme file in github was updated after the release. In 1.5.0b

    D5) Nightlymove is stated to work for service/linux while it does not


    GUI bugs

    G1) browse tab does not work if user of server service and server gui are differerent.

    ----

    G2) GUI queries from the browser contain case errors e.g. DicomPatients i.s.o DICOMPatients - fail when mixing linux sql (docker) and windows GUI. Fixed in 1.5.0b

    G3) (related to G1) document that GUI should be installed as normal user, then closed and opened as admin to install service

    G4) upping debuglevel above 4 returns it to 3. Fixed in 1.5.0c


    Web interface bugs

    W1) web viewers are not properly started when there are spaces in the patient ID

    -----

    W2) arrow buttons on viewer and keys for slicing can be out of sync

    W3) exceptions list is truncated at 255 characters, should be 511; fixed in 1.5.0a.

    ----

    W4) Uploader should use a popup rather than a new page for response


    DICOM Communication bugs

    C1) Check these changes: 20140608 mvh Added BYTE PCid to CStoreRSP::Write; review: pcid does not seem to get the right value

    C2) Multiple instance matching incomplete


    Installer bugs or limitations (low priority)

    I1) sql server and access database ODBC install only work for 32 bits of dgate (e.g. disable 64 bits or create ODBC entry by hand). Maybe works in 64 bits in 1.5.0b.

    I2) last line of dicom.ini does not read if no CR - futured

    I3) use BaseDir on dgate to find all folders (now many use current folder, complicating installer development). Implemented for web interface and lua in 1.5.0beta

    I4) web installer should copy html folders as well

    I5) Fedora uses /var/www, and nohup has an issue. Therefore provide specific web install scripts for other linux flavours, e.g. fedora.sh. Fedora also requires "sudo setenforce Permissive" for the web server and install to work; also acrnema.map must be copied locally to the cgi-bin/newweb folder rather than pointing to the server folder.

    I6) Web installer on windows does not offer a 'regen' by itself

    -----

    I7) Oracle linux issues see below; add mysql/mariadb option

    18 ) default incoming folder is not created in linux

    19) lua5.1-dev must be installed with apt-get not apt (add fixing link in 1.5.0c)


    Unconfirmed bugs:

    U1) overlapvirtualget=0 breaks the virtual server operation (hardw) - Not confirmed by testing

    U2) color print server does not work. - futured, awaiting more information.

    U3) Forward compressed as j2(?) does not set transfer syntax UID correctly in transmitted image. This is an issue on dcm4che but has not been seen in conquest to conquest transmission. Check with j2! in 1.5.0c

    U4) enpq reported random failure in 'process by after' mechanism (not confirmed)

    U5) GUI fails to run as user after install as service on server2012; does run as admin - not confirmed

    U6) I was also expecting DicomObject:Read('stu\ser\sop') to work with virtual servers but I tested it again and sadly no luck there

    U7) Show header in wadoviewer (wado text) open sometimes as dgate.exe downloads


    Below ---- newly found bugs for 1.5.0 will be collected (also see above)

    N1) Bridges like lunatic-python require a global lua instance, add doglobalua: with critical section around this and other global instance callers. Added in 1.5.0a.

    N2) e.g. Addimagefile opens a database for each image - try to make this and other more global for speed. Fixed for incoming folder in 1.5.0a.

    N3) the exceptions string in cgi-bin/dicom.ini is truncated to 256 characters. Now 511 characters in 1.5.0a.

    N4) pivoglot: Change GetAtoi() in nkiqrsop.cpp to GetUINT16(), Bits Allocated Attribute Tag (0028,0100) has Unsigned Short type. Otherwise, atoi() return zero. blocked jpeg compression of all images. Fixed in 1.5.0a.

    N5) On Centos (only), socket data buffering changes cause corruption of large images. MrJohnBro. Extended socket SendBinary under Linux with a wait function of up to 20s. In 1.5.0a after 18 june 2020.

    N6) Hardcoded CONQUESTSRV1 in listpatients.lua in "deleter". In 1.5.0a.

    ----- released to Github; release 1.5.0a -------

    N7) When installing Conquest as Linux service, folder printer_files is owned by root, giving a **failed to write to MAG0** for command line operation. Fix in 1.5.0c

    N8) dgate --dogloballua: is not documented; renamed to --globallua: and fixed in 1.5.0b

    N9) submit and submit2 ImportConverters do not read clause "command" and the actual command cannot have space. Fixed in 1.5.0b

    N10) Modify image from GUI fails if patientID contains space. Fixed in 1.5.0b.

    N11) Association.ConnectedIP is not passed to CallImportConverterN

    N12) Conquest error free jpeg compressed color data is compressed in wrong color space (YCR), but decompressed in the correct (RGB). Proposed fix in 1.5.0b.

    N13) ***Failed SQLExecDirect : ALTER TABLE UIDMODS ADD COLUMN Stage varchar(32) on Microsoft SQL server. Fixed in 1.5.0b.

    N14) Selectively disable virtual queries and moves (through DICOM tag 0x9999,0x0802 in the query data) from a delayed forward statement.

    N15) Hi Marcel. Find Local Missing Patients option in 1.5.0 seems to displaying incorrect info? Fixes in 1.5.0b.

    N16) My settings are "below 200GB move to mag1" but with 190GB free space the GUI moves 190GB and not only 10GB!. Fixed in 1.5.0b

    N17) Check acrnema.map for duplicates when saving.

    N18 ) We're running 1.5.0b and I'm having an issue where Conquest only writes to the logfile when the interface is open and other jobs stop too. Not reproduced so far.

    N19) do not leave the "only log to file" button on overnight. It would cause running nighly actions twice. Fixed in 1.5.0(b?)

    N20) HL7 parser not resilient to unix encoded files; also first line parsed wrong due to incorrect initialisation (likely compiler dependent). Fixed in 1.5.0b

    N21) folder printer_files on MAG0 can be changed by TempDir setting, but not for all accesses. Part fixed in in 1.5.0b

    N22) Violation of PRIMARY KEY constraint error in SQL server - needs adding exception error code. Ficed in 1.5.0b

    N23) Deanonimyzer crashes if there is no PatientBirthDate. Fixed in 1.5.0b

    N24) LoadandDeleteDir opens files before ready in windows10 copied over network - add retry for failed loads. Fixed in 1.5.0b

    N25) ChangeUID is very slow with large databases. A joint index works much better. Fixed in 1.5.0b

    ---------------- release 1.5.0b ----------------

    N26) dgate.php fails because setenv is not thread safe. Use dgate -yQUERY_STRING later. In 1.5.0c

    N27) DICOM parser does not support VR types UR, UC, OD, OV - breaks communication. trnsyn.cxx and dictionary must be updated. In 1.5.0c

    N28) Corrupted files can crash DICOM parser, add length checks in reader-In 1.5.0c

    N29) C-GET does and should not need to be forced UN - can test with Orthanc?

    N30) The following indices are needed to speed up performance on postgres - installed by test database in 1.5.0c

    CREATE INDEX idx_patientid ON dicomstudies(patientid);

    CREATE INDEX idx_patientid_studyinsta ON dicomstudies(patientid, studyinsta);

    CREATE INDEX idx_studyinsta_seriesinst ON dicomseries(studyinsta,seriesinst);

    CREATE INDEX idx_seriesinst_sopinstanc ON dicomimages(seriesinst, sopinstanc); Also in dgate 1.5.0c

    N31) Leak after Host '' will not accept image. Fixed in 1.5.0c

    N32) Negotiation issue with Orthanc gives trouble sending compressed data. Option e.g. J2! for 1.5.0c

    N33) Log update in GUI is slow and can freeze GUI. Updated in 1.5.0c

    N34) Query results that are a sequence disrupt the GUI query window and/or web interface. Fixed in 1.5.0c

    N35) request for passing raw luadicomstore response (in 1.5.0c).

    N36) Note that luasocket is part of the 32bits dgate, not 64 bits (by design).

    N37) Too long queries do not give a proper error message in GUI

    N38) dicomecho does not pass sequences into command object. Option to do this in 1.5.0c

    N39) Allow pass "ip:port" instead of AE in e.g. dicomecho. In 1.5.0c

    N40) luaSetVR does not padd odd string to even

    N41) UT does not display in header display. Fixed in 1.5.0c

    N42) Need retry SqliteExec on SQLITE_LOCKED

    N43) In file included from ./src/dgate/src/total.cpp:175: ./src/dgate/src/dgate.cpp: In function ‘void parseHL7(char**, char*, char*, char*, char*, char*, char*)’: ./src/dgate/src/dgate.cpp:26659:33: error: ordered comparison of pointer with integer zero (‘char*’ and ‘int’); 26659 | else if (strstr(type, ".DATE")>0) // date was returned, now get time. In 1.5.0c

    N44) Regen device does not report 'done' on the correct page. Add regen folder. In 1.5.0c

    N45) These dgate.dic changes (2x to SQ, 1x add) to read new Philips MR data correctly (in 1.5.0c):

    (2005,1084) VERS="3" VR="SQ" VM="1" Keyword="Unknown" Name="Unknown tag"

    (2005,140F) VERS="3" VR="SQ" VM="1" Keyword="Unknown" Name="Unknown tag"

    (2005,1580) VERS="3" VR="SQ" VM="1" Keyword="Unknown" Name="Unknown tag"

    N46) Write some help about quoting command line arguments in the manual

    N47) UIDMODS table with wrong case in GUI (not confirmed)

    N48 ) Running ConquestDicomserver from wine with dgate as linux service issues, replace temp filenames with z:/ etc, added \ warning; use basedir for loading ladle (wip)

    N49) Document that lua script uses channel 19.0 for forward, a second call would reuse the same channel and mix up associations

    N50) Add to dgate.dic:(9999,0801) (9999,0800). Rejected

    N51) set Rows to "" sets it to zero not empty (used in lua and jsonsetvr); fixed in 1.5.0c

    N52) webserver allows patientID over 64 characters for anonymise, and default is!

    N53) uploader failed on odd length files in (fix in 1.5.0c)

    N54) error in joint index creation

    N55) gui must place dgate.exe in app/newweb (in 1.5.0c)

    N56) Dicom printing from script or gui is broken for compressed images

    N57) SQL setttings seem to be sent per second

    Marcel van Herk is developer of the Conquest DICOM server together with Lambert Zijp.

    Edited 89 times, last by marcelvanherk: Layout and order ().

  • Here feature requests will be collected


    1) add LittleEndianExplicit to GUI connecting to dgate. Futured. Partly in 1.5.0beta1

    2) Improve safety of sqlite by regular flushing. Futured, but users can change SqLite startup pragma for safer operation in 1.4.19c

    3) install second server when service of first runs gives trouble - do an echo on the install button and fail if found - futured

    4) wish: OperatorConsole.printf ("*** multiplex: connection terminated [%s]\n", CallingApTitle); Impossible - AE would not have been read

    5) Implement web interface for batch anonymisation - futured

    6) Make max PDU size configurable. Futured.

    7) request for time stamp in ms. Futured.

    8 ) Use conquestdicomserver.lua from gui (could use servertask exe)

    9) Modify lua weasis starter for non-jnlp version

    10) optionally allow 2 viewers from web client, add selection in web installer. One selection in 1.4.19c1

    11) Use flag to avoid error messages from install controller (*** Not enough rights; ***Error loading)

    12) Provide dgateserv service installers in web install

    13) Update SqLite version to latest

    ----

    14) Add lunatic-python lua-python bridge to the release. In 1.5.0

    15) Login system for web interface. In 1.5.0b; also for wordpress in 1.5.0c

    ----

    16) Update installers to use dgate.php once stable

    17) Provide options to personalise the web interface re name, header and color

    18) Added node.js web qido/wado interface made by luiz (in 1.5.0c)

    19) support sort on numerical value in query; add sort/limit/offset VRs to all queries (in 1.5.0c)

    20) provide binary mode export: (partial in 1.5.0c)

    21) modify cgi-bin to php interface and provide packaged app (in 1.5.0c)

    22) add DICOMweb api (in 1.5.0c)

    23) added scrub command to efficiently get metadata (in 1.5.0c)

    24) regen with wildcard, or with list of folders (in 1.5.0c)

    25) RenameOnRewrite to allow decompression of NKI or change of folder names (in 1.5.0c)

    26) printer for Linux (WIP in 1.5.0c)

    27) Allow use md5 hash for anonymisation, use #name in stage (in 1.5.0c)

    28) Regen and RegenFail converters (in 1.5.0c)

    29) Script to recoved corrupted RT objects (in 1.5.0c)

    30) Add OHIF viewer (in 1.5.0c)

    31) Add fast server remote control exe (in 1.5.0c)

    32) Linux scripts to build unattended (in 1.5.0c)

    33) Docker file to run demo server with all web features (in 1.5.0c)

    34) easier config of web interfaces (in 1.5.0c)

    35) do not allow change server address from url for safety (in 1.5.0c)

    36) dicomread function to get array of objects as in dicomget but local (in 1.5.0c)

    (has truncate feature for faster reading headers but that is not yet usable)

    37) option to read dicom objects partially for metadata (WIP)

    38) cache metadata requests based on UID and scrubbing

    39) select for archiving based on general query (studydate)

  • Hi,


    Tip for installation: During installation windows10 gives several AUC messages that should be overriden. The easiest way is to right click on the different applications (e.g. ConquestDicomServer.exe) show properties, and unblock.


    Marcel

  • Hi Marcel,

    thanks for Your very great work. Over 10 years ago i've used Conquest linux server (on PLD and Gentoo distros) and they were working nearly 7 years without any touch so super dear. Today i'm comming back to make fresh install (on Oracle 8.1) with Conquest 1.5.0 (from 15.03.2020) but there are few installation problems that stopped me, despite i was doing according to linux manual (looked pretty simple), but :)

    1. The first is that maklinux script by default is using lua=-llua5.1 (as external) but it doesn't work in my situation (i have default ver 5.3.4 and only one *.so file in repo package). So i changed the lines to use and compile src from Your package and with sqlite3 (for test only) it compiled and worked (however there were problem that AESKULAP couldn't get test images). Ok i didn't check more and moved to maklinux and pick mariadb option, where

    2. it gave another errors with mysql no directories and files descriptions. I can see now that Mariadb and Mysql are not compatible, unfortunately on Oracle Linux 8.1 there is no /var/lib64/mysql but /var/lib64/mariadb so no linking here and some packages are different also so i've changed my mind to go back and try to install mysql8.

    3. The last error after picking mariadb in maklinux (despite i've reinstalled to change on mysql8) is i think some missed line after we're linking mysql lib64 catalog so script is no comming back to conquest installation pwd and then we have errors with 'directory/file no exist'

    4. Of course g++ with -I flags i have to change from mariadb to mysql, maybe it would be better to just add another options in picking user database

    Finally i did my compilation successful and instance working, but by this post i want to help somehow anyone trying to install and especially to help You with some hints for next updates.

    ps. i'm doing bigger infrastructure config, so perhaps i'll come back with some bigger questions ;)

  • Hi thanks for your report,


    This time I spent more time on depth (tested one Linux in depth), so I appreciate your efforts on another one. If you can post your fixed maklinux I can add it as e.g. maklinux_oracle.


    For lua: I installed lua5.1 and lua 5.3 side by side. Since conquest and its extensions are all based on lua5.1 I would suggest to so the same. Nothing has been tested against Lua5.3., such as web server and anonymisation.


    For mariadb/mysql: I maintain multiple search paths in maklinux, so you may be able to add paths rather than edit them. Of course I can add another choice as well.


    regards,


    Marcel

  • Hi,

    please find the attached file. Please also notice it was just for my scenario configuration. As reminder, i'm using Oracle Linux 8.1 with MySql 8. Maybe it will help even a little other members. Anyway it's not my job but Yours Marcel! :)

  • Marcel

    Running Cent 7.6 and I've managed to compile dgate by changing some of the lines in the maklinux script regarding mysql/mariadb. Locations of headers and .so mostly . But now that I've compiled and run I'm getting a couple of errors that are confusing.


    First is that the server is telling me that I don't have enough rights to MAG0 when I I'm using the same user to start dgate as created that directory and also I have rwx set for ugo on that directory as well.


    error is :

    Wed May 13 17:03:39 2020 *** Not enough rights to write in MAG0


    directory config:

    drwxrwxrwx. 2 root root 21 May 13 16:55 data


    MAG0=/usr/local/dicomgate/data


    I started dgate as follows:

    ./dgate -v



    Second is the following error ... which i assume is telling me that somehow dgate hasn't been able to connect to the mysql / maridb driver?


    Database type: NULL driver (black hole)


    Any hints or suggestions would be appreciated .

    Thanks in advance

    MrJohnathan Bravo

  • Started using version 1.5.0.

    OS version - Win XP SP3.

    I did not immediately notice after use - the selected compression method of the received files does not work ...

    Checked on two different computers with WinXP ...

    Also checked on Win7 - also does not work!


    JPEG compression does not work!


    Is this a bug?

    Or am I doing something wrong?

  • Marcel

    I'm seeing an issue tranmitting DX images , whereby a DX has corrupted data after being transmitted from 1.5.0 . Not a lot of corruption , but definite and absolutely traceable to 1.5.0 . I've reverted back to 1.14.19b and the issue is not present there. I can provide more information and potentially a debuglog if you would like to track this down. It seems very specific in 1.5.0 to only affect DX transmissions. I had seen this type of corruption after transmission in 1.14.19c , d, d2 but it was more prevalent in those versions affecting more modalities. Please let me know what I can do to assist tracking this down.


    MrJohnBravo

  • Hi,


    OK this is strange socket error on Linux that depends on the used buffer sizes. I had tested it but aparently not on big enough images.


    This issue is in pdu.cxx and buffer.cxx (and potentially pdata.cxx) in the dicomlib. I can use help to track this down.


    Marcel

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!