From: Glenn H. <tur...@us...> - 2004-06-16 15:45:07
|
Update of /cvsroot/smartfrog/core/components/slp/src/org/smartfrog/services/comm/slp/agents In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15458/src/org/smartfrog/services/comm/slp/agents Modified Files: UserAgent.java Log Message: Added interfaces for SmartFrog components. Reimplemented ServiceURL, fixing the problem with some URLs not being accepted. (Hopefully without introducing new errors). Removed duplicate code in UserAgent. Index: UserAgent.java =================================================================== RCS file: /cvsroot/smartfrog/core/components/slp/src/org/smartfrog/services/comm/slp/agents/UserAgent.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** UserAgent.java 15 Jun 2004 13:01:32 -0000 1.1 --- UserAgent.java 16 Jun 2004 15:44:49 -0000 1.2 *************** *** 138,208 **** "UA: Requested scope is NOT supported"); } ! SLPSrvReqMessage req = new SLPSrvReqMessage(type, scopesToUse, filter, locale); ! Vector receivers = findReceivers((Vector)scopesToUse.clone()); ! if(!receivers.isEmpty()) { ! DAInfo da; ! Iterator iter = receivers.iterator(); ! SLPMessageSender ms = new SLPMessageSender(this, CONFIG_SLP_MTU, CONFIG_RETRY, results); ! Vector additional = null; ! while(iter.hasNext() || additional != null) { ! if(!iter.hasNext()) { ! receivers = additional; ! iter = receivers.iterator(); ! additional = null; ! } ! da = (DAInfo)iter.next(); ! ! if(da.getHost().equals(CONFIG_SLP_MC_ADDR)) { ! //System.out.println("UserAgent -> Sending multicast"); ! req.setFlags(SLPMessageHeader.FLAG_MCAST); ! ms.sendSLPMessage(req, ! //address, CONFIG_SLP_AGENTPORT, ! da.getHost(), da.getPort(), CONFIG_MC_MAX, ! unicastCommunicator); ! } ! else { ! //System.out.println("UserAgent -> Sending to DA"); ! // If the DA is down, we should try to find another DA supporting ! // the wanted scopes, or in the worst case use multicast... ! // Currently the we go directly do multicast if a DA is down ! try { ! ms.sendSLPMessage(req, ! //address, CONFIG_SLP_AGENTPORT, ! da.getHost(), da.getPort(), CONFIG_RETRY_MAX, ! unicastCommunicator); ! }catch(ServiceLocationException se) { ! if(se.getErrorCode() == ServiceLocationException.DA_NOT_AVAILABLE) { ! DAs.remove(da.getHost()); ! // do multicast... ! // Should try to find another DA before going multicast... ! /* ! DAInfo mc = new DAInfo(CONFIG_SLP_MC_ADDR, CONFIG_SLP_PORT); ! if(!receivers.contains(mc)) { ! additional = mc; ! } ! */ ! ! // find another DA (or DAs)... ! additional = findReceivers(da.getScopes()); ! for(Iterator it = additional.iterator(); it.hasNext(); ) { ! if(receivers.contains(it.next())) { ! it.remove(); ! } ! } ! } ! else { ! // some other exception. ! throw se; ! } ! } ! } ! } ! } ! else { ! throw new ServiceLocationException(ServiceLocationException.SCOPE_NOT_SUPPORTED, ! "UA: Requested scope is NOT supported"); ! } // return the discovered service URLs --- 138,145 ---- "UA: Requested scope is NOT supported"); } ! SLPSrvReqMessage req = new SLPSrvReqMessage(type, scopesToUse, filter, locale); ! sendRequest(req, scopesToUse, results); // return the discovered service URLs *************** *** 227,301 **** SLPSrvTypeReqMessage req = new SLPSrvTypeReqMessage(NA, scopesToUse, locale); ! // find receivers. ! Vector receivers = findReceivers((Vector)scopesToUse.clone()); ! if(!receivers.isEmpty()) { ! DAInfo da; ! Iterator iter = receivers.iterator(); ! SLPMessageSender ms = new SLPMessageSender(this, CONFIG_SLP_MTU, CONFIG_RETRY, results); ! Vector additional = null; ! // send request to all receivers ! while(iter.hasNext() || additional != null) { ! if(!iter.hasNext()) { ! receivers = additional; ! iter = receivers.iterator(); ! additional = null; ! } ! da = (DAInfo)iter.next(); ! ! if(da.getHost().equals(CONFIG_SLP_MC_ADDR)) { ! //System.out.println("UserAgent -> Sending multicast"); ! req.setFlags(SLPMessageHeader.FLAG_MCAST); ! ms.sendSLPMessage(req, ! //address, CONFIG_SLP_AGENTPORT, ! da.getHost(), da.getPort(), CONFIG_MC_MAX, ! unicastCommunicator); ! } ! else { ! //System.out.println("UserAgent -> Sending to DA"); ! // If the DA is down, we should try to find another DA supporting ! // the wanted scopes, or in the worst case use multicast... ! // Currently the we go directly do multicast if a DA is down ! try { ! ms.sendSLPMessage(req, ! //address, CONFIG_SLP_AGENTPORT, ! da.getHost(), da.getPort(), CONFIG_RETRY_MAX, ! unicastCommunicator); ! }catch(ServiceLocationException se) { ! if(se.getErrorCode() == ServiceLocationException.DA_NOT_AVAILABLE) { ! DAs.remove(da.getHost()); ! // do multicast... ! // Should try to find another DA before going multicast... ! /* ! DAInfo mc = new DAInfo(CONFIG_SLP_MC_ADDR, CONFIG_SLP_PORT); ! if(!receivers.contains(mc)) { ! additional = mc; ! } ! */ ! ! // find another DA (or DAs)... ! additional = findReceivers(da.getScopes()); ! for(Iterator it = additional.iterator(); it.hasNext(); ) { ! if(receivers.contains(it.next())) { ! it.remove(); ! } ! } ! } ! else { ! // some other exception. ! throw se; ! } ! } ! } ! } ! } ! else { ! throw new ServiceLocationException(ServiceLocationException.SCOPE_NOT_SUPPORTED, ! "UA: Requested scope is NOT supported"); ! } // return the discovered service types return results; - - //throw new ServiceLocationException(ServiceLocationException.NOT_IMPLEMENTED); } --- 164,171 ---- SLPSrvTypeReqMessage req = new SLPSrvTypeReqMessage(NA, scopesToUse, locale); ! sendRequest(req, scopesToUse, results); // return the discovered service types return results; } *************** *** 543,546 **** --- 413,484 ---- } + private void sendRequest(SLPMessageHeader request, + Vector scopesToUse, + ServiceLocationEnumeration results) throws ServiceLocationException { + + Vector receivers = findReceivers((Vector)scopesToUse.clone()); + if(!receivers.isEmpty()) { + DAInfo da; + Iterator iter = receivers.iterator(); + SLPMessageSender ms = new SLPMessageSender(this, CONFIG_SLP_MTU, CONFIG_RETRY, results); + Vector additional = null; + while(iter.hasNext() || additional != null) { + if(!iter.hasNext()) { + receivers = additional; + iter = receivers.iterator(); + additional = null; + } + da = (DAInfo)iter.next(); + + if(da.getHost().equals(CONFIG_SLP_MC_ADDR)) { + //System.out.println("UserAgent -> Sending multicast"); + request.setFlags(SLPMessageHeader.FLAG_MCAST); + ms.sendSLPMessage(request, + da.getHost(), da.getPort(), CONFIG_MC_MAX, + unicastCommunicator); + } + else { + //System.out.println("UserAgent -> Sending to DA"); + // If the DA is down, we should try to find another DA supporting + // the wanted scopes, or in the worst case use multicast... + // Currently the we go directly do multicast if a DA is down + try { + ms.sendSLPMessage(request, + da.getHost(), da.getPort(), CONFIG_RETRY_MAX, + unicastCommunicator); + }catch(ServiceLocationException se) { + if(se.getErrorCode() == ServiceLocationException.DA_NOT_AVAILABLE) { + DAs.remove(da.getHost()); + // do multicast... + // Should try to find another DA before going multicast... + /* + DAInfo mc = new DAInfo(CONFIG_SLP_MC_ADDR, CONFIG_SLP_PORT); + if(!receivers.contains(mc)) { + additional = mc; + } + */ + + // find another DA (or DAs)... + additional = findReceivers(da.getScopes()); + for(Iterator it = additional.iterator(); it.hasNext(); ) { + if(receivers.contains(it.next())) { + it.remove(); + } + } + } + else { + // some other exception. + throw se; + } + } + } + } + } + else { + throw new ServiceLocationException(ServiceLocationException.SCOPE_NOT_SUPPORTED, + "UA: Requested scope is NOT supported"); + } + } + protected void writeLog(String message) { String toWrite; |