Megpróbáltam "B" típusú értéket küldeni XMLRPC-vel, és bizony nagyon meghátaltak a dógok tőle. Utánanéztem, és az rpcmethod.prg rpctype függvénye valóban méltánytalanul keveset (semennyit) foglalkozik a bináris típussal. Indítványoznám, hogy valamiképpen bytesorozatként menjen át, bár kétségtelen, hogy az XMLRPC szabvány előírja az unicode-ot...
w
- 5367 megtekintés
Hozzászólások
Feltételezem, hogy a B típus elírás. Kódblokkot nem lehet átküldeni, helyette a kódblokk kiértékelődik, és az eredmény megy át (valahogy így emlékszem, de meg kell nézni pontosabban).
Valószínűleg bytesorozat (X) típusra gondoltál. Tetszőleges bytesorozat azonban nem bír része lenni egy XML dokumentumnak, ilyen az XML szabvány, ezzel nem lehet mit kezdeni. Az XML dokumentumban csak karakterek lehetnek, ami nem karakter, arra az XML elemző hibát dob. Pl. UTF-8 kódolású dokumentumban az érvénytelen UTF-8 szekvencia az hiba. Latin-1 kódolásban a 0 byte hiba (azt hiszem a space alatt csak a TAB, LF és CR számít karakternek).
Tehát bináris érték nem tud nyersen átmenni XMLRPC paraméterként. Ilyenkor az a megoldás, hogy az értéket base64 kódolással becsomagoljuk.
--
CCC3
Szerk:
Az XML szabvány nem írja elő a unicode-ot. Azt írja elő, hogy a default kódolás UTF-8. Ehelyett meg lehet adni más kódolást is, pl. ISO-8859-1 (latin-1), ami egy egybájtos kódolás. Azonban ezzel sem lehet átvinni olyan bájtokat, amik a szabvány szerint nem számítanak karakternek. Tehát az a döntő, hogy a szabvány kimondja: az XML dokumentum karakterekből áll.
- A hozzászóláshoz be kell jelentkezni
Igen, elírás volt, bocs :)
Oké, ezt tettem, végülis nem rossz így sem. Most azon gondolkozom, hogy akkor az X típussal lehetne-e automatikusan ezt csinálni, hogy base64_encode segítségével küldeni át, csak a kérdés, hogy a túloldal honnan fogja tudni, hogy ez most X és nem pedig C, és base64_decode-olni kell. De lehet, hogy ez meg már túlzás, végülis base64-gyel gond nélkül átment nekem, tehát voltaképp nincs is gond. :) Annyit lehetne még tenni, hogy a fent nevezett függvényben valahogyan jelezni, akár egy errorral, hogy nem jó a dolog, ugyanis így NIL-t ad vissza, ami aztán sokkal később misztikus hibaként jelenik meg, amikor a <value>-hoz akar NIL-t adni.
w
- A hozzászóláshoz be kell jelentkezni
Az XP-en a CCC3\tools\xmlrpc\demo-rpc-ban talaalhatoo peldaat elszaal a linkben.
A linuxban ugyanaz tökeeletesen müködik.
C:\CCC\CCC3\tools\xmlrpc\demo-rpc>bapp_w32c @parfile.bld
CCC Program Builder 1.2.24 Copyright (C) ComFirm Bt.
.
OBJ2EXE.BAT demo-client .
-------------------------------------------------------------------------
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0xb2): undefined reference to `ERR_peek_error'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x2dc): undefined reference to `ERR_error_string'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x380): undefined reference to `ERR_peek_error'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x6cf): undefined reference to `TLSv1_client_method'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x6dd): undefined reference to `SSL_CTX_new'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x784): undefined reference to `SSLv23_method'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x7e9): undefined reference to `SSLv2_method'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x80d): undefined reference to `SSLv2_server_method'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x951): undefined reference to `SSLv2_client_method'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x9a7): undefined reference to `SSLv3_method'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x9bb): undefined reference to `SSLv3_server_method'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0xa11): undefined reference to `SSLv3_client_method'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0xab3): undefined reference to `SSLv23_server_method'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0xb09): undefined reference to `SSLv23_client_method'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0xb5f): undefined reference to `TLSv1_method'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0xbb5): undefined reference to `TLSv1_server_method'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0xc84): undefined reference to `SSL_CTX_free'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0xeb1): undefined reference to `SSL_CTX_use_certificate_file'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x1129): undefined reference to `SSL_CTX_use_certificate_chain_file'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x13b1): undefined reference to `SSL_CTX_use_PrivateKey_file'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x1605): undefined reference to `SSL_CTX_check_private_key'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x1726): undefined reference to `X509_STORE_CTX_get_current_cert'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x172e): undefined reference to `X509_get_subject_name'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x1743): undefined reference to `X509_NAME_oneline'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x1887): undefined reference to `SSL_CTX_set_verify'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x1aa5): undefined reference to `SSL_CTX_get_verify_mode'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x1c55): undefined reference to `SSL_CTX_get_verify_depth'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x1e4e): undefined reference to `SSL_CTX_set_verify_depth'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x209e): undefined reference to `SSL_CTX_load_verify_locations'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x2364): undefined reference to `SSL_load_client_CA_file'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x237e): undefined reference to `SSL_CTX_set_client_CA_list'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x2585): undefined reference to `SSL_CTX_get_quiet_shutdown'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x2746): undefined reference to `SSL_CTX_set_quiet_shutdown'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x2986): undefined reference to `SSL_CTX_set_session_id_context'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x2bfa): undefined reference to `SSL_CTX_ctrl'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x2e10): undefined reference to `SSL_CTX_ctrl'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x3025): undefined reference to `SSL_CTX_get_timeout'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x3221): undefined reference to `SSL_CTX_set_timeout'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x344a): undefined reference to `SSL_CTX_ctrl'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x3660): undefined reference to `SSL_CTX_ctrl'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x3884): undefined reference to `SSL_CTX_flush_sessions'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x3a4a): undefined reference to `SSL_CTX_ctrl'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x3b47): undefined reference to `SSL_load_error_strings'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslctx_funif.obj):sslctx_funif.cpp:(.text+0x3b4c): undefined reference to `SSL_library_init'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0xc5): undefined reference to `SSL_new'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0x1ac): undefined reference to `SSL_new'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0x324): undefined reference to `SSL_free'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0x521): undefined reference to `SSL_set_fd'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0x735): undefined reference to `SSL_get_fd'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0x8e5): undefined reference to `SSL_accept'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0xa95): undefined reference to `SSL_connect'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0xc45): undefined reference to `SSL_clear'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0xe26): undefined reference to `SSL_write'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0x116c): undefined reference to `SSL_get_fd'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0x11df): undefined reference to `SSL_pending'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0x123f): undefined reference to `SSL_read'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0x149e): undefined reference to `SSL_get_error'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0x15c5): undefined reference to `SSL_pending'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0x178a): undefined reference to `SSL_ctrl'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(sslcon_funif.obj):sslcon_funif.cpp:(.text+0x1945): undefined reference to `SSL_shutdown'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(set_callback.obj):set_callback.cpp:(.text+0x62): undefined reference to `CRYPTO_num_locks'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(set_callback.obj):set_callback.cpp:(.text+0xde): undefined reference to `CRYPTO_set_locking_callback'
C:\CCC\ccc3\usr\lib\mng\ccc3_sslsocket.lib(set_callback.obj):set_callback.cpp:(.text+0xea): undefined reference to `CRYPTO_set_id_callback'
collect2: ld returned 1 exit status
- A hozzászóláshoz be kell jelentkezni
Windowson külön installálni kell az openssl-t. Van itt valahol egy openssl csomag.
Bocs, hogy nehezen tudok felelni, de őszig 14400-as internetem van csak, 10 perc volt, mire ide eljutottam, azért nem is próbálom sokszor.
--
CCC3
- A hozzászóláshoz be kell jelentkezni