73 if (!method_point.
size()) {
75 "Missing vectoring point in adaptation service definition");
79 method = parseMethod(method_point.
termedBuf());
80 point = parseVectPoint(method_point.
termedBuf());
83 "Unknown vectoring point '" << method_point <<
"' in adaptation service definition");
88 bypass = routing =
false;
91 bool grokkedUri =
false;
92 bool onOverloadSet =
false;
93 std::set<std::string> options;
96 const char *name = option;
97 const char *value =
"";
98 if (strcmp(option,
"0") == 0) {
102 }
else if (strcmp(option,
"1") == 0) {
107 char *eq = strstr(option,
"=");
108 const char *sffx = strstr(option,
"://");
109 if (!eq || (sffx && sffx < eq)) {
119 if (options.find(name) != options.end()) {
121 "Duplicate option \"" << name <<
"\" in adaptation service definition");
124 options.insert(name);
126 bool grokked =
false;
127 if (strcmp(name,
"bypass") == 0) {
128 grokked = grokBool(bypass, name, value);
129 }
else if (strcmp(name,
"routing") == 0)
130 grokked = grokBool(routing, name, value);
131 else if (strcmp(name,
"uri") == 0)
132 grokked = grokkedUri = grokUri(value);
133 else if (strcmp(name,
"ipv6") == 0) {
134 grokked = grokBool(ipv6, name, value);
135 if (grokked && ipv6 && !Ip::EnableIpv6)
137 }
else if (strcmp(name,
"max-conn") == 0)
138 grokked = grokLong(maxConn, name, value);
139 else if (strcmp(name,
"on-overload") == 0) {
140 grokked = grokOnOverload(onOverload, value);
141 onOverloadSet =
true;
142 }
else if (strcmp(name,
"connection-encryption") == 0) {
144 grokked = grokBool(
encrypt, name, value);
145 connectionEncryption.configure(
encrypt);
146 }
else if (strncmp(name,
"ssl", 3) == 0 || strncmp(name,
"tls-", 4) == 0) {
151 std::string tmp = name + (name[0] ==
's' ? 3 : 4);
154 secure.parse(tmp.c_str());
158 grokked = grokExtension(name, value);
170 if (secure.encryptTransport)
171 secure.parse(
"no-npn");
176 "No \"uri\" option in adaptation service definition");
181 "adaptation_service " << key <<
' ' <<
183 bypass << routing <<
' ' <<
195 if (!value || !*value) {
197 "empty adaptation service URI");
204 const char *schemeSuffix =
"://";
207 protocol=uri.substr(0,schemeEnd);
210 "service protocol is " << protocol);
212 if (protocol.size() == 0)
216 const char *s = uri.termedBuf() + protocol.size() + strlen(schemeSuffix);
220 bool have_port =
false;
225 if ((t = strchr(s,
']')) ==
nullptr)
230 if ((e = strchr(t,
':')) !=
nullptr) {
232 }
else if ((e = strchr(t,
'/')) !=
nullptr) {
238 if ((e = strchr(s,
':')) !=
nullptr) {
240 }
else if ((e = strchr(s,
'/')) !=
nullptr) {
250 if (secure.sslDomain.isEmpty())
251 secure.sslDomain.assign(host.rawBuf(), host.size());
259 if ((e = strchr(s,
'/')) !=
nullptr) {
261 const unsigned long p = strtoul(s, &t, 0);
266 port =
static_cast<int>(p);
286 "long resource name (>1024), probably wrong");
289 resource.assign(s, len + 1);