* server_name_buf,
47 size_tserver_name_buflen,
48 const char*
constskip_servers[],
550
, server_name_buf, server_name_buflen,
62errstr ? errstr :
"Unknown error", errmsg_buflen - 1);
70 static const char* s_StatusStr[] = {
73 "Service name not found in LB",
74 "No matching LB DNS entry found",
75 "Service currently down/unavailable" 77 size_t i= (size_t) status;
78 return i>
sizeof(s_StatusStr)/
sizeof(s_StatusStr[0]) ? 0 : s_StatusStr[
i];
82 static int s_IsSkipHost(
unsigned inthost,
unsigned intskip_host)
84 returnskip_host == host
94 if(*a_skip == *n_skip) {
95 size_t count= *a_skip + 10;
98? realloc((
void*)(*skip),
count*
sizeof(*temp))
105 if(*a_skip != *n_skip)
106(*skip)[(*n_skip)++] =
info;
115 const char*
constskip_servers[],
117 char* server_name_buf,
118 size_tserver_name_buflen,
121 static const char kPrefix[] =
"DB_IP__";
122 size_t len,
n, a_skip, n_skip;
126 unsigned shortx_port;
136 if(server_name_buf) {
137 assert(server_name_buflen);
138server_name_buf[0] =
'\0';
142memset(conn_point, 0,
sizeof(*conn_point));
143 if(!lb_name || !*lb_name) {
149 if(strchr(lb_name,
'.')) {
162 for(
n= 0; !
failed&& skip_servers[
n];
n++) {
163 const char* server = skip_servers[
n];
164 if(!(
len= strlen(server))) {
169c = strstr(server +
sizeof(
kPrefix)-1,
"__");
171 size_t i= (size_t)(c - server) - (
sizeof(
kPrefix)-1);
174 char* s = temp +
i;
176 memmove(s, s + 1, strlen(s + 1) + 1);
201x_host = temp->
host;
206x_port = temp->
port;
207}
else if(!resolved) {
214 s_AddSkip(&skip, &a_skip, &n_skip, x_host
227}
else if(server != skip_servers[
n]) {
230 info->port = x_port;
231 if(server != skip_servers[
n])
232 free((
void*) server);
240x_host = preference->
host;
241x_port = preference->
port;
242 if((x_pref = preference->
pref) < 0.0)
244 else if(x_pref >= 100.0)
255x_host, x_port, x_pref, net_info,
262x_host, x_port, x_pref, net_info,
273 for(
n= 0;
n< n_skip;
n++) {
274 if(x_host == skip[
n]->host) {
280 if(!
failed&& skip_servers) {
281 for(
n= 0; (c = skip_servers[
n]) != 0;
n++) {
288}
else if(conn_point != &cp) {
293 if(!
failed&& server_name_buf)
294 strncpy0(server_name_buf, lb_name, server_name_buflen - 1);
304 if((s = strchr(
buf,
':')) != 0)
305 memmove(s + 1, s, strlen(s) + 1);
306 for(
n= 0;
n<
len;
n++) {
307 if(
buf[
n] ==
'.'||
buf[
n] ==
':')
311 strncpy0(server_name_buf,
buf, server_name_buflen - 1);
313}
else if(
info->host) {
317 strncpy0(server_name_buf, c, server_name_buflen - 1);
330 for(
n= 0;
n< n_skip;
n++)
331 free((
void*) skip[
n]);
333 free((
void*) skip);
338 return failed? 0 : (server_name_buf ? server_name_buf : lb_name);
SSERV_Info * SERV_CreateStandaloneInfo(unsigned int host, unsigned short port)
SSERV_InfoCPtr SERV_GetNextInfo(SERV_ITER iter)
Same as "SERV_GetNextInfoEx(., 0)" â i.e.
void SERV_Close(SERV_ITER iter)
Deallocate the iterator.
SSERV_Info * SERV_CreateDnsInfo(unsigned int host)
SERV_ITER SERV_Open(const char *service, TSERV_Type types, unsigned int preferred_host, const SConnNetInfo *net_info)
Same as "SERV_OpenEx(., ., ., ., 0, 0)" â i.e.
#define SERV_LOCALHOST
Special values for the "preferred_host" parameter.
@ fSERV_ReverseDns
LB-DNS translation.
@ fSERV_Promiscuous
Evrthng and the kitchen sink.
const char * SOCK_StringToHostPort(const char *str, unsigned int *host, unsigned short *port)
Read (skipping leading blanks) "[host][:port]" from a string stopping at either EOL or a blank charac...
size_t SOCK_HostPortToString(unsigned int host, unsigned short port, char *buf, size_t bufsize)
Print numeric string "host:port" into a buffer provided, not to exceed 'bufsize' bytes (including the...
unsigned int SOCK_GetLoopbackAddress(void)
Get IPv4 loopback address.
unsigned int SOCK_gethostbyname(const char *hostname)
Same as SOCK_gethostbynameEx(,<current API data logging>)
unsigned int SOCK_GetLocalHostAddress(ESwitch reget)
Same as SOCK_GetLocalHostAddress6() only strictly for IPv4.
#define NCBI_TIME_INFINITE
SConnNetInfo * ConnNetInfo_Create(const char *service)
void ConnNetInfo_Destroy(SConnNetInfo *net_info)
SSERV_Info * SERV_GetInfoP(const char *service, TSERV_Type types, unsigned int preferred_host, unsigned short preferred_port, double preference, const SConnNetInfo *net_info, SSERV_InfoCPtr skip[], size_t n_skip, int external, const char *arg, const char *val, HOST_INFO *hinfo)
char * strncpy0(char *s1, const char *s2, size_t n)
Copy not more than "n" characters from string "s2" into "s1", and return the result,...
static void s_AddSkip(SSERV_InfoCPtr **skip, size_t *a_skip, size_t *n_skip, SSERV_Info *info)
const char * DBLB_GetServerName(const char *lb_name, char *server_name_buf, size_t server_name_buflen, const char *const skip_servers[], char *errmsg_buf, size_t errmsg_buflen)
const char * DBLB_StatusStr(EDBLB_Status status)
const char * DBLB_GetServer(const char *lb_name, TDBLB_Flags flags, const SDBLB_Preference *preference, const char *const skip_servers[], SDBLB_ConnPoint *conn_point, char *server_name_buf, size_t server_name_buflen, EDBLB_Status *result)
static int s_IsSkipHost(unsigned int host, unsigned int skip_host)
@ fDBLB_AllowFallbackToStandby
SSERV_Info * SERV_CopyInfoEx(const SSERV_Info *orig, const char *name)
const char * SERV_NameOfInfo(const SSERV_Info *info)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4