channel_arguments.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. /*
  2. *
  3. * Copyright 2015 gRPC authors.
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. *
  17. */
  18. #ifndef GRPCPP_SUPPORT_CHANNEL_ARGUMENTS_H
  19. #define GRPCPP_SUPPORT_CHANNEL_ARGUMENTS_H
  20. #include <list>
  21. #include <vector>
  22. #include <grpc/compression.h>
  23. #include <grpc/grpc.h>
  24. #include <grpcpp/resource_quota.h>
  25. #include <grpcpp/support/config.h>
  26. namespace grpc {
  27. class SecureChannelCredentials;
  28. namespace testing {
  29. class ChannelArgumentsTest;
  30. } // namespace testing
  31. /// Options for channel creation. The user can use generic setters to pass
  32. /// key value pairs down to C channel creation code. For gRPC related options,
  33. /// concrete setters are provided.
  34. class ChannelArguments {
  35. public:
  36. ChannelArguments();
  37. ~ChannelArguments();
  38. ChannelArguments(const ChannelArguments& other);
  39. ChannelArguments& operator=(ChannelArguments other) {
  40. Swap(other);
  41. return *this;
  42. }
  43. void Swap(ChannelArguments& other);
  44. /// Dump arguments in this instance to \a channel_args. Does not take
  45. /// ownership of \a channel_args.
  46. ///
  47. /// Note that the underlying arguments are shared. Changes made to either \a
  48. /// channel_args or this instance would be reflected on both.
  49. void SetChannelArgs(grpc_channel_args* channel_args) const;
  50. // gRPC specific channel argument setters
  51. /// Set target name override for SSL host name checking. This option should
  52. /// be used with caution in production.
  53. void SetSslTargetNameOverride(const std::string& name);
  54. // TODO(yangg) add flow control options
  55. /// Set the compression algorithm for the channel.
  56. void SetCompressionAlgorithm(grpc_compression_algorithm algorithm);
  57. /// Set the grpclb fallback timeout (in ms) for the channel. If this amount
  58. /// of time has passed but we have not gotten any non-empty \a serverlist from
  59. /// the balancer, we will fall back to use the backend address(es) returned by
  60. /// the resolver.
  61. void SetGrpclbFallbackTimeout(int fallback_timeout);
  62. /// Set a mutator for the underlying socket.
  63. void SetSocketMutator(grpc_socket_mutator* mutator);
  64. /// Set the string to prepend to the user agent.
  65. void SetUserAgentPrefix(const std::string& user_agent_prefix);
  66. /// Set the buffer pool to be attached to the constructed channel.
  67. void SetResourceQuota(const grpc::ResourceQuota& resource_quota);
  68. /// Set the max receive and send message sizes.
  69. void SetMaxReceiveMessageSize(int size);
  70. void SetMaxSendMessageSize(int size);
  71. /// Set LB policy name.
  72. /// Note that if the name resolver returns only balancer addresses, the
  73. /// grpclb LB policy will be used, regardless of what is specified here.
  74. void SetLoadBalancingPolicyName(const std::string& lb_policy_name);
  75. /// Set service config in JSON form.
  76. /// Primarily meant for use in unit tests.
  77. void SetServiceConfigJSON(const std::string& service_config_json);
  78. // Generic channel argument setter. Only for advanced use cases.
  79. /// Set an integer argument \a value under \a key.
  80. void SetInt(const std::string& key, int value);
  81. // Generic channel argument setter. Only for advanced use cases.
  82. /// Set a pointer argument \a value under \a key. Ownership is not
  83. /// transferred.
  84. void SetPointer(const std::string& key, void* value);
  85. /// Set a pointer argument \a value under \a key, transferring ownership of
  86. /// \a value to the \a ChannelArguments object. The \a vtable::Delete function
  87. /// is responsible for \a value cleanup/destruction when called.
  88. void SetPointerWithVtable(const std::string& key, void* value,
  89. const grpc_arg_pointer_vtable* vtable);
  90. /// Set a textual argument \a value under \a key.
  91. void SetString(const std::string& key, const std::string& value);
  92. /// Return (by value) a C \a grpc_channel_args structure which points to
  93. /// arguments owned by this \a ChannelArguments instance
  94. grpc_channel_args c_channel_args() const {
  95. grpc_channel_args out;
  96. out.num_args = args_.size();
  97. out.args = args_.empty() ? nullptr : const_cast<grpc_arg*>(&args_[0]);
  98. return out;
  99. }
  100. private:
  101. friend class grpc::SecureChannelCredentials;
  102. friend class grpc::testing::ChannelArgumentsTest;
  103. /// Default pointer argument operations.
  104. struct PointerVtableMembers {
  105. static void* Copy(void* in) { return in; }
  106. static void Destroy(void* /*in*/) {}
  107. static int Compare(void* a, void* b) {
  108. if (a < b) return -1;
  109. if (a > b) return 1;
  110. return 0;
  111. }
  112. };
  113. // Returns empty string when it is not set.
  114. std::string GetSslTargetNameOverride() const;
  115. std::vector<grpc_arg> args_;
  116. std::list<std::string> strings_;
  117. };
  118. } // namespace grpc
  119. #endif // GRPCPP_SUPPORT_CHANNEL_ARGUMENTS_H