indigo-astronomy / indigo

INDIGO is a system of standards and frameworks for multiplatform and distributed astronomy software development designed to scale with your needs.
http://www.indigo-astronomy.org
Other
151 stars 68 forks source link

INDI style drivers - URL BLOBS do not work and are unreliable in legacy mode. #357

Closed rumengb closed 4 years ago

rumengb commented 4 years ago

indigo server is started with: ./build/bin/indigo_server -vv -i build/drivers/indigo_ccd_simulator

  1. Legacy mode is unreliable:
rumen@sirius:~/indigo.git$ ./build/bin/indigo_prop_tool set -t 2 -b -l "DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE=0.1"
DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE = 0.100000
save_blobs = 1, indigo_use_blob_urls = 0, item->blob.size = 0, item->blob.value = (nil), property->state = 2
DSLR Simulator @ indigo_ccd_simulator.CCD_IMAGE.IMAGE = <NO BLOB DATA>
DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE = 0.000000
DSLR Simulator @ indigo_ccd_simulator.CCD_IMAGE.IMAGE = <BLOB => DSLR Simulator @ indigo_ccd_simulator.CCD_IMAGE.IMAGE.jpeg>
DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE = 0.000000
rumen@sirius:~/indigo.git$ ./build/bin/indigo_prop_tool set -t 2 -b -l "DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE=0.1"
DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE = 0.100000
save_blobs = 1, indigo_use_blob_urls = 0, item->blob.size = 0, item->blob.value = (nil), property->state = 2
DSLR Simulator @ indigo_ccd_simulator.CCD_IMAGE.IMAGE = <NO BLOB DATA>
DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE = 0.000000
save_blobs = 1, indigo_use_blob_urls = 0, item->blob.size = 0, item->blob.value = 0x7f5e78001df0, property->state = 1
DSLR Simulator @ indigo_ccd_simulator.CCD_IMAGE.IMAGE = <NO BLOB DATA>
DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE = 0.000000
rumen@sirius:~/indigo.git$

Sometimes when exposure is done, CCD_IMAGE is OK but item->blob.size = 0, which basically means there is no data, but value is defined (see above).

However with dynamic drivers this never happens.

  1. URL BLOBs do not work at all:
    rumen@sirius:~/indigo.git$ ./build/bin/indigo_prop_tool set -t 2 -b "DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE=0.1"
    DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE = 0.100000
    save_blobs = 1, indigo_use_blob_urls = 1, item->blob.size = 0, item->blob.value = (nil), property->state = 2
    DSLR Simulator @ indigo_ccd_simulator.CCD_IMAGE.IMAGE = <NO BLOB DATA>
    DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE = 0.000000
    01:04:04.164887 indigo_prop_tool: Can not retrieve data from /blob/0x561a86eb9ac0.jpeg
    DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE = 0.000000
    rumen@sirius:~/indigo.git$ 

    For INDI style drivers it is probably a good idea to switch to legacy mode BLOB transfer.

rumengb commented 4 years ago

