amps-python-client 5.3.4.2__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 (518) hide show
  1. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/LICENSE +50 -39
  2. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/PKG-INFO +1 -1
  3. amps-python-client-5.3.4.2/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
  4. amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/content-messages.doctree +0 -0
  5. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/ack-messages.doctree → amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/intro.doctree +0 -0
  6. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/sow.doctree → amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/logon.doctree +0 -0
  7. amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/protocol-reference.doctree +0 -0
  8. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/logon.doctree → amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/publishing.doctree +0 -0
  9. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/doctrees/chapters/query-delimiters.doctree +0 -0
  10. amps-python-client-5.3.4.2/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
  11. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/conflated_topics.doctree → amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/removing.doctree +0 -0
  12. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/auxiliary_modules.doctree → amps-python-client-5.3.4.4/docs/command-reference/doctrees/chapters/utilities.doctree +0 -0
  13. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/doctrees/environment.pickle +0 -0
  14. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/doctrees/index.doctree +0 -0
  15. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/index.html +1 -1
  16. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/searchindex.js +1 -1
  17. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/.buildinfo +1 -1
  18. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/code.html +906 -484
  19. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/genindex.html +62 -10
  20. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/index.html +4 -4
  21. amps-python-client-5.3.4.4/docs/html/objects.inv +0 -0
  22. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/py-modindex.html +4 -4
  23. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/search.html +4 -4
  24. amps-python-client-5.3.4.4/docs/html/searchindex.js +1 -0
  25. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/advanced-topics.doctree +0 -0
  26. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/cpp-compiler-list.doctree +0 -0
  27. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/cpp-feature-table.doctree +0 -0
  28. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/creating-commands.doctree +0 -0
  29. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/deltas.doctree +0 -0
  30. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/error-handling.doctree +0 -0
  31. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/exceptions.doctree +0 -0
  32. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/first-program.doctree +0 -0
  33. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/high-availability.doctree +0 -0
  34. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/installing.doctree +0 -0
  35. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/introduction.doctree +0 -0
  36. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/moving-from-python-lite.doctree +0 -0
  37. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/performance-tips.doctree +0 -0
  38. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/queues.doctree +0 -0
  39. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/sow.doctree +0 -0
  40. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/subscriptions.doctree +0 -0
  41. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/chapters/utilities.doctree +0 -0
  42. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/environment.pickle +0 -0
  43. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/doctrees/index.doctree +0 -0
  44. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/index.html +1 -1
  45. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/searchindex.js +1 -1
  46. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/doctrees/chapters/crankitup.doctree +0 -0
  47. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/doctrees/chapters/equipment.doctree +0 -0
  48. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/doctrees/environment.pickle +0 -0
  49. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/doctrees/index.doctree +0 -0
  50. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/index.html +1 -1
  51. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/searchindex.js +1 -1
  52. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/delta.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/acks.doctree +0 -0
  53. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/glossary.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/actions.doctree +0 -0
  54. amps-python-client-5.3.4.2/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
  55. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/publishing.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/amps_expressions.doctree +0 -0
  56. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/troubleshooting.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/amps_functions.doctree +0 -0
  57. amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/auxiliary_modules.doctree +0 -0
  58. amps-python-client-5.3.4.2/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
  59. amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/conflated_topics.doctree +0 -0
  60. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/doctrees/chapters/constructing-fields.doctree +0 -0
  61. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/actions.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/daemon.doctree +0 -0
  62. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/queues.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/delta.doctree +0 -0
  63. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/protocol-reference.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/distribution.doctree +0 -0
  64. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/replication.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/enrichment.doctree +0 -0
  65. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/logging.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/events.doctree +0 -0
  66. amps-python-client-5.3.4.2/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
  67. amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/glossary.doctree +0 -0
  68. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/oof.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/ha.doctree +0 -0
  69. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/doctrees/chapters/installing_and_starting.doctree +0 -0
  70. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/events.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/intro.doctree +0 -0
  71. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/securing.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/logging.doctree +0 -0
  72. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/doctrees/chapters/messageTypes.doctree +0 -0
  73. amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/monitoring.doctree +0 -0
  74. amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/oof.doctree +0 -0
  75. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/monitoring.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/operation.doctree +0 -0
  76. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/usecases.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/pub_sub.doctree +0 -0
  77. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/pub_sub.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/queues.doctree +0 -0
  78. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/distribution.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/replication.doctree +0 -0
  79. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/utilities.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/securing.doctree +0 -0
  80. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/acks.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/sow.doctree +0 -0
  81. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/intro.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/sow_queries.doctree +0 -0
  82. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/doctrees/chapters/spark.doctree +0 -0
  83. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/sow_queries.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/transports.doctree +0 -0
  84. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/utilities.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/troubleshooting.doctree +0 -0
  85. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/doctrees/chapters/txlog.doctree +0 -0
  86. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/operation.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/usecases.doctree +0 -0
  87. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/transports.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/utilities.doctree +0 -0
  88. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/daemon.doctree → amps-python-client-5.3.4.4/docs/user-guide/doctrees/chapters/views.doctree +0 -0
  89. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/doctrees/environment.pickle +0 -0
  90. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/doctrees/index.doctree +0 -0
  91. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/index.html +1 -1
  92. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/searchindex.js +1 -1
  93. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/include/ampspy_defs.hpp +11 -1
  94. amps-python-client-5.3.4.4/include/ampspy_ssl.hpp +31 -0
  95. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/include/ampspyver.h +1 -1
  96. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/index.html +1 -1
  97. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/setup.py +5 -5
  98. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/setup_amps.py +12 -4
  99. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/ampspy_shims.cpp +15 -5
  100. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/client.cpp +24 -1
  101. amps-python-client-5.3.4.4/src/client_docs.h +1210 -0
  102. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/command_docs.h +10 -5
  103. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/BlockPublishStore.hpp +0 -3
  104. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/BlockStore.hpp +0 -3
  105. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/Field.hpp +6 -2
  106. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/HAClient.hpp +5 -1
  107. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/HAClientImpl.hpp +37 -18
  108. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/LoggedBookmarkStore.hpp +1 -1
  109. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/MMapStoreBuffer.hpp +24 -14
  110. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/MemoryBookmarkStore.hpp +54 -32
  111. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/MemoryStoreBuffer.hpp +4 -1
  112. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/Message.hpp +10 -1
  113. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/MessageRouter.hpp +8 -2
  114. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ReconnectDelayStrategy.hpp +2 -2
  115. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/RingBookmarkStore.hpp +5 -2
  116. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/SOWRecoveryPointAdapter.hpp +15 -6
  117. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ServerChooser.hpp +15 -4
  118. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/amps.h +14 -0
  119. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/amps_impl.h +14 -1
  120. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ampscrc.hpp +2 -4
  121. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ampsplusplus.hpp +60 -35
  122. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ampsver.h +2 -2
  123. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/util.hpp +77 -10
  124. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/src/amps_protocol.c +64 -20
  125. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/src/amps_ssl.c +207 -80
  126. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/src/atfork.c +33 -0
  127. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/src/tcp.c +215 -49
  128. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/src/tcps.c +357 -269
  129. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/src/unix.c +93 -32
  130. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/exponentialdelaystrategy.cpp +23 -29
  131. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/fixeddelaystrategy.cpp +13 -12
  132. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/haclient.cpp +1 -1
  133. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/haclient_docs.h +34 -20
  134. amps-python-client-5.3.4.4/src/hybridpublishstore.cpp +275 -0
  135. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/memorypublishstore.cpp +141 -4
  136. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/messagestream.cpp +8 -0
  137. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/nvfixbuilder.cpp +3 -3
  138. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/nvfixbuilder_docs.h +3 -3
  139. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/nvfixshredder_docs.h +3 -3
  140. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/publishstore.cpp +128 -2
  141. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/raw_wrapper.cpp +690 -20
  142. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/serverchooser_docs.h +4 -4
  143. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/removing.doctree +0 -0
  144. amps-python-client-5.3.4.2/docs/html/objects.inv +0 -0
  145. amps-python-client-5.3.4.2/docs/html/searchindex.js +0 -1
  146. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/amps-statistics.doctree +0 -0
  147. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/amps_functions.doctree +0 -0
  148. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/enrichment.doctree +0 -0
  149. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/ha.doctree +0 -0
  150. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/intro.doctree +0 -0
  151. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/views.doctree +0 -0
  152. amps-python-client-5.3.4.2/src/client_docs.h +0 -956
  153. amps-python-client-5.3.4.2/src/hybridpublishstore.cpp +0 -137
  154. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/HISTORY +0 -0
  155. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/README.md +0 -0
  156. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/.buildinfo +0 -0
  157. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/ack-messages.rst.txt +0 -0
  158. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/content-messages.rst.txt +0 -0
  159. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/intro.rst.txt +0 -0
  160. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/logon.rst.txt +0 -0
  161. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/protocol-reference.rst.txt +0 -0
  162. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/publishing.rst.txt +0 -0
  163. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/query-delimiters.rst.txt +0 -0
  164. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/query-subscribe.rst.txt +0 -0
  165. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/removing.rst.txt +0 -0
  166. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/chapters/utilities.rst.txt +0 -0
  167. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_sources/index.rst.txt +0 -0
  168. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/ajax-loader.gif +0 -0
  169. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/alabaster.css +0 -0
  170. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/basic.css +0 -0
  171. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/comment-bright.png +0 -0
  172. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/comment-close.png +0 -0
  173. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/comment.png +0 -0
  174. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/custom.css +0 -0
  175. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/doctools.js +0 -0
  176. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/down-pressed.png +0 -0
  177. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/down.png +0 -0
  178. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/file.png +0 -0
  179. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/flag_logo.png +0 -0
  180. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/flag_logo.svg +0 -0
  181. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/jquery-3.1.0.js +0 -0
  182. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/jquery.js +0 -0
  183. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/minus.png +0 -0
  184. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/plus.png +0 -0
  185. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/pygments.css +0 -0
  186. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/searchtools.js +0 -0
  187. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/underscore-1.3.1.js +0 -0
  188. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/underscore.js +0 -0
  189. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/up-pressed.png +0 -0
  190. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/up.png +0 -0
  191. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/_static/websupport.js +0 -0
  192. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/ack-messages.html +0 -0
  193. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/content-messages.html +0 -0
  194. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/intro.html +0 -0
  195. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/logon.html +0 -0
  196. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/protocol-reference.html +0 -0
  197. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/publishing.html +0 -0
  198. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/query-delimiters.html +0 -0
  199. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/query-subscribe.html +0 -0
  200. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/removing.html +0 -0
  201. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/chapters/utilities.html +0 -0
  202. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/genindex.html +0 -0
  203. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/objects.inv +0 -0
  204. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/command-reference/html/search.html +0 -0
  205. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_sources/code.rst.txt +0 -0
  206. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_sources/index.rst.txt +0 -0
  207. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/ajax-loader.gif +0 -0
  208. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/basic.css +0 -0
  209. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/classic.css +0 -0
  210. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/comment-bright.png +0 -0
  211. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/comment-close.png +0 -0
  212. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/comment.png +0 -0
  213. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/default.css +0 -0
  214. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/doctools.js +0 -0
  215. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/down-pressed.png +0 -0
  216. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/down.png +0 -0
  217. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/file.png +0 -0
  218. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/jquery-3.1.0.js +0 -0
  219. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/jquery.js +0 -0
  220. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/minus.png +0 -0
  221. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/plus.png +0 -0
  222. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/pygments.css +0 -0
  223. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/searchtools.js +0 -0
  224. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/sidebar.js +0 -0
  225. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/underscore-1.3.1.js +0 -0
  226. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/underscore.js +0 -0
  227. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/up-pressed.png +0 -0
  228. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/up.png +0 -0
  229. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/html/_static/websupport.js +0 -0
  230. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/.buildinfo +0 -0
  231. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_images/caution.png +0 -0
  232. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_images/caution.svg +0 -0
  233. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_images/connection_string.svg +0 -0
  234. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_images/important.png +0 -0
  235. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_images/important.svg +0 -0
  236. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_images/tip.png +0 -0
  237. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_images/tip.svg +0 -0
  238. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_images/warning.png +0 -0
  239. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/advanced-topics.rst.txt +0 -0
  240. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/cpp-compiler-list.rst.txt +0 -0
  241. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/cpp-feature-table.rst.txt +0 -0
  242. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/creating-commands.rst.txt +0 -0
  243. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/deltas.rst.txt +0 -0
  244. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/error-handling.rst.txt +0 -0
  245. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/exceptions.rst.txt +0 -0
  246. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/first-program.rst.txt +0 -0
  247. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/high-availability.rst.txt +0 -0
  248. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/installing.rst.txt +0 -0
  249. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/introduction.rst.txt +0 -0
  250. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/moving-from-python-lite.rst.txt +0 -0
  251. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/performance-tips.rst.txt +0 -0
  252. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/queues.rst.txt +0 -0
  253. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/sow.rst.txt +0 -0
  254. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/subscriptions.rst.txt +0 -0
  255. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/chapters/utilities.rst.txt +0 -0
  256. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_sources/index.rst.txt +0 -0
  257. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/ajax-loader.gif +0 -0
  258. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/alabaster.css +0 -0
  259. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/basic.css +0 -0
  260. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/comment-bright.png +0 -0
  261. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/comment-close.png +0 -0
  262. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/comment.png +0 -0
  263. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/custom.css +0 -0
  264. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/doctools.js +0 -0
  265. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/down-pressed.png +0 -0
  266. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/down.png +0 -0
  267. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/file.png +0 -0
  268. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/flag_logo.png +0 -0
  269. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/flag_logo.svg +0 -0
  270. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/jquery-3.1.0.js +0 -0
  271. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/jquery.js +0 -0
  272. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/minus.png +0 -0
  273. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/plus.png +0 -0
  274. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/pygments.css +0 -0
  275. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/searchtools.js +0 -0
  276. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/underscore-1.3.1.js +0 -0
  277. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/underscore.js +0 -0
  278. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/up-pressed.png +0 -0
  279. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/up.png +0 -0
  280. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/_static/websupport.js +0 -0
  281. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/advanced-topics.html +0 -0
  282. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/cpp-compiler-list.html +0 -0
  283. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/cpp-feature-table.html +0 -0
  284. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/creating-commands.html +0 -0
  285. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/deltas.html +0 -0
  286. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/error-handling.html +0 -0
  287. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/exceptions.html +0 -0
  288. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/first-program.html +0 -0
  289. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/high-availability.html +0 -0
  290. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/installing.html +0 -0
  291. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/introduction.html +0 -0
  292. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/moving-from-python-lite.html +0 -0
  293. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/performance-tips.html +0 -0
  294. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/queues.html +0 -0
  295. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/sow.html +0 -0
  296. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/subscriptions.html +0 -0
  297. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/chapters/utilities.html +0 -0
  298. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/genindex.html +0 -0
  299. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/objects.inv +0 -0
  300. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python/html/search.html +0 -0
  301. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/.buildinfo +0 -0
  302. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_sources/chapters/crankitup.rst.txt +0 -0
  303. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_sources/chapters/equipment.rst.txt +0 -0
  304. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_sources/index.rst.txt +0 -0
  305. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/ajax-loader.gif +0 -0
  306. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/alabaster.css +0 -0
  307. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/basic.css +0 -0
  308. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/comment-bright.png +0 -0
  309. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/comment-close.png +0 -0
  310. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/comment.png +0 -0
  311. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/custom.css +0 -0
  312. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/doctools.js +0 -0
  313. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/down-pressed.png +0 -0
  314. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/down.png +0 -0
  315. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/file.png +0 -0
  316. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/flag_logo.png +0 -0
  317. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/flag_logo.svg +0 -0
  318. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/jquery-3.1.0.js +0 -0
  319. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/jquery.js +0 -0
  320. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/minus.png +0 -0
  321. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/plus.png +0 -0
  322. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/pygments.css +0 -0
  323. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/searchtools.js +0 -0
  324. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/underscore-1.3.1.js +0 -0
  325. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/underscore.js +0 -0
  326. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/up-pressed.png +0 -0
  327. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/up.png +0 -0
  328. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/_static/websupport.js +0 -0
  329. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/chapters/crankitup.html +0 -0
  330. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/chapters/equipment.html +0 -0
  331. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/genindex.html +0 -0
  332. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/objects.inv +0 -0
  333. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/python-quickstart/html/search.html +0 -0
  334. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/resources/custom.css +0 -0
  335. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/resources/flag_logo.svg +0 -0
  336. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/.buildinfo +0 -0
  337. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/acks.rst.txt +0 -0
  338. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/actions.rst.txt +0 -0
  339. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/amps-statistics.rst.txt +0 -0
  340. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/amps_expressions.rst.txt +0 -0
  341. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/amps_functions.rst.txt +0 -0
  342. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/auxiliary_modules.rst.txt +0 -0
  343. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/config-file-shortcuts.rst.txt +0 -0
  344. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/conflated_topics.rst.txt +0 -0
  345. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/constructing-fields.rst.txt +0 -0
  346. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/daemon.rst.txt +0 -0
  347. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/delta.rst.txt +0 -0
  348. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/distribution.rst.txt +0 -0
  349. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/enrichment.rst.txt +0 -0
  350. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/events.rst.txt +0 -0
  351. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/file_format_versions.rst.txt +0 -0
  352. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/glossary.rst.txt +0 -0
  353. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/ha.rst.txt +0 -0
  354. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/installing_and_starting.rst.txt +0 -0
  355. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/intro.rst.txt +0 -0
  356. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/logging.rst.txt +0 -0
  357. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/messageTypes.rst.txt +0 -0
  358. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/monitoring.rst.txt +0 -0
  359. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/oof.rst.txt +0 -0
  360. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/operation.rst.txt +0 -0
  361. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/pub_sub.rst.txt +0 -0
  362. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/queues.rst.txt +0 -0
  363. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/replication.rst.txt +0 -0
  364. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/securing.rst.txt +0 -0
  365. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/sow.rst.txt +0 -0
  366. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/sow_queries.rst.txt +0 -0
  367. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/spark.rst.txt +0 -0
  368. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/transports.rst.txt +0 -0
  369. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/troubleshooting.rst.txt +0 -0
  370. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/txlog.rst.txt +0 -0
  371. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/usecases.rst.txt +0 -0
  372. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/utilities.rst.txt +0 -0
  373. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/chapters/views.rst.txt +0 -0
  374. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_sources/index.rst.txt +0 -0
  375. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/ajax-loader.gif +0 -0
  376. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/alabaster.css +0 -0
  377. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/basic.css +0 -0
  378. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/comment-bright.png +0 -0
  379. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/comment-close.png +0 -0
  380. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/comment.png +0 -0
  381. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/custom.css +0 -0
  382. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/doctools.js +0 -0
  383. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/down-pressed.png +0 -0
  384. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/down.png +0 -0
  385. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/file.png +0 -0
  386. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/flag_logo.png +0 -0
  387. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/flag_logo.svg +0 -0
  388. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/jquery-3.1.0.js +0 -0
  389. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/jquery.js +0 -0
  390. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/minus.png +0 -0
  391. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/plus.png +0 -0
  392. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/pygments.css +0 -0
  393. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/searchtools.js +0 -0
  394. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/underscore-1.3.1.js +0 -0
  395. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/underscore.js +0 -0
  396. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/up-pressed.png +0 -0
  397. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/up.png +0 -0
  398. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/_static/websupport.js +0 -0
  399. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/acks.html +0 -0
  400. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/actions.html +0 -0
  401. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/amps-statistics.html +0 -0
  402. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/amps_expressions.html +0 -0
  403. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/amps_functions.html +0 -0
  404. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/auxiliary_modules.html +0 -0
  405. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/config-file-shortcuts.html +0 -0
  406. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/conflated_topics.html +0 -0
  407. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/constructing-fields.html +0 -0
  408. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/daemon.html +0 -0
  409. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/delta.html +0 -0
  410. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/distribution.html +0 -0
  411. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/enrichment.html +0 -0
  412. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/events.html +0 -0
  413. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/file_format_versions.html +0 -0
  414. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/glossary.html +0 -0
  415. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/ha.html +0 -0
  416. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/installing_and_starting.html +0 -0
  417. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/intro.html +0 -0
  418. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/logging.html +0 -0
  419. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/messageTypes.html +0 -0
  420. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/monitoring.html +0 -0
  421. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/oof.html +0 -0
  422. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/operation.html +0 -0
  423. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/pub_sub.html +0 -0
  424. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/queues.html +0 -0
  425. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/replication.html +0 -0
  426. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/securing.html +0 -0
  427. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/sow.html +0 -0
  428. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/sow_queries.html +0 -0
  429. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/spark.html +0 -0
  430. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/transports.html +0 -0
  431. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/troubleshooting.html +0 -0
  432. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/txlog.html +0 -0
  433. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/usecases.html +0 -0
  434. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/utilities.html +0 -0
  435. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/chapters/views.html +0 -0
  436. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/genindex.html +0 -0
  437. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/objects.inv +0 -0
  438. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/docs/user-guide/html/search.html +0 -0
  439. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/include/ampspy_bookmarkstore.hpp +0 -0
  440. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/include/ampspy_compat.h +0 -0
  441. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/include/ampspy_recoverypointadapter.hpp +0 -0
  442. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/include/ampspy_shims.hpp +0 -0
  443. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/include/ampspy_type_object.hpp +0 -0
  444. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/include/ampspy_types.hpp +0 -0
  445. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSConsolePublisher.py +0 -0
  446. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSConsoleSubscriber.py +0 -0
  447. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSFIXBuilderPublisher.py +0 -0
  448. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSFIXShredderSubscriber.py +0 -0
  449. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSNVFIXBuilderPublisher.py +0 -0
  450. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSNVFIXShredderSubscriber.py +0 -0
  451. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSPublishForReplay.py +0 -0
  452. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSQueueConsumer.py +0 -0
  453. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSQueuePublisher.py +0 -0
  454. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSSOWConsolePublisher.py +0 -0
  455. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSSOWConsoleSubscriber.py +0 -0
  456. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSSOWandSubscribeConsoleSubscriber.py +0 -0
  457. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSSOWandSubscribeWithOOF.py +0 -0
  458. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSSubscribeForReplay.py +0 -0
  459. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/AMPSUpdateForOOF.py +0 -0
  460. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/CompositeMessagePublisher.py +0 -0
  461. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/CompositeMessageSubscriber.py +0 -0
  462. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/RandomServerChooser.py +0 -0
  463. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/samples/sample.xml +0 -0
  464. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/ampspy_type_object.cpp +0 -0
  465. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/authenticator.cpp +0 -0
  466. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/bookmarkstore.cpp +0 -0
  467. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cmessagehandler.cpp +0 -0
  468. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/command.cpp +0 -0
  469. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/compositemessagebuilder.cpp +0 -0
  470. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/compositemessageparser.cpp +0 -0
  471. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/conflatingrecoverypointadapter.cpp +0 -0
  472. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/BookmarkStore.hpp +0 -0
  473. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/Buffer.hpp +0 -0
  474. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/CompositeMessageBuilder.hpp +0 -0
  475. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/CompositeMessageParser.hpp +0 -0
  476. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/DefaultServerChooser.hpp +0 -0
  477. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/HybridPublishStore.hpp +0 -0
  478. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/MMapBookmarkStore.hpp +0 -0
  479. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/MemoryPublishStore.hpp +0 -0
  480. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/MemorySubscriptionManager.hpp +0 -0
  481. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/PublishStore.hpp +0 -0
  482. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ReconnectDelayStrategyImpl.hpp +0 -0
  483. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/RecoveryPoint.hpp +0 -0
  484. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/RecoveryPointAdapter.hpp +0 -0
  485. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ServerChooserImpl.hpp +0 -0
  486. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/amps_generated.h +0 -0
  487. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/amps_ssl.h +0 -0
  488. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ampsuri.h +0 -0
  489. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/ampsver.h.in +0 -0
  490. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/include/amps/constants.hpp +0 -0
  491. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/src/amps_protocol_generated.h +0 -0
  492. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/src/client.c +0 -0
  493. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/src/makefile +0 -0
  494. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/src/message.c +0 -0
  495. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/src/message_generated.h +0 -0
  496. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/src/transports.c +0 -0
  497. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/cpp/src/uri.c +0 -0
  498. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/failedwritehandler.cpp +0 -0
  499. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/fixbuilder.cpp +0 -0
  500. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/fixshredder.cpp +0 -0
  501. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/fixshredder_docs.h +0 -0
  502. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/hybridpublishstore_docs.h +0 -0
  503. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/memorybookmarkstore.cpp +0 -0
  504. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/memorybookmarkstore_docs.h +0 -0
  505. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/memorypublishstore_docs.h +0 -0
  506. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/message.cpp +0 -0
  507. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/message_docs.h +0 -0
  508. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/messagestream_docs.h +0 -0
  509. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/mmapbookmarkstore.cpp +0 -0
  510. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/nvfixshredder.cpp +0 -0
  511. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/reason.cpp +0 -0
  512. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/recoverypoint.cpp +0 -0
  513. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/recoverypointadapter.cpp +0 -0
  514. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/ringbookmarkstore.cpp +0 -0
  515. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/serverchooser.cpp +0 -0
  516. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/sowrecoverypointadapter.cpp +0 -0
  517. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/store.cpp +0 -0
  518. {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.4}/src/versioninfo.cpp +0 -0
