- Config->ConfValue(Config->config_data, "bind", "port", count, configToken, MAXBUF);
- Config->ConfValue(Config->config_data, "bind", "address", count, Addr, MAXBUF);
- Config->ConfValue(Config->config_data, "bind", "type", count, Type, MAXBUF);
-
- if ((!*Type) || (!strcmp(Type,"clients")))
- {
- irc::commasepstream portrange(configToken);
- std::string portno = "*";
- while ((portno = portrange.GetToken()) != "")
- {
- std::string::size_type dash = portno.rfind('-');
- if (dash != std::string::npos)
- {
- this->Log(DEBUG,"Port range, %s", portno.c_str());
- /* Range of ports */
- std::string sbegin = portno.substr(0, dash);
- std::string send = portno.substr(dash+1, portno.length());
- long begin = atoi(sbegin.c_str());
- long end = atoi(send.c_str());
- if ((begin < 0) || (end < 0) || (begin > 65535) || (end > 65535) || (begin >= end))
- {
- this->Log(DEFAULT,"WARNING: Port range \"%d-%d\" discarded. begin >= end, or begin/end out of range.", begin, end);
- }
- else
- {
- for (int portval = begin; portval <= end; ++portval)
- {
- if (!HasPort(portval, Addr))
- {
- ports_found++;
- Config->ports[clientportcount+InitialPortCount] = portval;
- if (*Addr == '*')
- *Addr = 0;
-
- strlcpy(Config->addrs[clientportcount+InitialPortCount],Addr,256);
- clientportcount++;
- this->Log(DEBUG,"NEW binding %s:%d [%s] from config (part of port range %s)",Addr, portval, Type, portno.c_str());
- }
- }
- }
- }
- else
- {
- this->Log(DEBUG,"Single port, %s", portno.c_str());
- /* Single port */
- if (!HasPort(atoi(portno.c_str()), Addr))
- {
- ports_found++;
- Config->ports[clientportcount+InitialPortCount] = atoi(portno.c_str());
- if (*Addr == '*')
- *Addr = 0;
- strlcpy(Config->addrs[clientportcount+InitialPortCount],Addr,256);
- clientportcount++;
- this->Log(DEBUG,"NEW binding %s:%s [%s] from config (single port)",Addr, portno.c_str(), Type);
- }
- }
- }
- }
-
- if (!bail)
- {
- int PortCount = clientportcount;
- if (PortCount)
- {
- BoundPortCount = stats->BoundPortCount;
- for (int count = InitialPortCount; count < InitialPortCount + PortCount; count++)
- {
- int fd = OpenTCPSocket();
- if (fd == ERROR)
- {
- this->Log(DEBUG,"Bad fd %d binding port [%s:%d]",fd,Config->addrs[count],Config->ports[count]);
- }
- else
- {
- Config->openSockfd[BoundPortCount] = new ListenSocket(this,fd,client,server,Config->ports[count],Config->addrs[count]);
- if (Config->openSockfd[BoundPortCount]->GetFd() > -1)
- {
- if (!SE->AddFd(Config->openSockfd[BoundPortCount]))
- {
- this->Log(DEFAULT,"ERK! Failed to add listening port to socket engine!");
- shutdown(Config->openSockfd[BoundPortCount]->GetFd(),2);
- close(Config->openSockfd[BoundPortCount]->GetFd());
- delete Config->openSockfd[BoundPortCount];
- }
- else
- BoundPortCount++;
- }
- }
- }
- return InitialPortCount + BoundPortCount;
- }
- else
- {
- this->Log(DEBUG,"There is nothing new to bind!");
- }
- return InitialPortCount;
- }