On Mon, Nov 9, 2009 at 8:39 AM, Matt Meissner <[email protected]> wrote:
> > On Nov 6, 2009, at 10:25 AM, Matt Meissner wrote: > > >> On Nov 5, 2009, at 7:05 AM, Evan Schoenberg, M.D. wrote: >> >> Matt, >>> >>> >>> On Nov 4, 2009, at 4:32 PM, Matt Meissner wrote: >>> >>> It would be very helpful for my day job to have SIPE < >>>> http://sipe.sf.net/> in Adium. So I'm attempting to port it -- never >>>> having used Cocoa before, there's no better way to learn I guess. >>>> >>>> Here's my current state of affairs: >>>> <http://dl.getdropbox.com/u/535204/pidgin-sipe-1.7.0.zip> (545 >>>> KB) >>>> My plugin is in pidgin-sipe-1.7.0/contrib/SIPEAdiumPlugin. I'm building >>>> against Adium 1.4b12. >>>> >>>> My problem right now is that after adding a SIPE account, Adium crashes >>>> hard. Here's what's in system.log: >>>> >>>> Nov 1 21:59:12 Scooter [0x0-0x1f06f05].com.adiumX.adiumX[24744]: ** >>>> (process:24744): CRITICAL **: purple_accounts_add: assertion `account != >>>> NULL' failed >>>> >>> >>> Peter's correct about the other problem, but changing that alone isn't >>> enough to get you up and running. >>> >>> 1. Use [ESSIPEService registerService] to do your service registration. >>> alloc/init is coincidentally okay, but you should use Adium's public API >>> wherever possible to avoid fragility. >>> >>> 2. in -[ESSIPEService installLibpurplePlugin], you need to ask libpurple >>> to load the libpurple component of the plugin. Doing it in installPlugin is >>> too soon, as libpurple is not guaranteed to be loaded and ready to listen >>> yet. >>> >>> Currently, you do this: >>> PurplePlugin *prpl = purple_plugin_new(TRUE, NULL); >>> purple_init_plugin(prpl); >>> Looking at the docs for purple_plugin_new, we see: >>> /** >>> * Creates a new plugin structure. >>> * >>> * @param native Whether or not the plugin is native. >>> * @param path The path to the plugin, or @c NULL if statically >>> compiled. >>> * >>> * @return A new PurplePlugin structure. >>> */ >>> PurplePlugin *purple_plugin_new(gboolean native, const char *path); >>> >>> So this definitely isn't what you want, and doing it with a NULL path is >>> not going to load anything. >>> >>> Instead, what you need to do is to link statically against the built >>> plugin (that is, against the .a file that is produced when building it) and >>> call >>> purple_init_##x##_plugin() >>> from -[ESSIPEService installLibpurplePlugin]. >>> >>> where ##x## is the prpl's name, sipe. >>> >>> This, on the other hand, does require the plugin not be broken for static >>> compilation. sipe is... because, at the bottom of the sipe.c file, it says: >>> /* I had to redefined the function for it load, but works */ >>> gboolean purple_init_plugin(PurplePlugin *plugin){ >>> plugin->info = &(info); >>> init_plugin((plugin)); >>> sipe_plugin_load((plugin)); >>> return purple_plugin_register(plugin); >>> } >>> >>> Programmers: If you have to redefine something you shouldn't, you're >>> doing it wrong. That's a pasted-in version of PURPLE_INIT_PLUGIN() from >>> plugin.h... which just has the non-static-compilation bit. That'll need to >>> be changed to call PURPLE_INIT_PLUGIN() as other plugins do in order for >>> static loading to be possible. >>> >>> Hope that helps you get off on the right foot! >>> >>> Cheers, >>> Evan >>> >> >> >> Evan and Peter, >> >> Thanks for the ideas and help -- I'm crashing in a different place now, so >> that's progress. >> >> I'll have more time to look over the weekend. >> >> Thanks again, >> Matt >> > > Thanks to the help from Evan and Peter, I'm successfully connecting and > chatting using Adium and my SIPE server. Most recent source code is at < > http://dl.dropbox.com/u/535204/pidgin-sipe-1.7.0.zip> > > There are still a few outstanding items that I know about -- I need to > figure out how to modify the account preferences panel to allow for > protocol-specific settings and I've hardcoded a setting or two for my server > just to get things moving -- but I'm encouraged. > > Thanks again Evan and Peter and all of the Adium developers for their hard > work on the project. > > > This connects to LCS 2005 or 2007 or both?
