amps-python-client 5.3.4.3__zip → 5.3.4.4__zip

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.
Files changed (517) hide show
  1. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/PKG-INFO +1 -1
  2. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/file_format_versions.doctree → amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/ack-messages.doctree +0 -0
  3. amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/content-messages.doctree +0 -0
  4. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/ack-messages.doctree → amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/intro.doctree +0 -0
  5. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/sow.doctree → amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/logon.doctree +0 -0
  6. amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/protocol-reference.doctree +0 -0
  7. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/logon.doctree → amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/publishing.doctree +0 -0
  8. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/doctrees/chapters/query-delimiters.doctree +0 -0
  9. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/content-messages.doctree → amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/query-subscribe.doctree +0 -0
  10. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/conflated_topics.doctree → amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/removing.doctree +0 -0
  11. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/auxiliary_modules.doctree → amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/utilities.doctree +0 -0
  12. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/doctrees/environment.pickle +0 -0
  13. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/doctrees/index.doctree +0 -0
  14. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/index.html +1 -1
  15. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/searchindex.js +1 -1
  16. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/.buildinfo +1 -1
  17. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/code.html +193 -6
  18. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/genindex.html +62 -10
  19. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/index.html +4 -4
  20. amps-python-client-5.3.4.4/docs/html/objects.inv +0 -0
  21. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/py-modindex.html +4 -4
  22. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/search.html +4 -4
  23. amps-python-client-5.3.4.4/docs/html/searchindex.js +1 -0
  24. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/advanced-topics.doctree +0 -0
  25. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/cpp-compiler-list.doctree +0 -0
  26. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/cpp-feature-table.doctree +0 -0
  27. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/creating-commands.doctree +0 -0
  28. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/deltas.doctree +0 -0
  29. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/error-handling.doctree +0 -0
  30. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/exceptions.doctree +0 -0
  31. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/first-program.doctree +0 -0
  32. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/high-availability.doctree +0 -0
  33. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/installing.doctree +0 -0
  34. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/introduction.doctree +0 -0
  35. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/moving-from-python-lite.doctree +0 -0
  36. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/performance-tips.doctree +0 -0
  37. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/queues.doctree +0 -0
  38. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/sow.doctree +0 -0
  39. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/subscriptions.doctree +0 -0
  40. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/utilities.doctree +0 -0
  41. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/environment.pickle +0 -0
  42. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/doctrees/index.doctree +0 -0
  43. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/index.html +1 -1
  44. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/searchindex.js +1 -1
  45. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/doctrees/chapters/crankitup.doctree +0 -0
  46. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/doctrees/chapters/equipment.doctree +0 -0
  47. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/doctrees/environment.pickle +0 -0
  48. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/doctrees/index.doctree +0 -0
  49. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/index.html +1 -1
  50. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/searchindex.js +1 -1
  51. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/delta.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/acks.doctree +0 -0
  52. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/glossary.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/actions.doctree +0 -0
  53. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/amps_expressions.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/amps-statistics.doctree +0 -0
  54. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/publishing.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/amps_expressions.doctree +0 -0
  55. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/troubleshooting.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/amps_functions.doctree +0 -0
  56. amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/auxiliary_modules.doctree +0 -0
  57. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/query-subscribe.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/config-file-shortcuts.doctree +0 -0
  58. amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/conflated_topics.doctree +0 -0
  59. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/doctrees/chapters/constructing-fields.doctree +0 -0
  60. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/actions.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/daemon.doctree +0 -0
  61. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/queues.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/delta.doctree +0 -0
  62. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/protocol-reference.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/distribution.doctree +0 -0
  63. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/replication.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/enrichment.doctree +0 -0
  64. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/logging.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/events.doctree +0 -0
  65. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/config-file-shortcuts.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/file_format_versions.doctree +0 -0
  66. amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/glossary.doctree +0 -0
  67. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/oof.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/ha.doctree +0 -0
  68. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/doctrees/chapters/installing_and_starting.doctree +0 -0
  69. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/events.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/intro.doctree +0 -0
  70. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/securing.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/logging.doctree +0 -0
  71. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/doctrees/chapters/messageTypes.doctree +0 -0
  72. amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/monitoring.doctree +0 -0
  73. amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/oof.doctree +0 -0
  74. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/monitoring.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/operation.doctree +0 -0
  75. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/usecases.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/pub_sub.doctree +0 -0
  76. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/pub_sub.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/queues.doctree +0 -0
  77. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/distribution.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/replication.doctree +0 -0
  78. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/utilities.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/securing.doctree +0 -0
  79. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/acks.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/sow.doctree +0 -0
  80. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/intro.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/sow_queries.doctree +0 -0
  81. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/doctrees/chapters/spark.doctree +0 -0
  82. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/sow_queries.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/transports.doctree +0 -0
  83. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/utilities.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/troubleshooting.doctree +0 -0
  84. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/doctrees/chapters/txlog.doctree +0 -0
  85. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/operation.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/usecases.doctree +0 -0
  86. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/transports.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/utilities.doctree +0 -0
  87. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/daemon.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/views.doctree +0 -0
  88. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/doctrees/environment.pickle +0 -0
  89. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/doctrees/index.doctree +0 -0
  90. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/index.html +1 -1
  91. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/searchindex.js +1 -1
  92. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/include/ampspy_defs.hpp +11 -1
  93. amps-python-client-5.3.4.4/include/ampspy_ssl.hpp +31 -0
  94. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/include/ampspyver.h +1 -1
  95. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/index.html +1 -1
  96. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/setup.py +5 -5
  97. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/setup_amps.py +12 -4
  98. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/ampspy_shims.cpp +15 -5
  99. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/client.cpp +24 -1
  100. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/HAClient.hpp +5 -1
  101. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/HAClientImpl.hpp +37 -18
  102. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/LoggedBookmarkStore.hpp +1 -1
  103. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/MMapStoreBuffer.hpp +7 -4
  104. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/MemoryBookmarkStore.hpp +54 -32
  105. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/Message.hpp +2 -1
  106. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/MessageRouter.hpp +8 -2
  107. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ReconnectDelayStrategy.hpp +2 -2
  108. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/RingBookmarkStore.hpp +5 -2
  109. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/SOWRecoveryPointAdapter.hpp +15 -6
  110. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/amps.h +2 -0
  111. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/amps_impl.h +2 -1
  112. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ampsplusplus.hpp +47 -18
  113. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ampsver.h +2 -2
  114. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/util.hpp +73 -6
  115. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/src/amps_protocol.c +64 -20
  116. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/src/amps_ssl.c +124 -73
  117. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/src/tcp.c +5 -5
  118. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/src/tcps.c +189 -221
  119. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/src/unix.c +5 -5
  120. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/haclient.cpp +1 -1
  121. amps-python-client-5.3.4.4/src/hybridpublishstore.cpp +275 -0
  122. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/memorypublishstore.cpp +141 -4
  123. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/messagestream.cpp +8 -0
  124. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/publishstore.cpp +128 -2
  125. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/raw_wrapper.cpp +690 -20
  126. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/removing.doctree +0 -0
  127. amps-python-client-5.3.4.3/docs/html/objects.inv +0 -0
  128. amps-python-client-5.3.4.3/docs/html/searchindex.js +0 -1
  129. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/amps-statistics.doctree +0 -0
  130. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/amps_functions.doctree +0 -0
  131. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/enrichment.doctree +0 -0
  132. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/ha.doctree +0 -0
  133. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/intro.doctree +0 -0
  134. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/views.doctree +0 -0
  135. amps-python-client-5.3.4.3/src/hybridpublishstore.cpp +0 -137
  136. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/HISTORY +0 -0
  137. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/LICENSE +0 -0
  138. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/README.md +0 -0
  139. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/.buildinfo +0 -0
  140. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/ack-messages.rst.txt +0 -0
  141. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/content-messages.rst.txt +0 -0
  142. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/intro.rst.txt +0 -0
  143. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/logon.rst.txt +0 -0
  144. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/protocol-reference.rst.txt +0 -0
  145. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/publishing.rst.txt +0 -0
  146. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/query-delimiters.rst.txt +0 -0
  147. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/query-subscribe.rst.txt +0 -0
  148. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/removing.rst.txt +0 -0
  149. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/utilities.rst.txt +0 -0
  150. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/index.rst.txt +0 -0
  151. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/ajax-loader.gif +0 -0
  152. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/alabaster.css +0 -0
  153. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/basic.css +0 -0
  154. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/comment-bright.png +0 -0
  155. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/comment-close.png +0 -0
  156. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/comment.png +0 -0
  157. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/custom.css +0 -0
  158. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/doctools.js +0 -0
  159. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/down-pressed.png +0 -0
  160. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/down.png +0 -0
  161. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/file.png +0 -0
  162. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/flag_logo.png +0 -0
  163. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/flag_logo.svg +0 -0
  164. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/jquery-3.1.0.js +0 -0
  165. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/jquery.js +0 -0
  166. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/minus.png +0 -0
  167. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/plus.png +0 -0
  168. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/pygments.css +0 -0
  169. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/searchtools.js +0 -0
  170. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/underscore-1.3.1.js +0 -0
  171. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/underscore.js +0 -0
  172. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/up-pressed.png +0 -0
  173. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/up.png +0 -0
  174. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/websupport.js +0 -0
  175. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/ack-messages.html +0 -0
  176. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/content-messages.html +0 -0
  177. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/intro.html +0 -0
  178. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/logon.html +0 -0
  179. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/protocol-reference.html +0 -0
  180. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/publishing.html +0 -0
  181. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/query-delimiters.html +0 -0
  182. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/query-subscribe.html +0 -0
  183. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/removing.html +0 -0
  184. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/utilities.html +0 -0
  185. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/genindex.html +0 -0
  186. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/objects.inv +0 -0
  187. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/command-reference/html/search.html +0 -0
  188. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_sources/code.rst.txt +0 -0
  189. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_sources/index.rst.txt +0 -0
  190. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/ajax-loader.gif +0 -0
  191. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/basic.css +0 -0
  192. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/classic.css +0 -0
  193. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/comment-bright.png +0 -0
  194. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/comment-close.png +0 -0
  195. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/comment.png +0 -0
  196. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/default.css +0 -0
  197. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/doctools.js +0 -0
  198. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/down-pressed.png +0 -0
  199. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/down.png +0 -0
  200. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/file.png +0 -0
  201. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/jquery-3.1.0.js +0 -0
  202. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/jquery.js +0 -0
  203. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/minus.png +0 -0
  204. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/plus.png +0 -0
  205. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/pygments.css +0 -0
  206. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/searchtools.js +0 -0
  207. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/sidebar.js +0 -0
  208. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/underscore-1.3.1.js +0 -0
  209. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/underscore.js +0 -0
  210. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/up-pressed.png +0 -0
  211. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/up.png +0 -0
  212. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/html/_static/websupport.js +0 -0
  213. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/.buildinfo +0 -0
  214. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_images/caution.png +0 -0
  215. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_images/caution.svg +0 -0
  216. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_images/connection_string.svg +0 -0
  217. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_images/important.png +0 -0
  218. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_images/important.svg +0 -0
  219. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_images/tip.png +0 -0
  220. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_images/tip.svg +0 -0
  221. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_images/warning.png +0 -0
  222. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/advanced-topics.rst.txt +0 -0
  223. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/cpp-compiler-list.rst.txt +0 -0
  224. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/cpp-feature-table.rst.txt +0 -0
  225. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/creating-commands.rst.txt +0 -0
  226. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/deltas.rst.txt +0 -0
  227. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/error-handling.rst.txt +0 -0
  228. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/exceptions.rst.txt +0 -0
  229. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/first-program.rst.txt +0 -0
  230. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/high-availability.rst.txt +0 -0
  231. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/installing.rst.txt +0 -0
  232. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/introduction.rst.txt +0 -0
  233. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/moving-from-python-lite.rst.txt +0 -0
  234. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/performance-tips.rst.txt +0 -0
  235. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/queues.rst.txt +0 -0
  236. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/sow.rst.txt +0 -0
  237. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/subscriptions.rst.txt +0 -0
  238. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/utilities.rst.txt +0 -0
  239. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_sources/index.rst.txt +0 -0
  240. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/ajax-loader.gif +0 -0
  241. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/alabaster.css +0 -0
  242. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/basic.css +0 -0
  243. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/comment-bright.png +0 -0
  244. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/comment-close.png +0 -0
  245. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/comment.png +0 -0
  246. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/custom.css +0 -0
  247. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/doctools.js +0 -0
  248. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/down-pressed.png +0 -0
  249. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/down.png +0 -0
  250. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/file.png +0 -0
  251. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/flag_logo.png +0 -0
  252. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/flag_logo.svg +0 -0
  253. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/jquery-3.1.0.js +0 -0
  254. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/jquery.js +0 -0
  255. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/minus.png +0 -0
  256. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/plus.png +0 -0
  257. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/pygments.css +0 -0
  258. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/searchtools.js +0 -0
  259. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/underscore-1.3.1.js +0 -0
  260. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/underscore.js +0 -0
  261. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/up-pressed.png +0 -0
  262. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/up.png +0 -0
  263. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/_static/websupport.js +0 -0
  264. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/advanced-topics.html +0 -0
  265. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/cpp-compiler-list.html +0 -0
  266. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/cpp-feature-table.html +0 -0
  267. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/creating-commands.html +0 -0
  268. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/deltas.html +0 -0
  269. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/error-handling.html +0 -0
  270. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/exceptions.html +0 -0
  271. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/first-program.html +0 -0
  272. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/high-availability.html +0 -0
  273. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/installing.html +0 -0
  274. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/introduction.html +0 -0
  275. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/moving-from-python-lite.html +0 -0
  276. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/performance-tips.html +0 -0
  277. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/queues.html +0 -0
  278. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/sow.html +0 -0
  279. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/subscriptions.html +0 -0
  280. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/chapters/utilities.html +0 -0
  281. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/genindex.html +0 -0
  282. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/objects.inv +0 -0
  283. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python/html/search.html +0 -0
  284. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/.buildinfo +0 -0
  285. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_sources/chapters/crankitup.rst.txt +0 -0
  286. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_sources/chapters/equipment.rst.txt +0 -0
  287. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_sources/index.rst.txt +0 -0
  288. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/ajax-loader.gif +0 -0
  289. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/alabaster.css +0 -0
  290. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/basic.css +0 -0
  291. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/comment-bright.png +0 -0
  292. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/comment-close.png +0 -0
  293. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/comment.png +0 -0
  294. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/custom.css +0 -0
  295. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/doctools.js +0 -0
  296. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/down-pressed.png +0 -0
  297. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/down.png +0 -0
  298. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/file.png +0 -0
  299. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/flag_logo.png +0 -0
  300. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/flag_logo.svg +0 -0
  301. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/jquery-3.1.0.js +0 -0
  302. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/jquery.js +0 -0
  303. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/minus.png +0 -0
  304. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/plus.png +0 -0
  305. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/pygments.css +0 -0
  306. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/searchtools.js +0 -0
  307. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/underscore-1.3.1.js +0 -0
  308. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/underscore.js +0 -0
  309. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/up-pressed.png +0 -0
  310. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/up.png +0 -0
  311. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/websupport.js +0 -0
  312. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/chapters/crankitup.html +0 -0
  313. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/chapters/equipment.html +0 -0
  314. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/genindex.html +0 -0
  315. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/objects.inv +0 -0
  316. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/search.html +0 -0
  317. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/resources/custom.css +0 -0
  318. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/resources/flag_logo.svg +0 -0
  319. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/.buildinfo +0 -0
  320. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/acks.rst.txt +0 -0
  321. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/actions.rst.txt +0 -0
  322. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/amps-statistics.rst.txt +0 -0
  323. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/amps_expressions.rst.txt +0 -0
  324. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/amps_functions.rst.txt +0 -0
  325. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/auxiliary_modules.rst.txt +0 -0
  326. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/config-file-shortcuts.rst.txt +0 -0
  327. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/conflated_topics.rst.txt +0 -0
  328. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/constructing-fields.rst.txt +0 -0
  329. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/daemon.rst.txt +0 -0
  330. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/delta.rst.txt +0 -0
  331. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/distribution.rst.txt +0 -0
  332. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/enrichment.rst.txt +0 -0
  333. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/events.rst.txt +0 -0
  334. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/file_format_versions.rst.txt +0 -0
  335. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/glossary.rst.txt +0 -0
  336. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/ha.rst.txt +0 -0
  337. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/installing_and_starting.rst.txt +0 -0
  338. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/intro.rst.txt +0 -0
  339. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/logging.rst.txt +0 -0
  340. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/messageTypes.rst.txt +0 -0
  341. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/monitoring.rst.txt +0 -0
  342. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/oof.rst.txt +0 -0
  343. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/operation.rst.txt +0 -0
  344. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/pub_sub.rst.txt +0 -0
  345. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/queues.rst.txt +0 -0
  346. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/replication.rst.txt +0 -0
  347. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/securing.rst.txt +0 -0
  348. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/sow.rst.txt +0 -0
  349. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/sow_queries.rst.txt +0 -0
  350. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/spark.rst.txt +0 -0
  351. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/transports.rst.txt +0 -0
  352. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/troubleshooting.rst.txt +0 -0
  353. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/txlog.rst.txt +0 -0
  354. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/usecases.rst.txt +0 -0
  355. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/utilities.rst.txt +0 -0
  356. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/views.rst.txt +0 -0
  357. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/index.rst.txt +0 -0
  358. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/ajax-loader.gif +0 -0
  359. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/alabaster.css +0 -0
  360. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/basic.css +0 -0
  361. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/comment-bright.png +0 -0
  362. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/comment-close.png +0 -0
  363. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/comment.png +0 -0
  364. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/custom.css +0 -0
  365. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/doctools.js +0 -0
  366. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/down-pressed.png +0 -0
  367. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/down.png +0 -0
  368. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/file.png +0 -0
  369. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/flag_logo.png +0 -0
  370. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/flag_logo.svg +0 -0
  371. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/jquery-3.1.0.js +0 -0
  372. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/jquery.js +0 -0
  373. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/minus.png +0 -0
  374. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/plus.png +0 -0
  375. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/pygments.css +0 -0
  376. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/searchtools.js +0 -0
  377. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/underscore-1.3.1.js +0 -0
  378. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/underscore.js +0 -0
  379. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/up-pressed.png +0 -0
  380. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/up.png +0 -0
  381. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/websupport.js +0 -0
  382. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/acks.html +0 -0
  383. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/actions.html +0 -0
  384. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/amps-statistics.html +0 -0
  385. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/amps_expressions.html +0 -0
  386. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/amps_functions.html +0 -0
  387. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/auxiliary_modules.html +0 -0
  388. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/config-file-shortcuts.html +0 -0
  389. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/conflated_topics.html +0 -0
  390. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/constructing-fields.html +0 -0
  391. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/daemon.html +0 -0
  392. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/delta.html +0 -0
  393. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/distribution.html +0 -0
  394. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/enrichment.html +0 -0
  395. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/events.html +0 -0
  396. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/file_format_versions.html +0 -0
  397. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/glossary.html +0 -0
  398. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/ha.html +0 -0
  399. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/installing_and_starting.html +0 -0
  400. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/intro.html +0 -0
  401. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/logging.html +0 -0
  402. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/messageTypes.html +0 -0
  403. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/monitoring.html +0 -0
  404. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/oof.html +0 -0
  405. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/operation.html +0 -0
  406. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/pub_sub.html +0 -0
  407. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/queues.html +0 -0
  408. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/replication.html +0 -0
  409. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/securing.html +0 -0
  410. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/sow.html +0 -0
  411. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/sow_queries.html +0 -0
  412. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/spark.html +0 -0
  413. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/transports.html +0 -0
  414. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/troubleshooting.html +0 -0
  415. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/txlog.html +0 -0
  416. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/usecases.html +0 -0
  417. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/utilities.html +0 -0
  418. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/views.html +0 -0
  419. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/genindex.html +0 -0
  420. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/objects.inv +0 -0
  421. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/docs/user-guide/html/search.html +0 -0
  422. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/include/ampspy_bookmarkstore.hpp +0 -0
  423. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/include/ampspy_compat.h +0 -0
  424. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/include/ampspy_recoverypointadapter.hpp +0 -0
  425. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/include/ampspy_shims.hpp +0 -0
  426. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/include/ampspy_type_object.hpp +0 -0
  427. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/include/ampspy_types.hpp +0 -0
  428. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSConsolePublisher.py +0 -0
  429. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSConsoleSubscriber.py +0 -0
  430. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSFIXBuilderPublisher.py +0 -0
  431. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSFIXShredderSubscriber.py +0 -0
  432. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSNVFIXBuilderPublisher.py +0 -0
  433. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSNVFIXShredderSubscriber.py +0 -0
  434. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSPublishForReplay.py +0 -0
  435. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSQueueConsumer.py +0 -0
  436. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSQueuePublisher.py +0 -0
  437. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSSOWConsolePublisher.py +0 -0
  438. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSSOWConsoleSubscriber.py +0 -0
  439. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSSOWandSubscribeConsoleSubscriber.py +0 -0
  440. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSSOWandSubscribeWithOOF.py +0 -0
  441. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSSubscribeForReplay.py +0 -0
  442. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/AMPSUpdateForOOF.py +0 -0
  443. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/CompositeMessagePublisher.py +0 -0
  444. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/CompositeMessageSubscriber.py +0 -0
  445. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/RandomServerChooser.py +0 -0
  446. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/samples/sample.xml +0 -0
  447. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/ampspy_type_object.cpp +0 -0
  448. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/authenticator.cpp +0 -0
  449. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/bookmarkstore.cpp +0 -0
  450. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/client_docs.h +0 -0
  451. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cmessagehandler.cpp +0 -0
  452. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/command.cpp +0 -0
  453. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/command_docs.h +0 -0
  454. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/compositemessagebuilder.cpp +0 -0
  455. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/compositemessageparser.cpp +0 -0
  456. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/conflatingrecoverypointadapter.cpp +0 -0
  457. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/BlockPublishStore.hpp +0 -0
  458. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/BlockStore.hpp +0 -0
  459. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/BookmarkStore.hpp +0 -0
  460. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/Buffer.hpp +0 -0
  461. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/CompositeMessageBuilder.hpp +0 -0
  462. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/CompositeMessageParser.hpp +0 -0
  463. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/DefaultServerChooser.hpp +0 -0
  464. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/Field.hpp +0 -0
  465. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/HybridPublishStore.hpp +0 -0
  466. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/MMapBookmarkStore.hpp +0 -0
  467. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/MemoryPublishStore.hpp +0 -0
  468. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/MemoryStoreBuffer.hpp +0 -0
  469. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/MemorySubscriptionManager.hpp +0 -0
  470. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/PublishStore.hpp +0 -0
  471. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ReconnectDelayStrategyImpl.hpp +0 -0
  472. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/RecoveryPoint.hpp +0 -0
  473. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/RecoveryPointAdapter.hpp +0 -0
  474. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ServerChooser.hpp +0 -0
  475. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ServerChooserImpl.hpp +0 -0
  476. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/amps_generated.h +0 -0
  477. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/amps_ssl.h +0 -0
  478. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ampscrc.hpp +0 -0
  479. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ampsuri.h +0 -0
  480. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ampsver.h.in +0 -0
  481. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/include/amps/constants.hpp +0 -0
  482. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/src/amps_protocol_generated.h +0 -0
  483. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/src/atfork.c +0 -0
  484. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/src/client.c +0 -0
  485. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/src/makefile +0 -0
  486. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/src/message.c +0 -0
  487. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/src/message_generated.h +0 -0
  488. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/src/transports.c +0 -0
  489. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/cpp/src/uri.c +0 -0
  490. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/exponentialdelaystrategy.cpp +0 -0
  491. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/failedwritehandler.cpp +0 -0
  492. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/fixbuilder.cpp +0 -0
  493. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/fixeddelaystrategy.cpp +0 -0
  494. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/fixshredder.cpp +0 -0
  495. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/fixshredder_docs.h +0 -0
  496. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/haclient_docs.h +0 -0
  497. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/hybridpublishstore_docs.h +0 -0
  498. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/memorybookmarkstore.cpp +0 -0
  499. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/memorybookmarkstore_docs.h +0 -0
  500. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/memorypublishstore_docs.h +0 -0
  501. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/message.cpp +0 -0
  502. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/message_docs.h +0 -0
  503. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/messagestream_docs.h +0 -0
  504. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/mmapbookmarkstore.cpp +0 -0
  505. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/nvfixbuilder.cpp +0 -0
  506. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/nvfixbuilder_docs.h +0 -0
  507. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/nvfixshredder.cpp +0 -0
  508. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/nvfixshredder_docs.h +0 -0
  509. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/reason.cpp +0 -0
  510. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/recoverypoint.cpp +0 -0
  511. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/recoverypointadapter.cpp +0 -0
  512. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/ringbookmarkstore.cpp +0 -0
  513. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/serverchooser.cpp +0 -0
  514. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/serverchooser_docs.h +0 -0
  515. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/sowrecoverypointadapter.cpp +0 -0
  516. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/store.cpp +0 -0
  517. {amps-python-client-5.3.4.3 → amps-python-client-5.3.4.4}/src/versioninfo.cpp +0 -0