Some trace logs, i observe very strange behavior: The problem always appears when more than one client connected and one using legacy BLOB one using URL BLOB. In case of only one client behavior is consistent: with URL BLOB - never works, with legacy BLOB - always works. So I guess it is a race between clients...

  1. FAILED EXPOSURE: 1.1. Client log:
    DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE = 0.100000
    09:54:13.767738 indigo_prop_tool: INDIGO Bus: property update
    09:54:13.767749 indigo_prop_tool: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_IMAGE' BLOB ro Busy 2.0 0  {
    09:54:13.767758 indigo_prop_tool:   'IMAGE' (0 bytes, '', '')
    09:54:13.767766 indigo_prop_tool: }
    save_blobs = 1, indigo_use_blob_urls = 0, item->blob.size = 0, item->blob.value = (nil), property->state = 2
    DSLR Simulator @ indigo_ccd_simulator.CCD_IMAGE.IMAGE = <NO BLOB DATA>
    09:54:13.862918 indigo_prop_tool: 3 → <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Busy'>
    09:54:13.863025 indigo_prop_tool: 3 → <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
    09:54:13.863025 indigo_prop_tool: </setNumberVector>
    09:54:13.863076 indigo_prop_tool: INDIGO Bus: property update
    09:54:13.863101 indigo_prop_tool: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_EXPOSURE' NUMBER rw Busy 2.0 0  {
    09:54:13.863126 indigo_prop_tool:   'EXPOSURE' = 0 
    09:54:13.863145 indigo_prop_tool: }
    DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE = 0.000000
    09:54:14.074680 indigo_prop_tool: 3 → <setBLOBVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_IMAGE' state='Ok'>
    09:54:14.074716 indigo_prop_tool: 3 → <oneBLOB name='IMAGE' format='' size='0'>
    09:54:14.074742 indigo_prop_tool: 3 → </oneBLOB>
    09:54:14.074757 indigo_prop_tool: 3 → </setBLOBVector>
    09:54:14.074779 indigo_prop_tool: INDIGO Bus: property update
    09:54:14.074793 indigo_prop_tool: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_IMAGE' BLOB ro Ok 2.0 0  {
    09:54:14.074802 indigo_prop_tool:   'IMAGE' (0 bytes, '', '')
    09:54:14.074811 indigo_prop_tool: }
    save_blobs = 1, indigo_use_blob_urls = 0, item->blob.size = 0, item->blob.value = 0x7f1998064a40, property->state = 1
    DSLR Simulator @ indigo_ccd_simulator.CCD_IMAGE.IMAGE = <NO BLOB DATA>
    09:54:14.074990 indigo_prop_tool: 3 → <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Ok'>
    09:54:14.074990 indigo_prop_tool: <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
    09:54:14.075022 indigo_prop_tool: 3 → </setNumberVector>
    09:54:14.075038 indigo_prop_tool: INDIGO Bus: property update
    09:54:14.075050 indigo_prop_tool: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_EXPOSURE' NUMBER rw Ok 2.0 0  {
    09:54:14.075063 indigo_prop_tool:   'EXPOSURE' = 0 
    09:54:14.075071 indigo_prop_tool: }
    DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE = 0.000000

1.2. Server log:

09:54:13.767207 indigo_server: <setBLOBVector device='DSLR Simulator' name='CCD_IMAGE' state='Busy'>
09:54:13.767207 indigo_server: </setBLOBVector>
09:54:13.767240 indigo_server: INDIGO Bus: property update
09:54:13.767252 indigo_server: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_EXPOSURE' NUMBER rw Busy 2.0 0  {
09:54:13.767267 indigo_server:   'EXPOSURE' = 0.1 
09:54:13.767275 indigo_server: }
09:54:13.767284 indigo_server: 22 ← <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Busy'>
09:54:13.767302 indigo_server: 22 ← <oneNumber name='EXPOSURE' target='0.1'>0.1</oneNumber>
09:54:13.767314 indigo_server: 22 ← </setNumberVector>
09:54:13.767325 indigo_server: 26 ← <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Busy'>
09:54:13.767347 indigo_server: 26 ← <oneNumber name='EXPOSURE' target='0.1'>0.1</oneNumber>
09:54:13.767366 indigo_server: 26 ← </setNumberVector>
09:54:13.767399 indigo_server: INDIGO Bus: property update
09:54:13.767411 indigo_server: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_IMAGE' BLOB ro Busy 2.0 0  {
09:54:13.767420 indigo_server:   'IMAGE' (435867 bytes, '.jpeg', '')
09:54:13.767429 indigo_server: }
09:54:13.767437 indigo_server: 22 ← <setBLOBVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_IMAGE' state='Busy'>
09:54:13.767449 indigo_server: 22 ← </setBLOBVector>
09:54:13.767460 indigo_server: 26 ← <setBLOBVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_IMAGE' state='Busy'>
09:54:13.767480 indigo_server: 26 ← </setBLOBVector>
09:54:13.862228 indigo_server: 9 → <setNumberVector device='DSLR Simulator' name='CCD_EXPOSURE' state='Busy'>
09:54:13.862228 indigo_server: <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
09:54:13.862228 indigo_server: </setNumberVector>
09:54:13.862334 indigo_server: INDIGO Bus: property update
09:54:13.862369 indigo_server: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_EXPOSURE' NUMBER rw Busy 2.0 0  {
09:54:13.862398 indigo_server:   'EXPOSURE' = 0 
09:54:13.862420 indigo_server: }
09:54:13.862452 indigo_server: 22 ← <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Busy'>
09:54:13.862573 indigo_server: 22 ← <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
09:54:13.862657 indigo_server: 22 ← </setNumberVector>
09:54:13.862726 indigo_server: 26 ← <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Busy'>
09:54:13.862807 indigo_server: 26 ← <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
09:54:13.862866 indigo_server: 26 ← </setNumberVector>
09:54:14.074389 indigo_server: 9 → <setBLOBVector device='DSLR Simulator' name='CCD_IMAGE' state='Ok'>
09:54:14.074389 indigo_server: <oneBLOB name='IMAGE' path='/blob/0x5624e2827ac0.jpeg'/>
09:54:14.074389 indigo_server: </setBLOBVector>
09:54:14.074389 indigo_server: <setNumberVector device='DSLR Simulator' name='CCD_EXPOSURE' state='Ok'>
09:54:14.074463 indigo_server: INDIGO Bus: property update
09:54:14.074475 indigo_server: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_IMAGE' BLOB ro Ok 2.0 0  {
09:54:14.074482 indigo_server:   'IMAGE' (0 bytes, '', '/blob/0x5624e2827ac0.jpeg')
09:54:14.074488 indigo_server: }
09:54:14.074497 indigo_server: 22 ← <setBLOBVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_IMAGE' state='Ok'>
09:54:14.074561 indigo_server: 22 ← <oneBLOB name='IMAGE' url='/blob/0x5624e2827ac0.jpeg'/>
09:54:14.074612 indigo_server: 22 ← </setBLOBVector>
09:54:14.074639 indigo_server: 26 ← <setBLOBVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_IMAGE' state='Ok'>
09:54:14.074675 indigo_server: 26 ← <oneBLOB name='IMAGE' format='' size='0'>
09:54:14.074708 indigo_server: 26 ← </oneBLOB>
09:54:14.074734 indigo_server: 26 ← </setBLOBVector>
09:54:14.074789 indigo_server: 9 → <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
09:54:14.074789 indigo_server: </setNumberVector>
09:54:14.074811 indigo_server: INDIGO Bus: property update
09:54:14.074822 indigo_server: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_EXPOSURE' NUMBER rw Ok 2.0 0  {
09:54:14.074832 indigo_server:   'EXPOSURE' = 0 
09:54:14.074840 indigo_server: }
09:54:14.074850 indigo_server: 22 ← <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Ok'>
09:54:14.074884 indigo_server: 22 ← <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
09:54:14.074911 indigo_server: 22 ← </setNumberVector>
09:54:14.074936 indigo_server: 26 ← <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Ok'>
09:54:14.074966 indigo_server: 26 ← <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
09:54:14.074989 indigo_server: 26 ← </setNumberVector>
09:54:15.699804 indigo_server: 1 clients
09:54:15.699869 indigo_server: Worker thread finished
  1. SUCCEEDED:

2.1, Client log:

10:02:49.921242 indigo_prop_tool: 3 → <setBLOBVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_IMAGE' state='Busy'>
10:02:49.921242 indigo_prop_tool: </setBLOBVector>
10:02:49.921281 indigo_prop_tool: INDIGO Bus: property update
10:02:49.921291 indigo_prop_tool: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_IMAGE' BLOB ro Busy 2.0 0  {
10:02:49.921300 indigo_prop_tool:   'IMAGE' (0 bytes, '', '')
10:02:49.921309 indigo_prop_tool: }
save_blobs = 1, indigo_use_blob_urls = 0, item->blob.size = 0, item->blob.value = (nil), property->state = 2
DSLR Simulator @ indigo_ccd_simulator.CCD_IMAGE.IMAGE = <NO BLOB DATA>
10:02:50.015300 indigo_prop_tool: 3 → <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Busy'>
10:02:50.015300 indigo_prop_tool: <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
10:02:50.015300 indigo_prop_tool: </setNumberVector>
10:02:50.015381 indigo_prop_tool: INDIGO Bus: property update
10:02:50.015402 indigo_prop_tool: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_EXPOSURE' NUMBER rw Busy 2.0 0  {
10:02:50.015424 indigo_prop_tool:   'EXPOSURE' = 0 
10:02:50.015438 indigo_prop_tool: }
DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE = 0.000000
10:02:50.236733 indigo_prop_tool: 3 → <setBLOBVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_IMAGE' state='Ok'>
10:02:50.236733 indigo_prop_tool: <oneBLOB name='IMAGE' format='.jpeg' size='436091'>
10:02:50.236733 indigo_prop_tool: /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT//PXpTTIiSMvmlQRnD9gP8/5xVjyolzvH71TlQxGKhCeYV3owCZKr1Of6047Jjd7DHTEhMUYLbSNwBLZHSlgm8x9sibVU5MmCT171JIgUIu9vMxkKxHByOtJvdiXZxg4BY9QP8adkK+1yWfAdSsmUPfOabCw6OgUx8cnqe/TrTJoiIzvkUofm5OMVY2pCocgLyeU5qEu #### BLOB TRUNCATED
10:02:50.238546 indigo_prop_tool: 3 → </oneBLOB>
10:02:50.238546 indigo_prop_tool: </setBLOBVector>
10:02:50.238546 indigo_prop_tool: <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Ok'>
10:02:50.238546 indigo_prop_tool: <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
10:02:50.238546 indigo_prop_tool: </setNumberVector>
10:02:50.238992 indigo_prop_tool: INDIGO Bus: property update
10:02:50.239037 indigo_prop_tool: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_IMAGE' BLOB ro Ok 2.0 0  {
10:02:50.239062 indigo_prop_tool:   'IMAGE' (436091 bytes, '.jpeg', '')
10:02:50.239081 indigo_prop_tool: }
DSLR Simulator @ indigo_ccd_simulator.CCD_IMAGE.IMAGE = <BLOB => DSLR Simulator @ indigo_ccd_simulator.CCD_IMAGE.IMAGE.jpeg>
10:02:50.240631 indigo_prop_tool: INDIGO Bus: property update
10:02:50.240655 indigo_prop_tool: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_EXPOSURE' NUMBER rw Ok 2.0 0  {
10:02:50.240669 indigo_prop_tool:   'EXPOSURE' = 0 
10:02:50.240678 indigo_prop_tool: }
DSLR Simulator @ indigo_ccd_simulator.CCD_EXPOSURE.EXPOSURE = 0.000000
rumen@sirius:~/indigo.git$ 

2.2. Server log:

