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.

Files changed (254) hide show
  1. {pvxslibs-1.3.3a1/python/pvxslibs.egg-info → pvxslibs-1.4.0a1}/PKG-INFO +1 -1
  2. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/configure/CONFIG_PVXS_VERSION +4 -3
  3. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/credentials.cpp +4 -4
  4. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupsource.cpp +1 -1
  5. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/iocsource.cpp +15 -20
  6. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/iocsource.h +3 -1
  7. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvalink.h +1 -0
  8. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvalink_jlif.cpp +16 -12
  9. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvalink_lset.cpp +29 -5
  10. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/singlesource.cpp +12 -4
  11. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/subscriptionctx.h +2 -0
  12. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1/python/pvxslibs.egg-info}/PKG-INFO +1 -1
  13. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/client.cpp +6 -4
  14. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/clientconn.cpp +8 -13
  15. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/clientimpl.h +0 -1
  16. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/clientmon.cpp +10 -3
  17. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/config.cpp +13 -10
  18. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/evhelper.cpp +119 -132
  19. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/evhelper.h +30 -24
  20. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/nt.cpp +2 -2
  21. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/os/WIN32/osdSockExt.cpp +70 -5
  22. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/os/default/osdSockExt.cpp +56 -2
  23. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/osiSockExt.h +13 -0
  24. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvaproto.h +27 -0
  25. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/source.h +4 -4
  26. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/srvcommon.h +11 -1
  27. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/server.cpp +18 -10
  28. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/serverconn.cpp +18 -1
  29. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/serverconn.h +23 -0
  30. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/serverget.cpp +10 -0
  31. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/serverintrospect.cpp +17 -0
  32. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/servermon.cpp +65 -32
  33. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/udp_collector.cpp +133 -57
  34. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/udp_collector.h +3 -1
  35. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/util.cpp +20 -1
  36. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/COPYRIGHT +0 -0
  37. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/LICENSE +0 -0
  38. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/MANIFEST.in +0 -0
  39. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/README.md +0 -0
  40. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/LICENSE +0 -0
  41. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/arc4random.c +0 -0
  42. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/buffer.c +0 -0
  43. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/buffer_iocp.c +0 -0
  44. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent-internal.h +0 -0
  45. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent.c +0 -0
  46. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_async.c +0 -0
  47. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_filter.c +0 -0
  48. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_mbedtls.c +0 -0
  49. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_openssl.c +0 -0
  50. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_pair.c +0 -0
  51. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_ratelim.c +0 -0
  52. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_sock.c +0 -0
  53. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/bufferevent_ssl.c +0 -0
  54. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/changelist-internal.h +0 -0
  55. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/cmake/VersionViaGit.cmake +0 -0
  56. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/compat/sys/queue.h +0 -0
  57. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/defer-internal.h +0 -0
  58. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/devpoll.c +0 -0
  59. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/epoll.c +0 -0
  60. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/epoll_sub.c +0 -0
  61. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/epolltable-internal.h +0 -0
  62. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evbuffer-internal.h +0 -0
  63. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evconfig-private.h.cmake +0 -0
  64. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evdns.c +0 -0
  65. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/event-config.h.cmake +0 -0
  66. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/event-internal.h +0 -0
  67. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/event.c +0 -0
  68. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/event_iocp.c +0 -0
  69. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/event_tagging.c +0 -0
  70. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evmap-internal.h +0 -0
  71. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evmap.c +0 -0
  72. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evport.c +0 -0
  73. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evrpc-internal.h +0 -0
  74. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evrpc.c +0 -0
  75. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evsignal-internal.h +0 -0
  76. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evthread-internal.h +0 -0
  77. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evthread.c +0 -0
  78. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evthread_pthread.c +0 -0
  79. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evthread_win32.c +0 -0
  80. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evutil.c +0 -0
  81. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evutil_rand.c +0 -0
  82. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/evutil_time.c +0 -0
  83. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/ht-internal.h +0 -0
  84. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/http-internal.h +0 -0
  85. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/http.c +0 -0
  86. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/evdns.h +0 -0
  87. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event.h +0 -0
  88. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/buffer.h +0 -0
  89. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/buffer_compat.h +0 -0
  90. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/bufferevent.h +0 -0
  91. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/bufferevent_compat.h +0 -0
  92. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/bufferevent_ssl.h +0 -0
  93. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/bufferevent_struct.h +0 -0
  94. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/dns.h +0 -0
  95. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/dns_compat.h +0 -0
  96. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/dns_struct.h +0 -0
  97. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/event.h +0 -0
  98. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/event_compat.h +0 -0
  99. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/event_struct.h +0 -0
  100. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/http.h +0 -0
  101. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/http_compat.h +0 -0
  102. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/http_struct.h +0 -0
  103. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/keyvalq_struct.h +0 -0
  104. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/listener.h +0 -0
  105. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/rpc.h +0 -0
  106. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/rpc_compat.h +0 -0
  107. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/rpc_struct.h +0 -0
  108. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/tag.h +0 -0
  109. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/tag_compat.h +0 -0
  110. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/thread.h +0 -0
  111. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/util.h +0 -0
  112. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/visibility.h +0 -0
  113. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/watch.h +0 -0
  114. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/event2/ws.h +0 -0
  115. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/evhttp.h +0 -0
  116. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/evrpc.h +0 -0
  117. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/include/evutil.h +0 -0
  118. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/iocp-internal.h +0 -0
  119. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/ipv6-internal.h +0 -0
  120. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/kqueue-internal.h +0 -0
  121. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/kqueue.c +0 -0
  122. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/listener.c +0 -0
  123. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/log-internal.h +0 -0
  124. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/log.c +0 -0
  125. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/mbedtls-compat.h +0 -0
  126. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/minheap-internal.h +0 -0
  127. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/mm-internal.h +0 -0
  128. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/openssl-compat.h +0 -0
  129. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/poll.c +0 -0
  130. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/ratelim-internal.h +0 -0
  131. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/select.c +0 -0
  132. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/sha1.c +0 -0
  133. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/sha1.h +0 -0
  134. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/signal.c +0 -0
  135. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/signalfd.c +0 -0
  136. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/ssl-compat.h +0 -0
  137. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/strlcpy-internal.h +0 -0
  138. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/strlcpy.c +0 -0
  139. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/time-internal.h +0 -0
  140. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/util-internal.h +0 -0
  141. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/watch.c +0 -0
  142. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/wepoll.c +0 -0
  143. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/wepoll.h +0 -0
  144. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/win32select.c +0 -0
  145. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/bundle/libevent/ws.c +0 -0
  146. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/channel.cpp +0 -0
  147. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/channel.h +0 -0
  148. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/credentials.h +0 -0
  149. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dbentry.h +0 -0
  150. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dberrormessage.cpp +0 -0
  151. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dberrormessage.h +0 -0
  152. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dbeventcontextdeleter.h +0 -0
  153. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dblocker.h +0 -0
  154. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dbmanylocker.h +0 -0
  155. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/demo.cpp +0 -0
  156. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dummygroup.cpp +0 -0
  157. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/dummysingle.cpp +0 -0
  158. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/field.cpp +0 -0
  159. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/field.h +0 -0
  160. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fieldconfig.h +0 -0
  161. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fielddefinition.cpp +0 -0
  162. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fielddefinition.h +0 -0
  163. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fieldname.cpp +0 -0
  164. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fieldname.h +0 -0
  165. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fieldnamecomponent.h +0 -0
  166. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fieldsubscriptionctx.cpp +0 -0
  167. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/fieldsubscriptionctx.h +0 -0
  168. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/group.cpp +0 -0
  169. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/group.h +0 -0
  170. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupconfig.h +0 -0
  171. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupconfigprocessor.cpp +0 -0
  172. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupconfigprocessor.h +0 -0
  173. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupdefinition.h +0 -0
  174. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupprocessorcontext.cpp +0 -0
  175. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupprocessorcontext.h +0 -0
  176. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupsource.h +0 -0
  177. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupsourcehooks.cpp +0 -0
  178. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/groupsrcsubscriptionctx.h +0 -0
  179. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/imagedemo.c +0 -0
  180. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/iochooks.cpp +0 -0
  181. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/iocshargument.h +0 -0
  182. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/iocshcommand.h +0 -0
  183. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/iocshindex.h +0 -0
  184. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/localfieldlog.cpp +0 -0
  185. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/localfieldlog.h +0 -0
  186. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvalink.cpp +0 -0
  187. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvalink_channel.cpp +0 -0
  188. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvalink_link.cpp +0 -0
  189. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvxs/iochooks.h +0 -0
  190. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvxs3x.dbd +0 -0
  191. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/pvxs7x.dbd +0 -0
  192. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/qsrvpvt.h +0 -0
  193. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/securityclient.cpp +0 -0
  194. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/securityclient.h +0 -0
  195. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/securitylogger.h +0 -0
  196. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/singlesource.h +0 -0
  197. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/singlesourcehooks.cpp +0 -0
  198. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/singlesrcsubscriptionctx.cpp +0 -0
  199. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/singlesrcsubscriptionctx.h +0 -0
  200. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/typeutils.cpp +0 -0
  201. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/typeutils.h +0 -0
  202. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/ioc/yajlcallbackhandler.h +0 -0
  203. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/pyproject.toml +0 -0
  204. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs/__init__.py +0 -0
  205. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs/ioc.py +0 -0
  206. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs/lib/__init__.py +0 -0
  207. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs/path.py +0 -0
  208. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs/test/__init__.py +0 -0
  209. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs/test/test_load.py +0 -0
  210. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs/version.py +0 -0
  211. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs.egg-info/SOURCES.txt +0 -0
  212. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs.egg-info/dependency_links.txt +0 -0
  213. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs.egg-info/not-zip-safe +0 -0
  214. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs.egg-info/requires.txt +0 -0
  215. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/python/pvxslibs.egg-info/top_level.txt +0 -0
  216. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/setup.cfg +0 -0
  217. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/setup.py +0 -0
  218. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/bitmask.cpp +0 -0
  219. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/bitmask.h +0 -0
  220. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/clientdiscover.cpp +0 -0
  221. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/clientget.cpp +0 -0
  222. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/clientintrospect.cpp +0 -0
  223. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/clientreq.cpp +0 -0
  224. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/conn.cpp +0 -0
  225. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/conn.h +0 -0
  226. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/data.cpp +0 -0
  227. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/dataencode.cpp +0 -0
  228. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/datafmt.cpp +0 -0
  229. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/dataimpl.h +0 -0
  230. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/describe.cpp +0 -0
  231. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/describe.h@ +0 -0
  232. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/log.cpp +0 -0
  233. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/osgroups.cpp +0 -0
  234. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvrequest.cpp +0 -0
  235. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvrequest.h +0 -0
  236. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/client.h +0 -0
  237. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/data.h +0 -0
  238. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/log.h +0 -0
  239. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/netcommon.h +0 -0
  240. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/nt.h +0 -0
  241. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/server.h +0 -0
  242. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/sharedArray.h +0 -0
  243. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/sharedpv.h +0 -0
  244. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/unittest.h +0 -0
  245. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/util.h +0 -0
  246. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/version.h +0 -0
  247. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/pvxs/versionNum.h@ +0 -0
  248. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/serverchan.cpp +0 -0
  249. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/serversource.cpp +0 -0
  250. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/sharedarray.cpp +0 -0
  251. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/sharedpv.cpp +0 -0
  252. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/type.cpp +0 -0
  253. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/unittest.cpp +0 -0
  254. {pvxslibs-1.3.3a1 → pvxslibs-1.4.0a1}/src/utilpvt.h +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pvxslibs