@@ -80,7 +80,62 @@ int amps_win_spin_lock(LPCRITICAL_SECTION x);
80
80
  #define AMPS_SPIN_LOCK_UNLIMITED(x) EnterCriticalSection(x)
81
81
  #define AMPS_UNLOCK(x) LeaveCriticalSection(x)
82
82
  #define AMPS_KILLLOCK(x) DeleteCriticalSection(x)
83
+ #else
84
+ #define GET_ERRNO (errno)
85
+ #define SOCK_ERRORCODE(x) x
86
+ #include <pthread.h>
87
+
88
+ static pthread_mutexattr_t _mutexattr_recursive;
89
+ #define AMPS_INITLOCK(x) { \
90
+ pthread_mutexattr_init(&_mutexattr_recursive); \
91
+ pthread_mutexattr_settype(&_mutexattr_recursive, PTHREAD_MUTEX_RECURSIVE);\
92
+ pthread_mutex_init(x, &_mutexattr_recursive); }
93
+ #define AMPS_LOCK(x) pthread_mutex_lock(x)
94
+ #define AMPS_SPIN_LOCK(x) amps_spin_lock_counted(x)
95
+ #define AMPS_SPIN_LOCK_UNLIMITED(x) amps_spin_lock_unlimited(x)
96
+ #define AMPS_UNLOCK(x) pthread_mutex_unlock(x)
97
+ #define AMPS_KILLLOCK(x) pthread_mutex_destroy(x)
98
+ #endif
99
+
100
+ #ifdef AMPS_CPP_COUNT_THREADS
101
+ #define AMPS_INC_THREAD_COUNT(x) AMPS_FETCH_ADD(x, 1)
102
+ #else
103
+ #define AMPS_INC_THREAD_COUNT(x)
104
+ #endif
105
+
106
+ #ifdef _WIN32
107
+ INIT_ONCE ampsTcpsThreadKeyOnce = INIT_ONCE_STATIC_INIT;
108
+ DWORD ampsTcpsThreadKey = TLS_OUT_OF_INDEXES;
109
+
110
+ void amps_tcps_delete_key(void)
111
+ {
112
+ TlsFree(ampsTcpsThreadKey);
113
+ }
114
+
115
+ BOOL CALLBACK amps_tcps_init_key(PINIT_ONCE pKeyOnce, PVOID unused, PVOID* unused2)
116
+ {
117
+ if ((ampsTcpsThreadKey = TlsAlloc()) == TLS_OUT_OF_INDEXES)
118
+ {
119
+ return FALSE;
120
+ }
121
+ atexit(amps_tcps_delete_key);
122
+ return TRUE;
123
+ }
124
+
125
+ DWORD amps_tcps_get_thread_key(void)
126
+ {
127
+ InitOnceExecuteOnce(&ampsTcpsThreadKeyOnce, amps_tcps_init_key, NULL, NULL);
128
+ return ampsTcpsThreadKey;
129
+ }
130
+
131
+ void amps_tcps_set_thread_key(void* pVal)
132
+ {
133
+ InitOnceExecuteOnce(&ampsTcpsThreadKeyOnce, amps_tcps_init_key, NULL, NULL);
134
+ TlsSetValue(ampsTcpsThreadKey, pVal);
135
+ }
136
+
83
137
  int tcpsThreadTimeoutMillis = 10000;
