Another good catch! The port mapping ports also have to be checked in a
similar manner

--
Afkham Azeez
Sent from my phone
On Apr 20, 2013 7:47 AM, "Nirmal Fernando" <[email protected]> wrote:

> Hi All,
>
> While looking into solve an issue, I saw another possible bug in Tribes'
> DefaultGroupManagement class.
>
> Currently, its canConnect method has following code portion:
>
> ============================================================
>
>                     InetAddress addr =
> InetAddress.getByName(member.getHostName());
>                     int httpPort = member.getHttpPort();
>                     if (log.isDebugEnabled()) {
>                         log.debug("HTTP Port=" + httpPort);
>                     }
>                     if (httpPort != -1) {
>                         SocketAddress httpSockaddr = new
> InetSocketAddress(addr, httpPort);
>                         new Socket().connect(httpSockaddr, 10000);
>                     }
>                     int httpsPort = member.getHttpsPort();
>                     if (log.isDebugEnabled()) {
>                         log.debug("HTTPS Port=" + httpsPort);
>                     }
>                     if (httpsPort != -1) {
>                         SocketAddress httpsSockaddr = new
> InetSocketAddress(addr, httpsPort);
>                         new Socket().connect(httpsSockaddr, 10000);
>                     }
>                     return true;
> =============================================================
>
> So, according to this code, if a member (for some reason) advertises both
> http and https ports as -1, DefaultGroupManagement won't complain anything,
> rather happily says that the member is reachable.
>
> IMO, this is a bug. It's a fair thing to say, if at least there's a one
> valid port, and that port is connectable, the member is reachable, but not
> if the both ports advertised are invalid.
>
> So I'd propose to add following code segment to fix the issue.
>
> ============================================================
>
>                     InetAddress addr =
> InetAddress.getByName(member.getHostName());
>                     int httpPort = member.getHttpPort();
>                     if (log.isDebugEnabled()) {
>                         log.debug("HTTP Port=" + httpPort);
>                     }
>                     if(httpPort == -1 && httpsPort == -1){
>                         // none of the ports are valid
>                         return false;
>                     }
>                     if (httpPort != -1) {
>                         SocketAddress httpSockaddr = new
> InetSocketAddress(addr, httpPort);
>                         new Socket().connect(httpSockaddr, 10000);
>                     }
>                     int httpsPort = member.getHttpsPort();
>                     if (log.isDebugEnabled()) {
>                         log.debug("HTTPS Port=" + httpsPort);
>                     }
>                     if (httpsPort != -1) {
>                         SocketAddress httpsSockaddr = new
> InetSocketAddress(addr, httpsPort);
>                         new Socket().connect(httpsSockaddr, 10000);
>                     }
>                     return true;
> ===========================================================
>
> Any concerns?
>
> --
>
> Thanks & regards,
> Nirmal
>
> Software Engineer- Platform Technologies Team, WSO2 Inc.
> Mobile: +94715779733
> Blog: http://nirmalfdo.blogspot.com/
>
> <http://nirmalfdo.blogspot.com/>
>
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to