<html>
    <head>
      <base href="http://www.jacorb.org/bugzilla/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - BiDir IIOP fails when client creates a callback IOR with alternate addresses"
   href="http://www.jacorb.org/bugzilla/show_bug.cgi?id=1027">1027</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>BiDir IIOP fails when client creates a callback IOR with alternate addresses
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>JacORB
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>3.7
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>minor
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P5
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>ORB
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>jacorb-bugs@lists.spline.inf.fu-berlin.de
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>mesnierp@ociweb.com
          </td>
        </tr></table>
      <p>
        <div>
        <pre>When the client is on a multi-homed host, and the listen endpoint is defaulted,
The BiDirConnectionClientInterceptor will create a service context containing
only the primary address, so the server interceptor synthesizes a profile with
only one address, which is then added to the connection cache. Later, the
client sends a callback IOR that contains 1 or more alternate addresses as
Tagged Components. This means that when the server wants to invoke on the
callback, the ClientConnectionManager fails to find the previously added
connection since the profile sans-alternates is not equal to the profile
with-alternates, even though the primary addresses match.

It turns out that IIOPProfile has a "final" value called
checkAlternateAddresses that in the case of a defaulted listen endpoint is set
to false, but later the IIOPListener object calls a method,
addAllWildcardAddresses, which appends the remaining interface addresses as
alternates. 

My solution is to remove the finality from checkAlternateAddresses and set it
to true if there are indeed extra addresses to add to the alternates. I'll
attach a patch shortly.

BTW, I believe the table managed by the ClientConnectionManager is
inappropriately keyed. It is keyed with a Profile, which contains possibly
multiple addresses, which in turn may relate to multiple connections as well as
non-connection related stuff. I think the connections table should be keyed by
an address, which had it been so, the need to pass multiple alternate addresses
in the bidir service context goes away. This would require some additional
refactoring inside the connection manager, but I don't think there are any
interface changes to affect any other classes.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>