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

📄 messengermanager.java

📁 这是一个java实现的客户登陆电话系统的代码
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
            requestName,
            callIdHeader,
            cSeqHeader,
            fromHeader,
            toHeader,
            viaHeaders,
            maxForwardsHeader);
            //Contact Header
            SipURI contactURI =
            MessageListener.addressFactory.createSipURI(
            caller.getUser(),
            messageListener.getConfiguration().contactIPAddress);
            contactURI.setTransportParam(
            messageListener.getConfiguration().signalingTransport);
            ContactHeader contactHeader =
            MessageListener.headerFactory.createContactHeader(
            MessageListener.addressFactory.createAddress(contactURI));
            contactURI.setPort(listeningPoint.getPort());
            request.addHeader(contactHeader);
            //Route Header
            
            /**
             * SipURI routeURI= MessageListener.addressFactory.createSipURI(
             * null,
             * messageListener.getConfiguration().outboundProxy);
             * routeURI.setPort(messageListener.getConfiguration().proxyPort);
             * routeURI.setTransportParam(messageListener.getConfiguration().signalingTransport);
             * RouteHeader routeHeader = MessageListener.headerFactory.createRouteHeader(
             * MessageListener.addressFactory.createAddress(routeURI));
             * request.addHeader(routeHeader);
             **/
            
            return request;
        } catch (Exception ex) {
            ex.printStackTrace();
            System.out.println(
            "Something bad happened when creating request!!");
            System.out.println("method = " + requestName);
            System.out.println("caller = " + caller);
            System.out.println("caller = " + callee);
            return null;
        }
    }
    
    /**
     * Send A Register to the proxy with the authentication acquired from the user.
     * @param userName - the user name
     * @param password - the password's user
     * @param realm - the realm's user
     * TODO : Keep a trace of the expires and schedule a new registration
     */
    public void registerWithAuthentication(
    String userName,
    String password,
    String realm) {
        //WE start the authentication process!!!
        // Let's get the Request related to this response:
        Request request = registerStatus.getRegisterTransaction().getRequest();
        if (request == null) {
            System.out.println(
            "IMUserAgent, processResponse(), the request "
            + " that caused the 407 has not been retrieved!!! Return cancelled!");
        } else {
            Request clonedRequest = (Request) request.clone();
            // Let's increase the Cseq:
            CSeqHeader cseqHeader =
            (CSeqHeader) clonedRequest.getHeader(CSeqHeader.NAME);
            try {
                cseqHeader.setSequenceNumber(
                cseqHeader.getSequenceNumber() + 1);
            } catch (InvalidArgumentException iae) {
                iae.printStackTrace();
            }
            
            // Let's add a Proxy-Authorization header:
            // We send the informations stored:
            Header header =
            registerStatus.getHeader(
            registerStatus.getRegisterResponse(),
            userName,
            password,
            messageListener.getConfiguration().outboundProxy,
            messageListener.getConfiguration().proxyPort);
            
            if (header == null) {
                System.out.println(
                "IMUserAgent, processResponse(), Proxy-Authorization "
                + " header is null, the request is not resent");
            } else {
                clonedRequest.setHeader(header);
                ClientTransaction newClientTransaction = null;
                try {
                    newClientTransaction =
                    messageListener.sipProvider.getNewClientTransaction(
                    clonedRequest);
                } catch (TransactionUnavailableException tue) {
                    tue.printStackTrace();
                }
                
                try {
                    newClientTransaction.sendRequest();
                } catch (SipException se) {
                    se.printStackTrace();
                }
                System.out.println(
                "IMUserAgent, processResponse(), REGISTER "
                + "with credentials sent:\n"
                + clonedRequest);
                System.out.println();
            }
        }
    }
    
    /**
     * Send A Register to the proxy.
     * TODO : Keep a trace of the expires and schedule a new registration
     */
    public void register() {
        SipURI proxyURI = null;
        //创建Proxy-UR
        try {
            proxyURI =
            MessageListener.addressFactory.createSipURI(
            null,
            messageListener.getConfiguration().outboundProxy);
            proxyURI.setPort(messageListener.getConfiguration().proxyPort);
        } catch (ParseException pe) {
            pe.printStackTrace();
        }
        Request request =
        createRequest(Request.REGISTER, userSipURI, userSipURI);
        // Resource to which this is directed is the proxy.
        request.setRequestURI(proxyURI);
        //Transaction
        ClientTransaction regTrans = null;
        try {
            regTrans =
            messageListener.sipProvider.getNewClientTransaction(request);
            // System.out.println(request.toString());
            regTrans.sendRequest();
            this.setRegisterStatus(RegisterStatus.REGISTRATION_IN_PROGRESS);
        } catch (TransactionUnavailableException ex) {
            System.out.println(
            "Could not create a register transaction!\n"
            + "Check that the Registrar address is correct!"
            + " "
            + ex);
        } catch (SipException ex) {
            System.out.println(
            "Could not send out the register request! " + ex);
            ex.printStackTrace();
        }
        
    }
    
    public void unRegisterAndReRegister() {
        this.reRegisterFlag = true;
        this.deRegister();
    }
    
    public void unRegister() {
        this.reRegisterFlag = false;
        this.deRegister();
    }
    /**
     * Stop the registration
     */
    private void deRegister() {
        SipURI proxyURI = null;
        try {
            proxyURI =
            MessageListener.addressFactory.createSipURI(
            null,
            messageListener.getConfiguration().outboundProxy);
            proxyURI.setPort(messageListener.getConfiguration().proxyPort);
        } catch (ParseException pe) {
            pe.printStackTrace();
        }
        Request request =
        createRequest(Request.REGISTER, userSipURI, userSipURI);
        // Direct the request towards the proxy.
        request.setRequestURI(proxyURI);
        //ExpiresHeader
        try {
            ExpiresHeader expires =
            MessageListener.headerFactory.createExpiresHeader(0);
            request.setHeader(expires);
        } catch (InvalidArgumentException iae) {
            iae.printStackTrace();
        }
        ContactHeader contactHeader =
        MessageListener.headerFactory.createContactHeader();
        request.setHeader(contactHeader);
        //Transaction
        ClientTransaction regTrans = null;
        try {
            regTrans =
            messageListener.sipProvider.getNewClientTransaction(request);
            System.out.println(request.toString());
            regTrans.sendRequest();
        } catch (TransactionUnavailableException ex) {
            System.out.println(
            "Could not create a un-register transaction!\n"
            + "Check that the Registrar address is correct!"
            + " "
            + ex);
        } catch (SipException ex) {
            System.out.println(
            "Could not send out the un-register request! " + ex);
            ex.printStackTrace();
        }
    }
    
    /**
     * Create the SDP body of the INVITE message
     * for the initiation of the media session
     */
    private String createSDPBody(int audioPort) {
        try {
            SdpFactory sdpFactory = SdpFactory.getInstance();
            SessionDescription sessionDescription =
            sdpFactory.createSessionDescription();
            //Protocol version
            Version version = sdpFactory.createVersion(0);
            sessionDescription.setVersion(version);
            //Owner
            long sdpSessionId=(long)(Math.random() * 1000000);
            Origin origin =
            sdpFactory.createOrigin(
            userSipURI.getUser(),
            sdpSessionId,
            sdpSessionId+1369,
            "IN",
            "IP4",
            messageListener.getConfiguration().contactIPAddress);
            sessionDescription.setOrigin(origin);
            //Session Name
            SessionName sessionName = sdpFactory.createSessionName("-");
            sessionDescription.setSessionName(sessionName);
            //Connection
            Connection connection =
            sdpFactory.createConnection(
            messageListener.getConfiguration().contactIPAddress);
            sessionDescription.setConnection(connection);
            //Time
            Time time = sdpFactory.createTime();
            Vector timeDescriptions = new Vector();
            timeDescriptions.add(time);
            sessionDescription.setTimeDescriptions(timeDescriptions);
            //Media Description
            MediaDescription mediaDescription =
            sdpFactory.createMediaDescription(
            "audio",
            audioPort,
            1,
            "RTP/AVP",
            MediaManager.getSdpAudioSupportedCodecs());
            Vector mediaDescriptions = new Vector();
            mediaDescriptions.add(mediaDescription);
            sessionDescription.setMediaDescriptions(mediaDescriptions);
            return sessionDescription.toString();
        } catch (SdpException se) {
            se.printStackTrace();
        }
        return null;
    }
    
    /**
     * Send an Invite to the sip URI in parameter
     * @param calleeURI - the URI of the user to call
     * @param sdpBody - the sdp content describing the media session
     * to include to the message
     */
    private void sendInvite(String calleeURI, String sdpBody) {
        if (calleeURI.indexOf("sip:") != -1)
            calleeURI = calleeURI.substring("sip:".length());
        //Request URI
        SipURI contactURI = null;
        try {
            //Create the SIP URI for the user URI
            String user = calleeURI.substring(0, calleeURI.indexOf("@"));
            String host =
            calleeURI.substring(
            calleeURI.indexOf("@") + 1,
            calleeURI.length());
            contactURI =
            MessageListener.addressFactory.createSipURI(user, host);
        } catch (ParseException pe) {
            pe.printStackTrace();
        }
        Request invite = createRequest(Request.INVITE, contactURI, userSipURI);
        // Indicate to the other end the type of media I am willing to accept.
        try {
            if (messageListener
            .getConfiguration()
            .mediaTransport
            .equalsIgnoreCase("tcp")){
                AcceptHeader acceptHeader =
                MessageListener.headerFactory.createAcceptHeader(
                "audio",
                "gsm");
                invite.addHeader(acceptHeader);
                acceptHeader =
                MessageListener.headerFactory.createAcceptHeader(
                "audio",
                "x-gsm");
                invite.addHeader(acceptHeader);
                acceptHeader =
                MessageListener.headerFactory.createAcceptHeader(
                "text",
                "plain");
                invite.addHeader(acceptHeader);
            }
            //Content
            ContentTypeHeader contentTypeHeader = null;
            if (sdpBody != null) {
                contentTypeHeader =
                MessageListener.headerFactory.createContentTypeHeader(
                "application",
                "sdp");
                invite.setContent(sdpBody, contentTypeHeader);
            }
        } catch (ParseException ex) {
            //Shouldn't happen
            System.out.println(
            "Failed to create a content type header for the INVITE request "
            + ex);
        }
        //Transaction
        ClientTransaction inviteTransaction = null;
        try {
            inviteTransaction =
            messageListener.sipProvider.getNewClientTransaction(invite);
        } catch (TransactionUnavailableException ex) {
            System.out.println(
            "Failed to create inviteTransaction.\n"
            + "This is most probably a network connection error. ");
            ex.printStackTrace();
        }
        System.out.println("send request:\n" + invite);
        try {
            inviteTransaction.sendRequest();
            //Find the Audio call
            AudioCall call = callManager.findAudioCall("sip:" + calleeURI);
            call.setDialog(inviteTransaction.getDialog());
        } catch (SipException ex) {
            System.out.println(
            "An error occurred while sending invite request " + ex);
        }
    }
    
    /**
     * Send a MESSAGE to notify the proxy that a mail must be send to the callee
     */
    public void sendMessage(String emailBody, String calleeURI) {
        //Store the callee in the call status
        calleeURI = calleeURI.trim();
        //call.setCallee(calleeURI);
        //Listening Point
        ListeningPoint listeningPoint =
        messageListener.sipProvider.getListeningPoint();
        SipURI requestURI = null;
        try {
            requestURI =
            MessageListener.addressFactory.createSipURI(
            null,
            messageListener.getConfiguration().outboundProxy);
            requestURI.setPort(messageListener.getConfiguration().proxyPort);

⌨️ 快捷键说明

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