@@ -24,16 +24,22 @@
24
24
  ////////////////////////////////////////////////////////////////////////////
25
25
 
26
26
  #define PY_SSIZE_T_CLEAN 1
27
+ #ifdef _WIN32
28
+ #include <Winsock2.h>
29
+ #include <Ws2tcpip.h>
30
+ #endif
27
31
  #include <Python.h>
32
+ #include <object.h>
28
33
  #include <amps/ampsplusplus.hpp>
29
34
  extern "C" {
30
35
  #include <amps/amps_impl.h>
36
+ #include <amps/amps_ssl.h>
31
37
  }
32
38
  #include <ampspy_types.hpp>
33
39
  #include <ampspy_defs.hpp>
40
+ #include <ampspy_ssl.hpp>
34
41
  #include <ampspyver.h>
35
42
 
36
-
37
43
  using namespace AMPS;
38
44
 
39
45
  AMPSDLL PyObject* not_copyable(PyObject* self, PyObject* args)
@@ -42,6 +48,16 @@ AMPSDLL PyObject* not_copyable(PyObject* self, PyObject* args)
42
48
  return NULL;
43
49
  }
44
50
 
51
+ extern "C"
52
+ {
53
+ extern int (*amps_tcps_close_all)(AMPS_SOCKET, _amps_SSL*);
54
+ extern _amps_SSL* (*amps_tcps_get_socket_and_ssl)(AMPS_SOCKET,
55
+ const char* address_, int port_,
56
+ struct addrinfo*,
57
+ char*, void*);
58
+ void amps_tcps_set_external_error(void* transport, const amps_char* buffer);
59
+ }
60
+
45
61
  namespace ampspy
46
62
  {
47
63
  namespace exc
@@ -469,38 +485,103 @@ failure:
469
485
  }
470
486
  bool _is_signaled = false;
471
487
 
488
+ // SSL related section
472
489
  bool _ssl_is_initialized = false;
473
490
 
474
- AMPSDLL PyObject* ssl_init_internal(const char* dll_name)
491
+ #if PY_MAJOR_VERSION >= 3
492
+ // Python provided SSL things we hold onto
493
+ PyObject* _ampspy_ssl_module = NULL;
494
+ PyObject* _ampspy__ssl_module = NULL;
495
+ PyObject* _ampspy_socket_module = NULL;
496
+ PyObject* _ampspy__socket_module = NULL;
497
+ PyObject* _ampspy_ssl_context = NULL;
498
+ PyObject* _ampspy_sslcontext_class = NULL;
499
+ // Holder for the tcps version if we can't get Python to work
500
+ _amps_SSL* (*_ampspy_get_socket_and_ssl)(AMPS_SOCKET,
501
+ const char* address_, int port_,
502
+ struct addrinfo*, char*, void*);
503
+ // Storage for our Python objects related to each connection
504
+ std::map<_amps_SSL*, std::pair<PyObject*, PyObject*> > _ampspy_ssl_object_map;
505
+ AMPS::Mutex _ampspy_ssl_map_lock;
506
+
507
+ // Get the ssl.SSLSocket based on the C lib SSL*. Used in client.
508
+ AMPSDLL PyObject* ampspy_get_PySSLSocket_from_SSL(_amps_SSL* ssl_)
475
509
  {
476
- if (_ssl_is_initialized)
510
+ if (!ssl_)
477
511
  {
478
512
  Py_INCREF(Py_None);
479
513
  return Py_None;
480
514
  }
515
+ AMPS::Lock<AMPS::Mutex> guard(_ampspy_ssl_map_lock);
516
+ auto iter = _ampspy_ssl_object_map.find((_amps_SSL*)ssl_);
517
+ if (iter != _ampspy_ssl_object_map.end())
518
+ {
519
+ PyObject* pySSLSocket = iter->second.first;
520
+ Py_INCREF(pySSLSocket);
521
+ return pySSLSocket;
522
+ }
523
+ Py_INCREF(Py_None);
524
+ return Py_None;
525
+ }
481
526
 
527
+ // Remove all our module/type references
528
+ AMPSDLL void _ampspy_ssl_cleanup(void)
529
+ {
530
+ Py_XDECREF(_ampspy_sslcontext_class);
531
+ _ampspy_sslcontext_class = NULL;
532
+ Py_XDECREF(_ampspy_ssl_context);
533
+ _ampspy_ssl_context = NULL;
534
+ Py_XDECREF(_ampspy_socket_module);
535
+ _ampspy_socket_module = NULL;
536
+ Py_XDECREF(_ampspy__socket_module);
537
+ _ampspy__socket_module = NULL;
538
+ Py_XDECREF(_ampspy__ssl_module);
539
+ _ampspy__ssl_module = NULL;
540
+ Py_XDECREF(_ampspy_ssl_module);
541
+ _ampspy_ssl_module = NULL;
542
+ }
543
+ #endif // Python 3+ only
544
+
545
+ // Init everything to just use the C lib and not have Python objects
546
+ int ssl_init_c_lib(const char* dll_name)
547
+ {
482
548
  int rc = amps_ssl_init(dll_name);
483
- #ifndef _WIN32
484
549
  if (rc && !dll_name)
485
550
  {
551
+ #if PY_MAJOR_VERSION >= 3
552
+ if (!_ampspy_ssl_module)
553
+ {
554
+ // Try to load the Python ssl module, and see if we can use it.
555
+ _ampspy_ssl_module = PyImport_ImportModule("ssl");
556
+ if (!_ampspy_ssl_module)
557
+ {
558
+ PyErr_SetString(ampspy::exc::ConnectionException,
559
+ "No SSL module found or specified.");
560
+ return rc;
561
+ }
562
+ }
563
+ #else
486
564
  // Try to load the Python ssl module, and see if we can use it.
487
- PyObject* ssl_module = PyImport_ImportModule("ssl");
488
- if (!ssl_module)
565
+ PyObject* _ampspy_ssl_module = PyImport_ImportModule("ssl");
566
+ if (!_ampspy_ssl_module)
489
567
  {
490
568
  PyErr_SetString(ampspy::exc::ConnectionException,
491
569
  "No SSL module found or specified.");
492
- return NULL;
570
+ return rc;
493
571
  }
572
+ #endif
494
573
 
495
574
  // Does it have a "_ssl" attribute?
496
- PyObject* ssl_internal_module = PyObject_GetAttrString(ssl_module,
575
+ PyObject* ssl_internal_module = PyObject_GetAttrString(_ampspy_ssl_module,
497
576
  "_ssl");
498
- Py_DECREF(ssl_module);
499
577
  if (!ssl_internal_module)
500
578
  {
579
+ #if PY_MAJOR_VERSION < 3
580
+ Py_DECREF(_ampspy_ssl_module);
581
+ #endif
501
582
  PyErr_SetString(ampspy::exc::ConnectionException,
502
- "No SSL module found or specified.");
503
- return NULL;
583
+ "No _SSL module found or specified.");
584
+ return rc;
504
585
  }
505
586
 
506
587
  // It does, let's get its file name
@@ -510,36 +591,524 @@ failure:
510
591
  if (!(ssl_internal_filename && PyString_Check(ssl_internal_filename)))
511
592
  {
512
593
  Py_XDECREF(ssl_internal_filename);
594
+ #if PY_MAJOR_VERSION < 3
595
+ Py_DECREF(_ampspy_ssl_module);
596
+ #endif
513
597
  PyErr_SetString(ampspy::exc::ConnectionException,
514
- "No SSL module found or specified.");
515
- return NULL;
598
+ "No SSL module filename found.");
599
+ return rc;
516
600
  }
517
601
  dll_name = PyString_AsString(ssl_internal_filename);
518
- Py_DECREF(ssl_internal_filename);
602
+ #if PY_MAJOR_VERSION < 3
603
+ Py_DECREF(_ampspy_ssl_module);
604
+ #endif
519
605
  rc = amps_ssl_init(dll_name);
606
+ Py_DECREF(ssl_internal_filename);
607
+ }
608
+ _ssl_is_initialized = (rc == 0);
609
+ return rc;
610
+ }
611
+
612
+ #if PY_MAJOR_VERSION >= 3
613
+ // We use the following truncated struct definition to grab
614
+ // otherwise inaccessible members that we need.
615
+ // typedef struct {
616
+ // PyObject_HEAD
617
+ // PyObject *Socket; /* weakref to socket on which we're layered */
618
+ // SSL *ssl;
619
+ // ...
620
+ // } PySSLSocket;
621
+ typedef struct
622
+ {
623
+ PyObject_HEAD
624
+ PyObject *pPySocket; /* weakref to socket on which we're layered */
625
+ _amps_SSL *ssl;
626
+ } ampspy_PySSLSocket;
627
+
628
+ // Create a conencted Python ssl.SSLSocket wrapping the given fd_, connected
629
+ // to address_:port_, possibly using sni for hostname_
630
+ AMPSDLL _amps_SSL* _ampspy_SSL_new_wrapped_socket(AMPS_SOCKET fd_,
631
+ const char* address_, int port_,
632
+ struct addrinfo* pAddrInfo_,
633
+ char* hostname_, void* me_)
634
+ {
635
+ LOCKGIL;
636
+ if (!_ampspy_ssl_context)
637
+ {
638
+ ssl_init_internal(NULL, NULL);
639
+ if (!_ampspy_ssl_context)
640
+ {
641
+ amps_tcps_set_external_error(me_, "Failed to initialize SSL and get a context");
642
+ return NULL;
643
+ }
644
+ }
645
+ if (!_ampspy_socket_module)
646
+ {
647
+ _ampspy_socket_module = PyImport_ImportModule("socket");
648
+ if (!_ampspy_socket_module)
649
+ {
650
+ amps_tcps_set_external_error(me_, "Failed to load Python socket module");
651
+ return _ampspy_get_socket_and_ssl(fd_, address_, port_, pAddrInfo_, hostname_, me_);
652
+ }
653
+ }
654
+ PyObject* pySockType = PyObject_GetAttrString(_ampspy_socket_module, "socket");
655
+ if (!pySockType)
656
+ {
657
+ amps_tcps_set_external_error(me_, "Failed to load Python socket type");
658
+ Py_DECREF(_ampspy_socket_module);
659
+ _ampspy_socket_module = NULL;
660
+ return _ampspy_get_socket_and_ssl(fd_, address_, port_, pAddrInfo_, hostname_, me_);
661
+ }
662
+ PyObject* pyFd = NULL;
663
+ if (sizeof(fd_) == 8)
664
+ {
665
+ pyFd = PyLong_FromLongLong((long long)fd_);
666
+ }
667
+ else
668
+ {
669
+ pyFd = PyLong_FromLong((long)fd_);
670
+ }
671
+ // We'll only use keyword arguments
672
+ PyObject* args = PyTuple_New(1);
673
+ switch (pAddrInfo_->ai_family)
674
+ {
675
+ case AF_INET:
676
+ {
677
+ PyTuple_SetItem(args, 0, PyObject_GetAttrString(_ampspy_socket_module, "AF_INET"));
678
+ }
679
+ break;
680
+ case AF_INET6:
681
+ {
682
+ PyTuple_SetItem(args, 0, PyObject_GetAttrString(_ampspy_socket_module, "AF_INET6"));
683
+ }
684
+ break;
685
+ case AF_UNIX:
686
+ {
687
+ PyTuple_SetItem(args, 0, PyObject_GetAttrString(_ampspy_socket_module, "AF_UNIX"));
520
688
  }
689
+ break;
690
+ default:
691
+ {
692
+ PyTuple_SetItem(args, 0, PyLong_FromLong((long)pAddrInfo_->ai_family));
693
+ }
694
+ }
695
+ PyObject* kwargs = PyDict_New();
696
+ if (pAddrInfo_->ai_protocol)
697
+ {
698
+ PyDict_SetItemString(kwargs, "proto", PyLong_FromLong(pAddrInfo_->ai_protocol));
699
+ }
700
+ PyDict_SetItemString(kwargs, "fileno", pyFd);
701
+ PyObject* pySocket = PyObject_Call(pySockType, args, kwargs);
702
+ if (!pySocket)
703
+ {
704
+ amps_tcps_set_external_error(me_, "Failed to create Python socket");
705
+ Py_DECREF(pySockType);
706
+ Py_DECREF(args);
707
+ Py_DECREF(kwargs);
708
+ return _ampspy_get_socket_and_ssl(fd_, address_, port_, pAddrInfo_, hostname_, me_);
709
+ }
710
+ Py_DECREF(args);
711
+ Py_DECREF(kwargs);
712
+ PyObject* pySSLSocket = NULL;
713
+ if (hostname_)
714
+ {
715
+ // We're using sni, so we need to set a few things
716
+ PyObject_SetAttrString(_ampspy_ssl_context, "check_hostname", Py_True);
717
+ PyObject* pyVm = PyObject_GetAttrString(_ampspy_ssl_module, "VerifyMode");
718
+ PyObject* pyVerifyMode = PyObject_GetAttrString(pyVm, "CERT_REQUIRED");
719
+ PyObject_SetAttrString(_ampspy_ssl_context, "verify_mode", pyVerifyMode);
720
+ Py_XDECREF(pyVm);
721
+ Py_XDECREF(pyVerifyMode);
722
+
723
+ pySSLSocket = PyObject_CallMethodObjArgs(_ampspy_ssl_context,
724
+ PyString_FromString("wrap_socket"),
725
+ pySocket, Py_False, Py_True,
726
+ Py_True,
727
+ PyString_FromString(hostname_),
728
+ NULL);
729
+ }
730
+ else
731
+ {
732
+ pySSLSocket = PyObject_CallMethodObjArgs(_ampspy_ssl_context,
733
+ PyString_FromString("wrap_socket"),
734
+ pySocket, Py_False, NULL);
735
+ }
736
+ if (!pySSLSocket)
737
+ {
738
+ amps_tcps_set_external_error(me_, "Failed to create Python SSLSocket");
739
+ Py_DECREF(pySockType);
740
+ Py_DECREF(pySocket);
741
+ return _ampspy_get_socket_and_ssl(fd_, address_, port_, pAddrInfo_, hostname_, me_);
742
+ }
743
+
744
+ // connect the socket.socket
745
+ PyObject* retVal = NULL;
746
+ if (pAddrInfo_->ai_addr->sa_family == AF_INET)
747
+ {
748
+ retVal = PyObject_CallMethod(pySSLSocket, "connect", "((si))", address_, port_);
749
+ }
750
+ else if (pAddrInfo_->ai_addr->sa_family == AF_INET6)
751
+ {
752
+ #ifdef _WIN32
753
+ SOCKADDR_IN6* pAddr6 = (SOCKADDR_IN6*)(pAddrInfo_->ai_addr->sa_data);
754
+ #else
755
+ sockaddr_in6* pAddr6 = (sockaddr_in6*)(pAddrInfo_->ai_addr->sa_data);
756
+ #endif
757
+ retVal = PyObject_CallMethod(pySSLSocket, "connect", "((siii))", address_, port_,
758
+ pAddr6->sin6_flowinfo, pAddr6->sin6_scope_id);
759
+ }
760
+ if (!retVal)
761
+ {
762
+ // We're not going to use these
763
+ Py_DECREF(pySockType);
764
+ Py_DECREF(pySocket);
765
+ Py_DECREF(pySSLSocket);
766
+ // Ignore errors here, just being sure the socket is released
767
+ #ifdef _WIN32
768
+ shutdown(fd_, SD_BOTH);
769
+ closesocket(fd_);
770
+ #else
771
+ shutdown(fd_, SHUT_RDWR);
772
+ close(fd_);
773
+ #endif
774
+ amps_tcps_set_external_error(me_, "Failed to connect Python SSLSocket");
775
+ return NULL;
776
+ }
777
+ Py_DECREF(retVal);
778
+
779
+ int pyMinor = 0;
780
+ const char* pyVer = Py_GetVersion();
781
+ for (size_t i=2; pyVer[i] >= '0' && pyVer[i] <= '9'; ++i)
782
+ {
783
+ pyMinor *= 10;
784
+ pyMinor += (int)pyVer[i] - (int)'0';
785
+ }
786
+ PyObject* pySSLSocketObj = PyObject_GetAttrString(pySSLSocket, "_sslobj");
787
+ _amps_SSL* ssl = 0;
788
+ if (pyMinor > 6)
789
+ {
790
+ // The _sslobj is a PySSLSocket that is only present on a connected socket
791
+ // Use our truncated struct to get the SSL*
792
+ ampspy_PySSLSocket* sslSocket = (ampspy_PySSLSocket*)pySSLSocketObj;
793
+ ssl = sslSocket->ssl;
794
+ }
795
+ else
796
+ {
797
+ // Python 3.6 _sslobj is an SSLObj wrapper with a PySSLSocket in _sslobj
798
+ pySSLSocketObj = PyObject_GetAttrString(pySSLSocketObj, "_sslobj");
799
+ // Use our truncated struct to get the SSL*
800
+ ampspy_PySSLSocket* sslSocket = (ampspy_PySSLSocket*)pySSLSocketObj;
801
+ ssl = sslSocket->ssl;
802
+ }
803
+ _amps_SSL_ctrl(ssl, AMPS_SSL_CTRL_MODE, AMPS_SSL_AUTO_RETRY, NULL);
804
+
805
+ AMPS::Lock<AMPS::Mutex> guard(_ampspy_ssl_map_lock);
806
+ _ampspy_ssl_object_map[ssl] = std::make_pair(pySSLSocket, pySocket);
807
+ Py_DECREF(pySSLSocketObj);
808
+ Py_DECREF(pySockType);
809
+ return ssl;
810
+ }
811
+
812
+ // Here is where we use Python to close the Python objects
813
+ AMPSDLL int _ampspy_close_all(AMPS_SOCKET fd_, _amps_SSL* pSSL_)
814
+ {
815
+ if (!pSSL_)
816
+ {
817
+ if (fd_ != AMPS_INVALID_SOCKET)
818
+ {
819
+ #ifdef _WIN32
820
+ shutdown(fd_, SD_BOTH);
821
+ closesocket(fd_);
822
+ #else
823
+ shutdown(fd_, SHUT_RDWR);
824
+ close(fd_);
521
825
  #endif
826
+ }
827
+ return 0;
828
+ }
829
+ PyObject* pySSLSocket = NULL;
830
+ PyObject* pySocket = NULL;
831
+ {
832
+ AMPS::Lock<AMPS::Mutex> guard(_ampspy_ssl_map_lock);
833
+ auto iter = _ampspy_ssl_object_map.find(pSSL_);
834
+ if (iter != _ampspy_ssl_object_map.end())
835
+ {
836
+ pySSLSocket = iter->second.first;
837
+ pySocket = iter->second.second;
838
+ _ampspy_ssl_object_map.erase(iter);
839
+ }
840
+ }
841
+ if (pySSLSocket)
842
+ {
843
+ LOCKGIL;
844
+ // Shutdown everything, then close the connection
845
+ PyObject* arg = PyObject_GetAttrString(_ampspy_socket_module, "SHUT_RDWR");
846
+ PyObject_CallMethodObjArgs(pySSLSocket, PyString_FromString("shutdown"), arg, NULL);
847
+ PyObject_CallMethodObjArgs(pySSLSocket, PyString_FromString("_real_close"), NULL);
848
+ PyObject_SetAttrString(pySSLSocket, "_closed", Py_True);
849
+ PyObject_SetAttrString(pySSLSocket, "connected", Py_False);
850
+ Py_XDECREF(arg);
851
+ Py_DECREF(pySSLSocket);
852
+ Py_DECREF(pySocket);
853
+ }
854
+ else if (!_ampspy_socket_module)
855
+ {
856
+ // We didn't find python objects, must have been handled in C
857
+ _amps_SSL_shutdown(pSSL_);
858
+ _amps_SSL_free(pSSL_);
859
+ }
860
+ return 0;
861
+ }
862
+
863
+ // typedef struct {
864
+ // PyObject_HEAD
865
+ // SSL_CTX *ctx;
866
+ // ...
867
+ // } PySSLContext;
868
+ // The SSL_CTX* is the first item after PyObject_HEAD
869
+ typedef struct
870
+ {
871
+ PyObject_HEAD
872
+ _amps_SSL_CTX *ctx;
873
+ } ampspy_PySSLContext;
874
+
875
+ AMPSDLL PyObject* ssl_init_internal(const char* dll_name, PyObject* pyCtx,
876
+ bool strictCiphersOnly_)
877
+ {
878
+ if (_ssl_is_initialized)
879
+ {
880
+ Py_INCREF(Py_None);
881
+ return Py_None;
882
+ }
883
+
884
+ // Are we being provided an ssl.SSLContext or do we need to create one?
885
+ if (!pyCtx)
886
+ {
887
+ if (dll_name)
888
+ {
889
+ PyObject* modules = PyImport_GetModuleDict();
890
+ PyObject* sslName = PyString_FromString("ssl");
891
+ if (PyDict_Contains(modules, sslName) != 1)
892
+ {
893
+ Py_DECREF(sslName);
894
+ if (ssl_init_c_lib(dll_name))
895
+ {
896
+ PyErr_SetString(ampspy::exc::ConnectionException,
897
+ "No SSL module found.");
898
+ return NULL;
899
+ }
900
+ PyErr_Clear();
901
+ Py_INCREF(Py_None);
902
+ return Py_None;
903
+ }
904
+ Py_DECREF(sslName);
905
+ }
906
+ // Load the socket module
907
+ if (!_ampspy_socket_module)
908
+ {
909
+ _ampspy_socket_module = PyImport_ImportModule("socket");
910
+ }
911
+ // Try to load the Python ssl module, and see if we can use it.
912
+ if (!_ampspy_ssl_module)
913
+ {
914
+ _ampspy_ssl_module = PyImport_ImportModule("ssl");
915
+ if (!_ampspy_ssl_module)
916
+ {
917
+ if (ssl_init_c_lib(dll_name))
918
+ {
919
+ PyErr_SetString(ampspy::exc::ConnectionException,
920
+ "No SSL module found.");
921
+ return NULL;
922
+ }
923
+ PyErr_Clear();
924
+ Py_INCREF(Py_None);
925
+ return Py_None;
926
+ }
927
+ }
928
+
929
+ if (!_ampspy__ssl_module)
930
+ {
931
+ _ampspy__ssl_module = PyImport_ImportModule("_ssl");
932
+ if (!_ampspy__ssl_module)
933
+ {
934
+ if (ssl_init_c_lib(dll_name))
935
+ {
936
+ Py_DECREF(_ampspy_ssl_module);
937
+ _ampspy_ssl_module = NULL;
938
+ PyErr_SetString(ampspy::exc::ConnectionException,
939
+ "No _ssl module found.");
940
+ return NULL;
941
+ }
942
+ PyErr_Clear();
943
+ Py_INCREF(Py_None);
944
+ return Py_None;
945
+ }
946
+ }
947
+
948
+ // Get the SSLContext class
949
+ if (!_ampspy_sslcontext_class)
950
+ {
951
+ _ampspy_sslcontext_class = PyObject_GetAttrString(_ampspy_ssl_module, "SSLContext");
952
+ if (!_ampspy_sslcontext_class)
953
+ {
954
+ Py_DECREF(_ampspy_ssl_module);
955
+ Py_DECREF(_ampspy__ssl_module);
956
+ _ampspy_ssl_module = NULL;
957
+ _ampspy__ssl_module = NULL;
958
+ if (ssl_init_c_lib(dll_name))
959
+ {
960
+ PyErr_SetString(ampspy::exc::ConnectionException,
961
+ "No SSLContext in SSL module");
962
+ return NULL;
963
+ }
964
+ PyErr_Clear();
965
+ Py_INCREF(Py_None);
966
+ return Py_None;
967
+ }
968
+ }
969
+
970
+ PyObject* tlsClient = PyObject_GetAttrString(_ampspy_ssl_module, "PROTOCOL_TLS_CLIENT");
971
+ if (!tlsClient)
972
+ {
973
+ // From _ssl.c in Python source code: PY_SSL_VERSION_TLS_CLIENT=0x10,
974
+ //long PY_SSL_VERSION_TLS_CLIENT = (long)0x10;
975
+ // Create an SSLContext for our client
976
+ //_ampspy_ssl_context = PyObject_CallFunction(_ampspy_sslcontext_class, "l", (long)0x10);
977
+ _ampspy_ssl_context = PyObject_CallMethod(_ampspy_ssl_module, "create_default_context", NULL);
978
+ }
979
+ else
980
+ {
981
+ _ampspy_ssl_context = PyObject_CallFunctionObjArgs(_ampspy_sslcontext_class, tlsClient, NULL);
982
+ Py_DECREF(tlsClient);
983
+ }
984
+ if (!_ampspy_ssl_context)
985
+ {
986
+ Py_DECREF(_ampspy_ssl_module);
987
+ Py_DECREF(_ampspy__ssl_module);
988
+ Py_DECREF(_ampspy_sslcontext_class);
989
+ _ampspy_ssl_module = NULL;
990
+ _ampspy__ssl_module = NULL;
991
+ _ampspy_sslcontext_class = NULL;
992
+ PyErr_SetString(ampspy::exc::ConnectionException,
993
+ "Could not create SSLContext");
994
+ return NULL;
995
+ }
996
+ }
997
+ else
998
+ {
999
+ _ampspy_ssl_context = pyCtx;
1000
+ Py_INCREF(_ampspy_ssl_context);
1001
+ }
1002
+
1003
+ PyObject* ssl_internal_filename = NULL;
1004
+ const char* dllName = dll_name;
1005
+ if (!dllName)
1006
+ {
1007
+ if (_ampspy__ssl_module)
1008
+ {
1009
+ ssl_internal_filename = PyObject_GetAttrString(_ampspy__ssl_module,
1010
+ "__file__");
1011
+ if (ssl_internal_filename && PyString_Check(ssl_internal_filename))
1012
+ {
1013
+ dllName = PyString_AsString(ssl_internal_filename);
1014
+ }
1015
+ }
1016
+ }
1017
+
1018
+ if (!strictCiphersOnly_)
1019
+ {
1020
+ PyObject* retVal = PyObject_CallMethod(_ampspy_ssl_context, "set_ciphers", "(s)", "DEFAULT");
1021
+ Py_XDECREF(retVal);
1022
+ }
1023
+ PyObject_SetAttrString(_ampspy_ssl_context, "check_hostname", Py_False);
1024
+ PyObject* pyVm = PyObject_GetAttrString(_ampspy_ssl_module, "VerifyMode");
1025
+ if (pyVm)
1026
+ {
1027
+ PyObject* pyVerifyMode = PyObject_GetAttrString(pyVm, "CERT_NONE");
1028
+ if (pyVerifyMode)
1029
+ {
1030
+ PyObject_SetAttrString(_ampspy_ssl_context,
1031
+ "verify_mode",
1032
+ pyVerifyMode);
1033
+ Py_DECREF(pyVerifyMode);
1034
+ }
1035
+ Py_DECREF(pyVm);
1036
+ }
1037
+
1038
+ // typedef struct {
1039
+ // PyObject_HEAD
1040
+ // SSL_CTX *ctx;
1041
+ // ...
1042
+ // } PySSLContext;
1043
+ // The SSL_CTX* is the first item after PyObject_HEAD
1044
+ _amps_SSL_CTX* ctx = ((ampspy_PySSLContext*)_ampspy_ssl_context)->ctx;
1045
+
1046
+ // Init the C++ client with the _amps_SSL_CTX* from the Python object
1047
+ int rc = amps_ssl_init_from_context(ctx, dllName);
1048
+ Py_XDECREF(ssl_internal_filename);
522
1049
  if (rc)
523
1050
  {
524
- PyErr_SetString(ampspy::exc::ConnectionException,
525
- amps_ssl_get_error());
1051
+ char errbuf[256];
1052
+ _AMPS_SNPRINTF(errbuf, sizeof(errbuf), "init from context failed %s ctx is %p ssl_context is %p\n", amps_ssl_get_error(), (void*)ctx, (void*)_ampspy_ssl_context);
1053
+ PyErr_SetString(ampspy::exc::ConnectionException, errbuf);
526
1054
  return NULL;
527
1055
  }
528
1056
  _ssl_is_initialized = true;
1057
+ // Redirect TCPS calls so we can use python wrapped socket/SSL
1058
+ amps_tcps_close_all = _ampspy_close_all;
1059
+ _ampspy_get_socket_and_ssl = amps_tcps_get_socket_and_ssl;
1060
+ amps_tcps_get_socket_and_ssl = _ampspy_SSL_new_wrapped_socket;
529
1061
 
530
1062
  Py_INCREF(Py_None);
531
1063
  return Py_None;
532
1064
  }
