Windows Presence information

I’‘m not sure whether this is the correct forum, but I couldn’'t think of a better place.

Microsoft seem to have integrated their products (Sharepoint, Office etc) with their Live Communication Server product to enable presence information to be presented to users.

The only disadvantage of replacing LCS with Spark and Wildfire (as I have done) is that the integration is lost.

Is their any way to replicate the functionality LCS provides to regain that functionality? I work within a software development house who are keen to provide any help they can, but I cannot really find any information on where to start.

From what I understand, there are a number of API’'s which query the information. So:

  1. Outlook recieves an email

  2. It then queries Exchange 2003 which obtains the primary SMTP address.

  3. Exchange (or possibly the client) assumes the email address matches the SIP address and queries the AD for their LCS server

  4. The LCS server is queried for the users status and that is reported back to Outlook

I assume with Wildfire we can obtain the presence information from an external component using the presence service so (4) isn’'t a problem.

The rest is pretty difficult in knowing where to start.

Does anyone have any more detail about the way in which it currently works, or suggestions of where to start?

Would this require a modification to Exchange? Could we build a generic version which doesn’'t rely on a particular email system?

Ideally, if the process could be interrupted on the client (just having the email address of the person to be queried) then queried Wildfire directly using the email address as known to Wildfire then that would be far more useful.

Any thoughts (or have I just waffled about something which others don’'t see a need for? )

DeeJay,

Very interesting questions. A major goal for us is to let users replace LCS/Communicator with Wildfire/Spark. We’‘re working on some initial Outlook integration for the next version of Wildfire Enterprise but it’'s not quite what you describe at this point.

One question is how Outlook gets presence info. Does installing Communicator add an Outlook plugin, or does Outlook look for presence information through some generic Windows API? If the latter, we could likely mimic that. I couldn’'t find any info through a quick Google search, however.

What we (Jive) will be looking at in particular is Outlook and Sharepoint integration. Wildfire already has several ways to get presence info externally:

  • HTTP-based presence plugin

  • The Smack API

  • Connect to Wildfire as an external component (what we do for Clearspace)

Regards,

Matt

Matt,

Thanks for the quick reply.

Information on how it works appears to be scarce. Reading behind the lines in articles such as this http://support.microsoft.com/kb/889938 implies that Office/Sharepoint etc talks to the local Messenger client on the workstation which retrieves the presence information.

If that’'s the case, maybe a Spark plug-in is all that will be required to provide information to the Office apps.

However, I’‘m unsure how the communication between the office app and the client occurs and whether it’'s easy to mimic the MSN Messenger/Communicator behaviour.

Setting the registry value to 2 looks like a clue, but then we’‘d have to figure out how Outlook tries to query for each user’'s presence from the “RTC service”. Sharepoint may be a bit easier. It has “web parts”, so perhaps one could be made for Wildfire fairly easily.

-Matt

I agree, Sharepoint should be the easiest.

In terms of working out how Outlook gets the information I’‘m limited in that I don’'t have any RTC servers left.

There is a client SDK which is well documented and also sample code for simple clients.

I wonder if Outlook just uses that API to get information about people in the rosta (much like you can use a shared MAPI connection to deal with email).

I suppose if we get the sample apps running against a LCS server and the Outlook functionality still works then that would tell us a lot. I could setup a couple of VM’'s to test that if it would help.

If it does use the API’'s I wonder if it would be possible to write a Spark plug-in which created a virtual rosta, mimiking a connection to an LCS server and adding virtual contacts using the email address of Spark contacts.

Failing that, perhaps we could replace the DLL which messenger (and all the sample apps) use to act as a Wildfire proxy instead?

To add a bit more (mis)information - if Office has been written to talk to the Real Time communication server Client API’'s, then there is a fair bit of information about them here:

http://www.microsoft.com/downloads/details.aspx?familyid=C3A7BD15-FD1C-4BF7-A505 -3F8FAF1E120A&displaylang=en

Also, the article here: http://www.outlookexchange.com/articles/glenscales/lcssprg1.asp describes the 2 DLL’'s that are used.

On a slightly different topic - regarding the upcoming Wildfire Enteprise release - what were the Outlook integration features that are due to be added? Is that the automated setting of IM status based on Outlook Meetings, Out of Office settings etc?

Edited to add: I’‘m not sure talking to myself is healthy, but we’'ve been looking at Sharepoint today. It would seem the entire presence information within sharepoint is determined based on one Sharepoint function.

We’'re in the process of modifying it now to talk to the WF Presence Service, and have also written an Outlook plug-in to do the same.

The function within Sharepoint is as follows.

function IMNRC(name)

{

if (name == null || name == ‘’’’)

return;

if (browseris.ie5up && browseris.win32)

{

var obj = window.event.srcElement;

var objSpan = obj;

var id = obj.id;

var fFirst = false;

if (!IMNDictionaryObj)

{

IMNDictionaryObj = new Object();

IMNNameDictionaryObj = new Object();

IMNSortableObj = new Object();

IMNShowOfflineObj = new Object();

if (!IMNOrigScrollFunc)

{

IMNOrigScrollFunc = window.onscroll;

window.onscroll = IMNScroll;

}

}

if (IMNDictionaryObj)

{

if (!IMNNameDictionaryObj[id])

{

IMNNameDictionaryObj[id] = name;

fFirst = true;

}

if (typeof(IMNDictionaryObj[id]) == “undefined”)

{

IMNDictionaryObj[id] = 1;

}

if (!IMNSortableObj[id] &&

(typeof(obj.Sortable) != “undefined”))

{

IMNSortableObj[id] = obj.Sortable;

if (!bIMNOnloadAttached)

{

if (EnsureIMNControl() && IMNControlObj.PresenceEnabled)

window.attachEvent(“onload”, IMNSortTable);

bIMNOnloadAttached = true;

}

}

if (!IMNShowOfflineObj[id] &&

(typeof(obj.ShowOfflinePawn) != “undefined”))

{

IMNShowOfflineObj[id] = obj.ShowOfflinePawn;

}

if (fFirst && EnsureIMNControl() && IMNControlObj.PresenceEnabled)

{

var state = 1, img;

state = IMNControlObj.GetStatus(name, id);

if (IMNIsOnlineState(state) || IMNSortableObj[id] ||

IMNShowOfflineObj[id])

{

img = IMNGetStatusImage(state, IMNSortableObj[id] ||

IMNShowOfflineObj[id]);

IMNUpdateImage(id, img);

IMNDictionaryObj[id] = state;

}

}

}

if (fFirst)

{

var objRet = IMNGetOOUILocation(obj);

objSpan = objRet.objSpan;

if (objSpan)

{

objSpan.onmouseover = IMNShowOOUIMouse;

objSpan.onfocusin = IMNShowOOUIKyb;

objSpan.onmouseout = IMNHideOOUI;

objSpan.onfocusout = IMNHideOOUI;

}

}

}

}

Message was edited by: DeeJay

After lots of digging, we figured out which DLL was responsible for displaying the presence information in Office 2003 and Sharepoint (which is actually the same one, all client side).

It’‘s a fairly substantial Office 2003 DLL, so it looks like we’'ve reached a dead-end as attempting to reverse engineer the DLL so to add the required Wildfire integration looks like too much work.

Actually emulating the LCS server (and writing an LCS client as a Spark plug-in) looks like the only sensible way to do it…

On a slightly brighter note, the Outlooks plug-in (though rough) now displays the online information read from the Wildfire presence plug-in as emails are selected within the application.

D

I was wondering whether anything has been done in this regard.

Are there any updates on this subject? I really need an answer or help as the ONLY thing that is keeping us from using OpenFire/Spark is that we must have a presence indicator in Outlook 2007. Anyone have any updates?

jcd1214 wrote:

Are there any updates on this subject?

I think there are no updates and won’t be in a near future. Openfire/Spark projects are now managed mostly by the community members and there are other goals on the roadmap. Office integration is too complex task at the moment. Of course the community is open for any code donation if someone is willing to implement that.