3
- Version: 1.3.3a1
3
+ Version: 1.4.0a1
4
4
  Summary: PVXS libraries packaged for python
5
5
  Home-page: https://epics-base.github.io/pvxs
6
6
  Author: Michael Davidsaver
@@ -1,6 +1,6 @@
1
1
  PVXS_MAJOR_VERSION = 1
2
- PVXS_MINOR_VERSION = 3
3
- PVXS_MAINTENANCE_VERSION = 3
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
- PVXS_1_3_3 = YES
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
- // Extract host name part (or whole thing if no colon present)
28
- auto pos = clientCredentials.peer.find_first_of(':');
29
- host = clientCredentials.peer.substr(0, pos);
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
- switch(proc.type().code) {
434
- case TypeCode::String: {
435
- auto val(proc.as<std::string>());
436
- if (val == "true") {
437
- securityControlObject->forceProcessing = True;
438
- } else if (val == "false") {
439
- securityControlObject->forceProcessing = False;
440
- } else if (val == "passive") {
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
- } else {
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(const Value& pvRequest, const std::shared_ptr<SecurityControlObject>& securityControlObject);
65
+ setForceProcessingFlag(server::RemoteLogger *op,
66
+ const Value& pvRequest,
67
+ const std::shared_ptr<SecurityControlObject>& securityControlObject);
66
68
  };
67
69
 
68
70
  struct CurrentOp {
@@ -224,6 +224,7 @@ struct pvaLink final : public pvaLinkConfig
224
224
  dbfType type = (dbfType)-1;
225
225
 
226
226
  DBLINK * plink = nullptr;
227
+ const char *pfieldname = nullptr;
227
228
 
228
229
  std::shared_ptr<pvaLinkChannel> lchan;
229
230
 
@@ -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 if(pvt->debug) {
77
- printf("pva link parsing unknown none depth=%u key=\"%s\"\n",
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 if(pvt->debug) {
111
- printf("pva link parsing unknown integer depth=%u key=\"%s\" value=%s\n",
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 if(pvt->debug) {
130
- printf("pva link parsing unknown integer depth=%u key=\"%s\" value=%lld\n",
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 if(pvt->debug) {
164
- printf("pva link parsing unknown proc depth=%u key=\"%s\" value=\"%s\"\n",
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 if(pvt->debug) {
181
- printf("pva link parsing unknown sevr depth=%u key=\"%s\" value=\"%s\"\n",
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 if(pvt->debug) {
186
- printf("pva link parsing unknown string depth=%u key=\"%s\" value=\"%s\"\n",
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)recGblSetSevr(plink->precord, LINK_ALARM, INVALID_ALARM);
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
- recGblSetSevr(plink->precord, LINK_ALARM, self->snap_severity);
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 snapsevr=%d OK\n", __func__, plink->precord->name,
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 = UpdateType::type(UpdateType::Value | UpdateType::Alarm);
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 = UpdateType::type(pDbFieldLog->mask & UpdateType::Everything);
82
+ change = pDbFieldLog->mask;
83
83
  }
84
84
  #endif
85
- subscriptionCallback(subscriptionContext, change, pChannel, pDbFieldLog);
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();
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pvxslibs
3
- Version: 1.3.3a1
3
+ Version: 1.4.0a1
4
4
  Summary: PVXS libraries packaged for python
5
5
  Home-page: https://epics-base.github.io/pvxs
6
6
  Author: Michael Davidsaver
@@ -516,8 +516,7 @@ Value buildCAMethod()
516
516
  }
517
517
 
518
518
  ContextImpl::ContextImpl(const Config& conf, const evbase& tcp_loop)
519
- :ifmap(IfaceMap::instance())
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==opByIOID.end()) {
464
- log_debug_printf(connsetup, "Server %s Message on non-existent ioid\n", peerName.c_str());
465
- return;
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
- op && op->chan ? op->chan->name.c_str() : "<dead>", msg.c_str());
473
+ chan, msg.c_str());
479
474
  }
480
475
 
481
476
  void Connection::tickEcho()
@@ -247,7 +247,6 @@ private:
247
247
  struct ContextImpl : public std::enable_shared_from_this<ContextImpl>
248
248
  {
249
249
  SockAttach attach;
250
- IfaceMap& ifmap;
251
250
 
252
251
  enum state_t {
253
252
  Init,
@@ -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"].as<uint32_t>([&op](uint32_t Q) {
761
- if(Q>1)
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& ifmap = IfaceMap::instance();
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& ifmap = IfaceMap::instance();
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& ifmap = IfaceMap::instance();
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