533
- PyObject* ssl_init(PyObject* self, PyObject* args)
1065
+
1066
+ // Make our ssl.SSLContext available
1067
+ PyObject* ssl_get_context(PyObject* self, PyObject* args)
534
1068
  {
535
- const char* dll_name = NULL;
1069
+ if (_ampspy_ssl_context)
1070
+ {
1071
+ Py_INCREF(_ampspy_ssl_context);
1072
+ return _ampspy_ssl_context;
1073
+ }
1074
+ else
1075
+ {
1076
+ Py_INCREF(Py_None);
1077
+ return Py_None;
1078
+ }
1079
+ }
1080
+ #endif // Python 3+ only
1081
+
1082
+ #if PY_MAJOR_VERSION < 3
1083
+ PyObject* ampspy_ssl_init(PyObject* self, PyObject* args)
1084
+ {
1085
+ if (_ssl_is_initialized)
1086
+ {
1087
+ Py_INCREF(Py_None);
1088
+ return Py_None;
1089
+ }
536
1090
 
537
- if (!PyArg_ParseTuple(args, "|s", &dll_name))
1091
+ const char* dll_name = NULL;
1092
+ if (self && args)
538
1093
  {
1094
+ if (!PyArg_ParseTuple(args, "|s", &dll_name))
1095
+ {
1096
+ return NULL;
1097
+ }
1098
+ }
1099
+ if (ssl_init_c_lib(dll_name))
1100
+ {
1101
+ PyErr_SetString(ampspy::exc::ConnectionException,
1102
+ amps_ssl_get_error());
539
1103
  return NULL;
540
1104
  }
1105
+ Py_INCREF(Py_None);
1106
+ return Py_None;
1107
+ }
541
1108
 
542
- return ssl_init_internal(dll_name);
1109
+ PyObject* ssl_init(PyObject* self, PyObject* args)
1110
+ {
1111
+ return ampspy_ssl_init(self, args);
543
1112
  }
544
1113
 
545
1114
  PyObject* ssl_set_verify(PyObject* self, PyObject* args)
@@ -560,6 +1129,85 @@ failure:
560
1129
  amps_ssl_get_error());
561
1130
  return NULL;
562
1131
  }
1132
+ #else
1133
+ int ampspy_ssl_set_verify(int mode_)
1134
+ {
1135
+ PyObject* pyVm = PyObject_GetAttrString(_ampspy_ssl_module, "VerifyMode");
1136
+ PyObject* pyVerifyMode;
1137
+ if (mode_ == 0)
1138
+ {
1139
+ pyVerifyMode = PyObject_GetAttrString(pyVm, "CERT_NONE");
1140
+ }
1141
+ else
1142
+ {
1143
+ pyVerifyMode = PyObject_GetAttrString(pyVm, "CERT_REQUIRED");
1144
+ }
1145
+ int rc = PyObject_SetAttrString(_ampspy_ssl_context, "verify_mode", pyVerifyMode);
1146
+ Py_XDECREF(pyVm);
1147
+ Py_XDECREF(pyVerifyMode);
1148
+ return rc;
1149
+ }
1150
+
1151
+ PyObject* ampspy_ssl_init(PyObject* self, PyObject* args, PyObject* kwds)
1152
+ {
1153
+ static const char* kwargs[] = { "dll_name", "ssl_context", "strict_ciphers_only", NULL };
1154
+ const char* dll_name = NULL;
1155
+ PyObject* ssl_context = NULL;
1156
+ int strict_ciphers_only = 0;
1157
+ if (self && args)
1158
+ {
1159
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|sOi", (char**)kwargs,
1160
+ &dll_name, &ssl_context, &strict_ciphers_only))
1161
+ {
1162
+ return NULL;
1163
+ }
1164
+ }
1165
+
1166
+ return ssl_init_internal(dll_name, ssl_context, strict_ciphers_only != 0);
1167
+ }
1168
+
1169
+ PyObject* ssl_init(PyObject* self, PyObject* args, PyObject* kwds)
1170
+ {
1171
+ // If this is called repeatedly, want to make sure that verify mode
1172
+ // gets reset to expected value after init.
1173
+ PyObject* ret = ampspy_ssl_init(self, args, kwds);
1174
+ if (ret && _ampspy_ssl_module)
1175
+ {
1176
+ ampspy_ssl_set_verify(0);
1177
+ }
1178
+ return ret;
1179
+ }
1180
+
1181
+ PyObject* ssl_set_verify(PyObject* self, PyObject* args)
1182
+ {
1183
+ int mode = 0;
1184
+ if (!PyArg_ParseTuple(args, "i", &mode))
1185
+ {
1186
+ return NULL;
1187
+ }
1188
+
1189
+ if (_ampspy_ssl_module)
1190
+ {
1191
+ if (0 == ampspy_ssl_set_verify(mode))
1192
+ {
1193
+ Py_INCREF(Py_None);
1194
+ return Py_None;
1195
+ }
1196
+ }
1197
+ else
1198
+ {
1199
+ if (0 == amps_ssl_set_verify(mode ? 1 : 0))
1200
+ {
1201
+ Py_INCREF(Py_None);
1202
+ return Py_None;
1203
+ }
1204
+ }
1205
+
1206
+ PyErr_SetString(ampspy::exc::ConnectionException,
1207
+ amps_ssl_get_error());
1208
+ return NULL;
1209
+ }
1210
+ #endif
563
1211
 
564
1212
  PyObject* ssl_load_verify_locations(PyObject* self, PyObject* args)
565
1213
  {
@@ -646,6 +1294,7 @@ void* copy_route_function(void* vpData_)
646
1294
  static PyMethodDef AMPSMethods[] =
647
1295
  {
648
1296
  {ampspy::shims::g_shimExitFuncName, (PyCFunction)ampspy::shims::_shimExitFunc, METH_NOARGS, ""},
1297
+ #if PY_MAJOR_VERSION < 3
649
1298
  {
650
1299
  "ssl_init",
651
1300
  (PyCFunction)ampspy::ssl_init, METH_VARARGS,
@@ -653,6 +1302,27 @@ static PyMethodDef AMPSMethods[] =
653
1302
  ":param dllpath: The path to the OpenSSL DLL or shared library to use for\n"
654
1303
  " SSL functionality."
655
1304
  },
1305
+ #else
1306
+ {
1307
+ "ssl_init",
1308
+ (PyCFunction)ampspy::ssl_init, METH_VARARGS | METH_KEYWORDS,
1309
+ "Initializes SSL support in the AMPS module.\n\n"
1310
+ ":param dllpath: The path to the OpenSSL DLL or shared library to use for\n"
1311
+ " SSL functionality.\n"
1312
+ ":param ssl_context: An ssl.SSLContext preconfigured with desired settings\n"
1313
+ " for tcps connections to the AMPS server.\n"
1314
+ ":param strict_ciphers_only: If True, use only the stricter ciphers allowed\n"
1315
+ " by default in Python version 3.10 and above. The\n"
1316
+ " default is False, which enables all default\n"
1317
+ " OpenSSL ciphers for compatibility with some AMPS\n"
1318
+ " versions using older OpenSSL libraries.\n"
1319
+ },
1320
+ {
1321
+ "ssl_get_context",
1322
+ (PyCFunction)ampspy::ssl_get_context, METH_VARARGS,
1323
+ "Returns the SSLContext used for SSL connections. Call ssl_init first.\n\n"
1324
+ },
1325
+ #endif
656
1326
  {
657
1327
  "ssl_set_verify",
658
1328
  (PyCFunction)ampspy::ssl_set_verify, METH_VARARGS,