1 import org.jivesoftware.smack.packet.*; 2 import org.jivesoftware.smack.*; 3 import org.jivesoftware.smack.util.StringUtils; 4 import whisper.*; 5 6 7 public final class IncomingChatThread extends Thread { 8 9 private org.jivesoftware.smack.packet.Message message; 10 11 public IncomingChatThread(org.jivesoftware.smack.packet.Message message){ 12 super("Incoming ChatThread"); 13 setDaemon(true); 14 setPriority(Thread.MIN_PRIORITY); 15 this.message=message; 16 } 17 18 public void run(){ 19 if(message.getBody()==null){ 21 return; 22 } 23 if(message.getBody().trim().startsWith("<wchannel>")){ 24 if(WhisperIM.MainWindow.secureChannelPanel!=null && WhisperIM.MainWindow.secureChannelPanel.amProviding){ 25 WhisperIM.MainWindow.secureChannelPanel.messageListener.incoming(message); 26 } 28 return; } 30 final String fromID=message.getFrom(); 31 String fromName=StringUtils.parseBareAddress(fromID.toLowerCase()); 32 final String bareID=StringUtils.parseBareAddress(fromID.toLowerCase()); 33 if(WhisperIM.MainWindow.Chats.get("jabber"+bareID)!=null){ 35 return; 36 } 37 final MUCPanel mp=(MUCPanel)WhisperIM.MainWindow.MUCs.get(bareID); 39 if(mp!=null && (!StringUtils.parseResource(fromID).equals(""))){ 40 javax.swing.SwingUtilities.invokeLater(new Runnable (){ 41 public void run(){ 42 mp.pm(message.getBody(),StringUtils.parseResource(fromID),"",GUI.getTime(message)); 43 } 44 }); 45 return; 46 } 47 48 String tabName=StringUtils.parseName(bareID)+"@"; 50 ContactListItem cli=(ContactListItem)WhisperIM.MainWindow.Contacts.get("jabber"+fromName); 51 if(cli!=null){ 52 fromName=cli.toString(); 53 tabName=fromName; 54 } 55 56 final String finalfromName=fromName; 57 final String finaltabName=tabName; 58 59 if(message.getBody().trim().startsWith("<wmsg>")){ 61 PublicKey pk; 63 try{ 64 whisper.Message wm=new whisper.Message(message.getBody().trim()); 65 if(WhisperIM.MainWindow.hasNoKey("jabber",bareID)){ 67 return; 68 } 69 pk=(PublicKey) WhisperIM.MainWindow.Keys.get("jabber"+bareID); 70 if(pk==null){ 71 pk=WhisperIM.MainWindow.getKey("jabber",fromID); 73 if(pk==null){ javax.swing.SwingUtilities.invokeLater(new Runnable (){ 75 public void run(){ 76 GUI.showInfo(WhisperIM.MainWindow,"bad message received","no public key",Lang.gs("from")+fromID); 77 } 78 }); 79 return; 80 } 81 } 82 if(wm.getESK()==null){ 84 javax.swing.SwingUtilities.invokeLater(new Runnable (){ 85 public void run(){ 86 GUI.showInfo(WhisperIM.MainWindow,"bad message received","could not decrypt",Lang.gs("from")+fromID); 87 } 88 }); 89 return; 90 } 91 final Chat c; 92 if(message.getThread()==null){ 93 c=new Chat(WhisperIM.MainWindow.Conn,fromID); 94 } 95 else{ 96 c=new Chat(WhisperIM.MainWindow.Conn,fromID,message.getThread()); 97 } 98 javax.swing.SwingUtilities.invokeLater(new Runnable (){ 99 public void run(){ 100 ChatPanel p=new ChatPanel(finalfromName,fromID,c,true,GUI.getDate(message)); 101 WhisperIM.MainWindow.Chats.put("jabber"+bareID,p); 102 p.process(message.getBody(),""); 103 WhisperIM.MainWindow.chatPane.addTab(finaltabName,Icons.CHAT,p,Lang.gs("chatting with")+fromID); 104 WhisperIM.MainWindow.statusLbl.setText(GUI.getTime()+" "+Lang.gs("chatting with")+finalfromName); 105 } 106 }); 107 Alert.newChat(); 108 return; 109 } 110 catch(Exception e){ 111 return; 112 } 113 } 114 final Chat c2; 116 if(message.getThread()==null){ 117 c2=new Chat(WhisperIM.MainWindow.Conn,fromID); 118 } 119 else{ 120 c2=new Chat(WhisperIM.MainWindow.Conn,fromID,message.getThread()); 121 } 122 123 javax.swing.SwingUtilities.invokeLater(new Runnable (){ 124 public void run(){ 125 ChatPanel p2=new ChatPanel(finalfromName,fromID,c2,true,GUI.getDate(message)); 126 127 WhisperIM.MainWindow.Chats.put("jabber"+bareID,p2); 128 129 p2.process(message.getBody(),GUI.getTime(message)); 130 WhisperIM.MainWindow.chatPane.addTab(finaltabName,Icons.CHAT,p2,Lang.gs("chatting with")+fromID); 131 WhisperIM.MainWindow.statusLbl.setText(GUI.getTime()+" "+Lang.gs("chatting with")+finalfromName); 132 } 133 }); 134 Alert.newChat(); 135 } 136 137 } | Popular Tags |