mns_network_tool.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // Copyright (C) 2015, Alibaba Cloud Computing
  2. #ifndef MNS_SDK_NETWORK_H
  3. #define MNS_SDK_NETWORK_H
  4. #include "mns_exception.h"
  5. #include "mns_common_tool.h"
  6. #include "mns_protocol.h"
  7. #include "mns_utils.h"
  8. #include <queue>
  9. #ifdef _WIN32
  10. #include "curl/curl.h"
  11. #else
  12. #include <curl/curl.h>
  13. #endif
  14. #include <iostream>
  15. #include <stdint.h>
  16. #include <fstream>
  17. #include <sstream>
  18. #include <map>
  19. #include <vector>
  20. namespace mns
  21. {
  22. namespace sdk
  23. {
  24. class MNSConnectionTool
  25. {
  26. public:
  27. MNSConnectionTool(const int32_t curlPoolSize, const int32_t connectTimeout,
  28. const int32_t timeout)
  29. : mConnectTimeout(connectTimeout)
  30. , mTimeout(timeout)
  31. , mCurlPoolSize(curlPoolSize)
  32. , mCurrentPoolSize(0)
  33. {
  34. }
  35. ~MNSConnectionTool();
  36. CURL* InvokeCurlConnection(bool& isLongConnection);
  37. void RevokeCurlConnection(CURL* curlConnection, const bool isLongConnection);
  38. private:
  39. int32_t mConnectTimeout;
  40. int32_t mTimeout;
  41. int32_t mCurlPoolSize;
  42. int32_t mCurrentPoolSize;
  43. WaitObject mWaitObject;
  44. std::queue<CURL*> mCurlPool;
  45. };
  46. typedef std::shared_ptr<MNSConnectionTool> MNSConnectionToolPtr;
  47. class MNSNetworkTool
  48. {
  49. public:
  50. static void SendRequest(const std::string& endpoint,
  51. Request& req,
  52. Response& resp,
  53. MNSConnectionToolPtr mnsConnTool);
  54. static std::string Signature(const std::string& method,
  55. const std::string& canonicalizedResource,
  56. const std::string& accessId,
  57. const std::string& accessKey,
  58. const std::map<std::string, std::string>& headers);
  59. protected:
  60. static std::string Sign(const char* data, const std::string& accessId, const std::string& accessKey);
  61. static std::string Base64(const char* input, unsigned int& length);
  62. static void Base64Encoding(std::istream&, std::ostream&, char makeupChar = '=',
  63. const char *alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
  64. };
  65. }
  66. }
  67. #endif