10:02:49.920869 indigo_server: 22 ← <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Busy'>
10:02:49.920901 indigo_server: 22 ← <oneNumber name='EXPOSURE' target='0.1'>0.1</oneNumber>
10:02:49.920923 indigo_server: 22 ← </setNumberVector>
10:02:49.920944 indigo_server: 24 ← <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Busy'>
10:02:49.920976 indigo_server: 24 ← <oneNumber name='EXPOSURE' target='0.1'>0.1</oneNumber>
10:02:49.921000 indigo_server: 24 ← </setNumberVector>
10:02:49.921043 indigo_server: INDIGO Bus: property update
10:02:49.921060 indigo_server: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_IMAGE' BLOB ro Busy 2.0 0  {
10:02:49.921070 indigo_server:   'IMAGE' (0 bytes, '', '/blob/0x5624e2827ac0.jpeg')
10:02:49.921079 indigo_server: }
10:02:49.921092 indigo_server: 22 ← <setBLOBVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_IMAGE' state='Busy'>
10:02:49.921118 indigo_server: 22 ← </setBLOBVector>
10:02:49.921146 indigo_server: 24 ← <setBLOBVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_IMAGE' state='Busy'>
10:02:49.921168 indigo_server: 24 ← </setBLOBVector>
10:02:50.014551 indigo_server: 9 → <setNumberVector device='DSLR Simulator' name='CCD_EXPOSURE' state='Busy'>
10:02:50.014551 indigo_server: <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
10:02:50.014551 indigo_server: </setNumberVector>
10:02:50.014667 indigo_server: INDIGO Bus: property update
10:02:50.014698 indigo_server: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_EXPOSURE' NUMBER rw Busy 2.0 0  {
10:02:50.014726 indigo_server:   'EXPOSURE' = 0 
10:02:50.014746 indigo_server: }
10:02:50.014772 indigo_server: 22 ← <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Busy'>
10:02:50.014891 indigo_server: 22 ← <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
10:02:50.014968 indigo_server: 22 ← </setNumberVector>
10:02:50.015031 indigo_server: 24 ← <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Busy'>
10:02:50.015102 indigo_server: 24 ← <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
10:02:50.015156 indigo_server: 24 ← </setNumberVector>
10:02:50.233707 indigo_server: 9 → <setBLOBVector device='DSLR Simulator' name='CCD_IMAGE' state='Ok'>
10:02:50.233707 indigo_server: <oneBLOB name='IMAGE' format='.jpeg' size='436091'>
10:02:50.234942 indigo_server: 9 → </oneBLOB>
10:02:50.234942 indigo_server: </setBLOBVector>
10:02:50.234942 indigo_server: <setNumberVector device='DSLR Simulator' name='CCD_EXPOSURE' state='Ok'>
10:02:50.234942 indigo_server: <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
10:02:50.234942 indigo_server: </setNumberVector>
10:02:50.235090 indigo_server: INDIGO Bus: property update
10:02:50.235110 indigo_server: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_IMAGE' BLOB ro Ok 2.0 0  {
10:02:50.235121 indigo_server:   'IMAGE' (436091 bytes, '.jpeg', '')
10:02:50.235130 indigo_server: }
10:02:50.235266 indigo_server: 22 ← <setBLOBVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_IMAGE' state='Ok'>
10:02:50.235370 indigo_server: 22 ← <oneBLOB name='IMAGE' path='/blob/0x7fc1b80556c0.jpeg'/>
10:02:50.235409 indigo_server: 22 ← </setBLOBVector>
10:02:50.235443 indigo_server: 24 ← <setBLOBVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_IMAGE' state='Ok'>
10:02:50.235478 indigo_server: 24 ← <oneBLOB name='IMAGE' format='.jpeg' size='436091'>
10:02:50.236172 indigo_server: 24 ← </oneBLOB>
10:02:50.236202 indigo_server: 24 ← </setBLOBVector>
10:02:50.236255 indigo_server: INDIGO Bus: property update
10:02:50.236270 indigo_server: 'DSLR Simulator @ indigo_ccd_simulator'.'CCD_EXPOSURE' NUMBER rw Ok 2.0 0  {
10:02:50.236286 indigo_server:   'EXPOSURE' = 0 
10:02:50.236295 indigo_server: }
10:02:50.236305 indigo_server: 22 ← <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Ok'>
10:02:50.236347 indigo_server: 22 ← <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
10:02:50.236372 indigo_server: 22 ← </setNumberVector>
10:02:50.236396 indigo_server: 24 ← <setNumberVector device='DSLR Simulator @ indigo_ccd_simulator' name='CCD_EXPOSURE' state='Ok'>
10:02:50.236413 indigo_server: 24 ← <oneNumber name='EXPOSURE' target='0.1'>0</oneNumber>
10:02:50.236426 indigo_server: 24 ← </setNumberVector>
10:02:50.239982 indigo_server: Worker thread started socket = 23
10:02:50.240024 indigo_server: 3 clients
10:02:50.240088 indigo_server: 23 → GET /blob/0x7fc1b80556c0.jpeg HTTP/1.1
10:02:50.240104 indigo_server: 23 → 
10:02:50.240117 indigo_server: 23 ← HTTP/1.1 200 OK
10:02:50.240207 indigo_server: 23 ← Server: INDIGO/2.0-123
10:02:50.240238 indigo_server: 23 ← Content-Type: image/jpeg
10:02:50.240264 indigo_server: 23 ← Content-Length: 436091
10:02:50.240287 indigo_server: 23 ← 
10:02:50.240434 indigo_server: GET /blob/0x7fc1b80556c0.jpeg -> OK (436091 bytes)
10:02:50.240481 indigo_server: 2 clients
10:02:50.240494 indigo_server: Worker thread finished
10:02:51.847606 indigo_server: 1 clients
10:02:51.847675 indigo_server: Worker thread finished
rumengb commented 4 years ago

Attempt to fix this with commit 0912700. The fix essentially allows executable drivers to disable "URL" blobs and use only "ALSO". In main() in all drivers one should set

 indigo_use_blob_urls = false;

Peter, please review!