138
+
84
139
  #define AMPS_JOIN_DECLARE() \
85
140
  DWORD tid = (DWORD)0; \
86
141
  HANDLE tidH = (HANDLE)0
@@ -92,51 +147,90 @@ int tcpsThreadTimeoutMillis = 10000;
92
147
  { \
93
148
  if (tid != GetCurrentThreadId()) \
94
149
  { \
95
- if(WAIT_TIMEOUT == WaitForSingleObject(tidH, tcpsThreadTimeoutMillis)) \
96
- { \
97
- TerminateThread(tidH, -1); \
98
- } \
150
+ AMPS_INC_THREAD_COUNT(&amps_thread_join_count); \
151
+ WaitForSingleObject(tidH, tcpsThreadTimeoutMillis); \
152
+ CloseHandle(tidH); \
153
+ } \
154
+ else \
155
+ { \
156
+ amps_tcps_set_thread_key((void*)tidH); \
99
157
  } \
100
- CloseHandle(tidH); \
101
158
  }
102
159
  #define AMPS_SLEEP(x) \
103
160
  Sleep(x)
104
161
  #define SHUT_RDWR SD_BOTH
105
162
  #else
106
- #define GET_ERRNO (errno)
107
- #define SOCK_ERRORCODE(x) x
108
- #include <pthread.h>
163
+ pthread_once_t ampsTcpsThreadKeyOnce = PTHREAD_ONCE_INIT;
164
+ pthread_key_t ampsTcpsThreadKey;
109
165
 
110
- static pthread_mutexattr_t _mutexattr_recursive;
111
- #define AMPS_INITLOCK(x) { \
112
- pthread_mutexattr_init(&_mutexattr_recursive); \
113
- pthread_mutexattr_settype(&_mutexattr_recursive, PTHREAD_MUTEX_RECURSIVE);\
114
- pthread_mutex_init(x, &_mutexattr_recursive); }
115
- #define AMPS_LOCK(x) pthread_mutex_lock(x)
116
- #define AMPS_SPIN_LOCK(x) amps_spin_lock_counted(x)
117
- #define AMPS_SPIN_LOCK_UNLIMITED(x) amps_spin_lock_unlimited(x)
166
+ void amps_tcps_detach_thread(void* vpSelf)
167
+ {
168
+ pthread_detach((pthread_t)vpSelf);
169
+ AMPS_INC_THREAD_COUNT(&amps_thread_detach_count);
170
+ }
171
+
172
+ void amps_tcps_delete_thread_key(void)
173
+ {
174
+ pthread_key_delete(ampsTcpsThreadKey);
175
+ }
176
+
177
+ void amps_tcps_init_thread_key()
178
+ {
179
+ pthread_key_create(&ampsTcpsThreadKey, amps_tcps_detach_thread);
180
+ atexit(amps_tcps_delete_thread_key);
181
+ }
182
+
183
+ void amps_tcps_set_thread_key(void* pVal)
184
+ {
185
+ (void) pthread_once(&ampsTcpsThreadKeyOnce, amps_tcps_init_thread_key);
186
+ pthread_setspecific(ampsTcpsThreadKey, pVal);
187
+ }
118
188
 
119
- #define AMPS_UNLOCK(x) pthread_mutex_unlock(x)
120
- #define AMPS_KILLLOCK(x) pthread_mutex_destroy(x)
121
189
  #define AMPS_JOIN_DECLARE() \
122
190
  pthread_t tid = (pthread_t)0;
123
191
 
124
192
  #if __STDC_VERSION__ >= 201100
125
193
  #define AMPS_JOIN(x) \
126
194
  tid = atomic_exchange((&x), (pthread_t)0); \
127
- if(tid!=(pthread_t)0 && tid!=pthread_self()) \
195
+ if(tid != (pthread_t)0) \
196
+ { \
197
+ if(tid != pthread_self()) \
198
+ { \
199
+ AMPS_INC_THREAD_COUNT(&amps_thread_join_count); \
200
+ pthread_join(tid, NULL); \
201
+ } \
202
+ else \
203
+ { \
204
+ amps_tcps_set_thread_key((void*)tid); \
205
+ } \
206
+ } \
207
+ else \
128
208
  { \
129
- pthread_join(tid, NULL); \
209
+ /* Give recv thread a chance to exit in case it hasn't yet */ \
210
+ usleep(10); \
130
211
  }
131
212
  #else
132
213
  #define AMPS_JOIN(x) \
133
214
  tid = AMPS_FETCH_ADD(&x, (pthread_t)0); \
134
- if(tid!=(pthread_t)0 && tid!=pthread_self()) \
215
+ if(tid != (pthread_t)0) \
135
216
  { \
136
- if(__sync_bool_compare_and_swap(&x, tid, (pthread_t)0)) \
217
+ if(__sync_bool_compare_and_swap(&x, tid, 0)) \
137
218
  { \
138
- pthread_join(tid, NULL); \
219
+ if(tid != pthread_self()) \
220
+ { \
221
+ AMPS_INC_THREAD_COUNT(&amps_thread_join_count); \
222
+ pthread_join(tid, NULL); \
223
+ } \
224
+ else \
225
+ { \
226
+ amps_tcps_set_thread_key((void*)tid); \
227
+ } \
139
228
  } \
229
+ } \
230
+ else \
231
+ { \
232
+ /* Give recv thread a chance to exit in case it hasn't yet */ \
233
+ usleep(10); \
140
234
  }
141
235
  #endif
142
236
 
@@ -211,6 +305,47 @@ typedef struct
211
305
  }
212
306
  amps_tcps_t;
