pvxslibs 1.3.3a1__tar.gz → 1.4.0a1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pvxslibs might be problematic. Click here for more details.
- {pvxslibs-1.3.3a1/python/pvxslibs.egg-info → pvxslibs-1.4.0a1}/PKG-INFO +1 -1
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/configure/CONFIG_PVXS_VERSION +4 -3
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/credentials.cpp +4 -4
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupsource.cpp +1 -1
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/iocsource.cpp +15 -20
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/iocsource.h +3 -1
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvalink.h +1 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvalink_jlif.cpp +16 -12
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvalink_lset.cpp +29 -5
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/singlesource.cpp +12 -4
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/subscriptionctx.h +2 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1/python/pvxslibs.egg-info}/PKG-INFO +1 -1
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/client.cpp +6 -4
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/clientconn.cpp +8 -13
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/clientimpl.h +0 -1
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/clientmon.cpp +10 -3
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/config.cpp +13 -10
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/evhelper.cpp +119 -132
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/evhelper.h +30 -24
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/nt.cpp +2 -2
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/os/WIN32/osdSockExt.cpp +70 -5
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/os/default/osdSockExt.cpp +56 -2
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/osiSockExt.h +13 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvaproto.h +27 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/source.h +4 -4
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/srvcommon.h +11 -1
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/server.cpp +18 -10
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/serverconn.cpp +18 -1
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/serverconn.h +23 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/serverget.cpp +10 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/serverintrospect.cpp +17 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/servermon.cpp +65 -32
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/udp_collector.cpp +133 -57
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/udp_collector.h +3 -1
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/util.cpp +20 -1
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/COPYRIGHT +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/LICENSE +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/MANIFEST.in +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/README.md +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/LICENSE +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/arc4random.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/buffer.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/buffer_iocp.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_async.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_filter.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_mbedtls.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_openssl.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_pair.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_ratelim.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_sock.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_ssl.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/changelist-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/cmake/VersionViaGit.cmake +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/compat/sys/queue.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/defer-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/devpoll.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/epoll.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/epoll_sub.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/epolltable-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evbuffer-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evconfig-private.h.cmake +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evdns.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/event-config.h.cmake +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/event-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/event.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/event_iocp.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/event_tagging.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evmap-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evmap.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evport.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evrpc-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evrpc.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evsignal-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evthread-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evthread.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evthread_pthread.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evthread_win32.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evutil.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evutil_rand.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evutil_time.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/ht-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/http-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/http.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/evdns.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/buffer.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/buffer_compat.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/bufferevent.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/bufferevent_compat.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/bufferevent_ssl.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/bufferevent_struct.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/dns.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/dns_compat.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/dns_struct.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/event.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/event_compat.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/event_struct.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/http.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/http_compat.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/http_struct.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/keyvalq_struct.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/listener.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/rpc.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/rpc_compat.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/rpc_struct.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/tag.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/tag_compat.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/thread.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/util.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/visibility.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/watch.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/ws.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/evhttp.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/evrpc.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/evutil.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/iocp-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/ipv6-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/kqueue-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/kqueue.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/listener.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/log-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/log.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/mbedtls-compat.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/minheap-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/mm-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/openssl-compat.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/poll.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/ratelim-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/select.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/sha1.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/sha1.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/signal.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/signalfd.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/ssl-compat.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/strlcpy-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/strlcpy.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/time-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/util-internal.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/watch.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/wepoll.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/wepoll.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/win32select.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/ws.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/channel.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/channel.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/credentials.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dbentry.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dberrormessage.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dberrormessage.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dbeventcontextdeleter.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dblocker.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dbmanylocker.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/demo.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dummygroup.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dummysingle.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/field.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/field.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fieldconfig.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fielddefinition.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fielddefinition.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fieldname.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fieldname.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fieldnamecomponent.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fieldsubscriptionctx.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fieldsubscriptionctx.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/group.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/group.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupconfig.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupconfigprocessor.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupconfigprocessor.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupdefinition.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupprocessorcontext.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupprocessorcontext.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupsource.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupsourcehooks.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupsrcsubscriptionctx.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/imagedemo.c +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/iochooks.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/iocshargument.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/iocshcommand.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/iocshindex.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/localfieldlog.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/localfieldlog.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvalink.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvalink_channel.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvalink_link.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvxs/iochooks.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvxs3x.dbd +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvxs7x.dbd +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/qsrvpvt.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/securityclient.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/securityclient.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/securitylogger.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/singlesource.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/singlesourcehooks.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/singlesrcsubscriptionctx.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/singlesrcsubscriptionctx.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/typeutils.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/typeutils.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/yajlcallbackhandler.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/pyproject.toml +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs/__init__.py +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs/ioc.py +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs/lib/__init__.py +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs/path.py +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs/test/__init__.py +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs/test/test_load.py +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs/version.py +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs.egg-info/SOURCES.txt +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs.egg-info/dependency_links.txt +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs.egg-info/not-zip-safe +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs.egg-info/requires.txt +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs.egg-info/top_level.txt +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/setup.cfg +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/setup.py +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/bitmask.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/bitmask.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/clientdiscover.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/clientget.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/clientintrospect.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/clientreq.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/conn.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/conn.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/data.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/dataencode.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/datafmt.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/dataimpl.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/describe.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/describe.h@ +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/log.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/osgroups.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvrequest.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvrequest.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/client.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/data.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/log.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/netcommon.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/nt.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/server.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/sharedArray.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/sharedpv.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/unittest.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/util.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/version.h +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/versionNum.h@ +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/serverchan.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/serversource.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/sharedarray.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/sharedpv.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/type.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/unittest.cpp +0 -0
- {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/utilpvt.h +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
PVXS_MAJOR_VERSION = 1
|
|
2
|
-
PVXS_MINOR_VERSION =
|
|
3
|
-
PVXS_MAINTENANCE_VERSION =
|
|
2
|
+
PVXS_MINOR_VERSION = 4
|
|
3
|
+
PVXS_MAINTENANCE_VERSION = 0
|
|
4
4
|
|
|
5
5
|
# Version range conditions in Makefiles
|
|
6
6
|
#
|
|
@@ -12,7 +12,8 @@ PVXS_MAINTENANCE_VERSION = 3
|
|
|
12
12
|
#
|
|
13
13
|
# ifneq ($(PVXS_X_Y_Z),YES) # PVXS != X.Y.Z
|
|
14
14
|
#
|
|
15
|
-
|
|
15
|
+
PVXS_1_4_0 = YES
|
|
16
|
+
PVXS_1_3_3 = NO
|
|
16
17
|
PVXS_1_3_2 = NO
|
|
17
18
|
PVXS_1_3_1 = NO
|
|
18
19
|
PVXS_1_3_0 = NO
|
|
@@ -24,13 +24,13 @@ namespace ioc {
|
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
26
|
Credentials::Credentials(const server::ClientCredentials& clientCredentials) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
host =
|
|
27
|
+
SockAddr addr(clientCredentials.peer);
|
|
28
|
+
addr.setPort(0);
|
|
29
|
+
host = std::string(SB()<<addr.map6to4());
|
|
30
30
|
|
|
31
31
|
// "ca" style credentials
|
|
32
32
|
if (clientCredentials.method == "ca") {
|
|
33
|
-
pos = clientCredentials.account.find_last_of('/');
|
|
33
|
+
auto pos = clientCredentials.account.find_last_of('/');
|
|
34
34
|
if (pos == std::string::npos) {
|
|
35
35
|
cred.emplace_back(clientCredentials.account);
|
|
36
36
|
} else {
|
|
@@ -179,7 +179,7 @@ void GroupSource::onOp(Group& group,
|
|
|
179
179
|
fieldIndex++;
|
|
180
180
|
}
|
|
181
181
|
auto& pvRequest = putOperation->pvRequest();
|
|
182
|
-
IOCSource::setForceProcessingFlag(pvRequest, securityCache);
|
|
182
|
+
IOCSource::setForceProcessingFlag(putOperation.get(), pvRequest, securityCache);
|
|
183
183
|
securityCache->done = true;
|
|
184
184
|
}
|
|
185
185
|
|
|
@@ -426,32 +426,27 @@ void IOCSource::doPostProcessing(dbChannel* pDbChannel, TriState forceProcessing
|
|
|
426
426
|
* @param pvRequest the request
|
|
427
427
|
* @param securityControlObject the security control object to update
|
|
428
428
|
*/
|
|
429
|
-
void IOCSource::setForceProcessingFlag(const Value& pvRequest,
|
|
429
|
+
void IOCSource::setForceProcessingFlag(server::RemoteLogger *op, const Value& pvRequest,
|
|
430
430
|
const std::shared_ptr<SecurityControlObject>& securityControlObject)
|
|
431
431
|
{
|
|
432
432
|
auto proc = pvRequest["record._options.process"];
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
433
|
+
bool b;
|
|
434
|
+
std::string s;
|
|
435
|
+
if(!proc) {
|
|
436
|
+
return; // not provided
|
|
437
|
+
|
|
438
|
+
} else if(proc.as(b)) { // actual bool, integer, or string parsable to bool
|
|
439
|
+
securityControlObject->forceProcessing = b ? True : False;
|
|
440
|
+
return;
|
|
441
|
+
|
|
442
|
+
} else if(proc.as(s)) {
|
|
443
|
+
if(s=="passive") {
|
|
441
444
|
securityControlObject->forceProcessing = Unset;
|
|
442
|
-
|
|
443
|
-
log_warn_printf(_log, "Ignoring unsupported record._options.process='%s'", val.c_str());
|
|
445
|
+
return;
|
|
444
446
|
}
|
|
445
|
-
break;
|
|
446
|
-
}
|
|
447
|
-
case TypeCode::Bool:
|
|
448
|
-
securityControlObject->forceProcessing = proc.as<bool>() ? True : False;
|
|
449
|
-
break;
|
|
450
|
-
default:
|
|
451
|
-
log_warn_printf(_log, "Ignoring unsupported record._options.process type %s", proc.type().name());
|
|
452
|
-
case TypeCode::Null:
|
|
453
|
-
break;
|
|
454
447
|
}
|
|
448
|
+
// oops, unsupported type or unexpected value
|
|
449
|
+
op->logRemote(Level::Warn, SB()<<"Ignoring unsupported "<<pvRequest.nameOf(proc)<<": "<<proc);
|
|
455
450
|
}
|
|
456
451
|
|
|
457
452
|
static
|
|
@@ -62,7 +62,9 @@ public:
|
|
|
62
62
|
// Utility function to get the TypeCode that the given database channel is configured for
|
|
63
63
|
static TypeCode getChannelValueType(const Channel &pDbChannel, bool errOnLinks = false);
|
|
64
64
|
static void
|
|
65
|
-
setForceProcessingFlag(
|
|
65
|
+
setForceProcessingFlag(server::RemoteLogger *op,
|
|
66
|
+
const Value& pvRequest,
|
|
67
|
+
const std::shared_ptr<SecurityControlObject>& securityControlObject);
|
|
66
68
|
};
|
|
67
69
|
|
|
68
70
|
struct CurrentOp {
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
#include <sstream>
|
|
8
8
|
|
|
9
|
+
#include <pvxs/log.h>
|
|
10
|
+
#include "qsrvpvt.h"
|
|
9
11
|
#include "pvalink.h"
|
|
10
12
|
|
|
11
13
|
#include <epicsStdio.h> // redirects stdout/stderr
|
|
@@ -17,6 +19,8 @@ pvaLinkConfig::~pvaLinkConfig() {}
|
|
|
17
19
|
|
|
18
20
|
namespace {
|
|
19
21
|
|
|
22
|
+
DEFINE_LOGGER(logj, "pvxs.ioc.link.parse");
|
|
23
|
+
|
|
20
24
|
/* link options.
|
|
21
25
|
*
|
|
22
26
|
* "pvname" # short-hand, sets PV name only
|
|
@@ -73,8 +77,8 @@ jlif_result pva_parse_null(jlink *pjlink) noexcept
|
|
|
73
77
|
pvt->sevr = pvaLinkConfig::NMS;
|
|
74
78
|
} else if(pvt->jkey == "local") {
|
|
75
79
|
pvt->local = false; // alias for local:false
|
|
76
|
-
} else
|
|
77
|
-
|
|
80
|
+
} else {
|
|
81
|
+
log_warn_printf(logj, "pva link parsing unknown none depth=%u key=\"%s\"\n",
|
|
78
82
|
pvt->parseDepth, pvt->jkey.c_str());
|
|
79
83
|
}
|
|
80
84
|
|
|
@@ -107,8 +111,8 @@ jlif_result pva_parse_bool(jlink *pjlink, int val) noexcept
|
|
|
107
111
|
pvt->always = !!val;
|
|
108
112
|
} else if(pvt->jkey == "atomic") {
|
|
109
113
|
pvt->atomic = !!val;
|
|
110
|
-
} else
|
|
111
|
-
|
|
114
|
+
} else {
|
|
115
|
+
log_warn_printf(logj, "pva link parsing unknown integer depth=%u key=\"%s\" value=%s\n",
|
|
112
116
|
pvt->parseDepth, pvt->jkey.c_str(), val ? "true" : "false");
|
|
113
117
|
}
|
|
114
118
|
|
|
@@ -126,8 +130,8 @@ jlif_result pva_parse_integer(jlink *pjlink, long long val) noexcept
|
|
|
126
130
|
pvt->queueSize = val < 1 ? 1 : size_t(val);
|
|
127
131
|
} else if(pvt->jkey == "monorder") {
|
|
128
132
|
pvt->monorder = std::max(-1024, std::min(int(val), 1024));
|
|
129
|
-
} else
|
|
130
|
-
|
|
133
|
+
} else {
|
|
134
|
+
log_warn_printf(logj, "pva link parsing unknown integer depth=%u key=\"%s\" value=%lld\n",
|
|
131
135
|
pvt->parseDepth, pvt->jkey.c_str(), val);
|
|
132
136
|
}
|
|
133
137
|
|
|
@@ -160,8 +164,8 @@ jlif_result pva_parse_string(jlink *pjlink, const char *val, size_t len) noexcep
|
|
|
160
164
|
pvt->proc = pvaLinkConfig::PP;
|
|
161
165
|
} else if(sval=="NPP") {
|
|
162
166
|
pvt->proc = pvaLinkConfig::NPP;
|
|
163
|
-
} else
|
|
164
|
-
|
|
167
|
+
} else {
|
|
168
|
+
log_warn_printf(logj, "pva link parsing unknown proc depth=%u key=\"%s\" value=\"%s\"\n",
|
|
165
169
|
pvt->parseDepth, pvt->jkey.c_str(), sval.c_str());
|
|
166
170
|
}
|
|
167
171
|
|
|
@@ -177,13 +181,13 @@ jlif_result pva_parse_string(jlink *pjlink, const char *val, size_t len) noexcep
|
|
|
177
181
|
// leave room for this to happen compatibly later by
|
|
178
182
|
// handling as alias for MS until then.
|
|
179
183
|
pvt->sevr = pvaLinkConfig::MS;
|
|
180
|
-
} else
|
|
181
|
-
|
|
184
|
+
} else {
|
|
185
|
+
log_warn_printf(logj, "pva link parsing unknown sevr depth=%u key=\"%s\" value=\"%s\"\n",
|
|
182
186
|
pvt->parseDepth, pvt->jkey.c_str(), sval.c_str());
|
|
183
187
|
}
|
|
184
188
|
|
|
185
|
-
} else
|
|
186
|
-
|
|
189
|
+
} else {
|
|
190
|
+
log_warn_printf(logj, "pva link parsing unknown string depth=%u key=\"%s\" value=\"%s\"\n",
|
|
187
191
|
pvt->parseDepth, pvt->jkey.c_str(), sval.c_str());
|
|
188
192
|
}
|
|
189
193
|
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
#include <epicsString.h>
|
|
8
8
|
#include <alarm.h>
|
|
9
9
|
#include <recGbl.h>
|
|
10
|
+
#include <dbLink.h>
|
|
10
11
|
|
|
11
12
|
#include <pvxs/log.h>
|
|
12
13
|
#include "dbentry.h"
|
|
@@ -17,6 +18,26 @@
|
|
|
17
18
|
|
|
18
19
|
DEFINE_LOGGER(_logger, "pvxs.ioc.link.lset");
|
|
19
20
|
|
|
21
|
+
#if EPICS_VERSION_INT <= VERSION_INT(3, 16, 1, 0)
|
|
22
|
+
static
|
|
23
|
+
const char * dbLinkFieldName(const struct link *plink)
|
|
24
|
+
{
|
|
25
|
+
const struct dbCommon *precord = plink->precord;
|
|
26
|
+
const dbRecordType *pdbRecordType = precord->rdes;
|
|
27
|
+
dbFldDes * const *papFldDes = pdbRecordType->papFldDes;
|
|
28
|
+
const short *link_ind = pdbRecordType->link_ind;
|
|
29
|
+
int i;
|
|
30
|
+
|
|
31
|
+
for (i = 0; i < pdbRecordType->no_links; i++) {
|
|
32
|
+
const dbFldDes *pdbFldDes = papFldDes[link_ind[i]];
|
|
33
|
+
|
|
34
|
+
if (plink == (DBLINK *)((char *)precord + pdbFldDes->offset))
|
|
35
|
+
return pdbFldDes->name;
|
|
36
|
+
}
|
|
37
|
+
return "????";
|
|
38
|
+
}
|
|
39
|
+
#endif
|
|
40
|
+
|
|
20
41
|
namespace pvxs {
|
|
21
42
|
namespace ioc {
|
|
22
43
|
namespace {
|
|
@@ -70,6 +91,7 @@ void pvaOpenLink(DBLINK *plink) noexcept
|
|
|
70
91
|
// also, no pvaLinkChannel::lock yet
|
|
71
92
|
|
|
72
93
|
self->plink = plink;
|
|
94
|
+
self->pfieldname = dbLinkFieldName(plink);
|
|
73
95
|
|
|
74
96
|
if(self->channelName.empty())
|
|
75
97
|
return; // nothing to do...
|
|
@@ -241,7 +263,8 @@ long pvaGetValue(DBLINK *plink, short dbrType, void *pbuffer, long *pnRequest) n
|
|
|
241
263
|
|
|
242
264
|
if(!self->valid()) {
|
|
243
265
|
// disconnected
|
|
244
|
-
(void)
|
|
266
|
+
(void)recGblSetSevrMsg(plink->precord, LINK_ALARM, INVALID_ALARM, "%s Disconn",
|
|
267
|
+
self->pfieldname);
|
|
245
268
|
if(self->time) {
|
|
246
269
|
plink->precord->time = self->snap_time;
|
|
247
270
|
}
|
|
@@ -252,7 +275,7 @@ long pvaGetValue(DBLINK *plink, short dbrType, void *pbuffer, long *pnRequest) n
|
|
|
252
275
|
auto nReq(pnRequest ? *pnRequest : 1);
|
|
253
276
|
auto value(self->fld_value);
|
|
254
277
|
|
|
255
|
-
if(value.type()==TypeCode::Any)
|
|
278
|
+
if(value.type()==TypeCode::Any || value.type()==TypeCode::Union)
|
|
256
279
|
value = value.lookup("->");
|
|
257
280
|
|
|
258
281
|
if(nReq <= 0 || !value) {
|
|
@@ -397,15 +420,16 @@ long pvaGetValue(DBLINK *plink, short dbrType, void *pbuffer, long *pnRequest) n
|
|
|
397
420
|
{
|
|
398
421
|
log_debug_printf(_logger, "%s: %s recGblSetSevr %d\n", __func__, plink->precord->name,
|
|
399
422
|
self->snap_severity);
|
|
400
|
-
|
|
423
|
+
recGblSetSevrMsg(plink->precord, LINK_ALARM, self->snap_severity,
|
|
424
|
+
"%s", self->snap_message.c_str());
|
|
401
425
|
}
|
|
402
426
|
|
|
403
427
|
if(self->time) {
|
|
404
428
|
plink->precord->time = self->snap_time;
|
|
405
429
|
}
|
|
406
430
|
|
|
407
|
-
log_debug_printf(_logger, "%s: %s %s
|
|
408
|
-
self->channelName.c_str(), self->snap_severity);
|
|
431
|
+
log_debug_printf(_logger, "%s: %s %s snapalrm=%d,\"%s\" OK\n", __func__, plink->precord->name,
|
|
432
|
+
self->channelName.c_str(), self->snap_severity, self->snap_message.c_str());
|
|
409
433
|
return 0;
|
|
410
434
|
}CATCH()
|
|
411
435
|
return -1;
|
|
@@ -75,14 +75,18 @@ void subscriptionValueCallback(void* userArg, struct dbChannel* pChannel,
|
|
|
75
75
|
int, struct db_field_log* pDbFieldLog) noexcept {
|
|
76
76
|
auto subscriptionContext = (SingleSourceSubscriptionCtx*)userArg;
|
|
77
77
|
subscriptionContext->hadValueEvent = true;
|
|
78
|
-
auto change =
|
|
78
|
+
auto change = subscriptionContext->pValueEventSubscription.mask;
|
|
79
79
|
#if EPICS_VERSION_INT >= VERSION_INT(7, 0, 6, 0)
|
|
80
80
|
if(pDbFieldLog) {
|
|
81
81
|
// when available, use DBE mask from db_field_log
|
|
82
|
-
change =
|
|
82
|
+
change = pDbFieldLog->mask;
|
|
83
83
|
}
|
|
84
84
|
#endif
|
|
85
|
-
|
|
85
|
+
// ARCHIVE events will get the same data fields as VALUE
|
|
86
|
+
if(change & DBE_ARCHIVE)
|
|
87
|
+
change = (change&~DBE_ARCHIVE)|DBE_VALUE;
|
|
88
|
+
change &= UpdateType::Everything; // does not include DBE_ARCHIVE
|
|
89
|
+
subscriptionCallback(subscriptionContext, UpdateType::type(change), pChannel, pDbFieldLog);
|
|
86
90
|
}
|
|
87
91
|
|
|
88
92
|
void subscriptionPropertiesCallback(void* userArg, struct dbChannel* pChannel, int,
|
|
@@ -116,6 +120,10 @@ void onSubscribe(const std::shared_ptr<SingleSourceSubscriptionCtx>& subscriptio
|
|
|
116
120
|
CASE(ALARM);
|
|
117
121
|
// CASE(PROPERTY); // handled as special case
|
|
118
122
|
#undef CASE
|
|
123
|
+
if(!dbe && !mask.empty()) {
|
|
124
|
+
subscriptionOperation->logRemote(Level::Warn,
|
|
125
|
+
SB()<<pvReq.nameOf(fld)<<"=\""<<mask<<"\" selects empty mask");
|
|
126
|
+
}
|
|
119
127
|
break;
|
|
120
128
|
}
|
|
121
129
|
case Kind::Integer:
|
|
@@ -325,7 +333,7 @@ void onOp(const std::shared_ptr<SingleInfo>& sInfo, const Value& valuePrototype,
|
|
|
325
333
|
|
|
326
334
|
auto& pvRequest = putOperation->pvRequest();
|
|
327
335
|
pvRequest["record._options.block"].as<bool>(putOperationCache->doWait);
|
|
328
|
-
IOCSource::setForceProcessingFlag(pvRequest, putOperationCache);
|
|
336
|
+
IOCSource::setForceProcessingFlag(putOperation.get(), pvRequest, putOperationCache);
|
|
329
337
|
if (putOperationCache->forceProcessing) {
|
|
330
338
|
putOperationCache->doWait = false; // no point in waiting
|
|
331
339
|
}
|
|
@@ -25,6 +25,7 @@ namespace ioc {
|
|
|
25
25
|
class Subscription {
|
|
26
26
|
std::shared_ptr<std::remove_pointer<dbEventSubscription>::type> sub; // holds void* returned by db_add_event()
|
|
27
27
|
public:
|
|
28
|
+
unsigned mask=0;
|
|
28
29
|
/* Add a subscription event by calling db_add_event using the given subscriptionCtx
|
|
29
30
|
* and selecting the correct elements based on the given type of event being added.
|
|
30
31
|
* You need to specify the correct options that correspond to the event type.
|
|
@@ -45,6 +46,7 @@ public:
|
|
|
45
46
|
});
|
|
46
47
|
if(!sub)
|
|
47
48
|
throw std::runtime_error("Failed to create db subscription");
|
|
49
|
+
mask = select;
|
|
48
50
|
}
|
|
49
51
|
void cancel() {
|
|
50
52
|
sub.reset();
|
|
@@ -516,8 +516,7 @@ Value buildCAMethod()
|
|
|
516
516
|
}
|
|
517
517
|
|
|
518
518
|
ContextImpl::ContextImpl(const Config& conf, const evbase& tcp_loop)
|
|
519
|
-
:
|
|
520
|
-
,effective([conf]() -> Config{
|
|
519
|
+
:effective([conf]() -> Config{
|
|
521
520
|
Config eff(conf);
|
|
522
521
|
eff.expand();
|
|
523
522
|
return eff;
|
|
@@ -1023,8 +1022,6 @@ void ContextImpl::tickSearch(SearchKind kind, bool poked)
|
|
|
1023
1022
|
if(kind == SearchKind::check)
|
|
1024
1023
|
currentBucket = (currentBucket+1u)%searchBuckets.size();
|
|
1025
1024
|
|
|
1026
|
-
log_debug_printf(io, "Search tick %zu\n", idx);
|
|
1027
|
-
|
|
1028
1025
|
decltype (searchBuckets)::value_type bucket;
|
|
1029
1026
|
if (kind == SearchKind::initial) {
|
|
1030
1027
|
initialSearchBucket.swap(bucket);
|
|
@@ -1032,6 +1029,11 @@ void ContextImpl::tickSearch(SearchKind kind, bool poked)
|
|
|
1032
1029
|
searchBuckets[idx].swap(bucket);
|
|
1033
1030
|
}
|
|
1034
1031
|
|
|
1032
|
+
log_debug_printf(io, "%s tick %zu for %zu\n",
|
|
1033
|
+
kind == SearchKind::discover ? "Discover" : "Search",
|
|
1034
|
+
idx,
|
|
1035
|
+
bucket.size());
|
|
1036
|
+
|
|
1035
1037
|
while(!bucket.empty() || kind == SearchKind::discover) {
|
|
1036
1038
|
// when 'discover' we only loop once
|
|
1037
1039
|
|
|
@@ -459,23 +459,18 @@ void Connection::handle_MESSAGE()
|
|
|
459
459
|
if(!M.good())
|
|
460
460
|
throw std::runtime_error(SB()<<M.file()<<':'<<M.line()<<" Decode error for Message");
|
|
461
461
|
|
|
462
|
+
auto lvl(mtype2level(mtype));
|
|
463
|
+
const char *chan = "<no channel>";
|
|
464
|
+
|
|
462
465
|
auto it = opByIOID.find(ioid);
|
|
463
|
-
if(it
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
auto op = it->second.handle.lock();
|
|
468
|
-
|
|
469
|
-
Level lvl;
|
|
470
|
-
switch(mtype) {
|
|
471
|
-
case 0: lvl = Level::Info; break;
|
|
472
|
-
case 1: lvl = Level::Warn; break;
|
|
473
|
-
case 2: lvl = Level::Err; break;
|
|
474
|
-
default: lvl = Level::Crit; break;
|
|
466
|
+
if(it!=opByIOID.end()) {
|
|
467
|
+
if(auto op = it->second.handle.lock()) {
|
|
468
|
+
chan = op->chan->name.c_str();
|
|
469
|
+
}
|
|
475
470
|
}
|
|
476
471
|
|
|
477
472
|
log_printf(remote, lvl, "%s : %s\n",
|
|
478
|
-
|
|
473
|
+
chan, msg.c_str());
|
|
479
474
|
}
|
|
480
475
|
|
|
481
476
|
void Connection::tickEcho()
|
|
@@ -757,10 +757,17 @@ std::shared_ptr<Subscription> MonitorBuilder::exec()
|
|
|
757
757
|
|
|
758
758
|
auto options = op->pvRequest["record._options"];
|
|
759
759
|
|
|
760
|
-
options["queueSize"]
|
|
761
|
-
|
|
760
|
+
if(auto queueSize = options["queueSize"]) {
|
|
761
|
+
uint32_t Q = 0;
|
|
762
|
+
if(queueSize.as(Q) && Q>1) {
|
|
762
763
|
op->queueSize = Q;
|
|
763
|
-
|
|
764
|
+
} else {
|
|
765
|
+
log_warn_printf(monevt, "%s requested invalid %s : %s\n",
|
|
766
|
+
op->channelName.c_str(),
|
|
767
|
+
op->pvRequest.nameOf(queueSize).c_str(),
|
|
768
|
+
std::string(SB()<<queueSize).c_str());
|
|
769
|
+
}
|
|
770
|
+
}
|
|
764
771
|
|
|
765
772
|
(void)options["pipeline"].as(op->pipeline);
|
|
766
773
|
|
|
@@ -60,7 +60,7 @@ SockEndpoint::SockEndpoint(const char* ep, uint16_t defport)
|
|
|
60
60
|
iface = at+1;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
auto
|
|
63
|
+
auto ifmap(IfaceMap::instance());
|
|
64
64
|
|
|
65
65
|
if(addr.family()==AF_INET6) {
|
|
66
66
|
if(iface.empty() && addr->in6.sin6_scope_id) {
|
|
@@ -90,7 +90,7 @@ MCastMembership SockEndpoint::resolve() const
|
|
|
90
90
|
if(!addr.isMCast())
|
|
91
91
|
throw std::logic_error("not mcast");
|
|
92
92
|
|
|
93
|
-
auto
|
|
93
|
+
auto ifmap(IfaceMap::instance());
|
|
94
94
|
|
|
95
95
|
MCastMembership m;
|
|
96
96
|
m.af = addr.family();
|
|
@@ -282,7 +282,8 @@ void printAddresses(std::vector<std::string>& out, const std::vector<SockEndpoin
|
|
|
282
282
|
// Fill out address list by appending broadcast addresses
|
|
283
283
|
// of any and all local interface addresses already included
|
|
284
284
|
void expandAddrList(const std::vector<SockEndpoint>& ifaces,
|
|
285
|
-
std::vector<SockEndpoint>& addrs
|
|
285
|
+
std::vector<SockEndpoint>& addrs,
|
|
286
|
+
const IfaceMap& ifmap)
|
|
286
287
|
{
|
|
287
288
|
SockAttach attach;
|
|
288
289
|
evsocket dummy(AF_INET, SOCK_DGRAM, 0);
|
|
@@ -307,9 +308,9 @@ void expandAddrList(const std::vector<SockEndpoint>& ifaces,
|
|
|
307
308
|
}
|
|
308
309
|
|
|
309
310
|
void addGroups(std::vector<SockEndpoint>& ifaces,
|
|
310
|
-
const std::vector<SockEndpoint>& addrs
|
|
311
|
+
const std::vector<SockEndpoint>& addrs,
|
|
312
|
+
const IfaceMap& ifmap)
|
|
311
313
|
{
|
|
312
|
-
auto& ifmap = IfaceMap::instance();
|
|
313
314
|
std::set<std::string> allifaces;
|
|
314
315
|
|
|
315
316
|
for(const auto& addr : addrs) {
|
|
@@ -492,7 +493,7 @@ void Config::expand()
|
|
|
492
493
|
ifaces.emplace_back(SockAddr::any(AF_INET));
|
|
493
494
|
}
|
|
494
495
|
|
|
495
|
-
auto
|
|
496
|
+
auto ifmap(IfaceMap::instance());
|
|
496
497
|
|
|
497
498
|
for(size_t i=0; i<ifaces.size(); i++) {
|
|
498
499
|
auto& ep = ifaces[i];
|
|
@@ -512,8 +513,8 @@ void Config::expand()
|
|
|
512
513
|
// use interface list add ipv4 broadcast addresses to beaconDestinations.
|
|
513
514
|
// 0.0.0.0 -> adds all bcasts
|
|
514
515
|
// otherwise add bcast for each iface address
|
|
515
|
-
expandAddrList(ifaces, bdest);
|
|
516
|
-
addGroups(ifaces, bdest);
|
|
516
|
+
expandAddrList(ifaces, bdest, ifmap);
|
|
517
|
+
addGroups(ifaces, bdest, ifmap);
|
|
517
518
|
auto_beacon = false;
|
|
518
519
|
}
|
|
519
520
|
|
|
@@ -622,6 +623,8 @@ void Config::updateDefs(defs_t& defs) const
|
|
|
622
623
|
|
|
623
624
|
void Config::expand()
|
|
624
625
|
{
|
|
626
|
+
auto ifmap(IfaceMap::instance());
|
|
627
|
+
|
|
625
628
|
if(udp_port==0)
|
|
626
629
|
throw std::runtime_error("Client can't use UDP random port");
|
|
627
630
|
|
|
@@ -635,8 +638,8 @@ void Config::expand()
|
|
|
635
638
|
ifaces.emplace_back(SockAddr::any(AF_INET));
|
|
636
639
|
|
|
637
640
|
if(autoAddrList) {
|
|
638
|
-
expandAddrList(ifaces, addrs);
|
|
639
|
-
addGroups(ifaces, addrs);
|
|
641
|
+
expandAddrList(ifaces, addrs, ifmap);
|
|
642
|
+
addGroups(ifaces, addrs, ifmap);
|
|
640
643
|
autoAddrList = false;
|
|
641
644
|
}
|
|
642
645
|
|