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

📄 presencemanager.java

📁 First of all, the Applet-phone is a SIP User-Agent with audio and text messaging capabilities. But
💻 JAVA
字号:
/* * SubscriberController.java * * Created on September 26, 2002, 6:00 PM */package gov.nist.examples.bps.reader.presence;import javax.sip.*;import javax.sip.message.*; import javax.sip.header.*;import javax.sip.address.*;import java.util.*;import gov.nist.examples.bps.reader.*;/** * * @author  deruelle * @version 1.0 */public class PresenceManager {    protected int expiresTime;    private SubscriberList subscriberList;    private BaseReader baseReader;        /** Creates new SubscriberController */    public PresenceManager(BaseReader baseReader) {        expiresTime=3600;        this.baseReader=baseReader;        subscriberList=new SubscriberList();    }        public int getExpiresTime(){        return expiresTime;    }        public Vector getAllSubscribers() {        return subscriberList.getAllSubscribers();    }        public Subscriber getSubscriber(String subscriberName) {        return subscriberList.getSubscriber(subscriberName);    }        public boolean hasSubscriber(String subscriberName) {        return subscriberList.hasSubscriber(subscriberName);    }        public void addSubscriber(String subscriberName,Response okSent,Dialog dialog) {       Subscriber subscriber=new Subscriber(subscriberName,okSent);       subscriber.setDialog(dialog);       subscriberList.addSubscriber(subscriber);    }        public void removeSubscriber(String subscriberName) {        subscriberList.removeSubscriber(subscriberName);    }              public void sendNotifyToAllSubscribers(String xmlBody) {        try{             // We have to get all our subscribers and send them a NOTIFY!             Vector subscribersList=getAllSubscribers();             BaseReaderDebug.println("PresenceManager, sendNotifyToAllSuscribers(),"+             " we have to notify all the subscribers: "+subscribersList.size());             for (int i=0;i<subscribersList.size();i++) {                Subscriber subscriber=(Subscriber)subscribersList.elementAt(i);                                 String subscriberName=subscriber.getSubscriberName();                               Dialog dialog=subscriber.getDialog();                if (dialog==null) {                    BaseReaderDebug.println("PresenceManager, ERROR, sendNotifyToAllSubscribers(), PB to "+                    "retrieve the dialog, NOTIFY not sent!");                    return;                }                                sendNotify(xmlBody,dialog);             }        }        catch (Exception ex) {            ex.printStackTrace();        }     }                public void sendNotify(String xmlBody,Dialog dialog) {        try{                       HeaderFactory headerFactory=baseReader.getHeaderFactory();            AddressFactory addressFactory=baseReader.getAddressFactory();            MessageFactory messageFactory=baseReader.getMessageFactory();            SipProvider sipProvider=baseReader.getSipProvider();            Configuration configuration=baseReader.getConfiguration();                        String presenceServerAddress=baseReader.getPresenceServerAddress();            int presenceServerPort=baseReader.getPresenceServerPort();                        SipURI requestURI=null;            if (presenceServerAddress!=null) {                 requestURI=addressFactory.createSipURI(null,presenceServerAddress);                 requestURI.setPort(presenceServerPort);                 requestURI.setTransportParam("UDP");            }            else {                BaseReaderDebug.println("PresenceManager, sendNotify(), cannot send the NOTIFY, "+                "the presence server address does not exist.");                return;            }                   Address localAddress=dialog.getLocalParty();            Address remoteAddress=dialog.getRemoteParty();                                    FromHeader fromHeader=headerFactory.createFromHeader(localAddress,dialog.getLocalTag());            ToHeader toHeader=headerFactory.createToHeader(remoteAddress,dialog.getRemoteTag());                        int cseq=dialog.getLocalSequenceNumber();            CSeqHeader cseqHeader=headerFactory.createCSeqHeader(cseq,"NOTIFY");                            CallIdHeader callIdHeader=dialog.getCallId();                         //  Via header             ViaHeader viaHeader=baseReader.createStackViaHeader();            Vector viaList=new Vector();            viaList.addElement(viaHeader);                        // MaxForwards header:            MaxForwardsHeader maxForwardsHeader=headerFactory.createMaxForwardsHeader(70);                        Request request=null;            ClientTransaction clientTransaction=null;            if (xmlBody==null || xmlBody.trim().equals("") ) {                 request=messageFactory.createRequest(requestURI,"NOTIFY",                callIdHeader,cseqHeader,fromHeader,toHeader,viaList,maxForwardsHeader);            }            else {                xmlBody=xmlBody+"\r\n";                                // Content-Type:                ContentTypeHeader contentTypeHeader=headerFactory.createContentTypeHeader(                "application","nist-sip-xml");                                request=messageFactory.createRequest(requestURI,"NOTIFY",                callIdHeader,cseqHeader,fromHeader,toHeader,viaList,maxForwardsHeader                ,contentTypeHeader,xmlBody);            }                        // We have to add a new Header: "Subscription-State"            BaseReaderDebug.println("PresenceManager, sendNotify(), We add the Subscription-State"+            " header to therequest");            Header header=headerFactory.createHeader("Subscription-State","active");            request.setHeader(header);                        // We have to add a new Header: "Event"            BaseReaderDebug.println("PresenceManager, sendNotify(), We add the Event"+            " header to the request");            header=headerFactory.createHeader("Event","presence");            request.setHeader(header);                          // Create a BaseReader header to differentiate from the others REGISTER            Header baseReaderHeader=headerFactory.createHeader("Base-reader",            configuration.baseReaderIdentifier);            request.setHeader(baseReaderHeader);                                    // Contact header:            ContactHeader contactHeader=baseReader.createStackContactHeader();            request.setHeader(contactHeader);                        clientTransaction=sipProvider.getNewClientTransaction(request);            dialog.sendRequest(clientTransaction);                        BaseReaderDebug.println("PresenceManager, sendNotify(),"+            " NOTIFY sent:\n" );            BaseReaderDebug.println(request.toString());                    }        catch(Exception e) {            e.printStackTrace();        }    }        public void processSubscribe(SipProvider sipProvider,Request request,    ServerTransaction serverTransaction) {          try {            MessageFactory messageFactory=baseReader.getMessageFactory();            HeaderFactory headerFactory=baseReader.getHeaderFactory();            AddressFactory addressFactory=baseReader.getAddressFactory();                        /************************ OK for the SUBSCRIBE **********************/            String subscriberURI=BaseReaderUtils.getKey(request,"From");                       // Send an OK            Response response=messageFactory.createResponse            (Response.OK,request);                        // Tag:            ToHeader toHeader=(ToHeader)response.getHeader(ToHeader.NAME);            if (toHeader.getTag()==null)                toHeader.setTag(new Integer((int)(Math.random() * 10000)).toString());                        if (serverTransaction!=null)                 serverTransaction.sendResponse(response);            else sipProvider.sendResponse(response);                          BaseReaderDebug.println("PresenceManager, processSubscribe(), "+            " Response 200 OK sent.");                                    // We have to create or update the subscriber!            if (serverTransaction!=null) {                Dialog dialog=serverTransaction.getDialog();                if (dialog!=null) {                     addSubscriber(subscriberURI,response,dialog);                    BaseReaderNotificationImpl notifier=baseReader.getNotifier();                    if (notifier==null) {                        BaseReaderDebug.println("PresenceManager, processSubscribe(),"+                        " unable to connect to the base!!! No subscriber added....");                        return;                                            }                                        String xmlBody=notifier.getActiveBadgesXMLBody();                    sendNotifyToAllSubscribers(xmlBody);                }                else {                    BaseReaderDebug.println("PresenceManager, processSubscribe(), the"+                    " dialog for the SUBSCRIBE we received is null!!! No subscriber added....");                    return;                }            }            else {                 BaseReaderDebug.println("PresenceManager, processSubscribe(), the"+                    " dialog for the SUBSCRIBE we received is null!!! No subscriber added....");                    return;            }          }        catch (Exception ex) {            ex.printStackTrace();        }    }    }

⌨️ 快捷键说明

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