213
307
 
308
+ // Function to close SSL* and fd that can be replaced by Python client
309
+ int _amps_tcps_close_all(AMPS_SOCKET fd, _amps_SSL* ssl)
310
+ {
311
+ int rc = 0;
312
+ if (ssl)
313
+ {
314
+ rc = _amps_SSL_shutdown(ssl);
315
+ if (rc == 0 && fd != AMPS_INVALID_SOCKET)
316
+ {
317
+ // attempt to wait for the server to send back the matching close notify.
318
+ struct timeval tv;
319
+ fd_set readfds, exceptfds;
320
+ tv.tv_sec = 0;
321
+ tv.tv_usec = 10000;
322
+ FD_ZERO(&readfds);
323
+ FD_SET(fd, &readfds);
324
+ FD_ZERO(&exceptfds);
325
+ FD_SET(fd, &exceptfds);
326
+ #ifdef _WIN32
327
+ select(1, &readfds, 0, &exceptfds, &tv);
328
+ #else
329
+ select(fd + 1, &readfds, 0, &exceptfds, &tv);
330
+ #endif
331
+ rc = _amps_SSL_shutdown(ssl);
332
+ }
333
+ }
334
+ if (fd != AMPS_INVALID_SOCKET)
335
+ {
336
+ shutdown(fd, SHUT_RDWR);
337
+ AMPS_CLOSESOCKET(fd);
338
+ }
339
+ if (ssl)
340
+ {
341
+ _amps_SSL_free(ssl);
342
+ }
343
+ return rc;
344
+ }
345
+
346
+ // Pointer to function for closing SSL/fd that Python client redirects
347
+ AMPSDLL int (*amps_tcps_close_all)(AMPS_SOCKET, _amps_SSL*) = _amps_tcps_close_all;
348
+
214
349
  const amps_char* amps_tcps_get_last_error(
215
350
  amps_handle transport)
216
351
  {
@@ -225,6 +360,13 @@ void amps_tcps_set_error(
225
360
  transport->lastErrorBuf[sizeof(transport->lastErrorBuf) - 1] = '\0';
226
361
  }
227
362
 
363
+ // Allow python client to set transport errors during connect/close
364
+ AMPSDLL void amps_tcps_set_external_error(void* transport,
365
+ const amps_char* buffer)
366
+ {
367
+ amps_tcps_set_error((amps_tcps_t*)transport, buffer);
368
+ }
369
+
228
370
  void amps_tcps_set_socket_error(
229
371
  amps_tcps_t* transport,
230
372
  int errorCode)
@@ -580,11 +722,10 @@ amps_tcps_apply_socket_properties(AMPS_SOCKET fd, const char* uri,
580
722
  return AMPS_E_OK;
581
723
  }
582
724
 
583
- int
584
- amps_tcps_apply_ssl_properties(_amps_SSL* ssl, const char* uri,
585
- size_t uriLength, amps_uri_state* uriState)
725
+ // Retrieve server name indicator for use by SSL when connecting
726
+ char* amps_tcps_get_sni_hostname(const char* uri, size_t uriLength,
727
+ amps_uri_state* uriState)
586
728
  {
587
- int rc = 1;
588
729
  const char* key = NULL;
589
730
  size_t keyLength = 0;
590
731
  while (uriState->part_id < AMPS_URI_ERROR)
@@ -602,19 +743,92 @@ amps_tcps_apply_ssl_properties(_amps_SSL* ssl, const char* uri,
602
743
  char* hostname = (char*)malloc(uriState->part_length + 1);
603
744
  memcpy(hostname, uriState->part, uriState->part_length);
604
745
  hostname[uriState->part_length] = '\0';
605
- rc = _amps_SSL_ctrl(ssl, AMPS_SSL_CTRL_SET_TLSEXT_HOSTNAME, AMPS_TLSEXT_NAMETYPE_host_name, hostname);
606
- free(hostname);
607
- if (rc != 1)
608
- {
609
- return rc;
610
- }
746
+ return hostname;
611
747
  }
612
748
  }
613
749
  }
614
- return rc;
750
+ return NULL;
751
+ }
752
+
753
+ // Normal initialization and connection of SSL around socket
754
+ _amps_SSL* _amps_tcps_get_socket_and_ssl(AMPS_SOCKET fd_,
755
+ const char* address_, int port_,
756
+ struct addrinfo* pAddrInfo_,
757
+ char* hostname_, void* me_)
758
+ {
759
+ amps_tcps_t* transport = (amps_tcps_t*)me_;
760
+ /* On first use, initialize an SSL context if one hasn't been created. */
761
+ if (!_amps_ssl_ctx)
762
+ {
763
+ if (amps_ssl_init(NULL))
764
+ {
765
+ return NULL;
766
+ }
767
+ }
768
+ // Create SSL wrapper for the socket
769
+ _amps_ERR_clear_error();
770
+ _amps_SSL* ssl = _amps_SSL_new(_amps_ssl_ctx);
771
+
772
+ int rc = _amps_SSL_set_fd(ssl, (int)(fd_));
773
+ int sysError = GET_ERRNO;
774
+ if (rc != 1)
775
+ {
776
+ transport->ssl = ssl;
777
+ amps_tcps_set_ssl_error(transport, rc, sysError);
778
+ _amps_SSL_free(ssl);
779
+ ssl = (_amps_SSL*)0;
780
+ transport->ssl = (_amps_SSL*)0;
781
+ return NULL;
782
+ }
783
+
784
+ // Connect socket
785
+ rc = connect(fd_, pAddrInfo_->ai_addr,
786
+ (socklen_t)pAddrInfo_->ai_addrlen);
787
+ sysError = GET_ERRNO;
788
+ if (rc == -1)
789
+ {
790
+ amps_tcps_set_socket_error(transport, sysError);
791
+ _amps_SSL_free(ssl);
792
+ return NULL;
793
+ }
794
+
795
+ // Set server name indicator if used
796
+ if (hostname_)
797
+ {
798
+ rc = _amps_SSL_ctrl(ssl, AMPS_SSL_CTRL_SET_TLSEXT_HOSTNAME,
799
+ AMPS_TLSEXT_NAMETYPE_host_name, hostname_);
800
+ sysError = GET_ERRNO;
801
+ if (rc != 1)
802
+ {
803
+ amps_tcps_set_ssl_error(transport, rc, sysError);
804
+ _amps_SSL_free(ssl);
805
+ return NULL;
806
+ }
807
+ }
808
+
809
+ _amps_SSL_ctrl(ssl, AMPS_SSL_CTRL_MODE, AMPS_SSL_AUTO_RETRY, NULL);
810
+
811
+ // Complete SSL connect/handshake
812
+ rc = _amps_SSL_connect(ssl);
813
+ sysError = GET_ERRNO;
814
+ if (rc != 1)
815
+ {
816
+ amps_tcps_set_ssl_error(transport, rc, sysError);
817
+ _amps_SSL_free(ssl);
818
+ return NULL;
819
+ }
820
+ return ssl;
615
821
  }
616
822
 
823
+ // Pointer to init/connect function for Python client to override
824
+ AMPSDLL _amps_SSL* (*amps_tcps_get_socket_and_ssl)(AMPS_SOCKET fd_,
825
+ const char* address_, int port_,
826
+ struct addrinfo* pAddrInfo_,
827
+ char* hostname_, void* me_) =
828
+ _amps_tcps_get_socket_and_ssl;
829
+
617
830
  amps_result amps_tcps_set_idle_time(amps_handle transport, int idleTimeMillis);
831
+
618
832
  amps_result amps_tcps_connect(amps_handle transport, const amps_char* address)
619
833
  {
620
834
  AMPS_JOIN_DECLARE();
@@ -654,27 +868,15 @@ amps_result amps_tcps_connect(amps_handle transport, const amps_char* address)
654
868
  ssl = (_amps_SSL*)AMPS_IEX_GET(&me->ssl, 0);
655
869
 
656
870
  /* were we previously connected? go ahead and close that. */
657
- if (ssl)
658
- {
659
- rc = _amps_SSL_shutdown(ssl);
660
- sysError = GET_ERRNO;
661
- if (rc < 0)
662
- {
663
- amps_tcps_set_ssl_error(me, rc, sysError);
664
- }
665
- }
666
- if (fd != AMPS_INVALID_SOCKET)
667
- {
668
- /* this is a reconnect */
669
- shutdown(fd, SHUT_RDWR);
670
- closesocket(fd);
671
- fd = AMPS_INVALID_SOCKET;
672
- }
871
+ // Use our close function to shutdown socket and SSL
872
+ rc = amps_tcps_close_all(fd, ssl);
873
+ sysError = GET_ERRNO;
673
874
  AMPS_JOIN(me->thread);
674
- if (ssl)
875
+ fd = AMPS_INVALID_SOCKET;
876
+ ssl = NULL;
877
+ if (rc < 0)
675
878
  {
676
- _amps_SSL_free(ssl);
677
- ssl = 0;
879
+ amps_tcps_set_ssl_error(me, rc, sysError);
678
880
  }
679
881
 
680
882
  /* parse out the address */
@@ -779,106 +981,64 @@ amps_result amps_tcps_connect(amps_handle transport, const amps_char* address)
779
981
  goto error;
780
982
  }
781
983
 
782
- me->fd = socket(pAddrInfo->ai_family, pAddrInfo->ai_socktype, pAddrInfo->ai_protocol);
984
+ // Get the socket we'll use
985
+ fd = socket(pAddrInfo->ai_family, pAddrInfo->ai_socktype, pAddrInfo->ai_protocol);
783
986
  sysError = GET_ERRNO;
784
- if (me->fd == AMPS_INVALID_SOCKET)
987
+ if (fd == AMPS_INVALID_SOCKET)
785
988
  {
786
989
  freeaddrinfo(pAddrInfo);
787
990
  amps_tcps_set_socket_error(me, sysError);
788
991
  result = AMPS_E_CONNECTION_REFUSED;
789
992
  goto error;
790
993
  }
994
+ AMPS_IEX(&me->fd, fd);
791
995
 
792
996
  /* apply socket properties */
793
- if (amps_tcps_apply_socket_properties(me->fd, address, address_length, &uri_state_socket_props) != AMPS_E_OK)
997
+ if (me->destroying
998
+ || amps_tcps_apply_socket_properties(me->fd, address, address_length, &uri_state_socket_props) != AMPS_E_OK)
794
999
  {
795
1000
  freeaddrinfo(pAddrInfo);
796
- fd = AMPS_IEX_GET(&me->fd, AMPS_INVALID_SOCKET);
1001
+ if (!me->destroying)
1002
+ {
1003
+ fd = AMPS_IEX_GET(&me->fd, AMPS_INVALID_SOCKET);
1004
+ }
797
1005
  amps_tcps_set_error(me, "The URI specified invalid properties.");
798
1006
  result = AMPS_E_URI;
799
1007
  goto error;
800
1008
  }
801
1009
  #ifdef __APPLE__
802
1010
  rc = 1; /* Set NOSIGPIPE to ON */
803
- if (setsockopt(me->fd, SOL_SOCKET, SO_NOSIGPIPE, &rc, sizeof(rc)) < 0)
1011
+ if (me->destroying
1012
+ || setsockopt(me->fd, SOL_SOCKET, SO_NOSIGPIPE, &rc, sizeof(rc)) < 0)
804
1013
  {
805
1014
  freeaddrinfo(pAddrInfo);
806
- fd = AMPS_IEX_GET(&me->fd, AMPS_INVALID_SOCKET);
1015
+ if (!me->destroying)
1016
+ {
1017
+ fd = AMPS_IEX_GET(&me->fd, AMPS_INVALID_SOCKET);
1018
+ }
807
1019
  amps_tcps_set_error(me, "Failed to set no SIGPIPE.");
808
1020
  result = AMPS_E_CONNECTION;
809
1021
  goto error;
810
1022
  }
811
1023
  #endif
812
1024
 
813
- rc = connect(me->fd, pAddrInfo->ai_addr,
814
- (socklen_t)pAddrInfo->ai_addrlen);
815
- sysError = GET_ERRNO;
1025
+ // Call function to do SSL init and connect
1026
+ char* hostname = amps_tcps_get_sni_hostname(address, address_length, &uri_state_ssl_props);
1027
+ int portNum = atoi(port);
1028
+ me->ssl = amps_tcps_get_socket_and_ssl((AMPS_SOCKET)(me->fd), host, portNum, pAddrInfo, hostname, (void*)me);
816
1029
  freeaddrinfo(pAddrInfo);
817
- if (rc == -1)
818
- {
819
- fd = AMPS_IEX_GET(&me->fd, AMPS_INVALID_SOCKET);
820
- amps_tcps_set_socket_error(me, sysError);
821
- result = AMPS_E_CONNECTION_REFUSED;
822
- goto error;
823
- }
824
-
825
- /* On first use, initialize an SSL context if one hasn't been created. */
826
- if (!_amps_ssl_ctx)
1030
+ if (me->destroying || me->ssl == 0)
827
1031
  {
828
- rc = amps_ssl_init(NULL);
829
- if (rc)
1032
+ if (!me->destroying)
830
1033
  {
831
1034
  fd = AMPS_IEX_GET(&me->fd, AMPS_INVALID_SOCKET);
832
- amps_tcps_set_error(me, "Could not initialize an SSL context.");
833
- result = AMPS_E_SSL;
834
- goto error;
835
1035
  }
836
- }
837
- /* Handshake via SSL */
838
- _amps_ERR_clear_error();
839
- if (!me->ssl)
840
- {
841
- me->ssl = _amps_SSL_new(_amps_ssl_ctx);
842
- }
843
- if (me->ssl == 0)
844
- {
845
- fd = AMPS_IEX_GET(&me->fd, AMPS_INVALID_SOCKET);
846
1036
  amps_tcps_set_error_stack_error(me);
847
- result = AMPS_E_SSL;
848
- goto error;
849
- }
850
-
851
- rc = _amps_SSL_set_fd(me->ssl, (int)me->fd);
852
- sysError = GET_ERRNO;
853
- if (rc != 1)
854
- {
855
- fd = AMPS_IEX_GET(&me->fd, AMPS_INVALID_SOCKET);
856
- ssl = (_amps_SSL*)AMPS_IEX_GET(&me->ssl, 0);
857
- amps_tcps_set_ssl_error(me, rc, sysError);
858
- result = AMPS_E_SSL;
859
- goto error;
860
- }
861
-
862
- rc = amps_tcps_apply_ssl_properties(me->ssl, address, address_length, &uri_state_ssl_props);
863
- sysError = GET_ERRNO;
864
- if (rc != 1)
865
- {
866
- fd = AMPS_IEX_GET(&me->fd, AMPS_INVALID_SOCKET);
867
- ssl = (_amps_SSL*)AMPS_IEX_GET(&me->ssl, 0);
868
- amps_tcps_set_ssl_error(me, rc, sysError);
869
- result = AMPS_E_SSL;
870
- goto error;
871
- }
872
-
873
- _amps_SSL_ctrl(me->ssl, AMPS_SSL_CTRL_MODE, AMPS_SSL_AUTO_RETRY, NULL);
874
-
875
- rc = _amps_SSL_connect(me->ssl);
876
- sysError = GET_ERRNO;
877
- if (rc != 1)
878
- {
879
- fd = AMPS_IEX_GET(&me->fd, AMPS_INVALID_SOCKET);
880
- ssl = (_amps_SSL*)AMPS_IEX_GET(&me->ssl, 0);
881
- amps_tcps_set_ssl_error(me, rc, sysError);
1037
+ // The error string should already be set, but just in case
1038
+ if (!amps_tcps_get_last_error(me))
1039
+ {
1040
+ amps_tcps_set_error(me, "Could not initialize an SSL context or SSL.");
1041
+ }
882
1042
  result = AMPS_E_SSL;
883
1043
  goto error;
884
1044
  }
@@ -904,6 +1064,7 @@ amps_result amps_tcps_connect(amps_handle transport, const amps_char* address)
904
1064
  * important to do it in two steps, since we use me->thread as a poor-man's cancellation mechanism */
905
1065
  if (me->threadH)
906
1066
  {
1067
+ AMPS_INC_THREAD_COUNT(&amps_thread_create_count);
907
1068
  ResumeThread(me->threadH);
908
1069
  }
909
1070
  else
@@ -926,6 +1087,7 @@ amps_result amps_tcps_connect(amps_handle transport, const amps_char* address)
926
1087
  result = AMPS_E_MEMORY;
927
1088
  goto error;
928
1089
  }
1090
+ AMPS_INC_THREAD_COUNT(&amps_thread_create_count);
929
1091
  #endif
930
1092
  for (i = 0; i < AMPS_THREAD_START_TIMEOUT && me->threadCreatedCallbackResult == -1; ++i)
