⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 requestforwarding.java

📁 First of all, the Applet-phone is a SIP User-Agent with audio and text messaging capabilities. But
💻 JAVA
字号:
/* * RequestForwarding.java * * Created on April 16, 2003, 11:08 AM */package gov.nist.examples.mail;import java.util.*;import javax.sip.*;import javax.sip.message.*;import javax.sip.header.*;import javax.sip.address.*;/** * * @author Deruelle */public class RequestForwarding {        protected Controller controller;            /** Creates a new instance of RequestForwarding */    public RequestForwarding(Controller controller) {       this.controller=controller;    }           public void forwardRequest(Vector targetsURIList,SipProvider sipProvider,Request request,    ServerTransaction serverTransaction) {               MessageFactory messageFactory=controller.getMessageFactory();        HeaderFactory headerFactory=controller.getHeaderFactory();        AddressFactory addressFactory=controller.getAddressFactory();        StackConfiguration stackConfiguration=controller.getStackConfiguration();        try{                        for (int i=0;i<targetsURIList.size();i++) {                                URI targetURI=(URI)targetsURIList.elementAt(i);                                /*******************************************************************************//************** 1.  Make a copy of the received request               **********//*******************************************************************************/                Request clonedRequest = (Request) request.clone();                               System.out.println("RequestForwarding, forwardRequest() (STEP 1),"+               " the request is cloned");/*******************************************************************************//************** 2.  Update the Request-URI                            **********//*******************************************************************************/                                /*                The Request-URI in the copy's start line MUST be replaced with                the URI for this target.  If the URI contains any parameters                not allowed in a Request-URI, they MUST be removed.                 */                // All the targets URI are already canonicalized                clonedRequest.setRequestURI(targetURI);                               System.out.println("RequestForwarding, forwardRequest() (STEP 2),"+               " The Request-URI in the copy's start line is replaced with"+               " the URI for this target");                /*******************************************************************************//************** 8. Add a Via header field value                      **********//*******************************************************************************/                         /* The controller MUST insert a Via header field value into the copy            before the existing Via header field values.          */                                SipStack sipStack=sipProvider.getSipStack();                String stackIPAddress=sipStack.getIPAddress();                //SipStack oppositeSipStack=controller.getOppositeSipStack(stackIPAddress);                ViaHeader viaHeader=controller.getStackViaHeader(sipStack);                                if (viaHeader!=null)                    clonedRequest.addHeader(viaHeader);                                Iterator lps=sipStack.getListeningPoints();                ListeningPoint lp=(ListeningPoint)lps.next();                SipURI sipURI=controller.addressFactory.createSipURI(null,sipStack.getIPAddress());                sipURI.setPort(lp.getPort());                Address address=controller.addressFactory.createAddress(null,sipURI);                RecordRouteHeader recordRouteHeader=                controller.headerFactory.createRecordRouteHeader(address);                                                ListIterator recordRouteHeaders=clonedRequest.getHeaders                (RecordRouteHeader.NAME);                clonedRequest.removeHeader(RecordRouteHeader.NAME);                Vector v=new Vector();                v.addElement(recordRouteHeader);                // add the other record route headers.                while( recordRouteHeaders!=null && recordRouteHeaders.hasNext()) {                    recordRouteHeader=(RecordRouteHeader)recordRouteHeaders.next();                    v.addElement(recordRouteHeader);                }                                forwardRequestStatelessly(sipProvider,                clonedRequest,request,serverTransaction,sipStack);                            }        }        catch (Exception ex){            try{                               System.out.println("RequestForwarding, forwardRequest(), "+                " internal error, "+                "exception raised:");                ex.printStackTrace();                               // This is an internal error:                // Let's return a 500 SERVER_INTERNAL_ERROR                Response response=messageFactory.createResponse                (Response.SERVER_INTERNAL_ERROR,request);                if (serverTransaction!=null)                    serverTransaction.sendResponse(response);                else sipProvider.sendResponse(response);                                System.out.println(                    "RequestForwarding, forwardRequest(), 500 SERVER_INTERNAL_ERROR replied:\n"+                    response.toString());            }            catch (Exception e){                e.printStackTrace();            }        }    }            public void forwardRequestStatelessly(SipProvider sipProvider,    Request clonedRequest,Request originalRequest,ServerTransaction serverTransaction,    SipStack sipStack) {        MessageFactory messageFactory=controller.getMessageFactory();        HeaderFactory headerFactory=controller.getHeaderFactory();        AddressFactory addressFactory=controller.getAddressFactory();            try{                        // We forward statelessly:            // It means the Request does not create dialogs...            Iterator iter=sipStack.getSipProviders();                        ClientTransaction clientTransaction=((SipProvider)iter.next()).getNewClientTransaction(clonedRequest);                                    if(clientTransaction!=null){                System.out.println                ("RequestForwarding, forwardRequestStatelessly(), "+                " cloned request forwarded with the clientTransaction:\n");                clientTransaction.sendRequest();            }            else{                System.out.println                ("RequestForwarding, forwardRequestStatelessly(), "+                " cloned request forwarded with the sipProvider:\n");                ((SipProvider)iter.next()).sendRequest(clonedRequest);            }                        System.out.println            ("RequestForwarding, forwardRequestStatelessly(), "+            " cloned request forwarded statelessly:\n"+clonedRequest.toString());        }        catch (Exception ex){            try{                System.out.println("RequestForwarding, forwardRequestStatelessly(), "+                " internal error, "+                "exception raised:");                ex.printStackTrace();                            // This is an internal error:                // Let's return a 500 SERVER_INTERNAL_ERROR                Response response=messageFactory.createResponse                (Response.SERVER_INTERNAL_ERROR,originalRequest);                if (serverTransaction!=null)                    serverTransaction.sendResponse(response);                else sipProvider.sendResponse(response);                                System.out.println(                "RequestForwarding, forwardRequestStatelessly(), 500 SERVER_INTERNAL_ERROR replied:\n"+                response.toString());            }            catch (Exception e){                e.printStackTrace();            }        }    }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -