@Override
            public void run() { try {
                final Session session = SessionManager.getInstance().getSession(address);
                if (session == null || session.isClosed() || !VERSION_QUERY_ENABLED.getValue()){
                    return;
                }

                IQ versionRequest = new IQ(IQ.Type.get);
                versionRequest.setTo(session.getAddress());
                versionRequest.setFrom(session.getServerName());
                versionRequest.setChildElement("query", "jabber:iq:version");
                session.process(versionRequest);
            } catch (Exception e) {
                Log.error("Exception while trying to query a client ({}) for its software version.", session.getAddress(), e);
            }}
A SoftwareVersionManager is the main responsible for sending query to remote entity and 
Obtain software information from the remote entity using XEP-0092 .
@author Manasse Ngudia
xmppserver/src/main/java/org/jivesoftware/openfire/session/SoftwareVersionManager.java