📄 .#messageprocessor.java.1.20
字号:
} } /** * Process the ACK received request * @param serverTransaction - the server transaction associated with the request * @param ack - the ack request */ public void processAck(ServerTransaction serverTransaction, Request ack) { CallManager callManager = messageListener.sipMeetingManager.getCallManager(); //Strip out the callee SipURI calleeURI = (SipURI) ((FromHeader) ack.getHeader(FromHeader.NAME)) .getAddress() .getURI(); String callee = "sip:" + calleeURI.getUser() + "@" + calleeURI.getHost(); //Find the Audio call AudioCall call = callManager.findAudioCall(callee); if (call != null) { if (!call.getVoiceMessaging()) call.getMediaManager().startMediaSession(false); else startVoiceMessagingSchedule(callee); call.setStatus(AudioCall.IN_A_CALL); messageListener.sipMeetingManager.notifyObserversNewCallStatus( call); } } /** * Process the CANCEL received request * @param serverTransaction - the server transaction associated with the request * @param cancel - the cancel request */ public void processCancel( ServerTransaction serverTransaction, Request cancel) { CallManager callManager = messageListener.sipMeetingManager.getCallManager(); //Strip out the callee SipURI calleeURI = (SipURI) ((FromHeader) cancel.getHeader(FromHeader.NAME)) .getAddress() .getURI(); String callee = "sip:" + calleeURI.getUser() + "@" + calleeURI.getHost().trim().toLowerCase(); //Find the Audio call AudioCall call = callManager.findAudioCall(callee); //Send OK try { Response ok = (Response) MessageListener.messageFactory.createResponse( Response.OK, cancel); serverTransaction.sendResponse(ok); call.setStatus(AudioCall.CANCEL); messageListener.sipMeetingManager.notifyObserversNewCallStatus( call); System.out.println( "Audio Call removed : " + call.getDialog().getDialogId()); callManager.removeAudioCall(call); } catch (SipException se) { se.printStackTrace(); } catch (ParseException pe) { pe.printStackTrace(); } } /** * Process the MESSAGE received request * @param serverTransaction - the server transaction associated with the request * @param message - the request */ public void processMessage( ServerTransaction serverTransaction, Request message) { //Send OK try { String sender = null; Address address = ((FromHeader) message.getHeader(FromHeader.NAME)).getAddress(); if (address.getURI().isSipURI()) { SipURI sipURI = ((SipURI) address.getURI()); String host = sipURI.getHost(); String user = sipURI.getUser(); sender = user + "@" + host; } //Getting the sdp body for creating the response //This sdp body will present what codec has been chosen //and on which port every media will be received ContentTypeHeader contentTypeHeader = (ContentTypeHeader) message.getHeader(ContentTypeHeader.NAME); if (contentTypeHeader == null || contentTypeHeader.getContentType() == null || contentTypeHeader.getContentSubType() == null) return; String subType = contentTypeHeader.getContentSubType(); //If we have a voice messaging plays it if (contentTypeHeader.getContentType().equals("audio")) { if (contentTypeHeader.getContentSubType().equals("x-gsm") || contentTypeHeader.getContentSubType().equals("gsm")) { Response ok = ( Response) MessageListener .messageFactory .createResponse( Response.OK, message); ToHeader toHeader = (ToHeader) message.getHeader(ToHeader.NAME); if (toHeader.getTag() == null) toHeader.setTag( new Integer((int) (Math.random() * 10000)) .toString()); serverTransaction.sendResponse(ok); byte[] voiceMessage = message.getRawContent(); //if(!voicePlayer.isInitialized()) voicePlayer.initialize(voiceMessage); /*else voicePlayer.setData(voiceMessage);*/ voicePlayer.play(); message.removeContent(); } else { System.out.println( "Cannot handle this codec " + contentTypeHeader.getContentSubType()); } } else if ( contentTypeHeader.getContentType().equals("text") && contentTypeHeader.getContentSubType().equals("plain")) { Response ok = (Response) MessageListener.messageFactory.createResponse( Response.OK, message); ToHeader toHeader = (ToHeader) message.getHeader(ToHeader.NAME); if (toHeader.getTag() == null) toHeader.setTag( new Integer((int) (Math.random() * 10000)).toString()); serverTransaction.sendResponse(ok); String content = new String(message.getRawContent()); FromHeader fromHeader = (FromHeader) message.getHeader(FromHeader.NAME); messageListener.sipMeetingManager.notifyObserversIMReceived( content, sender); } else { // send a Not Acceptable here message. Response notok = (Response) MessageListener.messageFactory.createResponse( Response.NOT_ACCEPTABLE, message); ToHeader toHeader = (ToHeader) message.getHeader(ToHeader.NAME); serverTransaction.sendResponse(notok); System.out.println( "Cannot handle this content Type " + contentTypeHeader); } message.removeContent(); } catch (SipException se) { se.printStackTrace(); } catch (ParseException pe) { pe.printStackTrace(); } } /** * Process the SUBSCRIBE received request * @param serverTransaction - the server transaction associated with the request * @param subscribe - the request */ public void processSubscribe( ServerTransaction serverTransaction, Request subscribe) { Address address = ((FromHeader) subscribe.getHeader(FromHeader.NAME)).getAddress(); String sender = null; if (address.getURI().isSipURI()) { SipURI sipURI = ((SipURI) address.getURI()); String host = sipURI.getHost(); String user = sipURI.getUser(); sender = user + "@" + host; } Subscriber subscriber = new Subscriber(sender); subscriber.setDialog(serverTransaction.getDialog()); messageListener.sipMeetingManager.notifySubscribe(subscriber); } /** * Process the NOTIFY received request * @param serverTransaction - the server transaction associated with the request * @param notify - the request */ public void processNotify( ServerTransaction serverTransaction, Request notify) { //Send OK try { Response ok = (Response) MessageListener.messageFactory.createResponse( Response.OK, notify); ToHeader toHeader = (ToHeader) notify.getHeader(ToHeader.NAME); if (toHeader.getTag() == null) toHeader.setTag( new Integer((int) (Math.random() * 10000)).toString()); serverTransaction.sendResponse(ok); Address address = ((FromHeader) notify.getHeader(FromHeader.NAME)).getAddress(); String sender = null; if (address.getURI().isSipURI()) { SipURI sipURI = ((SipURI) address.getURI()); String host = sipURI.getHost(); String user = sipURI.getUser(); sender = user + "@" + host; } ContentTypeHeader contentTypeHeader = (ContentTypeHeader) notify.getHeader(ContentTypeHeader.NAME); if (contentTypeHeader != null) { String xmlType = contentTypeHeader.getContentSubType(); if (xmlType.equals("xpidf+xml")) { String pidfContent = new String(notify.getRawContent()); int endDocIndex = pidfContent.indexOf("<presence>"); pidfContent = pidfContent.substring(endDocIndex); XMLpidfParser pidfParser = new XMLpidfParser(); pidfParser.parsePidfString(pidfContent); PresenceTag presenceTag = pidfParser.getPresenceTag(); presenceTag.setAddress(sender); messageListener.sipMeetingManager.notifyPresence( presenceTag); } } } catch (SipException se) { se.printStackTrace(); } catch (ParseException pe) { pe.printStackTrace(); } } /** * After a * @param clientTransaction * @param response */ public void processRequestTerminated( ClientTransaction clientTransaction, Response response) { } /**********************************************************************/ /* */ /* Handling response messages */ /* */ /**********************************************************************/ /** * Process the Not found received response * @param clientTransaction - the client transaction associated with the response * @param notFound - the not found response */ public void processNotFound( ClientTransaction clientTransaction, Response notFound) { } /** * Process the Not Implemented received response * @param clientTransaction - the client transaction associated with the response * @param notImplemented - the not found response */ public void processNotImplemented( ClientTransaction clientTransaction, Response notImplemented) { } /** * Process the Trying received response * @param clientTransaction - the client transaction associated with the response * @param trying - the trying response */ public void processTrying( ClientTransaction clientTransaction, Response trying) { CallManager callManager = messageListener.sipMeetingManager.getCallManager(); //Strip out the callee SipURI calleeURI = (SipURI) ((ToHeader) trying.getHeader(ToHeader.NAME)) .getAddress() .getURI(); String callee = "sip:" + calleeURI.getUser() + "@" + calleeURI.getHost(); //Find the Audio call AudioCall call = callManager.findAudioCall(callee); if (call != null) { call.setStatus(AudioCall.TRYING); messageListener.sipMeetingManager.notifyObserversNewCallStatus( call); } } /** * Process the Ringing received response * @param clientTransaction - the client transaction associated with the response * @param ringing - the ringing response */ public void processRinging( ClientTransaction clientTransaction, Response ringing) { CallManager callManager = messageListener.sipMeetingManager.getCallManager(); //Strip out the callee SipURI calleeURI = (SipURI) ((ToHeader) ringing.getHeader(ToHeader.NAME)) .getAddress() .getURI(); String callee = "sip:" + calleeURI.getUser() + "@" + calleeURI.getHost(); //Find the Audio call AudioCall call = callManager.findAudioCall(callee); call.setStatus(AudioCall.RINGING); messageListener.sipMeetingManager.notifyObserversNewCallStatus(call); } /** * Process the OK received response for a REGISTER * @param clientTransaction - the client transaction associated with the response * @param registerOK - the OK received response for a REGISTER */ public void processRegisterOK( ClientTransaction clientTransaction, Response registerOK) { FromHeader fromHeader = ((FromHeader) registerOK.getHeader(FromHeader.NAME)); Address address = fromHeader.getAddress(); ExpiresHeader expires = registerOK.getExpires(); if (expires != null && expires.getExpires() == 0) { if (messageListener.sipMeetingManager.reRegisterFlag) // This is an OK for a cleared registration. messageListener.sipMeetingManager.register(); else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -