struct hostent *nodehost;
char thishostname[EI_MAXHOSTNAMELEN + 1] = "";
char thisnodename[MAXNODELEN + 1];
+ char thisalivename[MAXNODELEN + 1];
+ char *atsign;
/* zero out the struct before we use it */
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(prefs.port);
- if (strchr(prefs.nodename, '@')) {
+ /* copy the prefs.nodename into something we can modify */
+ strncpy(thisalivename, prefs.nodename, MAXNODELEN);
+
+ if ((atsign = strchr(thisalivename, '@'))) {
/* we got a qualified node name, don't guess the host/domain */
snprintf(thisnodename, MAXNODELEN + 1, "%s", prefs.nodename);
+ /* truncate the alivename at the @ */
+ *atsign = '\0';
} else {
#ifdef WIN32
if ((nodehost = gethostbyaddr((const char *) &server_addr.sin_addr.s_addr, sizeof(server_addr.sin_addr.s_addr), AF_INET)))
#else
- if ((nodehost = gethostbyaddr((const char *) &server_addr.sin_addr.s_addr, sizeof(server_addr.sin_addr.s_addr), AF_INET)))
+ if ((nodehost = gethostbyaddr((const char *) &server_addr.sin_addr.s_addr, sizeof(server_addr.sin_addr.s_addr), AF_INET)))
#endif
- memcpy(thishostname, nodehost->h_name, EI_MAXHOSTNAMELEN);
+ memcpy(thishostname, nodehost->h_name, EI_MAXHOSTNAMELEN);
- if (zstr_buf(thishostname)) {
+ if (zstr_buf(thishostname) || !strncasecmp(prefs.ip, "0.0.0.0", 7)) {
gethostname(thishostname, EI_MAXHOSTNAMELEN);
}
/* init the ei stuff */
- if (ei_connect_xinit(ec, thishostname, prefs.nodename, thisnodename, (Erl_IpAddr) (&server_addr.sin_addr.s_addr), prefs.cookie, 0) < 0) {
+ if (ei_connect_xinit(ec, thishostname, thisalivename, thisnodename, (Erl_IpAddr) (&server_addr.sin_addr.s_addr), prefs.cookie, 0) < 0) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to init ei connection\n");
return SWITCH_STATUS_FALSE;
}