use of net.sf.kraken.avatars.Avatar in project Openfire by igniterealtime.
the class MSNListener method contactListInitCompleted.
/**
* Contact list initialization has completed.
*/
public void contactListInitCompleted(MsnMessenger messenger) {
for (MsnGroup msnGroup : messenger.getContactList().getGroups()) {
Log.debug("MSN: Got group " + msnGroup);
getSession().storeGroup(msnGroup);
}
for (MsnContact msnContact : messenger.getContactList().getContacts()) {
Log.debug("MSN: Got contact " + msnContact);
if (msnContact.isInList(MsnList.FL) && msnContact.getEmail() != null) {
final MSNBuddy buddy = new MSNBuddy(getSession().getBuddyManager(), msnContact);
getSession().getBuddyManager().storeBuddy(buddy);
if (JiveGlobals.getBooleanProperty("plugin.gateway.msn.avatars", true)) {
final MsnObject msnAvatar = msnContact.getAvatar();
if (msnAvatar != null && (buddy.getAvatar() == null || !buddy.getAvatar().getLegacyIdentifier().equals(msnAvatar.getSha1c()))) {
try {
messenger.retrieveDisplayPicture(msnAvatar, new DisplayPictureListener() {
public void notifyMsnObjectRetrieval(MsnMessenger messenger, DisplayPictureRetrieveWorker worker, MsnObject msnObject, ResultStatus result, byte[] resultBytes, Object context) {
Log.debug("MSN: Got avatar retrieval result: " + result);
// Check for the value
if (result == ResultStatus.GOOD) {
try {
Log.debug("MSN: Found avatar of length " + resultBytes.length);
Avatar avatar = new Avatar(buddy.getJID(), msnAvatar.getSha1c(), resultBytes);
buddy.setAvatar(avatar);
} catch (IllegalArgumentException e) {
Log.debug("MSN: Got null avatar, ignoring.");
}
}
}
});
} catch (Exception e) {
Log.debug("MSN: Unable to retrieve MSN avatar: ", e);
}
} else if (buddy.getAvatar() != null && msnAvatar == null) {
buddy.setAvatar(null);
}
}
}
}
getSession().syncUsers();
}
use of net.sf.kraken.avatars.Avatar in project Openfire by igniterealtime.
the class BaseTransport method vCardCreated.
/**
* VCard was just created.
*
* @see org.jivesoftware.openfire.vcard.VCardListener#vCardCreated(String, Element)
*/
public void vCardCreated(String username, Element vcardElem) {
if (vcardElem != null) {
if (JiveGlobals.getBooleanProperty("plugin.gateway." + getType() + ".avatars", true)) {
Element photoElem = vcardElem.element("PHOTO");
if (photoElem != null) {
Element typeElem = photoElem.element("TYPE");
Element binElem = photoElem.element("BINVAL");
if (typeElem != null && binElem != null) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] imageData = Base64.decode(binElem.getText());
md.update(imageData);
String xmppHash = StringUtils.encodeHex(md.digest());
try {
TransportSession<B> trSession = sessionManager.getSession(username);
if (trSession.getAvatar() == null || !trSession.getAvatar().getXmppHash().equals(xmppHash)) {
// Store a cache of the avatar
trSession.setAvatar(new Avatar(trSession.getJID(), imageData));
trSession.updateLegacyAvatar(typeElem.getText(), imageData);
}
} catch (NotFoundException e) {
// Not an active session, ignore.
}
} catch (NoSuchAlgorithmException e) {
Log.error("Gateway: Unable to find support for SHA algorith?");
}
}
}
}
}
}
use of net.sf.kraken.avatars.Avatar in project Openfire by igniterealtime.
the class BaseTransport method vCardUpdated.
/**
* VCard was just updated.
*
* @see org.jivesoftware.openfire.vcard.VCardListener#vCardUpdated(String, Element)
*/
public void vCardUpdated(String username, Element vcardElem) {
if (vcardElem != null) {
if (JiveGlobals.getBooleanProperty("plugin.gateway." + getType() + ".avatars", true)) {
Element photoElem = vcardElem.element("PHOTO");
if (photoElem != null) {
Element typeElem = photoElem.element("TYPE");
Element binElem = photoElem.element("BINVAL");
if (typeElem != null && binElem != null) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] imageData = Base64.decode(binElem.getText());
md.update(imageData);
String xmppHash = StringUtils.encodeHex(md.digest());
try {
TransportSession<B> trSession = sessionManager.getSession(username);
if (trSession.getAvatar() == null || !trSession.getAvatar().getXmppHash().equals(xmppHash)) {
// Store a cache of the avatar
trSession.setAvatar(new Avatar(trSession.getJID(), imageData));
trSession.updateLegacyAvatar(typeElem.getText(), imageData);
}
} catch (NotFoundException e) {
// Not an active session, ignore.
}
} catch (NoSuchAlgorithmException e) {
Log.error("Gateway: Unable to find support for SHA algorith?");
}
}
}
}
}
}
use of net.sf.kraken.avatars.Avatar in project Openfire by igniterealtime.
the class BasicFlapConnection method handleSnacPacket.
@Override
protected void handleSnacPacket(SnacPacketEvent e) {
Log.debug("OSCAR snac packet received: " + e);
SnacCommand cmd = e.getSnacCommand();
if (cmd instanceof ServerReadyCmd) {
ServerReadyCmd src = (ServerReadyCmd) cmd;
setSnacFamilies(src.getSnacFamilies());
Collection<SnacFamilyInfo> familyInfos = SnacFamilyInfoFactory.getDefaultFamilyInfos(src.getSnacFamilies());
setSnacFamilyInfos(familyInfos);
getMainSession().registerSnacFamilies(this);
request(new ClientVersionsCmd(familyInfos));
request(new RateInfoRequest());
} else if (cmd instanceof RecvImIcbm) {
RecvImIcbm icbm = (RecvImIcbm) cmd;
String sn = icbm.getSenderInfo().getScreenname();
InstantMessage message = icbm.getMessage();
String msg = StringUtils.convertFromHtml(message.getMessage());
getMainSession().getTransport().sendMessage(getMainSession().getJID(), getMainSession().getTransport().convertIDToJID(sn), msg);
} else if (cmd instanceof OldIcbm) {
OldIcbm oicbm = (OldIcbm) cmd;
if (oicbm.getMessageType() == OldIcbm.MTYPE_PLAIN) {
String uin = String.valueOf(oicbm.getSender());
String msg = StringUtils.convertFromHtml(oicbm.getReason());
Log.debug("Got ICBM message " + uin + " with " + msg + "\n" + oicbm);
// InstantMessage message = oicbm.getMessage();
// Log.debug("Got ICBM message "+uin+" with "+message+"\n"+oicbm);
// String msg = StringUtils.unescapeFromXML(OscarTools.stripHtml(message.getMessage()));
getMainSession().getTransport().sendMessage(getMainSession().getJID(), getMainSession().getTransport().convertIDToJID(uin), msg);
}
} else if (cmd instanceof WarningNotification) {
WarningNotification wn = (WarningNotification) cmd;
MiniUserInfo warner = wn.getWarner();
if (warner == null) {
getMainSession().getTransport().sendMessage(getMainSession().getJID(), getMainSession().getTransport().getJID(), LocaleUtils.getLocalizedString("gateway.aim.warninganon", "kraken", Arrays.asList(wn.getNewLevel().toString())), Message.Type.headline);
} else {
Log.debug("*** " + warner.getScreenname() + " warned you up to " + wn.getNewLevel() + "%");
getMainSession().getTransport().sendMessage(getMainSession().getJID(), getMainSession().getTransport().getJID(), LocaleUtils.getLocalizedString("gateway.aim.warningdirect", "kraken", Arrays.asList(warner.getScreenname(), wn.getNewLevel().toString())), Message.Type.headline);
}
} else if (cmd instanceof ExtraInfoAck) {
ExtraInfoAck eia = (ExtraInfoAck) cmd;
List<ExtraInfoBlock> extraInfo = eia.getExtraInfos();
if (extraInfo != null) {
for (ExtraInfoBlock i : extraInfo) {
ExtraInfoData data = i.getExtraData();
final byte[] pendingAvatar = getMainSession().getSsiHierarchy().getPendingAvatarData();
if (JiveGlobals.getBooleanProperty("plugin.gateway." + getMainSession().getTransport().getType() + ".avatars", true) && (data.getFlags() & ExtraInfoData.FLAG_UPLOAD_ICON) != 0 && pendingAvatar != null) {
Log.debug("OSCAR: Server has indicated that it wants our icon.");
request(new UploadIconCmd(ByteBlock.wrap(pendingAvatar)), new SnacRequestAdapter() {
@Override
public void handleResponse(SnacResponseEvent e) {
SnacCommand cmd = e.getSnacCommand();
if (cmd instanceof UploadIconAck && pendingAvatar != null) {
UploadIconAck iconAck = (UploadIconAck) cmd;
if (iconAck.getCode() == UploadIconAck.CODE_DEFAULT || iconAck.getCode() == UploadIconAck.CODE_SUCCESS) {
ExtraInfoBlock iconInfo = iconAck.getIconInfo();
if (iconInfo == null) {
Log.debug("OSCAR: Got icon ack with no iconInfo: " + iconAck);
}
Log.debug("OSCAR: Successfully set icon.");
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(pendingAvatar);
getMainSession().getAvatar().setLegacyIdentifier(org.jivesoftware.util.StringUtils.encodeHex(md.digest()));
} catch (NoSuchAlgorithmException ee) {
Log.error("No algorithm found for MD5!", ee);
}
} else if (iconAck.getCode() == UploadIconAck.CODE_BAD_FORMAT) {
Log.debug("OSCAR: Uploaded icon was not in an unaccepted format.");
} else if (iconAck.getCode() == UploadIconAck.CODE_TOO_LARGE) {
Log.debug("OSCAR: Uploaded icon was too large to be accepted.");
} else {
Log.debug("OSCAR: Got unknown code from UploadIconAck: " + iconAck.getCode());
}
} else if (cmd instanceof SnacError) {
Log.debug("Got SnacError while setting icon: " + cmd);
}
// Clear the pending binary data from Krakens memory.
getMainSession().getSsiHierarchy().clearPendingAvatar();
}
});
}
}
}
} else if (cmd instanceof BuddyStatusCmd) {
BuddyStatusCmd bsc = (BuddyStatusCmd) cmd;
FullUserInfo info = bsc.getUserInfo();
PresenceType pType = PresenceType.available;
String vStatus = "";
if (info.getAwayStatus()) {
pType = PresenceType.away;
}
if ((info.getFlags() & FullUserInfo.MASK_WIRELESS) != 0) {
pType = PresenceType.xa;
vStatus = "Mobile: ";
}
if (getMainSession().getTransport().getType().equals(TransportType.icq) && info.getScreenname().matches("/^\\d+$/")) {
pType = ((OSCARTransport) getMainSession().getTransport()).convertICQStatusToXMPP(info.getIcqStatus());
}
List<ExtraInfoBlock> extraInfo = info.getExtraInfoBlocks();
if (extraInfo != null) {
for (ExtraInfoBlock i : extraInfo) {
ExtraInfoData data = i.getExtraData();
if (i.getType() == ExtraInfoBlock.TYPE_AVAILMSG) {
ByteBlock msgBlock = data.getData();
int len = BinaryTools.getUShort(msgBlock, 0);
if (len >= 0) {
byte[] msgBytes = msgBlock.subBlock(2, len).toByteArray();
String msg;
try {
msg = new String(msgBytes, "UTF-8");
} catch (UnsupportedEncodingException e1) {
continue;
}
if (msg.length() > 0) {
vStatus = vStatus + msg;
}
}
} else if (i.getType() == ExtraInfoBlock.TYPE_ICONHASH && JiveGlobals.getBooleanProperty("plugin.gateway." + getMainSession().getTransport().getType() + ".avatars", true)) {
try {
OSCARBuddy oscarBuddy = getMainSession().getBuddyManager().getBuddy(getMainSession().getTransport().convertIDToJID(info.getScreenname()));
Avatar curAvatar = oscarBuddy.getAvatar();
if (curAvatar == null || !curAvatar.getLegacyIdentifier().equals(org.jivesoftware.util.StringUtils.encodeHex(i.getExtraData().getData().toByteArray()))) {
IconRequest req = new IconRequest(info.getScreenname(), i.getExtraData());
request(req, new SnacRequestAdapter() {
@Override
public void handleResponse(SnacResponseEvent e) {
SnacCommand cmd = e.getSnacCommand();
if (cmd instanceof IconDataCmd) {
IconDataCmd idc = (IconDataCmd) cmd;
if (idc.getIconData().getLength() > 0 && idc.getIconData().getLength() != 90) {
Log.debug("Got icon data: " + idc);
if (getMainSession().getBuddyManager().isActivated()) {
try {
OSCARBuddy oscarBuddy = getMainSession().getBuddyManager().getBuddy(getMainSession().getTransport().convertIDToJID(idc.getScreenname()));
oscarBuddy.setAvatar(new Avatar(getMainSession().getTransport().convertIDToJID(idc.getScreenname()), org.jivesoftware.util.StringUtils.encodeHex(idc.getIconInfo().getExtraData().getData().toByteArray()), idc.getIconData().toByteArray()));
} catch (NotFoundException ee) {
// Apparently we don't care about this contact.
} catch (IllegalArgumentException ee) {
Log.debug("OSCAR: Got null avatar, ignoring.");
}
}
}
}
}
@Override
public void handleTimeout(SnacRequestTimeoutEvent e) {
Log.debug("Time out while waiting for icon data.");
}
});
}
} catch (NotFoundException ee) {
// Apparently we don't care about this contact.
}
}
}
}
if (getMainSession().getBuddyManager().isActivated()) {
try {
OSCARBuddy oscarBuddy = getMainSession().getBuddyManager().getBuddy(getMainSession().getTransport().convertIDToJID(info.getScreenname()));
oscarBuddy.setPresenceAndStatus(pType, vStatus);
} catch (NotFoundException ee) {
// Apparently we don't care about this contact.
Log.debug("OSCAR: Received presense notification for contact we don't care about: " + info.getScreenname());
}
} else {
getMainSession().getBuddyManager().storePendingStatus(getMainSession().getTransport().convertIDToJID(info.getScreenname()), pType, vStatus);
}
} else if (cmd instanceof BuddyOfflineCmd) {
BuddyOfflineCmd boc = (BuddyOfflineCmd) cmd;
if (getMainSession().getBuddyManager().isActivated()) {
try {
OSCARBuddy oscarBuddy = getMainSession().getBuddyManager().getBuddy(getMainSession().getTransport().convertIDToJID(boc.getScreenname()));
oscarBuddy.setPresence(PresenceType.unavailable);
} catch (NotFoundException ee) {
// Apparently we don't care about this contact.
}
} else {
getMainSession().getBuddyManager().storePendingStatus(getMainSession().getTransport().convertIDToJID(boc.getScreenname()), PresenceType.unavailable, null);
}
} else if (cmd instanceof TypingCmd) {
TypingCmd tc = (TypingCmd) cmd;
String sn = tc.getScreenname();
final ChatStateEventSource chatStateEventSource = getMainSession().getTransport().getChatStateEventSource();
final JID receiver = getMainSession().getJID();
final JID sender = getMainSession().getTransport().convertIDToJID(sn);
if (tc.getTypingState() == TypingCmd.STATE_TYPING) {
chatStateEventSource.isComposing(sender, receiver);
} else if (tc.getTypingState() == TypingCmd.STATE_PAUSED) {
chatStateEventSource.sendIsPaused(sender, receiver);
} else if (tc.getTypingState() == TypingCmd.STATE_NO_TEXT) {
chatStateEventSource.isInactive(sender, receiver);
}
}
}
use of net.sf.kraken.avatars.Avatar in project Openfire by igniterealtime.
the class XMPPSession method logIn.
/**
* @see net.sf.kraken.session.TransportSession#logIn(net.sf.kraken.type.PresenceType, String)
*/
@Override
public void logIn(PresenceType presenceType, String verboseStatus) {
final org.jivesoftware.smack.packet.Presence presence = new org.jivesoftware.smack.packet.Presence(org.jivesoftware.smack.packet.Presence.Type.available);
if (JiveGlobals.getBooleanProperty("plugin.gateway." + getTransport().getType() + ".avatars", true) && getAvatar() != null) {
Avatar avatar = getAvatar();
// Same thing in this case, so lets go ahead and set them.
avatar.setLegacyIdentifier(avatar.getXmppHash());
VCardUpdateExtension ext = new VCardUpdateExtension();
ext.setPhotoHash(avatar.getLegacyIdentifier());
presence.addExtension(ext);
}
final Presence.Mode pMode = ((XMPPTransport) getTransport()).convertGatewayStatusToXMPP(presenceType);
if (pMode != null) {
presence.setMode(pMode);
}
if (verboseStatus != null && verboseStatus.trim().length() > 0) {
presence.setStatus(verboseStatus);
}
setPendingPresenceAndStatus(presenceType, verboseStatus);
if (!this.isLoggedIn()) {
listener = new XMPPListener(this);
presenceHandler = new XMPPPresenceHandler(this);
runThread = new Thread() {
@Override
public void run() {
String userName = generateUsername(registration.getUsername());
conn = new XMPPConnection(config);
try {
conn.getSASLAuthentication().registerSASLMechanism("DIGEST-MD5", MySASLDigestMD5Mechanism.class);
if (getTransport().getType().equals(TransportType.facebook) && registration.getUsername().equals("{PLATFORM}")) {
conn.getSASLAuthentication().registerSASLMechanism("X-FACEBOOK-PLATFORM", FacebookConnectSASLMechanism.class);
conn.getSASLAuthentication().supportSASLMechanism("X-FACEBOOK-PLATFORM", 0);
}
Roster.setDefaultSubscriptionMode(SubscriptionMode.manual);
conn.connect();
conn.addConnectionListener(listener);
try {
conn.addPacketListener(presenceHandler, new PacketTypeFilter(org.jivesoftware.smack.packet.Presence.class));
// Use this to filter out anything we don't care about
conn.addPacketListener(listener, new OrFilter(new PacketTypeFilter(GoogleMailBoxPacket.class), new PacketExtensionFilter(GoogleNewMailExtension.ELEMENT_NAME, GoogleNewMailExtension.NAMESPACE)));
conn.login(userName, registration.getPassword(), xmppResource);
// send initial presence.
conn.sendPacket(presence);
conn.getChatManager().addChatListener(listener);
conn.getRoster().addRosterListener(listener);
if (JiveGlobals.getBooleanProperty("plugin.gateway." + getTransport().getType() + ".avatars", !TransportType.facebook.equals(getTransport().getType())) && getAvatar() != null) {
new Thread() {
@Override
public void run() {
Avatar avatar = getAvatar();
VCard vCard = new VCard();
try {
vCard.load(conn);
vCard.setAvatar(Base64.decode(avatar.getImageData()), avatar.getMimeType());
vCard.save(conn);
} catch (XMPPException e) {
Log.debug("XMPP: Error while updating vcard for avatar change.", e);
} catch (NotFoundException e) {
Log.debug("XMPP: Unable to find avatar while setting initial.", e);
}
}
}.start();
}
setLoginStatus(TransportLoginStatus.LOGGED_IN);
syncUsers();
if (getTransport().getType().equals(TransportType.gtalk) && JiveGlobals.getBooleanProperty("plugin.gateway.gtalk.mailnotifications", true)) {
conn.sendPacket(new IQWithPacketExtension(generateFullJID(getRegistration().getUsername()), new GoogleUserSettingExtension(null, true, null), IQ.Type.SET));
conn.sendPacket(new IQWithPacketExtension(generateFullJID(getRegistration().getUsername()), new GoogleMailNotifyExtension()));
mailCheck = new MailCheck();
timer.schedule(mailCheck, timerInterval, timerInterval);
}
} catch (XMPPException e) {
Log.debug(getTransport().getType() + " user's login/password does not appear to be correct: " + getRegistration().getUsername(), e);
setFailureStatus(ConnectionFailureReason.USERNAME_OR_PASSWORD_INCORRECT);
sessionDisconnectedNoReconnect(LocaleUtils.getLocalizedString("gateway.xmpp.passwordincorrect", "kraken"));
}
} catch (XMPPException e) {
Log.debug(getTransport().getType() + " user is not able to connect: " + getRegistration().getUsername(), e);
setFailureStatus(ConnectionFailureReason.CAN_NOT_CONNECT);
sessionDisconnected(LocaleUtils.getLocalizedString("gateway.xmpp.connectionfailed", "kraken"));
}
}
};
runThread.start();
}
}
Aggregations