From 61af34839251f8c20f4bbdfb1395d9d76892b3d9 Mon Sep 17 00:00:00 2001 From: jehan Date: Tue, 16 Sep 2008 12:53:04 +0000 Subject: [PATCH] create package sipproxy and move code tunneling sip to jxta from core to this new package git-svn-id: svn+ssh://svn.savannah.nongnu.org/linphone/trunk@19 3f6dc0c8-ddfe-455d-9043-3cd528dc4637 --- .../p2pproxy/core/NetworkResources.java | 2 +- .../p2pproxy/core/P2pProxyInstanceImpl.java | 1 + .../linphone/p2pproxy/core/P2pProxyMain.java | 1 + .../media/jxtaudpproxy/SdpProcessorImpl.java | 6 +- .../media/rtprelay/IceSdpProcessorImpl.java | 4 +- .../core/media/rtprelay/SdpProcessorImpl.java | 2 +- .../core/{ => sipproxy}/SdpProcessor.java | 2 +- .../{ => sipproxy}/SipProxyRegistrar.java | 130 +++--------------- .../SipProxyRegistrarMBean.java | 2 +- .../core/utils/AccountManagerCli.java | 2 +- 10 files changed, 29 insertions(+), 123 deletions(-) rename p2pproxy/src/org/linphone/p2pproxy/core/{ => sipproxy}/SdpProcessor.java (96%) rename p2pproxy/src/org/linphone/p2pproxy/core/{ => sipproxy}/SipProxyRegistrar.java (74%) rename p2pproxy/src/org/linphone/p2pproxy/core/{ => sipproxy}/SipProxyRegistrarMBean.java (96%) diff --git a/p2pproxy/src/org/linphone/p2pproxy/core/NetworkResources.java b/p2pproxy/src/org/linphone/p2pproxy/core/NetworkResources.java index b9588df86..efdc7e0b7 100644 --- a/p2pproxy/src/org/linphone/p2pproxy/core/NetworkResources.java +++ b/p2pproxy/src/org/linphone/p2pproxy/core/NetworkResources.java @@ -46,7 +46,7 @@ public class NetworkResources { private final JxtaNetworkManager mJxtaNetworkManager; private final static Logger mLog = Logger.getLogger(NetworkResources.class); private State mState = State.idle; - NetworkResources(String aUserName, JxtaNetworkManager aJxtaNetworkManager) throws IOException { + public NetworkResources(String aUserName, JxtaNetworkManager aJxtaNetworkManager) throws IOException { mJxtaNetworkManager = aJxtaNetworkManager; mInputPipe = mJxtaNetworkManager.createPipe(PIPE_ID+"-"+aUserName, aUserName, mMessageDispatcher); } diff --git a/p2pproxy/src/org/linphone/p2pproxy/core/P2pProxyInstanceImpl.java b/p2pproxy/src/org/linphone/p2pproxy/core/P2pProxyInstanceImpl.java index dc37431a3..d116bf35c 100644 --- a/p2pproxy/src/org/linphone/p2pproxy/core/P2pProxyInstanceImpl.java +++ b/p2pproxy/src/org/linphone/p2pproxy/core/P2pProxyInstanceImpl.java @@ -38,6 +38,7 @@ import org.linphone.p2pproxy.api.P2pProxyInstance; import org.linphone.p2pproxy.api.P2pProxyManagement; import org.linphone.p2pproxy.api.P2pProxyNetworkProbe; import org.linphone.p2pproxy.api.P2pProxyRtpRelayManagement; +import org.linphone.p2pproxy.core.sipproxy.SipProxyRegistrar; import org.zoolu.net.SocketAddress; import org.zoolu.sip.provider.SipProvider; diff --git a/p2pproxy/src/org/linphone/p2pproxy/core/P2pProxyMain.java b/p2pproxy/src/org/linphone/p2pproxy/core/P2pProxyMain.java index ba4c10965..633b91d3f 100644 --- a/p2pproxy/src/org/linphone/p2pproxy/core/P2pProxyMain.java +++ b/p2pproxy/src/org/linphone/p2pproxy/core/P2pProxyMain.java @@ -39,6 +39,7 @@ import org.apache.log4j.PropertyConfigurator; import org.linphone.p2pproxy.api.P2pProxyException; import org.linphone.p2pproxy.api.P2pProxyManagement; import org.linphone.p2pproxy.core.media.rtprelay.RtpRelayService; +import org.linphone.p2pproxy.core.sipproxy.SipProxyRegistrar; import org.zoolu.sip.provider.SipStack; public class P2pProxyMain implements P2pProxyMainMBean { diff --git a/p2pproxy/src/org/linphone/p2pproxy/core/media/jxtaudpproxy/SdpProcessorImpl.java b/p2pproxy/src/org/linphone/p2pproxy/core/media/jxtaudpproxy/SdpProcessorImpl.java index 0213a23a4..19005ccfa 100644 --- a/p2pproxy/src/org/linphone/p2pproxy/core/media/jxtaudpproxy/SdpProcessorImpl.java +++ b/p2pproxy/src/org/linphone/p2pproxy/core/media/jxtaudpproxy/SdpProcessorImpl.java @@ -31,9 +31,9 @@ import org.linphone.p2pproxy.api.P2pProxyException; import org.linphone.p2pproxy.core.Configurator; import org.linphone.p2pproxy.core.NetworkResources; -import org.linphone.p2pproxy.core.SdpProcessor; -import org.linphone.p2pproxy.core.SipProxyRegistrar; -import org.linphone.p2pproxy.core.SipProxyRegistrar.Registration; +import org.linphone.p2pproxy.core.sipproxy.SdpProcessor; +import org.linphone.p2pproxy.core.sipproxy.SipProxyRegistrar; +import org.linphone.p2pproxy.core.sipproxy.SipProxyRegistrar.Registration; import org.zoolu.sdp.AttributeField; import org.zoolu.sdp.ConnectionField; import org.zoolu.sdp.MediaDescriptor; diff --git a/p2pproxy/src/org/linphone/p2pproxy/core/media/rtprelay/IceSdpProcessorImpl.java b/p2pproxy/src/org/linphone/p2pproxy/core/media/rtprelay/IceSdpProcessorImpl.java index 98337c27b..7a0b793db 100644 --- a/p2pproxy/src/org/linphone/p2pproxy/core/media/rtprelay/IceSdpProcessorImpl.java +++ b/p2pproxy/src/org/linphone/p2pproxy/core/media/rtprelay/IceSdpProcessorImpl.java @@ -28,8 +28,8 @@ import net.jxta.pipe.OutputPipe; import org.apache.log4j.Logger; import org.linphone.p2pproxy.api.P2pProxyException; import org.linphone.p2pproxy.api.P2pProxyRtpRelayManagement; -import org.linphone.p2pproxy.core.SdpProcessor; -import org.linphone.p2pproxy.core.SipProxyRegistrar.Registration; +import org.linphone.p2pproxy.core.sipproxy.SdpProcessor; +import org.linphone.p2pproxy.core.sipproxy.SipProxyRegistrar.Registration; import org.zoolu.sdp.AttributeField; import org.zoolu.sdp.ConnectionField; import org.zoolu.sdp.MediaDescriptor; diff --git a/p2pproxy/src/org/linphone/p2pproxy/core/media/rtprelay/SdpProcessorImpl.java b/p2pproxy/src/org/linphone/p2pproxy/core/media/rtprelay/SdpProcessorImpl.java index e95c07cc4..0618b45d8 100644 --- a/p2pproxy/src/org/linphone/p2pproxy/core/media/rtprelay/SdpProcessorImpl.java +++ b/p2pproxy/src/org/linphone/p2pproxy/core/media/rtprelay/SdpProcessorImpl.java @@ -25,7 +25,7 @@ import net.jxta.pipe.OutputPipe; import org.apache.log4j.Logger; import org.linphone.p2pproxy.api.P2pProxyException; import org.linphone.p2pproxy.api.P2pProxyRtpRelayManagement; -import org.linphone.p2pproxy.core.SdpProcessor; +import org.linphone.p2pproxy.core.sipproxy.SdpProcessor; import org.zoolu.sdp.AttributeField; import org.zoolu.sdp.MediaDescriptor; import org.zoolu.sdp.SessionDescriptor; diff --git a/p2pproxy/src/org/linphone/p2pproxy/core/SdpProcessor.java b/p2pproxy/src/org/linphone/p2pproxy/core/sipproxy/SdpProcessor.java similarity index 96% rename from p2pproxy/src/org/linphone/p2pproxy/core/SdpProcessor.java rename to p2pproxy/src/org/linphone/p2pproxy/core/sipproxy/SdpProcessor.java index c23a74e74..ca553b184 100644 --- a/p2pproxy/src/org/linphone/p2pproxy/core/SdpProcessor.java +++ b/p2pproxy/src/org/linphone/p2pproxy/core/sipproxy/SdpProcessor.java @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -package org.linphone.p2pproxy.core; +package org.linphone.p2pproxy.core.sipproxy; diff --git a/p2pproxy/src/org/linphone/p2pproxy/core/SipProxyRegistrar.java b/p2pproxy/src/org/linphone/p2pproxy/core/sipproxy/SipProxyRegistrar.java similarity index 74% rename from p2pproxy/src/org/linphone/p2pproxy/core/SipProxyRegistrar.java rename to p2pproxy/src/org/linphone/p2pproxy/core/sipproxy/SipProxyRegistrar.java index c2ac4cb90..286ebcb1f 100644 --- a/p2pproxy/src/org/linphone/p2pproxy/core/SipProxyRegistrar.java +++ b/p2pproxy/src/org/linphone/p2pproxy/core/sipproxy/SipProxyRegistrar.java @@ -18,7 +18,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -package org.linphone.p2pproxy.core; +package org.linphone.p2pproxy.core.sipproxy; import java.io.File; @@ -44,6 +44,11 @@ import org.linphone.p2pproxy.api.P2pProxyException; import org.linphone.p2pproxy.api.P2pProxyRtpRelayManagement; import org.linphone.p2pproxy.api.P2pProxyUserNotFoundException; +import org.linphone.p2pproxy.core.Configurator; +import org.linphone.p2pproxy.core.JxtaNetworkManager; +import org.linphone.p2pproxy.core.NetworkResources; +import org.linphone.p2pproxy.core.P2pProxyAccountManagementMBean; +import org.linphone.p2pproxy.core.P2pProxyAdvertisementNotFoundException; import org.linphone.p2pproxy.core.media.rtprelay.MediaType; import org.linphone.p2pproxy.core.media.rtprelay.SdpProcessorImpl; import org.zoolu.sip.address.NameAddress; @@ -120,6 +125,9 @@ public class SipProxyRegistrar implements SipProviderListener,PipeMsgListener,Si proxyRequest(mProvider, mMessage); } } else { + //1 remove via header + SipUtils.removeVia(mProvider,mMessage); + //2 process response proxyResponse(mProvider, mMessage); } synchronized (SipProxyRegistrar.this) { @@ -187,7 +195,7 @@ public class SipProxyRegistrar implements SipProviderListener,PipeMsgListener,Si lPendingSipMessageTask.getFuture().cancel(true); mCancalableTaskTab.remove(lCallId); - removeVia(mProvider,lPendingSipMessageTask.getMessage()); + SipUtils.removeVia(mProvider,lPendingSipMessageTask.getMessage()); // accept cancel Message lCancelResp = MessageFactory.createResponse(aMessage,200,"ok",null); TransactionServer lCancelTransactionServer = new TransactionServer(mProvider,aMessage,null); @@ -212,60 +220,9 @@ public class SipProxyRegistrar implements SipProviderListener,PipeMsgListener,Si ////Proxy methods ///////////////////////////////////////////////////////////////////// private void proxyResponse(SipProvider aProvider, Message aMessage) throws NumberFormatException, InterruptedException, P2pProxyException, IOException { - //1 remove via header - removeVia(aProvider,aMessage); - String lFrom = aMessage.getFromHeader().getNameAddress().getAddress().toString(); - mSdpProcessor.processSdpBeforeSendingToPipe(aMessage); - OutputPipe lOutputPipe = sendMessageToPipe(lFrom,aMessage.toString()); - mSdpProcessor.processSdpAfterSentToPipe( aMessage,lOutputPipe); - } - private void proxyRequest(SipProvider aProvider, Message aMessage) throws Exception { - - if (aMessage.isAck() && aMessage.getToHeader().getTag() == null) { - // just terminate the Invite transaction - return; - } - - if (aMessage.isInvite() == true) { - // 100 trying - TransactionServer lTransactionServer = new TransactionServer(aProvider,aMessage,null); - Message l100Trying = MessageFactory.createResponse(aMessage,100,"trying",null); - lTransactionServer.respondWith(l100Trying); - } - - String lTo = aMessage.getToHeader().getNameAddress().getAddress().toString(); - //remove route - MultipleHeader lMultipleRoute = aMessage.getRoutes(); - if (lMultipleRoute != null) { - lMultipleRoute.removeTop(); - aMessage.setRoutes(lMultipleRoute); - } - // add Via only udp - addVia(aProvider,aMessage); - // add recordRoute - addRecordRoute(aProvider,aMessage); - try { - mSdpProcessor.processSdpBeforeSendingToPipe(aMessage); - // proxy message to pipe - OutputPipe lOutputPipe = sendMessageToPipe(lTo,aMessage.toString()); - mSdpProcessor.processSdpAfterSentToPipe( aMessage,lOutputPipe); - } catch (P2pProxyUserNotFoundException e) { - //remove via - removeVia(aProvider, aMessage); - if (aMessage.isInvite()) { - Message lresp = MessageFactory.createResponse(aMessage,404,e.getMessage(),null); - TransactionServer lTransactionServer = new TransactionServer(aProvider,aMessage,null); - lTransactionServer.respondWith(lresp); - } else { - throw e; - } - } catch (Exception e2) { - //remove via - removeVia(aProvider, aMessage); - throw e2; - - } + } + private void proxyRequest(SipProvider aProvider, Message aMessage) throws Exception {} ////////////////////////////////////////////////////////////////////// @@ -369,14 +326,14 @@ public class SipProxyRegistrar implements SipProviderListener,PipeMsgListener,Si lSipMessage.addRouteHeader(lRouteHeader); } // add Via only udp - addVia(mProvider,lSipMessage); + SipUtils.addVia(mProvider,lSipMessage); // add recordRoute - addRecordRoute(mProvider,lSipMessage); + SipUtils.addRecordRoute(mProvider,lSipMessage); } else { //response //1 remove via header - removeVia(mProvider,lSipMessage); + SipUtils.removeVia(mProvider,lSipMessage); } try { mSdpProcessor.processSdpBeforeSendingToSipUA( lSipMessage); @@ -388,61 +345,8 @@ public class SipProxyRegistrar implements SipProviderListener,PipeMsgListener,Si // } - private Advertisement getPipeAdv(String aUser,long aDiscoveryTimout,boolean isTryFromLocal) throws InterruptedException, P2pProxyUserNotFoundException, IOException { - // search on all peers - try { - return mJxtaNetworkManager.getAdvertisement(null,aUser, isTryFromLocal); - } catch (P2pProxyAdvertisementNotFoundException e) { - throw new P2pProxyUserNotFoundException(e); - } - } - private OutputPipe sendMessageToPipe(String aDestination,String lContent) throws NumberFormatException, InterruptedException, P2pProxyException, IOException { - - //1 search for pipe - long lTimeout = JxtaNetworkManager.ADV_DISCOVERY_TIMEOUT_INT; - PipeAdvertisement lPipeAdvertisement = (PipeAdvertisement)getPipeAdv(aDestination,lTimeout,true); - OutputPipe lOutputPipe=null; - try { - // create output pipe - lOutputPipe = mJxtaNetworkManager.getPeerGroup().getPipeService().createOutputPipe(lPipeAdvertisement, lTimeout); - //create the message - } catch (IOException e) { - //second try from remote only to avoid wrong cached value - mJxtaNetworkManager.getPeerGroup().getDiscoveryService().flushAdvertisement(lPipeAdvertisement); - mLog.warn("cannot create output pipe, trying to ask from rdv ",e); - lPipeAdvertisement = (PipeAdvertisement)getPipeAdv(aDestination,lTimeout,false); - lOutputPipe = mJxtaNetworkManager.getPeerGroup().getPipeService().createOutputPipe(lPipeAdvertisement, lTimeout); - } - net.jxta.endpoint.Message lMessage = new net.jxta.endpoint.Message(); - StringMessageElement lStringMessageElement = new StringMessageElement("SIP", lContent, null); - lMessage.addMessageElement("SIP", lStringMessageElement); - //send the message - lOutputPipe.send(lMessage); - mLog.debug("message sent to ["+aDestination+"]"); - return lOutputPipe; - - } - private void addVia(SipProvider aProvider, Message aMessage) { - ViaHeader via=new ViaHeader("udp",aProvider.getViaAddress(),aProvider.getPort()); - String branch=aProvider.pickBranch(aMessage); - via.setBranch(branch); - aMessage.addViaHeader(via); - } - private void addRecordRoute(SipProvider aProvider, Message aMessage) { - SipURL lRecordRoute; - lRecordRoute=new SipURL(aProvider.getViaAddress(),aProvider.getPort()); - lRecordRoute.addLr(); - RecordRouteHeader lRecordRouteHeader=new RecordRouteHeader(new NameAddress(lRecordRoute)); - aMessage.addRecordRouteHeader(lRecordRouteHeader); - } - private void removeVia(SipProvider aProvider, Message aMessage) { - synchronized (aMessage) { - ViaHeader lViaHeader =new ViaHeader((Header)aMessage.getVias().getHeaders().elementAt(0)); - if (lViaHeader.getHost().equals(aProvider.getViaAddress()) && lViaHeader.getPort() == aProvider.getPort() ) { - aMessage.removeViaHeader(); - } - } - } + + // public long getNumberOfEstablishedCall() { // return mNumberOfEstablishedCall; // } diff --git a/p2pproxy/src/org/linphone/p2pproxy/core/SipProxyRegistrarMBean.java b/p2pproxy/src/org/linphone/p2pproxy/core/sipproxy/SipProxyRegistrarMBean.java similarity index 96% rename from p2pproxy/src/org/linphone/p2pproxy/core/SipProxyRegistrarMBean.java rename to p2pproxy/src/org/linphone/p2pproxy/core/sipproxy/SipProxyRegistrarMBean.java index 42d25bf9e..882d185b0 100644 --- a/p2pproxy/src/org/linphone/p2pproxy/core/SipProxyRegistrarMBean.java +++ b/p2pproxy/src/org/linphone/p2pproxy/core/sipproxy/SipProxyRegistrarMBean.java @@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -package org.linphone.p2pproxy.core; +package org.linphone.p2pproxy.core.sipproxy; public interface SipProxyRegistrarMBean { // registrar diff --git a/p2pproxy/src/org/linphone/p2pproxy/core/utils/AccountManagerCli.java b/p2pproxy/src/org/linphone/p2pproxy/core/utils/AccountManagerCli.java index 95cf84948..36951c140 100644 --- a/p2pproxy/src/org/linphone/p2pproxy/core/utils/AccountManagerCli.java +++ b/p2pproxy/src/org/linphone/p2pproxy/core/utils/AccountManagerCli.java @@ -34,7 +34,7 @@ import org.linphone.p2pproxy.core.JxtaNetworkManager; import org.linphone.p2pproxy.core.P2pProxyAccountManagementMBean; import org.linphone.p2pproxy.core.P2pProxyMain; import org.linphone.p2pproxy.core.P2pProxyMainMBean; -import org.linphone.p2pproxy.core.SipProxyRegistrar; +import org.linphone.p2pproxy.core.sipproxy.SipProxyRegistrar; public class AccountManagerCli { public final static String USER_ADD = "user-add";