public void processOK(Response responseCloned, ClientTransaction clientTransaction) { DebugIM.println("Processing OK for MESSAGE in progress..."); if (clientTransaction == null) { // This could occur if this is a retransmission of the OK. DebugIM.println("ERROR, IMProcessing, processOK(), the transaction is null"); return; } InstantMessagingGUI instantMessagingGUI = imUA.getInstantMessagingGUI(); ListenerInstantMessaging listenerInstantMessaging = instantMessagingGUI.getListenerInstantMessaging(); ChatSessionManager chatSessionManager = listenerInstantMessaging.getChatSessionManager(); ChatSession chatSession = null; Dialog dialog = clientTransaction.getDialog(); if (dialog == null) { DebugIM.println("ERROR, IMProcessing, processOK(), the dialog is null"); return; } String fromURL = IMUtilities.getKey(responseCloned, "To"); if (chatSessionManager.hasAlreadyChatSession(fromURL)) { chatSession = chatSessionManager.getChatSession(fromURL); chatSession.displayLocalText(); // WE remove the text typed: chatSession.removeSentText(); if (chatSession.isEstablishedSession()) { } else { DebugIM.println("DEBUG, IMMessageProcessing, we mark the " + " session established"); chatSession.setDialog(dialog); chatSession.setEstablishedSession(true); } } else { // This is a bug!!! DebugIM.println("Error: IMMessageProcessing, processOK(), the chatSession is null"); } DebugIM.println("Processing OK for MESSAGE completed..."); }
public void processMessage(Request request, ServerTransaction serverTransaction) { try { SipProvider sipProvider = imUA.getSipProvider(); MessageFactory messageFactory = imUA.getMessageFactory(); HeaderFactory headerFactory = imUA.getHeaderFactory(); AddressFactory addressFactory = imUA.getAddressFactory(); InstantMessagingGUI instantMessagingGUI = imUA.getInstantMessagingGUI(); ListenerInstantMessaging listenerInstantMessaging = instantMessagingGUI.getListenerInstantMessaging(); ChatSessionManager chatSessionManager = listenerInstantMessaging.getChatSessionManager(); ChatSession chatSession = null; String fromURL = IMUtilities.getKey(request, "From"); if (chatSessionManager.hasAlreadyChatSession(fromURL)) chatSession = chatSessionManager.getChatSession(fromURL); else chatSession = chatSessionManager.createChatSession(fromURL); DebugIM.println("IMMessageProcessing, processMEssage(), ChatSession:" + chatSession); DebugIM.println("Processing MESSAGE in progress..."); // Send an OK Response response = messageFactory.createResponse(Response.OK, request); // Contact header: SipURI sipURI = addressFactory.createSipURI(null, imUA.getIMAddress()); sipURI.setPort(imUA.getIMPort()); sipURI.setTransportParam(imUA.getIMProtocol()); Address contactAddress = addressFactory.createAddress(sipURI); ContactHeader contactHeader = headerFactory.createContactHeader(contactAddress); response.setHeader(contactHeader); ToHeader toHeader = (ToHeader) response.getHeader(ToHeader.NAME); if (toHeader.getTag() == null) { // It is the first message without a TO tag toHeader.setTag(new Integer((int) (Math.random() * 10000)).toString()); } if (chatSession.isEstablishedSession()) { DebugIM.println("The Session already exists"); serverTransaction.sendResponse(response); DebugIM.println("OK replied to the MESSAGE:\n" + response.toString()); } else { DebugIM.println("The Session does not exists yet. "); serverTransaction.sendResponse(response); DebugIM.println("OK replied to the MESSAGE:\n" + response.toString()); Dialog dialog = serverTransaction.getDialog(); if (dialog == null) { DebugIM.println("ERROR, IMProcessing, processMessage(), the dialog is null"); return; } // We need to store the dialog: chatSession.setDialog(dialog); chatSession.setEstablishedSession(true); DebugIM.println("The DIALOG object has been stored in the ChatSession"); } Object content = request.getContent(); String text = null; if (content instanceof String) text = (String) content; else if (content instanceof byte[]) { text = new String((byte[]) content); } else { } if (text != null) { chatSession.displayRemoteText(text); } } catch (Exception ex) { ex.printStackTrace(); } }