931
1093
  {
@@ -941,30 +1103,18 @@ amps_result amps_tcps_connect(amps_handle transport, const amps_char* address)
941
1103
  {
942
1104
  fd = AMPS_IEX_GET(&me->fd, AMPS_INVALID_SOCKET);
943
1105
  ssl = (_amps_SSL*)AMPS_IEX_GET(&me->ssl, 0);
1106
+ AMPS_JOIN(me->thread);
944
1107
  amps_tcps_set_error(me, "Thread creation callback failed");
945
1108
  }
946
1109
 
947
1110
  error:
948
1111
  if (result != AMPS_E_OK)
949
1112
  {
950
- if (ssl)
951
- {
952
- rc = _amps_SSL_shutdown(ssl);
953
- sysError = GET_ERRNO;
954
- if (rc < 0)
955
- {
956
- amps_tcps_set_ssl_error(me, rc, sysError);
957
- }
958
- }
959
- if (fd != AMPS_INVALID_SOCKET)
960
- {
961
- shutdown(fd, SHUT_RDWR);
962
- closesocket(fd);
963
- }
964
- if (ssl)
1113
+ // Use our close function to shutdown socket and SSL
1114
+ int rc = amps_tcps_close_all(fd, ssl);
1115
+ if (rc < 0)
965
1116
  {
966
- _amps_SSL_free(ssl);
967
- ssl = 0;
1117
+ amps_tcps_set_ssl_error(me, rc, sysError);
968
1118
  }
969
1119
  #ifdef _WIN32
970
1120
  me->thread = 0;
@@ -1032,41 +1182,12 @@ void amps_tcps_close(amps_handle transport)
1032
1182
  #ifndef _WIN32
1033
1183
  pthread_cleanup_push(amps_cleanup_unlock_mutex, (void*)&me->lock);
1034
1184
  #endif
1035
- if (ssl)
1185
+ // Use our close function to shutdown socket and SSL
1186
+ int rc = amps_tcps_close_all(fd, ssl);
1187
+ if (rc < 0)
1036
1188
  {
1037
- int rc = _amps_SSL_shutdown(ssl);
1038
1189
  int sysError = GET_ERRNO;
1039
- if (rc == 0 && fd != AMPS_INVALID_SOCKET)
1040
- {
1041
- // attempt to wait for the server to send back the matching close notify.
1042
- struct timeval tv;
1043
- fd_set readfds, exceptfds;
1044
- tv.tv_sec = 0;
1045
- tv.tv_usec = 10000;
1046
- FD_ZERO(&readfds);
1047
- FD_SET(fd, &readfds);
1048
- FD_ZERO(&exceptfds);
1049
- FD_SET(fd, &exceptfds);
1050
- #ifdef _WIN32
1051
- select(1, &readfds, 0, &exceptfds, &tv);
1052
- #else
1053
- select(fd + 1, &readfds, 0, &exceptfds, &tv);
1054
- #endif
1055
- rc = _amps_SSL_shutdown(ssl);
1056
- }
1057
- if (rc < 0)
1058
- {
1059
- amps_tcps_set_ssl_error(me, rc, sysError);
1060
- }
1061
- }
1062
- if (fd != AMPS_INVALID_SOCKET)
1063
- {
1064
- shutdown(fd, SHUT_RDWR);
1065
- closesocket(fd);
1066
- }
1067
- if (ssl)
1068
- {
1069
- _amps_SSL_free(ssl);
1190
+ amps_tcps_set_ssl_error(me, rc, sysError);
1070
1191
  }
1071
1192
  AMPS_UNLOCK(&me->lock);
1072
1193
  #ifndef _WIN32
@@ -1103,41 +1224,12 @@ void amps_tcps_destroy(amps_handle transport)
1103
1224
  AMPS_IEX_LONG(&me->destroying, 1);
1104
1225
  AMPS_IEX_LONG(&me->disconnecting, 1);
1105
1226
  #endif
1106
- if (ssl)
1227
+ // Use our close function to shutdown socket and SSL
1228
+ int rc = amps_tcps_close_all(fd, ssl);
1229
+ if (rc < 0)
1107
1230
  {
1108
- int rc = _amps_SSL_shutdown(ssl);
1109
1231
  int sysError = GET_ERRNO;
1110
- if (rc == 0 && fd != AMPS_INVALID_SOCKET)
1111
- {
1112
- // attempt to wait for the server to send back the matching close notify.
1113
- struct timeval tv;
1114
- fd_set readfds, exceptfds;
1115
- tv.tv_sec = 0;
1116
- tv.tv_usec = 10000;
1117
- FD_ZERO(&readfds);
1118
- FD_SET(fd, &readfds);
1119
- FD_ZERO(&exceptfds);
1120
- FD_SET(fd, &exceptfds);
1121
- #ifdef _WIN32
1122
- select(1, &readfds, 0, &exceptfds, &tv);
1123
- #else
1124
- select(fd + 1, &readfds, 0, &exceptfds, &tv);
1125
- #endif
1126
- rc = _amps_SSL_shutdown(ssl);
1127
- }
1128
- if (rc < 0)
1129
- {
1130
- amps_tcps_set_ssl_error(me, rc, sysError);
1131
- }
1132
- }
1133
- if (fd != AMPS_INVALID_SOCKET)
1134
- {
1135
- shutdown(fd, SHUT_RDWR);
1136
- closesocket(fd);
1137
- }
1138
- if (ssl)
1139
- {
1140
- _amps_SSL_free(ssl);
1232
+ amps_tcps_set_ssl_error(me, rc, sysError);
1141
1233
  }
1142
1234
 
1143
1235
  AMPS_UNLOCK(&me->lock);
@@ -1176,42 +1268,12 @@ amps_result amps_tcps_handle_disconnect(
1176
1268
  #ifndef _WIN32
1177
1269
  pthread_cleanup_pop(0);
1178
1270
  #endif
1179
- /* close what we have right now. */
1180
- if (ssl)
1271
+ // Use our close function to shutdown socket and SSL
1272
+ int rc = amps_tcps_close_all(fd, ssl);
1273
+ if (rc < 0)
1181
1274
  {
1182
- int rc = _amps_SSL_shutdown(ssl);
1183
1275
  int sysError = GET_ERRNO;
1184
- if (rc == 0 && fd != AMPS_INVALID_SOCKET)
1185
- {
1186
- // attempt to wait for the server to send back the matching close notify.
1187
- struct timeval tv;
1188
- fd_set readfds, exceptfds;
1189
- tv.tv_sec = 0;
1190
- tv.tv_usec = 10000;
1191
- FD_ZERO(&readfds);
1192
- FD_SET(fd, &readfds);
1193
- FD_ZERO(&exceptfds);
1194
- FD_SET(fd, &exceptfds);
1195
- #ifdef _WIN32
1196
- select(1, &readfds, 0, &exceptfds, &tv);
1197
- #else
1198
- select(fd + 1, &readfds, 0, &exceptfds, &tv);
1199
- #endif
1200
- rc = _amps_SSL_shutdown(ssl);
1201
- }
1202
- if (rc < 0)
1203
- {
1204
- amps_tcps_set_ssl_error(me, rc, sysError);
1205
- }
1206
- }
1207
- if (fd != AMPS_INVALID_SOCKET)
1208
- {
1209
- shutdown(fd, SHUT_RDWR);
1210
- closesocket(fd);
1211
- }
1212
- if (ssl)
1213
- {
1214
- _amps_SSL_free(ssl);
1276
+ amps_tcps_set_ssl_error(me, rc, sysError);
1215
1277
  }
1216
1278
 
1217
1279
  /* first let waiters know that we've failed. */
@@ -1249,23 +1311,27 @@ amps_result amps_tcps_handle_disconnect(
1249
1311
  goto error;
1250
1312
  }
1251
1313
 
1252
- #ifndef _WIN32
1314
+ #ifdef _WIN32
1315
+ HANDLE tidH = (AMPS_CURRENT_THREAD() == me->thread) ? me->threadH : NULL;
1316
+ #else
1253
1317
  pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cancelState);
1318
+ void* vpTid = (void*)(pthread_self());
1254
1319
  #endif
1255
1320
  /* Call the disconect handler. */
1256
1321
  result = me->disconnectHandler(me, me->disconnectHandlerUserData);
1257
- #ifndef _WIN32
1258
- pthread_setcancelstate(cancelState, &unusedCancelState);
1259
- #endif
1260
1322
  if (result == AMPS_E_OK)
1261
1323
  {
1262
- result = AMPS_E_RETRY;
1324
+ #ifdef _WIN32
1325
+ if (tidH)
1326
+ {
1327
+ amps_tcps_set_thread_key(tidH);
1328
+ }
1329
+ #else
1330
+ amps_tcps_set_thread_key(vpTid);
1331
+ #endif
1263
1332
  }
1264
1333
 
1265
1334
  error:
1266
- #ifndef _WIN32
1267
- pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cancelState);
1268
- #endif
1269
1335
  AMPS_UNLOCK(&me->lock);
1270
1336
  #ifndef _WIN32
1271
1337
  pthread_cleanup_pop(0);
@@ -1460,12 +1526,13 @@ int amps_tcps_locked_read(amps_tcps_t* me_,
1460
1526
  FD_SET(fd, &exceptfds);
1461
1527
  AMPS_UNLOCK(&me_->sendLock);
1462
1528
  #ifdef _WIN32
1463
- if (select(1, &readfds, 0, &exceptfds, &tv) == 0)
1529
+ rc = select(1, &readfds, 0, &exceptfds, &tv);
1464
1530
  #else
1465
- if (select(fd + 1, &readfds, 0, &exceptfds, &tv) == 0)
1531
+ rc = select(fd + 1, &readfds, 0, &exceptfds, &tv);
1466
1532
  #endif
1533
+ if (rc <= 0)
1467
1534
  {
1468
- return 0;
1535
+ return rc;
1469
1536
  }
1470
1537
  AMPS_LOCK(&me_->sendLock);
1471
1538
  if (me_->disconnecting || fd != me_->fd || !me_->ssl
@@ -1492,6 +1559,7 @@ int amps_tcps_locked_read(amps_tcps_t* me_,
1492
1559
  {
1493
1560
  if (*pErrorcode_ == AMPS_SSL_ERROR_WANT_READ)
1494
1561
  {
1562
+ *pErrorcode_ = 0;
1495
1563
  return 0;
1496
1564
  }
1497
1565
  // End of stream
@@ -1503,12 +1571,12 @@ int amps_tcps_locked_read(amps_tcps_t* me_,
1503
1571
  #ifdef _WIN32
1504
1572
  DWORD amps_tcps_threaded_reader(void* userData)
1505
1573
  {
1506
- DWORD self = GetCurrentThreadId();
1507
- HANDLE selfH = GetCurrentThread();
1574
+ AMPS_THREAD_ID tid = AMPS_CURRENT_THREAD();
1575
+ HANDLE tidH = GetCurrentThread();
1508
1576
  amps_tcps_t* me = (amps_tcps_t*)userData;
1509
1577
  if (me->threadCreatedCallback)
1510
1578
  {
1511
- amps_result result = me->threadCreatedCallback(selfH,
1579
+ amps_result result = me->threadCreatedCallback(tidH,
1512
1580
  me->threadCreatedCallbackUserData);
1513
1581
  AMPS_IEX(&me->threadCreatedCallbackResult, (long)result);
1514
1582
  if (result != AMPS_E_OK)
@@ -1525,8 +1593,9 @@ void* amps_tcps_threaded_reader(void* userData)
1525
1593
  {
1526
1594
  int unusedCancelState = 0;
1527
1595
  amps_tcps_t* me = (amps_tcps_t*)userData;
1596
+ AMPS_THREAD_ID tid = AMPS_CURRENT_THREAD();
1528
1597
  /* Wait for pthread_create to set me->thread */
1529
- while (me->thread != pthread_self()
1598
+ while (me->thread != tid
1530
1599
  && !me->disconnecting
1531
1600
  && !me->destroying)
1532
1601
  {
@@ -1547,17 +1616,18 @@ void* amps_tcps_threaded_reader(void* userData)
1547
1616
  AMPS_IEX(&me->threadCreatedCallbackResult, (long)AMPS_E_OK);
1548
1617
  }
1549
1618
  #endif
1550
- unsigned char* buffer, *newBuffer, *end, *readPoint, *parsePoint;
1619
+ unsigned char* buffer = 0, *newBuffer = 0, *end = 0, *readPoint = 0;
1620
+ unsigned char* parsePoint = 0;
1551
1621
 
1552
- unsigned int msglenN;
1553
- unsigned long msglen, currentPosition, bytesRead = 0;
1554
- int received;
1622
+ unsigned int msglenN = 0;
1623
+ unsigned long msglen = 0, currentPosition = 0, bytesRead = 0;
1624
+ int received = 0;
1555
1625
  int cancelState = 0;
1556
1626
  const size_t BUFFER_SIZE = 16 * 1024;
1557
1627
  const unsigned MAX_MESSAGE_SIZE = 1024 * 1024 * 1024;
1558
1628
  amps_uint64_t lastReadTime = 0;
1559
1629
  amps_uint64_t lastIdleTime = 0;
1560
- amps_handle message;
1630
+ amps_handle message = 0;
1561
1631
 
1562
1632
  /* capture the connection version we are using now. */
1563
1633
  unsigned connectionVersion = me->connectionVersion;
@@ -1626,7 +1696,7 @@ void* amps_tcps_threaded_reader(void* userData)
1626
1696
  else
1627
1697
  {
1628
1698
  // errorcode could be an ssl error code, so check for errno
1629
- int sysError = GET_ERRNO;
1699
+ int sysError = received ? GET_ERRNO : 0;
1630
1700
  if (sysError)
1631
1701
  {
1632
1702
  errorcode = sysError;
@@ -1641,7 +1711,8 @@ void* amps_tcps_threaded_reader(void* userData)
1641
1711
  && ((errorcode != SOCK_ERRORCODE(ETIMEDOUT)
1642
1712
  && errorcode != SOCK_ERRORCODE(EWOULDBLOCK))
1643
1713
  || me->idleTimeMillis == 0))
1644
- || (me->readTimeoutMillis && amps_now() - lastReadTime > me->readTimeoutMillis))
1714
+ || (me->readTimeoutMillis
1715
+ && amps_now() - lastReadTime > me->readTimeoutMillis))
1645
1716
  {
1646
1717
  if (!me->disconnecting)
1647
1718
  {
@@ -1757,33 +1828,44 @@ cleanup:
1757
1828
  #endif
1758
1829
  amps_message_destroy(message);
1759
1830
  free(buffer);
1760
- if (me->destroying)
1761
- {
1762
- return 0;
1763
- }
1764
1831
  // If exiting as the reader thread, clear me->thread
1765
1832
  // Unless me-thread is 0, we're not getting joined, so detach
1766
- AMPS_THREAD_ID tid = AMPS_CURRENT_THREAD();
1767
1833
  if (me->threadExitCallback)
1768
1834
  {
1769
1835
  me->threadExitCallback(tid, me->threadExitCallbackUserData);
1770
1836
  }
1771
1837
  #if __STDC_VERSION__ >= 201100
1772
- if (atomic_compare_exchange_strong(&(me->thread), &tid, 0))
1838
+ AMPS_THREAD_ID mytid = tid;
1839
+ bool swapped = atomic_compare_exchange_strong(&(me->thread), &tid, 0);
1840
+ if (swapped || me->thread != 0)
1773
1841
  #elif defined(_WIN32)
1842
+ // This returns the initial value of me->thread
1774
1843
  if (InterlockedCompareExchange((volatile unsigned int*)(&(me->thread)),
1775
- (unsigned int)tid, (unsigned int)0))
1844
+ (unsigned int)tid, (unsigned int)0) != 0)
1776
1845
  #else
1846
+ AMPS_THREAD_ID mytid = tid;
1777
1847
  int swapped = (int)__sync_bool_compare_and_swap(&(me->thread), tid, 0);
1778
1848
  if (swapped || me->thread != 0)
1779
1849
  #endif
1780
1850
  {
1851
+ AMPS_INC_THREAD_COUNT(&amps_thread_detach_count);
1781
1852
  #ifdef _WIN32
1782
1853
  CloseHandle((HANDLE)(AMPS_IEX(&(me->threadH), 0)));
1783
1854
  #else
1784
- pthread_detach(tid);
1855
+ pthread_detach(mytid);
1785
1856
  #endif
1857
+ amps_tcps_set_thread_key(NULL);
1786
1858
  }
1859
+ #ifdef _WIN32
1860
+ else
1861
+ {
1862
+ tidH = TlsGetValue(amps_tcps_get_thread_key());
1863
+ if (tidH != NULL)
1864
+ {
1865
+ CloseHandle(tidH);
1866
+ }
1867
+ }
1868
+ #endif
1787
1869
 
1788
1870
  return 0;
1789
1871
  }
@@ -1798,6 +1880,12 @@ amps_tcps_attempt_reconnect(amps_handle transport, unsigned version)
1798
1880
  version = me->connectionVersion;
1799
1881
  }
1800
1882
  res = amps_tcps_handle_disconnect(me, version);
1883
+ if (res == AMPS_E_OK)
1884
+ {
1885
+ // We don't want non-receive threads detaching
1886
+ amps_tcps_set_thread_key(NULL);
1887
+ res = AMPS_E_RETRY;
1888
+ }
1801
1889
  return res;
1802
1890
  }
1803
1891